@authon/react 0.3.2 → 0.7.15

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/AuthonProvider.tsx","../src/useAuthon.ts","../src/useUser.ts","../src/components/SignIn.tsx","../src/hooks/useBranding.ts","../src/components/shared/ThemeProvider.tsx","../src/components/shared/Input.tsx","../src/components/shared/Button.tsx","../src/components/shared/Divider.tsx","../src/components/SignUp.tsx","../src/components/UserButton.tsx","../src/SignedIn.tsx","../src/SignedOut.tsx","../src/Protect.tsx","../src/SocialButton.tsx","../src/SocialButtons.tsx","../src/useAuthonMfa.ts","../src/useAuthonPasskeys.ts","../src/useAuthonPasswordless.ts","../src/useAuthonWeb3.ts","../src/useAuthonSessions.ts","../src/useOrganization.ts","../src/useOrganizationList.ts","../src/components/UserProfile.tsx","../src/components/shared/ProviderIcon.tsx"],"sourcesContent":["export { AuthonProvider } from './AuthonProvider';\nexport type { AuthonContextValue } from './AuthonProvider';\nexport { useAuthon } from './useAuthon';\nexport { useUser } from './useUser';\nexport { SignIn } from './SignIn';\nexport { SignUp } from './SignUp';\nexport { UserButton } from './UserButton';\nexport { SignedIn } from './SignedIn';\nexport { SignedOut } from './SignedOut';\nexport { Protect } from './Protect';\nexport { SocialButton } from './SocialButton';\nexport type { SocialButtonProps } from './SocialButton';\nexport { SocialButtons } from './SocialButtons';\nexport type { SocialButtonsProps } from './SocialButtons';\nexport { useAuthonMfa } from './useAuthonMfa';\nexport type { UseAuthonMfaReturn } from './useAuthonMfa';\nexport { useAuthonPasskeys } from './useAuthonPasskeys';\nexport type { UseAuthonPasskeysReturn } from './useAuthonPasskeys';\nexport { useAuthonPasswordless } from './useAuthonPasswordless';\nexport type { UseAuthonPasswordlessReturn } from './useAuthonPasswordless';\nexport { useAuthonWeb3 } from './useAuthonWeb3';\nexport type { UseAuthonWeb3Return, LinkWalletParams } from './useAuthonWeb3';\nexport { useAuthonSessions } from './useAuthonSessions';\nexport type { UseAuthonSessionsReturn } from './useAuthonSessions';\nexport { useOrganization } from './useOrganization';\nexport type { UseOrganizationReturn } from './useOrganization';\nexport { useOrganizationList } from './useOrganizationList';\nexport type { UseOrganizationListReturn } from './useOrganizationList';\nexport { useBranding } from './hooks/useBranding';\nexport type { BrandingState } from './hooks/useBranding';\nexport type { SignInProps } from './components/SignIn';\nexport type { SignUpProps } from './components/SignUp';\nexport type { UserButtonProps } from './components/UserButton';\nexport { UserProfile } from './components/UserProfile';\nexport type { UserProfileProps } from './components/UserProfile';\nexport { ThemeProvider } from './components/shared/ThemeProvider';\nexport { Button } from './components/shared/Button';\nexport type { ButtonProps, ButtonVariant, ButtonSize } from './components/shared/Button';\nexport { Input } from './components/shared/Input';\nexport type { InputProps } from './components/shared/Input';\nexport { Divider } from './components/shared/Divider';\nexport { ProviderIcon } from './components/shared/ProviderIcon';\n","import { createContext, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { Authon } from '@authon/js';\nimport type { AuthonConfig } from '@authon/js';\nimport type { AuthonUser, AuthonOrganization } from '@authon/shared';\n\nexport interface AuthonContextValue {\n isSignedIn: boolean;\n isLoading: boolean;\n user: AuthonUser | null;\n activeOrganization: AuthonOrganization | null;\n setActiveOrganization: (org: AuthonOrganization | null) => void;\n signOut: () => Promise<void>;\n openSignIn: () => Promise<void>;\n openSignUp: () => Promise<void>;\n getToken: () => string | null;\n client: Authon | null;\n}\n\nexport const AuthonContext = createContext<AuthonContextValue | null>(null);\n\ninterface AuthonProviderProps {\n publishableKey: string;\n children: ReactNode;\n config?: Omit<AuthonConfig, 'mode'>;\n}\n\nexport function AuthonProvider({ publishableKey, children, config }: AuthonProviderProps) {\n const [user, setUser] = useState<AuthonUser | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [activeOrganization, setActiveOrganization] = useState<AuthonOrganization | null>(null);\n const clientRef = useRef<Authon | null>(null);\n\n useEffect(() => {\n const client = new Authon(publishableKey, config);\n clientRef.current = client;\n\n client.on('signedIn', (u) => {\n setUser(u as AuthonUser);\n setIsLoading(false);\n });\n\n client.on('signedOut', () => {\n setUser(null);\n });\n\n client.on('error', () => {\n setIsLoading(false);\n });\n\n const existingUser = client.getUser();\n if (existingUser) {\n setUser(existingUser);\n }\n setIsLoading(false);\n\n return () => {\n client.destroy();\n clientRef.current = null;\n };\n }, [publishableKey]);\n\n const signOut = useCallback(async () => {\n await clientRef.current?.signOut();\n setUser(null);\n setActiveOrganization(null);\n }, []);\n\n const openSignIn = useCallback(async () => {\n await clientRef.current?.openSignIn();\n }, []);\n\n const openSignUp = useCallback(async () => {\n await clientRef.current?.openSignUp();\n }, []);\n\n const getToken = useCallback(() => {\n return clientRef.current?.getToken() ?? null;\n }, []);\n\n const value = useMemo<AuthonContextValue>(\n () => ({\n isSignedIn: !!user,\n isLoading,\n user,\n activeOrganization,\n setActiveOrganization,\n signOut,\n openSignIn,\n openSignUp,\n getToken,\n client: clientRef.current,\n }),\n [user, isLoading, activeOrganization, signOut, openSignIn, openSignUp, getToken],\n );\n\n return <AuthonContext.Provider value={value}>{children}</AuthonContext.Provider>;\n}\n","import { useContext } from 'react';\nimport { AuthonContext } from './AuthonProvider';\nimport type { AuthonContextValue } from './AuthonProvider';\n\nexport function useAuthon(): AuthonContextValue {\n const ctx = useContext(AuthonContext);\n if (!ctx) {\n throw new Error('useAuthon must be used within an <AuthonProvider>');\n }\n return ctx;\n}\n","import type { AuthonUser } from '@authon/shared';\nimport { useAuthon } from './useAuthon';\n\nexport function useUser(): { user: AuthonUser | null; isLoading: boolean } {\n const { user, isLoading } = useAuthon();\n return { user, isLoading };\n}\n","import { useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { BrandingConfig, OAuthProviderType } from '@authon/shared';\nimport { PROVIDER_COLORS, PROVIDER_DISPLAY_NAMES } from '@authon/shared';\nimport { getProviderButtonConfig } from '@authon/js';\nimport { useAuthon } from '../useAuthon';\nimport { useBranding } from '../hooks/useBranding';\nimport { ThemeProvider, useTheme } from './shared/ThemeProvider';\nimport { Input } from './shared/Input';\nimport { Button } from './shared/Button';\nimport { Divider } from './shared/Divider';\n\nexport interface SignInProps {\n appearance?: { variables?: Partial<BrandingConfig> };\n afterSignInUrl?: string;\n onSignIn?: () => void;\n onNavigateSignUp?: () => void;\n}\n\nfunction SignInCard({ afterSignInUrl, onSignIn, onNavigateSignUp }: Omit<SignInProps, 'appearance'>) {\n const theme = useTheme();\n const { client } = useAuthon();\n const { branding, providers, isLoaded } = useBranding();\n\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [loading, setLoading] = useState(false);\n const [oauthLoading, setOauthLoading] = useState<string | null>(null);\n const [error, setError] = useState('');\n const [fieldErrors, setFieldErrors] = useState<{ email?: string; password?: string }>({});\n\n const validate = () => {\n const errs: typeof fieldErrors = {};\n if (!email.trim()) errs.email = 'Email is required';\n else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) errs.email = 'Invalid email address';\n if (!password) errs.password = 'Password is required';\n setFieldErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const handleSubmit = async () => {\n if (!validate() || !client) return;\n setLoading(true);\n setError('');\n try {\n await client.signInWithEmail(email, password);\n if (afterSignInUrl) window.location.assign(afterSignInUrl);\n onSignIn?.();\n } catch (e: any) {\n setError(e?.message ?? 'Sign in failed');\n } finally {\n setLoading(false);\n }\n };\n\n const handleOAuth = async (provider: OAuthProviderType) => {\n if (!client) return;\n setOauthLoading(provider);\n setError('');\n try {\n await client.signInWithOAuth(provider);\n } catch (e: any) {\n setError(e?.message ?? 'OAuth sign in failed');\n } finally {\n setOauthLoading(null);\n }\n };\n\n const cardStyle: CSSProperties = {\n width: '100%',\n maxWidth: 440,\n background: theme.bg,\n borderRadius: `calc(${theme.borderRadius} + 4px)`,\n boxShadow: '0 4px 32px rgba(0,0,0,0.10)',\n padding: '40px 36px 32px',\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n gap: 20,\n fontFamily: theme.fontFamily,\n };\n\n const logoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 10,\n };\n\n const titleStyle: CSSProperties = {\n fontSize: 24,\n fontWeight: 700,\n color: theme.text,\n textAlign: 'center',\n letterSpacing: '-0.3px',\n };\n\n const subtitleStyle: CSSProperties = {\n fontSize: 14,\n color: theme.textMuted,\n textAlign: 'center',\n marginTop: -12,\n };\n\n const errorBoxStyle: CSSProperties = {\n padding: '10px 14px',\n borderRadius: theme.borderRadius,\n background: '#fef2f2',\n border: '1px solid #fecaca',\n color: '#dc2626',\n fontSize: 13,\n };\n\n const forgotStyle: CSSProperties = {\n textAlign: 'right',\n marginTop: -12,\n };\n\n const linkStyle: CSSProperties = {\n fontSize: 13,\n color: theme.primaryStart,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n fontFamily: theme.fontFamily,\n textDecoration: 'none',\n };\n\n const footerStyle: CSSProperties = {\n textAlign: 'center',\n fontSize: 14,\n color: theme.textMuted,\n paddingTop: 4,\n };\n\n const eyeIconPath = showPassword\n ? 'M17.94 17.94A10.07 10.07 0 0112 20c-7 0-11-8-11-8a18.45 18.45 0 015.06-5.94M9.9 4.24A9.12 9.12 0 0112 4c7 0 11 8 11 8a18.5 18.5 0 01-2.16 3.19m-6.72-1.07a3 3 0 11-4.24-4.24 M1 1l22 22'\n : 'M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z M12 9a3 3 0 100 6 3 3 0 000-6z';\n\n const showEmailPw = branding.showEmailPassword !== false;\n const showDivider = branding.showDivider !== false && providers.length > 0 && showEmailPw;\n\n const providersToShow = providers.filter(\n (p) => !(branding.hiddenProviders ?? []).includes(p),\n );\n\n if (!isLoaded) {\n return (\n <div style={{ ...cardStyle, alignItems: 'center', justifyContent: 'center', minHeight: 200 }}>\n <span\n style={{\n width: 28,\n height: 28,\n border: `3px solid ${theme.primaryStart}33`,\n borderTopColor: theme.primaryStart,\n borderRadius: '50%',\n display: 'inline-block',\n animation: 'authon-spin 0.7s linear infinite',\n }}\n />\n </div>\n );\n }\n\n return (\n <div style={cardStyle}>\n <div style={logoStyle}>\n {branding.logoDataUrl && (\n <img src={branding.logoDataUrl} alt={branding.brandName ?? 'Logo'} style={{ height: 40, objectFit: 'contain' }} />\n )}\n <h1 style={titleStyle}>Sign in</h1>\n {branding.brandName && (\n <p style={subtitleStyle}>to {branding.brandName}</p>\n )}\n </div>\n\n {error && <div style={errorBoxStyle}>{error}</div>}\n\n {providersToShow.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n {providersToShow.length <= 3 ? (\n providersToShow.map((provider) => (\n <OAuthButton\n key={provider}\n provider={provider}\n loading={oauthLoading === provider}\n disabled={!!oauthLoading || loading}\n onClick={() => handleOAuth(provider)}\n borderRadius={theme.borderRadius}\n />\n ))\n ) : (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 10, justifyContent: 'center' }}>\n {providersToShow.map((provider) => (\n <CompactOAuthButton\n key={provider}\n provider={provider}\n loading={oauthLoading === provider}\n disabled={!!oauthLoading || loading}\n onClick={() => handleOAuth(provider)}\n borderRadius={theme.borderRadius}\n />\n ))}\n </div>\n )}\n </div>\n )}\n\n {showDivider && <Divider />}\n\n {showEmailPw && (\n <>\n <Input\n label=\"Email\"\n type=\"email\"\n placeholder=\"you@example.com\"\n value={email}\n onChange={setEmail}\n error={fieldErrors.email}\n autoComplete=\"email\"\n />\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n <Input\n label=\"Password\"\n type={showPassword ? 'text' : 'password'}\n placeholder=\"••••••••\"\n value={password}\n onChange={setPassword}\n error={fieldErrors.password}\n autoComplete=\"current-password\"\n rightElement={\n <button\n type=\"button\"\n onClick={() => setShowPassword((v) => !v)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', color: theme.textMuted }}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={eyeIconPath} />\n </svg>\n </button>\n }\n />\n <div style={forgotStyle}>\n <button type=\"button\" style={linkStyle}>Forgot password?</button>\n </div>\n </div>\n\n <Button\n variant=\"primary\"\n fullWidth\n loading={loading}\n disabled={!!oauthLoading}\n onClick={handleSubmit}\n >\n Sign in\n </Button>\n </>\n )}\n\n <div style={footerStyle}>\n Don't have an account?{' '}\n <button\n type=\"button\"\n style={linkStyle}\n onClick={onNavigateSignUp}\n >\n Sign up\n </button>\n </div>\n\n {branding.showSecuredBy !== false && (\n <SecuredByAuthon primaryStart={theme.primaryStart} textMuted={theme.textMuted} />\n )}\n\n {branding.termsUrl || branding.privacyUrl ? (\n <div style={{ textAlign: 'center', fontSize: 11, color: theme.textMuted, marginTop: -8 }}>\n {branding.termsUrl && (\n <a href={branding.termsUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: theme.textMuted }}>Terms</a>\n )}\n {branding.termsUrl && branding.privacyUrl && ' · '}\n {branding.privacyUrl && (\n <a href={branding.privacyUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: theme.textMuted }}>Privacy</a>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\ninterface OAuthButtonProps {\n provider: OAuthProviderType;\n loading: boolean;\n disabled: boolean;\n onClick: () => void;\n borderRadius: string;\n}\n\nfunction OAuthButton({ provider, loading, disabled, onClick, borderRadius }: OAuthButtonProps) {\n const [hovered, setHovered] = useState(false);\n const colors = PROVIDER_COLORS[provider] ?? { bg: '#333', text: '#fff' };\n const name = PROVIDER_DISPLAY_NAMES[provider] ?? provider;\n const config = getProviderButtonConfig(provider);\n const needsBorder = colors.bg.toLowerCase() === '#ffffff';\n\n const style: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n height: 44,\n paddingLeft: 16,\n paddingRight: 16,\n borderRadius,\n background: colors.bg,\n color: colors.text,\n border: needsBorder ? '1.5px solid #dadce0' : 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontSize: 15,\n fontWeight: 600,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n justifyContent: 'center',\n opacity: disabled ? 0.6 : hovered ? 0.88 : 1,\n transition: 'opacity 0.15s',\n boxSizing: 'border-box',\n };\n\n return (\n <button\n type=\"button\"\n style={style}\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-label={`Continue with ${name}`}\n >\n {loading ? (\n <span style={{ width: 18, height: 18, border: `2px solid ${colors.text}`, borderTopColor: 'transparent', borderRadius: '50%', display: 'inline-block', animation: 'authon-spin 0.6s linear infinite' }} />\n ) : (\n <>\n <span style={{ display: 'flex', alignItems: 'center' }} dangerouslySetInnerHTML={{ __html: config.iconSvg }} />\n <span>Continue with {name}</span>\n </>\n )}\n </button>\n );\n}\n\nfunction CompactOAuthButton({ provider, loading, disabled, onClick, borderRadius }: OAuthButtonProps) {\n const [hovered, setHovered] = useState(false);\n const colors = PROVIDER_COLORS[provider] ?? { bg: '#333', text: '#fff' };\n const name = PROVIDER_DISPLAY_NAMES[provider] ?? provider;\n const config = getProviderButtonConfig(provider);\n const needsBorder = colors.bg.toLowerCase() === '#ffffff';\n\n const style: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 48,\n height: 48,\n borderRadius,\n background: colors.bg,\n border: needsBorder ? '1.5px solid #dadce0' : 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : hovered ? 0.85 : 1,\n transition: 'opacity 0.15s',\n padding: 0,\n };\n\n return (\n <button\n type=\"button\"\n style={style}\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-label={`Continue with ${name}`}\n >\n {loading ? (\n <span style={{ width: 18, height: 18, border: `2px solid ${colors.text}`, borderTopColor: 'transparent', borderRadius: '50%', display: 'inline-block', animation: 'authon-spin 0.6s linear infinite' }} />\n ) : (\n <span style={{ display: 'flex' }} dangerouslySetInnerHTML={{ __html: config.iconSvg }} />\n )}\n </button>\n );\n}\n\nfunction SecuredByAuthon({ primaryStart, textMuted }: { primaryStart: string; textMuted: string }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 5, marginTop: -8 }}>\n <svg width=\"12\" height=\"14\" viewBox=\"0 0 12 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 0L0.5 2.5V6.5C0.5 9.7 2.9 12.7 6 13.5C9.1 12.7 11.5 9.7 11.5 6.5V2.5L6 0Z\" fill={primaryStart} opacity=\"0.85\"/>\n <path d=\"M4 7L5.5 8.5L8.5 5.5\" stroke=\"white\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n <span style={{ fontSize: 11, color: textMuted }}>\n Secured by{' '}\n <a href=\"https://authon.dev\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: primaryStart, textDecoration: 'none', fontWeight: 600 }}>\n Authon\n </a>\n </span>\n </div>\n );\n}\n\nexport function SignIn({ appearance, afterSignInUrl, onSignIn, onNavigateSignUp }: SignInProps) {\n const { branding, isLoaded } = useBranding();\n\n const effectiveBranding = isLoaded ? { ...branding, ...(appearance?.variables ?? {}) } : branding;\n\n return (\n <ThemeProvider branding={effectiveBranding} overrides={appearance?.variables} style={{ display: 'flex', justifyContent: 'center' }}>\n <style>{`@keyframes authon-spin { to { transform: rotate(360deg); } }`}</style>\n <SignInCard\n afterSignInUrl={afterSignInUrl}\n onSignIn={onSignIn}\n onNavigateSignUp={onNavigateSignUp}\n />\n </ThemeProvider>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { BrandingConfig, OAuthProviderType } from '@authon/shared';\nimport { DEFAULT_BRANDING } from '@authon/shared';\nimport { useAuthon } from '../useAuthon';\n\nexport interface BrandingState {\n branding: BrandingConfig;\n providers: OAuthProviderType[];\n isLoaded: boolean;\n}\n\nconst cache = new Map<string, BrandingState>();\n\nexport function useBranding(): BrandingState {\n const { client } = useAuthon();\n const [state, setState] = useState<BrandingState>(() => {\n const key = (client as any)?.publishableKey as string | undefined;\n return cache.get(key ?? '') ?? { branding: DEFAULT_BRANDING, providers: [], isLoaded: false };\n });\n const fetchedRef = useRef(false);\n\n const fetchBranding = useCallback(async () => {\n if (!client || fetchedRef.current) return;\n\n const key = (client as any).publishableKey as string;\n const cached = cache.get(key);\n if (cached) {\n setState(cached);\n return;\n }\n\n fetchedRef.current = true;\n try {\n const providers = await client.getProviders();\n const apiUrl: string = (client as any).config?.apiUrl ?? 'https://api.authon.dev';\n const res = await fetch(`${apiUrl}/v1/auth/branding`, {\n headers: { 'x-api-key': key },\n credentials: 'include',\n });\n let branding: BrandingConfig = DEFAULT_BRANDING;\n if (res.ok) {\n const data = await res.json();\n branding = { ...DEFAULT_BRANDING, ...data };\n }\n const next: BrandingState = { branding, providers, isLoaded: true };\n cache.set(key, next);\n setState(next);\n } catch {\n const fallback: BrandingState = { branding: DEFAULT_BRANDING, providers: [], isLoaded: true };\n setState(fallback);\n }\n }, [client]);\n\n useEffect(() => {\n fetchBranding();\n }, [fetchBranding]);\n\n return state;\n}\n","import { createContext, useContext, useMemo } from 'react';\nimport type { ReactNode, CSSProperties } from 'react';\nimport type { BrandingConfig } from '@authon/shared';\nimport { DEFAULT_BRANDING } from '@authon/shared';\n\ninterface ResolvedTheme {\n primaryStart: string;\n primaryEnd: string;\n bg: string;\n text: string;\n textMuted: string;\n border: string;\n borderRadius: string;\n fontFamily: string;\n inputStyle: 'outline' | 'filled';\n}\n\nconst ThemeContext = createContext<ResolvedTheme | null>(null);\n\nexport function useTheme(): ResolvedTheme {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n return resolveTheme(DEFAULT_BRANDING, false);\n }\n return ctx;\n}\n\nfunction resolveTheme(branding: BrandingConfig, _dark: boolean): ResolvedTheme {\n const radius = branding.borderRadius ?? DEFAULT_BRANDING.borderRadius ?? 12;\n return {\n primaryStart: branding.primaryColorStart ?? DEFAULT_BRANDING.primaryColorStart ?? '#7c3aed',\n primaryEnd: branding.primaryColorEnd ?? DEFAULT_BRANDING.primaryColorEnd ?? '#4f46e5',\n bg: branding.lightBg ?? DEFAULT_BRANDING.lightBg ?? '#ffffff',\n text: branding.lightText ?? DEFAULT_BRANDING.lightText ?? '#111827',\n textMuted: '#6b7280',\n border: '#e5e7eb',\n borderRadius: `${radius}px`,\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n inputStyle: 'outline',\n };\n}\n\ninterface ThemeProviderProps {\n branding: BrandingConfig;\n children: ReactNode;\n overrides?: Partial<BrandingConfig>;\n style?: CSSProperties;\n className?: string;\n}\n\nexport function ThemeProvider({ branding, children, overrides, style, className }: ThemeProviderProps) {\n const merged = useMemo(() => ({ ...branding, ...overrides }), [branding, overrides]);\n const theme = useMemo(() => resolveTheme(merged, false), [merged]);\n\n const cssVars = {\n '--authon-primary-start': theme.primaryStart,\n '--authon-primary-end': theme.primaryEnd,\n '--authon-bg': theme.bg,\n '--authon-text': theme.text,\n '--authon-text-muted': theme.textMuted,\n '--authon-border': theme.border,\n '--authon-radius': theme.borderRadius,\n '--authon-font': theme.fontFamily,\n } as CSSProperties;\n\n return (\n <ThemeContext.Provider value={theme}>\n <div\n className={className}\n style={{\n fontFamily: theme.fontFamily,\n color: theme.text,\n ...cssVars,\n ...style,\n }}\n >\n {children}\n </div>\n </ThemeContext.Provider>\n );\n}\n","import { useState } from 'react';\nimport type { CSSProperties, InputHTMLAttributes } from 'react';\nimport { useTheme } from './ThemeProvider';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n label?: string;\n error?: string;\n hint?: string;\n inputStyle?: 'outline' | 'filled';\n onChange?: (value: string) => void;\n rightElement?: React.ReactNode;\n}\n\nexport function Input({\n label,\n error,\n hint,\n inputStyle,\n onChange,\n rightElement,\n style: userStyle,\n ...rest\n}: InputProps) {\n const theme = useTheme();\n const [focused, setFocused] = useState(false);\n const resolvedStyle = inputStyle ?? theme.inputStyle;\n\n const wrapperStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n width: '100%',\n };\n\n const labelStyle: CSSProperties = {\n fontSize: 13,\n fontWeight: 500,\n color: error ? '#ef4444' : theme.text,\n };\n\n const inputContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n };\n\n const baseInputStyle: CSSProperties = {\n width: '100%',\n height: 44,\n paddingLeft: 14,\n paddingRight: rightElement ? 44 : 14,\n borderRadius: theme.borderRadius,\n fontFamily: theme.fontFamily,\n fontSize: 15,\n color: theme.text,\n outline: 'none',\n transition: 'border-color 0.15s, box-shadow 0.15s, background 0.15s',\n boxSizing: 'border-box',\n ...userStyle,\n };\n\n let inputVariantStyle: CSSProperties = {};\n if (resolvedStyle === 'filled') {\n inputVariantStyle = {\n background: focused ? `${theme.primaryStart}0d` : '#f3f4f6',\n border: `1.5px solid ${error ? '#ef4444' : focused ? theme.primaryStart : 'transparent'}`,\n boxShadow: focused && !error ? `0 0 0 3px ${theme.primaryStart}22` : 'none',\n };\n } else {\n inputVariantStyle = {\n background: theme.bg,\n border: `1.5px solid ${error ? '#ef4444' : focused ? theme.primaryStart : theme.border}`,\n boxShadow: focused && !error ? `0 0 0 3px ${theme.primaryStart}22` : 'none',\n };\n }\n\n const rightStyle: CSSProperties = {\n position: 'absolute',\n right: 12,\n display: 'flex',\n alignItems: 'center',\n color: theme.textMuted,\n };\n\n const hintStyle: CSSProperties = {\n fontSize: 12,\n color: error ? '#ef4444' : theme.textMuted,\n };\n\n return (\n <div style={wrapperStyle}>\n {label && <label style={labelStyle}>{label}</label>}\n <div style={inputContainerStyle}>\n <input\n {...rest}\n style={{ ...baseInputStyle, ...inputVariantStyle }}\n onFocus={(e) => {\n setFocused(true);\n rest.onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n rest.onBlur?.(e);\n }}\n onChange={(e) => onChange?.(e.target.value)}\n />\n {rightElement && <div style={rightStyle}>{rightElement}</div>}\n </div>\n {(error || hint) && <span style={hintStyle}>{error ?? hint}</span>}\n </div>\n );\n}\n","import { useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useTheme } from './ThemeProvider';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'social' | 'ghost';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n loading?: boolean;\n disabled?: boolean;\n children: ReactNode;\n onClick?: () => void | Promise<void>;\n type?: 'button' | 'submit' | 'reset';\n style?: CSSProperties;\n}\n\nconst SPINNER_STYLE: CSSProperties = {\n display: 'inline-block',\n width: 16,\n height: 16,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'authon-spin 0.6s linear infinite',\n flexShrink: 0,\n};\n\nexport function Button({\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n loading = false,\n disabled = false,\n children,\n onClick,\n type = 'button',\n style: userStyle,\n}: ButtonProps) {\n const theme = useTheme();\n const [hovered, setHovered] = useState(false);\n\n const sizeMap: Record<ButtonSize, CSSProperties> = {\n sm: { height: 36, paddingLeft: 12, paddingRight: 12, fontSize: 13 },\n md: { height: 44, paddingLeft: 16, paddingRight: 16, fontSize: 15 },\n lg: { height: 52, paddingLeft: 20, paddingRight: 20, fontSize: 16 },\n };\n\n const base: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n borderRadius: theme.borderRadius,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n border: 'none',\n cursor: disabled || loading ? 'not-allowed' : 'pointer',\n transition: 'opacity 0.15s, transform 0.1s',\n width: fullWidth ? '100%' : undefined,\n opacity: disabled ? 0.55 : hovered && !disabled && !loading ? 0.88 : 1,\n transform: hovered && !disabled && !loading ? 'translateY(-1px)' : undefined,\n userSelect: 'none',\n ...sizeMap[size],\n };\n\n let variantStyle: CSSProperties = {};\n switch (variant) {\n case 'primary':\n variantStyle = {\n background: `linear-gradient(135deg, ${theme.primaryStart}, ${theme.primaryEnd})`,\n color: '#ffffff',\n boxShadow: hovered ? `0 4px 16px ${theme.primaryStart}55` : '0 2px 8px rgba(0,0,0,0.1)',\n };\n break;\n case 'secondary':\n variantStyle = {\n background: `${theme.primaryStart}18`,\n color: theme.primaryStart,\n };\n break;\n case 'outline':\n variantStyle = {\n background: 'transparent',\n color: theme.text,\n border: `1.5px solid ${theme.border}`,\n };\n break;\n case 'ghost':\n variantStyle = {\n background: 'transparent',\n color: theme.textMuted,\n };\n break;\n case 'social':\n variantStyle = {\n background: theme.bg,\n color: theme.text,\n border: `1.5px solid ${theme.border}`,\n };\n break;\n }\n\n return (\n <>\n <style>{`@keyframes authon-spin { to { transform: rotate(360deg); } }`}</style>\n <button\n type={type}\n disabled={disabled || loading}\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{ ...base, ...variantStyle, ...userStyle }}\n >\n {loading ? <span style={SPINNER_STYLE} /> : children}\n </button>\n </>\n );\n}\n","import type { CSSProperties } from 'react';\nimport { useTheme } from './ThemeProvider';\n\ninterface DividerProps {\n label?: string;\n}\n\nexport function Divider({ label = 'Or continue with' }: DividerProps) {\n const theme = useTheme();\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n margin: '4px 0',\n };\n\n const lineStyle: CSSProperties = {\n flex: 1,\n height: 1,\n background: theme.border,\n };\n\n const textStyle: CSSProperties = {\n fontSize: 13,\n color: theme.textMuted,\n whiteSpace: 'nowrap',\n fontWeight: 400,\n };\n\n return (\n <div style={containerStyle}>\n <div style={lineStyle} />\n <span style={textStyle}>{label}</span>\n <div style={lineStyle} />\n </div>\n );\n}\n","import { useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { BrandingConfig, OAuthProviderType } from '@authon/shared';\nimport { PROVIDER_COLORS, PROVIDER_DISPLAY_NAMES } from '@authon/shared';\nimport { getProviderButtonConfig } from '@authon/js';\nimport { useAuthon } from '../useAuthon';\nimport { useBranding } from '../hooks/useBranding';\nimport { ThemeProvider, useTheme } from './shared/ThemeProvider';\nimport { Input } from './shared/Input';\nimport { Button } from './shared/Button';\nimport { Divider } from './shared/Divider';\n\nexport interface SignUpProps {\n appearance?: { variables?: Partial<BrandingConfig> };\n afterSignUpUrl?: string;\n onSignUp?: () => void;\n onNavigateSignIn?: () => void;\n}\n\nfunction SignUpCard({ afterSignUpUrl, onSignUp, onNavigateSignIn }: Omit<SignUpProps, 'appearance'>) {\n const theme = useTheme();\n const { client } = useAuthon();\n const { branding, providers, isLoaded } = useBranding();\n\n const [displayName, setDisplayName] = useState('');\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [loading, setLoading] = useState(false);\n const [oauthLoading, setOauthLoading] = useState<string | null>(null);\n const [error, setError] = useState('');\n const [fieldErrors, setFieldErrors] = useState<{\n displayName?: string;\n email?: string;\n password?: string;\n confirmPassword?: string;\n }>({});\n\n const validate = () => {\n const errs: typeof fieldErrors = {};\n if (!email.trim()) errs.email = 'Email is required';\n else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) errs.email = 'Invalid email address';\n if (!password) errs.password = 'Password is required';\n else if (password.length < 8) errs.password = 'Password must be at least 8 characters';\n if (confirmPassword !== password) errs.confirmPassword = 'Passwords do not match';\n setFieldErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const handleSubmit = async () => {\n if (!validate() || !client) return;\n setLoading(true);\n setError('');\n try {\n await client.signUpWithEmail(email, password, displayName ? { displayName } : undefined);\n if (afterSignUpUrl) window.location.assign(afterSignUpUrl);\n onSignUp?.();\n } catch (e: any) {\n setError(e?.message ?? 'Sign up failed');\n } finally {\n setLoading(false);\n }\n };\n\n const handleOAuth = async (provider: OAuthProviderType) => {\n if (!client) return;\n setOauthLoading(provider);\n setError('');\n try {\n await client.signInWithOAuth(provider);\n } catch (e: any) {\n setError(e?.message ?? 'OAuth sign in failed');\n } finally {\n setOauthLoading(null);\n }\n };\n\n const cardStyle: CSSProperties = {\n width: '100%',\n maxWidth: 440,\n background: theme.bg,\n borderRadius: `calc(${theme.borderRadius} + 4px)`,\n boxShadow: '0 4px 32px rgba(0,0,0,0.10)',\n padding: '40px 36px 32px',\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n gap: 20,\n fontFamily: theme.fontFamily,\n };\n\n const logoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 10,\n };\n\n const titleStyle: CSSProperties = {\n fontSize: 24,\n fontWeight: 700,\n color: theme.text,\n textAlign: 'center',\n letterSpacing: '-0.3px',\n };\n\n const subtitleStyle: CSSProperties = {\n fontSize: 14,\n color: theme.textMuted,\n textAlign: 'center',\n marginTop: -12,\n };\n\n const errorBoxStyle: CSSProperties = {\n padding: '10px 14px',\n borderRadius: theme.borderRadius,\n background: '#fef2f2',\n border: '1px solid #fecaca',\n color: '#dc2626',\n fontSize: 13,\n };\n\n const linkStyle: CSSProperties = {\n fontSize: 13,\n color: theme.primaryStart,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n fontFamily: theme.fontFamily,\n textDecoration: 'none',\n };\n\n const footerStyle: CSSProperties = {\n textAlign: 'center',\n fontSize: 14,\n color: theme.textMuted,\n paddingTop: 4,\n };\n\n const showEmailPw = branding.showEmailPassword !== false;\n const showDivider = branding.showDivider !== false && providers.length > 0 && showEmailPw;\n\n const providersToShow = providers.filter(\n (p) => !(branding.hiddenProviders ?? []).includes(p),\n );\n\n if (!isLoaded) {\n return (\n <div style={{ ...cardStyle, alignItems: 'center', justifyContent: 'center', minHeight: 200 }}>\n <span\n style={{\n width: 28,\n height: 28,\n border: `3px solid ${theme.primaryStart}33`,\n borderTopColor: theme.primaryStart,\n borderRadius: '50%',\n display: 'inline-block',\n animation: 'authon-spin 0.7s linear infinite',\n }}\n />\n </div>\n );\n }\n\n const eyeIconPath = showPassword\n ? 'M17.94 17.94A10.07 10.07 0 0112 20c-7 0-11-8-11-8a18.45 18.45 0 015.06-5.94M9.9 4.24A9.12 9.12 0 0112 4c7 0 11 8 11 8a18.5 18.5 0 01-2.16 3.19m-6.72-1.07a3 3 0 11-4.24-4.24 M1 1l22 22'\n : 'M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z M12 9a3 3 0 100 6 3 3 0 000-6z';\n\n return (\n <div style={cardStyle}>\n <div style={logoStyle}>\n {branding.logoDataUrl && (\n <img src={branding.logoDataUrl} alt={branding.brandName ?? 'Logo'} style={{ height: 40, objectFit: 'contain' }} />\n )}\n <h1 style={titleStyle}>Create account</h1>\n {branding.brandName && (\n <p style={subtitleStyle}>Join {branding.brandName}</p>\n )}\n </div>\n\n {error && <div style={errorBoxStyle}>{error}</div>}\n\n {providersToShow.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n {providersToShow.length <= 3 ? (\n providersToShow.map((provider) => (\n <OAuthButtonFull\n key={provider}\n provider={provider}\n loading={oauthLoading === provider}\n disabled={!!oauthLoading || loading}\n onClick={() => handleOAuth(provider)}\n borderRadius={theme.borderRadius}\n />\n ))\n ) : (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 10, justifyContent: 'center' }}>\n {providersToShow.map((provider) => (\n <CompactOAuthBtn\n key={provider}\n provider={provider}\n loading={oauthLoading === provider}\n disabled={!!oauthLoading || loading}\n onClick={() => handleOAuth(provider)}\n borderRadius={theme.borderRadius}\n />\n ))}\n </div>\n )}\n </div>\n )}\n\n {showDivider && <Divider />}\n\n {showEmailPw && (\n <>\n <Input\n label=\"Display name\"\n type=\"text\"\n placeholder=\"Your name\"\n value={displayName}\n onChange={setDisplayName}\n error={fieldErrors.displayName}\n autoComplete=\"name\"\n />\n\n <Input\n label=\"Email\"\n type=\"email\"\n placeholder=\"you@example.com\"\n value={email}\n onChange={setEmail}\n error={fieldErrors.email}\n autoComplete=\"email\"\n />\n\n <Input\n label=\"Password\"\n type={showPassword ? 'text' : 'password'}\n placeholder=\"Minimum 8 characters\"\n value={password}\n onChange={setPassword}\n error={fieldErrors.password}\n autoComplete=\"new-password\"\n rightElement={\n <button\n type=\"button\"\n onClick={() => setShowPassword((v) => !v)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', color: theme.textMuted }}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={eyeIconPath} />\n </svg>\n </button>\n }\n />\n\n <Input\n label=\"Confirm password\"\n type={showPassword ? 'text' : 'password'}\n placeholder=\"Repeat password\"\n value={confirmPassword}\n onChange={setConfirmPassword}\n error={fieldErrors.confirmPassword}\n autoComplete=\"new-password\"\n />\n\n <Button\n variant=\"primary\"\n fullWidth\n loading={loading}\n disabled={!!oauthLoading}\n onClick={handleSubmit}\n >\n Create account\n </Button>\n </>\n )}\n\n <div style={footerStyle}>\n Already have an account?{' '}\n <button type=\"button\" style={linkStyle} onClick={onNavigateSignIn}>\n Sign in\n </button>\n </div>\n\n {branding.showSecuredBy !== false && (\n <SecuredByAuthon primaryStart={theme.primaryStart} textMuted={theme.textMuted} />\n )}\n\n {branding.termsUrl || branding.privacyUrl ? (\n <div style={{ textAlign: 'center', fontSize: 11, color: theme.textMuted, marginTop: -8 }}>\n By creating an account you agree to our{' '}\n {branding.termsUrl && (\n <a href={branding.termsUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: theme.primaryStart }}>Terms</a>\n )}\n {branding.termsUrl && branding.privacyUrl && ' and '}\n {branding.privacyUrl && (\n <a href={branding.privacyUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: theme.primaryStart }}>Privacy Policy</a>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\ninterface OAuthBtnProps {\n provider: OAuthProviderType;\n loading: boolean;\n disabled: boolean;\n onClick: () => void;\n borderRadius: string;\n}\n\nfunction OAuthButtonFull({ provider, loading, disabled, onClick, borderRadius }: OAuthBtnProps) {\n const [hovered, setHovered] = useState(false);\n const colors = PROVIDER_COLORS[provider] ?? { bg: '#333', text: '#fff' };\n const name = PROVIDER_DISPLAY_NAMES[provider] ?? provider;\n const config = getProviderButtonConfig(provider);\n const needsBorder = colors.bg.toLowerCase() === '#ffffff';\n\n const style: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n height: 44,\n paddingLeft: 16,\n paddingRight: 16,\n borderRadius,\n background: colors.bg,\n color: colors.text,\n border: needsBorder ? '1.5px solid #dadce0' : 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontSize: 15,\n fontWeight: 600,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n justifyContent: 'center',\n opacity: disabled ? 0.6 : hovered ? 0.88 : 1,\n transition: 'opacity 0.15s',\n boxSizing: 'border-box',\n };\n\n return (\n <button\n type=\"button\"\n style={style}\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-label={`Continue with ${name}`}\n >\n {loading ? (\n <span style={{ width: 18, height: 18, border: `2px solid ${colors.text}`, borderTopColor: 'transparent', borderRadius: '50%', display: 'inline-block', animation: 'authon-spin 0.6s linear infinite' }} />\n ) : (\n <>\n <span style={{ display: 'flex', alignItems: 'center' }} dangerouslySetInnerHTML={{ __html: config.iconSvg }} />\n <span>Continue with {name}</span>\n </>\n )}\n </button>\n );\n}\n\nfunction CompactOAuthBtn({ provider, loading, disabled, onClick, borderRadius }: OAuthBtnProps) {\n const [hovered, setHovered] = useState(false);\n const colors = PROVIDER_COLORS[provider] ?? { bg: '#333', text: '#fff' };\n const name = PROVIDER_DISPLAY_NAMES[provider] ?? provider;\n const config = getProviderButtonConfig(provider);\n const needsBorder = colors.bg.toLowerCase() === '#ffffff';\n\n const style: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 48,\n height: 48,\n borderRadius,\n background: colors.bg,\n border: needsBorder ? '1.5px solid #dadce0' : 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : hovered ? 0.85 : 1,\n transition: 'opacity 0.15s',\n padding: 0,\n };\n\n return (\n <button\n type=\"button\"\n style={style}\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-label={`Continue with ${name}`}\n >\n {loading ? (\n <span style={{ width: 18, height: 18, border: `2px solid ${colors.text}`, borderTopColor: 'transparent', borderRadius: '50%', display: 'inline-block', animation: 'authon-spin 0.6s linear infinite' }} />\n ) : (\n <span style={{ display: 'flex' }} dangerouslySetInnerHTML={{ __html: config.iconSvg }} />\n )}\n </button>\n );\n}\n\nfunction SecuredByAuthon({ primaryStart, textMuted }: { primaryStart: string; textMuted: string }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 5, marginTop: -8 }}>\n <svg width=\"12\" height=\"14\" viewBox=\"0 0 12 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 0L0.5 2.5V6.5C0.5 9.7 2.9 12.7 6 13.5C9.1 12.7 11.5 9.7 11.5 6.5V2.5L6 0Z\" fill={primaryStart} opacity=\"0.85\"/>\n <path d=\"M4 7L5.5 8.5L8.5 5.5\" stroke=\"white\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n <span style={{ fontSize: 11, color: textMuted }}>\n Secured by{' '}\n <a href=\"https://authon.dev\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: primaryStart, textDecoration: 'none', fontWeight: 600 }}>\n Authon\n </a>\n </span>\n </div>\n );\n}\n\nexport function SignUp({ appearance, afterSignUpUrl, onSignUp, onNavigateSignIn }: SignUpProps) {\n const { branding, isLoaded } = useBranding();\n\n const effectiveBranding = isLoaded ? { ...branding, ...(appearance?.variables ?? {}) } : branding;\n\n return (\n <ThemeProvider branding={effectiveBranding} overrides={appearance?.variables} style={{ display: 'flex', justifyContent: 'center' }}>\n <style>{`@keyframes authon-spin { to { transform: rotate(360deg); } }`}</style>\n <SignUpCard\n afterSignUpUrl={afterSignUpUrl}\n onSignUp={onSignUp}\n onNavigateSignIn={onNavigateSignIn}\n />\n </ThemeProvider>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { BrandingConfig } from '@authon/shared';\nimport { useAuthon } from '../useAuthon';\nimport { useBranding } from '../hooks/useBranding';\nimport { ThemeProvider, useTheme } from './shared/ThemeProvider';\n\nexport interface UserButtonProps {\n appearance?: { variables?: Partial<BrandingConfig> };\n afterSignOutUrl?: string;\n userProfileUrl?: string;\n}\n\nfunction UserAvatar({\n avatarUrl,\n displayName,\n email,\n size,\n primaryStart,\n primaryEnd,\n}: {\n avatarUrl?: string | null;\n displayName?: string | null;\n email?: string | null;\n size: number;\n primaryStart: string;\n primaryEnd: string;\n}) {\n const initials = displayName\n ? displayName\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n : (email?.[0] ?? '?').toUpperCase();\n\n const avatarStyle: CSSProperties = {\n width: size,\n height: size,\n borderRadius: '50%',\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: avatarUrl ? 'transparent' : `linear-gradient(135deg, ${primaryStart}, ${primaryEnd})`,\n color: '#fff',\n fontSize: size * 0.38,\n fontWeight: 700,\n userSelect: 'none',\n };\n\n return (\n <div style={avatarStyle}>\n {avatarUrl ? (\n <img src={avatarUrl} alt={displayName ?? 'avatar'} style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n initials\n )}\n </div>\n );\n}\n\nfunction UserButtonInner({ afterSignOutUrl, userProfileUrl }: Omit<UserButtonProps, 'appearance'>) {\n const theme = useTheme();\n const { user, signOut, openSignIn, isSignedIn, activeOrganization, client } = useAuthon();\n const [open, setOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const handleClickOutside = useCallback((e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n }, []);\n\n useEffect(() => {\n if (open) document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [open, handleClickOutside]);\n\n if (!isSignedIn) {\n return (\n <button\n type=\"button\"\n onClick={() => openSignIn()}\n style={{\n padding: '8px 18px',\n borderRadius: theme.borderRadius,\n border: 'none',\n background: `linear-gradient(135deg, ${theme.primaryStart}, ${theme.primaryEnd})`,\n color: '#fff',\n cursor: 'pointer',\n fontSize: 14,\n fontWeight: 600,\n fontFamily: theme.fontFamily,\n }}\n >\n Sign In\n </button>\n );\n }\n\n const triggerStyle: CSSProperties = {\n width: 38,\n height: 38,\n borderRadius: '50%',\n border: `2px solid ${theme.primaryStart}`,\n background: 'none',\n cursor: 'pointer',\n padding: 1,\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n };\n\n const dropdownStyle: CSSProperties = {\n position: 'absolute',\n right: 0,\n top: 46,\n minWidth: 240,\n background: theme.bg,\n border: `1px solid ${theme.border}`,\n borderRadius: theme.borderRadius,\n boxShadow: '0 8px 32px rgba(0,0,0,0.13)',\n zIndex: 9999,\n overflow: 'hidden',\n fontFamily: theme.fontFamily,\n };\n\n const headerStyle: CSSProperties = {\n padding: '14px 16px',\n borderBottom: `1px solid ${theme.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n };\n\n const menuItemStyle = (danger?: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n padding: '10px 16px',\n textAlign: 'left',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: 14,\n color: danger ? '#ef4444' : theme.text,\n fontWeight: 500,\n fontFamily: theme.fontFamily,\n boxSizing: 'border-box',\n });\n\n return (\n <div ref={dropdownRef} style={{ position: 'relative', display: 'inline-block' }}>\n <button type=\"button\" style={triggerStyle} onClick={() => setOpen((v) => !v)} aria-label=\"User menu\">\n <UserAvatar\n avatarUrl={user?.avatarUrl}\n displayName={user?.displayName}\n email={user?.email}\n size={32}\n primaryStart={theme.primaryStart}\n primaryEnd={theme.primaryEnd}\n />\n </button>\n\n {open && (\n <div style={dropdownStyle}>\n <div style={headerStyle}>\n <UserAvatar\n avatarUrl={user?.avatarUrl}\n displayName={user?.displayName}\n email={user?.email}\n size={40}\n primaryStart={theme.primaryStart}\n primaryEnd={theme.primaryEnd}\n />\n <div style={{ flex: 1, minWidth: 0 }}>\n {user?.displayName && (\n <div style={{ fontSize: 14, fontWeight: 600, color: theme.text, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {user.displayName}\n </div>\n )}\n {user?.email && (\n <div style={{ fontSize: 12, color: theme.textMuted, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', marginTop: 1 }}>\n {user.email}\n </div>\n )}\n </div>\n </div>\n\n {activeOrganization && (\n <OrgSwitcherRow\n org={activeOrganization}\n primaryStart={theme.primaryStart}\n theme={theme}\n client={client}\n />\n )}\n\n {userProfileUrl && (\n <MenuButton\n style={menuItemStyle()}\n onClick={() => { setOpen(false); window.location.assign(userProfileUrl); }}\n icon={\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2\"/>\n <circle cx=\"12\" cy=\"7\" r=\"4\"/>\n </svg>\n }\n >\n Manage account\n </MenuButton>\n )}\n\n <div style={{ borderTop: `1px solid ${theme.border}` }}>\n <MenuButton\n style={menuItemStyle(true)}\n onClick={async () => {\n setOpen(false);\n await signOut();\n if (afterSignOutUrl) window.location.assign(afterSignOutUrl);\n }}\n icon={\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\"/>\n <polyline points=\"16 17 21 12 16 7\"/>\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"/>\n </svg>\n }\n >\n Sign out\n </MenuButton>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction MenuButton({\n style: baseStyle,\n onClick,\n icon,\n children,\n}: {\n style: CSSProperties;\n onClick: () => void;\n icon?: React.ReactNode;\n children: React.ReactNode;\n}) {\n const [hovered, setHovered] = useState(false);\n\n return (\n <button\n type=\"button\"\n style={{\n ...baseStyle,\n background: hovered ? (baseStyle.color === '#ef4444' ? '#fef2f2' : '#f9fafb') : 'none',\n }}\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {icon}\n {children}\n </button>\n );\n}\n\nfunction OrgSwitcherRow({\n org,\n primaryStart,\n theme,\n client,\n}: {\n org: { name: string; logoUrl: string | null; id: string };\n primaryStart: string;\n theme: { text: string; textMuted: string; border: string; fontFamily: string };\n client: any;\n}) {\n return (\n <div\n style={{\n padding: '8px 16px',\n borderBottom: `1px solid ${theme.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n }}\n >\n {org.logoUrl ? (\n <img src={org.logoUrl} alt={org.name} style={{ width: 24, height: 24, borderRadius: 6, objectFit: 'cover' }} />\n ) : (\n <div\n style={{\n width: 24,\n height: 24,\n borderRadius: 6,\n background: `${primaryStart}22`,\n color: primaryStart,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 11,\n fontWeight: 700,\n }}\n >\n {org.name[0]?.toUpperCase()}\n </div>\n )}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 12, color: theme.textMuted }}>Organization</div>\n <div style={{ fontSize: 13, fontWeight: 600, color: theme.text, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {org.name}\n </div>\n </div>\n </div>\n );\n}\n\nexport function UserButton({ appearance, afterSignOutUrl, userProfileUrl }: UserButtonProps) {\n const { branding } = useBranding();\n const effectiveBranding = { ...branding, ...(appearance?.variables ?? {}) };\n\n return (\n <ThemeProvider branding={effectiveBranding} style={{ display: 'inline-block' }}>\n <UserButtonInner afterSignOutUrl={afterSignOutUrl} userProfileUrl={userProfileUrl} />\n </ThemeProvider>\n );\n}\n","import type { ReactNode } from 'react';\nimport { useAuthon } from './useAuthon';\n\ninterface SignedInProps {\n children: ReactNode;\n}\n\nexport function SignedIn({ children }: SignedInProps) {\n const { isSignedIn, isLoading } = useAuthon();\n if (isLoading || !isSignedIn) return null;\n return <>{children}</>;\n}\n","import type { ReactNode } from 'react';\nimport { useAuthon } from './useAuthon';\n\ninterface SignedOutProps {\n children: ReactNode;\n}\n\nexport function SignedOut({ children }: SignedOutProps) {\n const { isSignedIn, isLoading } = useAuthon();\n if (isLoading || isSignedIn) return null;\n return <>{children}</>;\n}\n","import type { ReactNode } from 'react';\nimport type { AuthonUser } from '@authon/shared';\nimport { useAuthon } from './useAuthon';\n\ninterface ProtectProps {\n children: ReactNode;\n fallback?: ReactNode;\n condition?: (user: AuthonUser) => boolean;\n}\n\nexport function Protect({ children, fallback = null, condition }: ProtectProps) {\n const { isSignedIn, isLoading, user } = useAuthon();\n\n if (isLoading) return null;\n if (!isSignedIn || !user) return <>{fallback}</>;\n if (condition && !condition(user)) return <>{fallback}</>;\n\n return <>{children}</>;\n}\n","import { PROVIDER_COLORS, PROVIDER_DISPLAY_NAMES, type OAuthProviderType } from '@authon/shared';\nimport { getProviderButtonConfig } from '@authon/js';\n\nexport interface SocialButtonProps {\n provider: OAuthProviderType;\n onClick: (provider: OAuthProviderType) => void | Promise<void>;\n loading?: boolean;\n disabled?: boolean;\n /** Override button label. Default: \"Continue with {Provider}\" */\n label?: string;\n /** Compact mode — icon-only square button (default: false) */\n compact?: boolean;\n /** Override button className */\n className?: string;\n /** Override button style */\n style?: React.CSSProperties;\n /** Icon size (default: 20, compact default: 24) */\n iconSize?: number;\n /** Border radius in px (default: 10) */\n borderRadius?: number;\n /** Button height in px (default: 48) */\n height?: number;\n /** Button size for compact mode in px (default: 48) */\n size?: number;\n}\n\nconst baseStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 10,\n paddingLeft: 16,\n paddingRight: 16,\n border: 'none',\n cursor: 'pointer',\n fontFamily: 'inherit',\n transition: 'opacity 0.15s',\n width: '100%',\n};\n\nconst compactBaseStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n cursor: 'pointer',\n transition: 'opacity 0.15s',\n padding: 0,\n};\n\nexport function SocialButton({\n provider,\n onClick,\n loading = false,\n disabled = false,\n label,\n compact = false,\n className,\n style: userStyle,\n iconSize,\n borderRadius = 10,\n height = 48,\n size = 48,\n}: SocialButtonProps) {\n const colors = PROVIDER_COLORS[provider] || { bg: '#333', text: '#fff' };\n const displayName = PROVIDER_DISPLAY_NAMES[provider] || provider;\n const buttonLabel = label ?? `Continue with ${displayName}`;\n const needsBorder = colors.bg.toLowerCase() === '#ffffff';\n const resolvedIconSize = iconSize ?? (compact ? 24 : 20);\n const config = getProviderButtonConfig(provider);\n const iconSvg = config.iconSvg.replace(/width=\"\\d+\"/, `width=\"${resolvedIconSize}\"`).replace(/height=\"\\d+\"/, `height=\"${resolvedIconSize}\"`);\n\n const borderProps = needsBorder\n ? { border: '1px solid #dadce0' }\n : {};\n\n if (compact) {\n return (\n <button\n className={className}\n style={{\n ...compactBaseStyle,\n backgroundColor: colors.bg,\n borderRadius,\n width: size,\n height: size,\n ...borderProps,\n ...userStyle,\n }}\n onClick={() => onClick(provider)}\n disabled={disabled || loading}\n aria-label={`Sign in with ${displayName}`}\n >\n {loading ? (\n <span\n style={{\n display: 'inline-block',\n width: 16,\n height: 16,\n border: `2px solid ${colors.text}`,\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'authon-spin 0.6s linear infinite',\n }}\n />\n ) : (\n <span\n style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}\n dangerouslySetInnerHTML={{ __html: iconSvg }}\n />\n )}\n </button>\n );\n }\n\n return (\n <button\n className={className}\n style={{\n ...baseStyle,\n backgroundColor: colors.bg,\n color: colors.text,\n borderRadius,\n height,\n ...borderProps,\n ...userStyle,\n }}\n onClick={() => onClick(provider)}\n disabled={disabled || loading}\n aria-label={`Sign in with ${displayName}`}\n >\n {loading ? (\n <span\n style={{\n display: 'inline-block',\n width: 16,\n height: 16,\n border: `2px solid ${colors.text}`,\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'authon-spin 0.6s linear infinite',\n }}\n />\n ) : (\n <>\n <span\n style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}\n dangerouslySetInnerHTML={{ __html: iconSvg }}\n />\n <span style={{ fontSize: 15, fontWeight: 600, whiteSpace: 'nowrap' }}>\n {buttonLabel}\n </span>\n </>\n )}\n </button>\n );\n}\n","import { useState, useEffect } from 'react';\nimport type { OAuthProviderType } from '@authon/shared';\nimport { useAuthon } from './useAuthon';\nimport { SocialButton } from './SocialButton';\nimport type { SocialButtonProps } from './SocialButton';\n\nexport interface SocialButtonsProps {\n /** Called after successful OAuth sign-in */\n onSuccess?: () => void;\n /** Called on OAuth error */\n onError?: (error: Error) => void;\n /** Container className */\n className?: string;\n /** Container style */\n style?: React.CSSProperties;\n /** Gap between buttons in px (default: 10, compact default: 12) */\n gap?: number;\n /** Compact mode — icon-only square buttons in a row (default: false) */\n compact?: boolean;\n /** Custom labels per provider. e.g. { google: 'Google로 로그인' } */\n labels?: Partial<Record<OAuthProviderType, string>>;\n /** Props to pass through to each SocialButton */\n buttonProps?: Partial<Omit<SocialButtonProps, 'provider' | 'onClick' | 'loading' | 'disabled' | 'compact' | 'label'>>;\n}\n\nexport function SocialButtons({\n onSuccess,\n onError,\n className,\n style: userStyle,\n gap,\n compact = false,\n labels,\n buttonProps,\n}: SocialButtonsProps) {\n const { client } = useAuthon();\n const [providers, setProviders] = useState<OAuthProviderType[]>([]);\n const [loadingProvider, setLoadingProvider] = useState<string | null>(null);\n\n useEffect(() => {\n if (!client) return;\n client.getProviders().then((p: OAuthProviderType[]) => setProviders(p));\n }, [client]);\n\n if (providers.length === 0) return null;\n\n const resolvedGap = gap ?? (compact ? 12 : 10);\n\n const handleClick = async (provider: OAuthProviderType) => {\n if (!client) return;\n setLoadingProvider(provider);\n try {\n await client.signInWithOAuth(provider);\n onSuccess?.();\n } catch (e: any) {\n const error = e instanceof Error ? e : new Error(String(e));\n onError?.(error);\n } finally {\n setLoadingProvider(null);\n }\n };\n\n const containerStyle: React.CSSProperties = compact\n ? { display: 'flex', flexDirection: 'row', flexWrap: 'wrap', justifyContent: 'center', gap: resolvedGap, ...userStyle }\n : { display: 'flex', flexDirection: 'column', gap: resolvedGap, ...userStyle };\n\n return (\n <div className={className} style={containerStyle}>\n {providers.map((provider) => (\n <SocialButton\n key={provider}\n provider={provider}\n onClick={handleClick}\n loading={loadingProvider === provider}\n disabled={!!loadingProvider}\n compact={compact}\n label={labels?.[provider]}\n {...buttonProps}\n />\n ))}\n </div>\n );\n}\n","import { useCallback, useContext, useState } from 'react';\nimport type { MfaSetupResponse, MfaStatus } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseAuthonMfaReturn {\n /** Start MFA setup — returns secret, QR code SVG, and backup codes */\n setupMfa: () => Promise<(MfaSetupResponse & { qrCodeSvg: string }) | null>;\n /** Verify TOTP code to complete MFA setup */\n verifyMfaSetup: (code: string) => Promise<boolean>;\n /** Verify TOTP code during sign-in (after receiving mfaToken) */\n verifyMfa: (mfaToken: string, code: string) => Promise<boolean>;\n /** Disable MFA (requires current TOTP code) */\n disableMfa: (code: string) => Promise<boolean>;\n /** Get current MFA status */\n getMfaStatus: () => Promise<MfaStatus | null>;\n /** Regenerate backup codes (requires current TOTP code) */\n regenerateBackupCodes: (code: string) => Promise<string[] | null>;\n /** Loading state */\n isLoading: boolean;\n /** Last error */\n error: Error | null;\n}\n\nexport function useAuthonMfa(): UseAuthonMfaReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useAuthonMfa must be used within <AuthonProvider>');\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const wrap = useCallback(\n async <T>(fn: () => Promise<T>): Promise<T | null> => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await fn();\n return result;\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n const setupMfa = useCallback(async () => {\n return wrap(() => ctx.client!.setupMfa());\n }, [ctx.client, wrap]);\n\n const verifyMfaSetup = useCallback(\n async (code: string) => {\n const result = await wrap(() => ctx.client!.verifyMfaSetup(code));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const verifyMfa = useCallback(\n async (mfaToken: string, code: string) => {\n const result = await wrap(() => ctx.client!.verifyMfa(mfaToken, code));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const disableMfa = useCallback(\n async (code: string) => {\n const result = await wrap(() => ctx.client!.disableMfa(code));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const getMfaStatus = useCallback(async () => {\n return wrap(() => ctx.client!.getMfaStatus());\n }, [ctx.client, wrap]);\n\n const regenerateBackupCodes = useCallback(\n async (code: string) => {\n return wrap(() => ctx.client!.regenerateBackupCodes(code));\n },\n [ctx.client, wrap],\n );\n\n return {\n setupMfa,\n verifyMfaSetup,\n verifyMfa,\n disableMfa,\n getMfaStatus,\n regenerateBackupCodes,\n isLoading,\n error,\n };\n}\n","import { useCallback, useContext, useState } from 'react';\nimport type { PasskeyCredential } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseAuthonPasskeysReturn {\n registerPasskey: (name?: string) => Promise<PasskeyCredential | null>;\n authenticateWithPasskey: (email?: string) => Promise<boolean>;\n listPasskeys: () => Promise<PasskeyCredential[] | null>;\n renamePasskey: (id: string, name: string) => Promise<PasskeyCredential | null>;\n revokePasskey: (id: string) => Promise<boolean>;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useAuthonPasskeys(): UseAuthonPasskeysReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useAuthonPasskeys must be used within <AuthonProvider>');\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const wrap = useCallback(\n async <T>(fn: () => Promise<T>): Promise<T | null> => {\n setIsLoading(true);\n setError(null);\n try {\n return await fn();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n const registerPasskey = useCallback(\n (name?: string) => wrap(() => ctx.client!.registerPasskey(name)),\n [ctx.client, wrap],\n );\n\n const authenticateWithPasskey = useCallback(\n async (email?: string) => {\n const result = await wrap(() => ctx.client!.authenticateWithPasskey(email));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const listPasskeys = useCallback(\n () => wrap(() => ctx.client!.listPasskeys()),\n [ctx.client, wrap],\n );\n\n const renamePasskey = useCallback(\n (id: string, name: string) => wrap(() => ctx.client!.renamePasskey(id, name)),\n [ctx.client, wrap],\n );\n\n const revokePasskey = useCallback(\n async (id: string) => {\n const result = await wrap(() => ctx.client!.revokePasskey(id));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n return {\n registerPasskey,\n authenticateWithPasskey,\n listPasskeys,\n renamePasskey,\n revokePasskey,\n isLoading,\n error,\n };\n}\n","import { useCallback, useContext, useState } from 'react';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseAuthonPasswordlessReturn {\n sendMagicLink: (email: string) => Promise<boolean>;\n sendEmailOtp: (email: string) => Promise<boolean>;\n verifyPasswordless: (opts: { token?: string; email?: string; code?: string }) => Promise<boolean>;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useAuthonPasswordless(): UseAuthonPasswordlessReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useAuthonPasswordless must be used within <AuthonProvider>');\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const wrap = useCallback(\n async <T>(fn: () => Promise<T>): Promise<T | null> => {\n setIsLoading(true);\n setError(null);\n try {\n return await fn();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n const sendMagicLink = useCallback(\n async (email: string) => {\n const result = await wrap(() => ctx.client!.sendMagicLink(email));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const sendEmailOtp = useCallback(\n async (email: string) => {\n const result = await wrap(() => ctx.client!.sendEmailOtp(email));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const verifyPasswordless = useCallback(\n async (opts: { token?: string; email?: string; code?: string }) => {\n const result = await wrap(() => ctx.client!.verifyPasswordless(opts));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n return {\n sendMagicLink,\n sendEmailOtp,\n verifyPasswordless,\n isLoading,\n error,\n };\n}\n","import { useCallback, useContext, useState } from 'react';\nimport type { Web3Chain, Web3NonceResponse, Web3Wallet, Web3WalletType } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface LinkWalletParams {\n address: string;\n chain: Web3Chain;\n walletType: Web3WalletType;\n chainId?: number;\n message: string;\n signature: string;\n}\n\nexport interface UseAuthonWeb3Return {\n getNonce: (\n address: string,\n chain: Web3Chain,\n walletType: Web3WalletType,\n chainId?: number,\n ) => Promise<Web3NonceResponse | null>;\n verify: (\n message: string,\n signature: string,\n address: string,\n chain: Web3Chain,\n walletType: Web3WalletType,\n ) => Promise<boolean>;\n listWallets: () => Promise<Web3Wallet[] | null>;\n linkWallet: (params: LinkWalletParams) => Promise<Web3Wallet | null>;\n unlinkWallet: (walletId: string) => Promise<boolean>;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useAuthonWeb3(): UseAuthonWeb3Return {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useAuthonWeb3 must be used within <AuthonProvider>');\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const wrap = useCallback(\n async <T>(fn: () => Promise<T>): Promise<T | null> => {\n setIsLoading(true);\n setError(null);\n try {\n return await fn();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n const getNonce = useCallback(\n (address: string, chain: Web3Chain, walletType: Web3WalletType, chainId?: number) =>\n wrap(() => ctx.client!.web3GetNonce(address, chain, walletType, chainId)),\n [ctx.client, wrap],\n );\n\n const verify = useCallback(\n async (\n message: string,\n signature: string,\n address: string,\n chain: Web3Chain,\n walletType: Web3WalletType,\n ) => {\n const result = await wrap(() =>\n ctx.client!.web3Verify(message, signature, address, chain, walletType),\n );\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const listWallets = useCallback(\n () => wrap(() => ctx.client!.listWallets()),\n [ctx.client, wrap],\n );\n\n const linkWallet = useCallback(\n (params: LinkWalletParams) => wrap(() => ctx.client!.linkWallet(params)),\n [ctx.client, wrap],\n );\n\n const unlinkWallet = useCallback(\n async (walletId: string) => {\n const result = await wrap(() => ctx.client!.unlinkWallet(walletId));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n return {\n getNonce,\n verify,\n listWallets,\n linkWallet,\n unlinkWallet,\n isLoading,\n error,\n };\n}\n","import { useCallback, useContext, useState } from 'react';\nimport type { SessionInfo } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseAuthonSessionsReturn {\n listSessions: () => Promise<SessionInfo[] | null>;\n revokeSession: (sessionId: string) => Promise<boolean>;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useAuthonSessions(): UseAuthonSessionsReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useAuthonSessions must be used within <AuthonProvider>');\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const wrap = useCallback(\n async <T>(fn: () => Promise<T>): Promise<T | null> => {\n setIsLoading(true);\n setError(null);\n try {\n return await fn();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n const listSessions = useCallback(\n () => wrap(() => ctx.client!.listSessions()),\n [ctx.client, wrap],\n );\n\n const revokeSession = useCallback(\n async (sessionId: string) => {\n const result = await wrap(() => ctx.client!.revokeSession(sessionId));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n return {\n listSessions,\n revokeSession,\n isLoading,\n error,\n };\n}\n","import { useCallback, useContext, useEffect, useState } from 'react';\nimport type { AuthonOrganization, OrganizationMember } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseOrganizationReturn {\n organization: AuthonOrganization | null;\n members: OrganizationMember[];\n isLoaded: boolean;\n}\n\nexport function useOrganization(): UseOrganizationReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useOrganization must be used within <AuthonProvider>');\n\n const [members, setMembers] = useState<OrganizationMember[]>([]);\n const [isLoaded, setIsLoaded] = useState(false);\n\n const organization = ctx.activeOrganization;\n\n useEffect(() => {\n if (!organization || !ctx.client) {\n setMembers([]);\n setIsLoaded(!organization);\n return;\n }\n\n setIsLoaded(false);\n ctx.client.organizations\n .getMembers(organization.id)\n .then((m) => {\n setMembers(m);\n setIsLoaded(true);\n })\n .catch(() => {\n setMembers([]);\n setIsLoaded(true);\n });\n }, [organization?.id, ctx.client]);\n\n return {\n organization,\n members,\n isLoaded,\n };\n}\n","import { useCallback, useContext, useEffect, useState } from 'react';\nimport type { AuthonOrganization, CreateOrganizationParams } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseOrganizationListReturn {\n organizations: AuthonOrganization[];\n isLoaded: boolean;\n createOrganization: (params: CreateOrganizationParams) => Promise<AuthonOrganization | null>;\n setActive: (org: AuthonOrganization | null) => void;\n}\n\nexport function useOrganizationList(): UseOrganizationListReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useOrganizationList must be used within <AuthonProvider>');\n\n const [organizations, setOrganizations] = useState<AuthonOrganization[]>([]);\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n if (!ctx.client || !ctx.isSignedIn) {\n setOrganizations([]);\n setIsLoaded(!ctx.isSignedIn);\n return;\n }\n\n setIsLoaded(false);\n ctx.client.organizations\n .list()\n .then((res) => {\n setOrganizations(res.data);\n setIsLoaded(true);\n })\n .catch(() => {\n setOrganizations([]);\n setIsLoaded(true);\n });\n }, [ctx.client, ctx.isSignedIn]);\n\n const createOrganization = useCallback(\n async (params: CreateOrganizationParams): Promise<AuthonOrganization | null> => {\n if (!ctx.client) return null;\n try {\n const org = await ctx.client.organizations.create(params);\n setOrganizations((prev) => [...prev, org]);\n return org;\n } catch {\n return null;\n }\n },\n [ctx.client],\n );\n\n const setActive = useCallback(\n (org: AuthonOrganization | null) => {\n ctx.setActiveOrganization(org);\n },\n [ctx.setActiveOrganization],\n );\n\n return {\n organizations,\n isLoaded,\n createOrganization,\n setActive,\n };\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { BrandingConfig, SessionInfo, MfaStatus } from '@authon/shared';\nimport { useAuthon } from '../useAuthon';\nimport { useBranding } from '../hooks/useBranding';\nimport { ThemeProvider, useTheme } from './shared/ThemeProvider';\nimport { Input } from './shared/Input';\nimport { Button } from './shared/Button';\n\nexport interface UserProfileProps {\n appearance?: { variables?: Partial<BrandingConfig> };\n}\n\ntype Tab = 'profile' | 'security' | 'sessions';\n\nfunction ProfileTab() {\n const theme = useTheme();\n const { user, client } = useAuthon();\n const [displayName, setDisplayName] = useState(user?.displayName ?? '');\n const [phone, setPhone] = useState(user?.phone ?? '');\n const [loading, setLoading] = useState(false);\n const [success, setSuccess] = useState('');\n const [error, setError] = useState('');\n\n const handleSave = async () => {\n if (!client) return;\n setLoading(true);\n setError('');\n setSuccess('');\n try {\n await client.updateProfile({ displayName: displayName || undefined, phone: phone || undefined });\n setSuccess('Profile updated');\n } catch (e: any) {\n setError(e?.message ?? 'Failed to update profile');\n } finally {\n setLoading(false);\n }\n };\n\n const initials = user?.displayName\n ? user.displayName.split(' ').map((n) => n[0]).join('').toUpperCase().slice(0, 2)\n : (user?.email?.[0] ?? '?').toUpperCase();\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 16 }}>\n <div\n style={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n background: user?.avatarUrl ? 'transparent' : `linear-gradient(135deg, ${theme.primaryStart}, ${theme.primaryEnd})`,\n color: '#fff',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 22,\n fontWeight: 700,\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {user?.avatarUrl ? (\n <img src={user.avatarUrl} alt=\"avatar\" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n initials\n )}\n </div>\n <div>\n <div style={{ fontSize: 16, fontWeight: 600, color: theme.text }}>{user?.displayName ?? 'User'}</div>\n <div style={{ fontSize: 13, color: theme.textMuted }}>{user?.email}</div>\n {!user?.emailVerified && (\n <span style={{ fontSize: 11, color: '#d97706', background: '#fef3c7', padding: '2px 8px', borderRadius: 99, fontWeight: 500, marginTop: 4, display: 'inline-block' }}>\n Email not verified\n </span>\n )}\n </div>\n </div>\n\n {success && (\n <div style={{ padding: '10px 14px', borderRadius: theme.borderRadius, background: '#f0fdf4', border: '1px solid #bbf7d0', color: '#166534', fontSize: 13 }}>\n {success}\n </div>\n )}\n {error && (\n <div style={{ padding: '10px 14px', borderRadius: theme.borderRadius, background: '#fef2f2', border: '1px solid #fecaca', color: '#dc2626', fontSize: 13 }}>\n {error}\n </div>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <Input label=\"Display name\" value={displayName} onChange={setDisplayName} placeholder=\"Your name\" />\n <Input label=\"Email\" type=\"email\" value={user?.email ?? ''} disabled placeholder=\"Email\" />\n <Input label=\"Phone\" type=\"tel\" value={phone} onChange={setPhone} placeholder=\"+1 (555) 000-0000\" />\n </div>\n\n <Button variant=\"primary\" onClick={handleSave} loading={loading} style={{ alignSelf: 'flex-start', minWidth: 120 }}>\n Save changes\n </Button>\n </div>\n );\n}\n\nfunction SecurityTab() {\n const theme = useTheme();\n const { client } = useAuthon();\n const [currentPw, setCurrentPw] = useState('');\n const [newPw, setNewPw] = useState('');\n const [confirmPw, setConfirmPw] = useState('');\n const [pwLoading, setPwLoading] = useState(false);\n const [pwError, setPwError] = useState('');\n const [pwSuccess, setPwSuccess] = useState('');\n const [mfaStatus, setMfaStatus] = useState<MfaStatus | null>(null);\n const [mfaLoading, setMfaLoading] = useState(false);\n\n useEffect(() => {\n if (!client) return;\n client.getMfaStatus().then(setMfaStatus).catch(() => null);\n }, [client]);\n\n const handlePasswordChange = async () => {\n if (!client) return;\n if (newPw !== confirmPw) { setPwError('Passwords do not match'); return; }\n if (newPw.length < 8) { setPwError('Password must be at least 8 characters'); return; }\n setPwLoading(true);\n setPwError('');\n setPwSuccess('');\n try {\n await client.updateProfile({ displayName: undefined });\n setPwSuccess('Password updated');\n setCurrentPw('');\n setNewPw('');\n setConfirmPw('');\n } catch (e: any) {\n setPwError(e?.message ?? 'Failed to update password');\n } finally {\n setPwLoading(false);\n }\n };\n\n const sectionTitle: CSSProperties = {\n fontSize: 15,\n fontWeight: 600,\n color: theme.text,\n marginBottom: 16,\n paddingBottom: 10,\n borderBottom: `1px solid ${theme.border}`,\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n <div>\n <div style={sectionTitle}>Change password</div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <Input label=\"Current password\" type=\"password\" value={currentPw} onChange={setCurrentPw} placeholder=\"••••••••\" autoComplete=\"current-password\" />\n <Input label=\"New password\" type=\"password\" value={newPw} onChange={setNewPw} placeholder=\"Minimum 8 characters\" autoComplete=\"new-password\" />\n <Input label=\"Confirm new password\" type=\"password\" value={confirmPw} onChange={setConfirmPw} placeholder=\"Repeat new password\" autoComplete=\"new-password\" />\n {pwError && <div style={{ color: '#dc2626', fontSize: 13 }}>{pwError}</div>}\n {pwSuccess && <div style={{ color: '#166534', fontSize: 13 }}>{pwSuccess}</div>}\n <Button variant=\"primary\" onClick={handlePasswordChange} loading={pwLoading} style={{ alignSelf: 'flex-start', minWidth: 160 }}>\n Update password\n </Button>\n </div>\n </div>\n\n <div>\n <div style={sectionTitle}>Two-factor authentication</div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '14px 0' }}>\n <div>\n <div style={{ fontSize: 14, fontWeight: 500, color: theme.text }}>Authenticator app</div>\n <div style={{ fontSize: 13, color: theme.textMuted, marginTop: 2 }}>\n {mfaStatus?.enabled\n ? `Enabled · ${mfaStatus.backupCodesRemaining} backup codes remaining`\n : 'Add extra security to your account'}\n </div>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '3px 10px',\n borderRadius: 99,\n fontSize: 12,\n fontWeight: 600,\n background: mfaStatus?.enabled ? '#f0fdf4' : '#f3f4f6',\n color: mfaStatus?.enabled ? '#166534' : theme.textMuted,\n }}\n >\n <span style={{ width: 6, height: 6, borderRadius: '50%', background: mfaStatus?.enabled ? '#22c55e' : '#9ca3af', display: 'inline-block' }} />\n {mfaStatus?.enabled ? 'Enabled' : 'Disabled'}\n </span>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction SessionsTab() {\n const theme = useTheme();\n const { client } = useAuthon();\n const [sessions, setSessions] = useState<SessionInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [revoking, setRevoking] = useState<string | null>(null);\n\n const loadSessions = useCallback(async () => {\n if (!client) return;\n setLoading(true);\n try {\n const data = await client.listSessions();\n setSessions(data);\n } catch {\n /* ignore */\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n useEffect(() => {\n loadSessions();\n }, [loadSessions]);\n\n const handleRevoke = async (sessionId: string) => {\n if (!client) return;\n setRevoking(sessionId);\n try {\n await client.revokeSession(sessionId);\n setSessions((prev) => prev.filter((s) => s.id !== sessionId));\n } catch {\n /* ignore */\n } finally {\n setRevoking(null);\n }\n };\n\n const sectionTitle: CSSProperties = {\n fontSize: 15,\n fontWeight: 600,\n color: theme.text,\n marginBottom: 16,\n paddingBottom: 10,\n borderBottom: `1px solid ${theme.border}`,\n };\n\n if (loading) {\n return (\n <div style={{ display: 'flex', justifyContent: 'center', padding: 40 }}>\n <span style={{ width: 24, height: 24, border: `3px solid ${theme.primaryStart}33`, borderTopColor: theme.primaryStart, borderRadius: '50%', display: 'inline-block', animation: 'authon-spin 0.7s linear infinite' }} />\n </div>\n );\n }\n\n return (\n <div>\n <div style={sectionTitle}>Active sessions</div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n {sessions.length === 0 ? (\n <div style={{ color: theme.textMuted, fontSize: 14, textAlign: 'center', padding: '24px 0' }}>No active sessions</div>\n ) : (\n sessions.map((session) => (\n <div\n key={session.id}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 14px',\n borderRadius: theme.borderRadius,\n border: `1px solid ${theme.border}`,\n gap: 12,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, flex: 1, minWidth: 0 }}>\n <div style={{ width: 36, height: 36, borderRadius: '50%', background: `${theme.primaryStart}18`, color: theme.primaryStart, display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"/>\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"/>\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"/>\n </svg>\n </div>\n <div style={{ minWidth: 0 }}>\n <div style={{ fontSize: 13, fontWeight: 500, color: theme.text, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {session.userAgent\n ? session.userAgent.length > 50\n ? session.userAgent.slice(0, 50) + '…'\n : session.userAgent\n : 'Unknown device'}\n </div>\n <div style={{ fontSize: 12, color: theme.textMuted, marginTop: 2 }}>\n {session.ipAddress ?? 'Unknown IP'}\n {session.lastActiveAt && (\n <> · {formatRelative(session.lastActiveAt)}</>\n )}\n </div>\n </div>\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n loading={revoking === session.id}\n onClick={() => handleRevoke(session.id)}\n >\n Revoke\n </Button>\n </div>\n ))\n )}\n </div>\n </div>\n );\n}\n\nfunction formatRelative(dateStr: string): string {\n const diff = Date.now() - new Date(dateStr).getTime();\n const mins = Math.floor(diff / 60000);\n if (mins < 1) return 'Just now';\n if (mins < 60) return `${mins}m ago`;\n const hours = Math.floor(mins / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return `${days}d ago`;\n}\n\nfunction UserProfilePanel() {\n const theme = useTheme();\n const [tab, setTab] = useState<Tab>('profile');\n\n const panelStyle: CSSProperties = {\n width: '100%',\n maxWidth: 640,\n background: theme.bg,\n borderRadius: `calc(${theme.borderRadius} + 4px)`,\n boxShadow: '0 4px 32px rgba(0,0,0,0.10)',\n overflow: 'hidden',\n fontFamily: theme.fontFamily,\n };\n\n const tabBarStyle: CSSProperties = {\n display: 'flex',\n borderBottom: `1px solid ${theme.border}`,\n padding: '0 24px',\n };\n\n const tabBtnStyle = (active: boolean): CSSProperties => ({\n padding: '14px 16px',\n background: 'none',\n border: 'none',\n borderBottom: active ? `2px solid ${theme.primaryStart}` : '2px solid transparent',\n color: active ? theme.primaryStart : theme.textMuted,\n fontWeight: active ? 600 : 400,\n fontSize: 14,\n cursor: 'pointer',\n fontFamily: theme.fontFamily,\n marginBottom: -1,\n });\n\n const contentStyle: CSSProperties = {\n padding: '28px 28px',\n };\n\n const tabs: { key: Tab; label: string }[] = [\n { key: 'profile', label: 'Profile' },\n { key: 'security', label: 'Security' },\n { key: 'sessions', label: 'Sessions' },\n ];\n\n return (\n <div style={panelStyle}>\n <style>{`@keyframes authon-spin { to { transform: rotate(360deg); } }`}</style>\n <div style={tabBarStyle}>\n {tabs.map(({ key, label }) => (\n <button\n key={key}\n type=\"button\"\n style={tabBtnStyle(tab === key)}\n onClick={() => setTab(key)}\n >\n {label}\n </button>\n ))}\n </div>\n <div style={contentStyle}>\n {tab === 'profile' && <ProfileTab />}\n {tab === 'security' && <SecurityTab />}\n {tab === 'sessions' && <SessionsTab />}\n </div>\n </div>\n );\n}\n\nexport function UserProfile({ appearance }: UserProfileProps) {\n const { branding } = useBranding();\n const effectiveBranding = { ...branding, ...(appearance?.variables ?? {}) };\n\n return (\n <ThemeProvider branding={effectiveBranding} style={{ display: 'flex', justifyContent: 'center' }}>\n <UserProfilePanel />\n </ThemeProvider>\n );\n}\n","import type { OAuthProviderType } from '@authon/shared';\nimport { getProviderButtonConfig } from '@authon/js';\n\ninterface ProviderIconProps {\n provider: OAuthProviderType;\n size?: number;\n}\n\nexport function ProviderIcon({ provider, size = 20 }: ProviderIconProps) {\n const config = getProviderButtonConfig(provider);\n const svg = config.iconSvg\n .replace(/width=\"\\d+\"/, `width=\"${size}\"`)\n .replace(/height=\"\\d+\"/, `height=\"${size}\"`);\n\n return (\n <span\n style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n );\n}\n"],"mappings":"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","names":["import_react","import_react","import_shared","import_js","import_react","import_react","import_shared","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_shared","import_js","import_jsx_runtime","SecuredByAuthon","import_react","import_jsx_runtime","baseStyle","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_shared","import_js","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_js","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/AuthonProvider.tsx","../src/useAuthon.ts","../src/useUser.ts","../src/components/SignIn.tsx","../src/hooks/useBranding.ts","../src/components/shared/ThemeProvider.tsx","../src/components/shared/Input.tsx","../src/components/shared/Button.tsx","../src/components/shared/Divider.tsx","../src/components/shared/AuthChallengeForms.tsx","../src/components/shared/navigation.ts","../src/components/SignUp.tsx","../src/components/UserButton.tsx","../src/SignedIn.tsx","../src/SignedOut.tsx","../src/Protect.tsx","../src/SocialButton.tsx","../src/SocialButtons.tsx","../src/useAuthonMfa.ts","../src/useAuthonPasskeys.ts","../src/useAuthonPasswordless.ts","../src/useAuthonWeb3.ts","../src/useAuthonSessions.ts","../src/useOrganization.ts","../src/useOrganizationList.ts","../src/components/UserProfile.tsx","../src/components/shared/ProviderIcon.tsx"],"sourcesContent":["export { AuthonProvider } from './AuthonProvider';\nexport type { AuthonContextValue } from './AuthonProvider';\nexport { useAuthon } from './useAuthon';\nexport { useUser } from './useUser';\nexport { SignIn } from './SignIn';\nexport { SignUp } from './SignUp';\nexport { UserButton } from './UserButton';\nexport { SignedIn } from './SignedIn';\nexport { SignedOut } from './SignedOut';\nexport { Protect } from './Protect';\nexport { SocialButton } from './SocialButton';\nexport type { SocialButtonProps } from './SocialButton';\nexport { SocialButtons } from './SocialButtons';\nexport type { SocialButtonsProps } from './SocialButtons';\nexport { useAuthonMfa } from './useAuthonMfa';\nexport type { UseAuthonMfaReturn } from './useAuthonMfa';\nexport { useAuthonPasskeys } from './useAuthonPasskeys';\nexport type { UseAuthonPasskeysReturn } from './useAuthonPasskeys';\nexport { useAuthonPasswordless } from './useAuthonPasswordless';\nexport type { UseAuthonPasswordlessReturn } from './useAuthonPasswordless';\nexport { useAuthonWeb3 } from './useAuthonWeb3';\nexport type { UseAuthonWeb3Return, LinkWalletParams } from './useAuthonWeb3';\nexport { useAuthonSessions } from './useAuthonSessions';\nexport type { UseAuthonSessionsReturn } from './useAuthonSessions';\nexport { useOrganization } from './useOrganization';\nexport type { UseOrganizationReturn } from './useOrganization';\nexport { useOrganizationList } from './useOrganizationList';\nexport type { UseOrganizationListReturn } from './useOrganizationList';\nexport { useBranding } from './hooks/useBranding';\nexport type { BrandingState } from './hooks/useBranding';\nexport type { SignInProps } from './components/SignIn';\nexport type { SignUpProps } from './components/SignUp';\nexport type { UserButtonProps } from './components/UserButton';\nexport { UserProfile } from './components/UserProfile';\nexport type { UserProfileProps } from './components/UserProfile';\nexport { ThemeProvider } from './components/shared/ThemeProvider';\nexport { Button } from './components/shared/Button';\nexport type { ButtonProps, ButtonVariant, ButtonSize } from './components/shared/Button';\nexport { Input } from './components/shared/Input';\nexport type { InputProps } from './components/shared/Input';\nexport { Divider } from './components/shared/Divider';\nexport { ProviderIcon } from './components/shared/ProviderIcon';\n","import { createContext, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { Authon } from '@authon/js';\nimport type { AuthonConfig } from '@authon/js';\nimport type { AuthonUser, AuthonOrganization } from '@authon/shared';\n\nexport interface AuthonContextValue {\n isSignedIn: boolean;\n isLoading: boolean;\n user: AuthonUser | null;\n activeOrganization: AuthonOrganization | null;\n setActiveOrganization: (org: AuthonOrganization | null) => void;\n signOut: () => Promise<void>;\n openSignIn: () => Promise<void>;\n openSignUp: () => Promise<void>;\n getToken: () => string | null;\n client: Authon | null;\n}\n\nexport const AuthonContext = createContext<AuthonContextValue | null>(null);\n\ninterface AuthonProviderProps {\n publishableKey: string;\n children: ReactNode;\n config?: Omit<AuthonConfig, 'mode'>;\n}\n\ninterface SessionChangeSnapshot {\n user: AuthonUser | null;\n}\n\ntype SessionAwareAuthon = Authon & {\n waitUntilReady(): Promise<void>;\n onSessionChange(listener: (change: SessionChangeSnapshot) => void): () => void;\n};\n\nexport function AuthonProvider({ publishableKey, children, config }: AuthonProviderProps) {\n const [user, setUser] = useState<AuthonUser | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [activeOrganization, setActiveOrganization] = useState<AuthonOrganization | null>(null);\n const clientRef = useRef<Authon | null>(null);\n\n useEffect(() => {\n let active = true;\n let receivedSessionChange = false;\n const client = new Authon(publishableKey, config);\n const sessionClient = client as SessionAwareAuthon;\n clientRef.current = client;\n\n const unsubscribeSession = sessionClient.onSessionChange((change) => {\n if (!active) return;\n receivedSessionChange = true;\n setUser(change.user);\n setIsLoading(false);\n if (!change.user) setActiveOrganization(null);\n });\n\n client.on('error', () => {\n setIsLoading(false);\n });\n\n void sessionClient.waitUntilReady().then(() => {\n if (!active) return;\n if (!receivedSessionChange) setUser(client.getUser());\n setIsLoading(false);\n });\n\n return () => {\n active = false;\n unsubscribeSession();\n client.destroy();\n clientRef.current = null;\n };\n }, [publishableKey]);\n\n const signOut = useCallback(async () => {\n await clientRef.current?.signOut();\n }, []);\n\n const openSignIn = useCallback(async () => {\n await clientRef.current?.openSignIn();\n }, []);\n\n const openSignUp = useCallback(async () => {\n await clientRef.current?.openSignUp();\n }, []);\n\n const getToken = useCallback(() => {\n return clientRef.current?.getToken() ?? null;\n }, []);\n\n const value = useMemo<AuthonContextValue>(\n () => ({\n isSignedIn: !!user,\n isLoading,\n user,\n activeOrganization,\n setActiveOrganization,\n signOut,\n openSignIn,\n openSignUp,\n getToken,\n client: clientRef.current,\n }),\n [user, isLoading, activeOrganization, signOut, openSignIn, openSignUp, getToken],\n );\n\n return <AuthonContext.Provider value={value}>{children}</AuthonContext.Provider>;\n}\n","import { useContext } from 'react';\nimport { AuthonContext } from './AuthonProvider';\nimport type { AuthonContextValue } from './AuthonProvider';\n\nexport function useAuthon(): AuthonContextValue {\n const ctx = useContext(AuthonContext);\n if (!ctx) {\n throw new Error('useAuthon must be used within an <AuthonProvider>');\n }\n return ctx;\n}\n","import type { AuthonUser } from '@authon/shared';\nimport { useAuthon } from './useAuthon';\n\nexport function useUser(): { user: AuthonUser | null; isLoading: boolean } {\n const { user, isLoading } = useAuthon();\n return { user, isLoading };\n}\n","import { useRef, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { BrandingConfig, OAuthProviderType } from '@authon/shared';\nimport { PROVIDER_COLORS, PROVIDER_DISPLAY_NAMES } from '@authon/shared';\nimport { AuthonMfaRequiredError, getProviderButtonConfig } from '@authon/js';\nimport { useAuthon } from '../useAuthon';\nimport { useBranding } from '../hooks/useBranding';\nimport { ThemeProvider, useTheme } from './shared/ThemeProvider';\nimport { Input } from './shared/Input';\nimport { Button } from './shared/Button';\nimport { Divider } from './shared/Divider';\nimport { MfaForm, VerificationForm } from './shared/AuthChallengeForms';\nimport { navigateTo } from './shared/navigation';\n\nexport interface SignInProps {\n appearance?: { variables?: Partial<BrandingConfig> };\n afterSignInUrl?: string;\n onSignIn?: () => void;\n onForgotPassword?: () => void;\n onNavigateSignUp?: () => void;\n}\n\ntype SignInStep =\n | { kind: 'credentials' }\n | { kind: 'verification'; email: string }\n | { kind: 'mfa'; mfaToken: string };\n\nfunction SignInCard({ afterSignInUrl, onSignIn, onForgotPassword, onNavigateSignUp }: Omit<SignInProps, 'appearance'>) {\n const theme = useTheme();\n const { client } = useAuthon();\n const { branding, providers, isLoaded } = useBranding();\n\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [loading, setLoading] = useState(false);\n const [oauthLoading, setOauthLoading] = useState<string | null>(null);\n const [error, setError] = useState('');\n const [step, setStep] = useState<SignInStep>({ kind: 'credentials' });\n const [fieldErrors, setFieldErrors] = useState<{ email?: string; password?: string }>({});\n const authAttemptPending = useRef(false);\n const completed = useRef(false);\n\n const completeSignIn = () => {\n if (completed.current) return;\n completed.current = true;\n if (afterSignInUrl) navigateTo(afterSignInUrl);\n onSignIn?.();\n };\n\n const validate = () => {\n const errs: typeof fieldErrors = {};\n if (!email.trim()) errs.email = 'Email is required';\n else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) errs.email = 'Invalid email address';\n if (!password) errs.password = 'Password is required';\n setFieldErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const handleSubmit = async () => {\n if (authAttemptPending.current || !validate() || !client) return;\n authAttemptPending.current = true;\n setLoading(true);\n setError('');\n try {\n const result = await client.signInWithEmail(email, password);\n if ('needsVerification' in result && result.needsVerification) {\n setStep({ kind: 'verification', email: result.email });\n return;\n }\n completeSignIn();\n } catch (submitError) {\n if (submitError instanceof AuthonMfaRequiredError) {\n setStep({ kind: 'mfa', mfaToken: submitError.mfaToken });\n } else {\n setError(submitError instanceof Error && submitError.message ? submitError.message : 'Sign in failed');\n }\n } finally {\n authAttemptPending.current = false;\n setLoading(false);\n }\n };\n\n const backToCredentials = () => {\n setError('');\n setStep({ kind: 'credentials' });\n };\n\n const handleOAuth = async (provider: OAuthProviderType) => {\n if (!client || authAttemptPending.current) return;\n authAttemptPending.current = true;\n setOauthLoading(provider);\n setError('');\n try {\n await client.signInWithOAuth(provider);\n } catch (e: any) {\n setError(e?.message ?? 'OAuth sign in failed');\n } finally {\n authAttemptPending.current = false;\n setOauthLoading(null);\n }\n };\n\n const cardStyle: CSSProperties = {\n width: '100%',\n maxWidth: 440,\n background: theme.bg,\n borderRadius: `calc(${theme.borderRadius} + 4px)`,\n boxShadow: '0 4px 32px rgba(0,0,0,0.10)',\n padding: '40px 36px 32px',\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n gap: 20,\n fontFamily: theme.fontFamily,\n };\n\n const logoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 10,\n };\n\n const titleStyle: CSSProperties = {\n fontSize: 24,\n fontWeight: 700,\n color: theme.text,\n textAlign: 'center',\n letterSpacing: '-0.3px',\n };\n\n const subtitleStyle: CSSProperties = {\n fontSize: 14,\n color: theme.textMuted,\n textAlign: 'center',\n marginTop: -12,\n };\n\n const errorBoxStyle: CSSProperties = {\n padding: '10px 14px',\n borderRadius: theme.borderRadius,\n background: '#fef2f2',\n border: '1px solid #fecaca',\n color: '#dc2626',\n fontSize: 13,\n };\n\n const forgotStyle: CSSProperties = {\n textAlign: 'right',\n marginTop: -12,\n };\n\n const linkStyle: CSSProperties = {\n fontSize: 13,\n color: theme.primaryStart,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n fontFamily: theme.fontFamily,\n textDecoration: 'none',\n };\n\n const footerStyle: CSSProperties = {\n textAlign: 'center',\n fontSize: 14,\n color: theme.textMuted,\n paddingTop: 4,\n };\n\n const eyeIconPath = showPassword\n ? 'M17.94 17.94A10.07 10.07 0 0112 20c-7 0-11-8-11-8a18.45 18.45 0 015.06-5.94M9.9 4.24A9.12 9.12 0 0112 4c7 0 11 8 11 8a18.5 18.5 0 01-2.16 3.19m-6.72-1.07a3 3 0 11-4.24-4.24 M1 1l22 22'\n : 'M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z M12 9a3 3 0 100 6 3 3 0 000-6z';\n\n const showEmailPw = branding.showEmailPassword !== false;\n const showDivider = branding.showDivider !== false && providers.length > 0 && showEmailPw;\n\n const providersToShow = providers.filter(\n (p) => !(branding.hiddenProviders ?? []).includes(p),\n );\n\n if (!isLoaded) {\n return (\n <div style={{ ...cardStyle, alignItems: 'center', justifyContent: 'center', minHeight: 200 }}>\n <span\n style={{\n width: 28,\n height: 28,\n border: `3px solid ${theme.primaryStart}33`,\n borderTopColor: theme.primaryStart,\n borderRadius: '50%',\n display: 'inline-block',\n animation: 'authon-spin 0.7s linear infinite',\n }}\n />\n </div>\n );\n }\n\n if (step.kind === 'verification') {\n return (\n <div style={cardStyle}>\n <VerificationForm\n email={step.email}\n backLabel=\"Back to sign in\"\n onVerify={async (code) => {\n if (!client) throw new Error('Sign in is unavailable');\n await client.verifyEmail(step.email, code);\n completeSignIn();\n }}\n onResend={async () => {\n if (!client) throw new Error('Sign in is unavailable');\n await client.resendVerificationCode(step.email);\n }}\n onBack={backToCredentials}\n />\n </div>\n );\n }\n\n if (step.kind === 'mfa') {\n return (\n <div style={cardStyle}>\n <MfaForm\n onVerify={async (code) => {\n if (!client) throw new Error('Sign in is unavailable');\n await client.verifyMfa(step.mfaToken, code);\n completeSignIn();\n }}\n onBack={backToCredentials}\n />\n </div>\n );\n }\n\n return (\n <div style={cardStyle}>\n <div style={logoStyle}>\n {branding.logoDataUrl && (\n <img src={branding.logoDataUrl} alt={branding.brandName ?? 'Logo'} style={{ height: 40, objectFit: 'contain' }} />\n )}\n <h1 style={titleStyle}>Sign in</h1>\n {branding.brandName && (\n <p style={subtitleStyle}>to {branding.brandName}</p>\n )}\n </div>\n\n {error && <div role=\"alert\" style={errorBoxStyle}>{error}</div>}\n\n {providersToShow.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n {providersToShow.length <= 3 ? (\n providersToShow.map((provider) => (\n <OAuthButton\n key={provider}\n provider={provider}\n loading={oauthLoading === provider}\n disabled={!!oauthLoading || loading}\n onClick={() => handleOAuth(provider)}\n borderRadius={theme.borderRadius}\n />\n ))\n ) : (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 10, justifyContent: 'center' }}>\n {providersToShow.map((provider) => (\n <CompactOAuthButton\n key={provider}\n provider={provider}\n loading={oauthLoading === provider}\n disabled={!!oauthLoading || loading}\n onClick={() => handleOAuth(provider)}\n borderRadius={theme.borderRadius}\n />\n ))}\n </div>\n )}\n </div>\n )}\n\n {showDivider && <Divider />}\n\n {showEmailPw && (\n <>\n <Input\n label=\"Email\"\n type=\"email\"\n placeholder=\"you@example.com\"\n value={email}\n onChange={setEmail}\n error={fieldErrors.email}\n autoComplete=\"email\"\n />\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n <Input\n label=\"Password\"\n type={showPassword ? 'text' : 'password'}\n placeholder=\"••••••••\"\n value={password}\n onChange={setPassword}\n error={fieldErrors.password}\n autoComplete=\"current-password\"\n rightElement={\n <button\n type=\"button\"\n onClick={() => setShowPassword((v) => !v)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', color: theme.textMuted }}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={eyeIconPath} />\n </svg>\n </button>\n }\n />\n {onForgotPassword && (\n <div style={forgotStyle}>\n <button type=\"button\" style={linkStyle} onClick={onForgotPassword}>Forgot password?</button>\n </div>\n )}\n </div>\n\n <Button\n variant=\"primary\"\n fullWidth\n loading={loading}\n disabled={!!oauthLoading}\n onClick={handleSubmit}\n >\n Sign in\n </Button>\n </>\n )}\n\n <div style={footerStyle}>\n Don't have an account?{' '}\n <button\n type=\"button\"\n style={linkStyle}\n onClick={onNavigateSignUp}\n >\n Sign up\n </button>\n </div>\n\n {branding.showSecuredBy !== false && (\n <SecuredByAuthon primaryStart={theme.primaryStart} textMuted={theme.textMuted} />\n )}\n\n {branding.termsUrl || branding.privacyUrl ? (\n <div style={{ textAlign: 'center', fontSize: 11, color: theme.textMuted, marginTop: -8 }}>\n {branding.termsUrl && (\n <a href={branding.termsUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: theme.textMuted }}>Terms</a>\n )}\n {branding.termsUrl && branding.privacyUrl && ' · '}\n {branding.privacyUrl && (\n <a href={branding.privacyUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: theme.textMuted }}>Privacy</a>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\ninterface OAuthButtonProps {\n provider: OAuthProviderType;\n loading: boolean;\n disabled: boolean;\n onClick: () => void;\n borderRadius: string;\n}\n\nfunction OAuthButton({ provider, loading, disabled, onClick, borderRadius }: OAuthButtonProps) {\n const [hovered, setHovered] = useState(false);\n const colors = PROVIDER_COLORS[provider] ?? { bg: '#333', text: '#fff' };\n const name = PROVIDER_DISPLAY_NAMES[provider] ?? provider;\n const config = getProviderButtonConfig(provider);\n const needsBorder = colors.bg.toLowerCase() === '#ffffff';\n\n const style: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n height: 44,\n paddingLeft: 16,\n paddingRight: 16,\n borderRadius,\n background: colors.bg,\n color: colors.text,\n border: needsBorder ? '1.5px solid #dadce0' : 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontSize: 15,\n fontWeight: 600,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n justifyContent: 'center',\n opacity: disabled ? 0.6 : hovered ? 0.88 : 1,\n transition: 'opacity 0.15s',\n boxSizing: 'border-box',\n };\n\n return (\n <button\n type=\"button\"\n style={style}\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-label={`Continue with ${name}`}\n >\n {loading ? (\n <span style={{ width: 18, height: 18, border: `2px solid ${colors.text}`, borderTopColor: 'transparent', borderRadius: '50%', display: 'inline-block', animation: 'authon-spin 0.6s linear infinite' }} />\n ) : (\n <>\n <span style={{ display: 'flex', alignItems: 'center' }} dangerouslySetInnerHTML={{ __html: config.iconSvg }} />\n <span>Continue with {name}</span>\n </>\n )}\n </button>\n );\n}\n\nfunction CompactOAuthButton({ provider, loading, disabled, onClick, borderRadius }: OAuthButtonProps) {\n const [hovered, setHovered] = useState(false);\n const colors = PROVIDER_COLORS[provider] ?? { bg: '#333', text: '#fff' };\n const name = PROVIDER_DISPLAY_NAMES[provider] ?? provider;\n const config = getProviderButtonConfig(provider);\n const needsBorder = colors.bg.toLowerCase() === '#ffffff';\n\n const style: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 48,\n height: 48,\n borderRadius,\n background: colors.bg,\n border: needsBorder ? '1.5px solid #dadce0' : 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : hovered ? 0.85 : 1,\n transition: 'opacity 0.15s',\n padding: 0,\n };\n\n return (\n <button\n type=\"button\"\n style={style}\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-label={`Continue with ${name}`}\n >\n {loading ? (\n <span style={{ width: 18, height: 18, border: `2px solid ${colors.text}`, borderTopColor: 'transparent', borderRadius: '50%', display: 'inline-block', animation: 'authon-spin 0.6s linear infinite' }} />\n ) : (\n <span style={{ display: 'flex' }} dangerouslySetInnerHTML={{ __html: config.iconSvg }} />\n )}\n </button>\n );\n}\n\nfunction SecuredByAuthon({ primaryStart, textMuted }: { primaryStart: string; textMuted: string }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 5, marginTop: -8 }}>\n <svg width=\"12\" height=\"14\" viewBox=\"0 0 12 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 0L0.5 2.5V6.5C0.5 9.7 2.9 12.7 6 13.5C9.1 12.7 11.5 9.7 11.5 6.5V2.5L6 0Z\" fill={primaryStart} opacity=\"0.85\"/>\n <path d=\"M4 7L5.5 8.5L8.5 5.5\" stroke=\"white\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n <span style={{ fontSize: 11, color: textMuted }}>\n Secured by{' '}\n <a href=\"https://authon.dev\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: primaryStart, textDecoration: 'none', fontWeight: 600 }}>\n Authon\n </a>\n </span>\n </div>\n );\n}\n\nexport function SignIn({ appearance, afterSignInUrl, onSignIn, onForgotPassword, onNavigateSignUp }: SignInProps) {\n const { branding, isLoaded } = useBranding();\n\n const effectiveBranding = isLoaded ? { ...branding, ...(appearance?.variables ?? {}) } : branding;\n\n return (\n <ThemeProvider branding={effectiveBranding} overrides={appearance?.variables} style={{ display: 'flex', justifyContent: 'center' }}>\n <style>{`@keyframes authon-spin { to { transform: rotate(360deg); } }`}</style>\n <SignInCard\n afterSignInUrl={afterSignInUrl}\n onSignIn={onSignIn}\n onForgotPassword={onForgotPassword}\n onNavigateSignUp={onNavigateSignUp}\n />\n </ThemeProvider>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { BrandingConfig, OAuthProviderType } from '@authon/shared';\nimport { DEFAULT_BRANDING } from '@authon/shared';\nimport { useAuthon } from '../useAuthon';\n\nexport interface BrandingState {\n branding: BrandingConfig;\n providers: OAuthProviderType[];\n isLoaded: boolean;\n}\n\nconst cache = new Map<string, BrandingState>();\n\nexport function useBranding(): BrandingState {\n const { client } = useAuthon();\n const [state, setState] = useState<BrandingState>(() => {\n const key = (client as any)?.publishableKey as string | undefined;\n return cache.get(key ?? '') ?? { branding: DEFAULT_BRANDING, providers: [], isLoaded: false };\n });\n const fetchedRef = useRef(false);\n\n const fetchBranding = useCallback(async () => {\n if (!client || fetchedRef.current) return;\n\n const key = (client as any).publishableKey as string;\n const cached = cache.get(key);\n if (cached) {\n setState(cached);\n return;\n }\n\n fetchedRef.current = true;\n try {\n const providers = await client.getProviders();\n const apiUrl: string = (client as any).config?.apiUrl ?? 'https://api.authon.dev';\n const res = await fetch(`${apiUrl}/v1/auth/branding`, {\n headers: { 'x-api-key': key },\n credentials: 'include',\n });\n let branding: BrandingConfig = DEFAULT_BRANDING;\n if (res.ok) {\n const data = await res.json();\n branding = { ...DEFAULT_BRANDING, ...data };\n }\n const next: BrandingState = { branding, providers, isLoaded: true };\n cache.set(key, next);\n setState(next);\n } catch {\n const fallback: BrandingState = { branding: DEFAULT_BRANDING, providers: [], isLoaded: true };\n setState(fallback);\n }\n }, [client]);\n\n useEffect(() => {\n fetchBranding();\n }, [fetchBranding]);\n\n return state;\n}\n","import { createContext, useContext, useMemo } from 'react';\nimport type { ReactNode, CSSProperties } from 'react';\nimport type { BrandingConfig } from '@authon/shared';\nimport { DEFAULT_BRANDING } from '@authon/shared';\n\ninterface ResolvedTheme {\n primaryStart: string;\n primaryEnd: string;\n bg: string;\n text: string;\n textMuted: string;\n border: string;\n borderRadius: string;\n fontFamily: string;\n inputStyle: 'outline' | 'filled';\n}\n\nconst ThemeContext = createContext<ResolvedTheme | null>(null);\n\nexport function useTheme(): ResolvedTheme {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n return resolveTheme(DEFAULT_BRANDING, false);\n }\n return ctx;\n}\n\nfunction resolveTheme(branding: BrandingConfig, _dark: boolean): ResolvedTheme {\n const radius = branding.borderRadius ?? DEFAULT_BRANDING.borderRadius ?? 12;\n return {\n primaryStart: branding.primaryColorStart ?? DEFAULT_BRANDING.primaryColorStart ?? '#7c3aed',\n primaryEnd: branding.primaryColorEnd ?? DEFAULT_BRANDING.primaryColorEnd ?? '#4f46e5',\n bg: branding.lightBg ?? DEFAULT_BRANDING.lightBg ?? '#ffffff',\n text: branding.lightText ?? DEFAULT_BRANDING.lightText ?? '#111827',\n textMuted: '#6b7280',\n border: '#e5e7eb',\n borderRadius: `${radius}px`,\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n inputStyle: 'outline',\n };\n}\n\ninterface ThemeProviderProps {\n branding: BrandingConfig;\n children: ReactNode;\n overrides?: Partial<BrandingConfig>;\n style?: CSSProperties;\n className?: string;\n}\n\nexport function ThemeProvider({ branding, children, overrides, style, className }: ThemeProviderProps) {\n const merged = useMemo(() => ({ ...branding, ...overrides }), [branding, overrides]);\n const theme = useMemo(() => resolveTheme(merged, false), [merged]);\n\n const cssVars = {\n '--authon-primary-start': theme.primaryStart,\n '--authon-primary-end': theme.primaryEnd,\n '--authon-bg': theme.bg,\n '--authon-text': theme.text,\n '--authon-text-muted': theme.textMuted,\n '--authon-border': theme.border,\n '--authon-radius': theme.borderRadius,\n '--authon-font': theme.fontFamily,\n } as CSSProperties;\n\n return (\n <ThemeContext.Provider value={theme}>\n <div\n className={className}\n style={{\n fontFamily: theme.fontFamily,\n color: theme.text,\n ...cssVars,\n ...style,\n }}\n >\n {children}\n </div>\n </ThemeContext.Provider>\n );\n}\n","import { useId, useState } from 'react';\nimport type { CSSProperties, InputHTMLAttributes } from 'react';\nimport { useTheme } from './ThemeProvider';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n label?: string;\n error?: string;\n hint?: string;\n inputStyle?: 'outline' | 'filled';\n onChange?: (value: string) => void;\n rightElement?: React.ReactNode;\n}\n\nexport function Input({\n label,\n error,\n hint,\n inputStyle,\n onChange,\n rightElement,\n style: userStyle,\n ...rest\n}: InputProps) {\n const theme = useTheme();\n const generatedId = useId();\n const [focused, setFocused] = useState(false);\n const resolvedStyle = inputStyle ?? theme.inputStyle;\n const inputId = rest.id ?? generatedId;\n\n const wrapperStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n width: '100%',\n };\n\n const labelStyle: CSSProperties = {\n fontSize: 13,\n fontWeight: 500,\n color: error ? '#ef4444' : theme.text,\n };\n\n const inputContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n };\n\n const baseInputStyle: CSSProperties = {\n width: '100%',\n height: 44,\n paddingLeft: 14,\n paddingRight: rightElement ? 44 : 14,\n borderRadius: theme.borderRadius,\n fontFamily: theme.fontFamily,\n fontSize: 15,\n color: theme.text,\n outline: 'none',\n transition: 'border-color 0.15s, box-shadow 0.15s, background 0.15s',\n boxSizing: 'border-box',\n ...userStyle,\n };\n\n let inputVariantStyle: CSSProperties = {};\n if (resolvedStyle === 'filled') {\n inputVariantStyle = {\n background: focused ? `${theme.primaryStart}0d` : '#f3f4f6',\n border: `1.5px solid ${error ? '#ef4444' : focused ? theme.primaryStart : 'transparent'}`,\n boxShadow: focused && !error ? `0 0 0 3px ${theme.primaryStart}22` : 'none',\n };\n } else {\n inputVariantStyle = {\n background: theme.bg,\n border: `1.5px solid ${error ? '#ef4444' : focused ? theme.primaryStart : theme.border}`,\n boxShadow: focused && !error ? `0 0 0 3px ${theme.primaryStart}22` : 'none',\n };\n }\n\n const rightStyle: CSSProperties = {\n position: 'absolute',\n right: 12,\n display: 'flex',\n alignItems: 'center',\n color: theme.textMuted,\n };\n\n const hintStyle: CSSProperties = {\n fontSize: 12,\n color: error ? '#ef4444' : theme.textMuted,\n };\n\n return (\n <div style={wrapperStyle}>\n {label && <label htmlFor={inputId} style={labelStyle}>{label}</label>}\n <div style={inputContainerStyle}>\n <input\n {...rest}\n id={inputId}\n style={{ ...baseInputStyle, ...inputVariantStyle }}\n onFocus={(e) => {\n setFocused(true);\n rest.onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n rest.onBlur?.(e);\n }}\n onChange={(e) => onChange?.(e.target.value)}\n />\n {rightElement && <div style={rightStyle}>{rightElement}</div>}\n </div>\n {(error || hint) && <span style={hintStyle}>{error ?? hint}</span>}\n </div>\n );\n}\n","import { useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useTheme } from './ThemeProvider';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'social' | 'ghost';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n loading?: boolean;\n disabled?: boolean;\n children: ReactNode;\n onClick?: () => void | Promise<void>;\n type?: 'button' | 'submit' | 'reset';\n style?: CSSProperties;\n}\n\nconst SPINNER_STYLE: CSSProperties = {\n display: 'inline-block',\n width: 16,\n height: 16,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'authon-spin 0.6s linear infinite',\n flexShrink: 0,\n};\n\nexport function Button({\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n loading = false,\n disabled = false,\n children,\n onClick,\n type = 'button',\n style: userStyle,\n}: ButtonProps) {\n const theme = useTheme();\n const [hovered, setHovered] = useState(false);\n\n const sizeMap: Record<ButtonSize, CSSProperties> = {\n sm: { height: 36, paddingLeft: 12, paddingRight: 12, fontSize: 13 },\n md: { height: 44, paddingLeft: 16, paddingRight: 16, fontSize: 15 },\n lg: { height: 52, paddingLeft: 20, paddingRight: 20, fontSize: 16 },\n };\n\n const base: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n borderRadius: theme.borderRadius,\n fontFamily: theme.fontFamily,\n fontWeight: 600,\n border: 'none',\n cursor: disabled || loading ? 'not-allowed' : 'pointer',\n transition: 'opacity 0.15s, transform 0.1s',\n width: fullWidth ? '100%' : undefined,\n opacity: disabled ? 0.55 : hovered && !disabled && !loading ? 0.88 : 1,\n transform: hovered && !disabled && !loading ? 'translateY(-1px)' : undefined,\n userSelect: 'none',\n ...sizeMap[size],\n };\n\n let variantStyle: CSSProperties = {};\n switch (variant) {\n case 'primary':\n variantStyle = {\n background: `linear-gradient(135deg, ${theme.primaryStart}, ${theme.primaryEnd})`,\n color: '#ffffff',\n boxShadow: hovered ? `0 4px 16px ${theme.primaryStart}55` : '0 2px 8px rgba(0,0,0,0.1)',\n };\n break;\n case 'secondary':\n variantStyle = {\n background: `${theme.primaryStart}18`,\n color: theme.primaryStart,\n };\n break;\n case 'outline':\n variantStyle = {\n background: 'transparent',\n color: theme.text,\n border: `1.5px solid ${theme.border}`,\n };\n break;\n case 'ghost':\n variantStyle = {\n background: 'transparent',\n color: theme.textMuted,\n };\n break;\n case 'social':\n variantStyle = {\n background: theme.bg,\n color: theme.text,\n border: `1.5px solid ${theme.border}`,\n };\n break;\n }\n\n return (\n <>\n <style>{`@keyframes authon-spin { to { transform: rotate(360deg); } }`}</style>\n <button\n type={type}\n disabled={disabled || loading}\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{ ...base, ...variantStyle, ...userStyle }}\n >\n {loading ? <span style={SPINNER_STYLE} /> : children}\n </button>\n </>\n );\n}\n","import type { CSSProperties } from 'react';\nimport { useTheme } from './ThemeProvider';\n\ninterface DividerProps {\n label?: string;\n}\n\nexport function Divider({ label = 'Or continue with' }: DividerProps) {\n const theme = useTheme();\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n margin: '4px 0',\n };\n\n const lineStyle: CSSProperties = {\n flex: 1,\n height: 1,\n background: theme.border,\n };\n\n const textStyle: CSSProperties = {\n fontSize: 13,\n color: theme.textMuted,\n whiteSpace: 'nowrap',\n fontWeight: 400,\n };\n\n return (\n <div style={containerStyle}>\n <div style={lineStyle} />\n <span style={textStyle}>{label}</span>\n <div style={lineStyle} />\n </div>\n );\n}\n","import { useId, useRef, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport { Button } from './Button';\nimport { Input } from './Input';\nimport { useTheme } from './ThemeProvider';\n\ninterface CodeFormProps {\n title: string;\n description: string;\n label: string;\n submitLabel: string;\n backLabel: string;\n onSubmit: (code: string) => Promise<void>;\n onBack: () => void;\n onResend?: () => Promise<void>;\n}\n\nfunction errorMessage(error: unknown, fallback: string): string {\n return error instanceof Error && error.message ? error.message : fallback;\n}\n\nfunction CodeForm({\n title,\n description,\n label,\n submitLabel,\n backLabel,\n onSubmit,\n onBack,\n onResend,\n}: CodeFormProps) {\n const theme = useTheme();\n const [code, setCode] = useState('');\n const [error, setError] = useState('');\n const [status, setStatus] = useState('');\n const [loading, setLoading] = useState(false);\n const [resending, setResending] = useState(false);\n const errorId = useId();\n const submitPending = useRef(false);\n const resendPending = useRef(false);\n\n const handleSubmit = async () => {\n if (submitPending.current) return;\n if (!code.trim()) {\n setError(`${label} is required`);\n return;\n }\n submitPending.current = true;\n setLoading(true);\n setError('');\n setStatus('');\n try {\n await onSubmit(code.trim());\n } catch (submitError) {\n setError(errorMessage(submitError, 'Verification failed'));\n } finally {\n submitPending.current = false;\n setLoading(false);\n }\n };\n\n const handleResend = async () => {\n if (!onResend || resendPending.current) return;\n resendPending.current = true;\n setResending(true);\n setError('');\n setStatus('');\n try {\n await onResend();\n setStatus('Verification code sent');\n } catch (resendError) {\n setError(errorMessage(resendError, 'Could not resend verification code'));\n } finally {\n resendPending.current = false;\n setResending(false);\n }\n };\n\n const titleStyle: CSSProperties = {\n margin: 0,\n fontSize: 24,\n fontWeight: 700,\n color: theme.text,\n textAlign: 'center',\n letterSpacing: '-0.3px',\n };\n\n const descriptionStyle: CSSProperties = {\n margin: '-8px 0 0',\n fontSize: 14,\n lineHeight: 1.5,\n color: theme.textMuted,\n textAlign: 'center',\n };\n\n const errorStyle: CSSProperties = {\n padding: '10px 14px',\n borderRadius: theme.borderRadius,\n background: '#fef2f2',\n border: '1px solid #fecaca',\n color: '#dc2626',\n fontSize: 13,\n };\n\n const statusStyle: CSSProperties = {\n padding: '10px 14px',\n borderRadius: theme.borderRadius,\n background: '#f0fdf4',\n border: '1px solid #bbf7d0',\n color: '#15803d',\n fontSize: 13,\n };\n\n return (\n <>\n <h1 style={titleStyle}>{title}</h1>\n <p style={descriptionStyle}>{description}</p>\n {error && <div id={errorId} role=\"alert\" style={errorStyle}>{error}</div>}\n {status && <div role=\"status\" aria-live=\"polite\" style={statusStyle}>{status}</div>}\n <Input\n label={label}\n value={code}\n onChange={setCode}\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n disabled={loading}\n aria-invalid={!!error}\n aria-describedby={error ? errorId : undefined}\n />\n <Button\n variant=\"primary\"\n fullWidth\n loading={loading}\n disabled={resending}\n onClick={handleSubmit}\n >\n {submitLabel}\n </Button>\n {onResend && (\n <Button\n variant=\"outline\"\n fullWidth\n loading={resending}\n disabled={loading}\n onClick={handleResend}\n >\n Resend code\n </Button>\n )}\n <Button\n variant=\"ghost\"\n fullWidth\n disabled={loading || resending}\n onClick={onBack}\n >\n {backLabel}\n </Button>\n </>\n );\n}\n\ninterface VerificationFormProps {\n email: string;\n backLabel: string;\n onVerify: (code: string) => Promise<void>;\n onResend: () => Promise<void>;\n onBack: () => void;\n}\n\nexport function VerificationForm({\n email,\n backLabel,\n onVerify,\n onResend,\n onBack,\n}: VerificationFormProps) {\n return (\n <CodeForm\n title=\"Verify your email\"\n description={`Enter the verification code sent to ${email}.`}\n label=\"Verification code\"\n submitLabel=\"Verify email\"\n backLabel={backLabel}\n onSubmit={onVerify}\n onResend={onResend}\n onBack={onBack}\n />\n );\n}\n\ninterface MfaFormProps {\n onVerify: (code: string) => Promise<void>;\n onBack: () => void;\n}\n\nexport function MfaForm({ onVerify, onBack }: MfaFormProps) {\n return (\n <CodeForm\n title=\"Two-factor authentication\"\n description=\"Enter the code from your authenticator app.\"\n label=\"Authenticator code\"\n submitLabel=\"Verify code\"\n backLabel=\"Back to sign in\"\n onSubmit={onVerify}\n onBack={onBack}\n />\n );\n}\n","export function navigateTo(url: string): void {\n window.location.assign(url);\n}\n","import { useRef, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { BrandingConfig, OAuthProviderType } from '@authon/shared';\nimport { PROVIDER_COLORS, PROVIDER_DISPLAY_NAMES } from '@authon/shared';\nimport { getProviderButtonConfig } from '@authon/js';\nimport { useAuthon } from '../useAuthon';\nimport { useBranding } from '../hooks/useBranding';\nimport { ThemeProvider, useTheme } from './shared/ThemeProvider';\nimport { Input } from './shared/Input';\nimport { Button } from './shared/Button';\nimport { Divider } from './shared/Divider';\nimport { VerificationForm } from './shared/AuthChallengeForms';\nimport { navigateTo } from './shared/navigation';\n\nexport interface SignUpProps {\n appearance?: { variables?: Partial<BrandingConfig> };\n afterSignUpUrl?: string;\n onSignUp?: () => void;\n onNavigateSignIn?: () => void;\n}\n\nfunction SignUpCard({ afterSignUpUrl, onSignUp, onNavigateSignIn }: Omit<SignUpProps, 'appearance'>) {\n const theme = useTheme();\n const { client } = useAuthon();\n const { branding, providers, isLoaded } = useBranding();\n\n const [displayName, setDisplayName] = useState('');\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [loading, setLoading] = useState(false);\n const [oauthLoading, setOauthLoading] = useState<string | null>(null);\n const [error, setError] = useState('');\n const [verificationEmail, setVerificationEmail] = useState<string | null>(null);\n const [fieldErrors, setFieldErrors] = useState<{\n displayName?: string;\n email?: string;\n password?: string;\n confirmPassword?: string;\n }>({});\n const authAttemptPending = useRef(false);\n const completed = useRef(false);\n\n const completeSignUp = () => {\n if (completed.current) return;\n completed.current = true;\n if (afterSignUpUrl) navigateTo(afterSignUpUrl);\n onSignUp?.();\n };\n\n const validate = () => {\n const errs: typeof fieldErrors = {};\n if (!email.trim()) errs.email = 'Email is required';\n else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) errs.email = 'Invalid email address';\n if (!password) errs.password = 'Password is required';\n else if (password.length < 8) errs.password = 'Password must be at least 8 characters';\n if (confirmPassword !== password) errs.confirmPassword = 'Passwords do not match';\n setFieldErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const handleSubmit = async () => {\n if (authAttemptPending.current || !validate() || !client) return;\n authAttemptPending.current = true;\n setLoading(true);\n setError('');\n try {\n const result = await client.signUpWithEmail(email, password, displayName ? { displayName } : undefined);\n if ('needsVerification' in result && result.needsVerification) {\n setVerificationEmail(result.email);\n return;\n }\n completeSignUp();\n } catch (submitError) {\n setError(submitError instanceof Error && submitError.message ? submitError.message : 'Sign up failed');\n } finally {\n authAttemptPending.current = false;\n setLoading(false);\n }\n };\n\n const handleOAuth = async (provider: OAuthProviderType) => {\n if (!client || authAttemptPending.current) return;\n authAttemptPending.current = true;\n setOauthLoading(provider);\n setError('');\n try {\n await client.signInWithOAuth(provider);\n } catch (e: any) {\n setError(e?.message ?? 'OAuth sign in failed');\n } finally {\n authAttemptPending.current = false;\n setOauthLoading(null);\n }\n };\n\n const cardStyle: CSSProperties = {\n width: '100%',\n maxWidth: 440,\n background: theme.bg,\n borderRadius: `calc(${theme.borderRadius} + 4px)`,\n boxShadow: '0 4px 32px rgba(0,0,0,0.10)',\n padding: '40px 36px 32px',\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n gap: 20,\n fontFamily: theme.fontFamily,\n };\n\n const logoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 10,\n };\n\n const titleStyle: CSSProperties = {\n fontSize: 24,\n fontWeight: 700,\n color: theme.text,\n textAlign: 'center',\n letterSpacing: '-0.3px',\n };\n\n const subtitleStyle: CSSProperties = {\n fontSize: 14,\n color: theme.textMuted,\n textAlign: 'center',\n marginTop: -12,\n };\n\n const errorBoxStyle: CSSProperties = {\n padding: '10px 14px',\n borderRadius: theme.borderRadius,\n background: '#fef2f2',\n border: '1px solid #fecaca',\n color: '#dc2626',\n fontSize: 13,\n };\n\n const linkStyle: CSSProperties = {\n fontSize: 13,\n color: theme.primaryStart,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n fontFamily: theme.fontFamily,\n textDecoration: 'none',\n };\n\n const footerStyle: CSSProperties = {\n textAlign: 'center',\n fontSize: 14,\n color: theme.textMuted,\n paddingTop: 4,\n };\n\n const showEmailPw = branding.showEmailPassword !== false;\n const showDivider = branding.showDivider !== false && providers.length > 0 && showEmailPw;\n\n const providersToShow = providers.filter(\n (p) => !(branding.hiddenProviders ?? []).includes(p),\n );\n\n if (!isLoaded) {\n return (\n <div style={{ ...cardStyle, alignItems: 'center', justifyContent: 'center', minHeight: 200 }}>\n <span\n style={{\n width: 28,\n height: 28,\n border: `3px solid ${theme.primaryStart}33`,\n borderTopColor: theme.primaryStart,\n borderRadius: '50%',\n display: 'inline-block',\n animation: 'authon-spin 0.7s linear infinite',\n }}\n />\n </div>\n );\n }\n\n if (verificationEmail) {\n return (\n <div style={cardStyle}>\n <VerificationForm\n email={verificationEmail}\n backLabel=\"Back to sign up\"\n onVerify={async (code) => {\n if (!client) throw new Error('Sign up is unavailable');\n await client.verifyEmail(verificationEmail, code);\n completeSignUp();\n }}\n onResend={async () => {\n if (!client) throw new Error('Sign up is unavailable');\n await client.resendVerificationCode(verificationEmail);\n }}\n onBack={() => {\n setError('');\n setVerificationEmail(null);\n }}\n />\n </div>\n );\n }\n\n const eyeIconPath = showPassword\n ? 'M17.94 17.94A10.07 10.07 0 0112 20c-7 0-11-8-11-8a18.45 18.45 0 015.06-5.94M9.9 4.24A9.12 9.12 0 0112 4c7 0 11 8 11 8a18.5 18.5 0 01-2.16 3.19m-6.72-1.07a3 3 0 11-4.24-4.24 M1 1l22 22'\n : 'M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z M12 9a3 3 0 100 6 3 3 0 000-6z';\n\n return (\n <div style={cardStyle}>\n <div style={logoStyle}>\n {branding.logoDataUrl && (\n <img src={branding.logoDataUrl} alt={branding.brandName ?? 'Logo'} style={{ height: 40, objectFit: 'contain' }} />\n )}\n <h1 style={titleStyle}>Create account</h1>\n {branding.brandName && (\n <p style={subtitleStyle}>Join {branding.brandName}</p>\n )}\n </div>\n\n {error && <div role=\"alert\" style={errorBoxStyle}>{error}</div>}\n\n {providersToShow.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n {providersToShow.length <= 3 ? (\n providersToShow.map((provider) => (\n <OAuthButtonFull\n key={provider}\n provider={provider}\n loading={oauthLoading === provider}\n disabled={!!oauthLoading || loading}\n onClick={() => handleOAuth(provider)}\n borderRadius={theme.borderRadius}\n />\n ))\n ) : (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 10, justifyContent: 'center' }}>\n {providersToShow.map((provider) => (\n <CompactOAuthBtn\n key={provider}\n provider={provider}\n loading={oauthLoading === provider}\n disabled={!!oauthLoading || loading}\n onClick={() => handleOAuth(provider)}\n borderRadius={theme.borderRadius}\n />\n ))}\n </div>\n )}\n </div>\n )}\n\n {showDivider && <Divider />}\n\n {showEmailPw && (\n <>\n <Input\n label=\"Display name\"\n type=\"text\"\n placeholder=\"Your name\"\n value={displayName}\n onChange={setDisplayName}\n error={fieldErrors.displayName}\n autoComplete=\"name\"\n />\n\n <Input\n label=\"Email\"\n type=\"email\"\n placeholder=\"you@example.com\"\n value={email}\n onChange={setEmail}\n error={fieldErrors.email}\n autoComplete=\"email\"\n />\n\n <Input\n label=\"Password\"\n type={showPassword ? 'text' : 'password'}\n placeholder=\"Minimum 8 characters\"\n value={password}\n onChange={setPassword}\n error={fieldErrors.password}\n autoComplete=\"new-password\"\n rightElement={\n <button\n type=\"button\"\n onClick={() => setShowPassword((v) => !v)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', color: theme.textMuted }}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={eyeIconPath} />\n </svg>\n </button>\n }\n />\n\n <Input\n label=\"Confirm password\"\n type={showPassword ? 'text' : 'password'}\n placeholder=\"Repeat password\"\n value={confirmPassword}\n onChange={setConfirmPassword}\n error={fieldErrors.confirmPassword}\n autoComplete=\"new-password\"\n />\n\n <Button\n variant=\"primary\"\n fullWidth\n loading={loading}\n disabled={!!oauthLoading}\n onClick={handleSubmit}\n >\n Create account\n </Button>\n </>\n )}\n\n <div style={footerStyle}>\n Already have an account?{' '}\n <button type=\"button\" style={linkStyle} onClick={onNavigateSignIn}>\n Sign in\n </button>\n </div>\n\n {branding.showSecuredBy !== false && (\n <SecuredByAuthon primaryStart={theme.primaryStart} textMuted={theme.textMuted} />\n )}\n\n {branding.termsUrl || branding.privacyUrl ? (\n <div style={{ textAlign: 'center', fontSize: 11, color: theme.textMuted, marginTop: -8 }}>\n By creating an account you agree to our{' '}\n {branding.termsUrl && (\n <a href={branding.termsUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: theme.primaryStart }}>Terms</a>\n )}\n {branding.termsUrl && branding.privacyUrl && ' and '}\n {branding.privacyUrl && (\n <a href={branding.privacyUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: theme.primaryStart }}>Privacy Policy</a>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\ninterface OAuthBtnProps {\n provider: OAuthProviderType;\n loading: boolean;\n disabled: boolean;\n onClick: () => void;\n borderRadius: string;\n}\n\nfunction OAuthButtonFull({ provider, loading, disabled, onClick, borderRadius }: OAuthBtnProps) {\n const [hovered, setHovered] = useState(false);\n const colors = PROVIDER_COLORS[provider] ?? { bg: '#333', text: '#fff' };\n const name = PROVIDER_DISPLAY_NAMES[provider] ?? provider;\n const config = getProviderButtonConfig(provider);\n const needsBorder = colors.bg.toLowerCase() === '#ffffff';\n\n const style: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n height: 44,\n paddingLeft: 16,\n paddingRight: 16,\n borderRadius,\n background: colors.bg,\n color: colors.text,\n border: needsBorder ? '1.5px solid #dadce0' : 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontSize: 15,\n fontWeight: 600,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n justifyContent: 'center',\n opacity: disabled ? 0.6 : hovered ? 0.88 : 1,\n transition: 'opacity 0.15s',\n boxSizing: 'border-box',\n };\n\n return (\n <button\n type=\"button\"\n style={style}\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-label={`Continue with ${name}`}\n >\n {loading ? (\n <span style={{ width: 18, height: 18, border: `2px solid ${colors.text}`, borderTopColor: 'transparent', borderRadius: '50%', display: 'inline-block', animation: 'authon-spin 0.6s linear infinite' }} />\n ) : (\n <>\n <span style={{ display: 'flex', alignItems: 'center' }} dangerouslySetInnerHTML={{ __html: config.iconSvg }} />\n <span>Continue with {name}</span>\n </>\n )}\n </button>\n );\n}\n\nfunction CompactOAuthBtn({ provider, loading, disabled, onClick, borderRadius }: OAuthBtnProps) {\n const [hovered, setHovered] = useState(false);\n const colors = PROVIDER_COLORS[provider] ?? { bg: '#333', text: '#fff' };\n const name = PROVIDER_DISPLAY_NAMES[provider] ?? provider;\n const config = getProviderButtonConfig(provider);\n const needsBorder = colors.bg.toLowerCase() === '#ffffff';\n\n const style: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 48,\n height: 48,\n borderRadius,\n background: colors.bg,\n border: needsBorder ? '1.5px solid #dadce0' : 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : hovered ? 0.85 : 1,\n transition: 'opacity 0.15s',\n padding: 0,\n };\n\n return (\n <button\n type=\"button\"\n style={style}\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-label={`Continue with ${name}`}\n >\n {loading ? (\n <span style={{ width: 18, height: 18, border: `2px solid ${colors.text}`, borderTopColor: 'transparent', borderRadius: '50%', display: 'inline-block', animation: 'authon-spin 0.6s linear infinite' }} />\n ) : (\n <span style={{ display: 'flex' }} dangerouslySetInnerHTML={{ __html: config.iconSvg }} />\n )}\n </button>\n );\n}\n\nfunction SecuredByAuthon({ primaryStart, textMuted }: { primaryStart: string; textMuted: string }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 5, marginTop: -8 }}>\n <svg width=\"12\" height=\"14\" viewBox=\"0 0 12 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 0L0.5 2.5V6.5C0.5 9.7 2.9 12.7 6 13.5C9.1 12.7 11.5 9.7 11.5 6.5V2.5L6 0Z\" fill={primaryStart} opacity=\"0.85\"/>\n <path d=\"M4 7L5.5 8.5L8.5 5.5\" stroke=\"white\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n <span style={{ fontSize: 11, color: textMuted }}>\n Secured by{' '}\n <a href=\"https://authon.dev\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: primaryStart, textDecoration: 'none', fontWeight: 600 }}>\n Authon\n </a>\n </span>\n </div>\n );\n}\n\nexport function SignUp({ appearance, afterSignUpUrl, onSignUp, onNavigateSignIn }: SignUpProps) {\n const { branding, isLoaded } = useBranding();\n\n const effectiveBranding = isLoaded ? { ...branding, ...(appearance?.variables ?? {}) } : branding;\n\n return (\n <ThemeProvider branding={effectiveBranding} overrides={appearance?.variables} style={{ display: 'flex', justifyContent: 'center' }}>\n <style>{`@keyframes authon-spin { to { transform: rotate(360deg); } }`}</style>\n <SignUpCard\n afterSignUpUrl={afterSignUpUrl}\n onSignUp={onSignUp}\n onNavigateSignIn={onNavigateSignIn}\n />\n </ThemeProvider>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { BrandingConfig } from '@authon/shared';\nimport { useAuthon } from '../useAuthon';\nimport { useBranding } from '../hooks/useBranding';\nimport { ThemeProvider, useTheme } from './shared/ThemeProvider';\n\nexport interface UserButtonProps {\n appearance?: { variables?: Partial<BrandingConfig> };\n afterSignOutUrl?: string;\n userProfileUrl?: string;\n}\n\nfunction UserAvatar({\n avatarUrl,\n displayName,\n email,\n size,\n primaryStart,\n primaryEnd,\n}: {\n avatarUrl?: string | null;\n displayName?: string | null;\n email?: string | null;\n size: number;\n primaryStart: string;\n primaryEnd: string;\n}) {\n const initials = displayName\n ? displayName\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n : (email?.[0] ?? '?').toUpperCase();\n\n const avatarStyle: CSSProperties = {\n width: size,\n height: size,\n borderRadius: '50%',\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: avatarUrl ? 'transparent' : `linear-gradient(135deg, ${primaryStart}, ${primaryEnd})`,\n color: '#fff',\n fontSize: size * 0.38,\n fontWeight: 700,\n userSelect: 'none',\n };\n\n return (\n <div style={avatarStyle}>\n {avatarUrl ? (\n <img src={avatarUrl} alt={displayName ?? 'avatar'} style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n initials\n )}\n </div>\n );\n}\n\nfunction UserButtonInner({ afterSignOutUrl, userProfileUrl }: Omit<UserButtonProps, 'appearance'>) {\n const theme = useTheme();\n const { user, signOut, openSignIn, isSignedIn, activeOrganization, client } = useAuthon();\n const [open, setOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const handleClickOutside = useCallback((e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n }, []);\n\n useEffect(() => {\n if (open) document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [open, handleClickOutside]);\n\n if (!isSignedIn) {\n return (\n <button\n type=\"button\"\n onClick={() => openSignIn()}\n style={{\n padding: '8px 18px',\n borderRadius: theme.borderRadius,\n border: 'none',\n background: `linear-gradient(135deg, ${theme.primaryStart}, ${theme.primaryEnd})`,\n color: '#fff',\n cursor: 'pointer',\n fontSize: 14,\n fontWeight: 600,\n fontFamily: theme.fontFamily,\n }}\n >\n Sign In\n </button>\n );\n }\n\n const triggerStyle: CSSProperties = {\n width: 38,\n height: 38,\n borderRadius: '50%',\n border: `2px solid ${theme.primaryStart}`,\n background: 'none',\n cursor: 'pointer',\n padding: 1,\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n };\n\n const dropdownStyle: CSSProperties = {\n position: 'absolute',\n right: 0,\n top: 46,\n minWidth: 240,\n background: theme.bg,\n border: `1px solid ${theme.border}`,\n borderRadius: theme.borderRadius,\n boxShadow: '0 8px 32px rgba(0,0,0,0.13)',\n zIndex: 9999,\n overflow: 'hidden',\n fontFamily: theme.fontFamily,\n };\n\n const headerStyle: CSSProperties = {\n padding: '14px 16px',\n borderBottom: `1px solid ${theme.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n };\n\n const menuItemStyle = (danger?: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n padding: '10px 16px',\n textAlign: 'left',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: 14,\n color: danger ? '#ef4444' : theme.text,\n fontWeight: 500,\n fontFamily: theme.fontFamily,\n boxSizing: 'border-box',\n });\n\n return (\n <div ref={dropdownRef} style={{ position: 'relative', display: 'inline-block' }}>\n <button type=\"button\" style={triggerStyle} onClick={() => setOpen((v) => !v)} aria-label=\"User menu\">\n <UserAvatar\n avatarUrl={user?.avatarUrl}\n displayName={user?.displayName}\n email={user?.email}\n size={32}\n primaryStart={theme.primaryStart}\n primaryEnd={theme.primaryEnd}\n />\n </button>\n\n {open && (\n <div style={dropdownStyle}>\n <div style={headerStyle}>\n <UserAvatar\n avatarUrl={user?.avatarUrl}\n displayName={user?.displayName}\n email={user?.email}\n size={40}\n primaryStart={theme.primaryStart}\n primaryEnd={theme.primaryEnd}\n />\n <div style={{ flex: 1, minWidth: 0 }}>\n {user?.displayName && (\n <div style={{ fontSize: 14, fontWeight: 600, color: theme.text, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {user.displayName}\n </div>\n )}\n {user?.email && (\n <div style={{ fontSize: 12, color: theme.textMuted, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', marginTop: 1 }}>\n {user.email}\n </div>\n )}\n </div>\n </div>\n\n {activeOrganization && (\n <OrgSwitcherRow\n org={activeOrganization}\n primaryStart={theme.primaryStart}\n theme={theme}\n client={client}\n />\n )}\n\n {userProfileUrl && (\n <MenuButton\n style={menuItemStyle()}\n onClick={() => { setOpen(false); window.location.assign(userProfileUrl); }}\n icon={\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2\"/>\n <circle cx=\"12\" cy=\"7\" r=\"4\"/>\n </svg>\n }\n >\n Manage account\n </MenuButton>\n )}\n\n <div style={{ borderTop: `1px solid ${theme.border}` }}>\n <MenuButton\n style={menuItemStyle(true)}\n onClick={async () => {\n setOpen(false);\n await signOut();\n if (afterSignOutUrl) window.location.assign(afterSignOutUrl);\n }}\n icon={\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\"/>\n <polyline points=\"16 17 21 12 16 7\"/>\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"/>\n </svg>\n }\n >\n Sign out\n </MenuButton>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction MenuButton({\n style: baseStyle,\n onClick,\n icon,\n children,\n}: {\n style: CSSProperties;\n onClick: () => void;\n icon?: React.ReactNode;\n children: React.ReactNode;\n}) {\n const [hovered, setHovered] = useState(false);\n\n return (\n <button\n type=\"button\"\n style={{\n ...baseStyle,\n background: hovered ? (baseStyle.color === '#ef4444' ? '#fef2f2' : '#f9fafb') : 'none',\n }}\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {icon}\n {children}\n </button>\n );\n}\n\nfunction OrgSwitcherRow({\n org,\n primaryStart,\n theme,\n client,\n}: {\n org: { name: string; logoUrl: string | null; id: string };\n primaryStart: string;\n theme: { text: string; textMuted: string; border: string; fontFamily: string };\n client: any;\n}) {\n return (\n <div\n style={{\n padding: '8px 16px',\n borderBottom: `1px solid ${theme.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n }}\n >\n {org.logoUrl ? (\n <img src={org.logoUrl} alt={org.name} style={{ width: 24, height: 24, borderRadius: 6, objectFit: 'cover' }} />\n ) : (\n <div\n style={{\n width: 24,\n height: 24,\n borderRadius: 6,\n background: `${primaryStart}22`,\n color: primaryStart,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 11,\n fontWeight: 700,\n }}\n >\n {org.name[0]?.toUpperCase()}\n </div>\n )}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 12, color: theme.textMuted }}>Organization</div>\n <div style={{ fontSize: 13, fontWeight: 600, color: theme.text, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {org.name}\n </div>\n </div>\n </div>\n );\n}\n\nexport function UserButton({ appearance, afterSignOutUrl, userProfileUrl }: UserButtonProps) {\n const { branding } = useBranding();\n const effectiveBranding = { ...branding, ...(appearance?.variables ?? {}) };\n\n return (\n <ThemeProvider branding={effectiveBranding} style={{ display: 'inline-block' }}>\n <UserButtonInner afterSignOutUrl={afterSignOutUrl} userProfileUrl={userProfileUrl} />\n </ThemeProvider>\n );\n}\n","import type { ReactNode } from 'react';\nimport { useAuthon } from './useAuthon';\n\ninterface SignedInProps {\n children: ReactNode;\n}\n\nexport function SignedIn({ children }: SignedInProps) {\n const { isSignedIn, isLoading } = useAuthon();\n if (isLoading || !isSignedIn) return null;\n return <>{children}</>;\n}\n","import type { ReactNode } from 'react';\nimport { useAuthon } from './useAuthon';\n\ninterface SignedOutProps {\n children: ReactNode;\n}\n\nexport function SignedOut({ children }: SignedOutProps) {\n const { isSignedIn, isLoading } = useAuthon();\n if (isLoading || isSignedIn) return null;\n return <>{children}</>;\n}\n","import type { ReactNode } from 'react';\nimport type { AuthonUser } from '@authon/shared';\nimport { useAuthon } from './useAuthon';\n\ninterface ProtectProps {\n children: ReactNode;\n fallback?: ReactNode;\n condition?: (user: AuthonUser) => boolean;\n}\n\nexport function Protect({ children, fallback = null, condition }: ProtectProps) {\n const { isSignedIn, isLoading, user } = useAuthon();\n\n if (isLoading) return null;\n if (!isSignedIn || !user) return <>{fallback}</>;\n if (condition && !condition(user)) return <>{fallback}</>;\n\n return <>{children}</>;\n}\n","import { PROVIDER_COLORS, PROVIDER_DISPLAY_NAMES, type OAuthProviderType } from '@authon/shared';\nimport { getProviderButtonConfig } from '@authon/js';\n\nexport interface SocialButtonProps {\n provider: OAuthProviderType;\n onClick: (provider: OAuthProviderType) => void | Promise<void>;\n loading?: boolean;\n disabled?: boolean;\n /** Override button label. Default: \"Continue with {Provider}\" */\n label?: string;\n /** Compact mode — icon-only square button (default: false) */\n compact?: boolean;\n /** Override button className */\n className?: string;\n /** Override button style */\n style?: React.CSSProperties;\n /** Icon size (default: 20, compact default: 24) */\n iconSize?: number;\n /** Border radius in px (default: 10) */\n borderRadius?: number;\n /** Button height in px (default: 48) */\n height?: number;\n /** Button size for compact mode in px (default: 48) */\n size?: number;\n}\n\nconst baseStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 10,\n paddingLeft: 16,\n paddingRight: 16,\n border: 'none',\n cursor: 'pointer',\n fontFamily: 'inherit',\n transition: 'opacity 0.15s',\n width: '100%',\n};\n\nconst compactBaseStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n cursor: 'pointer',\n transition: 'opacity 0.15s',\n padding: 0,\n};\n\nexport function SocialButton({\n provider,\n onClick,\n loading = false,\n disabled = false,\n label,\n compact = false,\n className,\n style: userStyle,\n iconSize,\n borderRadius = 10,\n height = 48,\n size = 48,\n}: SocialButtonProps) {\n const colors = PROVIDER_COLORS[provider] || { bg: '#333', text: '#fff' };\n const displayName = PROVIDER_DISPLAY_NAMES[provider] || provider;\n const buttonLabel = label ?? `Continue with ${displayName}`;\n const needsBorder = colors.bg.toLowerCase() === '#ffffff';\n const resolvedIconSize = iconSize ?? (compact ? 24 : 20);\n const config = getProviderButtonConfig(provider);\n const iconSvg = config.iconSvg.replace(/width=\"\\d+\"/, `width=\"${resolvedIconSize}\"`).replace(/height=\"\\d+\"/, `height=\"${resolvedIconSize}\"`);\n\n const borderProps = needsBorder\n ? { border: '1px solid #dadce0' }\n : {};\n\n if (compact) {\n return (\n <button\n className={className}\n style={{\n ...compactBaseStyle,\n backgroundColor: colors.bg,\n borderRadius,\n width: size,\n height: size,\n ...borderProps,\n ...userStyle,\n }}\n onClick={() => onClick(provider)}\n disabled={disabled || loading}\n aria-label={`Sign in with ${displayName}`}\n >\n {loading ? (\n <span\n style={{\n display: 'inline-block',\n width: 16,\n height: 16,\n border: `2px solid ${colors.text}`,\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'authon-spin 0.6s linear infinite',\n }}\n />\n ) : (\n <span\n style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}\n dangerouslySetInnerHTML={{ __html: iconSvg }}\n />\n )}\n </button>\n );\n }\n\n return (\n <button\n className={className}\n style={{\n ...baseStyle,\n backgroundColor: colors.bg,\n color: colors.text,\n borderRadius,\n height,\n ...borderProps,\n ...userStyle,\n }}\n onClick={() => onClick(provider)}\n disabled={disabled || loading}\n aria-label={`Sign in with ${displayName}`}\n >\n {loading ? (\n <span\n style={{\n display: 'inline-block',\n width: 16,\n height: 16,\n border: `2px solid ${colors.text}`,\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'authon-spin 0.6s linear infinite',\n }}\n />\n ) : (\n <>\n <span\n style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}\n dangerouslySetInnerHTML={{ __html: iconSvg }}\n />\n <span style={{ fontSize: 15, fontWeight: 600, whiteSpace: 'nowrap' }}>\n {buttonLabel}\n </span>\n </>\n )}\n </button>\n );\n}\n","import { useState, useEffect } from 'react';\nimport type { OAuthProviderType } from '@authon/shared';\nimport { useAuthon } from './useAuthon';\nimport { SocialButton } from './SocialButton';\nimport type { SocialButtonProps } from './SocialButton';\n\nexport interface SocialButtonsProps {\n /** Called after successful OAuth sign-in */\n onSuccess?: () => void;\n /** Called on OAuth error */\n onError?: (error: Error) => void;\n /** Container className */\n className?: string;\n /** Container style */\n style?: React.CSSProperties;\n /** Gap between buttons in px (default: 10, compact default: 12) */\n gap?: number;\n /** Compact mode — icon-only square buttons in a row (default: false) */\n compact?: boolean;\n /** Custom labels per provider. e.g. { google: 'Google로 로그인' } */\n labels?: Partial<Record<OAuthProviderType, string>>;\n /** Props to pass through to each SocialButton */\n buttonProps?: Partial<Omit<SocialButtonProps, 'provider' | 'onClick' | 'loading' | 'disabled' | 'compact' | 'label'>>;\n}\n\nexport function SocialButtons({\n onSuccess,\n onError,\n className,\n style: userStyle,\n gap,\n compact = false,\n labels,\n buttonProps,\n}: SocialButtonsProps) {\n const { client } = useAuthon();\n const [providers, setProviders] = useState<OAuthProviderType[]>([]);\n const [loadingProvider, setLoadingProvider] = useState<string | null>(null);\n\n useEffect(() => {\n if (!client) return;\n client.getProviders().then((p: OAuthProviderType[]) => setProviders(p));\n }, [client]);\n\n if (providers.length === 0) return null;\n\n const resolvedGap = gap ?? (compact ? 12 : 10);\n\n const handleClick = async (provider: OAuthProviderType) => {\n if (!client) return;\n setLoadingProvider(provider);\n try {\n await client.signInWithOAuth(provider);\n onSuccess?.();\n } catch (e: any) {\n const error = e instanceof Error ? e : new Error(String(e));\n onError?.(error);\n } finally {\n setLoadingProvider(null);\n }\n };\n\n const containerStyle: React.CSSProperties = compact\n ? { display: 'flex', flexDirection: 'row', flexWrap: 'wrap', justifyContent: 'center', gap: resolvedGap, ...userStyle }\n : { display: 'flex', flexDirection: 'column', gap: resolvedGap, ...userStyle };\n\n return (\n <div className={className} style={containerStyle}>\n {providers.map((provider) => (\n <SocialButton\n key={provider}\n provider={provider}\n onClick={handleClick}\n loading={loadingProvider === provider}\n disabled={!!loadingProvider}\n compact={compact}\n label={labels?.[provider]}\n {...buttonProps}\n />\n ))}\n </div>\n );\n}\n","import { useCallback, useContext, useState } from 'react';\nimport type { MfaSetupResponse, MfaStatus } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseAuthonMfaReturn {\n /** Start MFA setup — returns secret, QR code SVG, and backup codes */\n setupMfa: () => Promise<(MfaSetupResponse & { qrCodeSvg: string }) | null>;\n /** Verify TOTP code to complete MFA setup */\n verifyMfaSetup: (code: string) => Promise<boolean>;\n /** Verify TOTP code during sign-in (after receiving mfaToken) */\n verifyMfa: (mfaToken: string, code: string) => Promise<boolean>;\n /** Disable MFA (requires current TOTP code) */\n disableMfa: (code: string) => Promise<boolean>;\n /** Get current MFA status */\n getMfaStatus: () => Promise<MfaStatus | null>;\n /** Regenerate backup codes (requires current TOTP code) */\n regenerateBackupCodes: (code: string) => Promise<string[] | null>;\n /** Loading state */\n isLoading: boolean;\n /** Last error */\n error: Error | null;\n}\n\nexport function useAuthonMfa(): UseAuthonMfaReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useAuthonMfa must be used within <AuthonProvider>');\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const wrap = useCallback(\n async <T>(fn: () => Promise<T>): Promise<T | null> => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await fn();\n return result;\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n const setupMfa = useCallback(async () => {\n return wrap(() => ctx.client!.setupMfa());\n }, [ctx.client, wrap]);\n\n const verifyMfaSetup = useCallback(\n async (code: string) => {\n const result = await wrap(() => ctx.client!.verifyMfaSetup(code));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const verifyMfa = useCallback(\n async (mfaToken: string, code: string) => {\n const result = await wrap(() => ctx.client!.verifyMfa(mfaToken, code));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const disableMfa = useCallback(\n async (code: string) => {\n const result = await wrap(() => ctx.client!.disableMfa(code));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const getMfaStatus = useCallback(async () => {\n return wrap(() => ctx.client!.getMfaStatus());\n }, [ctx.client, wrap]);\n\n const regenerateBackupCodes = useCallback(\n async (code: string) => {\n return wrap(() => ctx.client!.regenerateBackupCodes(code));\n },\n [ctx.client, wrap],\n );\n\n return {\n setupMfa,\n verifyMfaSetup,\n verifyMfa,\n disableMfa,\n getMfaStatus,\n regenerateBackupCodes,\n isLoading,\n error,\n };\n}\n","import { useCallback, useContext, useState } from 'react';\nimport type { PasskeyCredential } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseAuthonPasskeysReturn {\n registerPasskey: (name?: string) => Promise<PasskeyCredential | null>;\n authenticateWithPasskey: (email?: string) => Promise<boolean>;\n listPasskeys: () => Promise<PasskeyCredential[] | null>;\n renamePasskey: (id: string, name: string) => Promise<PasskeyCredential | null>;\n revokePasskey: (id: string) => Promise<boolean>;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useAuthonPasskeys(): UseAuthonPasskeysReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useAuthonPasskeys must be used within <AuthonProvider>');\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const wrap = useCallback(\n async <T>(fn: () => Promise<T>): Promise<T | null> => {\n setIsLoading(true);\n setError(null);\n try {\n return await fn();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n const registerPasskey = useCallback(\n (name?: string) => wrap(() => ctx.client!.registerPasskey(name)),\n [ctx.client, wrap],\n );\n\n const authenticateWithPasskey = useCallback(\n async (email?: string) => {\n const result = await wrap(() => ctx.client!.authenticateWithPasskey(email));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const listPasskeys = useCallback(\n () => wrap(() => ctx.client!.listPasskeys()),\n [ctx.client, wrap],\n );\n\n const renamePasskey = useCallback(\n (id: string, name: string) => wrap(() => ctx.client!.renamePasskey(id, name)),\n [ctx.client, wrap],\n );\n\n const revokePasskey = useCallback(\n async (id: string) => {\n const result = await wrap(() => ctx.client!.revokePasskey(id));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n return {\n registerPasskey,\n authenticateWithPasskey,\n listPasskeys,\n renamePasskey,\n revokePasskey,\n isLoading,\n error,\n };\n}\n","import { useCallback, useContext, useState } from 'react';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseAuthonPasswordlessReturn {\n sendMagicLink: (email: string) => Promise<boolean>;\n sendEmailOtp: (email: string) => Promise<boolean>;\n verifyPasswordless: (opts: { token?: string; email?: string; code?: string }) => Promise<boolean>;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useAuthonPasswordless(): UseAuthonPasswordlessReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useAuthonPasswordless must be used within <AuthonProvider>');\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const wrap = useCallback(\n async <T>(fn: () => Promise<T>): Promise<T | null> => {\n setIsLoading(true);\n setError(null);\n try {\n return await fn();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n const sendMagicLink = useCallback(\n async (email: string) => {\n const result = await wrap(() => ctx.client!.sendMagicLink(email));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const sendEmailOtp = useCallback(\n async (email: string) => {\n const result = await wrap(() => ctx.client!.sendEmailOtp(email));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const verifyPasswordless = useCallback(\n async (opts: { token?: string; email?: string; code?: string }) => {\n const result = await wrap(() => ctx.client!.verifyPasswordless(opts));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n return {\n sendMagicLink,\n sendEmailOtp,\n verifyPasswordless,\n isLoading,\n error,\n };\n}\n","import { useCallback, useContext, useState } from 'react';\nimport type { Web3Chain, Web3NonceResponse, Web3Wallet, Web3WalletType } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface LinkWalletParams {\n address: string;\n chain: Web3Chain;\n walletType: Web3WalletType;\n chainId?: number;\n message: string;\n signature: string;\n}\n\nexport interface UseAuthonWeb3Return {\n getNonce: (\n address: string,\n chain: Web3Chain,\n walletType: Web3WalletType,\n chainId?: number,\n ) => Promise<Web3NonceResponse | null>;\n verify: (\n message: string,\n signature: string,\n address: string,\n chain: Web3Chain,\n walletType: Web3WalletType,\n ) => Promise<boolean>;\n listWallets: () => Promise<Web3Wallet[] | null>;\n linkWallet: (params: LinkWalletParams) => Promise<Web3Wallet | null>;\n unlinkWallet: (walletId: string) => Promise<boolean>;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useAuthonWeb3(): UseAuthonWeb3Return {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useAuthonWeb3 must be used within <AuthonProvider>');\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const wrap = useCallback(\n async <T>(fn: () => Promise<T>): Promise<T | null> => {\n setIsLoading(true);\n setError(null);\n try {\n return await fn();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n const getNonce = useCallback(\n (address: string, chain: Web3Chain, walletType: Web3WalletType, chainId?: number) =>\n wrap(() => ctx.client!.web3GetNonce(address, chain, walletType, chainId)),\n [ctx.client, wrap],\n );\n\n const verify = useCallback(\n async (\n message: string,\n signature: string,\n address: string,\n chain: Web3Chain,\n walletType: Web3WalletType,\n ) => {\n const result = await wrap(() =>\n ctx.client!.web3Verify(message, signature, address, chain, walletType),\n );\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n const listWallets = useCallback(\n () => wrap(() => ctx.client!.listWallets()),\n [ctx.client, wrap],\n );\n\n const linkWallet = useCallback(\n (params: LinkWalletParams) => wrap(() => ctx.client!.linkWallet(params)),\n [ctx.client, wrap],\n );\n\n const unlinkWallet = useCallback(\n async (walletId: string) => {\n const result = await wrap(() => ctx.client!.unlinkWallet(walletId));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n return {\n getNonce,\n verify,\n listWallets,\n linkWallet,\n unlinkWallet,\n isLoading,\n error,\n };\n}\n","import { useCallback, useContext, useState } from 'react';\nimport type { SessionInfo } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseAuthonSessionsReturn {\n listSessions: () => Promise<SessionInfo[] | null>;\n revokeSession: (sessionId: string) => Promise<boolean>;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useAuthonSessions(): UseAuthonSessionsReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useAuthonSessions must be used within <AuthonProvider>');\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const wrap = useCallback(\n async <T>(fn: () => Promise<T>): Promise<T | null> => {\n setIsLoading(true);\n setError(null);\n try {\n return await fn();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n const listSessions = useCallback(\n () => wrap(() => ctx.client!.listSessions()),\n [ctx.client, wrap],\n );\n\n const revokeSession = useCallback(\n async (sessionId: string) => {\n const result = await wrap(() => ctx.client!.revokeSession(sessionId));\n return result !== null;\n },\n [ctx.client, wrap],\n );\n\n return {\n listSessions,\n revokeSession,\n isLoading,\n error,\n };\n}\n","import { useCallback, useContext, useEffect, useState } from 'react';\nimport type { AuthonOrganization, OrganizationMember } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseOrganizationReturn {\n organization: AuthonOrganization | null;\n members: OrganizationMember[];\n isLoaded: boolean;\n}\n\nexport function useOrganization(): UseOrganizationReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useOrganization must be used within <AuthonProvider>');\n\n const [members, setMembers] = useState<OrganizationMember[]>([]);\n const [isLoaded, setIsLoaded] = useState(false);\n\n const organization = ctx.activeOrganization;\n\n useEffect(() => {\n if (!organization || !ctx.client) {\n setMembers([]);\n setIsLoaded(!organization);\n return;\n }\n\n setIsLoaded(false);\n ctx.client.organizations\n .getMembers(organization.id)\n .then((m) => {\n setMembers(m);\n setIsLoaded(true);\n })\n .catch(() => {\n setMembers([]);\n setIsLoaded(true);\n });\n }, [organization?.id, ctx.client]);\n\n return {\n organization,\n members,\n isLoaded,\n };\n}\n","import { useCallback, useContext, useEffect, useState } from 'react';\nimport type { AuthonOrganization, CreateOrganizationParams } from '@authon/shared';\nimport { AuthonContext } from './AuthonProvider';\n\nexport interface UseOrganizationListReturn {\n organizations: AuthonOrganization[];\n isLoaded: boolean;\n createOrganization: (params: CreateOrganizationParams) => Promise<AuthonOrganization | null>;\n setActive: (org: AuthonOrganization | null) => void;\n}\n\nexport function useOrganizationList(): UseOrganizationListReturn {\n const ctx = useContext(AuthonContext);\n if (!ctx) throw new Error('useOrganizationList must be used within <AuthonProvider>');\n\n const [organizations, setOrganizations] = useState<AuthonOrganization[]>([]);\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n if (!ctx.client || !ctx.isSignedIn) {\n setOrganizations([]);\n setIsLoaded(!ctx.isSignedIn);\n return;\n }\n\n setIsLoaded(false);\n ctx.client.organizations\n .list()\n .then((res) => {\n setOrganizations(res.data);\n setIsLoaded(true);\n })\n .catch(() => {\n setOrganizations([]);\n setIsLoaded(true);\n });\n }, [ctx.client, ctx.isSignedIn]);\n\n const createOrganization = useCallback(\n async (params: CreateOrganizationParams): Promise<AuthonOrganization | null> => {\n if (!ctx.client) return null;\n try {\n const org = await ctx.client.organizations.create(params);\n setOrganizations((prev) => [...prev, org]);\n return org;\n } catch {\n return null;\n }\n },\n [ctx.client],\n );\n\n const setActive = useCallback(\n (org: AuthonOrganization | null) => {\n ctx.setActiveOrganization(org);\n },\n [ctx.setActiveOrganization],\n );\n\n return {\n organizations,\n isLoaded,\n createOrganization,\n setActive,\n };\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { BrandingConfig, SessionInfo, MfaStatus } from '@authon/shared';\nimport { useAuthon } from '../useAuthon';\nimport { useBranding } from '../hooks/useBranding';\nimport { ThemeProvider, useTheme } from './shared/ThemeProvider';\nimport { Input } from './shared/Input';\nimport { Button } from './shared/Button';\n\nexport interface UserProfileProps {\n appearance?: { variables?: Partial<BrandingConfig> };\n}\n\ntype Tab = 'profile' | 'security' | 'sessions';\n\nfunction ProfileTab() {\n const theme = useTheme();\n const { user, client } = useAuthon();\n const [displayName, setDisplayName] = useState(user?.displayName ?? '');\n const [phone, setPhone] = useState(user?.phone ?? '');\n const [loading, setLoading] = useState(false);\n const [success, setSuccess] = useState('');\n const [error, setError] = useState('');\n\n const handleSave = async () => {\n if (!client) return;\n setLoading(true);\n setError('');\n setSuccess('');\n try {\n await client.updateProfile({ displayName: displayName || undefined, phone: phone || undefined });\n setSuccess('Profile updated');\n } catch (e: any) {\n setError(e?.message ?? 'Failed to update profile');\n } finally {\n setLoading(false);\n }\n };\n\n const initials = user?.displayName\n ? user.displayName.split(' ').map((n) => n[0]).join('').toUpperCase().slice(0, 2)\n : (user?.email?.[0] ?? '?').toUpperCase();\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 16 }}>\n <div\n style={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n background: user?.avatarUrl ? 'transparent' : `linear-gradient(135deg, ${theme.primaryStart}, ${theme.primaryEnd})`,\n color: '#fff',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 22,\n fontWeight: 700,\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {user?.avatarUrl ? (\n <img src={user.avatarUrl} alt=\"avatar\" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n initials\n )}\n </div>\n <div>\n <div style={{ fontSize: 16, fontWeight: 600, color: theme.text }}>{user?.displayName ?? 'User'}</div>\n <div style={{ fontSize: 13, color: theme.textMuted }}>{user?.email}</div>\n {!user?.emailVerified && (\n <span style={{ fontSize: 11, color: '#d97706', background: '#fef3c7', padding: '2px 8px', borderRadius: 99, fontWeight: 500, marginTop: 4, display: 'inline-block' }}>\n Email not verified\n </span>\n )}\n </div>\n </div>\n\n {success && (\n <div style={{ padding: '10px 14px', borderRadius: theme.borderRadius, background: '#f0fdf4', border: '1px solid #bbf7d0', color: '#166534', fontSize: 13 }}>\n {success}\n </div>\n )}\n {error && (\n <div style={{ padding: '10px 14px', borderRadius: theme.borderRadius, background: '#fef2f2', border: '1px solid #fecaca', color: '#dc2626', fontSize: 13 }}>\n {error}\n </div>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <Input label=\"Display name\" value={displayName} onChange={setDisplayName} placeholder=\"Your name\" />\n <Input label=\"Email\" type=\"email\" value={user?.email ?? ''} disabled placeholder=\"Email\" />\n <Input label=\"Phone\" type=\"tel\" value={phone} onChange={setPhone} placeholder=\"+1 (555) 000-0000\" />\n </div>\n\n <Button variant=\"primary\" onClick={handleSave} loading={loading} style={{ alignSelf: 'flex-start', minWidth: 120 }}>\n Save changes\n </Button>\n </div>\n );\n}\n\nfunction SecurityTab() {\n const theme = useTheme();\n const { client } = useAuthon();\n const [currentPw, setCurrentPw] = useState('');\n const [newPw, setNewPw] = useState('');\n const [confirmPw, setConfirmPw] = useState('');\n const [pwLoading, setPwLoading] = useState(false);\n const [pwError, setPwError] = useState('');\n const [pwSuccess, setPwSuccess] = useState('');\n const [mfaStatus, setMfaStatus] = useState<MfaStatus | null>(null);\n const [mfaLoading, setMfaLoading] = useState(false);\n\n useEffect(() => {\n if (!client) return;\n client.getMfaStatus().then(setMfaStatus).catch(() => null);\n }, [client]);\n\n const handlePasswordChange = async () => {\n if (!client) return;\n if (newPw !== confirmPw) { setPwError('Passwords do not match'); return; }\n if (newPw.length < 8) { setPwError('Password must be at least 8 characters'); return; }\n setPwLoading(true);\n setPwError('');\n setPwSuccess('');\n try {\n await client.updateProfile({ displayName: undefined });\n setPwSuccess('Password updated');\n setCurrentPw('');\n setNewPw('');\n setConfirmPw('');\n } catch (e: any) {\n setPwError(e?.message ?? 'Failed to update password');\n } finally {\n setPwLoading(false);\n }\n };\n\n const sectionTitle: CSSProperties = {\n fontSize: 15,\n fontWeight: 600,\n color: theme.text,\n marginBottom: 16,\n paddingBottom: 10,\n borderBottom: `1px solid ${theme.border}`,\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n <div>\n <div style={sectionTitle}>Change password</div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <Input label=\"Current password\" type=\"password\" value={currentPw} onChange={setCurrentPw} placeholder=\"••••••••\" autoComplete=\"current-password\" />\n <Input label=\"New password\" type=\"password\" value={newPw} onChange={setNewPw} placeholder=\"Minimum 8 characters\" autoComplete=\"new-password\" />\n <Input label=\"Confirm new password\" type=\"password\" value={confirmPw} onChange={setConfirmPw} placeholder=\"Repeat new password\" autoComplete=\"new-password\" />\n {pwError && <div style={{ color: '#dc2626', fontSize: 13 }}>{pwError}</div>}\n {pwSuccess && <div style={{ color: '#166534', fontSize: 13 }}>{pwSuccess}</div>}\n <Button variant=\"primary\" onClick={handlePasswordChange} loading={pwLoading} style={{ alignSelf: 'flex-start', minWidth: 160 }}>\n Update password\n </Button>\n </div>\n </div>\n\n <div>\n <div style={sectionTitle}>Two-factor authentication</div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '14px 0' }}>\n <div>\n <div style={{ fontSize: 14, fontWeight: 500, color: theme.text }}>Authenticator app</div>\n <div style={{ fontSize: 13, color: theme.textMuted, marginTop: 2 }}>\n {mfaStatus?.enabled\n ? `Enabled · ${mfaStatus.backupCodesRemaining} backup codes remaining`\n : 'Add extra security to your account'}\n </div>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '3px 10px',\n borderRadius: 99,\n fontSize: 12,\n fontWeight: 600,\n background: mfaStatus?.enabled ? '#f0fdf4' : '#f3f4f6',\n color: mfaStatus?.enabled ? '#166534' : theme.textMuted,\n }}\n >\n <span style={{ width: 6, height: 6, borderRadius: '50%', background: mfaStatus?.enabled ? '#22c55e' : '#9ca3af', display: 'inline-block' }} />\n {mfaStatus?.enabled ? 'Enabled' : 'Disabled'}\n </span>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction SessionsTab() {\n const theme = useTheme();\n const { client } = useAuthon();\n const [sessions, setSessions] = useState<SessionInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [revoking, setRevoking] = useState<string | null>(null);\n\n const loadSessions = useCallback(async () => {\n if (!client) return;\n setLoading(true);\n try {\n const data = await client.listSessions();\n setSessions(data);\n } catch {\n /* ignore */\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n useEffect(() => {\n loadSessions();\n }, [loadSessions]);\n\n const handleRevoke = async (sessionId: string) => {\n if (!client) return;\n setRevoking(sessionId);\n try {\n await client.revokeSession(sessionId);\n setSessions((prev) => prev.filter((s) => s.id !== sessionId));\n } catch {\n /* ignore */\n } finally {\n setRevoking(null);\n }\n };\n\n const sectionTitle: CSSProperties = {\n fontSize: 15,\n fontWeight: 600,\n color: theme.text,\n marginBottom: 16,\n paddingBottom: 10,\n borderBottom: `1px solid ${theme.border}`,\n };\n\n if (loading) {\n return (\n <div style={{ display: 'flex', justifyContent: 'center', padding: 40 }}>\n <span style={{ width: 24, height: 24, border: `3px solid ${theme.primaryStart}33`, borderTopColor: theme.primaryStart, borderRadius: '50%', display: 'inline-block', animation: 'authon-spin 0.7s linear infinite' }} />\n </div>\n );\n }\n\n return (\n <div>\n <div style={sectionTitle}>Active sessions</div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n {sessions.length === 0 ? (\n <div style={{ color: theme.textMuted, fontSize: 14, textAlign: 'center', padding: '24px 0' }}>No active sessions</div>\n ) : (\n sessions.map((session) => (\n <div\n key={session.id}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 14px',\n borderRadius: theme.borderRadius,\n border: `1px solid ${theme.border}`,\n gap: 12,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, flex: 1, minWidth: 0 }}>\n <div style={{ width: 36, height: 36, borderRadius: '50%', background: `${theme.primaryStart}18`, color: theme.primaryStart, display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"/>\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"/>\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"/>\n </svg>\n </div>\n <div style={{ minWidth: 0 }}>\n <div style={{ fontSize: 13, fontWeight: 500, color: theme.text, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {session.userAgent\n ? session.userAgent.length > 50\n ? session.userAgent.slice(0, 50) + '…'\n : session.userAgent\n : 'Unknown device'}\n </div>\n <div style={{ fontSize: 12, color: theme.textMuted, marginTop: 2 }}>\n {session.ipAddress ?? 'Unknown IP'}\n {session.lastActiveAt && (\n <> · {formatRelative(session.lastActiveAt)}</>\n )}\n </div>\n </div>\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n loading={revoking === session.id}\n onClick={() => handleRevoke(session.id)}\n >\n Revoke\n </Button>\n </div>\n ))\n )}\n </div>\n </div>\n );\n}\n\nfunction formatRelative(dateStr: string): string {\n const diff = Date.now() - new Date(dateStr).getTime();\n const mins = Math.floor(diff / 60000);\n if (mins < 1) return 'Just now';\n if (mins < 60) return `${mins}m ago`;\n const hours = Math.floor(mins / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return `${days}d ago`;\n}\n\nfunction UserProfilePanel() {\n const theme = useTheme();\n const [tab, setTab] = useState<Tab>('profile');\n\n const panelStyle: CSSProperties = {\n width: '100%',\n maxWidth: 640,\n background: theme.bg,\n borderRadius: `calc(${theme.borderRadius} + 4px)`,\n boxShadow: '0 4px 32px rgba(0,0,0,0.10)',\n overflow: 'hidden',\n fontFamily: theme.fontFamily,\n };\n\n const tabBarStyle: CSSProperties = {\n display: 'flex',\n borderBottom: `1px solid ${theme.border}`,\n padding: '0 24px',\n };\n\n const tabBtnStyle = (active: boolean): CSSProperties => ({\n padding: '14px 16px',\n background: 'none',\n border: 'none',\n borderBottom: active ? `2px solid ${theme.primaryStart}` : '2px solid transparent',\n color: active ? theme.primaryStart : theme.textMuted,\n fontWeight: active ? 600 : 400,\n fontSize: 14,\n cursor: 'pointer',\n fontFamily: theme.fontFamily,\n marginBottom: -1,\n });\n\n const contentStyle: CSSProperties = {\n padding: '28px 28px',\n };\n\n const tabs: { key: Tab; label: string }[] = [\n { key: 'profile', label: 'Profile' },\n { key: 'security', label: 'Security' },\n { key: 'sessions', label: 'Sessions' },\n ];\n\n return (\n <div style={panelStyle}>\n <style>{`@keyframes authon-spin { to { transform: rotate(360deg); } }`}</style>\n <div style={tabBarStyle}>\n {tabs.map(({ key, label }) => (\n <button\n key={key}\n type=\"button\"\n style={tabBtnStyle(tab === key)}\n onClick={() => setTab(key)}\n >\n {label}\n </button>\n ))}\n </div>\n <div style={contentStyle}>\n {tab === 'profile' && <ProfileTab />}\n {tab === 'security' && <SecurityTab />}\n {tab === 'sessions' && <SessionsTab />}\n </div>\n </div>\n );\n}\n\nexport function UserProfile({ appearance }: UserProfileProps) {\n const { branding } = useBranding();\n const effectiveBranding = { ...branding, ...(appearance?.variables ?? {}) };\n\n return (\n <ThemeProvider branding={effectiveBranding} style={{ display: 'flex', justifyContent: 'center' }}>\n <UserProfilePanel />\n </ThemeProvider>\n );\n}\n","import type { OAuthProviderType } from '@authon/shared';\nimport { getProviderButtonConfig } from '@authon/js';\n\ninterface ProviderIconProps {\n provider: OAuthProviderType;\n size?: number;\n}\n\nexport function ProviderIcon({ provider, size = 20 }: ProviderIconProps) {\n const config = getProviderButtonConfig(provider);\n const svg = config.iconSvg\n .replace(/width=\"\\d+\"/, `width=\"${size}\"`)\n .replace(/height=\"\\d+\"/, `height=\"${size}\"`);\n\n return (\n <span\n style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAiF;AAEjF,gBAAuB;AAyGd;AAxFF,IAAM,oBAAgB,4BAAyC,IAAI;AAiBnE,SAAS,eAAe,EAAE,gBAAgB,UAAU,OAAO,GAAwB;AACxF,QAAM,CAAC,MAAM,OAAO,QAAI,uBAA4B,IAAI;AACxD,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,IAAI;AAC/C,QAAM,CAAC,oBAAoB,qBAAqB,QAAI,uBAAoC,IAAI;AAC5F,QAAM,gBAAY,qBAAsB,IAAI;AAE5C,8BAAU,MAAM;AACd,QAAI,SAAS;AACb,QAAI,wBAAwB;AAC5B,UAAM,SAAS,IAAI,iBAAO,gBAAgB,MAAM;AAChD,UAAM,gBAAgB;AACtB,cAAU,UAAU;AAEpB,UAAM,qBAAqB,cAAc,gBAAgB,CAAC,WAAW;AACnE,UAAI,CAAC,OAAQ;AACb,8BAAwB;AACxB,cAAQ,OAAO,IAAI;AACnB,mBAAa,KAAK;AAClB,UAAI,CAAC,OAAO,KAAM,uBAAsB,IAAI;AAAA,IAC9C,CAAC;AAED,WAAO,GAAG,SAAS,MAAM;AACvB,mBAAa,KAAK;AAAA,IACpB,CAAC;AAED,SAAK,cAAc,eAAe,EAAE,KAAK,MAAM;AAC7C,UAAI,CAAC,OAAQ;AACb,UAAI,CAAC,sBAAuB,SAAQ,OAAO,QAAQ,CAAC;AACpD,mBAAa,KAAK;AAAA,IACpB,CAAC;AAED,WAAO,MAAM;AACX,eAAS;AACT,yBAAmB;AACnB,aAAO,QAAQ;AACf,gBAAU,UAAU;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,cAAU,0BAAY,YAAY;AACtC,UAAM,UAAU,SAAS,QAAQ;AAAA,EACnC,GAAG,CAAC,CAAC;AAEL,QAAM,iBAAa,0BAAY,YAAY;AACzC,UAAM,UAAU,SAAS,WAAW;AAAA,EACtC,GAAG,CAAC,CAAC;AAEL,QAAM,iBAAa,0BAAY,YAAY;AACzC,UAAM,UAAU,SAAS,WAAW;AAAA,EACtC,GAAG,CAAC,CAAC;AAEL,QAAM,eAAW,0BAAY,MAAM;AACjC,WAAO,UAAU,SAAS,SAAS,KAAK;AAAA,EAC1C,GAAG,CAAC,CAAC;AAEL,QAAM,YAAQ;AAAA,IACZ,OAAO;AAAA,MACL,YAAY,CAAC,CAAC;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,UAAU;AAAA,IACpB;AAAA,IACA,CAAC,MAAM,WAAW,oBAAoB,SAAS,YAAY,YAAY,QAAQ;AAAA,EACjF;AAEA,SAAO,4CAAC,cAAc,UAAd,EAAuB,OAAe,UAAS;AACzD;;;AC5GA,IAAAA,gBAA2B;AAIpB,SAAS,YAAgC;AAC9C,QAAM,UAAM,0BAAW,aAAa;AACpC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,SAAO;AACT;;;ACPO,SAAS,UAA2D;AACzE,QAAM,EAAE,MAAM,UAAU,IAAI,UAAU;AACtC,SAAO,EAAE,MAAM,UAAU;AAC3B;;;ACNA,IAAAC,gBAAiC;AAGjC,IAAAC,iBAAwD;AACxD,IAAAC,aAAgE;;;ACJhE,IAAAC,gBAAyD;AAEzD,oBAAiC;AASjC,IAAM,QAAQ,oBAAI,IAA2B;AAEtC,SAAS,cAA6B;AAC3C,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAwB,MAAM;AACtD,UAAM,MAAO,QAAgB;AAC7B,WAAO,MAAM,IAAI,OAAO,EAAE,KAAK,EAAE,UAAU,gCAAkB,WAAW,CAAC,GAAG,UAAU,MAAM;AAAA,EAC9F,CAAC;AACD,QAAM,iBAAa,sBAAO,KAAK;AAE/B,QAAM,oBAAgB,2BAAY,YAAY;AAC5C,QAAI,CAAC,UAAU,WAAW,QAAS;AAEnC,UAAM,MAAO,OAAe;AAC5B,UAAM,SAAS,MAAM,IAAI,GAAG;AAC5B,QAAI,QAAQ;AACV,eAAS,MAAM;AACf;AAAA,IACF;AAEA,eAAW,UAAU;AACrB,QAAI;AACF,YAAM,YAAY,MAAM,OAAO,aAAa;AAC5C,YAAM,SAAkB,OAAe,QAAQ,UAAU;AACzD,YAAM,MAAM,MAAM,MAAM,GAAG,MAAM,qBAAqB;AAAA,QACpD,SAAS,EAAE,aAAa,IAAI;AAAA,QAC5B,aAAa;AAAA,MACf,CAAC;AACD,UAAI,WAA2B;AAC/B,UAAI,IAAI,IAAI;AACV,cAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,mBAAW,EAAE,GAAG,gCAAkB,GAAG,KAAK;AAAA,MAC5C;AACA,YAAM,OAAsB,EAAE,UAAU,WAAW,UAAU,KAAK;AAClE,YAAM,IAAI,KAAK,IAAI;AACnB,eAAS,IAAI;AAAA,IACf,QAAQ;AACN,YAAM,WAA0B,EAAE,UAAU,gCAAkB,WAAW,CAAC,GAAG,UAAU,KAAK;AAC5F,eAAS,QAAQ;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,+BAAU,MAAM;AACd,kBAAc;AAAA,EAChB,GAAG,CAAC,aAAa,CAAC;AAElB,SAAO;AACT;;;AC1DA,IAAAC,gBAAmD;AAGnD,IAAAC,iBAAiC;AAgE3B,IAAAC,sBAAA;AAlDN,IAAM,mBAAe,6BAAoC,IAAI;AAEtD,SAAS,WAA0B;AACxC,QAAM,UAAM,0BAAW,YAAY;AACnC,MAAI,CAAC,KAAK;AACR,WAAO,aAAa,iCAAkB,KAAK;AAAA,EAC7C;AACA,SAAO;AACT;AAEA,SAAS,aAAa,UAA0B,OAA+B;AAC7E,QAAM,SAAS,SAAS,gBAAgB,gCAAiB,gBAAgB;AACzE,SAAO;AAAA,IACL,cAAc,SAAS,qBAAqB,gCAAiB,qBAAqB;AAAA,IAClF,YAAY,SAAS,mBAAmB,gCAAiB,mBAAmB;AAAA,IAC5E,IAAI,SAAS,WAAW,gCAAiB,WAAW;AAAA,IACpD,MAAM,SAAS,aAAa,gCAAiB,aAAa;AAAA,IAC1D,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,cAAc,GAAG,MAAM;AAAA,IACvB,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AACF;AAUO,SAAS,cAAc,EAAE,UAAU,UAAU,WAAW,OAAO,UAAU,GAAuB;AACrG,QAAM,aAAS,uBAAQ,OAAO,EAAE,GAAG,UAAU,GAAG,UAAU,IAAI,CAAC,UAAU,SAAS,CAAC;AACnF,QAAM,YAAQ,uBAAQ,MAAM,aAAa,QAAQ,KAAK,GAAG,CAAC,MAAM,CAAC;AAEjE,QAAM,UAAU;AAAA,IACd,0BAA0B,MAAM;AAAA,IAChC,wBAAwB,MAAM;AAAA,IAC9B,eAAe,MAAM;AAAA,IACrB,iBAAiB,MAAM;AAAA,IACvB,uBAAuB,MAAM;AAAA,IAC7B,mBAAmB,MAAM;AAAA,IACzB,mBAAmB,MAAM;AAAA,IACzB,iBAAiB,MAAM;AAAA,EACzB;AAEA,SACE,6CAAC,aAAa,UAAb,EAAsB,OAAO,OAC5B;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,QACL,YAAY,MAAM;AAAA,QAClB,OAAO,MAAM;AAAA,QACb,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MAEC;AAAA;AAAA,EACH,GACF;AAEJ;;;AChFA,IAAAC,gBAAgC;AA6FhB,IAAAC,sBAAA;AAhFT,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAe;AACb,QAAM,QAAQ,SAAS;AACvB,QAAM,kBAAc,qBAAM;AAC1B,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,gBAAgB,cAAc,MAAM;AAC1C,QAAM,UAAU,KAAK,MAAM;AAE3B,QAAM,eAA8B;AAAA,IAClC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AAEA,QAAM,aAA4B;AAAA,IAChC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO,QAAQ,YAAY,MAAM;AAAA,EACnC;AAEA,QAAM,sBAAqC;AAAA,IACzC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAEA,QAAM,iBAAgC;AAAA,IACpC,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc,eAAe,KAAK;AAAA,IAClC,cAAc,MAAM;AAAA,IACpB,YAAY,MAAM;AAAA,IAClB,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,IACb,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,GAAG;AAAA,EACL;AAEA,MAAI,oBAAmC,CAAC;AACxC,MAAI,kBAAkB,UAAU;AAC9B,wBAAoB;AAAA,MAClB,YAAY,UAAU,GAAG,MAAM,YAAY,OAAO;AAAA,MAClD,QAAQ,eAAe,QAAQ,YAAY,UAAU,MAAM,eAAe,aAAa;AAAA,MACvF,WAAW,WAAW,CAAC,QAAQ,aAAa,MAAM,YAAY,OAAO;AAAA,IACvE;AAAA,EACF,OAAO;AACL,wBAAoB;AAAA,MAClB,YAAY,MAAM;AAAA,MAClB,QAAQ,eAAe,QAAQ,YAAY,UAAU,MAAM,eAAe,MAAM,MAAM;AAAA,MACtF,WAAW,WAAW,CAAC,QAAQ,aAAa,MAAM,YAAY,OAAO;AAAA,IACvE;AAAA,EACF;AAEA,QAAM,aAA4B;AAAA,IAChC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO,MAAM;AAAA,EACf;AAEA,QAAM,YAA2B;AAAA,IAC/B,UAAU;AAAA,IACV,OAAO,QAAQ,YAAY,MAAM;AAAA,EACnC;AAEA,SACE,8CAAC,SAAI,OAAO,cACT;AAAA,aAAS,6CAAC,WAAM,SAAS,SAAS,OAAO,YAAa,iBAAM;AAAA,IAC7D,8CAAC,SAAI,OAAO,qBACV;AAAA;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,IAAI;AAAA,UACJ,OAAO,EAAE,GAAG,gBAAgB,GAAG,kBAAkB;AAAA,UACjD,SAAS,CAAC,MAAM;AACd,uBAAW,IAAI;AACf,iBAAK,UAAU,CAAC;AAAA,UAClB;AAAA,UACA,QAAQ,CAAC,MAAM;AACb,uBAAW,KAAK;AAChB,iBAAK,SAAS,CAAC;AAAA,UACjB;AAAA,UACA,UAAU,CAAC,MAAM,WAAW,EAAE,OAAO,KAAK;AAAA;AAAA,MAC5C;AAAA,MACC,gBAAgB,6CAAC,SAAI,OAAO,YAAa,wBAAa;AAAA,OACzD;AAAA,KACE,SAAS,SAAS,6CAAC,UAAK,OAAO,WAAY,mBAAS,MAAK;AAAA,KAC7D;AAEJ;;;AClHA,IAAAC,gBAAyB;AA0GrB,IAAAC,sBAAA;AAvFJ,IAAM,gBAA+B;AAAA,EACnC,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AACd;AAEO,SAAS,OAAO;AAAA,EACrB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AACT,GAAgB;AACd,QAAM,QAAQ,SAAS;AACvB,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,QAAM,UAA6C;AAAA,IACjD,IAAI,EAAE,QAAQ,IAAI,aAAa,IAAI,cAAc,IAAI,UAAU,GAAG;AAAA,IAClE,IAAI,EAAE,QAAQ,IAAI,aAAa,IAAI,cAAc,IAAI,UAAU,GAAG;AAAA,IAClE,IAAI,EAAE,QAAQ,IAAI,aAAa,IAAI,cAAc,IAAI,UAAU,GAAG;AAAA,EACpE;AAEA,QAAM,OAAsB;AAAA,IAC1B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL,cAAc,MAAM;AAAA,IACpB,YAAY,MAAM;AAAA,IAClB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ,YAAY,UAAU,gBAAgB;AAAA,IAC9C,YAAY;AAAA,IACZ,OAAO,YAAY,SAAS;AAAA,IAC5B,SAAS,WAAW,OAAO,WAAW,CAAC,YAAY,CAAC,UAAU,OAAO;AAAA,IACrE,WAAW,WAAW,CAAC,YAAY,CAAC,UAAU,qBAAqB;AAAA,IACnE,YAAY;AAAA,IACZ,GAAG,QAAQ,IAAI;AAAA,EACjB;AAEA,MAAI,eAA8B,CAAC;AACnC,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,qBAAe;AAAA,QACb,YAAY,2BAA2B,MAAM,YAAY,KAAK,MAAM,UAAU;AAAA,QAC9E,OAAO;AAAA,QACP,WAAW,UAAU,cAAc,MAAM,YAAY,OAAO;AAAA,MAC9D;AACA;AAAA,IACF,KAAK;AACH,qBAAe;AAAA,QACb,YAAY,GAAG,MAAM,YAAY;AAAA,QACjC,OAAO,MAAM;AAAA,MACf;AACA;AAAA,IACF,KAAK;AACH,qBAAe;AAAA,QACb,YAAY;AAAA,QACZ,OAAO,MAAM;AAAA,QACb,QAAQ,eAAe,MAAM,MAAM;AAAA,MACrC;AACA;AAAA,IACF,KAAK;AACH,qBAAe;AAAA,QACb,YAAY;AAAA,QACZ,OAAO,MAAM;AAAA,MACf;AACA;AAAA,IACF,KAAK;AACH,qBAAe;AAAA,QACb,YAAY,MAAM;AAAA,QAClB,OAAO,MAAM;AAAA,QACb,QAAQ,eAAe,MAAM,MAAM;AAAA,MACrC;AACA;AAAA,EACJ;AAEA,SACE,8EACE;AAAA,iDAAC,WAAO,0EAA+D;AAAA,IACvE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,UAAU,YAAY;AAAA,QACtB;AAAA,QACA,cAAc,MAAM,WAAW,IAAI;AAAA,QACnC,cAAc,MAAM,WAAW,KAAK;AAAA,QACpC,OAAO,EAAE,GAAG,MAAM,GAAG,cAAc,GAAG,UAAU;AAAA,QAE/C,oBAAU,6CAAC,UAAK,OAAO,eAAe,IAAK;AAAA;AAAA,IAC9C;AAAA,KACF;AAEJ;;;ACzFI,IAAAC,sBAAA;AAxBG,SAAS,QAAQ,EAAE,QAAQ,mBAAmB,GAAiB;AACpE,QAAM,QAAQ,SAAS;AAEvB,QAAM,iBAAgC;AAAA,IACpC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,QAAQ;AAAA,EACV;AAEA,QAAM,YAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY,MAAM;AAAA,EACpB;AAEA,QAAM,YAA2B;AAAA,IAC/B,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAEA,SACE,8CAAC,SAAI,OAAO,gBACV;AAAA,iDAAC,SAAI,OAAO,WAAW;AAAA,IACvB,6CAAC,UAAK,OAAO,WAAY,iBAAM;AAAA,IAC/B,6CAAC,SAAI,OAAO,WAAW;AAAA,KACzB;AAEJ;;;ACrCA,IAAAC,gBAAwC;AAkHpC,IAAAC,sBAAA;AAjGJ,SAAS,aAAa,OAAgB,UAA0B;AAC9D,SAAO,iBAAiB,SAAS,MAAM,UAAU,MAAM,UAAU;AACnE;AAEA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkB;AAChB,QAAM,QAAQ,SAAS;AACvB,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAS,EAAE;AACnC,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,EAAE;AACrC,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,EAAE;AACvC,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAChD,QAAM,cAAU,qBAAM;AACtB,QAAM,oBAAgB,sBAAO,KAAK;AAClC,QAAM,oBAAgB,sBAAO,KAAK;AAElC,QAAM,eAAe,YAAY;AAC/B,QAAI,cAAc,QAAS;AAC3B,QAAI,CAAC,KAAK,KAAK,GAAG;AAChB,eAAS,GAAG,KAAK,cAAc;AAC/B;AAAA,IACF;AACA,kBAAc,UAAU;AACxB,eAAW,IAAI;AACf,aAAS,EAAE;AACX,cAAU,EAAE;AACZ,QAAI;AACF,YAAM,SAAS,KAAK,KAAK,CAAC;AAAA,IAC5B,SAAS,aAAa;AACpB,eAAS,aAAa,aAAa,qBAAqB,CAAC;AAAA,IAC3D,UAAE;AACA,oBAAc,UAAU;AACxB,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,eAAe,YAAY;AAC/B,QAAI,CAAC,YAAY,cAAc,QAAS;AACxC,kBAAc,UAAU;AACxB,iBAAa,IAAI;AACjB,aAAS,EAAE;AACX,cAAU,EAAE;AACZ,QAAI;AACF,YAAM,SAAS;AACf,gBAAU,wBAAwB;AAAA,IACpC,SAAS,aAAa;AACpB,eAAS,aAAa,aAAa,oCAAoC,CAAC;AAAA,IAC1E,UAAE;AACA,oBAAc,UAAU;AACxB,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,aAA4B;AAAA,IAChC,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO,MAAM;AAAA,IACb,WAAW;AAAA,IACX,eAAe;AAAA,EACjB;AAEA,QAAM,mBAAkC;AAAA,IACtC,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO,MAAM;AAAA,IACb,WAAW;AAAA,EACb;AAEA,QAAM,aAA4B;AAAA,IAChC,SAAS;AAAA,IACT,cAAc,MAAM;AAAA,IACpB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAEA,QAAM,cAA6B;AAAA,IACjC,SAAS;AAAA,IACT,cAAc,MAAM;AAAA,IACpB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAEA,SACE,8EACE;AAAA,iDAAC,QAAG,OAAO,YAAa,iBAAM;AAAA,IAC9B,6CAAC,OAAE,OAAO,kBAAmB,uBAAY;AAAA,IACxC,SAAS,6CAAC,SAAI,IAAI,SAAS,MAAK,SAAQ,OAAO,YAAa,iBAAM;AAAA,IAClE,UAAU,6CAAC,SAAI,MAAK,UAAS,aAAU,UAAS,OAAO,aAAc,kBAAO;AAAA,IAC7E;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAU;AAAA,QACV,cAAa;AAAA,QACb,UAAU;AAAA,QACV,gBAAc,CAAC,CAAC;AAAA,QAChB,oBAAkB,QAAQ,UAAU;AAAA;AAAA,IACtC;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAS;AAAA,QACT;AAAA,QACA,UAAU;AAAA,QACV,SAAS;AAAA,QAER;AAAA;AAAA,IACH;AAAA,IACC,YACC;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,SAAS;AAAA,QACV;AAAA;AAAA,IAED;AAAA,IAEF;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAS;AAAA,QACT,UAAU,WAAW;AAAA,QACrB,SAAS;AAAA,QAER;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;AAUO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,aAAa,uCAAuC,KAAK;AAAA,MACzD,OAAM;AAAA,MACN,aAAY;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AAOO,SAAS,QAAQ,EAAE,UAAU,OAAO,GAAiB;AAC1D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,aAAY;AAAA,MACZ,OAAM;AAAA,MACN,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,UAAU;AAAA,MACV;AAAA;AAAA,EACF;AAEJ;;;AC/MO,SAAS,WAAW,KAAmB;AAC5C,SAAO,SAAS,OAAO,GAAG;AAC5B;;;APuLQ,IAAAC,sBAAA;AA9JR,SAAS,WAAW,EAAE,gBAAgB,UAAU,kBAAkB,iBAAiB,GAAoC;AACrH,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,EAAE,UAAU,WAAW,SAAS,IAAI,YAAY;AAEtD,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,EAAE;AACrC,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,EAAE;AAC3C,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,KAAK;AACtD,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAwB,IAAI;AACpE,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,EAAE;AACrC,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAqB,EAAE,MAAM,cAAc,CAAC;AACpE,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAgD,CAAC,CAAC;AACxF,QAAM,yBAAqB,sBAAO,KAAK;AACvC,QAAM,gBAAY,sBAAO,KAAK;AAE9B,QAAM,iBAAiB,MAAM;AAC3B,QAAI,UAAU,QAAS;AACvB,cAAU,UAAU;AACpB,QAAI,eAAgB,YAAW,cAAc;AAC7C,eAAW;AAAA,EACb;AAEA,QAAM,WAAW,MAAM;AACrB,UAAM,OAA2B,CAAC;AAClC,QAAI,CAAC,MAAM,KAAK,EAAG,MAAK,QAAQ;AAAA,aACvB,CAAC,6BAA6B,KAAK,KAAK,EAAG,MAAK,QAAQ;AACjE,QAAI,CAAC,SAAU,MAAK,WAAW;AAC/B,mBAAe,IAAI;AACnB,WAAO,OAAO,KAAK,IAAI,EAAE,WAAW;AAAA,EACtC;AAEA,QAAM,eAAe,YAAY;AAC/B,QAAI,mBAAmB,WAAW,CAAC,SAAS,KAAK,CAAC,OAAQ;AAC1D,uBAAmB,UAAU;AAC7B,eAAW,IAAI;AACf,aAAS,EAAE;AACX,QAAI;AACF,YAAM,SAAS,MAAM,OAAO,gBAAgB,OAAO,QAAQ;AAC3D,UAAI,uBAAuB,UAAU,OAAO,mBAAmB;AAC7D,gBAAQ,EAAE,MAAM,gBAAgB,OAAO,OAAO,MAAM,CAAC;AACrD;AAAA,MACF;AACA,qBAAe;AAAA,IACjB,SAAS,aAAa;AACpB,UAAI,uBAAuB,mCAAwB;AACjD,gBAAQ,EAAE,MAAM,OAAO,UAAU,YAAY,SAAS,CAAC;AAAA,MACzD,OAAO;AACL,iBAAS,uBAAuB,SAAS,YAAY,UAAU,YAAY,UAAU,gBAAgB;AAAA,MACvG;AAAA,IACF,UAAE;AACA,yBAAmB,UAAU;AAC7B,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,oBAAoB,MAAM;AAC9B,aAAS,EAAE;AACX,YAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,EACjC;AAEA,QAAM,cAAc,OAAO,aAAgC;AACzD,QAAI,CAAC,UAAU,mBAAmB,QAAS;AAC3C,uBAAmB,UAAU;AAC7B,oBAAgB,QAAQ;AACxB,aAAS,EAAE;AACX,QAAI;AACF,YAAM,OAAO,gBAAgB,QAAQ;AAAA,IACvC,SAAS,GAAQ;AACf,eAAS,GAAG,WAAW,sBAAsB;AAAA,IAC/C,UAAE;AACA,yBAAmB,UAAU;AAC7B,sBAAgB,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,YAA2B;AAAA,IAC/B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY,MAAM;AAAA,IAClB,cAAc,QAAQ,MAAM,YAAY;AAAA,IACxC,WAAW;AAAA,IACX,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,YAAY,MAAM;AAAA,EACpB;AAEA,QAAM,YAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAEA,QAAM,aAA4B;AAAA,IAChC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO,MAAM;AAAA,IACb,WAAW;AAAA,IACX,eAAe;AAAA,EACjB;AAEA,QAAM,gBAA+B;AAAA,IACnC,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AAEA,QAAM,gBAA+B;AAAA,IACnC,SAAS;AAAA,IACT,cAAc,MAAM;AAAA,IACpB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAEA,QAAM,cAA6B;AAAA,IACjC,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AAEA,QAAM,YAA2B;AAAA,IAC/B,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY,MAAM;AAAA,IAClB,gBAAgB;AAAA,EAClB;AAEA,QAAM,cAA6B;AAAA,IACjC,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,IACb,YAAY;AAAA,EACd;AAEA,QAAM,cAAc,eAChB,4LACA;AAEJ,QAAM,cAAc,SAAS,sBAAsB;AACnD,QAAM,cAAc,SAAS,gBAAgB,SAAS,UAAU,SAAS,KAAK;AAE9E,QAAM,kBAAkB,UAAU;AAAA,IAChC,CAAC,MAAM,EAAE,SAAS,mBAAmB,CAAC,GAAG,SAAS,CAAC;AAAA,EACrD;AAEA,MAAI,CAAC,UAAU;AACb,WACE,6CAAC,SAAI,OAAO,EAAE,GAAG,WAAW,YAAY,UAAU,gBAAgB,UAAU,WAAW,IAAI,GACzF;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQ,aAAa,MAAM,YAAY;AAAA,UACvC,gBAAgB,MAAM;AAAA,UACtB,cAAc;AAAA,UACd,SAAS;AAAA,UACT,WAAW;AAAA,QACb;AAAA;AAAA,IACF,GACF;AAAA,EAEJ;AAEA,MAAI,KAAK,SAAS,gBAAgB;AAChC,WACE,6CAAC,SAAI,OAAO,WACV;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,KAAK;AAAA,QACZ,WAAU;AAAA,QACV,UAAU,OAAO,SAAS;AACxB,cAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,wBAAwB;AACrD,gBAAM,OAAO,YAAY,KAAK,OAAO,IAAI;AACzC,yBAAe;AAAA,QACjB;AAAA,QACA,UAAU,YAAY;AACpB,cAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,wBAAwB;AACrD,gBAAM,OAAO,uBAAuB,KAAK,KAAK;AAAA,QAChD;AAAA,QACA,QAAQ;AAAA;AAAA,IACV,GACF;AAAA,EAEJ;AAEA,MAAI,KAAK,SAAS,OAAO;AACvB,WACE,6CAAC,SAAI,OAAO,WACV;AAAA,MAAC;AAAA;AAAA,QACC,UAAU,OAAO,SAAS;AACxB,cAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,wBAAwB;AACrD,gBAAM,OAAO,UAAU,KAAK,UAAU,IAAI;AAC1C,yBAAe;AAAA,QACjB;AAAA,QACA,QAAQ;AAAA;AAAA,IACV,GACF;AAAA,EAEJ;AAEA,SACE,8CAAC,SAAI,OAAO,WACV;AAAA,kDAAC,SAAI,OAAO,WACT;AAAA,eAAS,eACR,6CAAC,SAAI,KAAK,SAAS,aAAa,KAAK,SAAS,aAAa,QAAQ,OAAO,EAAE,QAAQ,IAAI,WAAW,UAAU,GAAG;AAAA,MAElH,6CAAC,QAAG,OAAO,YAAY,qBAAO;AAAA,MAC7B,SAAS,aACR,8CAAC,OAAE,OAAO,eAAe;AAAA;AAAA,QAAI,SAAS;AAAA,SAAU;AAAA,OAEpD;AAAA,IAEC,SAAS,6CAAC,SAAI,MAAK,SAAQ,OAAO,eAAgB,iBAAM;AAAA,IAExD,gBAAgB,SAAS,KACxB,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,GAC7D,0BAAgB,UAAU,IACzB,gBAAgB,IAAI,CAAC,aACnB;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,SAAS,iBAAiB;AAAA,QAC1B,UAAU,CAAC,CAAC,gBAAgB;AAAA,QAC5B,SAAS,MAAM,YAAY,QAAQ;AAAA,QACnC,cAAc,MAAM;AAAA;AAAA,MALf;AAAA,IAMP,CACD,IAED,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,UAAU,QAAQ,KAAK,IAAI,gBAAgB,SAAS,GAChF,0BAAgB,IAAI,CAAC,aACpB;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,SAAS,iBAAiB;AAAA,QAC1B,UAAU,CAAC,CAAC,gBAAgB;AAAA,QAC5B,SAAS,MAAM,YAAY,QAAQ;AAAA,QACnC,cAAc,MAAM;AAAA;AAAA,MALf;AAAA,IAMP,CACD,GACH,GAEJ;AAAA,IAGD,eAAe,6CAAC,WAAQ;AAAA,IAExB,eACC,8EACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,MAAK;AAAA,UACL,aAAY;AAAA,UACZ,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO,YAAY;AAAA,UACnB,cAAa;AAAA;AAAA,MACf;AAAA,MAEA,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAE,GAC7D;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAM,eAAe,SAAS;AAAA,YAC9B,aAAY;AAAA,YACZ,OAAO;AAAA,YACP,UAAU;AAAA,YACV,OAAO,YAAY;AAAA,YACnB,cAAa;AAAA,YACb,cACE;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAAA,gBACxC,OAAO,EAAE,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,SAAS,GAAG,SAAS,QAAQ,OAAO,MAAM,UAAU;AAAA,gBACpH,cAAY,eAAe,kBAAkB;AAAA,gBAE7C,uDAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SACrI,uDAAC,UAAK,GAAG,aAAa,GACxB;AAAA;AAAA,YACF;AAAA;AAAA,QAEJ;AAAA,QACC,oBACC,6CAAC,SAAI,OAAO,aACV,uDAAC,YAAO,MAAK,UAAS,OAAO,WAAW,SAAS,kBAAkB,8BAAgB,GACrF;AAAA,SAEJ;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAS;AAAA,UACT;AAAA,UACA,UAAU,CAAC,CAAC;AAAA,UACZ,SAAS;AAAA,UACV;AAAA;AAAA,MAED;AAAA,OACF;AAAA,IAGF,8CAAC,SAAI,OAAO,aAAa;AAAA;AAAA,MACA;AAAA,MACvB;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS;AAAA,UACV;AAAA;AAAA,MAED;AAAA,OACF;AAAA,IAEC,SAAS,kBAAkB,SAC1B,6CAAC,mBAAgB,cAAc,MAAM,cAAc,WAAW,MAAM,WAAW;AAAA,IAGhF,SAAS,YAAY,SAAS,aAC7B,8CAAC,SAAI,OAAO,EAAE,WAAW,UAAU,UAAU,IAAI,OAAO,MAAM,WAAW,WAAW,GAAG,GACpF;AAAA,eAAS,YACR,6CAAC,OAAE,MAAM,SAAS,UAAU,QAAO,UAAS,KAAI,uBAAsB,OAAO,EAAE,OAAO,MAAM,UAAU,GAAG,mBAAK;AAAA,MAE/G,SAAS,YAAY,SAAS,cAAc;AAAA,MAC5C,SAAS,cACR,6CAAC,OAAE,MAAM,SAAS,YAAY,QAAO,UAAS,KAAI,uBAAsB,OAAO,EAAE,OAAO,MAAM,UAAU,GAAG,qBAAO;AAAA,OAEtH,IACE;AAAA,KACN;AAEJ;AAUA,SAAS,YAAY,EAAE,UAAU,SAAS,UAAU,SAAS,aAAa,GAAqB;AAC7F,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,SAAS,+BAAgB,QAAQ,KAAK,EAAE,IAAI,QAAQ,MAAM,OAAO;AACvE,QAAM,OAAO,sCAAuB,QAAQ,KAAK;AACjD,QAAM,aAAS,oCAAwB,QAAQ;AAC/C,QAAM,cAAc,OAAO,GAAG,YAAY,MAAM;AAEhD,QAAM,QAAuB;AAAA,IAC3B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc;AAAA,IACd;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,OAAO,OAAO;AAAA,IACd,QAAQ,cAAc,wBAAwB;AAAA,IAC9C,QAAQ,WAAW,gBAAgB;AAAA,IACnC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,SAAS,WAAW,MAAM,UAAU,OAAO;AAAA,IAC3C,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,MAAM,WAAW,IAAI;AAAA,MACnC,cAAc,MAAM,WAAW,KAAK;AAAA,MACpC,cAAY,iBAAiB,IAAI;AAAA,MAEhC,oBACC,6CAAC,UAAK,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,QAAQ,aAAa,OAAO,IAAI,IAAI,gBAAgB,eAAe,cAAc,OAAO,SAAS,gBAAgB,WAAW,mCAAmC,GAAG,IAExM,8EACE;AAAA,qDAAC,UAAK,OAAO,EAAE,SAAS,QAAQ,YAAY,SAAS,GAAG,yBAAyB,EAAE,QAAQ,OAAO,QAAQ,GAAG;AAAA,QAC7G,8CAAC,UAAK;AAAA;AAAA,UAAe;AAAA,WAAK;AAAA,SAC5B;AAAA;AAAA,EAEJ;AAEJ;AAEA,SAAS,mBAAmB,EAAE,UAAU,SAAS,UAAU,SAAS,aAAa,GAAqB;AACpG,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,SAAS,+BAAgB,QAAQ,KAAK,EAAE,IAAI,QAAQ,MAAM,OAAO;AACvE,QAAM,OAAO,sCAAuB,QAAQ,KAAK;AACjD,QAAM,aAAS,oCAAwB,QAAQ;AAC/C,QAAM,cAAc,OAAO,GAAG,YAAY,MAAM;AAEhD,QAAM,QAAuB;AAAA,IAC3B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,QAAQ,cAAc,wBAAwB;AAAA,IAC9C,QAAQ,WAAW,gBAAgB;AAAA,IACnC,SAAS,WAAW,MAAM,UAAU,OAAO;AAAA,IAC3C,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,MAAM,WAAW,IAAI;AAAA,MACnC,cAAc,MAAM,WAAW,KAAK;AAAA,MACpC,cAAY,iBAAiB,IAAI;AAAA,MAEhC,oBACC,6CAAC,UAAK,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,QAAQ,aAAa,OAAO,IAAI,IAAI,gBAAgB,eAAe,cAAc,OAAO,SAAS,gBAAgB,WAAW,mCAAmC,GAAG,IAExM,6CAAC,UAAK,OAAO,EAAE,SAAS,OAAO,GAAG,yBAAyB,EAAE,QAAQ,OAAO,QAAQ,GAAG;AAAA;AAAA,EAE3F;AAEJ;AAEA,SAAS,gBAAgB,EAAE,cAAc,UAAU,GAAgD;AACjG,SACE,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,KAAK,GAAG,WAAW,GAAG,GACnG;AAAA,kDAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAChE;AAAA,mDAAC,UAAK,GAAE,gFAA+E,MAAM,cAAc,SAAQ,QAAM;AAAA,MACzH,6CAAC,UAAK,GAAE,wBAAuB,QAAO,SAAQ,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAO;AAAA,OAC9G;AAAA,IACA,8CAAC,UAAK,OAAO,EAAE,UAAU,IAAI,OAAO,UAAU,GAAG;AAAA;AAAA,MACpC;AAAA,MACX,6CAAC,OAAE,MAAK,sBAAqB,QAAO,UAAS,KAAI,uBAAsB,OAAO,EAAE,OAAO,cAAc,gBAAgB,QAAQ,YAAY,IAAI,GAAG,oBAEhJ;AAAA,OACF;AAAA,KACF;AAEJ;AAEO,SAAS,OAAO,EAAE,YAAY,gBAAgB,UAAU,kBAAkB,iBAAiB,GAAgB;AAChH,QAAM,EAAE,UAAU,SAAS,IAAI,YAAY;AAE3C,QAAM,oBAAoB,WAAW,EAAE,GAAG,UAAU,GAAI,YAAY,aAAa,CAAC,EAAG,IAAI;AAEzF,SACE,8CAAC,iBAAc,UAAU,mBAAmB,WAAW,YAAY,WAAW,OAAO,EAAE,SAAS,QAAQ,gBAAgB,SAAS,GAC/H;AAAA,iDAAC,WAAO,0EAA+D;AAAA,IACvE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;AQlfA,IAAAC,gBAAiC;AAGjC,IAAAC,iBAAwD;AACxD,IAAAC,aAAwC;AAsKhC,IAAAC,sBAAA;AArJR,SAAS,WAAW,EAAE,gBAAgB,UAAU,iBAAiB,GAAoC;AACnG,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,EAAE,UAAU,WAAW,SAAS,IAAI,YAAY;AAEtD,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,EAAE;AACjD,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,EAAE;AACrC,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,EAAE;AAC3C,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,wBAAS,EAAE;AACzD,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,KAAK;AACtD,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAwB,IAAI;AACpE,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,EAAE;AACrC,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,wBAAwB,IAAI;AAC9E,QAAM,CAAC,aAAa,cAAc,QAAI,wBAKnC,CAAC,CAAC;AACL,QAAM,yBAAqB,sBAAO,KAAK;AACvC,QAAM,gBAAY,sBAAO,KAAK;AAE9B,QAAM,iBAAiB,MAAM;AAC3B,QAAI,UAAU,QAAS;AACvB,cAAU,UAAU;AACpB,QAAI,eAAgB,YAAW,cAAc;AAC7C,eAAW;AAAA,EACb;AAEA,QAAM,WAAW,MAAM;AACrB,UAAM,OAA2B,CAAC;AAClC,QAAI,CAAC,MAAM,KAAK,EAAG,MAAK,QAAQ;AAAA,aACvB,CAAC,6BAA6B,KAAK,KAAK,EAAG,MAAK,QAAQ;AACjE,QAAI,CAAC,SAAU,MAAK,WAAW;AAAA,aACtB,SAAS,SAAS,EAAG,MAAK,WAAW;AAC9C,QAAI,oBAAoB,SAAU,MAAK,kBAAkB;AACzD,mBAAe,IAAI;AACnB,WAAO,OAAO,KAAK,IAAI,EAAE,WAAW;AAAA,EACtC;AAEA,QAAM,eAAe,YAAY;AAC/B,QAAI,mBAAmB,WAAW,CAAC,SAAS,KAAK,CAAC,OAAQ;AAC1D,uBAAmB,UAAU;AAC7B,eAAW,IAAI;AACf,aAAS,EAAE;AACX,QAAI;AACF,YAAM,SAAS,MAAM,OAAO,gBAAgB,OAAO,UAAU,cAAc,EAAE,YAAY,IAAI,MAAS;AACtG,UAAI,uBAAuB,UAAU,OAAO,mBAAmB;AAC7D,6BAAqB,OAAO,KAAK;AACjC;AAAA,MACF;AACA,qBAAe;AAAA,IACjB,SAAS,aAAa;AACpB,eAAS,uBAAuB,SAAS,YAAY,UAAU,YAAY,UAAU,gBAAgB;AAAA,IACvG,UAAE;AACA,yBAAmB,UAAU;AAC7B,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,cAAc,OAAO,aAAgC;AACzD,QAAI,CAAC,UAAU,mBAAmB,QAAS;AAC3C,uBAAmB,UAAU;AAC7B,oBAAgB,QAAQ;AACxB,aAAS,EAAE;AACX,QAAI;AACF,YAAM,OAAO,gBAAgB,QAAQ;AAAA,IACvC,SAAS,GAAQ;AACf,eAAS,GAAG,WAAW,sBAAsB;AAAA,IAC/C,UAAE;AACA,yBAAmB,UAAU;AAC7B,sBAAgB,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,YAA2B;AAAA,IAC/B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY,MAAM;AAAA,IAClB,cAAc,QAAQ,MAAM,YAAY;AAAA,IACxC,WAAW;AAAA,IACX,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,YAAY,MAAM;AAAA,EACpB;AAEA,QAAM,YAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAEA,QAAM,aAA4B;AAAA,IAChC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO,MAAM;AAAA,IACb,WAAW;AAAA,IACX,eAAe;AAAA,EACjB;AAEA,QAAM,gBAA+B;AAAA,IACnC,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AAEA,QAAM,gBAA+B;AAAA,IACnC,SAAS;AAAA,IACT,cAAc,MAAM;AAAA,IACpB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAEA,QAAM,YAA2B;AAAA,IAC/B,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY,MAAM;AAAA,IAClB,gBAAgB;AAAA,EAClB;AAEA,QAAM,cAA6B;AAAA,IACjC,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,IACb,YAAY;AAAA,EACd;AAEA,QAAM,cAAc,SAAS,sBAAsB;AACnD,QAAM,cAAc,SAAS,gBAAgB,SAAS,UAAU,SAAS,KAAK;AAE9E,QAAM,kBAAkB,UAAU;AAAA,IAChC,CAAC,MAAM,EAAE,SAAS,mBAAmB,CAAC,GAAG,SAAS,CAAC;AAAA,EACrD;AAEA,MAAI,CAAC,UAAU;AACb,WACE,6CAAC,SAAI,OAAO,EAAE,GAAG,WAAW,YAAY,UAAU,gBAAgB,UAAU,WAAW,IAAI,GACzF;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQ,aAAa,MAAM,YAAY;AAAA,UACvC,gBAAgB,MAAM;AAAA,UACtB,cAAc;AAAA,UACd,SAAS;AAAA,UACT,WAAW;AAAA,QACb;AAAA;AAAA,IACF,GACF;AAAA,EAEJ;AAEA,MAAI,mBAAmB;AACrB,WACE,6CAAC,SAAI,OAAO,WACV;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,WAAU;AAAA,QACV,UAAU,OAAO,SAAS;AACxB,cAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,wBAAwB;AACrD,gBAAM,OAAO,YAAY,mBAAmB,IAAI;AAChD,yBAAe;AAAA,QACjB;AAAA,QACA,UAAU,YAAY;AACpB,cAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,wBAAwB;AACrD,gBAAM,OAAO,uBAAuB,iBAAiB;AAAA,QACvD;AAAA,QACA,QAAQ,MAAM;AACZ,mBAAS,EAAE;AACX,+BAAqB,IAAI;AAAA,QAC3B;AAAA;AAAA,IACF,GACF;AAAA,EAEJ;AAEA,QAAM,cAAc,eAChB,4LACA;AAEJ,SACE,8CAAC,SAAI,OAAO,WACV;AAAA,kDAAC,SAAI,OAAO,WACT;AAAA,eAAS,eACR,6CAAC,SAAI,KAAK,SAAS,aAAa,KAAK,SAAS,aAAa,QAAQ,OAAO,EAAE,QAAQ,IAAI,WAAW,UAAU,GAAG;AAAA,MAElH,6CAAC,QAAG,OAAO,YAAY,4BAAc;AAAA,MACpC,SAAS,aACR,8CAAC,OAAE,OAAO,eAAe;AAAA;AAAA,QAAM,SAAS;AAAA,SAAU;AAAA,OAEtD;AAAA,IAEC,SAAS,6CAAC,SAAI,MAAK,SAAQ,OAAO,eAAgB,iBAAM;AAAA,IAExD,gBAAgB,SAAS,KACxB,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,GAC7D,0BAAgB,UAAU,IACzB,gBAAgB,IAAI,CAAC,aACnB;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,SAAS,iBAAiB;AAAA,QAC1B,UAAU,CAAC,CAAC,gBAAgB;AAAA,QAC5B,SAAS,MAAM,YAAY,QAAQ;AAAA,QACnC,cAAc,MAAM;AAAA;AAAA,MALf;AAAA,IAMP,CACD,IAED,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,UAAU,QAAQ,KAAK,IAAI,gBAAgB,SAAS,GAChF,0BAAgB,IAAI,CAAC,aACpB;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,SAAS,iBAAiB;AAAA,QAC1B,UAAU,CAAC,CAAC,gBAAgB;AAAA,QAC5B,SAAS,MAAM,YAAY,QAAQ;AAAA,QACnC,cAAc,MAAM;AAAA;AAAA,MALf;AAAA,IAMP,CACD,GACH,GAEJ;AAAA,IAGD,eAAe,6CAAC,WAAQ;AAAA,IAExB,eACC,8EACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,MAAK;AAAA,UACL,aAAY;AAAA,UACZ,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO,YAAY;AAAA,UACnB,cAAa;AAAA;AAAA,MACf;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,MAAK;AAAA,UACL,aAAY;AAAA,UACZ,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO,YAAY;AAAA,UACnB,cAAa;AAAA;AAAA,MACf;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,MAAM,eAAe,SAAS;AAAA,UAC9B,aAAY;AAAA,UACZ,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO,YAAY;AAAA,UACnB,cAAa;AAAA,UACb,cACE;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAAA,cACxC,OAAO,EAAE,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,SAAS,GAAG,SAAS,QAAQ,OAAO,MAAM,UAAU;AAAA,cACpH,cAAY,eAAe,kBAAkB;AAAA,cAE7C,uDAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SACrI,uDAAC,UAAK,GAAG,aAAa,GACxB;AAAA;AAAA,UACF;AAAA;AAAA,MAEJ;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,MAAM,eAAe,SAAS;AAAA,UAC9B,aAAY;AAAA,UACZ,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO,YAAY;AAAA,UACnB,cAAa;AAAA;AAAA,MACf;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAS;AAAA,UACT;AAAA,UACA,UAAU,CAAC,CAAC;AAAA,UACZ,SAAS;AAAA,UACV;AAAA;AAAA,MAED;AAAA,OACF;AAAA,IAGF,8CAAC,SAAI,OAAO,aAAa;AAAA;AAAA,MACE;AAAA,MACzB,6CAAC,YAAO,MAAK,UAAS,OAAO,WAAW,SAAS,kBAAkB,qBAEnE;AAAA,OACF;AAAA,IAEC,SAAS,kBAAkB,SAC1B,6CAACC,kBAAA,EAAgB,cAAc,MAAM,cAAc,WAAW,MAAM,WAAW;AAAA,IAGhF,SAAS,YAAY,SAAS,aAC7B,8CAAC,SAAI,OAAO,EAAE,WAAW,UAAU,UAAU,IAAI,OAAO,MAAM,WAAW,WAAW,GAAG,GAAG;AAAA;AAAA,MAChD;AAAA,MACvC,SAAS,YACR,6CAAC,OAAE,MAAM,SAAS,UAAU,QAAO,UAAS,KAAI,uBAAsB,OAAO,EAAE,OAAO,MAAM,aAAa,GAAG,mBAAK;AAAA,MAElH,SAAS,YAAY,SAAS,cAAc;AAAA,MAC5C,SAAS,cACR,6CAAC,OAAE,MAAM,SAAS,YAAY,QAAO,UAAS,KAAI,uBAAsB,OAAO,EAAE,OAAO,MAAM,aAAa,GAAG,4BAAc;AAAA,OAEhI,IACE;AAAA,KACN;AAEJ;AAUA,SAAS,gBAAgB,EAAE,UAAU,SAAS,UAAU,SAAS,aAAa,GAAkB;AAC9F,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,SAAS,+BAAgB,QAAQ,KAAK,EAAE,IAAI,QAAQ,MAAM,OAAO;AACvE,QAAM,OAAO,sCAAuB,QAAQ,KAAK;AACjD,QAAM,aAAS,oCAAwB,QAAQ;AAC/C,QAAM,cAAc,OAAO,GAAG,YAAY,MAAM;AAEhD,QAAM,QAAuB;AAAA,IAC3B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc;AAAA,IACd;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,OAAO,OAAO;AAAA,IACd,QAAQ,cAAc,wBAAwB;AAAA,IAC9C,QAAQ,WAAW,gBAAgB;AAAA,IACnC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,SAAS,WAAW,MAAM,UAAU,OAAO;AAAA,IAC3C,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,MAAM,WAAW,IAAI;AAAA,MACnC,cAAc,MAAM,WAAW,KAAK;AAAA,MACpC,cAAY,iBAAiB,IAAI;AAAA,MAEhC,oBACC,6CAAC,UAAK,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,QAAQ,aAAa,OAAO,IAAI,IAAI,gBAAgB,eAAe,cAAc,OAAO,SAAS,gBAAgB,WAAW,mCAAmC,GAAG,IAExM,8EACE;AAAA,qDAAC,UAAK,OAAO,EAAE,SAAS,QAAQ,YAAY,SAAS,GAAG,yBAAyB,EAAE,QAAQ,OAAO,QAAQ,GAAG;AAAA,QAC7G,8CAAC,UAAK;AAAA;AAAA,UAAe;AAAA,WAAK;AAAA,SAC5B;AAAA;AAAA,EAEJ;AAEJ;AAEA,SAAS,gBAAgB,EAAE,UAAU,SAAS,UAAU,SAAS,aAAa,GAAkB;AAC9F,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,SAAS,+BAAgB,QAAQ,KAAK,EAAE,IAAI,QAAQ,MAAM,OAAO;AACvE,QAAM,OAAO,sCAAuB,QAAQ,KAAK;AACjD,QAAM,aAAS,oCAAwB,QAAQ;AAC/C,QAAM,cAAc,OAAO,GAAG,YAAY,MAAM;AAEhD,QAAM,QAAuB;AAAA,IAC3B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,QAAQ,cAAc,wBAAwB;AAAA,IAC9C,QAAQ,WAAW,gBAAgB;AAAA,IACnC,SAAS,WAAW,MAAM,UAAU,OAAO;AAAA,IAC3C,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,MAAM,WAAW,IAAI;AAAA,MACnC,cAAc,MAAM,WAAW,KAAK;AAAA,MACpC,cAAY,iBAAiB,IAAI;AAAA,MAEhC,oBACC,6CAAC,UAAK,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,QAAQ,aAAa,OAAO,IAAI,IAAI,gBAAgB,eAAe,cAAc,OAAO,SAAS,gBAAgB,WAAW,mCAAmC,GAAG,IAExM,6CAAC,UAAK,OAAO,EAAE,SAAS,OAAO,GAAG,yBAAyB,EAAE,QAAQ,OAAO,QAAQ,GAAG;AAAA;AAAA,EAE3F;AAEJ;AAEA,SAASA,iBAAgB,EAAE,cAAc,UAAU,GAAgD;AACjG,SACE,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,KAAK,GAAG,WAAW,GAAG,GACnG;AAAA,kDAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAChE;AAAA,mDAAC,UAAK,GAAE,gFAA+E,MAAM,cAAc,SAAQ,QAAM;AAAA,MACzH,6CAAC,UAAK,GAAE,wBAAuB,QAAO,SAAQ,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAO;AAAA,OAC9G;AAAA,IACA,8CAAC,UAAK,OAAO,EAAE,UAAU,IAAI,OAAO,UAAU,GAAG;AAAA;AAAA,MACpC;AAAA,MACX,6CAAC,OAAE,MAAK,sBAAqB,QAAO,UAAS,KAAI,uBAAsB,OAAO,EAAE,OAAO,cAAc,gBAAgB,QAAQ,YAAY,IAAI,GAAG,oBAEhJ;AAAA,OACF;AAAA,KACF;AAEJ;AAEO,SAAS,OAAO,EAAE,YAAY,gBAAgB,UAAU,iBAAiB,GAAgB;AAC9F,QAAM,EAAE,UAAU,SAAS,IAAI,YAAY;AAE3C,QAAM,oBAAoB,WAAW,EAAE,GAAG,UAAU,GAAI,YAAY,aAAa,CAAC,EAAG,IAAI;AAEzF,SACE,8CAAC,iBAAc,UAAU,mBAAmB,WAAW,YAAY,WAAW,OAAO,EAAE,SAAS,QAAQ,gBAAgB,SAAS,GAC/H;AAAA,iDAAC,WAAO,0EAA+D;AAAA,IACvE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;ACpeA,IAAAC,iBAAyD;AAuDjD,IAAAC,sBAAA;AA1CR,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOG;AACD,QAAM,WAAW,cACb,YACG,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EACf,KAAK,EAAE,EACP,YAAY,EACZ,MAAM,GAAG,CAAC,KACZ,QAAQ,CAAC,KAAK,KAAK,YAAY;AAEpC,QAAM,cAA6B;AAAA,IACjC,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY,YAAY,gBAAgB,2BAA2B,YAAY,KAAK,UAAU;AAAA,IAC9F,OAAO;AAAA,IACP,UAAU,OAAO;AAAA,IACjB,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAEA,SACE,6CAAC,SAAI,OAAO,aACT,sBACC,6CAAC,SAAI,KAAK,WAAW,KAAK,eAAe,UAAU,OAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,GAAG,IAEjH,UAEJ;AAEJ;AAEA,SAAS,gBAAgB,EAAE,iBAAiB,eAAe,GAAwC;AACjG,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,MAAM,SAAS,YAAY,YAAY,oBAAoB,OAAO,IAAI,UAAU;AACxF,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,KAAK;AACtC,QAAM,kBAAc,uBAAuB,IAAI;AAE/C,QAAM,yBAAqB,4BAAY,CAAC,MAAkB;AACxD,QAAI,YAAY,WAAW,CAAC,YAAY,QAAQ,SAAS,EAAE,MAAc,GAAG;AAC1E,cAAQ,KAAK;AAAA,IACf;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,gCAAU,MAAM;AACd,QAAI,KAAM,UAAS,iBAAiB,aAAa,kBAAkB;AACnE,WAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,EAC3E,GAAG,CAAC,MAAM,kBAAkB,CAAC;AAE7B,MAAI,CAAC,YAAY;AACf,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,MAAM,WAAW;AAAA,QAC1B,OAAO;AAAA,UACL,SAAS;AAAA,UACT,cAAc,MAAM;AAAA,UACpB,QAAQ;AAAA,UACR,YAAY,2BAA2B,MAAM,YAAY,KAAK,MAAM,UAAU;AAAA,UAC9E,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,YAAY,MAAM;AAAA,QACpB;AAAA,QACD;AAAA;AAAA,IAED;AAAA,EAEJ;AAEA,QAAM,eAA8B;AAAA,IAClC,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,QAAQ,aAAa,MAAM,YAAY;AAAA,IACvC,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAEA,QAAM,gBAA+B;AAAA,IACnC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,KAAK;AAAA,IACL,UAAU;AAAA,IACV,YAAY,MAAM;AAAA,IAClB,QAAQ,aAAa,MAAM,MAAM;AAAA,IACjC,cAAc,MAAM;AAAA,IACpB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY,MAAM;AAAA,EACpB;AAEA,QAAM,cAA6B;AAAA,IACjC,SAAS;AAAA,IACT,cAAc,aAAa,MAAM,MAAM;AAAA,IACvC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAEA,QAAM,gBAAgB,CAAC,YAAqC;AAAA,IAC1D,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO,SAAS,YAAY,MAAM;AAAA,IAClC,YAAY;AAAA,IACZ,YAAY,MAAM;AAAA,IAClB,WAAW;AAAA,EACb;AAEA,SACE,8CAAC,SAAI,KAAK,aAAa,OAAO,EAAE,UAAU,YAAY,SAAS,eAAe,GAC5E;AAAA,iDAAC,YAAO,MAAK,UAAS,OAAO,cAAc,SAAS,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,cAAW,aACvF;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM;AAAA,QACjB,aAAa,MAAM;AAAA,QACnB,OAAO,MAAM;AAAA,QACb,MAAM;AAAA,QACN,cAAc,MAAM;AAAA,QACpB,YAAY,MAAM;AAAA;AAAA,IACpB,GACF;AAAA,IAEC,QACC,8CAAC,SAAI,OAAO,eACV;AAAA,oDAAC,SAAI,OAAO,aACV;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,MAAM;AAAA,YACjB,aAAa,MAAM;AAAA,YACnB,OAAO,MAAM;AAAA,YACb,MAAM;AAAA,YACN,cAAc,MAAM;AAAA,YACpB,YAAY,MAAM;AAAA;AAAA,QACpB;AAAA,QACA,8CAAC,SAAI,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,GAChC;AAAA,gBAAM,eACL,6CAAC,SAAI,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,MAAM,MAAM,UAAU,UAAU,cAAc,YAAY,YAAY,SAAS,GAChI,eAAK,aACR;AAAA,UAED,MAAM,SACL,6CAAC,SAAI,OAAO,EAAE,UAAU,IAAI,OAAO,MAAM,WAAW,UAAU,UAAU,cAAc,YAAY,YAAY,UAAU,WAAW,EAAE,GAClI,eAAK,OACR;AAAA,WAEJ;AAAA,SACF;AAAA,MAEC,sBACC;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,cAAc,MAAM;AAAA,UACpB;AAAA,UACA;AAAA;AAAA,MACF;AAAA,MAGD,kBACC;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,cAAc;AAAA,UACrB,SAAS,MAAM;AAAE,oBAAQ,KAAK;AAAG,mBAAO,SAAS,OAAO,cAAc;AAAA,UAAG;AAAA,UACzE,MACE,8CAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SACrI;AAAA,yDAAC,UAAK,GAAE,2CAAyC;AAAA,YACjD,6CAAC,YAAO,IAAG,MAAK,IAAG,KAAI,GAAE,KAAG;AAAA,aAC9B;AAAA,UAEH;AAAA;AAAA,MAED;AAAA,MAGF,6CAAC,SAAI,OAAO,EAAE,WAAW,aAAa,MAAM,MAAM,GAAG,GACnD;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,cAAc,IAAI;AAAA,UACzB,SAAS,YAAY;AACnB,oBAAQ,KAAK;AACb,kBAAM,QAAQ;AACd,gBAAI,gBAAiB,QAAO,SAAS,OAAO,eAAe;AAAA,UAC7D;AAAA,UACA,MACE,8CAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SACrI;AAAA,yDAAC,UAAK,GAAE,wCAAsC;AAAA,YAC9C,6CAAC,cAAS,QAAO,oBAAkB;AAAA,YACnC,6CAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAI;AAAA,aACtC;AAAA,UAEH;AAAA;AAAA,MAED,GACF;AAAA,OACF;AAAA,KAEJ;AAEJ;AAEA,SAAS,WAAW;AAAA,EAClB,OAAOC;AAAA,EACP;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAE5C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAO;AAAA,QACL,GAAGA;AAAA,QACH,YAAY,UAAWA,WAAU,UAAU,YAAY,YAAY,YAAa;AAAA,MAClF;AAAA,MACA;AAAA,MACA,cAAc,MAAM,WAAW,IAAI;AAAA,MACnC,cAAc,MAAM,WAAW,KAAK;AAAA,MAEnC;AAAA;AAAA,QACA;AAAA;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,cAAc,aAAa,MAAM,MAAM;AAAA,QACvC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,MACP;AAAA,MAEC;AAAA,YAAI,UACH,6CAAC,SAAI,KAAK,IAAI,SAAS,KAAK,IAAI,MAAM,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,WAAW,QAAQ,GAAG,IAE7G;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,YAAY,GAAG,YAAY;AAAA,cAC3B,OAAO;AAAA,cACP,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,UAAU;AAAA,cACV,YAAY;AAAA,YACd;AAAA,YAEC,cAAI,KAAK,CAAC,GAAG,YAAY;AAAA;AAAA,QAC5B;AAAA,QAEF,8CAAC,SAAI,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,GACjC;AAAA,uDAAC,SAAI,OAAO,EAAE,UAAU,IAAI,OAAO,MAAM,UAAU,GAAG,0BAAY;AAAA,UAClE,6CAAC,SAAI,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,MAAM,MAAM,UAAU,UAAU,cAAc,YAAY,YAAY,SAAS,GAChI,cAAI,MACP;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,WAAW,EAAE,YAAY,iBAAiB,eAAe,GAAoB;AAC3F,QAAM,EAAE,SAAS,IAAI,YAAY;AACjC,QAAM,oBAAoB,EAAE,GAAG,UAAU,GAAI,YAAY,aAAa,CAAC,EAAG;AAE1E,SACE,6CAAC,iBAAc,UAAU,mBAAmB,OAAO,EAAE,SAAS,eAAe,GAC3E,uDAAC,mBAAgB,iBAAkC,gBAAgC,GACrF;AAEJ;;;AClUS,IAAAC,uBAAA;AAHF,SAAS,SAAS,EAAE,SAAS,GAAkB;AACpD,QAAM,EAAE,YAAY,UAAU,IAAI,UAAU;AAC5C,MAAI,aAAa,CAAC,WAAY,QAAO;AACrC,SAAO,+EAAG,UAAS;AACrB;;;ACDS,IAAAC,uBAAA;AAHF,SAAS,UAAU,EAAE,SAAS,GAAmB;AACtD,QAAM,EAAE,YAAY,UAAU,IAAI,UAAU;AAC5C,MAAI,aAAa,WAAY,QAAO;AACpC,SAAO,+EAAG,UAAS;AACrB;;;ACGmC,IAAAC,uBAAA;AAJ5B,SAAS,QAAQ,EAAE,UAAU,WAAW,MAAM,UAAU,GAAiB;AAC9E,QAAM,EAAE,YAAY,WAAW,KAAK,IAAI,UAAU;AAElD,MAAI,UAAW,QAAO;AACtB,MAAI,CAAC,cAAc,CAAC,KAAM,QAAO,+EAAG,oBAAS;AAC7C,MAAI,aAAa,CAAC,UAAU,IAAI,EAAG,QAAO,+EAAG,oBAAS;AAEtD,SAAO,+EAAG,UAAS;AACrB;;;AClBA,IAAAC,iBAAgF;AAChF,IAAAC,aAAwC;AA6F9B,IAAAC,uBAAA;AApEV,IAAM,YAAiC;AAAA,EACrC,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,KAAK;AAAA,EACL,aAAa;AAAA,EACb,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,OAAO;AACT;AAEA,IAAM,mBAAwC;AAAA,EAC5C,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AACX;AAEO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,eAAe;AAAA,EACf,SAAS;AAAA,EACT,OAAO;AACT,GAAsB;AACpB,QAAM,SAAS,+BAAgB,QAAQ,KAAK,EAAE,IAAI,QAAQ,MAAM,OAAO;AACvE,QAAM,cAAc,sCAAuB,QAAQ,KAAK;AACxD,QAAM,cAAc,SAAS,iBAAiB,WAAW;AACzD,QAAM,cAAc,OAAO,GAAG,YAAY,MAAM;AAChD,QAAM,mBAAmB,aAAa,UAAU,KAAK;AACrD,QAAM,aAAS,oCAAwB,QAAQ;AAC/C,QAAM,UAAU,OAAO,QAAQ,QAAQ,eAAe,UAAU,gBAAgB,GAAG,EAAE,QAAQ,gBAAgB,WAAW,gBAAgB,GAAG;AAE3I,QAAM,cAAc,cAChB,EAAE,QAAQ,oBAAoB,IAC9B,CAAC;AAEL,MAAI,SAAS;AACX,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO;AAAA,UACL,GAAG;AAAA,UACH,iBAAiB,OAAO;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,QACA,SAAS,MAAM,QAAQ,QAAQ;AAAA,QAC/B,UAAU,YAAY;AAAA,QACtB,cAAY,gBAAgB,WAAW;AAAA,QAEtC,oBACC;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ,aAAa,OAAO,IAAI;AAAA,cAChC,gBAAgB;AAAA,cAChB,cAAc;AAAA,cACd,WAAW;AAAA,YACb;AAAA;AAAA,QACF,IAEA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,YAAY,EAAE;AAAA,YAC9D,yBAAyB,EAAE,QAAQ,QAAQ;AAAA;AAAA,QAC7C;AAAA;AAAA,IAEJ;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,QACL,GAAG;AAAA,QACH,iBAAiB,OAAO;AAAA,QACxB,OAAO,OAAO;AAAA,QACd;AAAA,QACA;AAAA,QACA,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,SAAS,MAAM,QAAQ,QAAQ;AAAA,MAC/B,UAAU,YAAY;AAAA,MACtB,cAAY,gBAAgB,WAAW;AAAA,MAEtC,oBACC;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,SAAS;AAAA,YACT,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ,aAAa,OAAO,IAAI;AAAA,YAChC,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW;AAAA,UACb;AAAA;AAAA,MACF,IAEA,gFACE;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,YAAY,EAAE;AAAA,YAC9D,yBAAyB,EAAE,QAAQ,QAAQ;AAAA;AAAA,QAC7C;AAAA,QACA,8CAAC,UAAK,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,YAAY,SAAS,GAChE,uBACH;AAAA,SACF;AAAA;AAAA,EAEJ;AAEJ;;;AC5JA,IAAAC,iBAAoC;AAqE5B,IAAAC,uBAAA;AA5CD,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAAuB;AACrB,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,CAAC,WAAW,YAAY,QAAI,yBAA8B,CAAC,CAAC;AAClE,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAwB,IAAI;AAE1E,gCAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,WAAO,aAAa,EAAE,KAAK,CAAC,MAA2B,aAAa,CAAC,CAAC;AAAA,EACxE,GAAG,CAAC,MAAM,CAAC;AAEX,MAAI,UAAU,WAAW,EAAG,QAAO;AAEnC,QAAM,cAAc,QAAQ,UAAU,KAAK;AAE3C,QAAM,cAAc,OAAO,aAAgC;AACzD,QAAI,CAAC,OAAQ;AACb,uBAAmB,QAAQ;AAC3B,QAAI;AACF,YAAM,OAAO,gBAAgB,QAAQ;AACrC,kBAAY;AAAA,IACd,SAAS,GAAQ;AACf,YAAM,QAAQ,aAAa,QAAQ,IAAI,IAAI,MAAM,OAAO,CAAC,CAAC;AAC1D,gBAAU,KAAK;AAAA,IACjB,UAAE;AACA,yBAAmB,IAAI;AAAA,IACzB;AAAA,EACF;AAEA,QAAM,iBAAsC,UACxC,EAAE,SAAS,QAAQ,eAAe,OAAO,UAAU,QAAQ,gBAAgB,UAAU,KAAK,aAAa,GAAG,UAAU,IACpH,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,aAAa,GAAG,UAAU;AAE/E,SACE,8CAAC,SAAI,WAAsB,OAAO,gBAC/B,oBAAU,IAAI,CAAC,aACd;AAAA,IAAC;AAAA;AAAA,MAEC;AAAA,MACA,SAAS;AAAA,MACT,SAAS,oBAAoB;AAAA,MAC7B,UAAU,CAAC,CAAC;AAAA,MACZ;AAAA,MACA,OAAO,SAAS,QAAQ;AAAA,MACvB,GAAG;AAAA;AAAA,IAPC;AAAA,EAQP,CACD,GACH;AAEJ;;;AClFA,IAAAC,iBAAkD;AAuB3C,SAAS,eAAmC;AACjD,QAAM,UAAM,2BAAW,aAAa;AACpC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,mDAAmD;AAE7E,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAuB,IAAI;AAErD,QAAM,WAAO;AAAA,IACX,OAAU,OAA4C;AACpD,mBAAa,IAAI;AACjB,eAAS,IAAI;AACb,UAAI;AACF,cAAM,SAAS,MAAM,GAAG;AACxB,eAAO;AAAA,MACT,SAAS,KAAK;AACZ,iBAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAC5D,eAAO;AAAA,MACT,UAAE;AACA,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,eAAW,4BAAY,YAAY;AACvC,WAAO,KAAK,MAAM,IAAI,OAAQ,SAAS,CAAC;AAAA,EAC1C,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAC;AAErB,QAAM,qBAAiB;AAAA,IACrB,OAAO,SAAiB;AACtB,YAAM,SAAS,MAAM,KAAK,MAAM,IAAI,OAAQ,eAAe,IAAI,CAAC;AAChE,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,gBAAY;AAAA,IAChB,OAAO,UAAkB,SAAiB;AACxC,YAAM,SAAS,MAAM,KAAK,MAAM,IAAI,OAAQ,UAAU,UAAU,IAAI,CAAC;AACrE,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,iBAAa;AAAA,IACjB,OAAO,SAAiB;AACtB,YAAM,SAAS,MAAM,KAAK,MAAM,IAAI,OAAQ,WAAW,IAAI,CAAC;AAC5D,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,mBAAe,4BAAY,YAAY;AAC3C,WAAO,KAAK,MAAM,IAAI,OAAQ,aAAa,CAAC;AAAA,EAC9C,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAC;AAErB,QAAM,4BAAwB;AAAA,IAC5B,OAAO,SAAiB;AACtB,aAAO,KAAK,MAAM,IAAI,OAAQ,sBAAsB,IAAI,CAAC;AAAA,IAC3D;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AChGA,IAAAC,iBAAkD;AAc3C,SAAS,oBAA6C;AAC3D,QAAM,UAAM,2BAAW,aAAa;AACpC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,wDAAwD;AAElF,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAuB,IAAI;AAErD,QAAM,WAAO;AAAA,IACX,OAAU,OAA4C;AACpD,mBAAa,IAAI;AACjB,eAAS,IAAI;AACb,UAAI;AACF,eAAO,MAAM,GAAG;AAAA,MAClB,SAAS,KAAK;AACZ,iBAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAC5D,eAAO;AAAA,MACT,UAAE;AACA,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,sBAAkB;AAAA,IACtB,CAAC,SAAkB,KAAK,MAAM,IAAI,OAAQ,gBAAgB,IAAI,CAAC;AAAA,IAC/D,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,8BAA0B;AAAA,IAC9B,OAAO,UAAmB;AACxB,YAAM,SAAS,MAAM,KAAK,MAAM,IAAI,OAAQ,wBAAwB,KAAK,CAAC;AAC1E,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,mBAAe;AAAA,IACnB,MAAM,KAAK,MAAM,IAAI,OAAQ,aAAa,CAAC;AAAA,IAC3C,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,oBAAgB;AAAA,IACpB,CAAC,IAAY,SAAiB,KAAK,MAAM,IAAI,OAAQ,cAAc,IAAI,IAAI,CAAC;AAAA,IAC5E,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,oBAAgB;AAAA,IACpB,OAAO,OAAe;AACpB,YAAM,SAAS,MAAM,KAAK,MAAM,IAAI,OAAQ,cAAc,EAAE,CAAC;AAC7D,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC7EA,IAAAC,iBAAkD;AAW3C,SAAS,wBAAqD;AACnE,QAAM,UAAM,2BAAW,aAAa;AACpC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,4DAA4D;AAEtF,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAuB,IAAI;AAErD,QAAM,WAAO;AAAA,IACX,OAAU,OAA4C;AACpD,mBAAa,IAAI;AACjB,eAAS,IAAI;AACb,UAAI;AACF,eAAO,MAAM,GAAG;AAAA,MAClB,SAAS,KAAK;AACZ,iBAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAC5D,eAAO;AAAA,MACT,UAAE;AACA,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,oBAAgB;AAAA,IACpB,OAAO,UAAkB;AACvB,YAAM,SAAS,MAAM,KAAK,MAAM,IAAI,OAAQ,cAAc,KAAK,CAAC;AAChE,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,mBAAe;AAAA,IACnB,OAAO,UAAkB;AACvB,YAAM,SAAS,MAAM,KAAK,MAAM,IAAI,OAAQ,aAAa,KAAK,CAAC;AAC/D,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,yBAAqB;AAAA,IACzB,OAAO,SAA4D;AACjE,YAAM,SAAS,MAAM,KAAK,MAAM,IAAI,OAAQ,mBAAmB,IAAI,CAAC;AACpE,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACjEA,IAAAC,iBAAkD;AAkC3C,SAAS,gBAAqC;AACnD,QAAM,UAAM,2BAAW,aAAa;AACpC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,oDAAoD;AAE9E,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAuB,IAAI;AAErD,QAAM,WAAO;AAAA,IACX,OAAU,OAA4C;AACpD,mBAAa,IAAI;AACjB,eAAS,IAAI;AACb,UAAI;AACF,eAAO,MAAM,GAAG;AAAA,MAClB,SAAS,KAAK;AACZ,iBAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAC5D,eAAO;AAAA,MACT,UAAE;AACA,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,eAAW;AAAA,IACf,CAAC,SAAiB,OAAkB,YAA4B,YAC9D,KAAK,MAAM,IAAI,OAAQ,aAAa,SAAS,OAAO,YAAY,OAAO,CAAC;AAAA,IAC1E,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,aAAS;AAAA,IACb,OACE,SACA,WACA,SACA,OACA,eACG;AACH,YAAM,SAAS,MAAM;AAAA,QAAK,MACxB,IAAI,OAAQ,WAAW,SAAS,WAAW,SAAS,OAAO,UAAU;AAAA,MACvE;AACA,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,kBAAc;AAAA,IAClB,MAAM,KAAK,MAAM,IAAI,OAAQ,YAAY,CAAC;AAAA,IAC1C,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,iBAAa;AAAA,IACjB,CAAC,WAA6B,KAAK,MAAM,IAAI,OAAQ,WAAW,MAAM,CAAC;AAAA,IACvE,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,mBAAe;AAAA,IACnB,OAAO,aAAqB;AAC1B,YAAM,SAAS,MAAM,KAAK,MAAM,IAAI,OAAQ,aAAa,QAAQ,CAAC;AAClE,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC1GA,IAAAC,iBAAkD;AAW3C,SAAS,oBAA6C;AAC3D,QAAM,UAAM,2BAAW,aAAa;AACpC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,wDAAwD;AAElF,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAuB,IAAI;AAErD,QAAM,WAAO;AAAA,IACX,OAAU,OAA4C;AACpD,mBAAa,IAAI;AACjB,eAAS,IAAI;AACb,UAAI;AACF,eAAO,MAAM,GAAG;AAAA,MAClB,SAAS,KAAK;AACZ,iBAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAC5D,eAAO;AAAA,MACT,UAAE;AACA,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,mBAAe;AAAA,IACnB,MAAM,KAAK,MAAM,IAAI,OAAQ,aAAa,CAAC;AAAA,IAC3C,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,QAAM,oBAAgB;AAAA,IACpB,OAAO,cAAsB;AAC3B,YAAM,SAAS,MAAM,KAAK,MAAM,IAAI,OAAQ,cAAc,SAAS,CAAC;AACpE,aAAO,WAAW;AAAA,IACpB;AAAA,IACA,CAAC,IAAI,QAAQ,IAAI;AAAA,EACnB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACrDA,IAAAC,iBAA6D;AAUtD,SAAS,kBAAyC;AACvD,QAAM,UAAM,2BAAW,aAAa;AACpC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,sDAAsD;AAEhF,QAAM,CAAC,SAAS,UAAU,QAAI,yBAA+B,CAAC,CAAC;AAC/D,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAS,KAAK;AAE9C,QAAM,eAAe,IAAI;AAEzB,gCAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,CAAC,IAAI,QAAQ;AAChC,iBAAW,CAAC,CAAC;AACb,kBAAY,CAAC,YAAY;AACzB;AAAA,IACF;AAEA,gBAAY,KAAK;AACjB,QAAI,OAAO,cACR,WAAW,aAAa,EAAE,EAC1B,KAAK,CAAC,MAAM;AACX,iBAAW,CAAC;AACZ,kBAAY,IAAI;AAAA,IAClB,CAAC,EACA,MAAM,MAAM;AACX,iBAAW,CAAC,CAAC;AACb,kBAAY,IAAI;AAAA,IAClB,CAAC;AAAA,EACL,GAAG,CAAC,cAAc,IAAI,IAAI,MAAM,CAAC;AAEjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC5CA,IAAAC,iBAA6D;AAWtD,SAAS,sBAAiD;AAC/D,QAAM,UAAM,2BAAW,aAAa;AACpC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,0DAA0D;AAEpF,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAA+B,CAAC,CAAC;AAC3E,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAS,KAAK;AAE9C,gCAAU,MAAM;AACd,QAAI,CAAC,IAAI,UAAU,CAAC,IAAI,YAAY;AAClC,uBAAiB,CAAC,CAAC;AACnB,kBAAY,CAAC,IAAI,UAAU;AAC3B;AAAA,IACF;AAEA,gBAAY,KAAK;AACjB,QAAI,OAAO,cACR,KAAK,EACL,KAAK,CAAC,QAAQ;AACb,uBAAiB,IAAI,IAAI;AACzB,kBAAY,IAAI;AAAA,IAClB,CAAC,EACA,MAAM,MAAM;AACX,uBAAiB,CAAC,CAAC;AACnB,kBAAY,IAAI;AAAA,IAClB,CAAC;AAAA,EACL,GAAG,CAAC,IAAI,QAAQ,IAAI,UAAU,CAAC;AAE/B,QAAM,yBAAqB;AAAA,IACzB,OAAO,WAAyE;AAC9E,UAAI,CAAC,IAAI,OAAQ,QAAO;AACxB,UAAI;AACF,cAAM,MAAM,MAAM,IAAI,OAAO,cAAc,OAAO,MAAM;AACxD,yBAAiB,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,CAAC;AACzC,eAAO;AAAA,MACT,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,CAAC,IAAI,MAAM;AAAA,EACb;AAEA,QAAM,gBAAY;AAAA,IAChB,CAAC,QAAmC;AAClC,UAAI,sBAAsB,GAAG;AAAA,IAC/B;AAAA,IACA,CAAC,IAAI,qBAAqB;AAAA,EAC5B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACjEA,IAAAC,iBAAiD;AA+DrC,IAAAC,uBAAA;AAhDZ,SAAS,aAAa;AACpB,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,MAAM,OAAO,IAAI,UAAU;AACnC,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,MAAM,eAAe,EAAE;AACtE,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,MAAM,SAAS,EAAE;AACpD,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,EAAE;AACzC,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,EAAE;AAErC,QAAM,aAAa,YAAY;AAC7B,QAAI,CAAC,OAAQ;AACb,eAAW,IAAI;AACf,aAAS,EAAE;AACX,eAAW,EAAE;AACb,QAAI;AACF,YAAM,OAAO,cAAc,EAAE,aAAa,eAAe,QAAW,OAAO,SAAS,OAAU,CAAC;AAC/F,iBAAW,iBAAiB;AAAA,IAC9B,SAAS,GAAQ;AACf,eAAS,GAAG,WAAW,0BAA0B;AAAA,IACnD,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,cACnB,KAAK,YAAY,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC,KAC7E,MAAM,QAAQ,CAAC,KAAK,KAAK,YAAY;AAE1C,SACE,+CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,GAC9D;AAAA,mDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,GAC3D;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,YAAY,MAAM,YAAY,gBAAgB,2BAA2B,MAAM,YAAY,KAAK,MAAM,UAAU;AAAA,YAChH,OAAO;AAAA,YACP,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,YAAY;AAAA,UACd;AAAA,UAEC,gBAAM,YACL,8CAAC,SAAI,KAAK,KAAK,WAAW,KAAI,UAAS,OAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,GAAG,IAErG;AAAA;AAAA,MAEJ;AAAA,MACA,+CAAC,SACC;AAAA,sDAAC,SAAI,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,MAAM,KAAK,GAAI,gBAAM,eAAe,QAAO;AAAA,QAC/F,8CAAC,SAAI,OAAO,EAAE,UAAU,IAAI,OAAO,MAAM,UAAU,GAAI,gBAAM,OAAM;AAAA,QAClE,CAAC,MAAM,iBACN,8CAAC,UAAK,OAAO,EAAE,UAAU,IAAI,OAAO,WAAW,YAAY,WAAW,SAAS,WAAW,cAAc,IAAI,YAAY,KAAK,WAAW,GAAG,SAAS,eAAe,GAAG,gCAEtK;AAAA,SAEJ;AAAA,OACF;AAAA,IAEC,WACC,8CAAC,SAAI,OAAO,EAAE,SAAS,aAAa,cAAc,MAAM,cAAc,YAAY,WAAW,QAAQ,qBAAqB,OAAO,WAAW,UAAU,GAAG,GACtJ,mBACH;AAAA,IAED,SACC,8CAAC,SAAI,OAAO,EAAE,SAAS,aAAa,cAAc,MAAM,cAAc,YAAY,WAAW,QAAQ,qBAAqB,OAAO,WAAW,UAAU,GAAG,GACtJ,iBACH;AAAA,IAGF,+CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,GAC9D;AAAA,oDAAC,SAAM,OAAM,gBAAe,OAAO,aAAa,UAAU,gBAAgB,aAAY,aAAY;AAAA,MAClG,8CAAC,SAAM,OAAM,SAAQ,MAAK,SAAQ,OAAO,MAAM,SAAS,IAAI,UAAQ,MAAC,aAAY,SAAQ;AAAA,MACzF,8CAAC,SAAM,OAAM,SAAQ,MAAK,OAAM,OAAO,OAAO,UAAU,UAAU,aAAY,qBAAoB;AAAA,OACpG;AAAA,IAEA,8CAAC,UAAO,SAAQ,WAAU,SAAS,YAAY,SAAkB,OAAO,EAAE,WAAW,cAAc,UAAU,IAAI,GAAG,0BAEpH;AAAA,KACF;AAEJ;AAEA,SAAS,cAAc;AACrB,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,EAAE;AAC7C,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,EAAE;AACrC,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,EAAE;AAC7C,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAChD,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,EAAE;AACzC,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,EAAE;AAC7C,QAAM,CAAC,WAAW,YAAY,QAAI,yBAA2B,IAAI;AACjE,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAElD,gCAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,WAAO,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,MAAM,IAAI;AAAA,EAC3D,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,uBAAuB,YAAY;AACvC,QAAI,CAAC,OAAQ;AACb,QAAI,UAAU,WAAW;AAAE,iBAAW,wBAAwB;AAAG;AAAA,IAAQ;AACzE,QAAI,MAAM,SAAS,GAAG;AAAE,iBAAW,wCAAwC;AAAG;AAAA,IAAQ;AACtF,iBAAa,IAAI;AACjB,eAAW,EAAE;AACb,iBAAa,EAAE;AACf,QAAI;AACF,YAAM,OAAO,cAAc,EAAE,aAAa,OAAU,CAAC;AACrD,mBAAa,kBAAkB;AAC/B,mBAAa,EAAE;AACf,eAAS,EAAE;AACX,mBAAa,EAAE;AAAA,IACjB,SAAS,GAAQ;AACf,iBAAW,GAAG,WAAW,2BAA2B;AAAA,IACtD,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,eAA8B;AAAA,IAClC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO,MAAM;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,cAAc,aAAa,MAAM,MAAM;AAAA,EACzC;AAEA,SACE,+CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,GAC9D;AAAA,mDAAC,SACC;AAAA,oDAAC,SAAI,OAAO,cAAc,6BAAe;AAAA,MACzC,+CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,GAC9D;AAAA,sDAAC,SAAM,OAAM,oBAAmB,MAAK,YAAW,OAAO,WAAW,UAAU,cAAc,aAAY,oDAAW,cAAa,oBAAmB;AAAA,QACjJ,8CAAC,SAAM,OAAM,gBAAe,MAAK,YAAW,OAAO,OAAO,UAAU,UAAU,aAAY,wBAAuB,cAAa,gBAAe;AAAA,QAC7I,8CAAC,SAAM,OAAM,wBAAuB,MAAK,YAAW,OAAO,WAAW,UAAU,cAAc,aAAY,uBAAsB,cAAa,gBAAe;AAAA,QAC3J,WAAW,8CAAC,SAAI,OAAO,EAAE,OAAO,WAAW,UAAU,GAAG,GAAI,mBAAQ;AAAA,QACpE,aAAa,8CAAC,SAAI,OAAO,EAAE,OAAO,WAAW,UAAU,GAAG,GAAI,qBAAU;AAAA,QACzE,8CAAC,UAAO,SAAQ,WAAU,SAAS,sBAAsB,SAAS,WAAW,OAAO,EAAE,WAAW,cAAc,UAAU,IAAI,GAAG,6BAEhI;AAAA,SACF;AAAA,OACF;AAAA,IAEA,+CAAC,SACC;AAAA,oDAAC,SAAI,OAAO,cAAc,uCAAyB;AAAA,MACnD,+CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,iBAAiB,SAAS,SAAS,GACtG;AAAA,uDAAC,SACC;AAAA,wDAAC,SAAI,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,MAAM,KAAK,GAAG,+BAAiB;AAAA,UACnF,8CAAC,SAAI,OAAO,EAAE,UAAU,IAAI,OAAO,MAAM,WAAW,WAAW,EAAE,GAC9D,qBAAW,UACR,gBAAa,UAAU,oBAAoB,4BAC3C,sCACN;AAAA,WACF;AAAA,QACA,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GAC1D;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,KAAK;AAAA,cACL,SAAS;AAAA,cACT,cAAc;AAAA,cACd,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,YAAY,WAAW,UAAU,YAAY;AAAA,cAC7C,OAAO,WAAW,UAAU,YAAY,MAAM;AAAA,YAChD;AAAA,YAEA;AAAA,4DAAC,UAAK,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,cAAc,OAAO,YAAY,WAAW,UAAU,YAAY,WAAW,SAAS,eAAe,GAAG;AAAA,cAC3I,WAAW,UAAU,YAAY;AAAA;AAAA;AAAA,QACpC,GACF;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEJ;AAEA,SAAS,cAAc;AACrB,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAwB,CAAC,CAAC;AAC1D,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,IAAI;AAC3C,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAwB,IAAI;AAE5D,QAAM,mBAAe,4BAAY,YAAY;AAC3C,QAAI,CAAC,OAAQ;AACb,eAAW,IAAI;AACf,QAAI;AACF,YAAM,OAAO,MAAM,OAAO,aAAa;AACvC,kBAAY,IAAI;AAAA,IAClB,QAAQ;AAAA,IAER,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,gCAAU,MAAM;AACd,iBAAa;AAAA,EACf,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,eAAe,OAAO,cAAsB;AAChD,QAAI,CAAC,OAAQ;AACb,gBAAY,SAAS;AACrB,QAAI;AACF,YAAM,OAAO,cAAc,SAAS;AACpC,kBAAY,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC;AAAA,IAC9D,QAAQ;AAAA,IAER,UAAE;AACA,kBAAY,IAAI;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,eAA8B;AAAA,IAClC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO,MAAM;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,cAAc,aAAa,MAAM,MAAM;AAAA,EACzC;AAEA,MAAI,SAAS;AACX,WACE,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,gBAAgB,UAAU,SAAS,GAAG,GACnE,wDAAC,UAAK,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,QAAQ,aAAa,MAAM,YAAY,MAAM,gBAAgB,MAAM,cAAc,cAAc,OAAO,SAAS,gBAAgB,WAAW,mCAAmC,GAAG,GACxN;AAAA,EAEJ;AAEA,SACE,+CAAC,SACC;AAAA,kDAAC,SAAI,OAAO,cAAc,6BAAe;AAAA,IACzC,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,GAC7D,mBAAS,WAAW,IACnB,8CAAC,SAAI,OAAO,EAAE,OAAO,MAAM,WAAW,UAAU,IAAI,WAAW,UAAU,SAAS,SAAS,GAAG,gCAAkB,IAEhH,SAAS,IAAI,CAAC,YACZ;AAAA,MAAC;AAAA;AAAA,QAEC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,cAAc,MAAM;AAAA,UACpB,QAAQ,aAAa,MAAM,MAAM;AAAA,UACjC,KAAK;AAAA,QACP;AAAA,QAEA;AAAA,yDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,MAAM,GAAG,UAAU,EAAE,GACjF;AAAA,0DAAC,SAAI,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,OAAO,YAAY,GAAG,MAAM,YAAY,MAAM,OAAO,MAAM,cAAc,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,YAAY,EAAE,GACzM,yDAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SACrI;AAAA,4DAAC,UAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,KAAI,IAAG,KAAG;AAAA,cACtD,8CAAC,UAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAI;AAAA,cACpC,8CAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAI;AAAA,eACvC,GACF;AAAA,YACA,+CAAC,SAAI,OAAO,EAAE,UAAU,EAAE,GACxB;AAAA,4DAAC,SAAI,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,MAAM,MAAM,UAAU,UAAU,cAAc,YAAY,YAAY,SAAS,GAChI,kBAAQ,YACL,QAAQ,UAAU,SAAS,KACzB,QAAQ,UAAU,MAAM,GAAG,EAAE,IAAI,WACjC,QAAQ,YACV,kBACN;AAAA,cACA,+CAAC,SAAI,OAAO,EAAE,UAAU,IAAI,OAAO,MAAM,WAAW,WAAW,EAAE,GAC9D;AAAA,wBAAQ,aAAa;AAAA,gBACrB,QAAQ,gBACP,gFAAE;AAAA;AAAA,kBAAI,eAAe,QAAQ,YAAY;AAAA,mBAAE;AAAA,iBAE/C;AAAA,eACF;AAAA,aACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,SAAS,aAAa,QAAQ;AAAA,cAC9B,SAAS,MAAM,aAAa,QAAQ,EAAE;AAAA,cACvC;AAAA;AAAA,UAED;AAAA;AAAA;AAAA,MA1CK,QAAQ;AAAA,IA2Cf,CACD,GAEL;AAAA,KACF;AAEJ;AAEA,SAAS,eAAe,SAAyB;AAC/C,QAAM,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE,QAAQ;AACpD,QAAM,OAAO,KAAK,MAAM,OAAO,GAAK;AACpC,MAAI,OAAO,EAAG,QAAO;AACrB,MAAI,OAAO,GAAI,QAAO,GAAG,IAAI;AAC7B,QAAM,QAAQ,KAAK,MAAM,OAAO,EAAE;AAClC,MAAI,QAAQ,GAAI,QAAO,GAAG,KAAK;AAC/B,QAAM,OAAO,KAAK,MAAM,QAAQ,EAAE;AAClC,SAAO,GAAG,IAAI;AAChB;AAEA,SAAS,mBAAmB;AAC1B,QAAM,QAAQ,SAAS;AACvB,QAAM,CAAC,KAAK,MAAM,QAAI,yBAAc,SAAS;AAE7C,QAAM,aAA4B;AAAA,IAChC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY,MAAM;AAAA,IAClB,cAAc,QAAQ,MAAM,YAAY;AAAA,IACxC,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY,MAAM;AAAA,EACpB;AAEA,QAAM,cAA6B;AAAA,IACjC,SAAS;AAAA,IACT,cAAc,aAAa,MAAM,MAAM;AAAA,IACvC,SAAS;AAAA,EACX;AAEA,QAAM,cAAc,CAAC,YAAoC;AAAA,IACvD,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,cAAc,SAAS,aAAa,MAAM,YAAY,KAAK;AAAA,IAC3D,OAAO,SAAS,MAAM,eAAe,MAAM;AAAA,IAC3C,YAAY,SAAS,MAAM;AAAA,IAC3B,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,YAAY,MAAM;AAAA,IAClB,cAAc;AAAA,EAChB;AAEA,QAAM,eAA8B;AAAA,IAClC,SAAS;AAAA,EACX;AAEA,QAAM,OAAsC;AAAA,IAC1C,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,IACnC,EAAE,KAAK,YAAY,OAAO,WAAW;AAAA,IACrC,EAAE,KAAK,YAAY,OAAO,WAAW;AAAA,EACvC;AAEA,SACE,+CAAC,SAAI,OAAO,YACV;AAAA,kDAAC,WAAO,0EAA+D;AAAA,IACvE,8CAAC,SAAI,OAAO,aACT,eAAK,IAAI,CAAC,EAAE,KAAK,MAAM,MACtB;AAAA,MAAC;AAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO,YAAY,QAAQ,GAAG;AAAA,QAC9B,SAAS,MAAM,OAAO,GAAG;AAAA,QAExB;AAAA;AAAA,MALI;AAAA,IAMP,CACD,GACH;AAAA,IACA,+CAAC,SAAI,OAAO,cACT;AAAA,cAAQ,aAAa,8CAAC,cAAW;AAAA,MACjC,QAAQ,cAAc,8CAAC,eAAY;AAAA,MACnC,QAAQ,cAAc,8CAAC,eAAY;AAAA,OACtC;AAAA,KACF;AAEJ;AAEO,SAAS,YAAY,EAAE,WAAW,GAAqB;AAC5D,QAAM,EAAE,SAAS,IAAI,YAAY;AACjC,QAAM,oBAAoB,EAAE,GAAG,UAAU,GAAI,YAAY,aAAa,CAAC,EAAG;AAE1E,SACE,8CAAC,iBAAc,UAAU,mBAAmB,OAAO,EAAE,SAAS,QAAQ,gBAAgB,SAAS,GAC7F,wDAAC,oBAAiB,GACpB;AAEJ;;;AChZA,IAAAC,aAAwC;AAcpC,IAAAC,uBAAA;AAPG,SAAS,aAAa,EAAE,UAAU,OAAO,GAAG,GAAsB;AACvE,QAAM,aAAS,oCAAwB,QAAQ;AAC/C,QAAM,MAAM,OAAO,QAChB,QAAQ,eAAe,UAAU,IAAI,GAAG,EACxC,QAAQ,gBAAgB,WAAW,IAAI,GAAG;AAE7C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,YAAY,EAAE;AAAA,MAC9D,yBAAyB,EAAE,QAAQ,IAAI;AAAA;AAAA,EACzC;AAEJ;","names":["import_react","import_react","import_shared","import_js","import_react","import_react","import_shared","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_shared","import_js","import_jsx_runtime","SecuredByAuthon","import_react","import_jsx_runtime","baseStyle","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_shared","import_js","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_js","import_jsx_runtime"]}