@edge-base/auth-ui-react 0.1.1

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 (52) hide show
  1. package/README.md +180 -0
  2. package/dist/components/AuthForm.d.ts +11 -0
  3. package/dist/components/AuthForm.d.ts.map +1 -0
  4. package/dist/components/AuthForm.js +71 -0
  5. package/dist/components/AuthForm.js.map +1 -0
  6. package/dist/components/EmailOTP.d.ts +11 -0
  7. package/dist/components/EmailOTP.d.ts.map +1 -0
  8. package/dist/components/EmailOTP.js +56 -0
  9. package/dist/components/EmailOTP.js.map +1 -0
  10. package/dist/components/ForgotPassword.d.ts +9 -0
  11. package/dist/components/ForgotPassword.d.ts.map +1 -0
  12. package/dist/components/ForgotPassword.js +36 -0
  13. package/dist/components/ForgotPassword.js.map +1 -0
  14. package/dist/components/MFAChallenge.d.ts +17 -0
  15. package/dist/components/MFAChallenge.d.ts.map +1 -0
  16. package/dist/components/MFAChallenge.js +44 -0
  17. package/dist/components/MFAChallenge.js.map +1 -0
  18. package/dist/components/MagicLink.d.ts +9 -0
  19. package/dist/components/MagicLink.d.ts.map +1 -0
  20. package/dist/components/MagicLink.js +39 -0
  21. package/dist/components/MagicLink.js.map +1 -0
  22. package/dist/components/PhoneOTP.d.ts +11 -0
  23. package/dist/components/PhoneOTP.d.ts.map +1 -0
  24. package/dist/components/PhoneOTP.js +56 -0
  25. package/dist/components/PhoneOTP.js.map +1 -0
  26. package/dist/components/SignIn.d.ts +16 -0
  27. package/dist/components/SignIn.d.ts.map +1 -0
  28. package/dist/components/SignIn.js +39 -0
  29. package/dist/components/SignIn.js.map +1 -0
  30. package/dist/components/SignUp.d.ts +11 -0
  31. package/dist/components/SignUp.d.ts.map +1 -0
  32. package/dist/components/SignUp.js +43 -0
  33. package/dist/components/SignUp.js.map +1 -0
  34. package/dist/components/SocialButtons.d.ts +6 -0
  35. package/dist/components/SocialButtons.d.ts.map +1 -0
  36. package/dist/components/SocialButtons.js +39 -0
  37. package/dist/components/SocialButtons.js.map +1 -0
  38. package/dist/context.d.ts +80 -0
  39. package/dist/context.d.ts.map +1 -0
  40. package/dist/context.js +69 -0
  41. package/dist/context.js.map +1 -0
  42. package/dist/hooks/useAuth.d.ts +11 -0
  43. package/dist/hooks/useAuth.d.ts.map +1 -0
  44. package/dist/hooks/useAuth.js +34 -0
  45. package/dist/hooks/useAuth.js.map +1 -0
  46. package/dist/index.d.ts +49 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +41 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/styles.css +344 -0
  51. package/llms.txt +106 -0
  52. package/package.json +65 -0
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * PhoneOTP — phone number OTP sign-in form.
4
+ *
5
+ * Two-step flow: 1) Enter phone → send SMS code, 2) Enter code → verify.
6
+ */
7
+ import { useState, useCallback } from 'react';
8
+ import { useAuthContext } from '../context.js';
9
+ export function PhoneOTP({ onSuccess, onViewChange, className }) {
10
+ const { client, config, labels } = useAuthContext();
11
+ const cx = config.classPrefix;
12
+ const [phone, setPhone] = useState('');
13
+ const [code, setCode] = useState('');
14
+ const [step, setStep] = useState('phone');
15
+ const [error, setError] = useState(null);
16
+ const [loading, setLoading] = useState(false);
17
+ const handleSendCode = useCallback(async (e) => {
18
+ e.preventDefault();
19
+ setError(null);
20
+ setLoading(true);
21
+ try {
22
+ await client.auth.signInWithPhone({ phone });
23
+ setStep('code');
24
+ }
25
+ catch (err) {
26
+ setError(err.message || 'Failed to send SMS code');
27
+ }
28
+ finally {
29
+ setLoading(false);
30
+ }
31
+ }, [client, phone]);
32
+ const handleVerify = useCallback(async (e) => {
33
+ e.preventDefault();
34
+ setError(null);
35
+ setLoading(true);
36
+ try {
37
+ await client.auth.verifyPhone({ phone, code });
38
+ onSuccess?.();
39
+ }
40
+ catch (err) {
41
+ setError(err.message || 'Verification failed');
42
+ }
43
+ finally {
44
+ setLoading(false);
45
+ }
46
+ }, [client, phone, code, onSuccess]);
47
+ if (step === 'code') {
48
+ return (_jsxs("form", { className: `${cx}-form ${cx}-phone-otp ${className || ''}`.trim(), onSubmit: handleVerify, children: [_jsx("h2", { className: `${cx}-title`, children: labels.verifyCode }), _jsxs("p", { className: `${cx}-description`, children: ["Enter the code sent to ", phone] }), error && _jsx("div", { className: `${cx}-error`, children: error }), _jsxs("div", { className: `${cx}-field`, children: [_jsx("label", { className: `${cx}-label`, htmlFor: `${cx}-phone-otp-code`, children: labels.code }), _jsx("input", { id: `${cx}-phone-otp-code`, className: `${cx}-input ${cx}-input-code`, type: "text", inputMode: "numeric", value: code, onChange: (e) => setCode(e.target.value), required: true, autoComplete: "one-time-code", placeholder: "000000", disabled: loading, autoFocus: true })] }), _jsx("button", { type: "submit", className: `${cx}-button ${cx}-button-primary`, disabled: loading, children: loading ? labels.loading : labels.verifyCode }), _jsx("button", { type: "button", className: `${cx}-link`, onClick: () => {
49
+ setStep('phone');
50
+ setCode('');
51
+ setError(null);
52
+ }, children: "Change phone number" })] }));
53
+ }
54
+ return (_jsxs("form", { className: `${cx}-form ${cx}-phone-otp ${className || ''}`.trim(), onSubmit: handleSendCode, children: [_jsx("h2", { className: `${cx}-title`, children: labels.sendOTP }), _jsx("p", { className: `${cx}-description`, children: "Enter your phone number to receive a sign-in code via SMS." }), error && _jsx("div", { className: `${cx}-error`, children: error }), _jsxs("div", { className: `${cx}-field`, children: [_jsx("label", { className: `${cx}-label`, htmlFor: `${cx}-phone-otp-phone`, children: labels.phone }), _jsx("input", { id: `${cx}-phone-otp-phone`, className: `${cx}-input`, type: "tel", value: phone, onChange: (e) => setPhone(e.target.value), required: true, autoComplete: "tel", placeholder: "+1234567890", disabled: loading })] }), _jsx("button", { type: "submit", className: `${cx}-button ${cx}-button-primary`, disabled: loading, children: loading ? labels.loading : labels.sendOTP }), _jsx("button", { type: "button", className: `${cx}-link`, onClick: () => onViewChange?.('sign_in'), children: labels.backToSignIn })] }));
55
+ }
56
+ //# sourceMappingURL=PhoneOTP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhoneOTP.js","sourceRoot":"","sources":["../../src/components/PhoneOTP.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { AuthView } from '../context.js';
2
+ export interface SignInProps {
3
+ /** Called after successful sign-in */
4
+ onSuccess?: () => void;
5
+ /** Called when MFA challenge is required */
6
+ onMfaRequired?: (mfaTicket: string, factors: Array<{
7
+ id: string;
8
+ type: string;
9
+ }>) => void;
10
+ /** Called to switch to another view */
11
+ onViewChange?: (view: AuthView) => void;
12
+ /** Additional CSS class */
13
+ className?: string;
14
+ }
15
+ export declare function SignIn({ onSuccess, onMfaRequired, onViewChange, className }: SignInProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=SignIn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignIn.d.ts","sourceRoot":"","sources":["../../src/components/SignIn.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC1F,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,WAAW,2CAoGxF"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * SignIn — email/password sign-in form component.
4
+ *
5
+ * Headless-first: renders with CSS class hooks, no inline styles.
6
+ * Uses `classPrefix` from AuthProvider context (default: 'eb-auth').
7
+ */
8
+ import { useState, useCallback } from 'react';
9
+ import { useAuthContext } from '../context.js';
10
+ export function SignIn({ onSuccess, onMfaRequired, onViewChange, className }) {
11
+ const { client, config, labels } = useAuthContext();
12
+ const cx = config.classPrefix;
13
+ const [email, setEmail] = useState('');
14
+ const [password, setPassword] = useState('');
15
+ const [error, setError] = useState(null);
16
+ const [loading, setLoading] = useState(false);
17
+ const handleSubmit = useCallback(async (e) => {
18
+ e.preventDefault();
19
+ setError(null);
20
+ setLoading(true);
21
+ try {
22
+ const result = await client.auth.signIn({ email, password });
23
+ if ('mfaRequired' in result && result.mfaRequired) {
24
+ onMfaRequired?.(result.mfaTicket, result.factors);
25
+ }
26
+ else {
27
+ onSuccess?.();
28
+ }
29
+ }
30
+ catch (err) {
31
+ setError(err.message || 'Sign in failed');
32
+ }
33
+ finally {
34
+ setLoading(false);
35
+ }
36
+ }, [client, email, password, onSuccess, onMfaRequired]);
37
+ return (_jsxs("form", { className: `${cx}-form ${cx}-sign-in ${className || ''}`.trim(), onSubmit: handleSubmit, children: [_jsx("h2", { className: `${cx}-title`, children: labels.signIn }), error && _jsx("div", { className: `${cx}-error`, children: error }), _jsxs("div", { className: `${cx}-field`, children: [_jsx("label", { className: `${cx}-label`, htmlFor: `${cx}-email`, children: labels.email }), _jsx("input", { id: `${cx}-email`, className: `${cx}-input`, type: "email", value: email, onChange: (e) => setEmail(e.target.value), required: true, autoComplete: "email", disabled: loading })] }), _jsxs("div", { className: `${cx}-field`, children: [_jsx("label", { className: `${cx}-label`, htmlFor: `${cx}-password`, children: labels.password }), _jsx("input", { id: `${cx}-password`, className: `${cx}-input`, type: "password", value: password, onChange: (e) => setPassword(e.target.value), required: true, autoComplete: "current-password", disabled: loading })] }), config.showForgotPassword && (_jsx("button", { type: "button", className: `${cx}-link ${cx}-forgot-link`, onClick: () => onViewChange?.('forgot_password'), children: labels.forgotPassword })), _jsx("button", { type: "submit", className: `${cx}-button ${cx}-button-primary`, disabled: loading, children: loading ? labels.loading : labels.signIn }), config.showToggle && (_jsxs("p", { className: `${cx}-toggle`, children: [labels.dontHaveAccount, ' ', _jsx("button", { type: "button", className: `${cx}-link`, onClick: () => onViewChange?.('sign_up'), children: labels.signUp })] }))] }));
38
+ }
39
+ //# sourceMappingURL=SignIn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignIn.js","sourceRoot":"","sources":["../../src/components/SignIn.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { AuthView } from '../context.js';
2
+ export interface SignUpProps {
3
+ /** Called after successful sign-up */
4
+ onSuccess?: () => void;
5
+ /** Called to switch to another view */
6
+ onViewChange?: (view: AuthView) => void;
7
+ /** Additional CSS class */
8
+ className?: string;
9
+ }
10
+ export declare function SignUp({ onSuccess, onViewChange, className }: SignUpProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=SignUp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignUp.d.ts","sourceRoot":"","sources":["../../src/components/SignUp.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,WAAW,2CAiIzE"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * SignUp — email/password registration form component.
4
+ *
5
+ * Headless-first: renders with CSS class hooks, no inline styles.
6
+ */
7
+ import { useState, useCallback } from 'react';
8
+ import { useAuthContext } from '../context.js';
9
+ export function SignUp({ onSuccess, onViewChange, className }) {
10
+ const { client, config, labels } = useAuthContext();
11
+ const cx = config.classPrefix;
12
+ const [email, setEmail] = useState('');
13
+ const [password, setPassword] = useState('');
14
+ const [confirmPassword, setConfirmPassword] = useState('');
15
+ const [displayName, setDisplayName] = useState('');
16
+ const [error, setError] = useState(null);
17
+ const [loading, setLoading] = useState(false);
18
+ const handleSubmit = useCallback(async (e) => {
19
+ e.preventDefault();
20
+ setError(null);
21
+ if (password !== confirmPassword) {
22
+ setError('Passwords do not match');
23
+ return;
24
+ }
25
+ setLoading(true);
26
+ try {
27
+ await client.auth.signUp({
28
+ email,
29
+ password,
30
+ data: displayName ? { displayName } : undefined,
31
+ });
32
+ onSuccess?.();
33
+ }
34
+ catch (err) {
35
+ setError(err.message || 'Sign up failed');
36
+ }
37
+ finally {
38
+ setLoading(false);
39
+ }
40
+ }, [client, email, password, confirmPassword, displayName, onSuccess]);
41
+ return (_jsxs("form", { className: `${cx}-form ${cx}-sign-up ${className || ''}`.trim(), onSubmit: handleSubmit, children: [_jsx("h2", { className: `${cx}-title`, children: labels.signUp }), error && _jsx("div", { className: `${cx}-error`, children: error }), _jsxs("div", { className: `${cx}-field`, children: [_jsx("label", { className: `${cx}-label`, htmlFor: `${cx}-signup-name`, children: labels.displayName }), _jsx("input", { id: `${cx}-signup-name`, className: `${cx}-input`, type: "text", value: displayName, onChange: (e) => setDisplayName(e.target.value), autoComplete: "name", disabled: loading })] }), _jsxs("div", { className: `${cx}-field`, children: [_jsx("label", { className: `${cx}-label`, htmlFor: `${cx}-signup-email`, children: labels.email }), _jsx("input", { id: `${cx}-signup-email`, className: `${cx}-input`, type: "email", value: email, onChange: (e) => setEmail(e.target.value), required: true, autoComplete: "email", disabled: loading })] }), _jsxs("div", { className: `${cx}-field`, children: [_jsx("label", { className: `${cx}-label`, htmlFor: `${cx}-signup-password`, children: labels.password }), _jsx("input", { id: `${cx}-signup-password`, className: `${cx}-input`, type: "password", value: password, onChange: (e) => setPassword(e.target.value), required: true, autoComplete: "new-password", disabled: loading })] }), _jsxs("div", { className: `${cx}-field`, children: [_jsx("label", { className: `${cx}-label`, htmlFor: `${cx}-signup-confirm`, children: labels.confirmPassword }), _jsx("input", { id: `${cx}-signup-confirm`, className: `${cx}-input`, type: "password", value: confirmPassword, onChange: (e) => setConfirmPassword(e.target.value), required: true, autoComplete: "new-password", disabled: loading })] }), _jsx("button", { type: "submit", className: `${cx}-button ${cx}-button-primary`, disabled: loading, children: loading ? labels.loading : labels.signUp }), config.showToggle && (_jsxs("p", { className: `${cx}-toggle`, children: [labels.alreadyHaveAccount, ' ', _jsx("button", { type: "button", className: `${cx}-link`, onClick: () => onViewChange?.('sign_in'), children: labels.signIn })] }))] }));
42
+ }
43
+ //# sourceMappingURL=SignUp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignUp.js","sourceRoot":"","sources":["../../src/components/SignUp.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface SocialButtonsProps {
2
+ /** Additional CSS class */
3
+ className?: string;
4
+ }
5
+ export declare function SocialButtons({ className }: SocialButtonsProps): import("react/jsx-runtime").JSX.Element | null;
6
+ //# sourceMappingURL=SocialButtons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SocialButtons.d.ts","sourceRoot":"","sources":["../../src/components/SocialButtons.tsx"],"names":[],"mappings":"AA0BA,MAAM,WAAW,kBAAkB;IACjC,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,kBAAkB,kDAiC9D"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * SocialButtons — OAuth provider buttons.
4
+ *
5
+ * Renders a button for each configured provider.
6
+ * Uses signInWithOAuth which redirects the browser.
7
+ */
8
+ import { useCallback } from 'react';
9
+ import { useAuthContext } from '../context.js';
10
+ /** Display labels for well-known OAuth providers */
11
+ const PROVIDER_LABELS = {
12
+ google: 'Google',
13
+ github: 'GitHub',
14
+ apple: 'Apple',
15
+ discord: 'Discord',
16
+ twitter: 'Twitter',
17
+ facebook: 'Facebook',
18
+ microsoft: 'Microsoft',
19
+ gitlab: 'GitLab',
20
+ bitbucket: 'Bitbucket',
21
+ linkedin: 'LinkedIn',
22
+ slack: 'Slack',
23
+ spotify: 'Spotify',
24
+ twitch: 'Twitch',
25
+ };
26
+ export function SocialButtons({ className }) {
27
+ const { client, config, labels } = useAuthContext();
28
+ const cx = config.classPrefix;
29
+ const providers = config.providers;
30
+ const handleOAuth = useCallback((provider) => {
31
+ client.auth.signInWithOAuth(provider, {
32
+ redirectUrl: config.oauthRedirectUrl,
33
+ });
34
+ }, [client, config.oauthRedirectUrl]);
35
+ if (!providers || providers.length === 0)
36
+ return null;
37
+ return (_jsxs("div", { className: `${cx}-social ${className || ''}`.trim(), children: [_jsx("div", { className: `${cx}-divider`, children: _jsx("span", { children: labels.orContinueWith }) }), _jsx("div", { className: `${cx}-social-buttons`, children: providers.map((provider) => (_jsx("button", { type: "button", className: `${cx}-button ${cx}-button-social ${cx}-button-${provider}`, onClick: () => handleOAuth(provider), children: PROVIDER_LABELS[provider] || provider }, provider))) })] }));
38
+ }
39
+ //# sourceMappingURL=SocialButtons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SocialButtons.js","sourceRoot":"","sources":["../../src/components/SocialButtons.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAc,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,oDAAoD;AACpD,MAAM,eAAe,GAA2B;IAC9C,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAOF,MAAM,UAAU,aAAa,CAAC,EAAE,SAAS,EAAsB;IAC7D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IACpD,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAEnC,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,QAAgB,EAAE,EAAE;QACnD,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;YACpC,WAAW,EAAE,MAAM,CAAC,gBAAgB;SACrC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEtC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtD,OAAO,CACL,eAAK,SAAS,EAAE,GAAG,EAAE,WAAW,SAAS,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,aACtD,cAAK,SAAS,EAAE,GAAG,EAAE,UAAU,YAC7B,yBAAO,MAAM,CAAC,cAAc,GAAQ,GAChC,EAEN,cAAK,SAAS,EAAE,GAAG,EAAE,iBAAiB,YACnC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3B,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,QAAQ,EAAE,EACtE,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,YAEnC,eAAe,CAAC,QAAQ,CAAC,IAAI,QAAQ,IALjC,QAAQ,CAMN,CACV,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * AuthUI Context — provides EdgeBase client and configuration to all auth components.
3
+ *
4
+ * Usage:
5
+ * ```tsx
6
+ * import { createClient } from '@edge-base/web';
7
+ * import { AuthProvider } from '@edge-base/auth-ui-react';
8
+ *
9
+ * const client = createClient('https://my-app.edgebase.fun');
10
+ *
11
+ * function App() {
12
+ * return (
13
+ * <AuthProvider client={client}>
14
+ * <AuthForm />
15
+ * </AuthProvider>
16
+ * );
17
+ * }
18
+ * ```
19
+ */
20
+ import React from 'react';
21
+ import type { ClientEdgeBase } from '@edge-base/web';
22
+ export interface AuthUIConfig {
23
+ /** OAuth providers to show (e.g., ['google', 'github', 'apple']) */
24
+ providers?: string[];
25
+ /** Default view: 'sign_in' | 'sign_up' | 'magic_link' | 'email_otp' */
26
+ defaultView?: AuthView;
27
+ /** Show "Forgot Password?" link */
28
+ showForgotPassword?: boolean;
29
+ /** Show sign-up link on sign-in form and vice versa */
30
+ showToggle?: boolean;
31
+ /** Custom redirect URL for OAuth */
32
+ oauthRedirectUrl?: string;
33
+ /** Enable magic link option */
34
+ magicLinkEnabled?: boolean;
35
+ /** Enable email OTP option */
36
+ emailOtpEnabled?: boolean;
37
+ /** Enable phone OTP option */
38
+ phoneOtpEnabled?: boolean;
39
+ /** CSS class prefix for styling (default: 'eb-auth') */
40
+ classPrefix?: string;
41
+ /** Localization overrides */
42
+ localization?: Partial<AuthUILabels>;
43
+ }
44
+ export type AuthView = 'sign_in' | 'sign_up' | 'magic_link' | 'email_otp' | 'phone_otp' | 'forgot_password' | 'reset_password' | 'mfa_challenge' | 'verify_email';
45
+ export interface AuthUILabels {
46
+ signIn: string;
47
+ signUp: string;
48
+ signOut: string;
49
+ email: string;
50
+ password: string;
51
+ confirmPassword: string;
52
+ forgotPassword: string;
53
+ resetPassword: string;
54
+ sendResetLink: string;
55
+ sendMagicLink: string;
56
+ sendOTP: string;
57
+ verifyCode: string;
58
+ orContinueWith: string;
59
+ dontHaveAccount: string;
60
+ alreadyHaveAccount: string;
61
+ phone: string;
62
+ code: string;
63
+ submit: string;
64
+ loading: string;
65
+ displayName: string;
66
+ backToSignIn: string;
67
+ }
68
+ export interface AuthContextValue {
69
+ client: ClientEdgeBase;
70
+ config: Required<Pick<AuthUIConfig, 'classPrefix' | 'showForgotPassword' | 'showToggle'>> & AuthUIConfig;
71
+ labels: AuthUILabels;
72
+ }
73
+ export interface AuthProviderProps {
74
+ client: ClientEdgeBase;
75
+ config?: AuthUIConfig;
76
+ children: React.ReactNode;
77
+ }
78
+ export declare function AuthProvider({ client, config, children }: AuthProviderProps): import("react/jsx-runtime").JSX.Element;
79
+ export declare function useAuthContext(): AuthContextValue;
80
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAA6C,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,uEAAuE;IACvE,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,mCAAmC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,8BAA8B;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACtC;AAED,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,SAAS,GACT,YAAY,GACZ,WAAW,GACX,WAAW,GACX,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,cAAc,CAAC;AAEnB,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AA0BD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,oBAAoB,GAAG,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC;IACzG,MAAM,EAAE,YAAY,CAAC;CACtB;AAID,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAoB3E;AAED,wBAAgB,cAAc,IAAI,gBAAgB,CAMjD"}
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * AuthUI Context — provides EdgeBase client and configuration to all auth components.
4
+ *
5
+ * Usage:
6
+ * ```tsx
7
+ * import { createClient } from '@edge-base/web';
8
+ * import { AuthProvider } from '@edge-base/auth-ui-react';
9
+ *
10
+ * const client = createClient('https://my-app.edgebase.fun');
11
+ *
12
+ * function App() {
13
+ * return (
14
+ * <AuthProvider client={client}>
15
+ * <AuthForm />
16
+ * </AuthProvider>
17
+ * );
18
+ * }
19
+ * ```
20
+ */
21
+ import { createContext, useContext, useMemo } from 'react';
22
+ const DEFAULT_LABELS = {
23
+ signIn: 'Sign In',
24
+ signUp: 'Sign Up',
25
+ signOut: 'Sign Out',
26
+ email: 'Email',
27
+ password: 'Password',
28
+ confirmPassword: 'Confirm Password',
29
+ forgotPassword: 'Forgot Password?',
30
+ resetPassword: 'Reset Password',
31
+ sendResetLink: 'Send Reset Link',
32
+ sendMagicLink: 'Send Magic Link',
33
+ sendOTP: 'Send Code',
34
+ verifyCode: 'Verify Code',
35
+ orContinueWith: 'Or continue with',
36
+ dontHaveAccount: "Don't have an account?",
37
+ alreadyHaveAccount: 'Already have an account?',
38
+ phone: 'Phone Number',
39
+ code: 'Verification Code',
40
+ submit: 'Submit',
41
+ loading: 'Loading...',
42
+ displayName: 'Display Name',
43
+ backToSignIn: 'Back to Sign In',
44
+ };
45
+ const AuthContext = createContext(null);
46
+ export function AuthProvider({ client, config, children }) {
47
+ const value = useMemo(() => ({
48
+ client,
49
+ config: {
50
+ classPrefix: 'eb-auth',
51
+ showForgotPassword: true,
52
+ showToggle: true,
53
+ ...config,
54
+ },
55
+ labels: {
56
+ ...DEFAULT_LABELS,
57
+ ...config?.localization,
58
+ },
59
+ }), [client, config]);
60
+ return (_jsx(AuthContext.Provider, { value: value, children: children }));
61
+ }
62
+ export function useAuthContext() {
63
+ const ctx = useContext(AuthContext);
64
+ if (!ctx) {
65
+ throw new Error('useAuthContext must be used within an <AuthProvider>');
66
+ }
67
+ return ctx;
68
+ }
69
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AA6DlE,MAAM,cAAc,GAAiB;IACnC,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,kBAAkB;IACnC,cAAc,EAAE,kBAAkB;IAClC,aAAa,EAAE,gBAAgB;IAC/B,aAAa,EAAE,iBAAiB;IAChC,aAAa,EAAE,iBAAiB;IAChC,OAAO,EAAE,WAAW;IACpB,UAAU,EAAE,aAAa;IACzB,cAAc,EAAE,kBAAkB;IAClC,eAAe,EAAE,wBAAwB;IACzC,kBAAkB,EAAE,0BAA0B;IAC9C,KAAK,EAAE,cAAc;IACrB,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,YAAY;IACrB,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAQF,MAAM,WAAW,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;AAQjE,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAqB;IAC1E,MAAM,KAAK,GAAG,OAAO,CAAmB,GAAG,EAAE,CAAC,CAAC;QAC7C,MAAM;QACN,MAAM,EAAE;YACN,WAAW,EAAE,SAAS;YACtB,kBAAkB,EAAE,IAAI;YACxB,UAAU,EAAE,IAAI;YAChB,GAAG,MAAM;SACV;QACD,MAAM,EAAE;YACN,GAAG,cAAc;YACjB,GAAG,MAAM,EAAE,YAAY;SACxB;KACF,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtB,OAAO,CACL,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC/B,QAAQ,GACY,CACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { TokenUser } from '@edge-base/web';
2
+ export interface UseAuthReturn {
3
+ /** Current authenticated user, or null */
4
+ user: TokenUser | null;
5
+ /** Whether the auth state is still loading */
6
+ loading: boolean;
7
+ /** Sign out the current user */
8
+ signOut: () => Promise<void>;
9
+ }
10
+ export declare function useAuth(): UseAuthReturn;
11
+ //# sourceMappingURL=useAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useAuth.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,gCAAgC;IAChC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,OAAO,IAAI,aAAa,CA2BvC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * useAuth — hook for accessing authentication state and user data.
3
+ *
4
+ * Usage:
5
+ * ```tsx
6
+ * const { user, loading, signOut } = useAuth();
7
+ * ```
8
+ */
9
+ import { useState, useEffect, useCallback } from 'react';
10
+ import { useAuthContext } from '../context.js';
11
+ export function useAuth() {
12
+ const { client } = useAuthContext();
13
+ const [user, setUser] = useState(null);
14
+ const [loading, setLoading] = useState(true);
15
+ useEffect(() => {
16
+ // Get initial user state
17
+ const currentUser = client.auth.currentUser;
18
+ setUser(currentUser);
19
+ setLoading(false);
20
+ // Subscribe to auth state changes
21
+ const unsubscribe = client.auth.onAuthStateChange((newUser) => {
22
+ setUser(newUser);
23
+ setLoading(false);
24
+ });
25
+ return () => {
26
+ unsubscribe();
27
+ };
28
+ }, [client]);
29
+ const signOut = useCallback(async () => {
30
+ await client.auth.signOut();
31
+ }, [client]);
32
+ return { user, loading, signOut };
33
+ }
34
+ //# sourceMappingURL=useAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../src/hooks/useAuth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAW/C,MAAM,UAAU,OAAO;IACrB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC,CAAC;IACzD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,yBAAyB;QACzB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAC5C,OAAO,CAAC,WAAW,CAAC,CAAC;QACrB,UAAU,CAAC,KAAK,CAAC,CAAC;QAElB,kCAAkC;QAClC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5D,OAAO,CAAC,OAAO,CAAC,CAAC;YACjB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @edge-base/auth-ui-react — Headless React authentication UI components.
3
+ *
4
+ * Usage:
5
+ * ```tsx
6
+ * import { createClient } from '@edge-base/web';
7
+ * import { AuthProvider, AuthForm } from '@edge-base/auth-ui-react';
8
+ * import '@edge-base/auth-ui-react/styles.css'; // optional default theme
9
+ *
10
+ * const client = createClient('https://my-app.edgebase.fun');
11
+ *
12
+ * function App() {
13
+ * return (
14
+ * <AuthProvider
15
+ * client={client}
16
+ * config={{
17
+ * providers: ['google', 'github'],
18
+ * magicLinkEnabled: true,
19
+ * }}
20
+ * >
21
+ * <AuthForm onSuccess={() => navigate('/dashboard')} />
22
+ * </AuthProvider>
23
+ * );
24
+ * }
25
+ * ```
26
+ */
27
+ export { AuthProvider, useAuthContext } from './context.js';
28
+ export type { AuthProviderProps, AuthUIConfig, AuthUILabels, AuthView, AuthContextValue } from './context.js';
29
+ export { useAuth } from './hooks/useAuth.js';
30
+ export type { UseAuthReturn } from './hooks/useAuth.js';
31
+ export { AuthForm } from './components/AuthForm.js';
32
+ export type { AuthFormProps } from './components/AuthForm.js';
33
+ export { SignIn } from './components/SignIn.js';
34
+ export type { SignInProps } from './components/SignIn.js';
35
+ export { SignUp } from './components/SignUp.js';
36
+ export type { SignUpProps } from './components/SignUp.js';
37
+ export { SocialButtons } from './components/SocialButtons.js';
38
+ export type { SocialButtonsProps } from './components/SocialButtons.js';
39
+ export { MFAChallenge } from './components/MFAChallenge.js';
40
+ export type { MFAChallengeProps } from './components/MFAChallenge.js';
41
+ export { ForgotPassword } from './components/ForgotPassword.js';
42
+ export type { ForgotPasswordProps } from './components/ForgotPassword.js';
43
+ export { MagicLink } from './components/MagicLink.js';
44
+ export type { MagicLinkProps } from './components/MagicLink.js';
45
+ export { EmailOTP } from './components/EmailOTP.js';
46
+ export type { EmailOTPProps } from './components/EmailOTP.js';
47
+ export { PhoneOTP } from './components/PhoneOTP.js';
48
+ export type { PhoneOTPProps } from './components/PhoneOTP.js';
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG9G,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @edge-base/auth-ui-react — Headless React authentication UI components.
3
+ *
4
+ * Usage:
5
+ * ```tsx
6
+ * import { createClient } from '@edge-base/web';
7
+ * import { AuthProvider, AuthForm } from '@edge-base/auth-ui-react';
8
+ * import '@edge-base/auth-ui-react/styles.css'; // optional default theme
9
+ *
10
+ * const client = createClient('https://my-app.edgebase.fun');
11
+ *
12
+ * function App() {
13
+ * return (
14
+ * <AuthProvider
15
+ * client={client}
16
+ * config={{
17
+ * providers: ['google', 'github'],
18
+ * magicLinkEnabled: true,
19
+ * }}
20
+ * >
21
+ * <AuthForm onSuccess={() => navigate('/dashboard')} />
22
+ * </AuthProvider>
23
+ * );
24
+ * }
25
+ * ```
26
+ */
27
+ // Context & Provider
28
+ export { AuthProvider, useAuthContext } from './context.js';
29
+ // Hooks
30
+ export { useAuth } from './hooks/useAuth.js';
31
+ // Components
32
+ export { AuthForm } from './components/AuthForm.js';
33
+ export { SignIn } from './components/SignIn.js';
34
+ export { SignUp } from './components/SignUp.js';
35
+ export { SocialButtons } from './components/SocialButtons.js';
36
+ export { MFAChallenge } from './components/MFAChallenge.js';
37
+ export { ForgotPassword } from './components/ForgotPassword.js';
38
+ export { MagicLink } from './components/MagicLink.js';
39
+ export { EmailOTP } from './components/EmailOTP.js';
40
+ export { PhoneOTP } from './components/PhoneOTP.js';
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG5D,QAAQ;AACR,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,aAAa;AACb,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC"}