@passkeyme/react-auth 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +86 -0
- package/LICENSE +21 -0
- package/README.md +951 -0
- package/dist/components/DevToolsDashboard.d.ts +18 -0
- package/dist/components/DevToolsDashboard.d.ts.map +1 -0
- package/dist/components/LazyComponents.d.ts +22 -0
- package/dist/components/LazyComponents.d.ts.map +1 -0
- package/dist/components/NotificationProvider.d.ts +31 -0
- package/dist/components/NotificationProvider.d.ts.map +1 -0
- package/dist/components/PasskeymeAuthPanel.d.ts +121 -0
- package/dist/components/PasskeymeAuthPanel.d.ts.map +1 -0
- package/dist/components/PasskeymeButton.d.ts +64 -0
- package/dist/components/PasskeymeButton.d.ts.map +1 -0
- package/dist/components/PasskeymeCallbackHandler.d.ts +50 -0
- package/dist/components/PasskeymeCallbackHandler.d.ts.map +1 -0
- package/dist/components/PasskeymeErrorDisplay.d.ts +28 -0
- package/dist/components/PasskeymeErrorDisplay.d.ts.map +1 -0
- package/dist/components/PasskeymeLoadingIndicator.d.ts +34 -0
- package/dist/components/PasskeymeLoadingIndicator.d.ts.map +1 -0
- package/dist/components/PasskeymeOAuthButton.d.ts +8 -0
- package/dist/components/PasskeymeOAuthButton.d.ts.map +1 -0
- package/dist/components/PasskeymeProtectedRoute.d.ts +16 -0
- package/dist/components/PasskeymeProtectedRoute.d.ts.map +1 -0
- package/dist/components/PasskeymeProvider.d.ts +24 -0
- package/dist/components/PasskeymeProvider.d.ts.map +1 -0
- package/dist/components/PasskeymeUserProfile.d.ts +31 -0
- package/dist/components/PasskeymeUserProfile.d.ts.map +1 -0
- package/dist/components/PerformanceDashboard.d.ts +30 -0
- package/dist/components/PerformanceDashboard.d.ts.map +1 -0
- package/dist/components/VirtualScrollList.d.ts +105 -0
- package/dist/components/VirtualScrollList.d.ts.map +1 -0
- package/dist/hooks/useAuthUtils.d.ts +26 -0
- package/dist/hooks/useAuthUtils.d.ts.map +1 -0
- package/dist/hooks/useLoadingState.d.ts +31 -0
- package/dist/hooks/useLoadingState.d.ts.map +1 -0
- package/dist/hooks/usePerformanceMonitor.d.ts +41 -0
- package/dist/hooks/usePerformanceMonitor.d.ts.map +1 -0
- package/dist/hooks/useUsernameManager.d.ts +62 -0
- package/dist/hooks/useUsernameManager.d.ts.map +1 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +8734 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +8827 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +249 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/analytics.d.ts +112 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/debug.d.ts +9 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/devUtils.d.ts +53 -0
- package/dist/utils/devUtils.d.ts.map +1 -0
- package/dist/utils/enhancedButtonStyles.d.ts +70 -0
- package/dist/utils/enhancedButtonStyles.d.ts.map +1 -0
- package/dist/utils/importOptimizer.d.ts +79 -0
- package/dist/utils/importOptimizer.d.ts.map +1 -0
- package/dist/utils/loadingStates.d.ts +35 -0
- package/dist/utils/loadingStates.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +41 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/performanceProfiler.d.ts +80 -0
- package/dist/utils/performanceProfiler.d.ts.map +1 -0
- package/dist/utils/reactCompat.d.ts +6 -0
- package/dist/utils/reactCompat.d.ts.map +1 -0
- package/dist/utils/storageOptimization.d.ts +173 -0
- package/dist/utils/storageOptimization.d.ts.map +1 -0
- package/dist/utils/testingUtils.d.ts +163 -0
- package/dist/utils/testingUtils.d.ts.map +1 -0
- package/package.json +93 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React-specific types for PasskeyMe Auth SDK
|
|
3
|
+
* Enhanced with comprehensive TypeScript support and accessibility features
|
|
4
|
+
*/
|
|
5
|
+
import { ReactNode } from "react";
|
|
6
|
+
import type { PasskeymeConfig, User, LoginOptions, PasskeymeAuthInstance, AppConfiguration, PasskeymeError } from "@passkeyme/auth";
|
|
7
|
+
/**
|
|
8
|
+
* Props for the PasskeymeProvider component
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export interface PasskeymeProviderProps {
|
|
12
|
+
/** Configuration for PasskeyMe Auth */
|
|
13
|
+
config: PasskeymeConfig;
|
|
14
|
+
/** Children components */
|
|
15
|
+
children: ReactNode;
|
|
16
|
+
/** Custom loading component */
|
|
17
|
+
loadingComponent?: ReactNode;
|
|
18
|
+
/** Custom error component */
|
|
19
|
+
errorComponent?: (error: string) => ReactNode;
|
|
20
|
+
/** Callback when authentication state changes */
|
|
21
|
+
onAuthChange?: (user: User | null) => void;
|
|
22
|
+
/** Callback when errors occur */
|
|
23
|
+
onError?: (error: string | PasskeymeError) => void;
|
|
24
|
+
/** Whether to enable the built-in notification system (default: true) */
|
|
25
|
+
enableNotifications?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Return type for the usePasskeyme hook
|
|
29
|
+
* @public
|
|
30
|
+
*/
|
|
31
|
+
export interface UsePasskeymeReturn {
|
|
32
|
+
/** Current authenticated user */
|
|
33
|
+
user: User | null;
|
|
34
|
+
/** Authentication loading state */
|
|
35
|
+
loading: boolean;
|
|
36
|
+
/** Authentication error */
|
|
37
|
+
error: string | null;
|
|
38
|
+
/** Whether user is authenticated */
|
|
39
|
+
isAuthenticated: boolean;
|
|
40
|
+
/** PasskeyMe configuration */
|
|
41
|
+
config: PasskeymeConfig;
|
|
42
|
+
/** Redirect to hosted auth page */
|
|
43
|
+
redirectToLogin: (options?: LoginOptions) => void;
|
|
44
|
+
/** Redirect to hosted auth page with specific OAuth provider */
|
|
45
|
+
redirectToOAuth: (provider: SupportedOAuthProvider, redirectUri?: string) => void;
|
|
46
|
+
/** Handle authentication callback from hosted auth page */
|
|
47
|
+
handleAuthCallback: () => Promise<User>;
|
|
48
|
+
/** Legacy method name for handleAuthCallback */
|
|
49
|
+
handleCallback: () => Promise<User>;
|
|
50
|
+
/** Handle direct token authentication callback */
|
|
51
|
+
handleTokenCallback: (token: string) => Promise<User>;
|
|
52
|
+
/** Logout current user */
|
|
53
|
+
logout: () => Promise<void>;
|
|
54
|
+
/** Get current access token */
|
|
55
|
+
getAccessToken: () => Promise<string | null>;
|
|
56
|
+
/** Refresh access token */
|
|
57
|
+
refreshToken: () => Promise<string>;
|
|
58
|
+
/** Get base URL configured for auth instance */
|
|
59
|
+
getBaseUrl: () => string;
|
|
60
|
+
/** Get app ID configured for auth instance */
|
|
61
|
+
getAppId: () => string;
|
|
62
|
+
/** Check if passkeys are supported on this device */
|
|
63
|
+
isPasskeySupported: () => boolean;
|
|
64
|
+
/** Check if user has registered passkeys */
|
|
65
|
+
hasStoredPasskeys: (username?: string) => Promise<boolean>;
|
|
66
|
+
/** Authenticate with passkey */
|
|
67
|
+
passkeyLogin: (username: string, apiKey: string) => Promise<User>;
|
|
68
|
+
/** Smart login: try passkey first, fallback to hosted auth */
|
|
69
|
+
smartLogin: (username?: string, apiKey?: string) => Promise<{
|
|
70
|
+
method: "passkey" | "redirect";
|
|
71
|
+
user?: User;
|
|
72
|
+
}>;
|
|
73
|
+
/** Get app configuration including OAuth providers */
|
|
74
|
+
getAppConfig: () => Promise<AppConfiguration>;
|
|
75
|
+
/** High-level programmatic authentication trigger with smart fallback */
|
|
76
|
+
triggerPasskeymeAuth: (options?: TriggerPasskeymeAuthOptions) => Promise<void>;
|
|
77
|
+
/** Loading state for programmatic authentication */
|
|
78
|
+
authLoading: boolean;
|
|
79
|
+
/** Direct access to auth instance */
|
|
80
|
+
auth: PasskeymeAuthInstance;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Supported OAuth providers
|
|
84
|
+
* @public
|
|
85
|
+
*/
|
|
86
|
+
export type SupportedOAuthProvider = "google" | "github" | "facebook";
|
|
87
|
+
/**
|
|
88
|
+
* Button size options
|
|
89
|
+
* @public
|
|
90
|
+
*/
|
|
91
|
+
export type ButtonSize = "small" | "medium" | "large";
|
|
92
|
+
/**
|
|
93
|
+
* Button variant options for OAuth buttons
|
|
94
|
+
* @public
|
|
95
|
+
*/
|
|
96
|
+
export type OAuthButtonVariant = "default" | "outlined" | "text";
|
|
97
|
+
/**
|
|
98
|
+
* Button variant options for main buttons
|
|
99
|
+
* @public
|
|
100
|
+
*/
|
|
101
|
+
export type ButtonVariant = "primary" | "secondary" | "outline";
|
|
102
|
+
/**
|
|
103
|
+
* Props for OAuth authentication buttons
|
|
104
|
+
* @public
|
|
105
|
+
*/
|
|
106
|
+
export interface PasskeymeOAuthButtonProps {
|
|
107
|
+
/** OAuth provider */
|
|
108
|
+
provider: SupportedOAuthProvider;
|
|
109
|
+
/** Button variant */
|
|
110
|
+
variant?: OAuthButtonVariant;
|
|
111
|
+
/** Button size */
|
|
112
|
+
size?: ButtonSize;
|
|
113
|
+
/** Custom redirect URI */
|
|
114
|
+
redirectUri?: string;
|
|
115
|
+
/** Custom button text */
|
|
116
|
+
children?: ReactNode;
|
|
117
|
+
/** Custom CSS classes */
|
|
118
|
+
className?: string;
|
|
119
|
+
/** Custom styles */
|
|
120
|
+
style?: React.CSSProperties;
|
|
121
|
+
/** Button disabled state */
|
|
122
|
+
disabled?: boolean;
|
|
123
|
+
/** Click handler */
|
|
124
|
+
onClick?: () => void;
|
|
125
|
+
/** Loading state */
|
|
126
|
+
loading?: boolean;
|
|
127
|
+
/** Accessible label for the button (for screen readers) */
|
|
128
|
+
"aria-label"?: string;
|
|
129
|
+
/** ID of element that describes the button */
|
|
130
|
+
"aria-describedby"?: string;
|
|
131
|
+
/** ID of element that labels the button */
|
|
132
|
+
"aria-labelledby"?: string;
|
|
133
|
+
/** HTML id attribute for the button */
|
|
134
|
+
id?: string;
|
|
135
|
+
/** Tab index for keyboard navigation */
|
|
136
|
+
tabIndex?: number;
|
|
137
|
+
/** Callback for keyboard events */
|
|
138
|
+
onKeyDown?: (event: React.KeyboardEvent<HTMLButtonElement>) => void;
|
|
139
|
+
/** Callback for focus events */
|
|
140
|
+
onFocus?: (event: React.FocusEvent<HTMLButtonElement>) => void;
|
|
141
|
+
/** Callback for blur events */
|
|
142
|
+
onBlur?: (event: React.FocusEvent<HTMLButtonElement>) => void;
|
|
143
|
+
/** Autofocus the button on mount */
|
|
144
|
+
autoFocus?: boolean;
|
|
145
|
+
}
|
|
146
|
+
export interface PasskeymeButtonProps {
|
|
147
|
+
/** Username hint for passkey */
|
|
148
|
+
username?: string;
|
|
149
|
+
/** Button variant */
|
|
150
|
+
variant?: "default" | "outlined" | "text";
|
|
151
|
+
/** Button size */
|
|
152
|
+
size?: "small" | "medium" | "large";
|
|
153
|
+
/** Custom button text */
|
|
154
|
+
children?: ReactNode;
|
|
155
|
+
/** Custom CSS classes */
|
|
156
|
+
className?: string;
|
|
157
|
+
/** Button disabled state */
|
|
158
|
+
disabled?: boolean;
|
|
159
|
+
/** Click handler */
|
|
160
|
+
onClick?: () => void;
|
|
161
|
+
/** Loading state */
|
|
162
|
+
loading?: boolean;
|
|
163
|
+
/** Success callback */
|
|
164
|
+
onSuccess?: (user: User) => void;
|
|
165
|
+
/** Error callback */
|
|
166
|
+
onError?: (error: string) => void;
|
|
167
|
+
}
|
|
168
|
+
export interface PasskeymeUserProfileProps {
|
|
169
|
+
/** Show user avatar */
|
|
170
|
+
showAvatar?: boolean;
|
|
171
|
+
/** Show user name */
|
|
172
|
+
showName?: boolean;
|
|
173
|
+
/** Show user email */
|
|
174
|
+
showEmail?: boolean;
|
|
175
|
+
/** Show logout button */
|
|
176
|
+
showLogout?: boolean;
|
|
177
|
+
/** Custom CSS classes */
|
|
178
|
+
className?: string;
|
|
179
|
+
/** Avatar size */
|
|
180
|
+
avatarSize?: number;
|
|
181
|
+
/** Custom logout text */
|
|
182
|
+
logoutText?: string;
|
|
183
|
+
/** Logout callback */
|
|
184
|
+
onLogout?: () => void;
|
|
185
|
+
}
|
|
186
|
+
export interface PasskeymeProtectedRouteProps {
|
|
187
|
+
/** Children to render when authenticated */
|
|
188
|
+
children: ReactNode;
|
|
189
|
+
/** Fallback component when not authenticated */
|
|
190
|
+
fallback?: ReactNode;
|
|
191
|
+
/** Redirect URL when not authenticated */
|
|
192
|
+
redirectTo?: string;
|
|
193
|
+
/** Required roles for access */
|
|
194
|
+
requiredRoles?: string[];
|
|
195
|
+
/** Custom access check function */
|
|
196
|
+
hasAccess?: (user: User) => boolean;
|
|
197
|
+
}
|
|
198
|
+
export interface PasskeymeCallbackHandlerProps {
|
|
199
|
+
/** Custom loading component to show during token processing */
|
|
200
|
+
loadingComponent?: React.ComponentType;
|
|
201
|
+
/** Custom error component to show if callback fails */
|
|
202
|
+
errorComponent?: React.ComponentType<{
|
|
203
|
+
error: string;
|
|
204
|
+
onRetry: () => void;
|
|
205
|
+
}>;
|
|
206
|
+
/** Redirect path after successful authentication */
|
|
207
|
+
successRedirect?: string;
|
|
208
|
+
/** Redirect path after authentication error */
|
|
209
|
+
errorRedirect?: string;
|
|
210
|
+
/** Custom callback for successful authentication */
|
|
211
|
+
onSuccess?: (user: any, token: string) => void;
|
|
212
|
+
/** Custom callback for authentication errors */
|
|
213
|
+
onError?: (error: string) => void;
|
|
214
|
+
/** Passkey registration options */
|
|
215
|
+
passkey?: {
|
|
216
|
+
/** Whether to prompt for passkey registration after successful auth (overrides global config) */
|
|
217
|
+
promptRegistration?: boolean;
|
|
218
|
+
/** Your PasskeyMe API key for WebAuthn operations */
|
|
219
|
+
apiKey?: string;
|
|
220
|
+
/** Custom passkey registration prompt component */
|
|
221
|
+
registrationPrompt?: React.ComponentType<{
|
|
222
|
+
user: any;
|
|
223
|
+
onRegister: () => Promise<void>;
|
|
224
|
+
onSkip: () => void;
|
|
225
|
+
loading: boolean;
|
|
226
|
+
}>;
|
|
227
|
+
/** Callback when passkey registration completes */
|
|
228
|
+
onRegistrationComplete?: (success: boolean, error?: string) => void;
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
export interface TriggerPasskeymeAuthOptions {
|
|
232
|
+
/** Username for passkey authentication (optional - will attempt discoverable credential first) */
|
|
233
|
+
username?: string;
|
|
234
|
+
/** API key for passkey operations (optional - will use from config) */
|
|
235
|
+
apiKey?: string;
|
|
236
|
+
/** Authentication mode: 'hosted' (redirect to hosted pages) or 'inline' (developer handles OAuth UI) */
|
|
237
|
+
mode?: "hosted" | "inline";
|
|
238
|
+
/** Callback when authentication succeeds (optional - default shows success notification) */
|
|
239
|
+
onSuccess?: (user: User, method: "passkey" | "oauth") => void;
|
|
240
|
+
/** Callback when authentication fails (optional - default shows error notification) */
|
|
241
|
+
onError?: (error: string) => void;
|
|
242
|
+
/** Callback when OAuth is required in inline mode (provides available providers) */
|
|
243
|
+
onOAuthRequired?: (providers: string[]) => void;
|
|
244
|
+
/** Whether to show default notifications (default: true) */
|
|
245
|
+
showNotifications?: boolean;
|
|
246
|
+
/** Force passkey-only authentication, skip OAuth fallback (default: false) */
|
|
247
|
+
forcePasskeyOnly?: boolean;
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics and Monitoring utilities for PasskeyMe React SDK
|
|
3
|
+
* Provides error boundaries, usage analytics, and performance monitoring
|
|
4
|
+
*/
|
|
5
|
+
import React, { Component, ReactNode } from "react";
|
|
6
|
+
import { PasskeymeError } from "@passkeyme/auth";
|
|
7
|
+
export interface AnalyticsEvent {
|
|
8
|
+
type: string;
|
|
9
|
+
category: string;
|
|
10
|
+
data?: Record<string, any>;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
userId?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface PerformanceMetric {
|
|
16
|
+
name: string;
|
|
17
|
+
value: number;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
category: "auth" | "component" | "api" | "user";
|
|
20
|
+
metadata?: Record<string, any>;
|
|
21
|
+
}
|
|
22
|
+
export interface ErrorReport {
|
|
23
|
+
error: Error | PasskeymeError;
|
|
24
|
+
errorBoundary?: string;
|
|
25
|
+
componentStack?: string;
|
|
26
|
+
userId?: string;
|
|
27
|
+
sessionId: string;
|
|
28
|
+
timestamp: number;
|
|
29
|
+
metadata?: Record<string, any>;
|
|
30
|
+
}
|
|
31
|
+
export interface AnalyticsConfig {
|
|
32
|
+
enabled?: boolean;
|
|
33
|
+
apiEndpoint?: string;
|
|
34
|
+
apiKey?: string;
|
|
35
|
+
sessionDuration?: number;
|
|
36
|
+
batchSize?: number;
|
|
37
|
+
flushInterval?: number;
|
|
38
|
+
enablePerformanceMetrics?: boolean;
|
|
39
|
+
enableErrorReporting?: boolean;
|
|
40
|
+
enableUsageAnalytics?: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Analytics Context
|
|
44
|
+
*/
|
|
45
|
+
interface AnalyticsContextType {
|
|
46
|
+
trackEvent: (event: Omit<AnalyticsEvent, "timestamp" | "sessionId">) => void;
|
|
47
|
+
trackPerformance: (metric: Omit<PerformanceMetric, "timestamp">) => void;
|
|
48
|
+
reportError: (report: Omit<ErrorReport, "timestamp" | "sessionId">) => void;
|
|
49
|
+
config: AnalyticsConfig;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Analytics Provider
|
|
53
|
+
*/
|
|
54
|
+
export interface AnalyticsProviderProps {
|
|
55
|
+
children: ReactNode;
|
|
56
|
+
config: AnalyticsConfig;
|
|
57
|
+
userId?: string;
|
|
58
|
+
}
|
|
59
|
+
export declare const AnalyticsProvider: ({ children, config, userId, }: AnalyticsProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
/**
|
|
61
|
+
* Hook to use analytics
|
|
62
|
+
*/
|
|
63
|
+
export declare const useAnalytics: () => AnalyticsContextType;
|
|
64
|
+
/**
|
|
65
|
+
* Error Boundary with Analytics Reporting
|
|
66
|
+
*/
|
|
67
|
+
interface ErrorBoundaryState {
|
|
68
|
+
hasError: boolean;
|
|
69
|
+
error?: Error;
|
|
70
|
+
errorInfo?: React.ErrorInfo;
|
|
71
|
+
}
|
|
72
|
+
export interface PasskeymeErrorBoundaryProps {
|
|
73
|
+
children: ReactNode;
|
|
74
|
+
fallback?: ReactNode;
|
|
75
|
+
onError?: (error: Error, errorInfo: React.ErrorInfo) => void;
|
|
76
|
+
name?: string;
|
|
77
|
+
}
|
|
78
|
+
export declare class PasskeymeErrorBoundary extends Component<PasskeymeErrorBoundaryProps, ErrorBoundaryState> {
|
|
79
|
+
constructor(props: PasskeymeErrorBoundaryProps);
|
|
80
|
+
static getDerivedStateFromError(error: Error): ErrorBoundaryState;
|
|
81
|
+
componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
|
|
82
|
+
render(): string | number | boolean | Iterable<React.ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* HOC to wrap components with error boundary
|
|
86
|
+
*/
|
|
87
|
+
export declare const withErrorBoundary: <P extends object>(Component: React.ComponentType<P>, errorBoundaryProps?: Omit<PasskeymeErrorBoundaryProps, "children">) => {
|
|
88
|
+
(props: P): import("react/jsx-runtime").JSX.Element;
|
|
89
|
+
displayName: string;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Usage analytics helpers
|
|
93
|
+
*/
|
|
94
|
+
export declare const createUsageTracker: () => {
|
|
95
|
+
trackButtonClick: (buttonType: string, metadata?: Record<string, any>) => void;
|
|
96
|
+
trackAuthAttempt: (method: "passkey" | "oauth", provider?: string) => void;
|
|
97
|
+
trackAuthSuccess: (method: "passkey" | "oauth", provider?: string, duration?: number) => void;
|
|
98
|
+
trackAuthFailure: (method: "passkey" | "oauth", error: string, provider?: string) => void;
|
|
99
|
+
trackPageView: (page: string, metadata?: Record<string, any>) => void;
|
|
100
|
+
trackFeatureUsage: (feature: string, metadata?: Record<string, any>) => void;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Performance monitoring helpers
|
|
104
|
+
*/
|
|
105
|
+
export declare const createPerformanceTracker: () => {
|
|
106
|
+
trackAPICall: (endpoint: string, duration: number, success: boolean) => void;
|
|
107
|
+
trackComponentRender: (componentName: string, duration: number) => void;
|
|
108
|
+
trackAuthFlow: (flow: string, duration: number, success: boolean) => void;
|
|
109
|
+
trackBundleSize: (bundleName: string, size: number) => void;
|
|
110
|
+
};
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/utils/analytics.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug utilities for PasskeyMe React SDK
|
|
3
|
+
*/
|
|
4
|
+
import type { PasskeymeConfig } from "@passkeyme/auth";
|
|
5
|
+
/**
|
|
6
|
+
* Debug utility to conditionally log messages
|
|
7
|
+
*/
|
|
8
|
+
export declare function debugLog(config: PasskeymeConfig, component: string, ...args: any[]): void;
|
|
9
|
+
//# sourceMappingURL=debug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD;;GAEG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,EACjB,GAAG,IAAI,EAAE,GAAG,EAAE,QAQf"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Development utilities for PasskeyMe React SDK
|
|
3
|
+
* These utilities are only active in development mode
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
/**
|
|
7
|
+
* Development warning system
|
|
8
|
+
*/
|
|
9
|
+
export declare const devWarn: (condition: boolean, message: string, ...args: any[]) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Development error system
|
|
12
|
+
*/
|
|
13
|
+
export declare const devError: (condition: boolean, message: string, ...args: any[]) => void;
|
|
14
|
+
/**
|
|
15
|
+
* Component prop validation helper
|
|
16
|
+
*/
|
|
17
|
+
export declare const validateProps: <T extends Record<string, any>>(componentName: string, props: T, validators: Partial<Record<keyof T, (value: any) => boolean | string>>) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Hot reload and development tools initialization
|
|
20
|
+
*/
|
|
21
|
+
export declare const initDevTools: () => void;
|
|
22
|
+
/**
|
|
23
|
+
* Development component wrapper with debugging
|
|
24
|
+
*/
|
|
25
|
+
export declare const withDevTools: <P extends object>(Component: React.ComponentType<P>, displayName?: string) => React.ComponentType<P> | {
|
|
26
|
+
(props: P): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
displayName: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Enhanced hot reload helper with React Fast Refresh support
|
|
31
|
+
*/
|
|
32
|
+
export declare const enableHotReload: (component: React.ComponentType, moduleRef?: any) => React.ComponentType<{}> | {
|
|
33
|
+
(props: any): React.ReactElement<{}, string | React.JSXElementConstructor<any>>;
|
|
34
|
+
displayName: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Development debug panel component
|
|
38
|
+
*/
|
|
39
|
+
interface DebugPanelProps {
|
|
40
|
+
data: Record<string, any>;
|
|
41
|
+
position?: "top-left" | "top-right" | "bottom-left" | "bottom-right";
|
|
42
|
+
}
|
|
43
|
+
export declare const DebugPanel: ({ data, position, }: DebugPanelProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
44
|
+
/**
|
|
45
|
+
* Component performance profiler for development
|
|
46
|
+
*/
|
|
47
|
+
export declare const withPerformanceProfiler: <P extends Record<string, any>>(Component: React.ComponentType<P>, componentName?: string) => React.ComponentType<P> | React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<any>>;
|
|
48
|
+
/**
|
|
49
|
+
* Development-only component tree logger
|
|
50
|
+
*/
|
|
51
|
+
export declare const logComponentTree: (componentName: string, props: any, children?: React.ReactNode) => void;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=devUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devUtils.d.ts","sourceRoot":"","sources":["../../src/utils/devUtils.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,eAAO,MAAM,OAAO,cACP,OAAO,WACT,MAAM,WACN,GAAG,EAAE,SAKf,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,cACR,OAAO,WACT,MAAM,WACN,GAAG,EAAE,SAKf,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,iDACT,MAAM,SACd,CAAC,cACI,QAAQ,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,GAAG,MAAM,CAAC,CAAC,SAoBvE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,YA0CxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,gCACZ,MAAM,aAAa,CAAC,CAAC,CAAC,gBACnB,MAAM;YAMa,CAAC;;CAqCnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,cACf,MAAM,aAAa,cAClB,GAAG;YAMoB,GAAG;;CAWvC,CAAC;AAEF;;GAEG;AACH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;CACtE;AAED,eAAO,MAAM,UAAU,wBAGpB,eAAe,mDAoCjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,6CACvB,MAAM,aAAa,CAAC,CAAC,CAAC,kBACjB,MAAM,kHAwCvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,kBACZ,MAAM,SACd,GAAG,aACC,MAAM,SAAS,SAU3B,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Button Styles Utility
|
|
3
|
+
* Extracted from PasskeyLoginButton component
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
export type ButtonVariant = "primary" | "secondary" | "outline";
|
|
7
|
+
export type ButtonSize = "small" | "medium" | "large";
|
|
8
|
+
export interface ButtonStyleOptions {
|
|
9
|
+
variant?: ButtonVariant;
|
|
10
|
+
size?: ButtonSize;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
loading?: boolean;
|
|
13
|
+
fullWidth?: boolean;
|
|
14
|
+
theme?: "light" | "dark" | "auto";
|
|
15
|
+
}
|
|
16
|
+
export interface ButtonStyles {
|
|
17
|
+
base: React.CSSProperties;
|
|
18
|
+
size: React.CSSProperties;
|
|
19
|
+
variant: React.CSSProperties;
|
|
20
|
+
state: React.CSSProperties;
|
|
21
|
+
combined: React.CSSProperties;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Enhanced button styling system with comprehensive variants and sizes
|
|
25
|
+
*/
|
|
26
|
+
export declare function getEnhancedButtonStyles(options?: ButtonStyleOptions): ButtonStyles;
|
|
27
|
+
/**
|
|
28
|
+
* Get loading spinner styles for buttons
|
|
29
|
+
*/
|
|
30
|
+
export declare function getLoadingSpinnerStyles(size: ButtonSize): React.CSSProperties;
|
|
31
|
+
/**
|
|
32
|
+
* Get icon styles for buttons
|
|
33
|
+
*/
|
|
34
|
+
export declare function getButtonIconStyles(size: ButtonSize): React.CSSProperties;
|
|
35
|
+
/**
|
|
36
|
+
* CSS keyframes for loading spinner (to be added to global styles)
|
|
37
|
+
*/
|
|
38
|
+
export declare const spinnerKeyframes = "\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n";
|
|
39
|
+
/**
|
|
40
|
+
* Default button style presets
|
|
41
|
+
*/
|
|
42
|
+
export declare const buttonPresets: {
|
|
43
|
+
readonly primary: {
|
|
44
|
+
readonly variant: "primary";
|
|
45
|
+
readonly size: "medium";
|
|
46
|
+
};
|
|
47
|
+
readonly secondary: {
|
|
48
|
+
readonly variant: "secondary";
|
|
49
|
+
readonly size: "medium";
|
|
50
|
+
};
|
|
51
|
+
readonly outline: {
|
|
52
|
+
readonly variant: "outline";
|
|
53
|
+
readonly size: "medium";
|
|
54
|
+
};
|
|
55
|
+
readonly small: {
|
|
56
|
+
readonly variant: "primary";
|
|
57
|
+
readonly size: "small";
|
|
58
|
+
};
|
|
59
|
+
readonly large: {
|
|
60
|
+
readonly variant: "primary";
|
|
61
|
+
readonly size: "large";
|
|
62
|
+
};
|
|
63
|
+
readonly fullWidth: {
|
|
64
|
+
readonly variant: "primary";
|
|
65
|
+
readonly size: "medium";
|
|
66
|
+
readonly fullWidth: true;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
export default getEnhancedButtonStyles;
|
|
70
|
+
//# sourceMappingURL=enhancedButtonStyles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancedButtonStyles.d.ts","sourceRoot":"","sources":["../../src/utils/enhancedButtonStyles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;IAC1B,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;IAC1B,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,kBAAuB,GAC/B,YAAY,CAyId;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC,aAAa,CAe7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC,aAAa,CAczE;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,uGAK5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;CAWhB,CAAC;AAEX,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import optimization utility for PasskeyMe React SDK
|
|
3
|
+
* Analyzes and optimizes bundle imports to reduce bundle size
|
|
4
|
+
*
|
|
5
|
+
* Note: This utility is intended for build-time analysis in Node.js environments only.
|
|
6
|
+
* It should not be imported in browser/client-side code.
|
|
7
|
+
*/
|
|
8
|
+
export interface ImportAnalysis {
|
|
9
|
+
file: string;
|
|
10
|
+
imports: {
|
|
11
|
+
module: string;
|
|
12
|
+
imports: string[];
|
|
13
|
+
isDefaultImport: boolean;
|
|
14
|
+
isNamespaceImport: boolean;
|
|
15
|
+
}[];
|
|
16
|
+
size: number;
|
|
17
|
+
treeshakable: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface OptimizationSuggestion {
|
|
20
|
+
file: string;
|
|
21
|
+
issue: string;
|
|
22
|
+
suggestion: string;
|
|
23
|
+
impact: "high" | "medium" | "low";
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Import analyzer class
|
|
27
|
+
*/
|
|
28
|
+
export declare class ImportAnalyzer {
|
|
29
|
+
private srcDir;
|
|
30
|
+
constructor(srcDir: string);
|
|
31
|
+
/**
|
|
32
|
+
* Analyze all imports in the source directory
|
|
33
|
+
* Note: This method only works in Node.js environments
|
|
34
|
+
*/
|
|
35
|
+
analyzeImports(): Promise<ImportAnalysis[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Generate optimization suggestions
|
|
38
|
+
*/
|
|
39
|
+
generateSuggestions(analyses: ImportAnalysis[]): OptimizationSuggestion[];
|
|
40
|
+
private getTypeScriptFiles;
|
|
41
|
+
private analyzeFile;
|
|
42
|
+
private extractImports;
|
|
43
|
+
private extractNamedImports;
|
|
44
|
+
private isTreeshakable;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Bundle size optimizer
|
|
48
|
+
*/
|
|
49
|
+
export declare class BundleOptimizer {
|
|
50
|
+
/**
|
|
51
|
+
* Optimize imports in a file
|
|
52
|
+
*/
|
|
53
|
+
static optimizeFile(filePath: string): string;
|
|
54
|
+
private static optimizeBarrelImports;
|
|
55
|
+
/**
|
|
56
|
+
* Remove unused dependencies from package.json
|
|
57
|
+
*/
|
|
58
|
+
static analyzeUnusedDependencies(packageJsonPath: string, srcDir: string): Promise<string[]>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Runtime dependency checker
|
|
62
|
+
*/
|
|
63
|
+
export declare const checkRuntimeDependencies: () => string[];
|
|
64
|
+
/**
|
|
65
|
+
* Generate optimization report
|
|
66
|
+
* Note: This function only works in Node.js environments
|
|
67
|
+
*/
|
|
68
|
+
export declare const generateOptimizationReport: (srcDir: string) => Promise<{
|
|
69
|
+
summary: {
|
|
70
|
+
totalFiles: number;
|
|
71
|
+
totalImports: number;
|
|
72
|
+
treeshakableFiles: number;
|
|
73
|
+
suggestions: number;
|
|
74
|
+
};
|
|
75
|
+
suggestions: OptimizationSuggestion[];
|
|
76
|
+
runtimeIssues: string[];
|
|
77
|
+
analyses: ImportAnalysis[];
|
|
78
|
+
}>;
|
|
79
|
+
//# sourceMappingURL=importOptimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importOptimizer.d.ts","sourceRoot":"","sources":["../../src/utils/importOptimizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,eAAe,EAAE,OAAO,CAAC;QACzB,iBAAiB,EAAE,OAAO,CAAC;KAC5B,EAAE,CAAC;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAI1B;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAmBjD;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,sBAAsB,EAAE;IAkEzE,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,cAAc;CAWvB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAgB7C,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAMpC;;OAEG;WACU,yBAAyB,CACpC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC;CA8BrB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,gBAyBpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,WAAkB,MAAM;;;;;;;;;;EA6B9D,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Loading States for PasskeyMe SDK
|
|
3
|
+
* Provides granular loading feedback for better user experience
|
|
4
|
+
*/
|
|
5
|
+
export type PasskeymeLoadingState = "idle" | "initializing" | "checking-passkey-support" | "starting-passkey-auth" | "waiting-for-passkey" | "processing-passkey" | "fallback-to-oauth" | "redirecting-to-hosted" | "loading-oauth-providers" | "completing-auth" | "storing-tokens" | "success" | "error";
|
|
6
|
+
export interface PasskeymeLoadingStateInfo {
|
|
7
|
+
state: PasskeymeLoadingState;
|
|
8
|
+
message: string;
|
|
9
|
+
progress?: number;
|
|
10
|
+
duration?: number;
|
|
11
|
+
showSpinner?: boolean;
|
|
12
|
+
showProgress?: boolean;
|
|
13
|
+
icon?: string;
|
|
14
|
+
userAction?: "required" | "wait" | "none";
|
|
15
|
+
userActionText?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const LOADING_STATE_INFO: Record<PasskeymeLoadingState, PasskeymeLoadingStateInfo>;
|
|
18
|
+
export declare class LoadingStateManager {
|
|
19
|
+
private currentState;
|
|
20
|
+
private listeners;
|
|
21
|
+
private timeouts;
|
|
22
|
+
private startTime;
|
|
23
|
+
subscribe(listener: (state: PasskeymeLoadingStateInfo) => void): () => void;
|
|
24
|
+
setState(state: PasskeymeLoadingState, customMessage?: string): void;
|
|
25
|
+
getCurrentState(): PasskeymeLoadingState;
|
|
26
|
+
getElapsedTime(): number;
|
|
27
|
+
reset(): void;
|
|
28
|
+
private scheduleAutoAdvance;
|
|
29
|
+
private shouldAutoAdvance;
|
|
30
|
+
private advanceToNextState;
|
|
31
|
+
private clearTimeout;
|
|
32
|
+
private clearAllTimeouts;
|
|
33
|
+
}
|
|
34
|
+
export declare const globalLoadingStateManager: LoadingStateManager;
|
|
35
|
+
//# sourceMappingURL=loadingStates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadingStates.d.ts","sourceRoot":"","sources":["../../src/utils/loadingStates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,cAAc,GACd,0BAA0B,GAC1B,uBAAuB,GACvB,qBAAqB,GACrB,oBAAoB,GACpB,mBAAmB,GACnB,uBAAuB,GACvB,yBAAyB,GACzB,iBAAiB,GACjB,gBAAgB,GAChB,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CACrC,qBAAqB,EACrB,yBAAyB,CAkI1B,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,SAAS,CACL;IACZ,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,SAAS,CAAa;IAEvB,SAAS,CACd,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,GACnD,MAAM,IAAI;IAKN,QAAQ,CAAC,KAAK,EAAE,qBAAqB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAmBpE,eAAe,IAAI,qBAAqB;IAIxC,cAAc,IAAI,MAAM;IAIxB,KAAK,IAAI,IAAI;IAMpB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,gBAAgB;CAIzB;AAGD,eAAO,MAAM,yBAAyB,qBAA4B,CAAC"}
|