@umituz/web-dashboard 5.0.1 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/package.json +19 -17
  2. package/src/domains/onboarding/calc/calc.test.ts +181 -0
  3. package/src/domains/onboarding/calc/card-stack-motion-curve.ts +33 -0
  4. package/src/domains/onboarding/calc/count-with-locale.ts +16 -0
  5. package/src/domains/onboarding/calc/duration-equal-split.ts +24 -0
  6. package/src/domains/onboarding/calc/elapsed-millis.ts +12 -0
  7. package/src/domains/onboarding/calc/index.ts +36 -0
  8. package/src/domains/onboarding/calc/progress-percentage.ts +37 -0
  9. package/src/domains/onboarding/calc/slider-value-bounds.ts +44 -0
  10. package/src/domains/onboarding/calc/step-index-clamp.ts +28 -0
  11. package/src/domains/onboarding/calc/swipe-gesture-curve.ts +67 -0
  12. package/src/domains/onboarding/components/OnboardingFlow.test.tsx +481 -0
  13. package/src/domains/onboarding/components/OnboardingFlow.tsx +361 -0
  14. package/src/domains/onboarding/components/OnboardingIntl.tsx +108 -0
  15. package/src/domains/onboarding/components/hooks/index.ts +7 -0
  16. package/src/domains/onboarding/components/hooks/useOnboardingAnalytics.test.tsx +74 -0
  17. package/src/domains/onboarding/components/hooks/useOnboardingAnalytics.ts +62 -0
  18. package/src/domains/onboarding/components/hooks/useOnboardingProgress.test.tsx +150 -0
  19. package/src/domains/onboarding/components/hooks/useOnboardingProgress.ts +260 -0
  20. package/src/domains/onboarding/components/hooks/usePermissionPriming.ts +52 -0
  21. package/src/domains/onboarding/components/hooks/useReducedMotion.ts +24 -0
  22. package/src/domains/onboarding/components/screens/AccountGateScreen.tsx +89 -0
  23. package/src/domains/onboarding/components/screens/AppDemoScreen.tsx +39 -0
  24. package/src/domains/onboarding/components/screens/ComparisonScreen.tsx +59 -0
  25. package/src/domains/onboarding/components/screens/GoalQuestionScreen.tsx +56 -0
  26. package/src/domains/onboarding/components/screens/PainPointsScreen.tsx +65 -0
  27. package/src/domains/onboarding/components/screens/PaywallScreen.tsx +138 -0
  28. package/src/domains/onboarding/components/screens/PermissionPrimingScreen.tsx +113 -0
  29. package/src/domains/onboarding/components/screens/PersonalizedSolutionScreen.tsx +53 -0
  30. package/src/domains/onboarding/components/screens/PreferencesScreen.tsx +194 -0
  31. package/src/domains/onboarding/components/screens/ProcessingScreen.tsx +79 -0
  32. package/src/domains/onboarding/components/screens/SocialProofScreen.tsx +116 -0
  33. package/src/domains/onboarding/components/screens/TinderCardsScreen.tsx +108 -0
  34. package/src/domains/onboarding/components/screens/ValueDeliveryScreen.tsx +85 -0
  35. package/src/domains/onboarding/components/screens/WelcomeScreen.tsx +52 -0
  36. package/src/domains/onboarding/components/screens/index.ts +28 -0
  37. package/src/domains/onboarding/components/shared/AnimationWrapper.tsx +73 -0
  38. package/src/domains/onboarding/components/shared/OnboardingErrorBoundary.tsx +81 -0
  39. package/src/domains/onboarding/components/shared/OptionCard.tsx +73 -0
  40. package/src/domains/onboarding/components/shared/PrimaryButton.tsx +58 -0
  41. package/src/domains/onboarding/components/shared/ProgressBar.tsx +51 -0
  42. package/src/domains/onboarding/components/shared/QuestionWrapper.tsx +36 -0
  43. package/src/domains/onboarding/components/shared/ScreenContainer.tsx +29 -0
  44. package/src/domains/onboarding/components/shared/SwipeCard.test.tsx +51 -0
  45. package/src/domains/onboarding/components/shared/SwipeCard.tsx +106 -0
  46. package/src/domains/onboarding/components/shared/index.ts +16 -0
  47. package/src/domains/onboarding/components/shared/renderBundledIcon.tsx +20 -0
  48. package/src/domains/onboarding/index.ts +182 -0
  49. package/src/domains/onboarding/onboarding.css +1 -0
  50. package/src/domains/onboarding/predicates/has-handler.ts +25 -0
  51. package/src/domains/onboarding/predicates/icon-name-resolves.ts +113 -0
  52. package/src/domains/onboarding/predicates/index.ts +26 -0
  53. package/src/domains/onboarding/predicates/permission-granted.ts +26 -0
  54. package/src/domains/onboarding/predicates/permission-supports.ts +66 -0
  55. package/src/domains/onboarding/predicates/predicates.test.ts +202 -0
  56. package/src/domains/onboarding/predicates/screen-emits-data.ts +17 -0
  57. package/src/domains/onboarding/predicates/storage-available.ts +22 -0
  58. package/src/domains/onboarding/templates/TemplateDemoFallback.tsx +112 -0
  59. package/src/domains/onboarding/templates/art-onboarding.ts +81 -0
  60. package/src/domains/onboarding/templates/health-onboarding.ts +97 -0
  61. package/src/domains/onboarding/templates/index.ts +6 -0
  62. package/src/domains/onboarding/templates/platform-onboarding.ts +210 -0
  63. package/src/domains/onboarding/templates/video-onboarding.ts +100 -0
  64. package/src/domains/onboarding/test/setup.ts +30 -0
  65. package/src/domains/onboarding/theme/cn.ts +10 -0
  66. package/src/domains/onboarding/theme/index.css +131 -0
  67. package/src/domains/onboarding/theme/index.ts +12 -0
  68. package/src/domains/onboarding/theme/tokens.ts +122 -0
  69. package/src/domains/onboarding/types/config.ts +68 -0
  70. package/src/domains/onboarding/types/index.ts +10 -0
  71. package/src/domains/onboarding/types/labels.ts +83 -0
  72. package/src/domains/onboarding/types/screens.ts +193 -0
  73. package/src/domains/onboarding/utils/analytics-dispatch.test.ts +93 -0
  74. package/src/domains/onboarding/utils/analytics-dispatch.ts +92 -0
  75. package/src/domains/onboarding/utils/default-storage-key.ts +2 -0
  76. package/src/domains/onboarding/utils/index.ts +13 -0
  77. package/src/domains/onboarding/utils/local-storage-bridge.test.ts +93 -0
  78. package/src/domains/onboarding/utils/local-storage-bridge.ts +104 -0
  79. package/src/domains/onboarding/utils/permission-bridge.test.ts +64 -0
  80. package/src/domains/onboarding/utils/permission-bridge.ts +95 -0
  81. package/src/domains/onboarding/validation/flow-structure-check.ts +28 -0
  82. package/src/domains/onboarding/validation/index.ts +9 -0
  83. package/src/domains/onboarding/validation/permission-status-check.ts +23 -0
  84. package/src/domains/onboarding/validation/screen-config-check.ts +105 -0
  85. package/src/domains/onboarding/validation/stored-progress-check.ts +68 -0
  86. package/src/domains/onboarding/validation/validation.test.ts +175 -0
  87. package/src/index.ts +0 -10
  88. package/src/styles/dashboard.contract.test.ts +1 -0
  89. package/src/styles/dashboard.css +0 -460
  90. package/src/domains/auth/components/AuthLayout.tsx +0 -99
  91. package/src/domains/auth/components/ForgotPasswordForm.tsx +0 -167
  92. package/src/domains/auth/components/LoginForm.tsx +0 -222
  93. package/src/domains/auth/components/RegisterForm.tsx +0 -281
  94. package/src/domains/auth/components/ResetPasswordForm.tsx +0 -173
  95. package/src/domains/auth/components/index.ts +0 -11
  96. package/src/domains/auth/components/shared/AuthErrorBanner.tsx +0 -25
  97. package/src/domains/auth/components/shared/EmailInput.tsx +0 -73
  98. package/src/domains/auth/components/shared/PasswordInput.tsx +0 -100
  99. package/src/domains/auth/components/shared/PasswordStrengthIndicator.tsx +0 -63
  100. package/src/domains/auth/components/shared/SocialLoginButtons.tsx +0 -44
  101. package/src/domains/auth/components/shared/SocialProviderIcons.tsx +0 -48
  102. package/src/domains/auth/components/shared/index.ts +0 -20
  103. package/src/domains/auth/hooks/index.ts +0 -8
  104. package/src/domains/auth/hooks/useAuth.ts +0 -230
  105. package/src/domains/auth/index.ts +0 -62
  106. package/src/domains/auth/types/auth.ts +0 -302
  107. package/src/domains/auth/types/index.ts +0 -25
  108. package/src/domains/auth/utils/auth.test.ts +0 -188
  109. package/src/domains/auth/utils/auth.ts +0 -221
  110. package/src/domains/auth/utils/i18nKeys.ts +0 -109
  111. package/src/domains/auth/utils/index.ts +0 -29
  112. package/src/domains/auth/utils/secureToken.ts +0 -33
  113. package/src/domains/auth/utils/validationKeys.ts +0 -23
  114. package/src/domains/session/DemoLogin.tsx +0 -42
  115. package/src/domains/session/OrgSwitcher.tsx +0 -102
  116. package/src/domains/session/SessionContext.tsx +0 -150
  117. package/src/domains/session/inMemoryAuthAdapter.ts +0 -53
  118. package/src/domains/session/index.ts +0 -18
  119. package/src/domains/session/types.ts +0 -47
  120. package/src/domains/session/utils/i18nKeys.ts +0 -12
@@ -1,63 +0,0 @@
1
- import { useMemo } from "react";
2
- import { calculatePasswordStrength } from "../../utils/auth";
3
- import { cn } from "@umituz/web-design-system/utils/cn";
4
-
5
- const STRENGTH_KEYS = {
6
- weak: 'auth.passwordStrength.weak',
7
- fair: 'auth.passwordStrength.fair',
8
- good: 'auth.passwordStrength.good',
9
- strong: 'auth.passwordStrength.strong',
10
- } as const;
11
-
12
- type StrengthBand = keyof typeof STRENGTH_KEYS;
13
-
14
- const scoreToBand = (score: number): StrengthBand => {
15
- if (score < 25) return 'weak';
16
- if (score < 50) return 'fair';
17
- if (score < 75) return 'good';
18
- return 'strong';
19
- };
20
-
21
- export interface PasswordStrengthIndicatorProps {
22
- password: string;
23
- translate: (key: string) => string;
24
- }
25
-
26
- export const PasswordStrengthIndicator = ({
27
- password,
28
- translate,
29
- }: PasswordStrengthIndicatorProps) => {
30
- const { band, filledSegments } = useMemo(() => {
31
- const value = calculatePasswordStrength(password);
32
- const resolvedBand = scoreToBand(value);
33
- const segments = Math.round(value / 25);
34
- return {
35
- band: resolvedBand,
36
- filledSegments: segments,
37
- };
38
- }, [password]);
39
-
40
- if (!password) return null;
41
-
42
- return (
43
- <div className="udb-strength" aria-live="polite">
44
- <div className="udb-strength__bars">
45
- {[0, 1, 2, 3].map((segment) => {
46
- const isActive = segment < filledSegments;
47
- return (
48
- <div
49
- key={segment}
50
- className={cn(
51
- "udb-strength__bar",
52
- isActive && `udb-strength__bar--${band}`,
53
- )}
54
- />
55
- );
56
- })}
57
- </div>
58
- <p className={cn("udb-strength__label", `udb-strength__label--${band}`)}>
59
- {translate(STRENGTH_KEYS[band])}
60
- </p>
61
- </div>
62
- );
63
- };
@@ -1,44 +0,0 @@
1
- import { Button } from "@umituz/web-design-system/atoms";
2
- import { GoogleIcon, AppleIcon } from "./SocialProviderIcons";
3
-
4
- export type SocialProviderId = 'google' | 'apple';
5
-
6
- export interface SocialLoginButtonsProps {
7
- onProvider: (id: SocialProviderId) => void;
8
- translate: (key: string) => string;
9
- disabled?: boolean;
10
- }
11
-
12
- const SOCIAL_PROVIDERS: ReadonlyArray<{
13
- id: SocialProviderId;
14
- labelKey: string;
15
- Icon: typeof GoogleIcon;
16
- }> = [
17
- { id: 'google', labelKey: 'auth.social.continueWithGoogle', Icon: GoogleIcon },
18
- { id: 'apple', labelKey: 'auth.social.continueWithApple', Icon: AppleIcon },
19
- ];
20
-
21
- export const SocialLoginButtons = ({
22
- onProvider,
23
- translate,
24
- disabled = false,
25
- }: SocialLoginButtonsProps) => {
26
- return (
27
- <div className="udb-social-grid">
28
- {SOCIAL_PROVIDERS.map(({ id, labelKey, Icon }) => (
29
- <Button
30
- key={id}
31
- type="button"
32
- variant="outline"
33
- onClick={() => onProvider(id)}
34
- disabled={disabled}
35
- aria-label={translate(labelKey)}
36
- className="udb-social-grid__btn"
37
- >
38
- <Icon className="udb-social-grid__icon" aria-hidden="true" />
39
- {translate(labelKey)}
40
- </Button>
41
- ))}
42
- </div>
43
- );
44
- };
@@ -1,48 +0,0 @@
1
- /**
2
- * Social Provider Icons
3
- *
4
- * Reusable SVG icon components for social auth providers.
5
- * Centralizes the brand mark assets so consuming forms
6
- * don't embed raw SVG paths in JSX.
7
- */
8
-
9
- import type { FC } from "react";
10
-
11
- interface IconProps {
12
- className?: string;
13
- "aria-hidden"?: boolean | "true" | "false";
14
- }
15
-
16
- const baseProps = {
17
- xmlns: "http://www.w3.org/2000/svg",
18
- viewBox: "0 0 24 24",
19
- fill: "currentColor",
20
- "aria-hidden": true as const,
21
- };
22
-
23
- export const GoogleIcon: FC<IconProps> = ({ className, ...rest }) => (
24
- <svg className={className} {...baseProps} {...rest}>
25
- <path
26
- d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
27
- fill="#4285F4"
28
- />
29
- <path
30
- d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
31
- fill="#34A853"
32
- />
33
- <path
34
- d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
35
- fill="#FBBC05"
36
- />
37
- <path
38
- d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
39
- fill="#EA4335"
40
- />
41
- </svg>
42
- );
43
-
44
- export const AppleIcon: FC<IconProps> = ({ className, ...rest }) => (
45
- <svg className={className} {...baseProps} {...rest}>
46
- <path d="M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z" />
47
- </svg>
48
- );
@@ -1,20 +0,0 @@
1
- /**
2
- * Shared auth form components — barrel export
3
- */
4
-
5
- export { AuthErrorBanner } from './AuthErrorBanner';
6
- export type { AuthErrorBannerProps } from './AuthErrorBanner';
7
-
8
- export { EmailInput } from './EmailInput';
9
- export type { EmailInputProps } from './EmailInput';
10
-
11
- export { PasswordInput } from './PasswordInput';
12
- export type { PasswordInputProps } from './PasswordInput';
13
-
14
- export { PasswordStrengthIndicator } from './PasswordStrengthIndicator';
15
- export type { PasswordStrengthIndicatorProps } from './PasswordStrengthIndicator';
16
-
17
- export { SocialLoginButtons } from './SocialLoginButtons';
18
- export type { SocialLoginButtonsProps, SocialProviderId } from './SocialLoginButtons';
19
-
20
- export { GoogleIcon, AppleIcon } from './SocialProviderIcons';
@@ -1,8 +0,0 @@
1
- /**
2
- * Auth Hooks
3
- *
4
- * Export all auth hooks
5
- */
6
-
7
- export { useAuth } from "./useAuth";
8
- export type { AuthProvider } from "./useAuth";
@@ -1,230 +0,0 @@
1
- /**
2
- * useAuth Hook
3
- *
4
- * Core authentication hook for managing auth state and actions.
5
- * Centralizes the try/catch+loading+error pattern via a single helper
6
- * to keep individual actions focused on their unique logic.
7
- */
8
-
9
- import { useState, useCallback } from "react";
10
- import type {
11
- AuthState,
12
- User,
13
- AuthActions,
14
- LoginCredentials,
15
- RegisterData,
16
- ForgotPasswordData,
17
- ResetPasswordData,
18
- } from "../types/auth";
19
- import {
20
- validateLogin,
21
- validateRegister,
22
- validateForgotPassword,
23
- validateResetPassword,
24
- } from "../utils/auth";
25
-
26
- /**
27
- * Auth provider contract — single source of truth for backend integration.
28
- */
29
- export interface AuthProvider {
30
- login: (credentials: LoginCredentials) => Promise<User>;
31
- register: (data: RegisterData) => Promise<User>;
32
- logout: () => Promise<void>;
33
- forgotPassword: (data: ForgotPasswordData) => Promise<void>;
34
- resetPassword: (data: ResetPasswordData) => Promise<void>;
35
- refreshAuth: () => Promise<User | null>;
36
- }
37
-
38
- interface UseAuthOptions {
39
- /** Auth implementation (connects to your backend) */
40
- authProvider?: AuthProvider;
41
- }
42
-
43
- /**
44
- * Wrap a side-effectful async function with the standard
45
- * isLoading + error + throw contract.
46
- *
47
- * Important: the wrapped function is the SINGLE point of truth for
48
- * setting isLoading=false, ensuring errors are surfaced (not swallowed),
49
- * and re-throwing for callers that need to react.
50
- */
51
- const executeAuthAction = async <T>(
52
- updateState: (updates: Partial<AuthState>) => void,
53
- fallbackErrorMessage: string,
54
- action: () => Promise<T>,
55
- ): Promise<T> => {
56
- updateState({ isLoading: true, error: null });
57
- try {
58
- return await action();
59
- } catch (error) {
60
- const errorMessage =
61
- error instanceof Error && error.message ? error.message : fallbackErrorMessage;
62
- updateState({ isLoading: false, error: errorMessage });
63
- throw error instanceof Error ? error : new Error(errorMessage);
64
- }
65
- };
66
-
67
- /**
68
- * useAuth hook
69
- *
70
- * Manages authentication state and provides auth actions.
71
- * Each action surfaces errors to the caller AND to the auth state.
72
- */
73
- export function useAuth(options: UseAuthOptions = {}) {
74
- const { authProvider } = options;
75
-
76
- const [authState, setAuthState] = useState<AuthState>({
77
- isAuthenticated: false,
78
- user: null,
79
- isLoading: false,
80
- error: null,
81
- });
82
-
83
- const updateState = useCallback((updates: Partial<AuthState>) => {
84
- setAuthState((prev) => ({ ...prev, ...updates }));
85
- }, []);
86
-
87
- const requireProvider = useCallback((): AuthProvider => {
88
- if (!authProvider) {
89
- throw new Error("Auth provider not configured");
90
- }
91
- return authProvider;
92
- }, [authProvider]);
93
-
94
- const login = useCallback(
95
- async (credentials: LoginCredentials): Promise<User> => {
96
- const validation = validateLogin(credentials);
97
- if (!validation.valid) {
98
- const message = validation.error ?? "Login validation failed";
99
- updateState({ error: message });
100
- throw new Error(message);
101
- }
102
-
103
- return executeAuthAction(updateState, "Login failed", async () => {
104
- const provider = requireProvider();
105
- const user = await provider.login(credentials);
106
- updateState({ isAuthenticated: true, user, isLoading: false, error: null });
107
- return user;
108
- });
109
- },
110
- [requireProvider, updateState],
111
- );
112
-
113
- const register = useCallback(
114
- async (data: RegisterData): Promise<User> => {
115
- const validation = validateRegister(data, false);
116
- if (!validation.valid) {
117
- const message = validation.error ?? "Registration validation failed";
118
- updateState({ error: message });
119
- throw new Error(message);
120
- }
121
-
122
- return executeAuthAction(updateState, "Registration failed", async () => {
123
- const provider = requireProvider();
124
- const user = await provider.register(data);
125
- updateState({ isAuthenticated: true, user, isLoading: false, error: null });
126
- return user;
127
- });
128
- },
129
- [requireProvider, updateState],
130
- );
131
-
132
- const logout = useCallback(async (): Promise<void> => {
133
- await executeAuthAction(updateState, "Logout failed", async () => {
134
- const provider = requireProvider();
135
- await provider.logout();
136
- updateState({ isAuthenticated: false, user: null, isLoading: false, error: null });
137
- });
138
- }, [requireProvider, updateState]);
139
-
140
- const forgotPassword = useCallback(
141
- async (data: ForgotPasswordData): Promise<void> => {
142
- const validation = validateForgotPassword(data);
143
- if (!validation.valid) {
144
- const message = validation.error ?? "Forgot password validation failed";
145
- updateState({ error: message });
146
- throw new Error(message);
147
- }
148
-
149
- await executeAuthAction(updateState, "Failed to send reset email", async () => {
150
- const provider = requireProvider();
151
- await provider.forgotPassword(data);
152
- updateState({ isLoading: false });
153
- });
154
- },
155
- [requireProvider, updateState],
156
- );
157
-
158
- const resetPassword = useCallback(
159
- async (data: ResetPasswordData): Promise<void> => {
160
- const validation = validateResetPassword(data);
161
- if (!validation.valid) {
162
- const message = validation.error ?? "Reset password validation failed";
163
- updateState({ error: message });
164
- throw new Error(message);
165
- }
166
-
167
- await executeAuthAction(updateState, "Failed to reset password", async () => {
168
- const provider = requireProvider();
169
- await provider.resetPassword(data);
170
- updateState({ isLoading: false });
171
- });
172
- },
173
- [requireProvider, updateState],
174
- );
175
-
176
- const updateProfile = useCallback(
177
- async (data: Partial<User>): Promise<User> => {
178
- const currentUser = authState.user;
179
- if (!currentUser) {
180
- const message = "No user to update";
181
- updateState({ error: message });
182
- throw new Error(message);
183
- }
184
-
185
- return executeAuthAction(updateState, "Failed to update profile", async () => {
186
- // Pure derivation of the new user, no side effects in setState callback.
187
- // Required fields come from the existing user; data overrides only the rest.
188
- const { id: _ignoredId, ...rest } = data;
189
- const updatedUser: User = {
190
- ...currentUser,
191
- ...rest,
192
- id: currentUser.id,
193
- email: data.email ?? currentUser.email,
194
- };
195
- updateState({ user: updatedUser, isLoading: false, error: null });
196
- return updatedUser;
197
- });
198
- },
199
- [authState.user, updateState],
200
- );
201
-
202
- const refresh = useCallback(async (): Promise<User | null> => {
203
- return executeAuthAction(updateState, "Failed to refresh authentication", async () => {
204
- const provider = requireProvider();
205
- const user = await provider.refreshAuth();
206
- updateState({ isAuthenticated: Boolean(user), user, isLoading: false, error: null });
207
- return user;
208
- });
209
- }, [requireProvider, updateState]);
210
-
211
- const clearError = useCallback(() => {
212
- updateState({ error: null });
213
- }, [updateState]);
214
-
215
- const authActions: AuthActions = {
216
- login,
217
- register,
218
- logout,
219
- forgotPassword,
220
- resetPassword,
221
- updateProfile,
222
- refresh,
223
- };
224
-
225
- return {
226
- ...authState,
227
- ...authActions,
228
- clearError,
229
- };
230
- }
@@ -1,62 +0,0 @@
1
- /**
2
- * Auth Domain
3
- *
4
- * Main entry point for authentication domain
5
- */
6
-
7
- // Components
8
- export {
9
- AuthLayout,
10
- LoginForm,
11
- RegisterForm,
12
- ForgotPasswordForm,
13
- ResetPasswordForm,
14
- } from "./components";
15
-
16
- // Hooks
17
- export { useAuth, type AuthProvider } from "./hooks";
18
-
19
- // Utils
20
- export {
21
- isValidEmail,
22
- isValidPassword,
23
- validateLogin,
24
- validateRegister,
25
- validateForgotPassword,
26
- validateResetPassword,
27
- getUserDisplayName,
28
- getUserInitials,
29
- isEmailVerified,
30
- formatUserCreatedAt,
31
- maskEmail,
32
- generateResetToken,
33
- calculatePasswordStrength,
34
- getPasswordStrengthBand,
35
- sanitizeInput,
36
- AUTH_KEYS,
37
- AUTH_VALIDATION_KEYS,
38
- type ValidationResult,
39
- type PasswordStrengthBand,
40
- type AuthValidationKey,
41
- } from "./utils";
42
-
43
- // Types
44
- export type {
45
- LoginCredentials,
46
- RegisterData,
47
- ForgotPasswordData,
48
- ResetPasswordData,
49
- AuthState,
50
- User,
51
- AuthActions,
52
- AuthComponentProps,
53
- AuthStep,
54
- AuthConfig,
55
- SocialProvider,
56
- AuthLayoutProps,
57
- LoginFormProps,
58
- RegisterFormProps,
59
- ForgotPasswordFormProps,
60
- ResetPasswordFormProps,
61
- Translate,
62
- } from "./types";