@delmaredigital/payload-better-auth 0.3.6 → 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.
Files changed (164) hide show
  1. package/README.md +60 -12
  2. package/dist/adapter/collections.d.ts.map +1 -1
  3. package/dist/adapter/collections.js +126 -88
  4. package/dist/adapter/collections.js.map +1 -1
  5. package/dist/adapter/index.js +197 -150
  6. package/dist/adapter/index.js.map +1 -1
  7. package/dist/components/BeforeLogin.d.ts +1 -1
  8. package/dist/components/BeforeLogin.d.ts.map +1 -1
  9. package/dist/components/BeforeLogin.js +15 -7
  10. package/dist/components/BeforeLogin.js.map +1 -1
  11. package/dist/components/LoginView.d.ts +2 -2
  12. package/dist/components/LoginView.d.ts.map +1 -1
  13. package/dist/components/LoginView.js +660 -218
  14. package/dist/components/LoginView.js.map +1 -1
  15. package/dist/components/LoginViewWrapper.d.ts +1 -1
  16. package/dist/components/LoginViewWrapper.d.ts.map +1 -1
  17. package/dist/components/LoginViewWrapper.js +14 -4
  18. package/dist/components/LoginViewWrapper.js.map +1 -1
  19. package/dist/components/LogoutButton.d.ts +1 -1
  20. package/dist/components/LogoutButton.d.ts.map +1 -1
  21. package/dist/components/LogoutButton.js +19 -11
  22. package/dist/components/LogoutButton.js.map +1 -1
  23. package/dist/components/PasskeyRegisterButton.d.ts +2 -2
  24. package/dist/components/PasskeyRegisterButton.d.ts.map +1 -1
  25. package/dist/components/PasskeyRegisterButton.js +20 -16
  26. package/dist/components/PasskeyRegisterButton.js.map +1 -1
  27. package/dist/components/PasskeySignInButton.d.ts +2 -2
  28. package/dist/components/PasskeySignInButton.d.ts.map +1 -1
  29. package/dist/components/PasskeySignInButton.js +14 -12
  30. package/dist/components/PasskeySignInButton.js.map +1 -1
  31. package/dist/components/auth/ForgotPasswordView.d.ts +1 -1
  32. package/dist/components/auth/ForgotPasswordView.d.ts.map +1 -1
  33. package/dist/components/auth/ForgotPasswordView.js +133 -43
  34. package/dist/components/auth/ForgotPasswordView.js.map +1 -1
  35. package/dist/components/auth/ResetPasswordView.d.ts +1 -1
  36. package/dist/components/auth/ResetPasswordView.d.ts.map +1 -1
  37. package/dist/components/auth/ResetPasswordView.js +154 -50
  38. package/dist/components/auth/ResetPasswordView.js.map +1 -1
  39. package/dist/components/auth/index.js +2 -2
  40. package/dist/components/auth/index.js.map +1 -1
  41. package/dist/components/management/ApiKeysManagementClient.d.ts +2 -2
  42. package/dist/components/management/ApiKeysManagementClient.d.ts.map +1 -1
  43. package/dist/components/management/ApiKeysManagementClient.js +539 -222
  44. package/dist/components/management/ApiKeysManagementClient.js.map +1 -1
  45. package/dist/components/management/PasskeysManagementClient.d.ts +2 -2
  46. package/dist/components/management/PasskeysManagementClient.d.ts.map +1 -1
  47. package/dist/components/management/PasskeysManagementClient.js +215 -92
  48. package/dist/components/management/PasskeysManagementClient.js.map +1 -1
  49. package/dist/components/management/SecurityNavLinks.d.ts +1 -1
  50. package/dist/components/management/SecurityNavLinks.d.ts.map +1 -1
  51. package/dist/components/management/SecurityNavLinks.js +51 -24
  52. package/dist/components/management/SecurityNavLinks.js.map +1 -1
  53. package/dist/components/management/TwoFactorManagementClient.d.ts +2 -2
  54. package/dist/components/management/TwoFactorManagementClient.d.ts.map +1 -1
  55. package/dist/components/management/TwoFactorManagementClient.js +270 -111
  56. package/dist/components/management/TwoFactorManagementClient.js.map +1 -1
  57. package/dist/components/management/index.js +2 -2
  58. package/dist/components/management/index.js.map +1 -1
  59. package/dist/components/management/views/ApiKeysView.d.ts +1 -1
  60. package/dist/components/management/views/ApiKeysView.d.ts.map +1 -1
  61. package/dist/components/management/views/ApiKeysView.js +19 -4
  62. package/dist/components/management/views/ApiKeysView.js.map +1 -1
  63. package/dist/components/management/views/PasskeysView.d.ts +1 -1
  64. package/dist/components/management/views/PasskeysView.d.ts.map +1 -1
  65. package/dist/components/management/views/PasskeysView.js +16 -4
  66. package/dist/components/management/views/PasskeysView.js.map +1 -1
  67. package/dist/components/management/views/TwoFactorView.d.ts +1 -1
  68. package/dist/components/management/views/TwoFactorView.d.ts.map +1 -1
  69. package/dist/components/management/views/TwoFactorView.js +16 -4
  70. package/dist/components/management/views/TwoFactorView.js.map +1 -1
  71. package/dist/components/management/views/index.js +2 -2
  72. package/dist/components/management/views/index.js.map +1 -1
  73. package/dist/components/twoFactor/TwoFactorSetupView.d.ts +1 -1
  74. package/dist/components/twoFactor/TwoFactorSetupView.d.ts.map +1 -1
  75. package/dist/components/twoFactor/TwoFactorSetupView.js +240 -87
  76. package/dist/components/twoFactor/TwoFactorSetupView.js.map +1 -1
  77. package/dist/components/twoFactor/TwoFactorVerifyView.d.ts +1 -1
  78. package/dist/components/twoFactor/TwoFactorVerifyView.d.ts.map +1 -1
  79. package/dist/components/twoFactor/TwoFactorVerifyView.js +108 -45
  80. package/dist/components/twoFactor/TwoFactorVerifyView.js.map +1 -1
  81. package/dist/components/twoFactor/index.js +2 -2
  82. package/dist/components/twoFactor/index.js.map +1 -1
  83. package/dist/exports/client.d.ts +2356 -2
  84. package/dist/exports/client.d.ts.map +1 -1
  85. package/dist/exports/client.js +48 -8
  86. package/dist/exports/client.js.map +1 -1
  87. package/dist/exports/components.js +2 -2
  88. package/dist/exports/components.js.map +1 -1
  89. package/dist/exports/management.js +3 -3
  90. package/dist/exports/management.js.map +1 -1
  91. package/dist/exports/rsc.js +2 -2
  92. package/dist/exports/rsc.js.map +1 -1
  93. package/dist/generated-types.js +4 -2
  94. package/dist/generated-types.js.map +1 -1
  95. package/dist/index.js +6 -6
  96. package/dist/index.js.map +1 -1
  97. package/dist/plugin/index.d.ts +35 -2
  98. package/dist/plugin/index.d.ts.map +1 -1
  99. package/dist/plugin/index.js +198 -162
  100. package/dist/plugin/index.js.map +1 -1
  101. package/dist/scripts/generate-types.js +66 -50
  102. package/dist/scripts/generate-types.js.map +1 -1
  103. package/dist/types/apiKey.js +7 -2
  104. package/dist/types/apiKey.js.map +1 -1
  105. package/dist/types/betterAuth.js +23 -2
  106. package/dist/types/betterAuth.js.map +1 -1
  107. package/dist/utils/access.js +78 -81
  108. package/dist/utils/access.js.map +1 -1
  109. package/dist/utils/apiKeyAccess.js +65 -72
  110. package/dist/utils/apiKeyAccess.js.map +1 -1
  111. package/dist/utils/betterAuthDefaults.js +8 -8
  112. package/dist/utils/betterAuthDefaults.js.map +1 -1
  113. package/dist/utils/detectAuthConfig.js +8 -11
  114. package/dist/utils/detectAuthConfig.js.map +1 -1
  115. package/dist/utils/detectEnabledPlugins.js +6 -7
  116. package/dist/utils/detectEnabledPlugins.js.map +1 -1
  117. package/dist/utils/firstUserAdmin.js +18 -20
  118. package/dist/utils/firstUserAdmin.js.map +1 -1
  119. package/dist/utils/generateScopes.js +40 -41
  120. package/dist/utils/generateScopes.js.map +1 -1
  121. package/dist/utils/session.js +8 -9
  122. package/dist/utils/session.js.map +1 -1
  123. package/package.json +97 -26
  124. package/src/adapter/collections.ts +621 -0
  125. package/src/adapter/index.ts +712 -0
  126. package/src/components/BeforeLogin.tsx +39 -0
  127. package/src/components/LoginView.tsx +1516 -0
  128. package/src/components/LoginViewWrapper.tsx +35 -0
  129. package/src/components/LogoutButton.tsx +58 -0
  130. package/src/components/PasskeyRegisterButton.tsx +105 -0
  131. package/src/components/PasskeySignInButton.tsx +96 -0
  132. package/src/components/auth/ForgotPasswordView.tsx +274 -0
  133. package/src/components/auth/ResetPasswordView.tsx +331 -0
  134. package/src/components/auth/index.ts +8 -0
  135. package/src/components/management/ApiKeysManagementClient.tsx +988 -0
  136. package/src/components/management/PasskeysManagementClient.tsx +409 -0
  137. package/src/components/management/SecurityNavLinks.tsx +117 -0
  138. package/src/components/management/TwoFactorManagementClient.tsx +560 -0
  139. package/src/components/management/index.ts +20 -0
  140. package/src/components/management/views/ApiKeysView.tsx +57 -0
  141. package/src/components/management/views/PasskeysView.tsx +42 -0
  142. package/src/components/management/views/TwoFactorView.tsx +42 -0
  143. package/src/components/management/views/index.ts +10 -0
  144. package/src/components/twoFactor/TwoFactorSetupView.tsx +515 -0
  145. package/src/components/twoFactor/TwoFactorVerifyView.tsx +238 -0
  146. package/src/components/twoFactor/index.ts +8 -0
  147. package/src/exports/client.ts +77 -0
  148. package/src/exports/components.ts +30 -0
  149. package/src/exports/management.ts +25 -0
  150. package/src/exports/rsc.ts +11 -0
  151. package/src/generated-types.ts +269 -0
  152. package/src/index.ts +135 -0
  153. package/src/plugin/index.ts +834 -0
  154. package/src/scripts/generate-types.ts +269 -0
  155. package/src/types/apiKey.ts +63 -0
  156. package/src/types/betterAuth.ts +253 -0
  157. package/src/utils/access.ts +410 -0
  158. package/src/utils/apiKeyAccess.ts +443 -0
  159. package/src/utils/betterAuthDefaults.ts +102 -0
  160. package/src/utils/detectAuthConfig.ts +47 -0
  161. package/src/utils/detectEnabledPlugins.ts +69 -0
  162. package/src/utils/firstUserAdmin.ts +164 -0
  163. package/src/utils/generateScopes.ts +150 -0
  164. package/src/utils/session.ts +91 -0
@@ -1 +1 @@
1
- {"version":3,"file":"PasskeySignInButton.js","sourceRoot":"","sources":["../../src/components/PasskeySignInButton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAA6B,MAAM,OAAO,CAAA;AAC3D,OAAO,EACL,uBAAuB,GAExB,MAAM,mBAAmB,CAAA;AAkB1B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,UAAU,EAAE,cAAc,EAC1B,SAAS,EACT,OAAO,EACP,KAAK,GAAG,sBAAsB,EAC9B,YAAY,GAAG,mBAAmB,EAClC,QAAQ,EACR,QAAQ,EACR,GAAG,WAAW,EACW;IACzB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,KAAK,UAAU,WAAW;QACxB,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,cAAc,IAAI,uBAAuB,EAAE,CAAA;YAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;YAE5C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,+BAA+B,CAAC,CAAA;YACpE,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBAC7B,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAoD,CAAC,CAAA;YAC/E,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAC3D,OAAO,EAAE,CAAC,qDAAqD,CAAC,CAAA;YAClE,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CACrE,CAAA;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,IAAI,OAAO,KACzB,WAAW,YAEd,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GACtC,CACV,CAAA;AACH,CAAC;AAED,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"sources":["../../src/components/PasskeySignInButton.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 PasskeySignInButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'onClick'\n> & {\n /** Optional pre-configured auth client */\n authClient?: PayloadAuthClient\n /** Callback when sign-in succeeds */\n onSuccess?: (user: { id: string; email: string; role?: string }) => void\n /** Callback when sign-in fails */\n onError?: (error: string) => void\n /** Button text when idle. Default: 'Sign in with Passkey' */\n label?: string\n /** Button text when loading. Default: 'Authenticating...' */\n loadingLabel?: string\n}\n\n/**\n * Standalone passkey sign-in button component.\n * Handles the WebAuthn authentication flow with Better Auth.\n *\n * @example\n * ```tsx\n * import { PasskeySignInButton } from '@delmaredigital/payload-better-auth/components'\n *\n * function LoginForm() {\n * return (\n * <PasskeySignInButton\n * onSuccess={(user) => {\n * router.push('/dashboard')\n * }}\n * onError={(error) => {\n * setError(error)\n * }}\n * />\n * )\n * }\n * ```\n */\nexport function PasskeySignInButton({\n authClient: providedClient,\n onSuccess,\n onError,\n label = 'Sign in with Passkey',\n loadingLabel = 'Authenticating...',\n disabled,\n children,\n ...buttonProps\n}: PasskeySignInButtonProps) {\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.signIn.passkey()\n\n if (result.error) {\n onError?.(result.error.message ?? 'Passkey authentication failed')\n } else if (result.data?.user) {\n onSuccess?.(result.data.user as { id: string; email: string; role?: string })\n }\n } catch (err) {\n if (err instanceof Error && err.name === 'NotAllowedError') {\n onError?.('Passkey authentication was cancelled or not allowed')\n } else {\n onError?.(\n err instanceof Error ? err.message : 'Passkey authentication 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 PasskeySignInButton\n"],"names":["useState","createPayloadAuthClient","PasskeySignInButton","authClient","providedClient","onSuccess","onError","label","loadingLabel","disabled","children","buttonProps","loading","setLoading","handleClick","client","result","signIn","passkey","error","message","data","user","err","Error","name","button","type","onClick"],"mappings":"AAAA;;AAEA,SAASA,QAAQ,QAAmC,QAAO;AAC3D,SACEC,uBAAuB,QAElB,uBAAsB;AAkB7B;;;;;;;;;;;;;;;;;;;;;CAqBC,GACD,OAAO,SAASC,oBAAoB,EAClCC,YAAYC,cAAc,EAC1BC,SAAS,EACTC,OAAO,EACPC,QAAQ,sBAAsB,EAC9BC,eAAe,mBAAmB,EAClCC,QAAQ,EACRC,QAAQ,EACR,GAAGC,aACsB;IACzB,MAAM,CAACC,SAASC,WAAW,GAAGb,SAAS;IAEvC,eAAec;QACbD,WAAW;QAEX,IAAI;YACF,MAAME,SAASX,kBAAkBH;YACjC,MAAMe,SAAS,MAAMD,OAAOE,MAAM,CAACC,OAAO;YAE1C,IAAIF,OAAOG,KAAK,EAAE;gBAChBb,UAAUU,OAAOG,KAAK,CAACC,OAAO,IAAI;YACpC,OAAO,IAAIJ,OAAOK,IAAI,EAAEC,MAAM;gBAC5BjB,YAAYW,OAAOK,IAAI,CAACC,IAAI;YAC9B;QACF,EAAE,OAAOC,KAAK;YACZ,IAAIA,eAAeC,SAASD,IAAIE,IAAI,KAAK,mBAAmB;gBAC1DnB,UAAU;YACZ,OAAO;gBACLA,UACEiB,eAAeC,QAAQD,IAAIH,OAAO,GAAG;YAEzC;QACF,SAAU;YACRP,WAAW;QACb;IACF;IAEA,qBACE,KAACa;QACCC,MAAK;QACLC,SAASd;QACTL,UAAUA,YAAYG;QACrB,GAAGD,WAAW;kBAEdD,YAAaE,CAAAA,UAAUJ,eAAeD,KAAI;;AAGjD;AAEA,eAAeL,oBAAmB"}
@@ -12,6 +12,6 @@ export type ForgotPasswordViewProps = {
12
12
  * Forgot password page component for requesting a password reset email.
13
13
  * Uses Better Auth's forgetPassword endpoint.
14
14
  */
15
- export declare function ForgotPasswordView({ logo, title, loginPath, successMessage, }: ForgotPasswordViewProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function ForgotPasswordView({ logo, title, loginPath, successMessage, }: ForgotPasswordViewProps): import("react").JSX.Element;
16
16
  export default ForgotPasswordView;
17
17
  //# sourceMappingURL=ForgotPasswordView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ForgotPasswordView.d.ts","sourceRoot":"","sources":["../../../src/components/auth/ForgotPasswordView.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,uBAAuB,GAAG;IACpC,0BAA0B;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,KAAyB,EACzB,SAA0B,EAC1B,cAAgG,GACjG,EAAE,uBAAuB,2CAuPzB;AAED,eAAe,kBAAkB,CAAA"}
1
+ {"version":3,"file":"ForgotPasswordView.d.ts","sourceRoot":"","sources":["../../../src/components/auth/ForgotPasswordView.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,uBAAuB,GAAG;IACpC,0BAA0B;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,KAAyB,EACzB,SAA0B,EAC1B,cAAgG,GACjG,EAAE,uBAAuB,+BAuPzB;AAED,eAAe,kBAAkB,CAAA"}
@@ -4,8 +4,7 @@ import { useState } from 'react';
4
4
  /**
5
5
  * Forgot password page component for requesting a password reset email.
6
6
  * Uses Better Auth's forgetPassword endpoint.
7
- */
8
- export function ForgotPasswordView({ logo, title = 'Forgot Password', loginPath = '/admin/login', successMessage = 'If an account exists with this email, you will receive a password reset link.', }) {
7
+ */ export function ForgotPasswordView({ logo, title = 'Forgot Password', loginPath = '/admin/login', successMessage = 'If an account exists with this email, you will receive a password reset link.' }) {
9
8
  const [email, setEmail] = useState('');
10
9
  const [error, setError] = useState(null);
11
10
  const [success, setSuccess] = useState(false);
@@ -17,97 +16,159 @@ export function ForgotPasswordView({ logo, title = 'Forgot Password', loginPath
17
16
  try {
18
17
  const response = await fetch('/api/auth/forget-password', {
19
18
  method: 'POST',
20
- headers: { 'Content-Type': 'application/json' },
19
+ headers: {
20
+ 'Content-Type': 'application/json'
21
+ },
21
22
  credentials: 'include',
22
23
  body: JSON.stringify({
23
24
  email,
24
- redirectTo: `${window.location.origin}/admin/reset-password`,
25
- }),
25
+ redirectTo: `${window.location.origin}/admin/reset-password`
26
+ })
26
27
  });
27
28
  if (response.ok) {
28
29
  setSuccess(true);
29
- }
30
- else {
30
+ } else {
31
31
  // Always show success message to prevent email enumeration
32
32
  setSuccess(true);
33
33
  }
34
- }
35
- catch {
34
+ } catch {
36
35
  setError('An error occurred. Please try again.');
37
- }
38
- finally {
36
+ } finally{
39
37
  setLoading(false);
40
38
  }
41
39
  }
42
40
  if (success) {
43
- return (_jsx("div", { style: {
41
+ return /*#__PURE__*/ _jsx("div", {
42
+ style: {
44
43
  minHeight: '100vh',
45
44
  display: 'flex',
46
45
  alignItems: 'center',
47
46
  justifyContent: 'center',
48
47
  background: 'var(--theme-bg)',
49
- padding: 'var(--base)',
50
- }, children: _jsxs("div", { style: {
48
+ padding: 'var(--base)'
49
+ },
50
+ children: /*#__PURE__*/ _jsxs("div", {
51
+ style: {
51
52
  background: 'var(--theme-elevation-50)',
52
53
  padding: 'calc(var(--base) * 2)',
53
54
  borderRadius: 'var(--style-radius-m)',
54
55
  boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',
55
56
  width: '100%',
56
57
  maxWidth: '400px',
57
- textAlign: 'center',
58
- }, children: [logo && (_jsx("div", { style: { marginBottom: 'calc(var(--base) * 1.5)' }, children: logo })), _jsx("h1", { style: {
58
+ textAlign: 'center'
59
+ },
60
+ children: [
61
+ logo && /*#__PURE__*/ _jsx("div", {
62
+ style: {
63
+ marginBottom: 'calc(var(--base) * 1.5)'
64
+ },
65
+ children: logo
66
+ }),
67
+ /*#__PURE__*/ _jsx("h1", {
68
+ style: {
59
69
  color: 'var(--theme-text)',
60
70
  fontSize: 'var(--font-size-h3)',
61
71
  fontWeight: 600,
62
- margin: '0 0 var(--base) 0',
63
- }, children: "Check Your Email" }), _jsx("p", { style: {
72
+ margin: '0 0 var(--base) 0'
73
+ },
74
+ children: "Check Your Email"
75
+ }),
76
+ /*#__PURE__*/ _jsx("p", {
77
+ style: {
64
78
  color: 'var(--theme-text)',
65
79
  opacity: 0.8,
66
80
  marginBottom: 'calc(var(--base) * 1.5)',
67
- fontSize: 'var(--font-size-small)',
68
- }, children: successMessage }), _jsx("a", { href: loginPath, style: {
81
+ fontSize: 'var(--font-size-small)'
82
+ },
83
+ children: successMessage
84
+ }),
85
+ /*#__PURE__*/ _jsx("a", {
86
+ href: loginPath,
87
+ style: {
69
88
  color: 'var(--theme-elevation-800)',
70
89
  fontSize: 'var(--font-size-small)',
71
- textDecoration: 'underline',
72
- }, children: "Back to login" })] }) }));
90
+ textDecoration: 'underline'
91
+ },
92
+ children: "Back to login"
93
+ })
94
+ ]
95
+ })
96
+ });
73
97
  }
74
- return (_jsx("div", { style: {
98
+ return /*#__PURE__*/ _jsx("div", {
99
+ style: {
75
100
  minHeight: '100vh',
76
101
  display: 'flex',
77
102
  alignItems: 'center',
78
103
  justifyContent: 'center',
79
104
  background: 'var(--theme-bg)',
80
- padding: 'var(--base)',
81
- }, children: _jsxs("div", { style: {
105
+ padding: 'var(--base)'
106
+ },
107
+ children: /*#__PURE__*/ _jsxs("div", {
108
+ style: {
82
109
  background: 'var(--theme-elevation-50)',
83
110
  padding: 'calc(var(--base) * 2)',
84
111
  borderRadius: 'var(--style-radius-m)',
85
112
  boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',
86
113
  width: '100%',
87
- maxWidth: '400px',
88
- }, children: [logo && (_jsx("div", { style: {
114
+ maxWidth: '400px'
115
+ },
116
+ children: [
117
+ logo && /*#__PURE__*/ _jsx("div", {
118
+ style: {
89
119
  textAlign: 'center',
90
- marginBottom: 'calc(var(--base) * 1.5)',
91
- }, children: logo })), _jsx("h1", { style: {
120
+ marginBottom: 'calc(var(--base) * 1.5)'
121
+ },
122
+ children: logo
123
+ }),
124
+ /*#__PURE__*/ _jsx("h1", {
125
+ style: {
92
126
  color: 'var(--theme-text)',
93
127
  fontSize: 'var(--font-size-h3)',
94
128
  fontWeight: 600,
95
129
  marginBottom: 'calc(var(--base) * 0.5)',
96
130
  textAlign: 'center',
97
- margin: '0 0 calc(var(--base) * 0.5) 0',
98
- }, children: title }), _jsx("p", { style: {
131
+ margin: '0 0 calc(var(--base) * 0.5) 0'
132
+ },
133
+ children: title
134
+ }),
135
+ /*#__PURE__*/ _jsx("p", {
136
+ style: {
99
137
  color: 'var(--theme-text)',
100
138
  opacity: 0.7,
101
139
  fontSize: 'var(--font-size-small)',
102
140
  textAlign: 'center',
103
- marginBottom: 'calc(var(--base) * 1.5)',
104
- }, children: "Enter your email and we'll send you a reset link." }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { style: { marginBottom: 'calc(var(--base) * 1.5)' }, children: [_jsx("label", { htmlFor: "email", style: {
141
+ marginBottom: 'calc(var(--base) * 1.5)'
142
+ },
143
+ children: "Enter your email and we'll send you a reset link."
144
+ }),
145
+ /*#__PURE__*/ _jsxs("form", {
146
+ onSubmit: handleSubmit,
147
+ children: [
148
+ /*#__PURE__*/ _jsxs("div", {
149
+ style: {
150
+ marginBottom: 'calc(var(--base) * 1.5)'
151
+ },
152
+ children: [
153
+ /*#__PURE__*/ _jsx("label", {
154
+ htmlFor: "email",
155
+ style: {
105
156
  display: 'block',
106
157
  color: 'var(--theme-text)',
107
158
  marginBottom: 'calc(var(--base) * 0.5)',
108
159
  fontSize: 'var(--font-size-small)',
109
- fontWeight: 500,
110
- }, children: "Email" }), _jsx("input", { id: "email", type: "email", value: email, onChange: (e) => setEmail(e.target.value), required: true, autoComplete: "email", style: {
160
+ fontWeight: 500
161
+ },
162
+ children: "Email"
163
+ }),
164
+ /*#__PURE__*/ _jsx("input", {
165
+ id: "email",
166
+ type: "email",
167
+ value: email,
168
+ onChange: (e)=>setEmail(e.target.value),
169
+ required: true,
170
+ autoComplete: "email",
171
+ style: {
111
172
  width: '100%',
112
173
  padding: 'calc(var(--base) * 0.75)',
113
174
  background: 'var(--theme-input-bg)',
@@ -116,16 +177,27 @@ export function ForgotPasswordView({ logo, title = 'Forgot Password', loginPath
116
177
  color: 'var(--theme-text)',
117
178
  fontSize: 'var(--font-size-base)',
118
179
  outline: 'none',
119
- boxSizing: 'border-box',
120
- } })] }), error && (_jsx("div", { style: {
180
+ boxSizing: 'border-box'
181
+ }
182
+ })
183
+ ]
184
+ }),
185
+ error && /*#__PURE__*/ _jsx("div", {
186
+ style: {
121
187
  color: 'var(--theme-error-500)',
122
188
  marginBottom: 'var(--base)',
123
189
  fontSize: 'var(--font-size-small)',
124
190
  padding: 'calc(var(--base) * 0.5)',
125
191
  background: 'var(--theme-error-50)',
126
192
  borderRadius: 'var(--style-radius-s)',
127
- border: '1px solid var(--theme-error-200)',
128
- }, children: error })), _jsx("button", { type: "submit", disabled: loading, style: {
193
+ border: '1px solid var(--theme-error-200)'
194
+ },
195
+ children: error
196
+ }),
197
+ /*#__PURE__*/ _jsx("button", {
198
+ type: "submit",
199
+ disabled: loading,
200
+ style: {
129
201
  width: '100%',
130
202
  padding: 'calc(var(--base) * 0.75)',
131
203
  background: 'var(--theme-elevation-800)',
@@ -137,13 +209,31 @@ export function ForgotPasswordView({ logo, title = 'Forgot Password', loginPath
137
209
  cursor: loading ? 'not-allowed' : 'pointer',
138
210
  opacity: loading ? 0.7 : 1,
139
211
  transition: 'opacity 150ms ease',
140
- marginBottom: 'var(--base)',
141
- }, children: loading ? 'Sending...' : 'Send Reset Link' }), _jsx("div", { style: { textAlign: 'center' }, children: _jsx("a", { href: loginPath, style: {
212
+ marginBottom: 'var(--base)'
213
+ },
214
+ children: loading ? 'Sending...' : 'Send Reset Link'
215
+ }),
216
+ /*#__PURE__*/ _jsx("div", {
217
+ style: {
218
+ textAlign: 'center'
219
+ },
220
+ children: /*#__PURE__*/ _jsx("a", {
221
+ href: loginPath,
222
+ style: {
142
223
  color: 'var(--theme-text)',
143
224
  opacity: 0.7,
144
225
  fontSize: 'var(--font-size-small)',
145
- textDecoration: 'underline',
146
- }, children: "Back to login" }) })] })] }) }));
226
+ textDecoration: 'underline'
227
+ },
228
+ children: "Back to login"
229
+ })
230
+ })
231
+ ]
232
+ })
233
+ ]
234
+ })
235
+ });
147
236
  }
148
237
  export default ForgotPasswordView;
238
+
149
239
  //# sourceMappingURL=ForgotPasswordView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ForgotPasswordView.js","sourceRoot":"","sources":["../../../src/components/auth/ForgotPasswordView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/auth/ForgotPasswordView.tsx"],"sourcesContent":["'use client'\n\nimport { useState, type FormEvent } from 'react'\n\nexport type ForgotPasswordViewProps = {\n /** Custom logo element */\n logo?: React.ReactNode\n /** Page title. Default: 'Forgot Password' */\n title?: string\n /** Path to login page. Default: '/admin/login' */\n loginPath?: string\n /** Success message to show after email is sent */\n successMessage?: string\n}\n\n/**\n * Forgot password page component for requesting a password reset email.\n * Uses Better Auth's forgetPassword endpoint.\n */\nexport function ForgotPasswordView({\n logo,\n title = 'Forgot Password',\n loginPath = '/admin/login',\n successMessage = 'If an account exists with this email, you will receive a password reset link.',\n}: ForgotPasswordViewProps) {\n const [email, setEmail] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState(false)\n const [loading, setLoading] = useState(false)\n\n async function handleSubmit(e: FormEvent) {\n e.preventDefault()\n setLoading(true)\n setError(null)\n\n try {\n const response = await fetch('/api/auth/forget-password', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({\n email,\n redirectTo: `${window.location.origin}/admin/reset-password`,\n }),\n })\n\n if (response.ok) {\n setSuccess(true)\n } else {\n // Always show success message to prevent email enumeration\n setSuccess(true)\n }\n } catch {\n setError('An error occurred. Please try again.')\n } finally {\n setLoading(false)\n }\n }\n\n if (success) {\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 style={{ marginBottom: 'calc(var(--base) * 1.5)' }}>\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 var(--base) 0',\n }}\n >\n Check Your Email\n </h1>\n\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 {successMessage}\n </p>\n\n <a\n href={loginPath}\n style={{\n color: 'var(--theme-elevation-800)',\n fontSize: 'var(--font-size-small)',\n textDecoration: 'underline',\n }}\n >\n Back to login\n </a>\n </div>\n </div>\n )\n }\n\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 marginBottom: 'calc(var(--base) * 0.5)',\n textAlign: 'center',\n margin: '0 0 calc(var(--base) * 0.5) 0',\n }}\n >\n {title}\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 reset link.\n </p>\n\n <form onSubmit={handleSubmit}>\n <div style={{ marginBottom: 'calc(var(--base) * 1.5)' }}>\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 {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 marginBottom: 'var(--base)',\n }}\n >\n {loading ? 'Sending...' : 'Send Reset Link'}\n </button>\n\n <div style={{ textAlign: 'center' }}>\n <a\n href={loginPath}\n style={{\n color: 'var(--theme-text)',\n opacity: 0.7,\n fontSize: 'var(--font-size-small)',\n textDecoration: 'underline',\n }}\n >\n Back to login\n </a>\n </div>\n </form>\n </div>\n </div>\n )\n}\n\nexport default ForgotPasswordView\n"],"names":["useState","ForgotPasswordView","logo","title","loginPath","successMessage","email","setEmail","error","setError","success","setSuccess","loading","setLoading","handleSubmit","e","preventDefault","response","fetch","method","headers","credentials","body","JSON","stringify","redirectTo","window","location","origin","ok","div","style","minHeight","display","alignItems","justifyContent","background","padding","borderRadius","boxShadow","width","maxWidth","textAlign","marginBottom","h1","color","fontSize","fontWeight","margin","p","opacity","a","href","textDecoration","form","onSubmit","label","htmlFor","input","id","type","value","onChange","target","required","autoComplete","border","outline","boxSizing","button","disabled","cursor","transition"],"mappings":"AAAA;;AAEA,SAASA,QAAQ,QAAwB,QAAO;AAahD;;;CAGC,GACD,OAAO,SAASC,mBAAmB,EACjCC,IAAI,EACJC,QAAQ,iBAAiB,EACzBC,YAAY,cAAc,EAC1BC,iBAAiB,+EAA+E,EACxE;IACxB,MAAM,CAACC,OAAOC,SAAS,GAAGP,SAAS;IACnC,MAAM,CAACQ,OAAOC,SAAS,GAAGT,SAAwB;IAClD,MAAM,CAACU,SAASC,WAAW,GAAGX,SAAS;IACvC,MAAM,CAACY,SAASC,WAAW,GAAGb,SAAS;IAEvC,eAAec,aAAaC,CAAY;QACtCA,EAAEC,cAAc;QAChBH,WAAW;QACXJ,SAAS;QAET,IAAI;YACF,MAAMQ,WAAW,MAAMC,MAAM,6BAA6B;gBACxDC,QAAQ;gBACRC,SAAS;oBAAE,gBAAgB;gBAAmB;gBAC9CC,aAAa;gBACbC,MAAMC,KAAKC,SAAS,CAAC;oBACnBlB;oBACAmB,YAAY,GAAGC,OAAOC,QAAQ,CAACC,MAAM,CAAC,qBAAqB,CAAC;gBAC9D;YACF;YAEA,IAAIX,SAASY,EAAE,EAAE;gBACflB,WAAW;YACb,OAAO;gBACL,2DAA2D;gBAC3DA,WAAW;YACb;QACF,EAAE,OAAM;YACNF,SAAS;QACX,SAAU;YACRI,WAAW;QACb;IACF;IAEA,IAAIH,SAAS;QACX,qBACE,KAACoB;YACCC,OAAO;gBACLC,WAAW;gBACXC,SAAS;gBACTC,YAAY;gBACZC,gBAAgB;gBAChBC,YAAY;gBACZC,SAAS;YACX;sBAEA,cAAA,MAACP;gBACCC,OAAO;oBACLK,YAAY;oBACZC,SAAS;oBACTC,cAAc;oBACdC,WAAW;oBACXC,OAAO;oBACPC,UAAU;oBACVC,WAAW;gBACb;;oBAECxC,sBACC,KAAC4B;wBAAIC,OAAO;4BAAEY,cAAc;wBAA0B;kCACnDzC;;kCAIL,KAAC0C;wBACCb,OAAO;4BACLc,OAAO;4BACPC,UAAU;4BACVC,YAAY;4BACZC,QAAQ;wBACV;kCACD;;kCAID,KAACC;wBACClB,OAAO;4BACLc,OAAO;4BACPK,SAAS;4BACTP,cAAc;4BACdG,UAAU;wBACZ;kCAECzC;;kCAGH,KAAC8C;wBACCC,MAAMhD;wBACN2B,OAAO;4BACLc,OAAO;4BACPC,UAAU;4BACVO,gBAAgB;wBAClB;kCACD;;;;;IAMT;IAEA,qBACE,KAACvB;QACCC,OAAO;YACLC,WAAW;YACXC,SAAS;YACTC,YAAY;YACZC,gBAAgB;YAChBC,YAAY;YACZC,SAAS;QACX;kBAEA,cAAA,MAACP;YACCC,OAAO;gBACLK,YAAY;gBACZC,SAAS;gBACTC,cAAc;gBACdC,WAAW;gBACXC,OAAO;gBACPC,UAAU;YACZ;;gBAECvC,sBACC,KAAC4B;oBACCC,OAAO;wBACLW,WAAW;wBACXC,cAAc;oBAChB;8BAECzC;;8BAIL,KAAC0C;oBACCb,OAAO;wBACLc,OAAO;wBACPC,UAAU;wBACVC,YAAY;wBACZJ,cAAc;wBACdD,WAAW;wBACXM,QAAQ;oBACV;8BAEC7C;;8BAGH,KAAC8C;oBACClB,OAAO;wBACLc,OAAO;wBACPK,SAAS;wBACTJ,UAAU;wBACVJ,WAAW;wBACXC,cAAc;oBAChB;8BACD;;8BAID,MAACW;oBAAKC,UAAUzC;;sCACd,MAACgB;4BAAIC,OAAO;gCAAEY,cAAc;4BAA0B;;8CACpD,KAACa;oCACCC,SAAQ;oCACR1B,OAAO;wCACLE,SAAS;wCACTY,OAAO;wCACPF,cAAc;wCACdG,UAAU;wCACVC,YAAY;oCACd;8CACD;;8CAGD,KAACW;oCACCC,IAAG;oCACHC,MAAK;oCACLC,OAAOvD;oCACPwD,UAAU,CAAC/C,IAAMR,SAASQ,EAAEgD,MAAM,CAACF,KAAK;oCACxCG,QAAQ;oCACRC,cAAa;oCACblC,OAAO;wCACLS,OAAO;wCACPH,SAAS;wCACTD,YAAY;wCACZ8B,QAAQ;wCACR5B,cAAc;wCACdO,OAAO;wCACPC,UAAU;wCACVqB,SAAS;wCACTC,WAAW;oCACb;;;;wBAIH5D,uBACC,KAACsB;4BACCC,OAAO;gCACLc,OAAO;gCACPF,cAAc;gCACdG,UAAU;gCACVT,SAAS;gCACTD,YAAY;gCACZE,cAAc;gCACd4B,QAAQ;4BACV;sCAEC1D;;sCAIL,KAAC6D;4BACCT,MAAK;4BACLU,UAAU1D;4BACVmB,OAAO;gCACLS,OAAO;gCACPH,SAAS;gCACTD,YAAY;gCACZ8B,QAAQ;gCACR5B,cAAc;gCACdO,OAAO;gCACPC,UAAU;gCACVC,YAAY;gCACZwB,QAAQ3D,UAAU,gBAAgB;gCAClCsC,SAAStC,UAAU,MAAM;gCACzB4D,YAAY;gCACZ7B,cAAc;4BAChB;sCAEC/B,UAAU,eAAe;;sCAG5B,KAACkB;4BAAIC,OAAO;gCAAEW,WAAW;4BAAS;sCAChC,cAAA,KAACS;gCACCC,MAAMhD;gCACN2B,OAAO;oCACLc,OAAO;oCACPK,SAAS;oCACTJ,UAAU;oCACVO,gBAAgB;gCAClB;0CACD;;;;;;;;AAQb;AAEA,eAAepD,mBAAkB"}
@@ -13,6 +13,6 @@ export type ResetPasswordViewProps = {
13
13
  * Expects a token in the URL query parameter.
14
14
  * Uses Better Auth's resetPassword endpoint.
15
15
  */
16
- export declare function ResetPasswordView({ logo, title, afterResetPath, minPasswordLength, }: ResetPasswordViewProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function ResetPasswordView({ logo, title, afterResetPath, minPasswordLength, }: ResetPasswordViewProps): import("react").JSX.Element;
17
17
  export default ResetPasswordView;
18
18
  //# sourceMappingURL=ResetPasswordView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResetPasswordView.d.ts","sourceRoot":"","sources":["../../../src/components/auth/ResetPasswordView.tsx"],"names":[],"mappings":"AAKA,MAAM,MAAM,sBAAsB,GAAG;IACnC,0BAA0B;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,KAAwB,EACxB,cAA+B,EAC/B,iBAAqB,GACtB,EAAE,sBAAsB,2CA8SxB;AAED,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"ResetPasswordView.d.ts","sourceRoot":"","sources":["../../../src/components/auth/ResetPasswordView.tsx"],"names":[],"mappings":"AAKA,MAAM,MAAM,sBAAsB,GAAG;IACnC,0BAA0B;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,KAAwB,EACxB,cAA+B,EAC/B,iBAAqB,GACtB,EAAE,sBAAsB,+BA8SxB;AAED,eAAe,iBAAiB,CAAA"}