sa2kit 2.0.4 → 3.1.0
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/{UniversalFileService-GsP6D3Rc.d.ts → UniversalFileService-CC4d3wkc.d.ts} +2 -2
- package/dist/{UniversalFileService-BpvbZitV.d.mts → UniversalFileService-CzAE_G4V.d.mts} +2 -2
- package/dist/ai/llm/ui/miniapp/index.d.mts +2 -2
- package/dist/ai/llm/ui/miniapp/index.d.ts +2 -2
- package/dist/ai/llm/ui/rn/index.d.mts +2 -2
- package/dist/ai/llm/ui/rn/index.d.ts +2 -2
- package/dist/ai/llm/ui/web/index.d.mts +3 -3
- package/dist/ai/llm/ui/web/index.d.ts +3 -3
- package/dist/analytics/index.d.mts +1 -1
- package/dist/analytics/index.d.ts +1 -1
- package/dist/business/index.d.mts +1 -5
- package/dist/business/index.d.ts +1 -5
- package/dist/business/index.js +34 -1135
- package/dist/business/index.js.map +1 -1
- package/dist/business/index.mjs +5 -1105
- package/dist/business/index.mjs.map +1 -1
- package/dist/calendar/routes/index.d.mts +74 -1
- package/dist/calendar/routes/index.d.ts +74 -1
- package/dist/calendar/routes/index.js +186 -97
- package/dist/calendar/routes/index.js.map +1 -1
- package/dist/calendar/routes/index.mjs +178 -99
- package/dist/calendar/routes/index.mjs.map +1 -1
- package/dist/{chunk-RJP2BRJD.mjs → chunk-4OOANEJV.mjs} +2 -2
- package/dist/{chunk-RJP2BRJD.mjs.map → chunk-4OOANEJV.mjs.map} +1 -1
- package/dist/chunk-5FUAQLGC.mjs +14 -0
- package/dist/chunk-5FUAQLGC.mjs.map +1 -0
- package/dist/{chunk-IIVNHQEI.mjs → chunk-5GBDDXYL.mjs} +4 -3
- package/dist/chunk-5GBDDXYL.mjs.map +1 -0
- package/dist/{chunk-S732H246.js → chunk-6PMXAK7F.js} +2 -2
- package/dist/{chunk-S732H246.js.map → chunk-6PMXAK7F.js.map} +1 -1
- package/dist/chunk-6YLCRWKM.mjs +8 -0
- package/dist/chunk-6YLCRWKM.mjs.map +1 -0
- package/dist/chunk-CAYOQDBR.js +78 -0
- package/dist/chunk-CAYOQDBR.js.map +1 -0
- package/dist/{chunk-PTMSDNGO.mjs → chunk-CX2GHCAI.mjs} +4 -75
- package/dist/chunk-CX2GHCAI.mjs.map +1 -0
- package/dist/chunk-EBHPTFG6.mjs +82 -0
- package/dist/chunk-EBHPTFG6.mjs.map +1 -0
- package/dist/chunk-HQLKOXG7.js +16 -0
- package/dist/chunk-HQLKOXG7.js.map +1 -0
- package/dist/chunk-IS7O4LPI.js +146 -0
- package/dist/chunk-IS7O4LPI.js.map +1 -0
- package/dist/chunk-LGHUCQIU.js +93 -0
- package/dist/chunk-LGHUCQIU.js.map +1 -0
- package/dist/chunk-LKBIVQBT.mjs +34 -0
- package/dist/chunk-LKBIVQBT.mjs.map +1 -0
- package/dist/chunk-MIDXG6LS.js +32 -0
- package/dist/chunk-MIDXG6LS.js.map +1 -0
- package/dist/chunk-NDGHXVGS.js +25 -0
- package/dist/chunk-NDGHXVGS.js.map +1 -0
- package/dist/chunk-PA4ELVGI.js +20 -0
- package/dist/chunk-PA4ELVGI.js.map +1 -0
- package/dist/chunk-Q5VFBPMG.mjs +76 -0
- package/dist/chunk-Q5VFBPMG.mjs.map +1 -0
- package/dist/{chunk-WZDTNDYR.js → chunk-QSKLQX6H.js} +11 -11
- package/dist/{chunk-WZDTNDYR.js.map → chunk-QSKLQX6H.js.map} +1 -1
- package/dist/{chunk-QQ2WFYOD.js → chunk-S6YSGVWD.js} +4 -76
- package/dist/chunk-S6YSGVWD.js.map +1 -0
- package/dist/chunk-TNJ6LYX7.mjs +18 -0
- package/dist/chunk-TNJ6LYX7.mjs.map +1 -0
- package/dist/chunk-TTYCVBIQ.mjs +144 -0
- package/dist/chunk-TTYCVBIQ.mjs.map +1 -0
- package/dist/chunk-VJNDOYEC.js +41 -0
- package/dist/chunk-VJNDOYEC.js.map +1 -0
- package/dist/{chunk-J77KR2EV.mjs → chunk-WJ7IMUEJ.mjs} +3 -3
- package/dist/{chunk-J77KR2EV.mjs.map → chunk-WJ7IMUEJ.mjs.map} +1 -1
- package/dist/chunk-YTGUIRRH.js +10 -0
- package/dist/chunk-YTGUIRRH.js.map +1 -0
- package/dist/chunk-ZF7DKR5A.mjs +26 -0
- package/dist/chunk-ZF7DKR5A.mjs.map +1 -0
- package/dist/common/auth/client/index.d.mts +3209 -0
- package/dist/common/auth/client/index.d.ts +3209 -0
- package/dist/common/auth/client/index.js +13 -0
- package/dist/common/auth/client/index.mjs +4 -0
- package/dist/common/auth/components/index.d.mts +140 -0
- package/dist/common/auth/components/index.d.ts +140 -0
- package/dist/common/auth/components/index.js +899 -0
- package/dist/common/auth/components/index.js.map +1 -0
- package/dist/common/auth/components/index.mjs +875 -0
- package/dist/common/auth/components/index.mjs.map +1 -0
- package/dist/common/auth/hooks/index.d.mts +48 -0
- package/dist/common/auth/hooks/index.d.ts +48 -0
- package/dist/common/auth/hooks/index.js +19 -0
- package/dist/common/auth/hooks/index.mjs +6 -0
- package/dist/common/auth/index.d.mts +11 -7
- package/dist/common/auth/index.d.ts +11 -7
- package/dist/common/auth/index.js +7 -19
- package/dist/common/auth/index.mjs +3 -3
- package/dist/common/auth/react/index.d.mts +3056 -0
- package/dist/common/auth/react/index.d.ts +3056 -0
- package/dist/common/auth/react/index.js +31 -0
- package/dist/common/auth/react/index.js.map +1 -0
- package/dist/common/auth/react/index.mjs +21 -0
- package/dist/common/auth/react/index.mjs.map +1 -0
- package/dist/common/auth/rn/index.d.mts +3122 -0
- package/dist/common/auth/rn/index.d.ts +3122 -0
- package/dist/common/auth/rn/index.js +316 -0
- package/dist/common/auth/rn/index.js.map +1 -0
- package/dist/common/auth/rn/index.mjs +298 -0
- package/dist/common/auth/rn/index.mjs.map +1 -0
- package/dist/common/auth/schema/index.d.mts +1479 -0
- package/dist/common/auth/schema/index.d.ts +1479 -0
- package/dist/common/auth/schema/index.js +49 -0
- package/dist/common/auth/schema/index.mjs +4 -0
- package/dist/common/auth/server/index.d.mts +81 -25
- package/dist/common/auth/server/index.d.ts +81 -25
- package/dist/common/auth/server/index.js +146 -98
- package/dist/common/auth/server/index.js.map +1 -1
- package/dist/common/auth/server/index.mjs +125 -5
- package/dist/common/auth/server/index.mjs.map +1 -1
- package/dist/common/auth/services/index.d.mts +14 -0
- package/dist/common/auth/services/index.d.ts +14 -0
- package/dist/common/auth/services/index.js +20 -0
- package/dist/common/auth/services/index.js.map +1 -0
- package/dist/common/auth/services/index.mjs +13 -0
- package/dist/common/auth/services/index.mjs.map +1 -0
- package/dist/common/file/server/index.js +32 -32
- package/dist/common/file/server/index.mjs +3 -3
- package/dist/common/index.d.mts +13 -8
- package/dist/common/index.d.ts +13 -8
- package/dist/common/index.js +19 -18
- package/dist/common/index.mjs +8 -7
- package/dist/common/storage/index.js +13 -12
- package/dist/common/storage/index.mjs +3 -2
- package/dist/festivalCard/index.d.mts +3 -3
- package/dist/festivalCard/index.d.ts +3 -3
- package/dist/festivalCard/routes/index.d.mts +1 -1
- package/dist/festivalCard/routes/index.d.ts +1 -1
- package/dist/festivalCard/server/index.d.mts +2 -2
- package/dist/festivalCard/server/index.d.ts +2 -2
- package/dist/{festivalCardService-BFCRhJrq.d.ts → festivalCardService-B3GsnNpV.d.ts} +1 -1
- package/dist/{festivalCardService-GriR2VMc.d.mts → festivalCardService-CWhrLNE9.d.mts} +1 -1
- package/dist/i18n/index.d.mts +1 -1
- package/dist/i18n/index.d.ts +1 -1
- package/dist/imageCrop/index.d.mts +3 -3
- package/dist/imageCrop/index.d.ts +3 -3
- package/dist/index-Bd7cKF1j.d.mts +50 -0
- package/dist/{index-CLB80GCP.d.mts → index-D0cqaQEH.d.mts} +5 -5
- package/dist/{index-CLB80GCP.d.ts → index-D0cqaQEH.d.ts} +5 -5
- package/dist/index-DRQxtCDw.d.ts +50 -0
- package/dist/{index-1Ag7IBXN.d.ts → index-DZ5iJtNO.d.mts} +2 -44
- package/dist/{index-DdeZSeTJ.d.mts → index-DZ5iJtNO.d.ts} +2 -44
- package/dist/{index-BxZauNN_.d.ts → index-DoUo8IrU.d.mts} +8 -8
- package/dist/{index-BxZauNN_.d.mts → index-DoUo8IrU.d.ts} +8 -8
- package/dist/index.d.mts +6382 -105
- package/dist/index.d.ts +6382 -105
- package/dist/index.js +1037 -2616
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +976 -2555
- package/dist/index.mjs.map +1 -1
- package/dist/mmd/admin/index.d.mts +1 -1
- package/dist/mmd/admin/index.d.ts +1 -1
- package/dist/mmd/index.d.mts +1 -1
- package/dist/mmd/index.d.ts +1 -1
- package/dist/mmd/server/index.d.mts +3 -3
- package/dist/mmd/server/index.d.ts +3 -3
- package/dist/ossFile/server/index.js +32 -32
- package/dist/ossFile/server/index.mjs +3 -3
- package/dist/storage/index.js +12 -11
- package/dist/storage/index.mjs +2 -1
- package/dist/{types-DyG3ZV9V.d.mts → types-B6B210gX.d.mts} +1 -1
- package/dist/{types-DyG3ZV9V.d.ts → types-B6B210gX.d.ts} +1 -1
- package/dist/{types-BTiaMsBz.d.mts → types-Bdnte5EN.d.mts} +1 -1
- package/dist/{types-tQfupO6d.d.ts → types-Cs0CLvrH.d.mts} +1 -1
- package/dist/{types-tQfupO6d.d.mts → types-Cs0CLvrH.d.ts} +1 -1
- package/dist/{types-ERmJyjx8.d.ts → types-_rFX1atk.d.ts} +1 -1
- package/dist/universalExport/index.d.mts +3 -3
- package/dist/universalExport/index.d.ts +3 -3
- package/dist/universalFile/index.d.mts +5 -5
- package/dist/universalFile/index.d.ts +5 -5
- package/dist/universalFile/server/index.js +62 -62
- package/dist/universalFile/server/index.mjs +2 -2
- package/dist/useAuthActions-7S5dL7Oh.d.mts +77 -0
- package/dist/useAuthActions-7S5dL7Oh.d.ts +77 -0
- package/dist/vocaloidBooth/server/index.d.mts +3 -3
- package/dist/vocaloidBooth/server/index.d.ts +3 -3
- package/package.json +44 -111
- package/dist/auth/client/index.d.mts +0 -32
- package/dist/auth/client/index.d.ts +0 -32
- package/dist/auth/client/index.js +0 -21
- package/dist/auth/client/index.mjs +0 -4
- package/dist/auth/components/index.d.mts +0 -227
- package/dist/auth/components/index.d.ts +0 -227
- package/dist/auth/components/index.js +0 -327
- package/dist/auth/components/index.js.map +0 -1
- package/dist/auth/components/index.mjs +0 -319
- package/dist/auth/components/index.mjs.map +0 -1
- package/dist/auth/hooks/index.d.mts +0 -31
- package/dist/auth/hooks/index.d.ts +0 -31
- package/dist/auth/hooks/index.js +0 -17
- package/dist/auth/hooks/index.mjs +0 -4
- package/dist/auth/index.d.mts +0 -18
- package/dist/auth/index.d.ts +0 -18
- package/dist/auth/index.js +0 -151
- package/dist/auth/index.mjs +0 -10
- package/dist/auth/legacy/core/index.d.mts +0 -42
- package/dist/auth/legacy/core/index.d.ts +0 -42
- package/dist/auth/legacy/core/index.js +0 -242
- package/dist/auth/legacy/core/index.js.map +0 -1
- package/dist/auth/legacy/core/index.mjs +0 -226
- package/dist/auth/legacy/core/index.mjs.map +0 -1
- package/dist/auth/legacy/db/index.d.mts +0 -5
- package/dist/auth/legacy/db/index.d.ts +0 -5
- package/dist/auth/legacy/db/index.js +0 -261
- package/dist/auth/legacy/db/index.js.map +0 -1
- package/dist/auth/legacy/db/index.mjs +0 -250
- package/dist/auth/legacy/db/index.mjs.map +0 -1
- package/dist/auth/legacy/index.d.mts +0 -5
- package/dist/auth/legacy/index.d.ts +0 -5
- package/dist/auth/legacy/index.js +0 -1107
- package/dist/auth/legacy/index.js.map +0 -1
- package/dist/auth/legacy/index.mjs +0 -1086
- package/dist/auth/legacy/index.mjs.map +0 -1
- package/dist/auth/legacy/logic/index.d.mts +0 -9
- package/dist/auth/legacy/logic/index.d.ts +0 -9
- package/dist/auth/legacy/logic/index.js +0 -194
- package/dist/auth/legacy/logic/index.js.map +0 -1
- package/dist/auth/legacy/logic/index.mjs +0 -187
- package/dist/auth/legacy/logic/index.mjs.map +0 -1
- package/dist/auth/legacy/miniapp/index.d.mts +0 -5
- package/dist/auth/legacy/miniapp/index.d.ts +0 -5
- package/dist/auth/legacy/miniapp/index.js +0 -506
- package/dist/auth/legacy/miniapp/index.js.map +0 -1
- package/dist/auth/legacy/miniapp/index.mjs +0 -487
- package/dist/auth/legacy/miniapp/index.mjs.map +0 -1
- package/dist/auth/legacy/routes/index.d.mts +0 -53
- package/dist/auth/legacy/routes/index.d.ts +0 -53
- package/dist/auth/legacy/routes/index.js +0 -278
- package/dist/auth/legacy/routes/index.js.map +0 -1
- package/dist/auth/legacy/routes/index.mjs +0 -271
- package/dist/auth/legacy/routes/index.mjs.map +0 -1
- package/dist/auth/legacy/schema/index.d.mts +0 -401
- package/dist/auth/legacy/schema/index.d.ts +0 -401
- package/dist/auth/legacy/schema/index.js +0 -50
- package/dist/auth/legacy/schema/index.js.map +0 -1
- package/dist/auth/legacy/schema/index.mjs +0 -44
- package/dist/auth/legacy/schema/index.mjs.map +0 -1
- package/dist/auth/legacy/server/index.d.mts +0 -13
- package/dist/auth/legacy/server/index.d.ts +0 -13
- package/dist/auth/legacy/server/index.js +0 -21
- package/dist/auth/legacy/server/index.js.map +0 -1
- package/dist/auth/legacy/server/index.mjs +0 -19
- package/dist/auth/legacy/server/index.mjs.map +0 -1
- package/dist/auth/legacy/services/index.d.mts +0 -40
- package/dist/auth/legacy/services/index.d.ts +0 -40
- package/dist/auth/legacy/services/index.js +0 -258
- package/dist/auth/legacy/services/index.js.map +0 -1
- package/dist/auth/legacy/services/index.mjs +0 -252
- package/dist/auth/legacy/services/index.mjs.map +0 -1
- package/dist/auth/legacy/ui/miniapp/index.d.mts +0 -10
- package/dist/auth/legacy/ui/miniapp/index.d.ts +0 -10
- package/dist/auth/legacy/ui/miniapp/index.js +0 -298
- package/dist/auth/legacy/ui/miniapp/index.js.map +0 -1
- package/dist/auth/legacy/ui/miniapp/index.mjs +0 -290
- package/dist/auth/legacy/ui/miniapp/index.mjs.map +0 -1
- package/dist/auth/legacy/ui/web/index.d.mts +0 -22
- package/dist/auth/legacy/ui/web/index.d.ts +0 -22
- package/dist/auth/legacy/ui/web/index.js +0 -899
- package/dist/auth/legacy/ui/web/index.js.map +0 -1
- package/dist/auth/legacy/ui/web/index.mjs +0 -889
- package/dist/auth/legacy/ui/web/index.mjs.map +0 -1
- package/dist/auth/legacy/web/index.d.mts +0 -5
- package/dist/auth/legacy/web/index.d.ts +0 -5
- package/dist/auth/legacy/web/index.js +0 -1107
- package/dist/auth/legacy/web/index.js.map +0 -1
- package/dist/auth/legacy/web/index.mjs +0 -1086
- package/dist/auth/legacy/web/index.mjs.map +0 -1
- package/dist/auth/middleware/index.d.mts +0 -75
- package/dist/auth/middleware/index.d.ts +0 -75
- package/dist/auth/middleware/index.js +0 -15
- package/dist/auth/middleware/index.js.map +0 -1
- package/dist/auth/middleware/index.mjs +0 -6
- package/dist/auth/middleware/index.mjs.map +0 -1
- package/dist/auth/rn/index.d.mts +0 -64
- package/dist/auth/rn/index.d.ts +0 -64
- package/dist/auth/rn/index.js +0 -765
- package/dist/auth/rn/index.js.map +0 -1
- package/dist/auth/rn/index.mjs +0 -754
- package/dist/auth/rn/index.mjs.map +0 -1
- package/dist/auth/routes/index.d.mts +0 -261
- package/dist/auth/routes/index.d.ts +0 -261
- package/dist/auth/routes/index.js +0 -59
- package/dist/auth/routes/index.js.map +0 -1
- package/dist/auth/routes/index.mjs +0 -6
- package/dist/auth/routes/index.mjs.map +0 -1
- package/dist/auth/schema/index.d.mts +0 -789
- package/dist/auth/schema/index.d.ts +0 -789
- package/dist/auth/schema/index.js +0 -41
- package/dist/auth/schema/index.js.map +0 -1
- package/dist/auth/schema/index.mjs +0 -4
- package/dist/auth/schema/index.mjs.map +0 -1
- package/dist/auth/services/index.d.mts +0 -48
- package/dist/auth/services/index.d.ts +0 -48
- package/dist/auth/services/index.js +0 -34
- package/dist/auth/services/index.js.map +0 -1
- package/dist/auth/services/index.mjs +0 -5
- package/dist/auth/services/index.mjs.map +0 -1
- package/dist/base-api-client-ACKKt13v.d.mts +0 -277
- package/dist/base-api-client-ACKKt13v.d.ts +0 -277
- package/dist/base-api-client-B3wZZoaH.d.ts +0 -103
- package/dist/base-api-client-DrL35Ea2.d.mts +0 -103
- package/dist/chunk-37HYTHEC.mjs +0 -90
- package/dist/chunk-37HYTHEC.mjs.map +0 -1
- package/dist/chunk-5WV35FPV.js +0 -131
- package/dist/chunk-5WV35FPV.js.map +0 -1
- package/dist/chunk-DCRD5CZB.js +0 -573
- package/dist/chunk-DCRD5CZB.js.map +0 -1
- package/dist/chunk-DDX4JKFS.js +0 -19
- package/dist/chunk-DDX4JKFS.js.map +0 -1
- package/dist/chunk-DV6M7MFP.js +0 -283
- package/dist/chunk-DV6M7MFP.js.map +0 -1
- package/dist/chunk-HBF4HPRK.js +0 -186
- package/dist/chunk-HBF4HPRK.js.map +0 -1
- package/dist/chunk-HCI6JQOU.mjs +0 -183
- package/dist/chunk-HCI6JQOU.mjs.map +0 -1
- package/dist/chunk-I44HXJ3X.mjs +0 -17
- package/dist/chunk-I44HXJ3X.mjs.map +0 -1
- package/dist/chunk-IIVNHQEI.mjs.map +0 -1
- package/dist/chunk-IJ4YYWE3.mjs +0 -122
- package/dist/chunk-IJ4YYWE3.mjs.map +0 -1
- package/dist/chunk-J4BEIZUC.js +0 -92
- package/dist/chunk-J4BEIZUC.js.map +0 -1
- package/dist/chunk-OKPWFVXC.js +0 -24
- package/dist/chunk-OKPWFVXC.js.map +0 -1
- package/dist/chunk-PNOTQAYK.mjs +0 -560
- package/dist/chunk-PNOTQAYK.mjs.map +0 -1
- package/dist/chunk-PTMSDNGO.mjs.map +0 -1
- package/dist/chunk-Q2IAL7YV.js +0 -36
- package/dist/chunk-Q2IAL7YV.js.map +0 -1
- package/dist/chunk-QQ2WFYOD.js.map +0 -1
- package/dist/chunk-VQ54PUQV.js +0 -216
- package/dist/chunk-VQ54PUQV.js.map +0 -1
- package/dist/chunk-W5JEGA76.mjs +0 -33
- package/dist/chunk-W5JEGA76.mjs.map +0 -1
- package/dist/chunk-YGI7UU2D.mjs +0 -212
- package/dist/chunk-YGI7UU2D.mjs.map +0 -1
- package/dist/chunk-ZCLQSI5F.mjs +0 -271
- package/dist/chunk-ZCLQSI5F.mjs.map +0 -1
- package/dist/drizzle-auth-service-D-pljzCD.d.mts +0 -145
- package/dist/drizzle-auth-service-D3qryE_I.d.ts +0 -145
- package/dist/index-Bnh6VqFv.d.ts +0 -35
- package/dist/index-DNKZ7-R_.d.mts +0 -184
- package/dist/index-DNKZ7-R_.d.ts +0 -184
- package/dist/index-DPYkrKZf.d.mts +0 -35
- package/dist/types-C5vUWf9u.d.ts +0 -70
- package/dist/types-C_W_CoUD.d.ts +0 -99
- package/dist/types-DCRvasyH.d.mts +0 -99
- package/dist/types-IYCqCk2g.d.mts +0 -70
- /package/dist/{auth → common/auth}/client/index.js.map +0 -0
- /package/dist/{auth → common/auth}/client/index.mjs.map +0 -0
- /package/dist/{auth → common/auth}/hooks/index.js.map +0 -0
- /package/dist/{auth → common/auth}/hooks/index.mjs.map +0 -0
- /package/dist/{auth → common/auth/schema}/index.js.map +0 -0
- /package/dist/{auth → common/auth/schema}/index.mjs.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/common/auth/components/headless/SignInForm.tsx","../../../../src/common/auth/components/headless/RegisterForm.tsx","../../../../src/common/auth/components/headless/VerifyOtpForm.tsx","../../../../src/common/auth/components/styled/modal-shared.tsx","../../../../src/common/auth/components/styled/ForgotPasswordModal.tsx","../../../../src/common/auth/components/styled/LoginModal.tsx","../../../../src/common/auth/components/styled/RegisterModal.tsx","../../../../src/common/auth/components/styled/AuthGuard.tsx","../../../../src/common/auth/components/styled/UserMenu.tsx"],"names":["useAuthActions","useState","validatePhoneNumber","validateEmail","validatePassword","React","useEffect","createPortal","useAuthContext","X","Phone","Lock","EyeOff","Eye","Mail","User","LogOut","LogIn"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { useAuthActions } from '../../hooks/useAuthActions';\nimport type { HeadlessSignInFormProps, SignInFormState } from '../types';\nimport { validateEmail, validatePassword, validatePhoneNumber } from '../utils';\n\nexport function SignInForm({\n authClient,\n initialMode = 'email-password',\n onSuccess,\n onError,\n children,\n}: HeadlessSignInFormProps) {\n const actions = useAuthActions(authClient);\n const [mode, setMode] = useState(initialMode);\n const [step, setStep] = useState<'credentials' | 'otp'>('credentials');\n const [email, setEmail] = useState('');\n const [phone, setPhone] = useState('');\n const [password, setPassword] = useState('');\n const [otp, setOtp] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fail = (message: string) => {\n setError(message);\n onError?.(message);\n };\n\n const sendOtp = async () => {\n setLoading(true);\n setError(null);\n try {\n if (mode === 'phone-otp') {\n if (!validatePhoneNumber(phone)) {\n fail('请输入正确的手机号');\n return;\n }\n const result = await actions.sendPhoneOtp(phone.trim());\n if (!result.success) {\n fail(result.error);\n return;\n }\n setStep('otp');\n } else if (mode === 'email-otp') {\n if (!validateEmail(email)) {\n fail('请输入正确的邮箱');\n return;\n }\n const result = await actions.sendEmailOtp(email.trim(), 'sign-in');\n if (!result.success) {\n fail(result.error);\n return;\n }\n setStep('otp');\n }\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e?: React.FormEvent) => {\n e?.preventDefault();\n setLoading(true);\n setError(null);\n\n try {\n if (mode === 'email-password') {\n if (!validateEmail(email)) return fail('请输入正确的邮箱');\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n const result = await actions.signInWithEmail(email.trim(), password);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (mode === 'phone-password') {\n if (!validatePhoneNumber(phone)) return fail('请输入正确的手机号');\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n const result = await actions.signInWithPhonePassword(phone.trim(), password);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (mode === 'phone-otp') {\n if (step === 'credentials') {\n await sendOtp();\n return;\n }\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n const result = await actions.verifyPhoneOtp(phone.trim(), otp);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (mode === 'email-otp') {\n if (step === 'credentials') {\n await sendOtp();\n return;\n }\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n const result = await actions.signInWithEmailOtp(email.trim(), otp);\n if (!result.success) return fail(result.error);\n onSuccess?.();\n }\n } finally {\n setLoading(false);\n }\n };\n\n const state: SignInFormState = {\n mode,\n step,\n email,\n phone,\n password,\n otp,\n loading,\n error,\n setMode: (next) => {\n setMode(next);\n setStep('credentials');\n setError(null);\n },\n setEmail,\n setPhone,\n setPassword,\n setOtp,\n sendOtp,\n handleSubmit,\n };\n\n return <>{children(state)}</>;\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useAuthActions } from '../../hooks/useAuthActions';\nimport type { HeadlessRegisterFormProps, RegisterFormHeadlessState } from '../types';\nimport { validateEmail, validatePassword, validatePhoneNumber } from '../utils';\n\nexport function RegisterFormHeadless({\n authClient,\n initialChannel = 'email',\n onSuccess,\n onError,\n children,\n}: HeadlessRegisterFormProps) {\n const actions = useAuthActions(authClient);\n const [channel, setChannel] = useState<'email' | 'phone'>(initialChannel);\n const [step, setStep] = useState<'credentials' | 'otp'>('credentials');\n const [email, setEmail] = useState('');\n const [phone, setPhone] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [name, setName] = useState('');\n const [otp, setOtp] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fail = (message: string) => {\n setError(message);\n onError?.(message);\n };\n\n const sendOtp = async () => {\n setLoading(true);\n setError(null);\n try {\n if (!validatePhoneNumber(phone)) {\n fail('请输入正确的手机号');\n return;\n }\n const result = await actions.sendPhoneOtp(phone.trim());\n if (!result.success) {\n fail(result.error);\n return;\n }\n setStep('otp');\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e?: React.FormEvent) => {\n e?.preventDefault();\n setLoading(true);\n setError(null);\n\n try {\n if (channel === 'email') {\n if (!validateEmail(email)) return fail('请输入正确的邮箱');\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n if (password !== confirmPassword) return fail('两次密码不一致');\n if (!name.trim()) return fail('请填写昵称');\n const result = await actions.signUpWithEmail(email.trim(), password, name.trim());\n if (!result.success) return fail(result.error);\n onSuccess?.();\n return;\n }\n\n if (step === 'credentials') {\n const pwd = validatePassword(password);\n if (!pwd.valid) return fail(pwd.message ?? '密码无效');\n if (password !== confirmPassword) return fail('两次密码不一致');\n await sendOtp();\n return;\n }\n\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n const verify = await actions.verifyPhoneOtp(phone.trim(), otp);\n if (!verify.success) return fail(verify.error);\n onSuccess?.();\n } finally {\n setLoading(false);\n }\n };\n\n const state: RegisterFormHeadlessState = {\n channel,\n step,\n email,\n phone,\n password,\n confirmPassword,\n name,\n otp,\n loading,\n error,\n setChannel: (next) => {\n setChannel(next);\n setStep('credentials');\n setError(null);\n },\n setEmail,\n setPhone,\n setPassword,\n setConfirmPassword,\n setName,\n setOtp,\n sendOtp,\n handleSubmit,\n };\n\n return <>{children(state)}</>;\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useAuthActions } from '../../hooks/useAuthActions';\nimport type { HeadlessVerifyOtpFormProps, VerifyOtpFormState } from '../types';\nimport { validateEmail, validatePhoneNumber } from '../utils';\n\nexport function VerifyOtpForm({\n authClient,\n channel,\n target,\n onSuccess,\n onError,\n children,\n}: HeadlessVerifyOtpFormProps) {\n const actions = useAuthActions(authClient);\n const [otp, setOtp] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fail = (message: string) => {\n setError(message);\n onError?.(message);\n };\n\n const resendOtp = async () => {\n setLoading(true);\n setError(null);\n try {\n if (channel === 'phone') {\n if (!validatePhoneNumber(target)) return fail('手机号无效');\n const result = await actions.sendPhoneOtp(target.trim());\n if (!result.success) fail(result.error);\n } else {\n if (!validateEmail(target)) return fail('邮箱无效');\n const result = await actions.sendEmailOtp(target.trim(), 'sign-in');\n if (!result.success) fail(result.error);\n }\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e?: React.FormEvent) => {\n e?.preventDefault();\n setLoading(true);\n setError(null);\n try {\n if (!/^\\d{4,8}$/.test(otp)) return fail('请输入验证码');\n if (channel === 'phone') {\n const result = await actions.verifyPhoneOtp(target.trim(), otp);\n if (!result.success) return fail(result.error);\n } else {\n const result = await actions.signInWithEmailOtp(target.trim(), otp);\n if (!result.success) return fail(result.error);\n }\n onSuccess?.();\n } finally {\n setLoading(false);\n }\n };\n\n const state: VerifyOtpFormState = {\n channel,\n target,\n otp,\n loading,\n error,\n setOtp,\n resendOtp,\n handleSubmit,\n };\n\n return <>{children(state)}</>;\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nconst overlayClass =\n 'fixed top-0 left-0 right-0 bottom-0 w-screen h-screen bg-black/50 backdrop-blur-sm flex items-center justify-center z-[9999] p-4';\nconst panelClass =\n 'bg-white rounded-2xl shadow-xl w-full max-w-[420px] max-h-[90vh] overflow-y-auto relative';\nconst closeBtnClass =\n 'absolute top-5 right-5 bg-transparent border-none text-gray-500 cursor-pointer p-2 rounded-lg transition-all hover:bg-gray-100 hover:text-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 min-w-9 min-h-9 flex items-center justify-center';\nconst inputClass =\n 'w-full py-3 px-4 pl-12 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10 placeholder:text-gray-400 disabled:bg-gray-50 disabled:text-gray-500 disabled:cursor-not-allowed';\nconst submitClass =\n 'w-full bg-blue-500 text-white border-none py-3.5 px-6 rounded-lg text-base font-medium cursor-pointer transition-all mt-2 min-h-[52px] hover:bg-blue-600 hover:-translate-y-0.5 hover:shadow-lg hover:shadow-blue-500/30 active:translate-y-0 disabled:bg-gray-400 disabled:cursor-not-allowed disabled:transform-none disabled:shadow-none focus:outline-none focus:ring-2 focus:ring-blue-700 focus:ring-offset-2';\nconst errorClass =\n 'text-red-500 text-sm my-4 p-3 bg-red-50 border border-red-200 rounded-lg leading-relaxed';\nconst linkBtnClass =\n 'bg-transparent border-none text-blue-500 cursor-pointer text-sm font-medium underline px-1 py-0.5 rounded transition-all hover:text-blue-600 hover:bg-blue-50 hover:no-underline focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2';\n\nexport function useClientMounted() {\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n return mounted;\n}\n\nexport function AuthModalPortal({ children }: { children: React.ReactNode }) {\n const mounted = useClientMounted();\n if (!mounted) return null;\n return createPortal(children, document.body);\n}\n\nexport const authModalStyles = {\n overlayClass,\n panelClass,\n closeBtnClass,\n inputClass,\n submitClass,\n errorClass,\n linkBtnClass,\n};\n","'use client';\n\nimport React, { useState } from 'react';\nimport { X, Phone, Lock, Eye, EyeOff } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport type { ForgotPasswordModalProps } from '../types';\nimport { validatePassword, validatePhoneNumber } from '../utils';\nimport { AuthModalPortal, authModalStyles } from './modal-shared';\n\nexport function ForgotPasswordModal({ isOpen, onClose, onSuccess }: ForgotPasswordModalProps) {\n const { requestPhonePasswordReset, resetPhonePassword } = useAuthContext();\n const [phone, setPhone] = useState('');\n const [otp, setOtp] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n const [countdown, setCountdown] = useState(0);\n\n const startCountdown = () => {\n setCountdown(60);\n const timer = setInterval(() => {\n setCountdown((prev) => {\n if (prev <= 1) {\n clearInterval(timer);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n };\n\n const handleSendCode = async () => {\n setError('');\n if (!validatePhoneNumber(phone)) {\n setError('请输入正确的手机号');\n return;\n }\n setLoading(true);\n try {\n const result = await requestPhonePasswordReset(phone.trim());\n if (!result.success) {\n setError(result.error);\n return;\n }\n startCountdown();\n } finally {\n setLoading(false);\n }\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError('');\n if (!validatePhoneNumber(phone)) return setError('请输入正确的手机号');\n const pwd = validatePassword(newPassword);\n if (!pwd.valid) return setError(pwd.message ?? '密码无效');\n if (newPassword !== confirmPassword) return setError('两次密码不一致');\n if (!/^\\d{4,8}$/.test(otp)) return setError('请输入验证码');\n\n setLoading(true);\n try {\n const result = await resetPhonePassword(phone.trim(), otp, newPassword);\n if (!result.success) {\n setError(result.error);\n return;\n }\n onSuccess?.();\n } finally {\n setLoading(false);\n }\n };\n\n if (!isOpen) return null;\n\n return (\n <AuthModalPortal>\n <div className={authModalStyles.overlayClass} style={{ margin: 0 }} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <div className={authModalStyles.panelClass} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className={authModalStyles.closeBtnClass} onClick={onClose}>\n <X size={20} />\n </button>\n\n <div className=\"px-6 pt-6 pb-4 text-center border-b border-gray-100\">\n <h2 className=\"text-2xl font-semibold text-gray-800 mb-2\">重置密码</h2>\n <p className=\"text-gray-500 text-sm\">请输入手机号和验证码重置密码</p>\n </div>\n\n <form onSubmit={handleSubmit} className=\"p-6\">\n <div className=\"mb-5\">\n <label htmlFor=\"reset-phone\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 手机号\n </label>\n <div className=\"relative flex items-center\">\n <Phone size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"reset-phone\"\n type=\"tel\"\n value={phone}\n onChange={(e) => setPhone(e.target.value)}\n placeholder=\"请输入手机号\"\n className={authModalStyles.inputClass}\n disabled={loading}\n />\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"reset-otp\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 验证码\n </label>\n <div className=\"relative flex items-center\">\n <input\n id=\"reset-otp\"\n type=\"text\"\n inputMode=\"numeric\"\n value={otp}\n onChange={(e) => setOtp(e.target.value)}\n placeholder=\"请输入验证码\"\n className=\"w-full py-3 px-4 pr-28 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10\"\n disabled={loading}\n maxLength={8}\n />\n <button\n type=\"button\"\n className=\"absolute right-2 top-1/2 -translate-y-1/2 bg-transparent border-none text-blue-500 text-sm font-medium cursor-pointer px-2 py-1 rounded transition-all whitespace-nowrap hover:bg-blue-50 disabled:text-gray-400 disabled:cursor-not-allowed\"\n onClick={handleSendCode}\n disabled={loading || countdown > 0}\n >\n {countdown > 0 ? `${countdown}秒后重试` : '发送验证码'}\n </button>\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"reset-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 新密码\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"reset-password\"\n type={showPassword ? 'text' : 'password'}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n placeholder=\"请输入新密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={loading}\n />\n <button\n type=\"button\"\n className=\"absolute right-4 bg-transparent border-none text-gray-400 cursor-pointer p-1 rounded transition-all flex items-center justify-center min-w-6 min-h-6 hover:text-gray-600 hover:bg-gray-100\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={loading}\n >\n {showPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"reset-confirm-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 确认密码\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"reset-confirm-password\"\n type={showConfirmPassword ? 'text' : 'password'}\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder=\"请再次输入新密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={loading}\n />\n <button\n type=\"button\"\n className=\"absolute right-4 bg-transparent border-none text-gray-400 cursor-pointer p-1 rounded transition-all flex items-center justify-center min-w-6 min-h-6 hover:text-gray-600 hover:bg-gray-100\"\n onClick={() => setShowConfirmPassword((v) => !v)}\n disabled={loading}\n >\n {showConfirmPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n\n {error && <div className={authModalStyles.errorClass}>{error}</div>}\n\n <button type=\"submit\" className={authModalStyles.submitClass} disabled={loading}>\n {loading ? '提交中...' : '重置密码'}\n </button>\n </form>\n </div>\n </div>\n </AuthModalPortal>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { X, User, Lock, Eye, EyeOff, Mail, Phone } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport { SignInForm } from '../headless/SignInForm';\nimport type { LoginModalProps, SignInMode } from '../types';\nimport { AuthModalPortal, authModalStyles } from './modal-shared';\nimport { ForgotPasswordModal } from './ForgotPasswordModal';\n\nconst MODE_LABELS: Record<SignInMode, string> = {\n 'phone-password': '手机密码',\n 'email-password': '邮箱密码',\n 'phone-otp': '手机验证码',\n 'email-otp': '邮箱验证码',\n};\n\nexport function LoginModal({\n isOpen,\n onClose,\n onSuccess,\n onSwitchToRegister,\n defaultMode = 'phone-password',\n}: LoginModalProps) {\n const { authClient, refreshSession } = useAuthContext();\n const [showPassword, setShowPassword] = useState(false);\n const [showForgotPassword, setShowForgotPassword] = useState(false);\n\n const handleSuccess = async () => {\n await refreshSession();\n onSuccess?.();\n };\n\n if (!isOpen) return null;\n\n return (\n <AuthModalPortal>\n <div className={authModalStyles.overlayClass} style={{ margin: 0 }} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <SignInForm authClient={authClient} initialMode={defaultMode} onSuccess={handleSuccess}>\n {(state) => (\n <div className={authModalStyles.panelClass} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className={authModalStyles.closeBtnClass} onClick={onClose}>\n <X size={20} />\n </button>\n\n <div className=\"px-6 pt-6 pb-4 text-center border-b border-gray-100\">\n <h2 className=\"text-2xl font-semibold text-gray-800 mb-2\">用户登录</h2>\n <p className=\"text-gray-500 text-sm\">选择登录方式并填写信息</p>\n </div>\n\n <div className=\"px-6 pt-4 flex flex-wrap gap-2\">\n {(Object.keys(MODE_LABELS) as SignInMode[]).map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => state.setMode(mode)}\n className={`px-3 py-1.5 text-xs rounded-full border transition-all ${\n state.mode === mode\n ? 'bg-blue-500 text-white border-blue-500'\n : 'bg-white text-gray-600 border-gray-200 hover:border-blue-300'\n }`}\n >\n {MODE_LABELS[mode]}\n </button>\n ))}\n </div>\n\n <form onSubmit={state.handleSubmit} className=\"p-6\">\n {(state.mode === 'email-password' || state.mode === 'email-otp') && state.step === 'credentials' && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-email\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 邮箱\n </label>\n <div className=\"relative flex items-center\">\n <Mail size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={state.email}\n onChange={(e) => state.setEmail(e.target.value)}\n placeholder=\"请输入邮箱\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {(state.mode === 'phone-password' || state.mode === 'phone-otp') && state.step === 'credentials' && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-phone\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 手机号\n </label>\n <div className=\"relative flex items-center\">\n <Phone size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-phone\"\n type=\"tel\"\n autoComplete=\"tel\"\n value={state.phone}\n onChange={(e) => state.setPhone(e.target.value)}\n placeholder=\"请输入手机号\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {(state.mode === 'email-password' || state.mode === 'phone-password') && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 密码\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-password\"\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"current-password\"\n value={state.password}\n onChange={(e) => state.setPassword(e.target.value)}\n placeholder=\"请输入密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={state.loading}\n />\n <button\n type=\"button\"\n className=\"absolute right-4 bg-transparent border-none text-gray-400 cursor-pointer p-1 rounded transition-all flex items-center justify-center min-w-6 min-h-6 hover:text-gray-600 hover:bg-gray-100\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={state.loading}\n >\n {showPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n )}\n\n {(state.mode === 'phone-otp' || state.mode === 'email-otp') && state.step === 'otp' && (\n <div className=\"mb-5\">\n <label htmlFor=\"login-otp\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 验证码\n </label>\n <div className=\"relative flex items-center\">\n <User size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"login-otp\"\n type=\"text\"\n inputMode=\"numeric\"\n value={state.otp}\n onChange={(e) => state.setOtp(e.target.value)}\n placeholder=\"请输入验证码\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n maxLength={8}\n />\n </div>\n </div>\n )}\n\n {(state.mode === 'phone-password' || state.mode === 'phone-otp') && state.step === 'credentials' && (\n <div className=\"text-right -mt-2 mb-4\">\n <button type=\"button\" onClick={() => setShowForgotPassword(true)} className={authModalStyles.linkBtnClass}>\n 忘记密码?\n </button>\n </div>\n )}\n\n {state.error && <div className={authModalStyles.errorClass}>{state.error}</div>}\n\n <button type=\"submit\" className={authModalStyles.submitClass} disabled={state.loading}>\n {state.loading\n ? '处理中...'\n : state.step === 'otp'\n ? '验证并登录'\n : state.mode === 'phone-otp' || state.mode === 'email-otp'\n ? '发送验证码'\n : '登录'}\n </button>\n\n {onSwitchToRegister && (\n <div className=\"text-center mt-5 pt-4 border-t border-gray-100\">\n <span className=\"text-gray-500 text-sm mr-1\">还没有账号?</span>\n <button type=\"button\" onClick={onSwitchToRegister} className={authModalStyles.linkBtnClass}>\n 立即注册\n </button>\n </div>\n )}\n </form>\n </div>\n )}\n </SignInForm>\n </div>\n\n <ForgotPasswordModal\n isOpen={showForgotPassword}\n onClose={() => setShowForgotPassword(false)}\n onSuccess={() => {\n setShowForgotPassword(false);\n handleSuccess();\n }}\n />\n </AuthModalPortal>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { X, User, Lock, Phone, Mail, Eye, EyeOff } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport { RegisterFormHeadless } from '../headless/RegisterForm';\nimport type { RegisterModalProps } from '../types';\nimport { AuthModalPortal, authModalStyles } from './modal-shared';\n\nexport function RegisterModal({ isOpen, onClose, onSuccess, onSwitchToLogin }: RegisterModalProps) {\n const { authClient, refreshSession } = useAuthContext();\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n\n const handleSuccess = async () => {\n await refreshSession();\n onSuccess?.();\n };\n\n if (!isOpen) return null;\n\n return (\n <AuthModalPortal>\n <div className={authModalStyles.overlayClass} style={{ margin: 0 }} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <RegisterFormHeadless authClient={authClient} initialChannel=\"phone\" onSuccess={handleSuccess}>\n {(state) => (\n <div className={authModalStyles.panelClass} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className={authModalStyles.closeBtnClass} onClick={onClose}>\n <X size={20} />\n </button>\n\n <div className=\"px-6 pt-6 pb-4 text-center border-b border-gray-100\">\n <h2 className=\"text-2xl font-semibold text-gray-800 mb-2\">用户注册</h2>\n <p className=\"text-gray-500 text-sm\">请填写以下信息创建账户</p>\n </div>\n\n <div className=\"px-6 pt-4 flex gap-2\">\n <button\n type=\"button\"\n onClick={() => state.setChannel('phone')}\n className={`px-3 py-1.5 text-xs rounded-full border transition-all ${\n state.channel === 'phone'\n ? 'bg-blue-500 text-white border-blue-500'\n : 'bg-white text-gray-600 border-gray-200 hover:border-blue-300'\n }`}\n >\n 手机号注册\n </button>\n <button\n type=\"button\"\n onClick={() => state.setChannel('email')}\n className={`px-3 py-1.5 text-xs rounded-full border transition-all ${\n state.channel === 'email'\n ? 'bg-blue-500 text-white border-blue-500'\n : 'bg-white text-gray-600 border-gray-200 hover:border-blue-300'\n }`}\n >\n 邮箱注册\n </button>\n </div>\n\n <form onSubmit={state.handleSubmit} className=\"p-6\">\n {state.channel === 'email' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-email\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 邮箱 *\n </label>\n <div className=\"relative flex items-center\">\n <Mail size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={state.email}\n onChange={(e) => state.setEmail(e.target.value)}\n placeholder=\"请输入邮箱\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {state.channel === 'phone' && state.step === 'credentials' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-phone\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 手机号 *\n </label>\n <div className=\"relative flex items-center\">\n <Phone size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-phone\"\n type=\"tel\"\n autoComplete=\"tel\"\n value={state.phone}\n onChange={(e) => state.setPhone(e.target.value)}\n placeholder=\"请输入手机号\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {state.channel === 'email' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-name\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 昵称 *\n </label>\n <div className=\"relative flex items-center\">\n <User size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-name\"\n type=\"text\"\n autoComplete=\"name\"\n value={state.name}\n onChange={(e) => state.setName(e.target.value)}\n placeholder=\"请输入昵称\"\n className={authModalStyles.inputClass}\n disabled={state.loading}\n />\n </div>\n </div>\n )}\n\n {state.step === 'credentials' && (\n <>\n <div className=\"mb-5\">\n <label htmlFor=\"register-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 密码 *\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-password\"\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n value={state.password}\n onChange={(e) => state.setPassword(e.target.value)}\n placeholder=\"请输入密码(至少6位)\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={state.loading}\n />\n <button\n type=\"button\"\n className=\"absolute right-4 bg-transparent border-none text-gray-400 cursor-pointer p-1 rounded transition-all flex items-center justify-center min-w-6 min-h-6 hover:text-gray-600 hover:bg-gray-100\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={state.loading}\n >\n {showPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n\n <div className=\"mb-5\">\n <label htmlFor=\"register-confirm-password\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 确认密码 *\n </label>\n <div className=\"relative flex items-center\">\n <Lock size={18} className=\"absolute left-4 text-gray-400 z-[1] pointer-events-none\" />\n <input\n id=\"register-confirm-password\"\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n value={state.confirmPassword}\n onChange={(e) => state.setConfirmPassword(e.target.value)}\n placeholder=\"请再次输入密码\"\n className={`${authModalStyles.inputClass} pr-12`}\n disabled={state.loading}\n />\n <button\n type=\"button\"\n className=\"absolute right-4 bg-transparent border-none text-gray-400 cursor-pointer p-1 rounded transition-all flex items-center justify-center min-w-6 min-h-6 hover:text-gray-600 hover:bg-gray-100\"\n onClick={() => setShowConfirmPassword((v) => !v)}\n disabled={state.loading}\n >\n {showConfirmPassword ? <EyeOff size={18} /> : <Eye size={18} />}\n </button>\n </div>\n </div>\n </>\n )}\n\n {state.channel === 'phone' && state.step === 'otp' && (\n <div className=\"mb-5\">\n <label htmlFor=\"register-otp\" className=\"block mb-1.5 text-sm font-medium text-gray-700\">\n 验证码 *\n </label>\n <input\n id=\"register-otp\"\n type=\"text\"\n inputMode=\"numeric\"\n value={state.otp}\n onChange={(e) => state.setOtp(e.target.value)}\n placeholder=\"请输入验证码\"\n className=\"w-full py-3 px-4 border-2 border-gray-200 rounded-lg text-base transition-all box-border min-h-12 bg-white focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/10\"\n disabled={state.loading}\n maxLength={8}\n />\n </div>\n )}\n\n {state.error && <div className={authModalStyles.errorClass}>{state.error}</div>}\n\n <button type=\"submit\" className={authModalStyles.submitClass} disabled={state.loading}>\n {state.loading\n ? '处理中...'\n : state.channel === 'phone' && state.step === 'credentials'\n ? '发送验证码'\n : state.channel === 'phone' && state.step === 'otp'\n ? '完成注册'\n : '注册'}\n </button>\n\n {onSwitchToLogin && (\n <div className=\"text-center mt-5 pt-4 border-t border-gray-100\">\n <span className=\"text-gray-500 text-sm mr-1\">已有账号?</span>\n <button type=\"button\" onClick={onSwitchToLogin} className={authModalStyles.linkBtnClass}>\n 立即登录\n </button>\n </div>\n )}\n </form>\n </div>\n )}\n </RegisterFormHeadless>\n </div>\n </AuthModalPortal>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport type { AuthGuardProps } from '../types';\nimport { LoginModal } from './LoginModal';\nimport { RegisterModal } from './RegisterModal';\n\nexport function AuthGuard({ children, fallback, requireAuth = true }: AuthGuardProps) {\n const { isAuthenticated, loading, refreshSession } = useAuthContext();\n const [showLoginModal, setShowLoginModal] = useState(false);\n const [showRegisterModal, setShowRegisterModal] = useState(false);\n\n useEffect(() => {\n if (!loading && requireAuth && !isAuthenticated) {\n setShowLoginModal(true);\n setShowRegisterModal(false);\n }\n }, [loading, requireAuth, isAuthenticated]);\n\n const handleAuthSuccess = async () => {\n await refreshSession();\n setShowLoginModal(false);\n setShowRegisterModal(false);\n };\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center min-h-[200px] text-gray-500 flex-col gap-3\">\n <div className=\"w-8 h-8 border-[3px] border-gray-200 border-t-blue-500 rounded-full animate-spin\" />\n <div>验证登录状态...</div>\n </div>\n );\n }\n\n if (requireAuth && !isAuthenticated) {\n return (\n <>\n {fallback ?? (\n <div className=\"flex items-center justify-center min-h-[200px] text-gray-500 flex-col gap-4 p-6 text-center\">\n <div className=\"text-5xl opacity-50\">🔒</div>\n <div className=\"text-lg font-medium\">请先登录以访问此页面</div>\n <div className=\"text-sm opacity-70\">登录或注册后即可查看相关内容</div>\n <div className=\"flex gap-3 mt-2\">\n <button\n type=\"button\"\n className=\"px-4 py-2 rounded-lg bg-blue-500 text-white text-sm font-medium hover:bg-blue-600 transition-colors\"\n onClick={() => {\n setShowRegisterModal(false);\n setShowLoginModal(true);\n }}\n >\n 登录\n </button>\n <button\n type=\"button\"\n className=\"px-4 py-2 rounded-lg border border-gray-200 text-gray-700 text-sm font-medium hover:border-blue-300 hover:text-blue-600 transition-colors\"\n onClick={() => {\n setShowLoginModal(false);\n setShowRegisterModal(true);\n }}\n >\n 注册\n </button>\n </div>\n </div>\n )}\n <LoginModal\n isOpen={showLoginModal}\n onClose={() => setShowLoginModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToRegister={() => {\n setShowLoginModal(false);\n setShowRegisterModal(true);\n }}\n />\n <RegisterModal\n isOpen={showRegisterModal}\n onClose={() => setShowRegisterModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToLogin={() => {\n setShowRegisterModal(false);\n setShowLoginModal(true);\n }}\n />\n </>\n );\n }\n\n return <>{children}</>;\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { LogOut, LogIn, User } from 'lucide-react';\nimport { useAuthContext } from '../../context/AuthProvider';\nimport type { UserMenuProps } from '../types';\nimport { LoginModal } from './LoginModal';\nimport { RegisterModal } from './RegisterModal';\n\nexport function UserMenu({ customMenuItems = [], className }: UserMenuProps) {\n const { user, isAuthenticated, signOut, refreshSession } = useAuthContext();\n const [isOpen, setIsOpen] = useState(false);\n const [showLoginModal, setShowLoginModal] = useState(false);\n const [showRegisterModal, setShowRegisterModal] = useState(false);\n\n useEffect(() => {\n const handleGlobalClick = () => setIsOpen(false);\n if (isOpen) document.addEventListener('click', handleGlobalClick);\n return () => document.removeEventListener('click', handleGlobalClick);\n }, [isOpen]);\n\n const visibleCustomMenuItems = customMenuItems.filter((item) => {\n if (item.requireAuth === true) return isAuthenticated;\n if (item.requireAuth === false) return !isAuthenticated;\n return true;\n });\n\n const handleAuthSuccess = async () => {\n await refreshSession();\n setShowLoginModal(false);\n setShowRegisterModal(false);\n };\n\n const displayName = user?.name || user?.phoneNumber || user?.email || '用户';\n\n return (\n <div className={`relative inline-block ${className ?? ''}`}>\n <button\n type=\"button\"\n className=\"flex items-center gap-2 px-3 py-2 bg-slate-50 text-slate-500 border border-slate-200 rounded-lg cursor-pointer transition-all min-w-11 min-h-11 text-sm font-medium hover:bg-slate-200 hover:text-slate-800 focus:outline-none focus:ring-2 focus:ring-blue-500/10\"\n onClick={() => setIsOpen((v) => !v)}\n >\n <User size={24} />\n {isAuthenticated && user && (\n <span className=\"max-w-[120px] overflow-hidden text-ellipsis whitespace-nowrap\">{displayName}</span>\n )}\n </button>\n\n {isOpen && (\n <div\n className=\"absolute top-[calc(100%+0.5rem)] right-0 z-[1000] min-w-[200px] bg-white border border-slate-200 rounded-xl shadow-lg max-h-[90vh] overflow-y-auto p-2\"\n onClick={(e) => e.stopPropagation()}\n >\n {isAuthenticated && user ? (\n <>\n <div className=\"p-3 mb-2 bg-slate-50 rounded-lg\">\n <div className=\"text-sm font-semibold text-slate-800 mb-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {user.name || '未设置名称'}\n </div>\n <div className=\"text-xs text-slate-500 mb-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {user.phoneNumber || user.email}\n </div>\n {user.role && (\n <div className=\"text-xs text-blue-500 font-medium\">{user.role === 'admin' ? '管理员' : '普通用户'}</div>\n )}\n </div>\n\n {visibleCustomMenuItems.length > 0 && (\n <>\n <div className=\"h-px bg-slate-200 my-2\" />\n {visibleCustomMenuItems.map((item) => {\n const IconComponent = item.icon;\n return (\n <button\n key={item.id}\n type=\"button\"\n className=\"flex items-center gap-3 w-full p-3 bg-transparent border-none rounded-lg text-gray-700 text-sm font-medium cursor-pointer transition-all text-left min-h-11 hover:bg-slate-100 hover:text-slate-800\"\n onClick={() => {\n item.onClick();\n setIsOpen(false);\n }}\n >\n {IconComponent && <IconComponent size={16} />}\n <span>{item.label}</span>\n </button>\n );\n })}\n </>\n )}\n\n <div className=\"h-px bg-slate-200 my-2\" />\n <button\n type=\"button\"\n className=\"flex items-center gap-3 w-full p-3 bg-transparent border-none rounded-lg text-gray-700 text-sm font-medium cursor-pointer transition-all text-left min-h-11 hover:bg-red-50 hover:text-red-600\"\n onClick={async () => {\n await signOut();\n setIsOpen(false);\n }}\n >\n <LogOut size={16} />\n <span>退出登录</span>\n </button>\n </>\n ) : (\n <>\n <button\n type=\"button\"\n className=\"flex items-center gap-3 w-full p-3 bg-transparent border-none rounded-lg text-gray-700 text-sm font-medium cursor-pointer transition-all text-left min-h-11 hover:bg-slate-100 hover:text-slate-800\"\n onClick={() => {\n setShowLoginModal(true);\n setIsOpen(false);\n }}\n >\n <LogIn size={16} />\n <span>登录</span>\n </button>\n <button\n type=\"button\"\n className=\"flex items-center gap-3 w-full p-3 bg-transparent border-none rounded-lg text-gray-700 text-sm font-medium cursor-pointer transition-all text-left min-h-11 hover:bg-slate-100 hover:text-slate-800\"\n onClick={() => {\n setShowRegisterModal(true);\n setIsOpen(false);\n }}\n >\n <User size={16} />\n <span>注册</span>\n </button>\n\n {visibleCustomMenuItems.length > 0 && (\n <>\n <div className=\"h-px bg-slate-200 my-2\" />\n {visibleCustomMenuItems.map((item) => {\n const IconComponent = item.icon;\n return (\n <button\n key={item.id}\n type=\"button\"\n className=\"flex items-center gap-3 w-full p-3 bg-transparent border-none rounded-lg text-gray-700 text-sm font-medium cursor-pointer transition-all text-left min-h-11 hover:bg-slate-100 hover:text-slate-800\"\n onClick={() => {\n item.onClick();\n setIsOpen(false);\n }}\n >\n {IconComponent && <IconComponent size={16} />}\n <span>{item.label}</span>\n </button>\n );\n })}\n </>\n )}\n </>\n )}\n </div>\n )}\n\n <LoginModal\n isOpen={showLoginModal}\n onClose={() => setShowLoginModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToRegister={() => {\n setShowLoginModal(false);\n setShowRegisterModal(true);\n }}\n />\n\n <RegisterModal\n isOpen={showRegisterModal}\n onClose={() => setShowRegisterModal(false)}\n onSuccess={handleAuthSuccess}\n onSwitchToLogin={() => {\n setShowRegisterModal(false);\n setShowLoginModal(true);\n }}\n />\n </div>\n );\n}\n"]}
|