@delmaredigital/payload-better-auth 0.3.7 → 0.3.8
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/README.md +12 -1
- package/dist/adapter/collections.d.ts.map +1 -1
- package/dist/adapter/collections.js +126 -88
- package/dist/adapter/collections.js.map +1 -1
- package/dist/adapter/index.js +197 -150
- package/dist/adapter/index.js.map +1 -1
- package/dist/components/BeforeLogin.d.ts +1 -1
- package/dist/components/BeforeLogin.d.ts.map +1 -1
- package/dist/components/BeforeLogin.js +15 -7
- package/dist/components/BeforeLogin.js.map +1 -1
- package/dist/components/LoginView.d.ts +2 -2
- package/dist/components/LoginView.d.ts.map +1 -1
- package/dist/components/LoginView.js +660 -218
- package/dist/components/LoginView.js.map +1 -1
- package/dist/components/LoginViewWrapper.d.ts +1 -1
- package/dist/components/LoginViewWrapper.d.ts.map +1 -1
- package/dist/components/LoginViewWrapper.js +14 -4
- package/dist/components/LoginViewWrapper.js.map +1 -1
- package/dist/components/LogoutButton.d.ts +1 -1
- package/dist/components/LogoutButton.d.ts.map +1 -1
- package/dist/components/LogoutButton.js +19 -11
- package/dist/components/LogoutButton.js.map +1 -1
- package/dist/components/PasskeyRegisterButton.d.ts +2 -2
- package/dist/components/PasskeyRegisterButton.d.ts.map +1 -1
- package/dist/components/PasskeyRegisterButton.js +20 -16
- package/dist/components/PasskeyRegisterButton.js.map +1 -1
- package/dist/components/PasskeySignInButton.d.ts +2 -2
- package/dist/components/PasskeySignInButton.d.ts.map +1 -1
- package/dist/components/PasskeySignInButton.js +14 -12
- package/dist/components/PasskeySignInButton.js.map +1 -1
- package/dist/components/auth/ForgotPasswordView.d.ts +1 -1
- package/dist/components/auth/ForgotPasswordView.d.ts.map +1 -1
- package/dist/components/auth/ForgotPasswordView.js +133 -43
- package/dist/components/auth/ForgotPasswordView.js.map +1 -1
- package/dist/components/auth/ResetPasswordView.d.ts +1 -1
- package/dist/components/auth/ResetPasswordView.d.ts.map +1 -1
- package/dist/components/auth/ResetPasswordView.js +154 -50
- package/dist/components/auth/ResetPasswordView.js.map +1 -1
- package/dist/components/auth/index.js +2 -2
- package/dist/components/auth/index.js.map +1 -1
- package/dist/components/management/ApiKeysManagementClient.d.ts +2 -2
- package/dist/components/management/ApiKeysManagementClient.d.ts.map +1 -1
- package/dist/components/management/ApiKeysManagementClient.js +539 -222
- package/dist/components/management/ApiKeysManagementClient.js.map +1 -1
- package/dist/components/management/PasskeysManagementClient.d.ts +2 -2
- package/dist/components/management/PasskeysManagementClient.d.ts.map +1 -1
- package/dist/components/management/PasskeysManagementClient.js +215 -92
- package/dist/components/management/PasskeysManagementClient.js.map +1 -1
- package/dist/components/management/SecurityNavLinks.d.ts +1 -1
- package/dist/components/management/SecurityNavLinks.d.ts.map +1 -1
- package/dist/components/management/SecurityNavLinks.js +51 -24
- package/dist/components/management/SecurityNavLinks.js.map +1 -1
- package/dist/components/management/TwoFactorManagementClient.d.ts +2 -2
- package/dist/components/management/TwoFactorManagementClient.d.ts.map +1 -1
- package/dist/components/management/TwoFactorManagementClient.js +270 -111
- package/dist/components/management/TwoFactorManagementClient.js.map +1 -1
- package/dist/components/management/index.js +2 -2
- package/dist/components/management/index.js.map +1 -1
- package/dist/components/management/views/ApiKeysView.d.ts +1 -1
- package/dist/components/management/views/ApiKeysView.d.ts.map +1 -1
- package/dist/components/management/views/ApiKeysView.js +19 -4
- package/dist/components/management/views/ApiKeysView.js.map +1 -1
- package/dist/components/management/views/PasskeysView.d.ts +1 -1
- package/dist/components/management/views/PasskeysView.d.ts.map +1 -1
- package/dist/components/management/views/PasskeysView.js +16 -4
- package/dist/components/management/views/PasskeysView.js.map +1 -1
- package/dist/components/management/views/TwoFactorView.d.ts +1 -1
- package/dist/components/management/views/TwoFactorView.d.ts.map +1 -1
- package/dist/components/management/views/TwoFactorView.js +16 -4
- package/dist/components/management/views/TwoFactorView.js.map +1 -1
- package/dist/components/management/views/index.js +2 -2
- package/dist/components/management/views/index.js.map +1 -1
- package/dist/components/twoFactor/TwoFactorSetupView.d.ts +1 -1
- package/dist/components/twoFactor/TwoFactorSetupView.d.ts.map +1 -1
- package/dist/components/twoFactor/TwoFactorSetupView.js +240 -87
- package/dist/components/twoFactor/TwoFactorSetupView.js.map +1 -1
- package/dist/components/twoFactor/TwoFactorVerifyView.d.ts +1 -1
- package/dist/components/twoFactor/TwoFactorVerifyView.d.ts.map +1 -1
- package/dist/components/twoFactor/TwoFactorVerifyView.js +108 -45
- package/dist/components/twoFactor/TwoFactorVerifyView.js.map +1 -1
- package/dist/components/twoFactor/index.js +2 -2
- package/dist/components/twoFactor/index.js.map +1 -1
- package/dist/exports/client.js +9 -10
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/components.js +2 -2
- package/dist/exports/components.js.map +1 -1
- package/dist/exports/management.js +3 -3
- package/dist/exports/management.js.map +1 -1
- package/dist/exports/rsc.js +2 -2
- package/dist/exports/rsc.js.map +1 -1
- package/dist/generated-types.js +4 -2
- package/dist/generated-types.js.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/plugin/index.js +198 -162
- package/dist/plugin/index.js.map +1 -1
- package/dist/scripts/generate-types.js +66 -50
- package/dist/scripts/generate-types.js.map +1 -1
- package/dist/types/apiKey.js +7 -2
- package/dist/types/apiKey.js.map +1 -1
- package/dist/types/betterAuth.js +23 -2
- package/dist/types/betterAuth.js.map +1 -1
- package/dist/utils/access.js +78 -81
- package/dist/utils/access.js.map +1 -1
- package/dist/utils/apiKeyAccess.js +65 -72
- package/dist/utils/apiKeyAccess.js.map +1 -1
- package/dist/utils/betterAuthDefaults.js +8 -8
- package/dist/utils/betterAuthDefaults.js.map +1 -1
- package/dist/utils/detectAuthConfig.js +8 -11
- package/dist/utils/detectAuthConfig.js.map +1 -1
- package/dist/utils/detectEnabledPlugins.js +6 -7
- package/dist/utils/detectEnabledPlugins.js.map +1 -1
- package/dist/utils/firstUserAdmin.js +18 -20
- package/dist/utils/firstUserAdmin.js.map +1 -1
- package/dist/utils/generateScopes.js +40 -41
- package/dist/utils/generateScopes.js.map +1 -1
- package/dist/utils/session.js +8 -9
- package/dist/utils/session.js.map +1 -1
- package/package.json +97 -26
- package/src/adapter/collections.ts +621 -0
- package/src/adapter/index.ts +712 -0
- package/src/components/BeforeLogin.tsx +39 -0
- package/src/components/LoginView.tsx +1516 -0
- package/src/components/LoginViewWrapper.tsx +35 -0
- package/src/components/LogoutButton.tsx +58 -0
- package/src/components/PasskeyRegisterButton.tsx +105 -0
- package/src/components/PasskeySignInButton.tsx +96 -0
- package/src/components/auth/ForgotPasswordView.tsx +274 -0
- package/src/components/auth/ResetPasswordView.tsx +331 -0
- package/src/components/auth/index.ts +8 -0
- package/src/components/management/ApiKeysManagementClient.tsx +988 -0
- package/src/components/management/PasskeysManagementClient.tsx +409 -0
- package/src/components/management/SecurityNavLinks.tsx +117 -0
- package/src/components/management/TwoFactorManagementClient.tsx +560 -0
- package/src/components/management/index.ts +20 -0
- package/src/components/management/views/ApiKeysView.tsx +57 -0
- package/src/components/management/views/PasskeysView.tsx +42 -0
- package/src/components/management/views/TwoFactorView.tsx +42 -0
- package/src/components/management/views/index.ts +10 -0
- package/src/components/twoFactor/TwoFactorSetupView.tsx +515 -0
- package/src/components/twoFactor/TwoFactorVerifyView.tsx +238 -0
- package/src/components/twoFactor/index.ts +8 -0
- package/src/exports/client.ts +77 -0
- package/src/exports/components.ts +30 -0
- package/src/exports/management.ts +25 -0
- package/src/exports/rsc.ts +11 -0
- package/src/generated-types.ts +269 -0
- package/src/index.ts +135 -0
- package/src/plugin/index.ts +834 -0
- package/src/scripts/generate-types.ts +269 -0
- package/src/types/apiKey.ts +63 -0
- package/src/types/betterAuth.ts +253 -0
- package/src/utils/access.ts +410 -0
- package/src/utils/apiKeyAccess.ts +443 -0
- package/src/utils/betterAuthDefaults.ts +102 -0
- package/src/utils/detectAuthConfig.ts +47 -0
- package/src/utils/detectEnabledPlugins.ts +69 -0
- package/src/utils/firstUserAdmin.ts +164 -0
- package/src/utils/generateScopes.ts +150 -0
- package/src/utils/session.ts +91 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginView.js","sourceRoot":"","sources":["../../src/components/LoginView.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EACL,uBAAuB,GAExB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAkB,MAAM,oBAAoB,CAAA;AA0D5E;;GAEG;AACH,SAAS,cAAc,CACrB,IAA2C,EAC3C,YAAkD,EAClD,eAAwB;IAExB,uCAAuC;IACvC,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAA;IAE9B,0BAA0B;IAC1B,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAEvB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAEzE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAChC,CAAC;AAQD,MAAM,UAAU,SAAS,CAAC,EACxB,UAAU,EAAE,cAAc,EAC1B,IAAI,EACJ,KAAK,GAAG,OAAO,EACf,cAAc,GAAG,QAAQ,EACzB,YAAY,GAAG,OAAO,EACtB,eAAe,GAAG,KAAK,EACvB,aAAa,GAAG,MAAM,EACtB,YAAY,GAAG,MAAM,EACrB,iBAAiB,GAAG,MAAM,EAC1B,oBAAoB,GAAG,MAAM,EAC7B,gBAAgB,GACD;IACf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,aAAa;IACb,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAW,OAAO,CAAC,CAAA;IAE3D,cAAc;IACd,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE1D,WAAW;IACX,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACzE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3D,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC5D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEvD,uBAAuB;IACvB,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,CAAA;IAChF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC,CAAA;IAC7E,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,GAAG,QAAQ,CAAC,oBAAoB,KAAK,IAAI,CAAC,CAAA;IAErG,kCAAkC;IAClC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAErD,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,cAAc,IAAI,uBAAuB,EAAE,CAAA;IAEnE,8CAA8C;IAC9C,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,UAAU,YAAY;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;gBAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;gBAExC,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;oBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAA0B,CAAA;oBACnD,gCAAgC;oBAChC,IAAI,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC;wBACxD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;wBAC3B,OAAM;oBACR,CAAC;yBAAM,CAAC;wBACN,eAAe,CAAC,IAAI,CAAC,CAAA;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;YACD,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;QACD,YAAY,EAAE,CAAA;QACd,uDAAuD;IACzD,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,CAAA;IAE3D,oDAAoD;IACpD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,iDAAiD;YACjD,0DAA0D;YAC1D,KAAK,CAAC,iDAAiD,EAAE;gBACvD,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,SAAS;aACvB,CAAC;iBACC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,kFAAkF;gBAClF,4CAA4C;gBAC5C,mBAAmB,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAA;YACzC,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,mBAAmB,CAAC,KAAK,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAA;QACN,CAAC;aAAM,CAAC;YACN,mBAAmB,CAAC,aAAa,KAAK,IAAI,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAEnB,oDAAoD;IACpD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAC5B,mCAAmC;YACnC,KAAK,CAAC,yBAAyB,EAAE;gBAC/B,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,SAAS;aACvB,CAAC;iBACC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,qCAAqC;gBACrC,kBAAkB,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAA;YACxC,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,wFAAwF;gBACxF,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC,CAAC,CAAA;QACN,CAAC;aAAM,CAAC;YACN,kBAAkB,CAAC,YAAY,KAAK,IAAI,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAElB,4DAA4D;IAC5D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,oBAAoB,KAAK,MAAM,EAAE,CAAC;YACpC,kDAAkD;YAClD,KAAK,CAAC,kCAAkC,EAAE;gBACxC,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,SAAS;aACvB,CAAC;iBACC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,oDAAoD;gBACpD,0BAA0B,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAA;YAChD,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,qEAAqE;gBACrE,0BAA0B,CAAC,IAAI,CAAC,CAAA;YAClC,CAAC,CAAC,CAAA;QACN,CAAC;aAAM,CAAC;YACN,0BAA0B,CAAC,oBAAoB,KAAK,IAAI,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAE1B,KAAK,UAAU,YAAY,CAAC,CAAY;QACtC,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvB,eAAe,CAAC,KAAK,CAAC,CAAA;QAEtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBACvC,KAAK;gBACL,QAAQ;aACT,CAAC,CAAA;YAEF,+EAA+E;YAC/E,IAAI,MAAM,CAAC,IAAI,IAAI,mBAAmB,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvF,WAAW,CAAC,WAAW,CAAC,CAAA;gBACxB,UAAU,CAAC,KAAK,CAAC,CAAA;gBACjB,OAAM;YACR,CAAC;YAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAA;gBACvD,UAAU,CAAC,KAAK,CAAC,CAAA;gBACjB,OAAM;YACR,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAA0B,CAAA;gBACnD,yBAAyB;gBACzB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC;oBACzD,eAAe,CAAC,IAAI,CAAC,CAAA;oBACrB,UAAU,CAAC,KAAK,CAAC,CAAA;oBACjB,OAAM;gBACR,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBAC3B,MAAM,CAAC,OAAO,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,sCAAsC,CAAC,CAAA;YAChD,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,KAAK,UAAU,YAAY,CAAC,CAAY;QACtC,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAEvB,2BAA2B;QAC3B,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YACjC,QAAQ,CAAC,wBAAwB,CAAC,CAAA;YAClC,UAAU,CAAC,KAAK,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QAED,qCAAqC;QACrC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,wCAAwC,CAAC,CAAA;YAClD,UAAU,CAAC,KAAK,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBACvC,KAAK;gBACL,QAAQ;gBACR,IAAI;gBACJ,IAAI,EAAE,iBAAiB;aACqB,CAAC,CAAA;YAE/C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAA;gBACvD,UAAU,CAAC,KAAK,CAAC,CAAA;gBACjB,OAAM;YACR,CAAC;YAED,0EAA0E;YAC1E,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACtB,kFAAkF;gBAClF,8EAA8E;gBAC9E,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;gBAE/C,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;oBAC7B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAA0B,CAAA;oBAC1D,yBAAyB;oBACzB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC;wBACzD,eAAe,CAAC,IAAI,CAAC,CAAA;wBACrB,UAAU,CAAC,KAAK,CAAC,CAAA;wBACjB,OAAM;oBACR,CAAC;gBACH,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBAC3B,MAAM,CAAC,OAAO,EAAE,CAAA;YAClB,CAAC;iBAAM,CAAC;gBACN,wEAAwE;gBACxE,iBAAiB,CAAC,kEAAkE,CAAC,CAAA;gBACrF,WAAW,CAAC,OAAO,CAAC,CAAA;gBACpB,WAAW,CAAC,EAAE,CAAC,CAAA;gBACf,kBAAkB,CAAC,EAAE,CAAC,CAAA;gBACtB,UAAU,CAAC,KAAK,CAAC,CAAA;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,sCAAsC,CAAC,CAAA;YAChD,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,KAAK,UAAU,oBAAoB,CAAC,CAAY;QAC9C,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAEvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBAC/C,KAAK;gBACL,UAAU,EAAE,gBAAgB,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,uBAAuB;aACjF,CAAC,CAAA;YAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,4BAA4B,CAAC,CAAA;gBAC9D,UAAU,CAAC,KAAK,CAAC,CAAA;gBACjB,OAAM;YACR,CAAC;YAED,8BAA8B;YAC9B,WAAW,CAAC,WAAW,CAAC,CAAA;YACxB,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,sCAAsC,CAAC,CAAA;YAChD,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,KAAK,UAAU,gBAAgB,CAAC,CAAY;QAC1C,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,cAAc,CAAC,IAAI,CAAC,CAAA;QACpB,QAAQ,CAAC,IAAI,CAAC,CAAA;QAEd,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;YAEpE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,2BAA2B,CAAC,CAAA;gBAC7D,cAAc,CAAC,KAAK,CAAC,CAAA;gBACrB,OAAM;YACR,CAAC;YAED,kEAAkE;YAClE,6DAA6D;YAC7D,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;gBAC/C,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;oBAC7B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAA0B,CAAA;oBAC1D,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC;wBACzD,eAAe,CAAC,IAAI,CAAC,CAAA;wBACrB,cAAc,CAAC,KAAK,CAAC,CAAA;wBACrB,OAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC3B,MAAM,CAAC,OAAO,EAAE,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,sCAAsC,CAAC,CAAA;YAChD,cAAc,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IAED,SAAS,UAAU,CAAC,OAAiB;QACnC,WAAW,CAAC,OAAO,CAAC,CAAA;QACpB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvB,qCAAqC;QACrC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,WAAW,CAAC,EAAE,CAAC,CAAA;YACf,kBAAkB,CAAC,EAAE,CAAC,CAAA;QACxB,CAAC;aAAM,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,WAAW,CAAC,EAAE,CAAC,CAAA;YACf,kBAAkB,CAAC,EAAE,CAAC,CAAA;QACxB,CAAC;aAAM,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACxC,WAAW,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAED,SAAS,iBAAiB;QACxB,UAAU,CAAC,OAAO,CAAC,CAAA;IACrB,CAAC;IAED,KAAK,UAAU,mBAAmB;QAChC,IAAI,CAAC,gBAAgB;YAAE,OAAM;QAE7B,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,eAAe,CAAC,KAAK,CAAC,CAAA;QAEtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;YAE5C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,+BAA+B,CAAC,CAAA;gBACjE,iBAAiB,CAAC,KAAK,CAAC,CAAA;gBACxB,OAAM;YACR,CAAC;YAED,mFAAmF;YACnF,qFAAqF;YACrF,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;YAE/C,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAA0B,CAAA;gBAC1D,yBAAyB;gBACzB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC;oBACzD,eAAe,CAAC,IAAI,CAAC,CAAA;oBACrB,iBAAiB,CAAC,KAAK,CAAC,CAAA;oBACxB,OAAM;gBACR,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBAC3B,MAAM,CAAC,OAAO,EAAE,CAAA;YAClB,CAAC;iBAAM,CAAC;gBACN,wEAAwE;gBACxE,QAAQ,CAAC,4DAA4D,CAAC,CAAA;gBACtE,iBAAiB,CAAC,KAAK,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAC3D,QAAQ,CAAC,qDAAqD,CAAC,CAAA;YACjE,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAA;YAChF,CAAC;YACD,iBAAiB,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,UAAU,aAAa;QAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;QACtB,eAAe,CAAC,KAAK,CAAC,CAAA;QACtB,MAAM,CAAC,OAAO,EAAE,CAAA;IAClB,CAAC;IAED,uCAAuC;IACvC,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CACL,cACE,KAAK,EAAE;gBACL,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;gBACxB,UAAU,EAAE,iBAAiB;aAC9B,YAED,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,2BAElD,GACF,CACP,CAAA;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CACL,cACE,KAAK,EAAE;gBACL,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;gBACxB,UAAU,EAAE,iBAAiB;gBAC7B,OAAO,EAAE,aAAa;aACvB,YAED,eACE,KAAK,EAAE;oBACL,UAAU,EAAE,2BAA2B;oBACvC,OAAO,EAAE,uBAAuB;oBAChC,YAAY,EAAE,uBAAuB;oBACrC,SAAS,EAAE,+BAA+B;oBAC1C,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,OAAO;oBACjB,SAAS,EAAE,QAAQ;iBACpB,aAED,aACE,KAAK,EAAE;4BACL,KAAK,EAAE,wBAAwB;4BAC/B,QAAQ,EAAE,qBAAqB;4BAC/B,UAAU,EAAE,GAAG;4BACf,MAAM,EAAE,mBAAmB;yBAC5B,8BAGE,EACL,YACE,KAAK,EAAE;4BACL,KAAK,EAAE,mBAAmB;4BAC1B,OAAO,EAAE,GAAG;4BACZ,YAAY,EAAE,yBAAyB;4BACvC,QAAQ,EAAE,wBAAwB;yBACnC,sIAIC,EACJ,iBACE,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE;4BACL,OAAO,EAAE,kDAAkD;4BAC3D,UAAU,EAAE,4BAA4B;4BACxC,MAAM,EAAE,MAAM;4BACd,YAAY,EAAE,uBAAuB;4BACrC,KAAK,EAAE,mBAAmB;4BAC1B,QAAQ,EAAE,uBAAuB;4BACjC,MAAM,EAAE,SAAS;yBAClB,uCAGM,IACL,GACF,CACP,CAAA;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,CACL,cACE,KAAK,EAAE;gBACL,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;gBACxB,UAAU,EAAE,iBAAiB;gBAC7B,OAAO,EAAE,aAAa;aACvB,YAED,eACE,KAAK,EAAE;oBACL,UAAU,EAAE,2BAA2B;oBACvC,OAAO,EAAE,uBAAuB;oBAChC,YAAY,EAAE,uBAAuB;oBACrC,SAAS,EAAE,+BAA+B;oBAC1C,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,OAAO;iBAClB,aAEA,IAAI,IAAI,CACP,cACE,KAAK,EAAE;4BACL,SAAS,EAAE,QAAQ;4BACnB,YAAY,EAAE,yBAAyB;yBACxC,YAEA,IAAI,GACD,CACP,EAED,aACE,KAAK,EAAE;4BACL,KAAK,EAAE,mBAAmB;4BAC1B,QAAQ,EAAE,qBAAqB;4BAC/B,UAAU,EAAE,GAAG;4BACf,MAAM,EAAE,+BAA+B;4BACvC,SAAS,EAAE,QAAQ;yBACpB,0CAGE,EAEL,YACE,KAAK,EAAE;4BACL,KAAK,EAAE,mBAAmB;4BAC1B,OAAO,EAAE,GAAG;4BACZ,QAAQ,EAAE,wBAAwB;4BAClC,SAAS,EAAE,QAAQ;4BACnB,YAAY,EAAE,yBAAyB;yBACxC,mEAGC,EAEJ,gBAAM,QAAQ,EAAE,gBAAgB,aAC9B,eAAK,KAAK,EAAE,EAAE,YAAY,EAAE,yBAAyB,EAAE,aACrD,gBACE,OAAO,EAAC,WAAW,EACnB,KAAK,EAAE;4CACL,OAAO,EAAE,OAAO;4CAChB,KAAK,EAAE,mBAAmB;4CAC1B,YAAY,EAAE,yBAAyB;4CACvC,QAAQ,EAAE,wBAAwB;4CAClC,UAAU,EAAE,GAAG;yCAChB,kCAGK,EACR,gBACE,EAAE,EAAC,WAAW,EACd,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,SAAS,EACnB,OAAO,EAAC,QAAQ,EAChB,YAAY,EAAC,eAAe,EAC5B,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC3E,QAAQ,QACR,WAAW,EAAC,QAAQ,EACpB,KAAK,EAAE;4CACL,KAAK,EAAE,MAAM;4CACb,OAAO,EAAE,0BAA0B;4CACnC,UAAU,EAAE,uBAAuB;4CACnC,MAAM,EAAE,sCAAsC;4CAC9C,YAAY,EAAE,uBAAuB;4CACrC,KAAK,EAAE,mBAAmB;4CAC1B,QAAQ,EAAE,qBAAqB;4CAC/B,UAAU,EAAE,WAAW;4CACvB,SAAS,EAAE,QAAQ;4CACnB,aAAa,EAAE,OAAO;4CACtB,OAAO,EAAE,MAAM;4CACf,SAAS,EAAE,YAAY;yCACxB,GACD,IACE,EAEL,KAAK,IAAI,CACR,cACE,KAAK,EAAE;oCACL,KAAK,EAAE,wBAAwB;oCAC/B,YAAY,EAAE,aAAa;oCAC3B,QAAQ,EAAE,wBAAwB;oCAClC,OAAO,EAAE,yBAAyB;oCAClC,UAAU,EAAE,uBAAuB;oCACnC,YAAY,EAAE,uBAAuB;oCACrC,MAAM,EAAE,kCAAkC;iCAC3C,YAEA,KAAK,GACF,CACP,EAED,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,WAAW,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAC9C,KAAK,EAAE;oCACL,KAAK,EAAE,MAAM;oCACb,OAAO,EAAE,0BAA0B;oCACnC,UAAU,EAAE,4BAA4B;oCACxC,MAAM,EAAE,MAAM;oCACd,YAAY,EAAE,uBAAuB;oCACrC,KAAK,EAAE,2BAA2B;oCAClC,QAAQ,EAAE,uBAAuB;oCACjC,UAAU,EAAE,GAAG;oCACf,MAAM,EAAE,WAAW,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;oCACxE,OAAO,EAAE,WAAW,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oCACvD,UAAU,EAAE,oBAAoB;iCACjC,YAEA,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,GACjC,IACJ,EAEP,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE;4BACL,KAAK,EAAE,MAAM;4BACb,SAAS,EAAE,aAAa;4BACxB,OAAO,EAAE,yBAAyB;4BAClC,UAAU,EAAE,aAAa;4BACzB,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,mBAAmB;4BAC1B,OAAO,EAAE,GAAG;4BACZ,QAAQ,EAAE,wBAAwB;4BAClC,MAAM,EAAE,SAAS;yBAClB,qCAGM,IACL,GACF,CACP,CAAA;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,CACL,cACE,KAAK,EAAE;gBACL,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;gBACxB,UAAU,EAAE,iBAAiB;gBAC7B,OAAO,EAAE,aAAa;aACvB,YAED,eACE,KAAK,EAAE;oBACL,UAAU,EAAE,2BAA2B;oBACvC,OAAO,EAAE,uBAAuB;oBAChC,YAAY,EAAE,uBAAuB;oBACrC,SAAS,EAAE,+BAA+B;oBAC1C,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,OAAO;iBAClB,aAEA,IAAI,IAAI,CACP,cACE,KAAK,EAAE;4BACL,SAAS,EAAE,QAAQ;4BACnB,YAAY,EAAE,yBAAyB;yBACxC,YAEA,IAAI,GACD,CACP,EAED,aACE,KAAK,EAAE;4BACL,KAAK,EAAE,mBAAmB;4BAC1B,QAAQ,EAAE,qBAAqB;4BAC/B,UAAU,EAAE,GAAG;4BACf,MAAM,EAAE,+BAA+B;4BACvC,SAAS,EAAE,QAAQ;yBACpB,+BAGE,EAEL,gBAAM,QAAQ,EAAE,YAAY,aAC1B,eAAK,KAAK,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,aACzC,gBACE,OAAO,EAAC,MAAM,EACd,KAAK,EAAE;4CACL,OAAO,EAAE,OAAO;4CAChB,KAAK,EAAE,mBAAmB;4CAC1B,YAAY,EAAE,yBAAyB;4CACvC,QAAQ,EAAE,wBAAwB;4CAClC,UAAU,EAAE,GAAG;yCAChB,qBAGK,EACR,gBACE,EAAE,EAAC,MAAM,EACT,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACxC,QAAQ,QACR,YAAY,EAAC,MAAM,EACnB,KAAK,EAAE;4CACL,KAAK,EAAE,MAAM;4CACb,OAAO,EAAE,0BAA0B;4CACnC,UAAU,EAAE,uBAAuB;4CACnC,MAAM,EAAE,sCAAsC;4CAC9C,YAAY,EAAE,uBAAuB;4CACrC,KAAK,EAAE,mBAAmB;4CAC1B,QAAQ,EAAE,uBAAuB;4CACjC,OAAO,EAAE,MAAM;4CACf,SAAS,EAAE,YAAY;yCACxB,GACD,IACE,EAEN,eAAK,KAAK,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,aACzC,gBACE,OAAO,EAAC,gBAAgB,EACxB,KAAK,EAAE;4CACL,OAAO,EAAE,OAAO;4CAChB,KAAK,EAAE,mBAAmB;4CAC1B,YAAY,EAAE,yBAAyB;4CACvC,QAAQ,EAAE,wBAAwB;4CAClC,UAAU,EAAE,GAAG;yCAChB,sBAGK,EACR,gBACE,EAAE,EAAC,gBAAgB,EACnB,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,QAAQ,QACR,YAAY,EAAC,OAAO,EACpB,KAAK,EAAE;4CACL,KAAK,EAAE,MAAM;4CACb,OAAO,EAAE,0BAA0B;4CACnC,UAAU,EAAE,uBAAuB;4CACnC,MAAM,EAAE,sCAAsC;4CAC9C,YAAY,EAAE,uBAAuB;4CACrC,KAAK,EAAE,mBAAmB;4CAC1B,QAAQ,EAAE,uBAAuB;4CACjC,OAAO,EAAE,MAAM;4CACf,SAAS,EAAE,YAAY;yCACxB,GACD,IACE,EAEN,eAAK,KAAK,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,aACzC,gBACE,OAAO,EAAC,mBAAmB,EAC3B,KAAK,EAAE;4CACL,OAAO,EAAE,OAAO;4CAChB,KAAK,EAAE,mBAAmB;4CAC1B,YAAY,EAAE,yBAAyB;4CACvC,QAAQ,EAAE,wBAAwB;4CAClC,UAAU,EAAE,GAAG;yCAChB,yBAGK,EACR,gBACE,EAAE,EAAC,mBAAmB,EACtB,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,QAAQ,QACR,YAAY,EAAC,cAAc,EAC3B,KAAK,EAAE;4CACL,KAAK,EAAE,MAAM;4CACb,OAAO,EAAE,0BAA0B;4CACnC,UAAU,EAAE,uBAAuB;4CACnC,MAAM,EAAE,sCAAsC;4CAC9C,YAAY,EAAE,uBAAuB;4CACrC,KAAK,EAAE,mBAAmB;4CAC1B,QAAQ,EAAE,uBAAuB;4CACjC,OAAO,EAAE,MAAM;4CACf,SAAS,EAAE,YAAY;yCACxB,GACD,IACE,EAEN,eAAK,KAAK,EAAE,EAAE,YAAY,EAAE,yBAAyB,EAAE,aACrD,gBACE,OAAO,EAAC,kBAAkB,EAC1B,KAAK,EAAE;4CACL,OAAO,EAAE,OAAO;4CAChB,KAAK,EAAE,mBAAmB;4CAC1B,YAAY,EAAE,yBAAyB;4CACvC,QAAQ,EAAE,wBAAwB;4CAClC,UAAU,EAAE,GAAG;yCAChB,iCAGK,EACR,gBACE,EAAE,EAAC,kBAAkB,EACrB,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACnD,QAAQ,QACR,YAAY,EAAC,cAAc,EAC3B,KAAK,EAAE;4CACL,KAAK,EAAE,MAAM;4CACb,OAAO,EAAE,0BAA0B;4CACnC,UAAU,EAAE,uBAAuB;4CACnC,MAAM,EAAE,sCAAsC;4CAC9C,YAAY,EAAE,uBAAuB;4CACrC,KAAK,EAAE,mBAAmB;4CAC1B,QAAQ,EAAE,uBAAuB;4CACjC,OAAO,EAAE,MAAM;4CACf,SAAS,EAAE,YAAY;yCACxB,GACD,IACE,EAEL,KAAK,IAAI,CACR,cACE,KAAK,EAAE;oCACL,KAAK,EAAE,wBAAwB;oCAC/B,YAAY,EAAE,aAAa;oCAC3B,QAAQ,EAAE,wBAAwB;oCAClC,OAAO,EAAE,yBAAyB;oCAClC,UAAU,EAAE,uBAAuB;oCACnC,YAAY,EAAE,uBAAuB;oCACrC,MAAM,EAAE,kCAAkC;iCAC3C,YAEA,KAAK,GACF,CACP,EAED,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE;oCACL,KAAK,EAAE,MAAM;oCACb,OAAO,EAAE,0BAA0B;oCACnC,UAAU,EAAE,4BAA4B;oCACxC,MAAM,EAAE,MAAM;oCACd,YAAY,EAAE,uBAAuB;oCACrC,KAAK,EAAE,2BAA2B;oCAClC,QAAQ,EAAE,uBAAuB;oCACjC,UAAU,EAAE,GAAG;oCACf,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;oCAC3C,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oCAC1B,UAAU,EAAE,oBAAoB;iCACjC,YAEA,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,gBAAgB,GAC5C,IACJ,EAEP,eACE,KAAK,EAAE;4BACL,SAAS,EAAE,yBAAyB;4BACpC,SAAS,EAAE,QAAQ;4BACnB,QAAQ,EAAE,wBAAwB;4BAClC,KAAK,EAAE,mBAAmB;4BAC1B,OAAO,EAAE,GAAG;yBACb,yCAEwB,GAAG,EAC5B,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE;oCACL,UAAU,EAAE,MAAM;oCAClB,MAAM,EAAE,MAAM;oCACd,KAAK,EAAE,4BAA4B;oCACnC,MAAM,EAAE,SAAS;oCACjB,QAAQ,EAAE,SAAS;oCACnB,cAAc,EAAE,WAAW;oCAC3B,OAAO,EAAE,CAAC;iCACX,wBAGM,IACL,IACF,GACF,CACP,CAAA;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAClC,OAAO,CACL,cACE,KAAK,EAAE;gBACL,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;gBACxB,UAAU,EAAE,iBAAiB;gBAC7B,OAAO,EAAE,aAAa;aACvB,YAED,eACE,KAAK,EAAE;oBACL,UAAU,EAAE,2BAA2B;oBACvC,OAAO,EAAE,uBAAuB;oBAChC,YAAY,EAAE,uBAAuB;oBACrC,SAAS,EAAE,+BAA+B;oBAC1C,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,OAAO;iBAClB,aAEA,IAAI,IAAI,CACP,cACE,KAAK,EAAE;4BACL,SAAS,EAAE,QAAQ;4BACnB,YAAY,EAAE,yBAAyB;yBACxC,YAEA,IAAI,GACD,CACP,EAED,aACE,KAAK,EAAE;4BACL,KAAK,EAAE,mBAAmB;4BAC1B,QAAQ,EAAE,qBAAqB;4BAC/B,UAAU,EAAE,GAAG;4BACf,MAAM,EAAE,+BAA+B;4BACvC,SAAS,EAAE,QAAQ;yBACpB,+BAGE,EAEL,YACE,KAAK,EAAE;4BACL,KAAK,EAAE,mBAAmB;4BAC1B,OAAO,EAAE,GAAG;4BACZ,QAAQ,EAAE,wBAAwB;4BAClC,SAAS,EAAE,QAAQ;4BACnB,YAAY,EAAE,yBAAyB;yBACxC,kFAGC,EAEJ,gBAAM,QAAQ,EAAE,oBAAoB,aAClC,eAAK,KAAK,EAAE,EAAE,YAAY,EAAE,yBAAyB,EAAE,aACrD,gBACE,OAAO,EAAC,cAAc,EACtB,KAAK,EAAE;4CACL,OAAO,EAAE,OAAO;4CAChB,KAAK,EAAE,mBAAmB;4CAC1B,YAAY,EAAE,yBAAyB;4CACvC,QAAQ,EAAE,wBAAwB;4CAClC,UAAU,EAAE,GAAG;yCAChB,sBAGK,EACR,gBACE,EAAE,EAAC,cAAc,EACjB,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,QAAQ,QACR,YAAY,EAAC,OAAO,EACpB,KAAK,EAAE;4CACL,KAAK,EAAE,MAAM;4CACb,OAAO,EAAE,0BAA0B;4CACnC,UAAU,EAAE,uBAAuB;4CACnC,MAAM,EAAE,sCAAsC;4CAC9C,YAAY,EAAE,uBAAuB;4CACrC,KAAK,EAAE,mBAAmB;4CAC1B,QAAQ,EAAE,uBAAuB;4CACjC,OAAO,EAAE,MAAM;4CACf,SAAS,EAAE,YAAY;yCACxB,GACD,IACE,EAEL,KAAK,IAAI,CACR,cACE,KAAK,EAAE;oCACL,KAAK,EAAE,wBAAwB;oCAC/B,YAAY,EAAE,aAAa;oCAC3B,QAAQ,EAAE,wBAAwB;oCAClC,OAAO,EAAE,yBAAyB;oCAClC,UAAU,EAAE,uBAAuB;oCACnC,YAAY,EAAE,uBAAuB;oCACrC,MAAM,EAAE,kCAAkC;iCAC3C,YAEA,KAAK,GACF,CACP,EAED,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE;oCACL,KAAK,EAAE,MAAM;oCACb,OAAO,EAAE,0BAA0B;oCACnC,UAAU,EAAE,4BAA4B;oCACxC,MAAM,EAAE,MAAM;oCACd,YAAY,EAAE,uBAAuB;oCACrC,KAAK,EAAE,2BAA2B;oCAClC,QAAQ,EAAE,uBAAuB;oCACjC,UAAU,EAAE,GAAG;oCACf,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;oCAC3C,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oCAC1B,UAAU,EAAE,oBAAoB;iCACjC,YAEA,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,GACpC,IACJ,EAEP,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE;4BACL,KAAK,EAAE,MAAM;4BACb,SAAS,EAAE,aAAa;4BACxB,OAAO,EAAE,yBAAyB;4BAClC,UAAU,EAAE,aAAa;4BACzB,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,mBAAmB;4BAC1B,OAAO,EAAE,GAAG;4BACZ,QAAQ,EAAE,wBAAwB;4BAClC,MAAM,EAAE,SAAS;yBAClB,qCAGM,IACL,GACF,CACP,CAAA;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,CACL,cACE,KAAK,EAAE;gBACL,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;gBACxB,UAAU,EAAE,iBAAiB;gBAC7B,OAAO,EAAE,aAAa;aACvB,YAED,eACE,KAAK,EAAE;oBACL,UAAU,EAAE,2BAA2B;oBACvC,OAAO,EAAE,uBAAuB;oBAChC,YAAY,EAAE,uBAAuB;oBACrC,SAAS,EAAE,+BAA+B;oBAC1C,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,OAAO;oBACjB,SAAS,EAAE,QAAQ;iBACpB,aAEA,IAAI,IAAI,CACP,cACE,KAAK,EAAE;4BACL,YAAY,EAAE,yBAAyB;yBACxC,YAEA,IAAI,GACD,CACP,EAED,cACE,KAAK,EAAE;4BACL,KAAK,EAAE,MAAM;4BACb,MAAM,EAAE,MAAM;4BACd,UAAU,EAAE,0BAA0B;4BACtC,YAAY,EAAE,KAAK;4BACnB,OAAO,EAAE,MAAM;4BACf,UAAU,EAAE,QAAQ;4BACpB,cAAc,EAAE,QAAQ;4BACxB,MAAM,EAAE,gCAAgC;4BACxC,QAAQ,EAAE,MAAM;yBACjB,uBAGG,EAEN,aACE,KAAK,EAAE;4BACL,KAAK,EAAE,mBAAmB;4BAC1B,QAAQ,EAAE,qBAAqB;4BAC/B,UAAU,EAAE,GAAG;4BACf,MAAM,EAAE,+BAA+B;yBACxC,iCAGE,EAEL,aACE,KAAK,EAAE;4BACL,KAAK,EAAE,mBAAmB;4BAC1B,OAAO,EAAE,GAAG;4BACZ,QAAQ,EAAE,wBAAwB;4BAClC,YAAY,EAAE,yBAAyB;yBACxC,qDAEwC,2BAAS,KAAK,GAAU,IAC/D,EAEJ,YACE,KAAK,EAAE;4BACL,KAAK,EAAE,mBAAmB;4BAC1B,OAAO,EAAE,GAAG;4BACZ,QAAQ,EAAE,wBAAwB;4BAClC,YAAY,EAAE,yBAAyB;yBACxC,+EAGC,EAEJ,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE;4BACL,OAAO,EAAE,kDAAkD;4BAC3D,UAAU,EAAE,4BAA4B;4BACxC,MAAM,EAAE,MAAM;4BACd,YAAY,EAAE,uBAAuB;4BACrC,KAAK,EAAE,mBAAmB;4BAC1B,QAAQ,EAAE,uBAAuB;4BACjC,MAAM,EAAE,SAAS;yBAClB,8BAGM,IACL,GACF,CACP,CAAA;IACH,CAAC;IAED,kBAAkB;IAClB,OAAO,CACL,cACE,KAAK,EAAE;YACL,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,UAAU,EAAE,iBAAiB;YAC7B,OAAO,EAAE,aAAa;SACvB,YAED,eACE,KAAK,EAAE;gBACL,UAAU,EAAE,2BAA2B;gBACvC,OAAO,EAAE,uBAAuB;gBAChC,YAAY,EAAE,uBAAuB;gBACrC,SAAS,EAAE,+BAA+B;gBAC1C,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,OAAO;aAClB,aAEA,IAAI,IAAI,CACP,cACE,KAAK,EAAE;wBACL,SAAS,EAAE,QAAQ;wBACnB,YAAY,EAAE,yBAAyB;qBACxC,YAEA,IAAI,GACD,CACP,EAED,aACE,KAAK,EAAE;wBACL,KAAK,EAAE,mBAAmB;wBAC1B,QAAQ,EAAE,qBAAqB;wBAC/B,UAAU,EAAE,GAAG;wBACf,SAAS,EAAE,QAAQ;wBACnB,MAAM,EAAE,+BAA+B;qBACxC,YAEA,KAAK,GACH,EAEJ,cAAc,IAAI,CACjB,cACE,KAAK,EAAE;wBACL,KAAK,EAAE,0BAA0B;wBACjC,YAAY,EAAE,aAAa;wBAC3B,QAAQ,EAAE,wBAAwB;wBAClC,OAAO,EAAE,yBAAyB;wBAClC,UAAU,EAAE,yBAAyB;wBACrC,YAAY,EAAE,uBAAuB;wBACrC,MAAM,EAAE,oCAAoC;qBAC7C,YAEA,cAAc,GACX,CACP,EAED,gBAAM,QAAQ,EAAE,YAAY,aAC1B,eAAK,KAAK,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,aACzC,gBACE,OAAO,EAAC,OAAO,EACf,KAAK,EAAE;wCACL,OAAO,EAAE,OAAO;wCAChB,KAAK,EAAE,mBAAmB;wCAC1B,YAAY,EAAE,yBAAyB;wCACvC,QAAQ,EAAE,wBAAwB;wCAClC,UAAU,EAAE,GAAG;qCAChB,sBAGK,EACR,gBACE,EAAE,EAAC,OAAO,EACV,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,QAAQ,QACR,YAAY,EAAC,OAAO,EACpB,KAAK,EAAE;wCACL,KAAK,EAAE,MAAM;wCACb,OAAO,EAAE,0BAA0B;wCACnC,UAAU,EAAE,uBAAuB;wCACnC,MAAM,EAAE,sCAAsC;wCAC9C,YAAY,EAAE,uBAAuB;wCACrC,KAAK,EAAE,mBAAmB;wCAC1B,QAAQ,EAAE,uBAAuB;wCACjC,OAAO,EAAE,MAAM;wCACf,SAAS,EAAE,YAAY;qCACxB,GACD,IACE,EAEN,eAAK,KAAK,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,aACzC,gBACE,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE;wCACL,OAAO,EAAE,OAAO;wCAChB,KAAK,EAAE,mBAAmB;wCAC1B,YAAY,EAAE,yBAAyB;wCACvC,QAAQ,EAAE,wBAAwB;wCAClC,UAAU,EAAE,GAAG;qCAChB,yBAGK,EACR,gBACE,EAAE,EAAC,UAAU,EACb,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,QAAQ,QACR,YAAY,EAAC,kBAAkB,EAC/B,KAAK,EAAE;wCACL,KAAK,EAAE,MAAM;wCACb,OAAO,EAAE,0BAA0B;wCACnC,UAAU,EAAE,uBAAuB;wCACnC,MAAM,EAAE,sCAAsC;wCAC9C,YAAY,EAAE,uBAAuB;wCACrC,KAAK,EAAE,mBAAmB;wCAC1B,QAAQ,EAAE,uBAAuB;wCACjC,OAAO,EAAE,MAAM;wCACf,SAAS,EAAE,YAAY;qCACxB,GACD,IACE,EAEL,uBAAuB,IAAI,CAC1B,cACE,KAAK,EAAE;gCACL,YAAY,EAAE,yBAAyB;gCACvC,SAAS,EAAE,OAAO;6BACnB,YAED,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAC3C,KAAK,EAAE;oCACL,UAAU,EAAE,MAAM;oCAClB,MAAM,EAAE,MAAM;oCACd,KAAK,EAAE,mBAAmB;oCAC1B,OAAO,EAAE,GAAG;oCACZ,MAAM,EAAE,SAAS;oCACjB,QAAQ,EAAE,wBAAwB;oCAClC,OAAO,EAAE,CAAC;oCACV,cAAc,EAAE,WAAW;iCAC5B,iCAGM,GACL,CACP,EAEA,KAAK,IAAI,CACR,cACE,KAAK,EAAE;gCACL,KAAK,EAAE,wBAAwB;gCAC/B,YAAY,EAAE,aAAa;gCAC3B,QAAQ,EAAE,wBAAwB;gCAClC,OAAO,EAAE,yBAAyB;gCAClC,UAAU,EAAE,uBAAuB;gCACnC,YAAY,EAAE,uBAAuB;gCACrC,MAAM,EAAE,kCAAkC;6BAC3C,YAEA,KAAK,GACF,CACP,EAED,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,OAAO,IAAI,cAAc,EACnC,KAAK,EAAE;gCACL,KAAK,EAAE,MAAM;gCACb,OAAO,EAAE,0BAA0B;gCACnC,UAAU,EAAE,4BAA4B;gCACxC,MAAM,EAAE,MAAM;gCACd,YAAY,EAAE,uBAAuB;gCACrC,KAAK,EAAE,2BAA2B;gCAClC,QAAQ,EAAE,uBAAuB;gCACjC,UAAU,EAAE,GAAG;gCACf,MAAM,EAAE,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;gCAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gCAC5C,UAAU,EAAE,oBAAoB;6BACjC,YAEA,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,GAC/B,IACJ,EAEN,gBAAgB,IAAI,CACnB,8BACE,eACE,KAAK,EAAE;gCACL,OAAO,EAAE,MAAM;gCACf,UAAU,EAAE,QAAQ;gCACpB,MAAM,EAAE,2BAA2B;gCACnC,GAAG,EAAE,uBAAuB;6BAC7B,aAED,cACE,KAAK,EAAE;wCACL,IAAI,EAAE,CAAC;wCACP,MAAM,EAAE,KAAK;wCACb,UAAU,EAAE,4BAA4B;qCACzC,GACD,EACF,eACE,KAAK,EAAE;wCACL,KAAK,EAAE,mBAAmB;wCAC1B,OAAO,EAAE,GAAG;wCACZ,QAAQ,EAAE,wBAAwB;qCACnC,mBAGI,EACP,cACE,KAAK,EAAE;wCACL,IAAI,EAAE,CAAC;wCACP,MAAM,EAAE,KAAK;wCACb,UAAU,EAAE,4BAA4B;qCACzC,GACD,IACE,EAEN,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,OAAO,IAAI,cAAc,EACnC,KAAK,EAAE;gCACL,KAAK,EAAE,MAAM;gCACb,OAAO,EAAE,0BAA0B;gCACnC,UAAU,EAAE,aAAa;gCACzB,MAAM,EAAE,sCAAsC;gCAC9C,YAAY,EAAE,uBAAuB;gCACrC,KAAK,EAAE,mBAAmB;gCAC1B,QAAQ,EAAE,uBAAuB;gCACjC,UAAU,EAAE,GAAG;gCACf,MAAM,EAAE,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;gCAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gCAC5C,UAAU,EAAE,oBAAoB;gCAChC,OAAO,EAAE,MAAM;gCACf,UAAU,EAAE,QAAQ;gCACpB,cAAc,EAAE,QAAQ;gCACxB,GAAG,EAAE,yBAAyB;6BAC/B,aAED,eAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,6BAAW,EAC3C,cAAc,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,sBAAsB,IACvD,IACR,CACJ,EAEA,eAAe,IAAI,CAClB,eACE,KAAK,EAAE;wBACL,SAAS,EAAE,yBAAyB;wBACpC,SAAS,EAAE,QAAQ;wBACnB,QAAQ,EAAE,wBAAwB;wBAClC,KAAK,EAAE,mBAAmB;wBAC1B,OAAO,EAAE,GAAG;qBACb,uCAE2B,GAAG,EAC/B,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EACrC,KAAK,EAAE;gCACL,UAAU,EAAE,MAAM;gCAClB,MAAM,EAAE,MAAM;gCACd,KAAK,EAAE,4BAA4B;gCACnC,MAAM,EAAE,SAAS;gCACjB,QAAQ,EAAE,SAAS;gCACnB,cAAc,EAAE,WAAW;gCAC3B,OAAO,EAAE,CAAC;6BACX,+BAGM,IACL,CACP,IACG,GACF,CACP,CAAA;AACH,CAAC;AAED,eAAe,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/LoginView.tsx"],"sourcesContent":["'use client'\n\nimport { useState, useEffect, type FormEvent } from 'react'\nimport { useRouter } from 'next/navigation.js'\nimport {\n createPayloadAuthClient,\n type PayloadAuthClient,\n} from '../exports/client.js'\nimport { hasAnyRole, hasAllRoles, normalizeRoles } from '../utils/access.js'\n\nexport type LoginViewProps = {\n /** Optional pre-configured auth client */\n authClient?: PayloadAuthClient\n /** Custom logo element */\n logo?: React.ReactNode\n /** Login page title. Default: 'Login' */\n title?: string\n /** Path to redirect after successful login. Default: '/admin' */\n afterLoginPath?: string\n /**\n * Required role(s) for admin access.\n * - string: Single role required (default: 'admin')\n * - string[]: Multiple roles (behavior depends on requireAllRoles)\n * - null/undefined: Disable role checking\n * For complex RBAC beyond these options, disable the login view and create your own.\n */\n requiredRole?: string | string[] | null\n /**\n * When requiredRole is an array, require ALL roles (true) or ANY role (false).\n * Default: false (any matching role grants access)\n */\n requireAllRoles?: boolean\n /**\n * Enable passkey (WebAuthn) sign-in option.\n * - true: Always show passkey button\n * - false: Never show passkey button\n * - 'auto' (default): Auto-detect if passkey plugin is available\n */\n enablePasskey?: boolean | 'auto'\n /**\n * Enable user registration (sign up) option.\n * - true: Always show \"Create account\" link\n * - false: Never show registration option\n * - 'auto' (default): Auto-detect if sign-up endpoint is available\n */\n enableSignUp?: boolean | 'auto'\n /**\n * Default role to assign to new users during registration.\n * Default: 'user'\n */\n defaultSignUpRole?: string\n /**\n * Enable forgot password option.\n * - true: Always show \"Forgot password?\" link\n * - false: Never show forgot password option\n * - 'auto' (default): Auto-detect if forget-password endpoint is available\n */\n enableForgotPassword?: boolean | 'auto'\n /**\n * Custom URL for password reset page. If provided, users will be redirected here\n * instead of showing the inline password reset form.\n * The reset token will be appended as ?token=xxx\n */\n resetPasswordUrl?: string\n}\n\n/**\n * Check if user has the required role(s)\n */\nfunction checkUserRoles(\n user: { role?: unknown } | null | undefined,\n requiredRole: string | string[] | null | undefined,\n requireAllRoles: boolean\n): boolean {\n // No role requirement = access granted\n if (!requiredRole) return true\n\n // No user = access denied\n if (!user) return false\n\n const roles = Array.isArray(requiredRole) ? requiredRole : [requiredRole]\n\n if (requireAllRoles) {\n return hasAllRoles(user, roles)\n }\n\n return hasAnyRole(user, roles)\n}\n\n/**\n * Full login page component matching Payload's admin theme.\n * Registered as a custom admin view at /admin/login.\n */\ntype ViewMode = 'login' | 'register' | 'forgotPassword' | 'resetSent' | 'twoFactor'\n\nexport function LoginView({\n authClient: providedClient,\n logo,\n title = 'Login',\n afterLoginPath = '/admin',\n requiredRole = 'admin',\n requireAllRoles = false,\n enablePasskey = 'auto',\n enableSignUp = 'auto',\n defaultSignUpRole = 'user',\n enableForgotPassword = 'auto',\n resetPasswordUrl,\n}: LoginViewProps) {\n const router = useRouter()\n\n // View state\n const [viewMode, setViewMode] = useState<ViewMode>('login')\n\n // Form fields\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [name, setName] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n\n // UI state\n const [error, setError] = useState<string | null>(null)\n const [successMessage, setSuccessMessage] = useState<string | null>(null)\n const [loading, setLoading] = useState(false)\n const [passkeyLoading, setPasskeyLoading] = useState(false)\n const [checkingSession, setCheckingSession] = useState(true)\n const [accessDenied, setAccessDenied] = useState(false)\n\n // Feature availability\n const [passkeyAvailable, setPasskeyAvailable] = useState(enablePasskey === true)\n const [signUpAvailable, setSignUpAvailable] = useState(enableSignUp === true)\n const [forgotPasswordAvailable, setForgotPasswordAvailable] = useState(enableForgotPassword === true)\n\n // Two-factor authentication state\n const [totpCode, setTotpCode] = useState('')\n const [totpLoading, setTotpLoading] = useState(false)\n\n const getClient = () => providedClient ?? createPayloadAuthClient()\n\n // Check if user is already logged in on mount\n useEffect(() => {\n async function checkSession() {\n try {\n const client = getClient()\n const result = await client.getSession()\n\n if (result.data?.user) {\n const user = result.data.user as { role?: unknown }\n // User is logged in, check role\n if (checkUserRoles(user, requiredRole, requireAllRoles)) {\n router.push(afterLoginPath)\n return\n } else {\n setAccessDenied(true)\n }\n }\n } catch {\n // No session, show login form\n }\n setCheckingSession(false)\n }\n checkSession()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [afterLoginPath, requiredRole, requireAllRoles, router])\n\n // Auto-detect passkey availability if set to 'auto'\n useEffect(() => {\n if (enablePasskey === 'auto') {\n // Check if passkey endpoint exists (GET request)\n // Better Auth passkey routes are at /passkey/* (singular)\n fetch('/api/auth/passkey/generate-authenticate-options', {\n method: 'GET',\n credentials: 'include',\n })\n .then((res) => {\n // If we get a response (even 400/401 for not authenticated), passkey is available\n // 404 means passkey plugin is not installed\n setPasskeyAvailable(res.status !== 404)\n })\n .catch(() => {\n setPasskeyAvailable(false)\n })\n } else {\n setPasskeyAvailable(enablePasskey === true)\n }\n }, [enablePasskey])\n\n // Auto-detect sign up availability if set to 'auto'\n useEffect(() => {\n if (enableSignUp === 'auto') {\n // Check if sign-up endpoint exists\n fetch('/api/auth/sign-up/email', {\n method: 'OPTIONS',\n credentials: 'include',\n })\n .then((res) => {\n // 404 means sign-up is not available\n setSignUpAvailable(res.status !== 404)\n })\n .catch(() => {\n // If OPTIONS fails, try a HEAD or just assume it's available since it's a core endpoint\n setSignUpAvailable(true)\n })\n } else {\n setSignUpAvailable(enableSignUp === true)\n }\n }, [enableSignUp])\n\n // Auto-detect forgot password availability if set to 'auto'\n useEffect(() => {\n if (enableForgotPassword === 'auto') {\n // Check if request-password-reset endpoint exists\n fetch('/api/auth/request-password-reset', {\n method: 'OPTIONS',\n credentials: 'include',\n })\n .then((res) => {\n // 404 means request-password-reset is not available\n setForgotPasswordAvailable(res.status !== 404)\n })\n .catch(() => {\n // If OPTIONS fails, assume it's available since it's a core endpoint\n setForgotPasswordAvailable(true)\n })\n } else {\n setForgotPasswordAvailable(enableForgotPassword === true)\n }\n }, [enableForgotPassword])\n\n async function handleSubmit(e: FormEvent) {\n e.preventDefault()\n setLoading(true)\n setError(null)\n setSuccessMessage(null)\n setAccessDenied(false)\n\n try {\n const client = getClient()\n const result = await client.signIn.email({\n email,\n password,\n })\n\n // Check if 2FA is required (use 'in' operator for proper TypeScript inference)\n if (result.data && 'twoFactorRedirect' in result.data && result.data.twoFactorRedirect) {\n setViewMode('twoFactor')\n setLoading(false)\n return\n }\n\n if (result.error) {\n setError(result.error.message ?? 'Invalid credentials')\n setLoading(false)\n return\n }\n\n if (result.data?.user) {\n const user = result.data.user as { role?: unknown }\n // Check role if required\n if (!checkUserRoles(user, requiredRole, requireAllRoles)) {\n setAccessDenied(true)\n setLoading(false)\n return\n }\n\n router.push(afterLoginPath)\n router.refresh()\n }\n } catch {\n setError('An error occurred. Please try again.')\n setLoading(false)\n }\n }\n\n async function handleSignUp(e: FormEvent) {\n e.preventDefault()\n setLoading(true)\n setError(null)\n setSuccessMessage(null)\n\n // Validate passwords match\n if (password !== confirmPassword) {\n setError('Passwords do not match')\n setLoading(false)\n return\n }\n\n // Validate password strength (basic)\n if (password.length < 8) {\n setError('Password must be at least 8 characters')\n setLoading(false)\n return\n }\n\n try {\n const client = getClient()\n const result = await client.signUp.email({\n email,\n password,\n name,\n role: defaultSignUpRole,\n } as Parameters<typeof client.signUp.email>[0])\n\n if (result.error) {\n setError(result.error.message ?? 'Registration failed')\n setLoading(false)\n return\n }\n\n // Registration successful - either auto-signed in or need to verify email\n if (result.data?.user) {\n // Re-fetch session to get updated user data (role may have been changed by hooks)\n // This handles cases like firstUserAdmin where the role is set after creation\n const sessionResult = await client.getSession()\n\n if (sessionResult.data?.user) {\n const user = sessionResult.data.user as { role?: unknown }\n // Check role if required\n if (!checkUserRoles(user, requiredRole, requireAllRoles)) {\n setAccessDenied(true)\n setLoading(false)\n return\n }\n }\n\n router.push(afterLoginPath)\n router.refresh()\n } else {\n // Likely requires email verification - show success and switch to login\n setSuccessMessage('Account created! Please check your email to verify your account.')\n setViewMode('login')\n setPassword('')\n setConfirmPassword('')\n setLoading(false)\n }\n } catch {\n setError('An error occurred. Please try again.')\n setLoading(false)\n }\n }\n\n async function handleForgotPassword(e: FormEvent) {\n e.preventDefault()\n setLoading(true)\n setError(null)\n setSuccessMessage(null)\n\n try {\n const client = getClient()\n const result = await client.requestPasswordReset({\n email,\n redirectTo: resetPasswordUrl ?? `${window.location.origin}/admin/reset-password`,\n })\n\n if (result.error) {\n setError(result.error.message ?? 'Failed to send reset email')\n setLoading(false)\n return\n }\n\n // Success - show confirmation\n setViewMode('resetSent')\n setLoading(false)\n } catch {\n setError('An error occurred. Please try again.')\n setLoading(false)\n }\n }\n\n async function handleTotpVerify(e: FormEvent) {\n e.preventDefault()\n setTotpLoading(true)\n setError(null)\n\n try {\n const client = getClient()\n const result = await client.twoFactor.verifyTotp({ code: totpCode })\n\n if (result.error) {\n setError(result.error.message ?? 'Invalid verification code')\n setTotpLoading(false)\n return\n }\n\n // Verify-totp may not return all user fields (like custom 'role')\n // Fetch the session to get complete user data for role check\n if (requiredRole) {\n const sessionResult = await client.getSession()\n if (sessionResult.data?.user) {\n const user = sessionResult.data.user as { role?: unknown }\n if (!checkUserRoles(user, requiredRole, requireAllRoles)) {\n setAccessDenied(true)\n setTotpLoading(false)\n return\n }\n }\n }\n\n router.push(afterLoginPath)\n router.refresh()\n } catch {\n setError('An error occurred. Please try again.')\n setTotpLoading(false)\n }\n }\n\n function switchView(newView: ViewMode) {\n setViewMode(newView)\n setError(null)\n setSuccessMessage(null)\n // Reset form fields based on context\n if (newView === 'login') {\n setTotpCode('')\n setConfirmPassword('')\n } else if (newView === 'register') {\n setPassword('')\n setConfirmPassword('')\n } else if (newView === 'forgotPassword') {\n setPassword('')\n }\n }\n\n function handleBackToLogin() {\n switchView('login')\n }\n\n async function handlePasskeySignIn() {\n if (!passkeyAvailable) return\n\n setPasskeyLoading(true)\n setError(null)\n setAccessDenied(false)\n\n try {\n const client = getClient()\n const result = await client.signIn.passkey()\n\n if (result.error) {\n setError(result.error.message ?? 'Passkey authentication failed')\n setPasskeyLoading(false)\n return\n }\n\n // Passkey sign-in succeeded - fetch session to get full user data (including role)\n // This is more reliable than checking result.data.user which may vary by SDK version\n const sessionResult = await client.getSession()\n\n if (sessionResult.data?.user) {\n const user = sessionResult.data.user as { role?: unknown }\n // Check role if required\n if (!checkUserRoles(user, requiredRole, requireAllRoles)) {\n setAccessDenied(true)\n setPasskeyLoading(false)\n return\n }\n\n router.push(afterLoginPath)\n router.refresh()\n } else {\n // Session fetch failed - shouldn't happen after successful passkey auth\n setError('Authentication succeeded but session could not be verified')\n setPasskeyLoading(false)\n }\n } catch (err) {\n if (err instanceof Error && err.name === 'NotAllowedError') {\n setError('Passkey authentication was cancelled or not allowed')\n } else {\n setError(err instanceof Error ? err.message : 'Passkey authentication failed')\n }\n setPasskeyLoading(false)\n }\n }\n\n async function handleSignOut() {\n const client = getClient()\n await client.signOut()\n setAccessDenied(false)\n router.refresh()\n }\n\n // Loading state while checking session\n if (checkingSession) {\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--theme-bg)',\n }}\n >\n <div style={{ color: 'var(--theme-text)', opacity: 0.7 }}>\n Loading...\n </div>\n </div>\n )\n }\n\n // Access denied state\n if (accessDenied) {\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--theme-bg)',\n padding: 'var(--base)',\n }}\n >\n <div\n style={{\n background: 'var(--theme-elevation-50)',\n padding: 'calc(var(--base) * 2)',\n borderRadius: 'var(--style-radius-m)',\n boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',\n width: '100%',\n maxWidth: '400px',\n textAlign: 'center',\n }}\n >\n <h1\n style={{\n color: 'var(--theme-error-500)',\n fontSize: 'var(--font-size-h3)',\n fontWeight: 600,\n margin: '0 0 var(--base) 0',\n }}\n >\n Access Denied\n </h1>\n <p\n style={{\n color: 'var(--theme-text)',\n opacity: 0.8,\n marginBottom: 'calc(var(--base) * 1.5)',\n fontSize: 'var(--font-size-small)',\n }}\n >\n You don't have permission to access the admin panel.\n Please contact an administrator if you believe this is an error.\n </p>\n <button\n onClick={handleSignOut}\n style={{\n padding: 'calc(var(--base) * 0.75) calc(var(--base) * 1.5)',\n background: 'var(--theme-elevation-150)',\n border: 'none',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-base)',\n cursor: 'pointer',\n }}\n >\n Sign out and try again\n </button>\n </div>\n </div>\n )\n }\n\n // Two-factor verification view\n if (viewMode === 'twoFactor') {\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--theme-bg)',\n padding: 'var(--base)',\n }}\n >\n <div\n style={{\n background: 'var(--theme-elevation-50)',\n padding: 'calc(var(--base) * 2)',\n borderRadius: 'var(--style-radius-m)',\n boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',\n width: '100%',\n maxWidth: '400px',\n }}\n >\n {logo && (\n <div\n style={{\n textAlign: 'center',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n {logo}\n </div>\n )}\n\n <h1\n style={{\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-h3)',\n fontWeight: 600,\n margin: '0 0 calc(var(--base) * 0.5) 0',\n textAlign: 'center',\n }}\n >\n Two-Factor Authentication\n </h1>\n\n <p\n style={{\n color: 'var(--theme-text)',\n opacity: 0.7,\n fontSize: 'var(--font-size-small)',\n textAlign: 'center',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n Enter the 6-digit code from your authenticator app\n </p>\n\n <form onSubmit={handleTotpVerify}>\n <div style={{ marginBottom: 'calc(var(--base) * 1.5)' }}>\n <label\n htmlFor=\"totp-code\"\n style={{\n display: 'block',\n color: 'var(--theme-text)',\n marginBottom: 'calc(var(--base) * 0.5)',\n fontSize: 'var(--font-size-small)',\n fontWeight: 500,\n }}\n >\n Verification Code\n </label>\n <input\n id=\"totp-code\"\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n autoComplete=\"one-time-code\"\n value={totpCode}\n onChange={(e) => setTotpCode(e.target.value.replace(/\\D/g, '').slice(0, 6))}\n required\n placeholder=\"000000\"\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-input-bg)',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-h4)',\n fontFamily: 'monospace',\n textAlign: 'center',\n letterSpacing: '0.5em',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {error && (\n <div\n style={{\n color: 'var(--theme-error-500)',\n marginBottom: 'var(--base)',\n fontSize: 'var(--font-size-small)',\n padding: 'calc(var(--base) * 0.5)',\n background: 'var(--theme-error-50)',\n borderRadius: 'var(--style-radius-s)',\n border: '1px solid var(--theme-error-200)',\n }}\n >\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={totpLoading || totpCode.length !== 6}\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-elevation-800)',\n border: 'none',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-elevation-50)',\n fontSize: 'var(--font-size-base)',\n fontWeight: 500,\n cursor: totpLoading || totpCode.length !== 6 ? 'not-allowed' : 'pointer',\n opacity: totpLoading || totpCode.length !== 6 ? 0.7 : 1,\n transition: 'opacity 150ms ease',\n }}\n >\n {totpLoading ? 'Verifying...' : 'Verify'}\n </button>\n </form>\n\n <button\n type=\"button\"\n onClick={handleBackToLogin}\n style={{\n width: '100%',\n marginTop: 'var(--base)',\n padding: 'calc(var(--base) * 0.5)',\n background: 'transparent',\n border: 'none',\n color: 'var(--theme-text)',\n opacity: 0.7,\n fontSize: 'var(--font-size-small)',\n cursor: 'pointer',\n }}\n >\n ← Back to login\n </button>\n </div>\n </div>\n )\n }\n\n // Registration view\n if (viewMode === 'register') {\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--theme-bg)',\n padding: 'var(--base)',\n }}\n >\n <div\n style={{\n background: 'var(--theme-elevation-50)',\n padding: 'calc(var(--base) * 2)',\n borderRadius: 'var(--style-radius-m)',\n boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',\n width: '100%',\n maxWidth: '400px',\n }}\n >\n {logo && (\n <div\n style={{\n textAlign: 'center',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n {logo}\n </div>\n )}\n\n <h1\n style={{\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-h3)',\n fontWeight: 600,\n margin: '0 0 calc(var(--base) * 1.5) 0',\n textAlign: 'center',\n }}\n >\n Create Account\n </h1>\n\n <form onSubmit={handleSignUp}>\n <div style={{ marginBottom: 'var(--base)' }}>\n <label\n htmlFor=\"name\"\n style={{\n display: 'block',\n color: 'var(--theme-text)',\n marginBottom: 'calc(var(--base) * 0.5)',\n fontSize: 'var(--font-size-small)',\n fontWeight: 500,\n }}\n >\n Name\n </label>\n <input\n id=\"name\"\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n required\n autoComplete=\"name\"\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-input-bg)',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-base)',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n <div style={{ marginBottom: 'var(--base)' }}>\n <label\n htmlFor=\"register-email\"\n style={{\n display: 'block',\n color: 'var(--theme-text)',\n marginBottom: 'calc(var(--base) * 0.5)',\n fontSize: 'var(--font-size-small)',\n fontWeight: 500,\n }}\n >\n Email\n </label>\n <input\n id=\"register-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n autoComplete=\"email\"\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-input-bg)',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-base)',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n <div style={{ marginBottom: 'var(--base)' }}>\n <label\n htmlFor=\"register-password\"\n style={{\n display: 'block',\n color: 'var(--theme-text)',\n marginBottom: 'calc(var(--base) * 0.5)',\n fontSize: 'var(--font-size-small)',\n fontWeight: 500,\n }}\n >\n Password\n </label>\n <input\n id=\"register-password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n required\n autoComplete=\"new-password\"\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-input-bg)',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-base)',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n <div style={{ marginBottom: 'calc(var(--base) * 1.5)' }}>\n <label\n htmlFor=\"confirm-password\"\n style={{\n display: 'block',\n color: 'var(--theme-text)',\n marginBottom: 'calc(var(--base) * 0.5)',\n fontSize: 'var(--font-size-small)',\n fontWeight: 500,\n }}\n >\n Confirm Password\n </label>\n <input\n id=\"confirm-password\"\n type=\"password\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n required\n autoComplete=\"new-password\"\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-input-bg)',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-base)',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {error && (\n <div\n style={{\n color: 'var(--theme-error-500)',\n marginBottom: 'var(--base)',\n fontSize: 'var(--font-size-small)',\n padding: 'calc(var(--base) * 0.5)',\n background: 'var(--theme-error-50)',\n borderRadius: 'var(--style-radius-s)',\n border: '1px solid var(--theme-error-200)',\n }}\n >\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={loading}\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-elevation-800)',\n border: 'none',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-elevation-50)',\n fontSize: 'var(--font-size-base)',\n fontWeight: 500,\n cursor: loading ? 'not-allowed' : 'pointer',\n opacity: loading ? 0.7 : 1,\n transition: 'opacity 150ms ease',\n }}\n >\n {loading ? 'Creating account...' : 'Create Account'}\n </button>\n </form>\n\n <div\n style={{\n marginTop: 'calc(var(--base) * 1.5)',\n textAlign: 'center',\n fontSize: 'var(--font-size-small)',\n color: 'var(--theme-text)',\n opacity: 0.8,\n }}\n >\n Already have an account?{' '}\n <button\n type=\"button\"\n onClick={handleBackToLogin}\n style={{\n background: 'none',\n border: 'none',\n color: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n fontSize: 'inherit',\n textDecoration: 'underline',\n padding: 0,\n }}\n >\n Sign in\n </button>\n </div>\n </div>\n </div>\n )\n }\n\n // Forgot password view\n if (viewMode === 'forgotPassword') {\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--theme-bg)',\n padding: 'var(--base)',\n }}\n >\n <div\n style={{\n background: 'var(--theme-elevation-50)',\n padding: 'calc(var(--base) * 2)',\n borderRadius: 'var(--style-radius-m)',\n boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',\n width: '100%',\n maxWidth: '400px',\n }}\n >\n {logo && (\n <div\n style={{\n textAlign: 'center',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n {logo}\n </div>\n )}\n\n <h1\n style={{\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-h3)',\n fontWeight: 600,\n margin: '0 0 calc(var(--base) * 0.5) 0',\n textAlign: 'center',\n }}\n >\n Reset Password\n </h1>\n\n <p\n style={{\n color: 'var(--theme-text)',\n opacity: 0.7,\n fontSize: 'var(--font-size-small)',\n textAlign: 'center',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n Enter your email and we'll send you a link to reset your password\n </p>\n\n <form onSubmit={handleForgotPassword}>\n <div style={{ marginBottom: 'calc(var(--base) * 1.5)' }}>\n <label\n htmlFor=\"forgot-email\"\n style={{\n display: 'block',\n color: 'var(--theme-text)',\n marginBottom: 'calc(var(--base) * 0.5)',\n fontSize: 'var(--font-size-small)',\n fontWeight: 500,\n }}\n >\n Email\n </label>\n <input\n id=\"forgot-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n autoComplete=\"email\"\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-input-bg)',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-base)',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {error && (\n <div\n style={{\n color: 'var(--theme-error-500)',\n marginBottom: 'var(--base)',\n fontSize: 'var(--font-size-small)',\n padding: 'calc(var(--base) * 0.5)',\n background: 'var(--theme-error-50)',\n borderRadius: 'var(--style-radius-s)',\n border: '1px solid var(--theme-error-200)',\n }}\n >\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={loading}\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-elevation-800)',\n border: 'none',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-elevation-50)',\n fontSize: 'var(--font-size-base)',\n fontWeight: 500,\n cursor: loading ? 'not-allowed' : 'pointer',\n opacity: loading ? 0.7 : 1,\n transition: 'opacity 150ms ease',\n }}\n >\n {loading ? 'Sending...' : 'Send Reset Link'}\n </button>\n </form>\n\n <button\n type=\"button\"\n onClick={handleBackToLogin}\n style={{\n width: '100%',\n marginTop: 'var(--base)',\n padding: 'calc(var(--base) * 0.5)',\n background: 'transparent',\n border: 'none',\n color: 'var(--theme-text)',\n opacity: 0.7,\n fontSize: 'var(--font-size-small)',\n cursor: 'pointer',\n }}\n >\n ← Back to login\n </button>\n </div>\n </div>\n )\n }\n\n // Reset link sent confirmation view\n if (viewMode === 'resetSent') {\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--theme-bg)',\n padding: 'var(--base)',\n }}\n >\n <div\n style={{\n background: 'var(--theme-elevation-50)',\n padding: 'calc(var(--base) * 2)',\n borderRadius: 'var(--style-radius-m)',\n boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',\n width: '100%',\n maxWidth: '400px',\n textAlign: 'center',\n }}\n >\n {logo && (\n <div\n style={{\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n {logo}\n </div>\n )}\n\n <div\n style={{\n width: '64px',\n height: '64px',\n background: 'var(--theme-success-100)',\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto calc(var(--base) * 1.5)',\n fontSize: '28px',\n }}\n >\n ✓\n </div>\n\n <h1\n style={{\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-h3)',\n fontWeight: 600,\n margin: '0 0 calc(var(--base) * 0.5) 0',\n }}\n >\n Check Your Email\n </h1>\n\n <p\n style={{\n color: 'var(--theme-text)',\n opacity: 0.7,\n fontSize: 'var(--font-size-small)',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n We've sent a password reset link to <strong>{email}</strong>\n </p>\n\n <p\n style={{\n color: 'var(--theme-text)',\n opacity: 0.6,\n fontSize: 'var(--font-size-small)',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n Didn't receive the email? Check your spam folder or try again.\n </p>\n\n <button\n type=\"button\"\n onClick={handleBackToLogin}\n style={{\n padding: 'calc(var(--base) * 0.75) calc(var(--base) * 1.5)',\n background: 'var(--theme-elevation-150)',\n border: 'none',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-base)',\n cursor: 'pointer',\n }}\n >\n Back to login\n </button>\n </div>\n </div>\n )\n }\n\n // Main login view\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--theme-bg)',\n padding: 'var(--base)',\n }}\n >\n <div\n style={{\n background: 'var(--theme-elevation-50)',\n padding: 'calc(var(--base) * 2)',\n borderRadius: 'var(--style-radius-m)',\n boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',\n width: '100%',\n maxWidth: '400px',\n }}\n >\n {logo && (\n <div\n style={{\n textAlign: 'center',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n {logo}\n </div>\n )}\n\n <h1\n style={{\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-h3)',\n fontWeight: 600,\n textAlign: 'center',\n margin: '0 0 calc(var(--base) * 1.5) 0',\n }}\n >\n {title}\n </h1>\n\n {successMessage && (\n <div\n style={{\n color: 'var(--theme-success-500)',\n marginBottom: 'var(--base)',\n fontSize: 'var(--font-size-small)',\n padding: 'calc(var(--base) * 0.5)',\n background: 'var(--theme-success-50)',\n borderRadius: 'var(--style-radius-s)',\n border: '1px solid var(--theme-success-200)',\n }}\n >\n {successMessage}\n </div>\n )}\n\n <form onSubmit={handleSubmit}>\n <div style={{ marginBottom: 'var(--base)' }}>\n <label\n htmlFor=\"email\"\n style={{\n display: 'block',\n color: 'var(--theme-text)',\n marginBottom: 'calc(var(--base) * 0.5)',\n fontSize: 'var(--font-size-small)',\n fontWeight: 500,\n }}\n >\n Email\n </label>\n <input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n autoComplete=\"email\"\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-input-bg)',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-base)',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n <div style={{ marginBottom: 'var(--base)' }}>\n <label\n htmlFor=\"password\"\n style={{\n display: 'block',\n color: 'var(--theme-text)',\n marginBottom: 'calc(var(--base) * 0.5)',\n fontSize: 'var(--font-size-small)',\n fontWeight: 500,\n }}\n >\n Password\n </label>\n <input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n required\n autoComplete=\"current-password\"\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-input-bg)',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-base)',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {forgotPasswordAvailable && (\n <div\n style={{\n marginBottom: 'calc(var(--base) * 1.5)',\n textAlign: 'right',\n }}\n >\n <button\n type=\"button\"\n onClick={() => switchView('forgotPassword')}\n style={{\n background: 'none',\n border: 'none',\n color: 'var(--theme-text)',\n opacity: 0.7,\n cursor: 'pointer',\n fontSize: 'var(--font-size-small)',\n padding: 0,\n textDecoration: 'underline',\n }}\n >\n Forgot password?\n </button>\n </div>\n )}\n\n {error && (\n <div\n style={{\n color: 'var(--theme-error-500)',\n marginBottom: 'var(--base)',\n fontSize: 'var(--font-size-small)',\n padding: 'calc(var(--base) * 0.5)',\n background: 'var(--theme-error-50)',\n borderRadius: 'var(--style-radius-s)',\n border: '1px solid var(--theme-error-200)',\n }}\n >\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={loading || passkeyLoading}\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-elevation-800)',\n border: 'none',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-elevation-50)',\n fontSize: 'var(--font-size-base)',\n fontWeight: 500,\n cursor: loading || passkeyLoading ? 'not-allowed' : 'pointer',\n opacity: loading || passkeyLoading ? 0.7 : 1,\n transition: 'opacity 150ms ease',\n }}\n >\n {loading ? 'Signing in...' : 'Sign In'}\n </button>\n </form>\n\n {passkeyAvailable && (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n margin: 'calc(var(--base) * 1.5) 0',\n gap: 'calc(var(--base) * 1)',\n }}\n >\n <div\n style={{\n flex: 1,\n height: '1px',\n background: 'var(--theme-elevation-150)',\n }}\n />\n <span\n style={{\n color: 'var(--theme-text)',\n opacity: 0.6,\n fontSize: 'var(--font-size-small)',\n }}\n >\n or\n </span>\n <div\n style={{\n flex: 1,\n height: '1px',\n background: 'var(--theme-elevation-150)',\n }}\n />\n </div>\n\n <button\n type=\"button\"\n onClick={handlePasskeySignIn}\n disabled={loading || passkeyLoading}\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'transparent',\n border: '1px solid var(--theme-elevation-300)',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-base)',\n fontWeight: 500,\n cursor: loading || passkeyLoading ? 'not-allowed' : 'pointer',\n opacity: loading || passkeyLoading ? 0.7 : 1,\n transition: 'opacity 150ms ease',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 'calc(var(--base) * 0.5)',\n }}\n >\n <span style={{ fontSize: '18px' }}>🔐</span>\n {passkeyLoading ? 'Authenticating...' : 'Sign in with Passkey'}\n </button>\n </>\n )}\n\n {signUpAvailable && (\n <div\n style={{\n marginTop: 'calc(var(--base) * 1.5)',\n textAlign: 'center',\n fontSize: 'var(--font-size-small)',\n color: 'var(--theme-text)',\n opacity: 0.8,\n }}\n >\n Don't have an account?{' '}\n <button\n type=\"button\"\n onClick={() => switchView('register')}\n style={{\n background: 'none',\n border: 'none',\n color: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n fontSize: 'inherit',\n textDecoration: 'underline',\n padding: 0,\n }}\n >\n Create account\n </button>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport default LoginView\n"],"names":["useState","useEffect","useRouter","createPayloadAuthClient","hasAnyRole","hasAllRoles","checkUserRoles","user","requiredRole","requireAllRoles","roles","Array","isArray","LoginView","authClient","providedClient","logo","title","afterLoginPath","enablePasskey","enableSignUp","defaultSignUpRole","enableForgotPassword","resetPasswordUrl","router","viewMode","setViewMode","email","setEmail","password","setPassword","name","setName","confirmPassword","setConfirmPassword","error","setError","successMessage","setSuccessMessage","loading","setLoading","passkeyLoading","setPasskeyLoading","checkingSession","setCheckingSession","accessDenied","setAccessDenied","passkeyAvailable","setPasskeyAvailable","signUpAvailable","setSignUpAvailable","forgotPasswordAvailable","setForgotPasswordAvailable","totpCode","setTotpCode","totpLoading","setTotpLoading","getClient","checkSession","client","result","getSession","data","push","fetch","method","credentials","then","res","status","catch","handleSubmit","e","preventDefault","signIn","twoFactorRedirect","message","refresh","handleSignUp","length","signUp","role","sessionResult","handleForgotPassword","requestPasswordReset","redirectTo","window","location","origin","handleTotpVerify","twoFactor","verifyTotp","code","switchView","newView","handleBackToLogin","handlePasskeySignIn","passkey","err","Error","handleSignOut","signOut","div","style","minHeight","display","alignItems","justifyContent","background","color","opacity","padding","borderRadius","boxShadow","width","maxWidth","textAlign","h1","fontSize","fontWeight","margin","p","marginBottom","button","onClick","border","cursor","form","onSubmit","label","htmlFor","input","id","type","inputMode","pattern","autoComplete","value","onChange","target","replace","slice","required","placeholder","fontFamily","letterSpacing","outline","boxSizing","disabled","transition","marginTop","textDecoration","height","strong","gap","flex","span"],"mappings":"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"}
|
|
@@ -5,6 +5,6 @@ type LoginViewWrapperProps = AdminViewProps;
|
|
|
5
5
|
* Reads login configuration from payload.config.custom.betterAuth.login
|
|
6
6
|
* and passes it as props to the client LoginView component.
|
|
7
7
|
*/
|
|
8
|
-
export declare function LoginViewWrapper({ initPageResult }: LoginViewWrapperProps): Promise<import("react
|
|
8
|
+
export declare function LoginViewWrapper({ initPageResult }: LoginViewWrapperProps): Promise<import("react").JSX.Element>;
|
|
9
9
|
export default LoginViewWrapper;
|
|
10
10
|
//# sourceMappingURL=LoginViewWrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginViewWrapper.d.ts","sourceRoot":"","sources":["../../src/components/LoginViewWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAK7C,KAAK,qBAAqB,GAAG,cAAc,CAAA;AAE3C;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,cAAc,EAAE,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"LoginViewWrapper.d.ts","sourceRoot":"","sources":["../../src/components/LoginViewWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAK7C,KAAK,qBAAqB,GAAG,cAAc,CAAA;AAE3C;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,cAAc,EAAE,EAAE,qBAAqB,wCAoB/E;AAED,eAAe,gBAAgB,CAAA"}
|
|
@@ -4,13 +4,23 @@ import { LoginView } from './LoginView.js';
|
|
|
4
4
|
* Server component wrapper for LoginView.
|
|
5
5
|
* Reads login configuration from payload.config.custom.betterAuth.login
|
|
6
6
|
* and passes it as props to the client LoginView component.
|
|
7
|
-
*/
|
|
8
|
-
export async function LoginViewWrapper({ initPageResult }) {
|
|
7
|
+
*/ export async function LoginViewWrapper({ initPageResult }) {
|
|
9
8
|
const { req } = initPageResult;
|
|
10
9
|
const { payload } = req;
|
|
11
10
|
// Read login config from payload.config.custom.betterAuth.login
|
|
12
|
-
const loginConfig =
|
|
13
|
-
return
|
|
11
|
+
const loginConfig = payload.config.custom?.betterAuth?.login ?? {};
|
|
12
|
+
return /*#__PURE__*/ _jsx(LoginView, {
|
|
13
|
+
afterLoginPath: loginConfig.afterLoginPath,
|
|
14
|
+
requiredRole: loginConfig.requiredRole,
|
|
15
|
+
requireAllRoles: loginConfig.requireAllRoles,
|
|
16
|
+
enablePasskey: loginConfig.enablePasskey,
|
|
17
|
+
enableSignUp: loginConfig.enableSignUp,
|
|
18
|
+
defaultSignUpRole: loginConfig.defaultSignUpRole,
|
|
19
|
+
enableForgotPassword: loginConfig.enableForgotPassword,
|
|
20
|
+
resetPasswordUrl: loginConfig.resetPasswordUrl,
|
|
21
|
+
title: loginConfig.title
|
|
22
|
+
});
|
|
14
23
|
}
|
|
15
24
|
export default LoginViewWrapper;
|
|
25
|
+
|
|
16
26
|
//# sourceMappingURL=LoginViewWrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/components/LoginViewWrapper.tsx"],"sourcesContent":["import type { AdminViewProps } from 'payload'\nimport { LoginView, type LoginViewProps } from './LoginView.js'\n\ntype LoginConfig = Omit<LoginViewProps, 'authClient' | 'logo'>\n\ntype LoginViewWrapperProps = AdminViewProps\n\n/**\n * Server component wrapper for LoginView.\n * Reads login configuration from payload.config.custom.betterAuth.login\n * and passes it as props to the client LoginView component.\n */\nexport async function LoginViewWrapper({ initPageResult }: LoginViewWrapperProps) {\n const { req } = initPageResult\n const { payload } = req\n\n // Read login config from payload.config.custom.betterAuth.login\n const loginConfig = (payload.config.custom?.betterAuth?.login ?? {}) as LoginConfig\n\n return (\n <LoginView\n afterLoginPath={loginConfig.afterLoginPath}\n requiredRole={loginConfig.requiredRole}\n requireAllRoles={loginConfig.requireAllRoles}\n enablePasskey={loginConfig.enablePasskey}\n enableSignUp={loginConfig.enableSignUp}\n defaultSignUpRole={loginConfig.defaultSignUpRole}\n enableForgotPassword={loginConfig.enableForgotPassword}\n resetPasswordUrl={loginConfig.resetPasswordUrl}\n title={loginConfig.title}\n />\n )\n}\n\nexport default LoginViewWrapper\n"],"names":["LoginView","LoginViewWrapper","initPageResult","req","payload","loginConfig","config","custom","betterAuth","login","afterLoginPath","requiredRole","requireAllRoles","enablePasskey","enableSignUp","defaultSignUpRole","enableForgotPassword","resetPasswordUrl","title"],"mappings":";AACA,SAASA,SAAS,QAA6B,iBAAgB;AAM/D;;;;CAIC,GACD,OAAO,eAAeC,iBAAiB,EAAEC,cAAc,EAAyB;IAC9E,MAAM,EAAEC,GAAG,EAAE,GAAGD;IAChB,MAAM,EAAEE,OAAO,EAAE,GAAGD;IAEpB,gEAAgE;IAChE,MAAME,cAAeD,QAAQE,MAAM,CAACC,MAAM,EAAEC,YAAYC,SAAS,CAAC;IAElE,qBACE,KAACT;QACCU,gBAAgBL,YAAYK,cAAc;QAC1CC,cAAcN,YAAYM,YAAY;QACtCC,iBAAiBP,YAAYO,eAAe;QAC5CC,eAAeR,YAAYQ,aAAa;QACxCC,cAAcT,YAAYS,YAAY;QACtCC,mBAAmBV,YAAYU,iBAAiB;QAChDC,sBAAsBX,YAAYW,oBAAoB;QACtDC,kBAAkBZ,YAAYY,gBAAgB;QAC9CC,OAAOb,YAAYa,KAAK;;AAG9B;AAEA,eAAejB,iBAAgB"}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* Logout button component styled to match Payload's admin nav.
|
|
3
3
|
* Uses Payload's CSS classes and variables for native theme integration.
|
|
4
4
|
*/
|
|
5
|
-
export declare function LogoutButton(): import("react
|
|
5
|
+
export declare function LogoutButton(): import("react").JSX.Element;
|
|
6
6
|
export default LogoutButton;
|
|
7
7
|
//# sourceMappingURL=LogoutButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogoutButton.d.ts","sourceRoot":"","sources":["../../src/components/LogoutButton.tsx"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,YAAY,
|
|
1
|
+
{"version":3,"file":"LogoutButton.d.ts","sourceRoot":"","sources":["../../src/components/LogoutButton.tsx"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,YAAY,gCA8C3B;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -5,39 +5,47 @@ import { useRouter } from 'next/navigation.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* Logout button component styled to match Payload's admin nav.
|
|
7
7
|
* Uses Payload's CSS classes and variables for native theme integration.
|
|
8
|
-
*/
|
|
9
|
-
export function LogoutButton() {
|
|
8
|
+
*/ export function LogoutButton() {
|
|
10
9
|
const router = useRouter();
|
|
11
10
|
const [isLoading, setIsLoading] = useState(false);
|
|
12
11
|
async function handleLogout() {
|
|
13
|
-
if (isLoading)
|
|
14
|
-
return;
|
|
12
|
+
if (isLoading) return;
|
|
15
13
|
setIsLoading(true);
|
|
16
14
|
try {
|
|
17
15
|
await fetch('/api/auth/sign-out', {
|
|
18
16
|
method: 'POST',
|
|
19
17
|
credentials: 'include',
|
|
20
18
|
headers: {
|
|
21
|
-
'Content-Type': 'application/json'
|
|
19
|
+
'Content-Type': 'application/json'
|
|
22
20
|
},
|
|
23
|
-
body: JSON.stringify({})
|
|
21
|
+
body: JSON.stringify({})
|
|
24
22
|
});
|
|
25
23
|
router.push('/admin/login');
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
24
|
+
} catch (error) {
|
|
28
25
|
console.error('[better-auth] Logout error:', error);
|
|
29
26
|
setIsLoading(false);
|
|
30
27
|
}
|
|
31
28
|
}
|
|
32
|
-
return
|
|
29
|
+
return /*#__PURE__*/ _jsx("button", {
|
|
30
|
+
onClick: handleLogout,
|
|
31
|
+
disabled: isLoading,
|
|
32
|
+
type: "button",
|
|
33
|
+
className: "nav__link",
|
|
34
|
+
style: {
|
|
33
35
|
background: 'none',
|
|
34
36
|
border: 'none',
|
|
35
37
|
cursor: isLoading ? 'not-allowed' : 'pointer',
|
|
36
38
|
opacity: isLoading ? 0.7 : 1,
|
|
37
39
|
width: '100%',
|
|
38
40
|
textAlign: 'left',
|
|
39
|
-
padding: 0
|
|
40
|
-
},
|
|
41
|
+
padding: 0
|
|
42
|
+
},
|
|
43
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
44
|
+
className: "nav__link-label",
|
|
45
|
+
children: isLoading ? 'Logging out...' : 'Log out'
|
|
46
|
+
})
|
|
47
|
+
});
|
|
41
48
|
}
|
|
42
49
|
export default LogoutButton;
|
|
50
|
+
|
|
43
51
|
//# sourceMappingURL=LogoutButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/components/LogoutButton.tsx"],"sourcesContent":["'use client'\n\nimport { useState } from 'react'\nimport { useRouter } from 'next/navigation.js'\n\n/**\n * Logout button component styled to match Payload's admin nav.\n * Uses Payload's CSS classes and variables for native theme integration.\n */\nexport function LogoutButton() {\n const router = useRouter()\n const [isLoading, setIsLoading] = useState(false)\n\n async function handleLogout() {\n if (isLoading) return\n setIsLoading(true)\n\n try {\n await fetch('/api/auth/sign-out', {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({}),\n })\n\n router.push('/admin/login')\n } catch (error) {\n console.error('[better-auth] Logout error:', error)\n setIsLoading(false)\n }\n }\n\n return (\n <button\n onClick={handleLogout}\n disabled={isLoading}\n type=\"button\"\n className=\"nav__link\"\n style={{\n background: 'none',\n border: 'none',\n cursor: isLoading ? 'not-allowed' : 'pointer',\n opacity: isLoading ? 0.7 : 1,\n width: '100%',\n textAlign: 'left',\n padding: 0,\n }}\n >\n <span className=\"nav__link-label\">\n {isLoading ? 'Logging out...' : 'Log out'}\n </span>\n </button>\n )\n}\n\nexport default LogoutButton\n"],"names":["useState","useRouter","LogoutButton","router","isLoading","setIsLoading","handleLogout","fetch","method","credentials","headers","body","JSON","stringify","push","error","console","button","onClick","disabled","type","className","style","background","border","cursor","opacity","width","textAlign","padding","span"],"mappings":"AAAA;;AAEA,SAASA,QAAQ,QAAQ,QAAO;AAChC,SAASC,SAAS,QAAQ,qBAAoB;AAE9C;;;CAGC,GACD,OAAO,SAASC;IACd,MAAMC,SAASF;IACf,MAAM,CAACG,WAAWC,aAAa,GAAGL,SAAS;IAE3C,eAAeM;QACb,IAAIF,WAAW;QACfC,aAAa;QAEb,IAAI;YACF,MAAME,MAAM,sBAAsB;gBAChCC,QAAQ;gBACRC,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,MAAMC,KAAKC,SAAS,CAAC,CAAC;YACxB;YAEAV,OAAOW,IAAI,CAAC;QACd,EAAE,OAAOC,OAAO;YACdC,QAAQD,KAAK,CAAC,+BAA+BA;YAC7CV,aAAa;QACf;IACF;IAEA,qBACE,KAACY;QACCC,SAASZ;QACTa,UAAUf;QACVgB,MAAK;QACLC,WAAU;QACVC,OAAO;YACLC,YAAY;YACZC,QAAQ;YACRC,QAAQrB,YAAY,gBAAgB;YACpCsB,SAAStB,YAAY,MAAM;YAC3BuB,OAAO;YACPC,WAAW;YACXC,SAAS;QACX;kBAEA,cAAA,KAACC;YAAKT,WAAU;sBACbjB,YAAY,mBAAmB;;;AAIxC;AAEA,eAAeF,aAAY"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ButtonHTMLAttributes } from 'react';
|
|
2
|
-
import { type PayloadAuthClient } from '../exports/client';
|
|
2
|
+
import { type PayloadAuthClient } from '../exports/client.js';
|
|
3
3
|
export type PasskeyRegisterButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> & {
|
|
4
4
|
/** Optional pre-configured auth client */
|
|
5
5
|
authClient?: PayloadAuthClient;
|
|
@@ -41,6 +41,6 @@ export type PasskeyRegisterButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonEle
|
|
|
41
41
|
* }
|
|
42
42
|
* ```
|
|
43
43
|
*/
|
|
44
|
-
export declare function PasskeyRegisterButton({ authClient: providedClient, passkeyName, onSuccess, onError, label, loadingLabel, disabled, children, ...buttonProps }: PasskeyRegisterButtonProps): import("react
|
|
44
|
+
export declare function PasskeyRegisterButton({ authClient: providedClient, passkeyName, onSuccess, onError, label, loadingLabel, disabled, children, ...buttonProps }: PasskeyRegisterButtonProps): import("react").JSX.Element;
|
|
45
45
|
export default PasskeyRegisterButton;
|
|
46
46
|
//# sourceMappingURL=PasskeyRegisterButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasskeyRegisterButton.d.ts","sourceRoot":"","sources":["../../src/components/PasskeyRegisterButton.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,
|
|
1
|
+
{"version":3,"file":"PasskeyRegisterButton.d.ts","sourceRoot":"","sources":["../../src/components/PasskeyRegisterButton.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAA;AAE7B,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,SAAS,CACV,GAAG;IACF,0CAA0C;IAC1C,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC5D,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,UAAU,EAAE,cAAc,EAC1B,WAAW,EACX,SAAS,EACT,OAAO,EACP,KAAqB,EACrB,YAA+B,EAC/B,QAAQ,EACR,QAAQ,EACR,GAAG,WAAW,EACf,EAAE,0BAA0B,+BA0C5B;AAED,eAAe,qBAAqB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from 'react';
|
|
4
|
-
import { createPayloadAuthClient
|
|
4
|
+
import { createPayloadAuthClient } from '../exports/client.js';
|
|
5
5
|
/**
|
|
6
6
|
* Standalone passkey registration button component.
|
|
7
7
|
* Handles the WebAuthn registration flow with Better Auth.
|
|
@@ -25,39 +25,43 @@ import { createPayloadAuthClient, } from '../exports/client';
|
|
|
25
25
|
* )
|
|
26
26
|
* }
|
|
27
27
|
* ```
|
|
28
|
-
*/
|
|
29
|
-
export function PasskeyRegisterButton({ authClient: providedClient, passkeyName, onSuccess, onError, label = 'Add Passkey', loadingLabel = 'Registering...', disabled, children, ...buttonProps }) {
|
|
28
|
+
*/ export function PasskeyRegisterButton({ authClient: providedClient, passkeyName, onSuccess, onError, label = 'Add Passkey', loadingLabel = 'Registering...', disabled, children, ...buttonProps }) {
|
|
30
29
|
const [loading, setLoading] = useState(false);
|
|
31
30
|
async function handleClick() {
|
|
32
31
|
setLoading(true);
|
|
33
32
|
try {
|
|
34
33
|
const client = providedClient ?? createPayloadAuthClient();
|
|
35
34
|
const result = await client.passkey.addPasskey({
|
|
36
|
-
name: passkeyName
|
|
35
|
+
name: passkeyName
|
|
37
36
|
});
|
|
38
37
|
if (result.error) {
|
|
39
38
|
onError?.(result.error.message ?? 'Passkey registration failed');
|
|
39
|
+
} else if (result.data) {
|
|
40
|
+
onSuccess?.({
|
|
41
|
+
id: result.data.id,
|
|
42
|
+
name: passkeyName
|
|
43
|
+
});
|
|
40
44
|
}
|
|
41
|
-
|
|
42
|
-
onSuccess?.({ id: result.data.id, name: passkeyName });
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
catch (err) {
|
|
45
|
+
} catch (err) {
|
|
46
46
|
if (err instanceof Error && err.name === 'NotAllowedError') {
|
|
47
47
|
onError?.('Passkey registration was cancelled or not allowed');
|
|
48
|
-
}
|
|
49
|
-
else if (err instanceof Error && err.name === 'InvalidStateError') {
|
|
48
|
+
} else if (err instanceof Error && err.name === 'InvalidStateError') {
|
|
50
49
|
onError?.('This passkey is already registered');
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
50
|
+
} else {
|
|
53
51
|
onError?.(err instanceof Error ? err.message : 'Passkey registration failed');
|
|
54
52
|
}
|
|
55
|
-
}
|
|
56
|
-
finally {
|
|
53
|
+
} finally{
|
|
57
54
|
setLoading(false);
|
|
58
55
|
}
|
|
59
56
|
}
|
|
60
|
-
return
|
|
57
|
+
return /*#__PURE__*/ _jsx("button", {
|
|
58
|
+
type: "button",
|
|
59
|
+
onClick: handleClick,
|
|
60
|
+
disabled: disabled || loading,
|
|
61
|
+
...buttonProps,
|
|
62
|
+
children: children ?? (loading ? loadingLabel : label)
|
|
63
|
+
});
|
|
61
64
|
}
|
|
62
65
|
export default PasskeyRegisterButton;
|
|
66
|
+
|
|
63
67
|
//# sourceMappingURL=PasskeyRegisterButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/components/PasskeyRegisterButton.tsx"],"sourcesContent":["'use client'\n\nimport { useState, type ButtonHTMLAttributes } from 'react'\nimport {\n createPayloadAuthClient,\n type PayloadAuthClient,\n} from '../exports/client.js'\n\nexport type PasskeyRegisterButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'onClick'\n> & {\n /** Optional pre-configured auth client */\n authClient?: PayloadAuthClient\n /** Optional name for the passkey */\n passkeyName?: string\n /** Callback when registration succeeds */\n onSuccess?: (passkey: { id: string; name?: string }) => void\n /** Callback when registration fails */\n onError?: (error: string) => void\n /** Button text when idle. Default: 'Add Passkey' */\n label?: string\n /** Button text when loading. Default: 'Registering...' */\n loadingLabel?: string\n}\n\n/**\n * Standalone passkey registration button component.\n * Handles the WebAuthn registration flow with Better Auth.\n *\n * @example\n * ```tsx\n * import { PasskeyRegisterButton } from '@delmaredigital/payload-better-auth/components'\n *\n * function SecuritySettings() {\n * return (\n * <PasskeyRegisterButton\n * passkeyName=\"My MacBook\"\n * onSuccess={(passkey) => {\n * console.log('Passkey registered:', passkey.id)\n * refetchPasskeys()\n * }}\n * onError={(error) => {\n * setError(error)\n * }}\n * />\n * )\n * }\n * ```\n */\nexport function PasskeyRegisterButton({\n authClient: providedClient,\n passkeyName,\n onSuccess,\n onError,\n label = 'Add Passkey',\n loadingLabel = 'Registering...',\n disabled,\n children,\n ...buttonProps\n}: PasskeyRegisterButtonProps) {\n const [loading, setLoading] = useState(false)\n\n async function handleClick() {\n setLoading(true)\n\n try {\n const client = providedClient ?? createPayloadAuthClient()\n const result = await client.passkey.addPasskey({\n name: passkeyName,\n })\n\n if (result.error) {\n onError?.(result.error.message ?? 'Passkey registration failed')\n } else if (result.data) {\n onSuccess?.({ id: result.data.id, name: passkeyName })\n }\n } catch (err) {\n if (err instanceof Error && err.name === 'NotAllowedError') {\n onError?.('Passkey registration was cancelled or not allowed')\n } else if (err instanceof Error && err.name === 'InvalidStateError') {\n onError?.('This passkey is already registered')\n } else {\n onError?.(\n err instanceof Error ? err.message : 'Passkey registration failed'\n )\n }\n } finally {\n setLoading(false)\n }\n }\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled || loading}\n {...buttonProps}\n >\n {children ?? (loading ? loadingLabel : label)}\n </button>\n )\n}\n\nexport default PasskeyRegisterButton\n"],"names":["useState","createPayloadAuthClient","PasskeyRegisterButton","authClient","providedClient","passkeyName","onSuccess","onError","label","loadingLabel","disabled","children","buttonProps","loading","setLoading","handleClick","client","result","passkey","addPasskey","name","error","message","data","id","err","Error","button","type","onClick"],"mappings":"AAAA;;AAEA,SAASA,QAAQ,QAAmC,QAAO;AAC3D,SACEC,uBAAuB,QAElB,uBAAsB;AAoB7B;;;;;;;;;;;;;;;;;;;;;;;CAuBC,GACD,OAAO,SAASC,sBAAsB,EACpCC,YAAYC,cAAc,EAC1BC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,QAAQ,aAAa,EACrBC,eAAe,gBAAgB,EAC/BC,QAAQ,EACRC,QAAQ,EACR,GAAGC,aACwB;IAC3B,MAAM,CAACC,SAASC,WAAW,GAAGd,SAAS;IAEvC,eAAee;QACbD,WAAW;QAEX,IAAI;YACF,MAAME,SAASZ,kBAAkBH;YACjC,MAAMgB,SAAS,MAAMD,OAAOE,OAAO,CAACC,UAAU,CAAC;gBAC7CC,MAAMf;YACR;YAEA,IAAIY,OAAOI,KAAK,EAAE;gBAChBd,UAAUU,OAAOI,KAAK,CAACC,OAAO,IAAI;YACpC,OAAO,IAAIL,OAAOM,IAAI,EAAE;gBACtBjB,YAAY;oBAAEkB,IAAIP,OAAOM,IAAI,CAACC,EAAE;oBAAEJ,MAAMf;gBAAY;YACtD;QACF,EAAE,OAAOoB,KAAK;YACZ,IAAIA,eAAeC,SAASD,IAAIL,IAAI,KAAK,mBAAmB;gBAC1Db,UAAU;YACZ,OAAO,IAAIkB,eAAeC,SAASD,IAAIL,IAAI,KAAK,qBAAqB;gBACnEb,UAAU;YACZ,OAAO;gBACLA,UACEkB,eAAeC,QAAQD,IAAIH,OAAO,GAAG;YAEzC;QACF,SAAU;YACRR,WAAW;QACb;IACF;IAEA,qBACE,KAACa;QACCC,MAAK;QACLC,SAASd;QACTL,UAAUA,YAAYG;QACrB,GAAGD,WAAW;kBAEdD,YAAaE,CAAAA,UAAUJ,eAAeD,KAAI;;AAGjD;AAEA,eAAeN,sBAAqB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ButtonHTMLAttributes } from 'react';
|
|
2
|
-
import { type PayloadAuthClient } from '../exports/client';
|
|
2
|
+
import { type PayloadAuthClient } from '../exports/client.js';
|
|
3
3
|
export type PasskeySignInButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> & {
|
|
4
4
|
/** Optional pre-configured auth client */
|
|
5
5
|
authClient?: PayloadAuthClient;
|
|
@@ -38,6 +38,6 @@ export type PasskeySignInButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonEleme
|
|
|
38
38
|
* }
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
|
-
export declare function PasskeySignInButton({ authClient: providedClient, onSuccess, onError, label, loadingLabel, disabled, children, ...buttonProps }: PasskeySignInButtonProps): import("react
|
|
41
|
+
export declare function PasskeySignInButton({ authClient: providedClient, onSuccess, onError, label, loadingLabel, disabled, children, ...buttonProps }: PasskeySignInButtonProps): import("react").JSX.Element;
|
|
42
42
|
export default PasskeySignInButton;
|
|
43
43
|
//# sourceMappingURL=PasskeySignInButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasskeySignInButton.d.ts","sourceRoot":"","sources":["../../src/components/PasskeySignInButton.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,
|
|
1
|
+
{"version":3,"file":"PasskeySignInButton.d.ts","sourceRoot":"","sources":["../../src/components/PasskeySignInButton.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAA;AAE7B,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,SAAS,CACV,GAAG;IACF,0CAA0C;IAC1C,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,qCAAqC;IACrC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACxE,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,UAAU,EAAE,cAAc,EAC1B,SAAS,EACT,OAAO,EACP,KAA8B,EAC9B,YAAkC,EAClC,QAAQ,EACR,QAAQ,EACR,GAAG,WAAW,EACf,EAAE,wBAAwB,+BAsC1B;AAED,eAAe,mBAAmB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from 'react';
|
|
4
|
-
import { createPayloadAuthClient
|
|
4
|
+
import { createPayloadAuthClient } from '../exports/client.js';
|
|
5
5
|
/**
|
|
6
6
|
* Standalone passkey sign-in button component.
|
|
7
7
|
* Handles the WebAuthn authentication flow with Better Auth.
|
|
@@ -23,8 +23,7 @@ import { createPayloadAuthClient, } from '../exports/client';
|
|
|
23
23
|
* )
|
|
24
24
|
* }
|
|
25
25
|
* ```
|
|
26
|
-
*/
|
|
27
|
-
export function PasskeySignInButton({ authClient: providedClient, onSuccess, onError, label = 'Sign in with Passkey', loadingLabel = 'Authenticating...', disabled, children, ...buttonProps }) {
|
|
26
|
+
*/ export function PasskeySignInButton({ authClient: providedClient, onSuccess, onError, label = 'Sign in with Passkey', loadingLabel = 'Authenticating...', disabled, children, ...buttonProps }) {
|
|
28
27
|
const [loading, setLoading] = useState(false);
|
|
29
28
|
async function handleClick() {
|
|
30
29
|
setLoading(true);
|
|
@@ -33,24 +32,27 @@ export function PasskeySignInButton({ authClient: providedClient, onSuccess, onE
|
|
|
33
32
|
const result = await client.signIn.passkey();
|
|
34
33
|
if (result.error) {
|
|
35
34
|
onError?.(result.error.message ?? 'Passkey authentication failed');
|
|
36
|
-
}
|
|
37
|
-
else if (result.data?.user) {
|
|
35
|
+
} else if (result.data?.user) {
|
|
38
36
|
onSuccess?.(result.data.user);
|
|
39
37
|
}
|
|
40
|
-
}
|
|
41
|
-
catch (err) {
|
|
38
|
+
} catch (err) {
|
|
42
39
|
if (err instanceof Error && err.name === 'NotAllowedError') {
|
|
43
40
|
onError?.('Passkey authentication was cancelled or not allowed');
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
41
|
+
} else {
|
|
46
42
|
onError?.(err instanceof Error ? err.message : 'Passkey authentication failed');
|
|
47
43
|
}
|
|
48
|
-
}
|
|
49
|
-
finally {
|
|
44
|
+
} finally{
|
|
50
45
|
setLoading(false);
|
|
51
46
|
}
|
|
52
47
|
}
|
|
53
|
-
return
|
|
48
|
+
return /*#__PURE__*/ _jsx("button", {
|
|
49
|
+
type: "button",
|
|
50
|
+
onClick: handleClick,
|
|
51
|
+
disabled: disabled || loading,
|
|
52
|
+
...buttonProps,
|
|
53
|
+
children: children ?? (loading ? loadingLabel : label)
|
|
54
|
+
});
|
|
54
55
|
}
|
|
55
56
|
export default PasskeySignInButton;
|
|
57
|
+
|
|
56
58
|
//# sourceMappingURL=PasskeySignInButton.js.map
|