@datatechsolutions/ui 3.14.0 → 3.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/astrlabe/index.js +108 -108
- package/dist/astrlabe/index.mjs +4 -4
- package/dist/astrlabe/workflow-canvas.js +4 -4
- package/dist/astrlabe/workflow-canvas.mjs +3 -3
- package/dist/{chunk-FHGWXWVZ.js → chunk-2JPS5OND.js} +45 -45
- package/dist/{chunk-FHGWXWVZ.js.map → chunk-2JPS5OND.js.map} +1 -1
- package/dist/{chunk-YFMMZHL5.js → chunk-2QZFKQP6.js} +26 -26
- package/dist/{chunk-YFMMZHL5.js.map → chunk-2QZFKQP6.js.map} +1 -1
- package/dist/{chunk-U7VMFQFN.mjs → chunk-3FOLXKVP.mjs} +4 -4
- package/dist/{chunk-U7VMFQFN.mjs.map → chunk-3FOLXKVP.mjs.map} +1 -1
- package/dist/{chunk-LJGPMMKB.js → chunk-435TRHC2.js} +72 -72
- package/dist/{chunk-LJGPMMKB.js.map → chunk-435TRHC2.js.map} +1 -1
- package/dist/{chunk-WE35EV7J.mjs → chunk-5QRU3KKV.mjs} +3 -3
- package/dist/{chunk-WE35EV7J.mjs.map → chunk-5QRU3KKV.mjs.map} +1 -1
- package/dist/{chunk-7SDB2VC2.js → chunk-6UUFPSAR.js} +4 -4
- package/dist/{chunk-7SDB2VC2.js.map → chunk-6UUFPSAR.js.map} +1 -1
- package/dist/{chunk-OTQXU4WG.mjs → chunk-7LIJTAIF.mjs} +8 -8
- package/dist/{chunk-OTQXU4WG.mjs.map → chunk-7LIJTAIF.mjs.map} +1 -1
- package/dist/{chunk-Q5TZTA6H.mjs → chunk-A5M7SPPG.mjs} +3 -3
- package/dist/{chunk-Q5TZTA6H.mjs.map → chunk-A5M7SPPG.mjs.map} +1 -1
- package/dist/{chunk-4HZ55YKZ.js → chunk-BN4BKFE2.js} +9 -9
- package/dist/{chunk-4HZ55YKZ.js.map → chunk-BN4BKFE2.js.map} +1 -1
- package/dist/{chunk-5SCZB5UI.js → chunk-C4UYEHPY.js} +84 -84
- package/dist/chunk-C4UYEHPY.js.map +1 -0
- package/dist/{chunk-AUCS2KF4.js → chunk-CPTHSYM2.js} +10 -10
- package/dist/{chunk-AUCS2KF4.js.map → chunk-CPTHSYM2.js.map} +1 -1
- package/dist/{chunk-PO66V2PN.mjs → chunk-EZVBRLQH.mjs} +3 -3
- package/dist/{chunk-PO66V2PN.mjs.map → chunk-EZVBRLQH.mjs.map} +1 -1
- package/dist/{chunk-T7DROKWJ.mjs → chunk-F3PQ5EFQ.mjs} +3 -3
- package/dist/{chunk-T7DROKWJ.mjs.map → chunk-F3PQ5EFQ.mjs.map} +1 -1
- package/dist/{chunk-ZE6U4N4Q.js → chunk-GD3YV46U.js} +36 -36
- package/dist/{chunk-ZE6U4N4Q.js.map → chunk-GD3YV46U.js.map} +1 -1
- package/dist/{chunk-5YCH7FHT.mjs → chunk-I6ULYJR4.mjs} +3 -3
- package/dist/{chunk-5YCH7FHT.mjs.map → chunk-I6ULYJR4.mjs.map} +1 -1
- package/dist/{chunk-Q2FUNDCP.mjs → chunk-JJUWZNJY.mjs} +3 -3
- package/dist/{chunk-Q2FUNDCP.mjs.map → chunk-JJUWZNJY.mjs.map} +1 -1
- package/dist/{chunk-ZIRD3X6G.js → chunk-KRS2CLPR.js} +139 -139
- package/dist/chunk-KRS2CLPR.js.map +1 -0
- package/dist/{chunk-FZUV7GNB.js → chunk-KZDABEML.js} +41 -41
- package/dist/{chunk-FZUV7GNB.js.map → chunk-KZDABEML.js.map} +1 -1
- package/dist/{chunk-33ZWFDVG.mjs → chunk-MSXJFWKD.mjs} +17 -17
- package/dist/chunk-MSXJFWKD.mjs.map +1 -0
- package/dist/{chunk-HQNIETHV.mjs → chunk-NNR44MM5.mjs} +7 -7
- package/dist/{chunk-HQNIETHV.mjs.map → chunk-NNR44MM5.mjs.map} +1 -1
- package/dist/{chunk-72XZ7DSF.js → chunk-NQCFGIWC.js} +13 -13
- package/dist/{chunk-72XZ7DSF.js.map → chunk-NQCFGIWC.js.map} +1 -1
- package/dist/{chunk-NIZSQJRW.js → chunk-OQM252SM.js} +30 -30
- package/dist/{chunk-NIZSQJRW.js.map → chunk-OQM252SM.js.map} +1 -1
- package/dist/{chunk-2II2NLAZ.js → chunk-PADXORD2.js} +34 -34
- package/dist/{chunk-2II2NLAZ.js.map → chunk-PADXORD2.js.map} +1 -1
- package/dist/{chunk-N6SGVUTR.mjs → chunk-PSS3E463.mjs} +3 -3
- package/dist/{chunk-N6SGVUTR.mjs.map → chunk-PSS3E463.mjs.map} +1 -1
- package/dist/{chunk-F4KHAKTP.mjs → chunk-QCGSE24W.mjs} +41 -41
- package/dist/{chunk-F4KHAKTP.mjs.map → chunk-QCGSE24W.mjs.map} +1 -1
- package/dist/{chunk-7NHJSD4A.mjs → chunk-RH6Z425K.mjs} +6 -6
- package/dist/{chunk-7NHJSD4A.mjs.map → chunk-RH6Z425K.mjs.map} +1 -1
- package/dist/{chunk-WTSMTLSP.mjs → chunk-SMUBE3RO.mjs} +11 -11
- package/dist/chunk-SMUBE3RO.mjs.map +1 -0
- package/dist/{chunk-PXGESUKI.js → chunk-WG26KW6D.js} +36 -36
- package/dist/{chunk-PXGESUKI.js.map → chunk-WG26KW6D.js.map} +1 -1
- package/dist/{chunk-NXWIT4YQ.mjs → chunk-WGS65S7S.mjs} +3 -3
- package/dist/{chunk-NXWIT4YQ.mjs.map → chunk-WGS65S7S.mjs.map} +1 -1
- package/dist/{chunk-4P72IJOM.js → chunk-XJJZ6DHE.js} +4 -4
- package/dist/{chunk-4P72IJOM.js.map → chunk-XJJZ6DHE.js.map} +1 -1
- package/dist/index.js +664 -664
- package/dist/index.mjs +2 -2
- package/dist/platform/admin/index.js +10 -10
- package/dist/platform/admin/index.mjs +4 -4
- package/dist/platform/agents-workspace.js +7 -7
- package/dist/platform/agents-workspace.mjs +6 -6
- package/dist/platform/app-shell.js +4 -4
- package/dist/platform/app-shell.mjs +3 -3
- package/dist/platform/auth/index.js +22 -22
- package/dist/platform/auth/index.mjs +4 -4
- package/dist/platform/billing/index.js +4 -4
- package/dist/platform/billing/index.mjs +3 -3
- package/dist/platform/impersonation/index.js +4 -4
- package/dist/platform/impersonation/index.mjs +3 -3
- package/dist/platform/index.js +78 -78
- package/dist/platform/index.mjs +18 -18
- package/dist/platform/pages/index.js +1485 -1554
- package/dist/platform/pages/index.js.map +1 -1
- package/dist/platform/pages/index.mjs +1270 -1339
- package/dist/platform/pages/index.mjs.map +1 -1
- package/dist/platform/settings/index.js +7 -7
- package/dist/platform/settings/index.mjs +6 -6
- package/dist/platform/workflow-canvas-shell.js +5 -5
- package/dist/platform/workflow-canvas-shell.mjs +4 -4
- package/package.json +1 -1
- package/dist/chunk-33ZWFDVG.mjs.map +0 -1
- package/dist/chunk-5SCZB5UI.js.map +0 -1
- package/dist/chunk-WTSMTLSP.mjs.map +0 -1
- package/dist/chunk-ZIRD3X6G.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/platform/auth/mfa-challenge.tsx","../src/platform/auth/sign-in.tsx","../src/platform/auth/verify-email.tsx","../src/platform/auth/sign-up.tsx","../src/platform/auth/forgot-password.tsx","../src/platform/auth/reset-password.tsx","../src/platform/auth/passwordless-sign-in.tsx","../src/platform/auth/consent-screen.tsx","../src/platform/auth/sso-connector-list.tsx","../src/platform/auth/sso-email-form.tsx","../src/platform/auth/user-button.tsx"],"names":["useTranslations","useAuth","useState","useCallback","triggerHaptic","jsxs","jsx","SegmentedControl","OtpInput","Spinner","Input","Button","Text","TextLink","Card","useSocialProviders","PasswordInput","Fragment","SocialLoginButtons","EnvelopeIcon","AuthLayout","useEffect","UserIcon","LockClosedIcon","PasswordStrengthMeter","FormCheckbox","EmptyState","CheckCircleIcon","BaseForm","DevicePhoneMobileIcon","PaperAirplaneIcon","CardContent","Avatar","Badge","ShieldExclamationIcon","ListCard","ListCardItem","InlineSpinner","ChevronRightIcon","BuildingOffice2Icon","Menu","ChevronUpDownIcon","Transition","ArrowRightStartOnRectangleIcon","DynamicIslandConfirm"],"mappings":"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","file":"chunk-LJGPMMKB.js","sourcesContent":["import React, { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n Input,\n SegmentedControl,\n Button,\n Spinner,\n Text,\n TextLink,\n triggerHaptic,\n} from '@ui/index'\nimport { OtpInput } from './components'\nimport { useAuth } from '../../_auth'\n\nexport type { MfaMethod, MfaChallengeProps } from '@datatechsolutions/shared-domain'\nimport type { MfaMethod, MfaChallengeProps } from '@datatechsolutions/shared-domain'\n\nexport function MfaChallenge({\n mfaToken,\n onSuccess,\n onCancel,\n availableMethods = ['totp', 'backup'],\n embedded = false,\n}: MfaChallengeProps) {\n const t = useTranslations('windsock')\n const { verifyMFA } = useAuth()\n\n const [method, setMethod] = useState<MfaMethod>('totp')\n const [totpCode, setTotpCode] = useState('')\n const [backupCode, setBackupCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [failureCount, setFailureCount] = useState(0)\n\n const handleVerify = useCallback(\n async (code: string) => {\n setError(null)\n setIsSubmitting(true)\n triggerHaptic('light')\n\n try {\n const result = await verifyMFA(mfaToken, code)\n if (result.success) {\n triggerHaptic('success')\n onSuccess?.()\n } else if (result.error) {\n triggerHaptic('error')\n const count = failureCount + 1\n setFailureCount(count)\n if (count >= 3) {\n setError(t('mfa.challenge.errorLockout'))\n } else {\n setError(t('mfa.challenge.errorInvalidCode'))\n }\n }\n } catch {\n triggerHaptic('error')\n setError(t('mfa.challenge.errorVerificationFailed'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [verifyMFA, mfaToken, onSuccess, failureCount, t],\n )\n\n const handleTotpComplete = useCallback(\n (code: string) => {\n handleVerify(code)\n },\n [handleVerify],\n )\n\n const handleBackupSubmit = useCallback(() => {\n if (backupCode.trim()) {\n handleVerify(backupCode.trim())\n }\n }, [backupCode, handleVerify])\n\n const handleMethodChange = useCallback((value: string) => {\n triggerHaptic('light')\n setMethod(value as MfaMethod)\n setError(null)\n setTotpCode('')\n setBackupCode('')\n }, [])\n\n const segments = availableMethods.map((m) => ({\n value: m,\n label: m === 'totp' ? t('mfa.challenge.methodTotp') : t('mfa.challenge.methodBackup'),\n }))\n\n const content = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\n {t('mfa.challenge.title')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {method === 'totp'\n ? t('mfa.challenge.descriptionTotp')\n : t('mfa.challenge.descriptionBackup')}\n </p>\n </div>\n\n {/* Method toggle */}\n {availableMethods.length > 1 && (\n <div className=\"flex justify-center\">\n <SegmentedControl\n segments={segments}\n value={method}\n onChange={handleMethodChange}\n size=\"sm\"\n />\n </div>\n )}\n\n {/* Lockout warning banner */}\n {failureCount >= 3 && (\n <div className=\"rounded-xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-400 text-center\">\n {t('mfa.challenge.lockoutWarning')}\n </div>\n )}\n\n {/* TOTP input */}\n {method === 'totp' && (\n <div className=\"space-y-4\">\n <OtpInput\n value={totpCode}\n onChange={setTotpCode}\n onComplete={handleTotpComplete}\n error={error ?? undefined}\n disabled={isSubmitting}\n autoFocus\n />\n {isSubmitting && (\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n )}\n </div>\n )}\n\n {/* Backup code input */}\n {method === 'backup' && (\n <div className=\"space-y-4\">\n <Input\n value={backupCode}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setBackupCode(event.target.value)}\n placeholder={t('mfa.challenge.backupCodePlaceholder')}\n error={error ?? undefined}\n disabled={isSubmitting}\n autoFocus\n className=\"font-mono text-center tracking-widest\"\n />\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleBackupSubmit}\n disabled={!backupCode.trim() || isSubmitting}\n loading={isSubmitting}\n >\n {t('mfa.challenge.verifyBackupCode')}\n </Button>\n </div>\n )}\n\n {/* Cancel link */}\n {onCancel && (\n <Text className=\"text-center\">\n <TextLink\n href=\"#\"\n onClick={(event) => {\n event.preventDefault()\n triggerHaptic('light')\n onCancel()\n }}\n >\n {t('mfa.challenge.useDifferentAccount')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n if (embedded) return content\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {content}\n </Card>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Input,\n PasswordInput,\n Button,\n Text,\n TextLink,\n} from '@ui/index'\nimport {\n AuthLayout,\n SocialLoginButtons,\n type SocialProvider,\n} from './components'\nimport { EnvelopeIcon } from '@heroicons/react/24/outline'\nimport { useAuth, useSocialProviders } from '../../_auth'\nimport { MfaChallenge } from './mfa-challenge'\n\nexport type { SignInProps } from '@datatechsolutions/shared-domain'\nimport type { SignInProps, MfaRequiredState } from '@datatechsolutions/shared-domain'\n\nexport function SignIn({\n onSuccess,\n onSignUp,\n onForgotPassword,\n onPasswordless,\n socialProviders,\n allowPasswordless,\n defaultEmail = '',\n embedded = false,\n heroPanel,\n}: SignInProps) {\n const t = useTranslations('windsock')\n const { loginWithCredentials, loginWithProvider } = useAuth()\n\n // Caller may pass an explicit `socialProviders` prop to pin the\n // button list (useful in tests / storybook); otherwise we fetch\n // the enabled set from the backend so we never advertise a button\n // whose callback will fail.\n const discovered = useSocialProviders()\n const effectiveSocialProviders: readonly SocialProvider[] = socialProviders ?? discovered.providers\n\n const [email, setEmail] = useState(defaultEmail)\n const [password, setPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [mfaRequired, setMfaRequired] = useState<MfaRequiredState | null>(null)\n const [socialLoading, setSocialLoading] = useState<SocialProvider | null>(null)\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n setIsSubmitting(true)\n\n try {\n const result = await loginWithCredentials(email, password)\n\n if (result.success) {\n onSuccess?.()\n } else if (result.mfaRequired && result.mfaToken) {\n setMfaRequired({ mfaToken: result.mfaToken })\n } else if (result.error) {\n // Surface the actual Cognito error (e.g. \"User does not\n // exist\", \"Incorrect username or password\") instead of the\n // generic placeholder. Falls back to the translated string\n // when Cognito returns no message.\n setError(result.error || t('signInError'))\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : t('signInError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [email, password, loginWithCredentials, onSuccess, t],\n )\n\n const handleSocialLogin = useCallback((provider: SocialProvider) => {\n setSocialLoading(provider)\n loginWithProvider(provider)\n }, [loginWithProvider])\n\n if (mfaRequired) {\n return (\n <MfaChallenge\n mfaToken={mfaRequired.mfaToken}\n onSuccess={onSuccess}\n onCancel={() => setMfaRequired(null)}\n embedded={embedded}\n />\n )\n }\n\n const content = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-slate-900 dark:text-white\">\n {t('signInTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">\n {t('signInSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* Credentials form */}\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <Input\n label={t('emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('emailPlaceholder')}\n autoComplete=\"email\"\n disabled={isSubmitting}\n required\n />\n\n <PasswordInput\n label={t('passwordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('passwordPlaceholder')}\n autoComplete=\"current-password\"\n disabled={isSubmitting}\n required\n />\n\n {/* Forgot password link */}\n {onForgotPassword && (\n <div className=\"flex justify-end\">\n <Button type=\"button\" plain size=\"sm\" onClick={onForgotPassword}>\n {t('forgotPassword')}\n </Button>\n </div>\n )}\n\n <Button\n type=\"submit\"\n color=\"ios-glass-green\"\n size=\"lg\"\n fullWidth\n disabled={isSubmitting || !email || !password}\n loading={isSubmitting}\n >\n {t('signInButton')}\n </Button>\n </form>\n\n {/* Social login divider — only renders when the backend\n reports at least one enabled provider (or the caller passed\n an explicit list). We never show a divider for zero buttons. */}\n {effectiveSocialProviders.length > 0 && (\n <>\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-slate-200/60 dark:border-white/10\" />\n </div>\n <div className=\"relative flex justify-center text-xs\">\n <span className=\"bg-white/80 px-3 text-slate-400 dark:bg-slate-900/80 dark:text-slate-500\">\n {t('orContinueWith')}\n </span>\n </div>\n </div>\n\n <SocialLoginButtons\n providers={[...effectiveSocialProviders]}\n onProviderClick={handleSocialLogin}\n loading={socialLoading}\n disabled={isSubmitting}\n />\n </>\n )}\n\n {/* Passwordless sign-in button */}\n {allowPasswordless && (\n <Button\n type=\"button\"\n color=\"ios-glass-blue\"\n size=\"lg\"\n fullWidth\n onClick={onPasswordless}\n >\n <EnvelopeIcon className=\"h-5 w-5\" />\n {t('signInPasswordless')}\n </Button>\n )}\n\n {/* Sign up link */}\n {onSignUp && (\n <Text className=\"text-center\">\n {t('noAccount')}{' '}\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); onSignUp() }}>\n {t('signUpLink')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n if (embedded) return content\n\n return (\n <AuthLayout heroPanel={heroPanel}>\n {content}\n </AuthLayout>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n Button,\n Spinner,\n} from '@ui/index'\nimport { OtpInput } from './components'\nimport { EnvelopeIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { VerifyEmailProps } from '@datatechsolutions/shared-domain'\nimport type { VerifyEmailProps } from '@datatechsolutions/shared-domain'\n\nconst RESEND_COOLDOWN_SECONDS = 60\n\nexport function VerifyEmail({\n email,\n onSuccess,\n onResend,\n embedded = false,\n}: VerifyEmailProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [code, setCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [isResending, setIsResending] = useState(false)\n const [cooldown, setCooldown] = useState(RESEND_COOLDOWN_SECONDS)\n\n // Countdown timer for resend cooldown\n useEffect(() => {\n if (cooldown <= 0) return\n\n const timer = setInterval(() => {\n setCooldown((previous) => {\n if (previous <= 1) {\n clearInterval(timer)\n return 0\n }\n return previous - 1\n })\n }, 1000)\n\n return () => clearInterval(timer)\n }, [cooldown])\n\n const handleComplete = useCallback(\n async (completedCode: string) => {\n setError(null)\n setIsSubmitting(true)\n\n try {\n await client.verifyEmail(email, completedCode)\n onSuccess?.()\n } catch {\n setError(t('verifyEmailError'))\n setCode('')\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, email, onSuccess, t],\n )\n\n const handleResend = useCallback(async () => {\n if (cooldown > 0 || isResending) return\n\n setIsResending(true)\n setError(null)\n\n try {\n onResend?.()\n setCooldown(RESEND_COOLDOWN_SECONDS)\n } catch {\n setError(t('resendEmailError'))\n } finally {\n setIsResending(false)\n }\n }, [cooldown, isResending, onResend, t])\n\n const content = (\n <div className=\"space-y-6\">\n {/* Mail icon header */}\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-full bg-blue-50 dark:bg-blue-500/10\">\n <EnvelopeIcon className=\"h-8 w-8 text-ios-blue\" />\n </div>\n <div>\n <h2 className=\"text-xl font-bold text-gray-900 dark:text-white\">\n {t('verifyEmailTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {t('verifyEmailSubtitle', { email })}\n </p>\n </div>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red text-center\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* OTP input */}\n <OtpInput\n value={code}\n onChange={setCode}\n onComplete={handleComplete}\n error={error ?? undefined}\n disabled={isSubmitting}\n autoFocus\n />\n\n {/* Spinner while verifying */}\n {isSubmitting && (\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n )}\n\n {/* Resend section */}\n <div className=\"text-center space-y-1\">\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('verifyEmailNoCode')}\n </p>\n <Button\n type=\"button\"\n outline\n onClick={handleResend}\n disabled={cooldown > 0 || isResending || isSubmitting}\n loading={isResending}\n >\n {cooldown > 0\n ? t('resendEmailCooldown', { seconds: cooldown })\n : t('resendEmailButton')}\n </Button>\n </div>\n </div>\n )\n\n if (embedded) return content\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {content}\n </Card>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Input,\n PasswordInput,\n Button,\n FormCheckbox,\n Text,\n TextLink,\n} from '@ui/index'\nimport {\n AuthLayout,\n PasswordStrengthMeter,\n SocialLoginButtons,\n type SocialProvider,\n} from './components'\nimport { EnvelopeIcon, LockClosedIcon, UserIcon } from '@heroicons/react/24/outline'\nimport { useAuth, useSocialProviders } from '../../_auth'\nimport { VerifyEmail } from './verify-email'\n\nexport type { SignUpProps, SignUpPhase } from '@datatechsolutions/shared-domain'\nimport type { SignUpProps, SignUpPhase } from '@datatechsolutions/shared-domain'\n\nexport function SignUp({\n onSuccess,\n onSignIn,\n socialProviders,\n passwordPolicy,\n embedded = false,\n heroPanel,\n}: SignUpProps) {\n const t = useTranslations('windsock')\n const { client, loginWithProvider } = useAuth()\n\n // Same source-of-truth story as SignIn — prop override wins when\n // present, otherwise fetch the enabled list so the register page\n // never advertises a provider that can't complete the callback.\n const discovered = useSocialProviders()\n const effectiveSocialProviders: readonly SocialProvider[] = socialProviders ?? discovered.providers\n\n const [phase, setPhase] = useState<SignUpPhase>('form')\n const [registeredEmail, setRegisteredEmail] = useState('')\n\n const [name, setName] = useState('')\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [termsAccepted, setTermsAccepted] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [socialLoading, setSocialLoading] = useState<SocialProvider | null>(null)\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n setIsSubmitting(true)\n\n try {\n // `client.register` resolves with `{success, error}` — it does\n // NOT throw on Cognito-side failures (password policy, email\n // already in use, etc.). Without checking `result.success` the\n // user got silently bounced to the verify-code page even on\n // failed signups. Surface the actual Cognito message; fall\n // back to the generic translation only when the SDK throws\n // (network / config error).\n const result = await client.register({ name, email, password })\n if (!result.success) {\n setError(result.error ?? t('signUpError'))\n return\n }\n setRegisteredEmail(email)\n setPhase('verify')\n } catch (e) {\n setError(e instanceof Error ? e.message : t('signUpError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, name, email, password, t],\n )\n\n const handleSocialLogin = useCallback((provider: SocialProvider) => {\n setSocialLoading(provider)\n loginWithProvider(provider)\n }, [loginWithProvider])\n\n if (phase === 'verify') {\n return (\n <VerifyEmail\n email={registeredEmail}\n onSuccess={onSuccess}\n embedded={embedded}\n />\n )\n }\n\n const isFormValid = name.trim() !== '' && email.trim() !== '' && password !== '' && termsAccepted\n\n const content = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-slate-900 dark:text-white\">\n {t('signUpTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">\n {t('signUpSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* Registration form */}\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <Input\n label={t('nameLabel')}\n type=\"text\"\n value={name}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setName(event.target.value)}\n placeholder={t('namePlaceholder')}\n icon={<UserIcon className=\"h-5 w-5\" />}\n autoComplete=\"name\"\n disabled={isSubmitting}\n required\n />\n\n <Input\n label={t('emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('emailPlaceholder')}\n icon={<EnvelopeIcon className=\"h-5 w-5\" />}\n autoComplete=\"email\"\n disabled={isSubmitting}\n required\n />\n\n <div className=\"space-y-2\">\n <PasswordInput\n label={t('passwordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('passwordPlaceholder')}\n icon={<LockClosedIcon className=\"h-5 w-5\" />}\n autoComplete=\"new-password\"\n disabled={isSubmitting}\n required\n />\n <PasswordStrengthMeter\n password={password}\n policy={passwordPolicy}\n showRequirements\n />\n </div>\n\n <FormCheckbox\n checked={termsAccepted}\n onChange={setTermsAccepted}\n label={t('termsLabel')}\n description={t('termsDescription')}\n disabled={isSubmitting}\n />\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n disabled={isSubmitting || !isFormValid}\n loading={isSubmitting}\n >\n {t('signUpButton')}\n </Button>\n </form>\n\n {/* Social login divider — only rendered when at least one\n provider is enabled. Source: caller's prop override if set,\n otherwise backend /oauth/providers. */}\n {effectiveSocialProviders.length > 0 && (\n <>\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-slate-200 dark:border-white/10\" />\n </div>\n <div className=\"relative flex justify-center text-xs\">\n <span className=\"bg-white dark:bg-slate-900 px-3 text-slate-400 dark:text-slate-500\">\n {t('orContinueWith')}\n </span>\n </div>\n </div>\n\n <SocialLoginButtons\n providers={[...effectiveSocialProviders]}\n onProviderClick={handleSocialLogin}\n loading={socialLoading}\n disabled={isSubmitting}\n />\n </>\n )}\n\n {/* Sign in link */}\n {onSignIn && (\n <Text className=\"text-center\">\n {t('alreadyHaveAccount')}{' '}\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); onSignIn() }}>\n {t('signInLink')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n if (embedded) return content\n\n return (\n <AuthLayout heroPanel={heroPanel}>\n {content}\n </AuthLayout>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n BaseForm,\n Input,\n EmptyState,\n Text,\n TextLink,\n} from '@ui/index'\nimport { EnvelopeIcon, CheckCircleIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { ForgotPasswordProps, ForgotPasswordPhase } from '@datatechsolutions/shared-domain'\nimport type { ForgotPasswordProps, ForgotPasswordPhase } from '@datatechsolutions/shared-domain'\n\nexport function ForgotPassword({\n onSuccess,\n onBack,\n defaultEmail = '',\n embedded = false,\n}: ForgotPasswordProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [phase, setPhase] = useState<ForgotPasswordPhase>('form')\n const [email, setEmail] = useState(defaultEmail)\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n setIsSubmitting(true)\n\n try {\n await client.requestPasswordReset(email)\n setPhase('sent')\n onSuccess?.()\n } catch {\n setError(t('forgotPasswordError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, email, onSuccess, t],\n )\n\n const sentContent = (\n <div className=\"space-y-5\">\n <EmptyState\n variant=\"minimal\"\n icon={CheckCircleIcon}\n message={t('forgotPasswordSuccessTitle')}\n description={t('forgotPasswordSuccessDescription', { email })}\n />\n\n {onBack && (\n <Text className=\"text-center\">\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); onBack() }}>\n {t('backToSignIn')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n const formContent = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {t('forgotPasswordTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {t('forgotPasswordSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n <BaseForm\n icon={<EnvelopeIcon className=\"h-5 w-5\" />}\n iconColor=\"blue\"\n title={t('forgotPasswordFormTitle')}\n subtitle={t('forgotPasswordFormSubtitle')}\n onSubmit={handleSubmit}\n submitLabel={t('forgotPasswordSubmit')}\n isLoading={isSubmitting}\n submitDisabled={!email.trim()}\n showHeader={false}\n >\n <Input\n label={t('emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('emailPlaceholder')}\n icon={<EnvelopeIcon className=\"h-5 w-5\" />}\n autoComplete=\"email\"\n disabled={isSubmitting}\n required\n autoFocus\n />\n </BaseForm>\n\n {/* Back link */}\n {onBack && (\n <Text className=\"text-center\">\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); onBack() }}>\n {t('backToSignIn')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n const activeContent = phase === 'sent' ? sentContent : formContent\n\n if (embedded) return activeContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {activeContent}\n </Card>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n PasswordInput,\n Button,\n EmptyState,\n} from '@ui/index'\nimport { PasswordStrengthMeter } from './components'\nimport { LockClosedIcon, CheckCircleIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { ResetPasswordProps, ResetPasswordPhase } from '@datatechsolutions/shared-domain'\nimport type { ResetPasswordProps, ResetPasswordPhase } from '@datatechsolutions/shared-domain'\n\nexport function ResetPassword({\n token,\n onSuccess,\n passwordPolicy,\n embedded = false,\n}: ResetPasswordProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [phase, setPhase] = useState<ResetPasswordPhase>('form')\n const [password, setPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const passwordsMatch = password !== '' && confirmPassword !== '' && password === confirmPassword\n const hasPasswordMismatch = confirmPassword !== '' && password !== confirmPassword\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n\n if (!passwordsMatch) {\n setError(t('passwordMismatchError'))\n return\n }\n\n setIsSubmitting(true)\n\n try {\n await client.resetPassword(token, password)\n setPhase('success')\n onSuccess?.()\n } catch {\n setError(t('resetPasswordError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, token, password, passwordsMatch, onSuccess, t],\n )\n\n const successContent = (\n <div className=\"space-y-5\">\n <EmptyState\n variant=\"minimal\"\n icon={CheckCircleIcon}\n message={t('resetPasswordSuccessTitle')}\n description={t('resetPasswordSuccessDescription')}\n />\n </div>\n )\n\n const formContent = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {t('resetPasswordTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {t('resetPasswordSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <PasswordInput\n label={t('newPasswordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('newPasswordPlaceholder')}\n icon={<LockClosedIcon className=\"h-5 w-5\" />}\n autoComplete=\"new-password\"\n disabled={isSubmitting}\n required\n autoFocus\n />\n <PasswordStrengthMeter\n password={password}\n policy={passwordPolicy}\n showRequirements\n />\n </div>\n\n <PasswordInput\n label={t('confirmPasswordLabel')}\n value={confirmPassword}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setConfirmPassword(event.target.value)}\n placeholder={t('confirmPasswordPlaceholder')}\n icon={<LockClosedIcon className=\"h-5 w-5\" />}\n autoComplete=\"new-password\"\n disabled={isSubmitting}\n error={hasPasswordMismatch ? t('passwordMismatchError') : undefined}\n success={passwordsMatch}\n required\n />\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n disabled={isSubmitting || !passwordsMatch}\n loading={isSubmitting}\n >\n {t('resetPasswordButton')}\n </Button>\n </form>\n </div>\n )\n\n const activeContent = phase === 'success' ? successContent : formContent\n\n if (embedded) return activeContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {activeContent}\n </Card>\n )\n}\n","import React, { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n Input,\n Button,\n EmptyState,\n SegmentedControl,\n Spinner,\n Text,\n TextLink,\n} from '@ui/index'\nimport { OtpInput } from './components'\nimport { EnvelopeIcon, DevicePhoneMobileIcon, PaperAirplaneIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { PasswordlessChannel, PasswordlessSignInProps, PasswordlessStep } from '@datatechsolutions/shared-domain'\nimport type { PasswordlessChannel, PasswordlessSignInProps, PasswordlessStep } from '@datatechsolutions/shared-domain'\n\nexport function PasswordlessSignIn({\n defaultMethod = 'email',\n allowedChannels = ['email', 'sms'],\n onSuccess,\n onBack,\n defaultEmail = '',\n embedded = false,\n}: PasswordlessSignInProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [step, setStep] = useState<PasswordlessStep>('input')\n const [channel, setChannel] = useState<PasswordlessChannel>(\n allowedChannels.includes(defaultMethod) ? defaultMethod : (allowedChannels[0] ?? 'email'),\n )\n const [identifier, setIdentifier] = useState(defaultEmail)\n const [code, setCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSending, setIsSending] = useState(false)\n const [isVerifying, setIsVerifying] = useState(false)\n\n const channelSegments = allowedChannels.map((ch) => ({\n value: ch,\n label: ch === 'email' ? t('channelEmail') : t('channelSms'),\n }))\n\n const handleSendCode = useCallback(async () => {\n if (!identifier.trim()) return\n\n setError(null)\n setIsSending(true)\n\n try {\n await client.sendPasswordlessCode(channel, identifier.trim())\n setStep('sent')\n\n // Auto-advance to OTP entry after a brief confirmation display\n setTimeout(() => setStep('verify'), 1500)\n } catch {\n setError(t('passwordlessSendError'))\n } finally {\n setIsSending(false)\n }\n }, [client, channel, identifier, t])\n\n const handleVerifyCode = useCallback(\n async (completedCode: string) => {\n setError(null)\n setIsVerifying(true)\n\n try {\n await client.verifyPasswordlessCode(channel, identifier.trim(), completedCode)\n onSuccess?.()\n } catch {\n setError(t('passwordlessVerifyError'))\n setCode('')\n } finally {\n setIsVerifying(false)\n }\n },\n [client, channel, identifier, onSuccess, t],\n )\n\n // Step 1: Channel + identifier input\n const inputContent = (\n <div className=\"space-y-6\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-slate-900 dark:text-white\">\n {t('passwordlessTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">\n {t('passwordlessSubtitle')}\n </p>\n </div>\n\n {/* Channel selector */}\n {allowedChannels.length > 1 && (\n <div className=\"flex justify-center\">\n <SegmentedControl\n segments={channelSegments}\n value={channel}\n onChange={(value: string) => {\n setChannel(value as PasswordlessChannel)\n setIdentifier(value === 'email' ? defaultEmail : '')\n setError(null)\n }}\n size=\"sm\"\n />\n </div>\n )}\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* Identifier input */}\n <Input\n label={channel === 'email' ? t('emailLabel') : t('phoneLabel')}\n type={channel === 'email' ? 'email' : 'tel'}\n value={identifier}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setIdentifier(event.target.value)}\n placeholder={channel === 'email' ? t('emailPlaceholder') : t('phonePlaceholder')}\n icon={\n channel === 'email'\n ? <EnvelopeIcon className=\"h-5 w-5\" />\n : <DevicePhoneMobileIcon className=\"h-5 w-5\" />\n }\n autoComplete={channel === 'email' ? 'email' : 'tel'}\n disabled={isSending}\n autoFocus\n />\n\n <Button\n type=\"button\"\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleSendCode}\n disabled={isSending || !identifier.trim()}\n loading={isSending}\n >\n {t('passwordlessSendButton')}\n </Button>\n\n {/* Back link */}\n {onBack && (\n <Text className=\"text-center\">\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); onBack() }}>\n {t('backToSignIn')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n // Step 2: Sent confirmation (brief auto-advancing state)\n const sentContent = (\n <div className=\"space-y-6\">\n <EmptyState\n variant=\"minimal\"\n icon={PaperAirplaneIcon}\n message={t('passwordlessCodeSentTitle')}\n description={\n channel === 'email'\n ? t('passwordlessCodeSentEmailDescription', { email: identifier })\n : t('passwordlessCodeSentSmsDescription', { phone: identifier })\n }\n />\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n </div>\n )\n\n // Step 3: OTP entry\n const verifyContent = (\n <div className=\"space-y-6\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-xl font-bold text-slate-900 dark:text-white\">\n {t('passwordlessEnterCodeTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">\n {channel === 'email'\n ? t('passwordlessEnterCodeEmailSubtitle', { email: identifier })\n : t('passwordlessEnterCodeSmsSubtitle', { phone: identifier })}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red text-center\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* OTP input */}\n <OtpInput\n value={code}\n onChange={setCode}\n onComplete={handleVerifyCode}\n error={error ?? undefined}\n disabled={isVerifying}\n autoFocus\n />\n\n {/* Verifying spinner */}\n {isVerifying && (\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n )}\n\n {/* Resend / back */}\n <div className=\"flex items-center justify-between\">\n <Text>\n <TextLink\n href=\"#\"\n onClick={(event) => {\n event.preventDefault()\n setStep('input')\n setCode('')\n setError(null)\n }}\n >\n {t('passwordlessChangeIdentifier')}\n </TextLink>\n </Text>\n <Button\n type=\"button\"\n plain\n size=\"sm\"\n onClick={() => {\n setCode('')\n setError(null)\n handleSendCode()\n }}\n disabled={isSending}\n >\n {t('resendEmailButton')}\n </Button>\n </div>\n </div>\n )\n\n const activeContent = step === 'input'\n ? inputContent\n : step === 'sent'\n ? sentContent\n : verifyContent\n\n if (embedded) return activeContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {activeContent}\n </Card>\n )\n}\n","import { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n CardContent,\n Avatar,\n Badge,\n ListCard,\n ListCardItem,\n FormCheckbox,\n Button,\n triggerHaptic,\n} from '@ui/index'\nimport { AuthLayout } from './components'\nimport { ShieldExclamationIcon } from '@heroicons/react/24/outline'\n\nexport type { ConsentScreenProps } from '@datatechsolutions/shared-domain'\nimport type { ConsentScreenProps } from '@datatechsolutions/shared-domain'\n\nexport function ConsentScreen({\n application,\n scopes,\n grantedScopes,\n onApprove,\n onDeny,\n isSubmitting = false,\n}: ConsentScreenProps) {\n const t = useTranslations('windsock')\n\n const [checkedScopes, setCheckedScopes] = useState<Set<string>>(\n () => new Set(grantedScopes && grantedScopes.length > 0 ? grantedScopes : scopes.map((s) => s.id)),\n )\n\n const handleScopeToggle = useCallback((scopeId: string, checked: boolean) => {\n setCheckedScopes((previous) => {\n const next = new Set(previous)\n if (checked) {\n next.add(scopeId)\n } else {\n next.delete(scopeId)\n }\n return next\n })\n }, [])\n\n const handleApprove = useCallback(() => {\n triggerHaptic('light')\n onApprove(Array.from(checkedScopes))\n }, [checkedScopes, onApprove])\n\n const handleDeny = useCallback(() => {\n triggerHaptic('light')\n onDeny()\n }, [onDeny])\n\n const appInitials = application.name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n\n return (\n <AuthLayout>\n <Card variant=\"glass\" className=\"mx-auto w-full max-w-md\">\n <CardContent className=\"space-y-6 p-6 sm:p-8\">\n {/* App identity */}\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <Avatar\n src={application.logoUrl}\n initials={appInitials}\n alt={application.name}\n />\n\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-center gap-2\">\n <span className=\"text-lg font-semibold text-slate-900 dark:text-white\">\n {application.name}\n </span>\n {application.verified ? (\n <Badge color=\"green\">\n {t('consent.verified')}\n </Badge>\n ) : (\n <Badge color=\"amber\">\n {t('consent.unverified')}\n </Badge>\n )}\n </div>\n\n {application.url && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{application.url}</p>\n )}\n\n <p className=\"text-sm text-slate-600 dark:text-slate-300\">\n {t('consent.wantsAccess')}\n </p>\n </div>\n </div>\n\n {/* Unverified warning */}\n {!application.verified && (\n <div className=\"flex items-start gap-3 rounded-xl border border-amber-500/30 bg-amber-500/10 p-3\">\n <ShieldExclamationIcon className=\"mt-0.5 h-5 w-5 shrink-0 text-amber-600 dark:text-amber-400\" />\n <p className=\"text-sm text-amber-700 dark:text-amber-300\">\n {t('consent.unverifiedWarning', { name: application.name })}\n </p>\n </div>\n )}\n\n {/* Scopes */}\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {t('consent.permissionsLabel')}\n </p>\n <ListCard>\n {scopes.map((scope) => (\n <ListCardItem\n key={scope.id}\n leading={\n <FormCheckbox\n checked={checkedScopes.has(scope.id)}\n onChange={(checked: boolean) => handleScopeToggle(scope.id, checked)}\n label=\"\"\n />\n }\n onClick={() => handleScopeToggle(scope.id, !checkedScopes.has(scope.id))}\n >\n <div>\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">\n {scope.name}\n </p>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{scope.description}</p>\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n </div>\n\n {/* Actions */}\n <div className=\"flex flex-col gap-2 sm:flex-row-reverse\">\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleApprove}\n loading={isSubmitting}\n disabled={isSubmitting || checkedScopes.size === 0}\n >\n {t('consent.approveButton')}\n </Button>\n <Button\n outline\n fullWidth\n onClick={handleDeny}\n disabled={isSubmitting}\n >\n {t('consent.denyButton')}\n </Button>\n </div>\n\n <p className=\"text-center text-xs text-slate-400 dark:text-slate-500\">\n {t('consent.footerNote')}\n </p>\n </CardContent>\n </Card>\n </AuthLayout>\n )\n}\n","import { useTranslations } from '@ui/lib/i18n-context'\nimport { Avatar, Badge, ListCard, ListCardItem, InlineSpinner } from '@ui/index'\nimport { ChevronRightIcon } from '@heroicons/react/20/solid'\n\nexport type { SsoConnector, SsoConnectorListProps } from '@datatechsolutions/shared-domain'\nimport type { SsoConnector, SsoConnectorListProps } from '@datatechsolutions/shared-domain'\n\nexport function SsoConnectorList({ connectors, onSelect, loading = false }: SsoConnectorListProps) {\n const t = useTranslations('windsock')\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-8 text-sm text-slate-500 dark:text-slate-400\">\n <InlineSpinner />\n <span>{t('sso.connectorList.loading')}</span>\n </div>\n )\n }\n\n if (connectors.length === 0) {\n return (\n <p className=\"py-6 text-center text-sm text-slate-500 dark:text-slate-400\">\n {t('sso.connectorList.empty')}\n </p>\n )\n }\n\n return (\n <ListCard>\n {connectors.map((connector) => {\n const initials = connector.name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n\n return (\n <ListCardItem\n key={connector.id}\n leading={\n <Avatar\n src={connector.logoUrl}\n initials={initials}\n alt={connector.name}\n />\n }\n trailing={\n <div className=\"flex items-center gap-2\">\n <Badge color=\"zinc\">\n {connector.type === 'saml' ? t('sso.connectorList.typeSaml') : t('sso.connectorList.typeOidc')}\n </Badge>\n <ChevronRightIcon className=\"h-4 w-4 text-slate-400\" />\n </div>\n }\n onClick={() => onSelect(connector)}\n >\n <div>\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">\n {connector.name}\n </p>\n {connector.domain && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{connector.domain}</p>\n )}\n </div>\n </ListCardItem>\n )\n })}\n </ListCard>\n )\n}\n","import React, { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { BaseForm, Input, Button, Card, CardContent, Text, TextLink } from '@ui/index'\nimport { BuildingOffice2Icon } from '@heroicons/react/24/outline'\nimport { SsoConnectorList } from './sso-connector-list'\n\nexport type { SsoConnector, SsoEmailFormProps, SsoEmailFormPhase } from '@datatechsolutions/shared-domain'\nimport type { SsoConnector, SsoEmailFormProps, SsoEmailFormPhase as Phase } from '@datatechsolutions/shared-domain'\n\nexport function SsoEmailForm({\n onEmailSubmit,\n onConnectorSelect,\n defaultEmail = '',\n embedded = false,\n}: SsoEmailFormProps) {\n const t = useTranslations('windsock')\n\n const [phase, setPhase] = useState<Phase>('email')\n const [email, setEmail] = useState(defaultEmail)\n const [emailError, setEmailError] = useState<string | null>(null)\n const [connectors, setConnectors] = useState<SsoConnector[]>([])\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [loadingConnectors, setLoadingConnectors] = useState(false)\n\n const validateEmail = useCallback(\n (value: string): boolean => {\n if (!value.trim()) {\n setEmailError(t('sso.emailForm.errorEmailRequired'))\n return false\n }\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n setEmailError(t('sso.emailForm.errorEmailInvalid'))\n return false\n }\n setEmailError(null)\n return true\n },\n [t],\n )\n\n const handleEmailSubmit = useCallback(async () => {\n if (!validateEmail(email)) return\n\n setIsSubmitting(true)\n setLoadingConnectors(true)\n\n try {\n const discovered = await onEmailSubmit(email)\n setConnectors(discovered)\n setPhase('connectors')\n } catch {\n setEmailError(t('sso.emailForm.errorDiscoveryFailed'))\n } finally {\n setIsSubmitting(false)\n setLoadingConnectors(false)\n }\n }, [email, onEmailSubmit, validateEmail, t])\n\n const handleBackToEmail = useCallback(() => {\n setPhase('email')\n setConnectors([])\n setEmailError(null)\n }, [])\n\n if (phase === 'connectors') {\n const connectorsContent = (\n <div className=\"space-y-4\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">\n {t('sso.emailForm.connectorsTitle')}\n </p>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {t('sso.emailForm.connectorsSubtitle', { email })}\n </p>\n </div>\n\n <SsoConnectorList\n connectors={connectors}\n onSelect={onConnectorSelect}\n loading={loadingConnectors}\n />\n\n <Text className=\"text-center\">\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); handleBackToEmail() }}>\n {t('sso.emailForm.backButton')}\n </TextLink>\n </Text>\n </div>\n )\n\n if (embedded) return connectorsContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto w-full max-w-md\">\n <CardContent className=\"p-6 sm:p-8\">\n {connectorsContent}\n </CardContent>\n </Card>\n )\n }\n\n const emailContent = (\n <div className=\"space-y-4\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">\n {t('sso.emailForm.title')}\n </p>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {t('sso.emailForm.subtitle')}\n </p>\n </div>\n\n <BaseForm onSubmit={handleEmailSubmit} submitLabel={t('sso.emailForm.continueButton')} showFooter={false}>\n <Input\n type=\"email\"\n label={t('sso.emailForm.emailLabel')}\n placeholder={t('sso.emailForm.emailPlaceholder')}\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n setEmail(event.target.value)\n if (emailError) setEmailError(null)\n }}\n error={emailError ?? undefined}\n icon={<BuildingOffice2Icon className=\"h-5 w-5\" />}\n disabled={isSubmitting}\n autoFocus\n autoComplete=\"email\"\n />\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n loading={isSubmitting}\n disabled={isSubmitting}\n >\n {t('sso.emailForm.continueButton')}\n </Button>\n </BaseForm>\n </div>\n )\n\n if (embedded) return emailContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto w-full max-w-md\">\n <CardContent className=\"p-6 sm:p-8\">\n {emailContent}\n </CardContent>\n </Card>\n )\n}\n","import { useState, useCallback, Fragment, type ReactNode } from 'react'\nimport { Menu, Transition } from '@headlessui/react'\nimport { Avatar, DynamicIslandConfirm, triggerHaptic } from '@ui/index'\nimport { useAuth } from '../../_auth'\nimport { ChevronUpDownIcon, ArrowRightStartOnRectangleIcon } from '@heroicons/react/20/solid'\n\nexport type { UserButtonProps } from '@datatechsolutions/shared-domain'\nimport type { UserButtonProps } from '@datatechsolutions/shared-domain'\n\nconst DEFAULT_LABELS = {\n menuLabel: 'User menu',\n userAlt: 'User',\n signOut: 'Sign out',\n signOutConfirmTitle: 'Sign out?',\n signOutConfirmButton: 'Sign out',\n signOutCancelButton: 'Cancel',\n} as const\n\nexport function UserButton({ menuItems = [], onSignOut, avatarUrl, labels }: UserButtonProps) {\n const resolvedLabels = { ...DEFAULT_LABELS, ...labels }\n const { user, logout, status } = useAuth()\n\n const [confirmSignOut, setConfirmSignOut] = useState(false)\n\n if (status !== 'authenticated') {\n return null\n }\n\n const userInitials = user?.name\n ? user.name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n : user?.email?.slice(0, 2).toUpperCase() ?? '??'\n\n const resolvedAvatarUrl = avatarUrl ?? user?.image\n\n const handleSignOutRequest = () => {\n triggerHaptic('light')\n setConfirmSignOut(true)\n }\n\n const handleSignOutConfirm = async () => {\n triggerHaptic('success')\n setConfirmSignOut(false)\n try {\n // Pass '/' as redirect — logout() handles the full end-session flow\n // including server-side session termination and redirect.\n // onSignOut is called before the redirect for any cleanup the consumer needs.\n onSignOut?.()\n await logout('/')\n } catch {\n // logout errors are non-critical; session will expire naturally\n }\n }\n\n const handleSignOutCancel = () => {\n triggerHaptic('light')\n setConfirmSignOut(false)\n }\n\n return (\n <>\n <Menu as=\"div\" className=\"relative inline-block text-left\">\n <Menu.Button\n className=\"flex items-center gap-2 rounded-full p-1 transition-opacity hover:opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500\"\n aria-label={resolvedLabels.menuLabel}\n >\n <Avatar\n src={resolvedAvatarUrl}\n initials={userInitials}\n alt={user?.name ?? user?.email ?? resolvedLabels.userAlt}\n />\n <ChevronUpDownIcon className=\"h-4 w-4 text-slate-500 dark:text-slate-400\" />\n </Menu.Button>\n\n <Transition\n as={Fragment}\n enter=\"transition ease-out duration-100\"\n enterFrom=\"transform opacity-0 scale-95\"\n enterTo=\"transform opacity-100 scale-100\"\n leave=\"transition ease-in duration-75\"\n leaveFrom=\"transform opacity-100 scale-100\"\n leaveTo=\"transform opacity-0 scale-95\"\n >\n <Menu.Items className=\"liquid-surface absolute right-0 z-50 mt-2 w-60 origin-top-right rounded-2xl shadow-lg ring-1 ring-black/5 focus:outline-none dark:ring-white/10\">\n {/* User identity header */}\n <div className=\"liquid-divider flex items-center gap-3 px-4 py-3\">\n <Avatar\n src={resolvedAvatarUrl}\n initials={userInitials}\n alt={user?.name ?? user?.email ?? resolvedLabels.userAlt}\n />\n <div className=\"min-w-0 flex-1\">\n {user?.name && (\n <p className=\"truncate text-sm font-medium text-slate-900 dark:text-white\">\n {user.name}\n </p>\n )}\n {user?.email && (\n <p className=\"truncate text-xs text-slate-500 dark:text-slate-400\">{user.email}</p>\n )}\n </div>\n </div>\n\n {/* Custom menu items */}\n {menuItems.length > 0 && (\n <>\n <div className=\"px-1 py-1\">\n {menuItems.map((item, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <button /* no-raw-button-ok: required child of @headlessui/react Menu.Item — the Headless Menu API expects a focusable button child it can wire keyboard nav + active state to; <Button> would double-wrap */\n type=\"button\"\n onClick={() => {\n triggerHaptic('light')\n item.onClick()\n }}\n className={`flex w-full items-center gap-2 rounded-xl px-3 py-2 text-sm transition-colors ${\n active\n ? 'bg-slate-100 text-slate-900 dark:bg-white/10 dark:text-white'\n : 'text-slate-700 dark:text-slate-300'\n }`}\n >\n {item.icon ? (\n <span className=\"h-4 w-4 shrink-0 text-slate-400\">{item.icon as ReactNode}</span>\n ) : null}\n {item.label}\n </button>\n )}\n </Menu.Item>\n ))}\n </div>\n <div className=\"border-t border-slate-200/60 dark:border-white/10\" />\n </>\n )}\n\n {/* Sign out */}\n <div className=\"border-t border-slate-200/60 px-1 py-1 dark:border-white/10\">\n <Menu.Item>\n {({ active }) => (\n <button /* no-raw-button-ok: UserButton primitive — avatar trigger and dropdown menu items */\n type=\"button\"\n onClick={handleSignOutRequest}\n className={`flex w-full items-center gap-2 rounded-xl px-3 py-2 text-sm transition-colors ${\n active\n ? 'bg-red-50 text-red-700 dark:bg-red-500/10 dark:text-red-400'\n : 'text-red-600 dark:text-red-400'\n }`}\n >\n <ArrowRightStartOnRectangleIcon className=\"h-4 w-4 shrink-0\" />\n {resolvedLabels.signOut}\n </button>\n )}\n </Menu.Item>\n </div>\n </Menu.Items>\n </Transition>\n </Menu>\n\n {/* Sign-out confirmation */}\n <DynamicIslandConfirm\n open={confirmSignOut}\n onClose={handleSignOutCancel}\n onConfirm={handleSignOutConfirm}\n title={resolvedLabels.signOutConfirmTitle}\n confirmLabel={resolvedLabels.signOutConfirmButton}\n cancelLabel={resolvedLabels.signOutCancelButton}\n />\n </>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/platform/auth/mfa-challenge.tsx","../src/platform/auth/sign-in.tsx","../src/platform/auth/verify-email.tsx","../src/platform/auth/sign-up.tsx","../src/platform/auth/forgot-password.tsx","../src/platform/auth/reset-password.tsx","../src/platform/auth/passwordless-sign-in.tsx","../src/platform/auth/consent-screen.tsx","../src/platform/auth/sso-connector-list.tsx","../src/platform/auth/sso-email-form.tsx","../src/platform/auth/user-button.tsx"],"names":["useTranslations","useAuth","useState","useCallback","triggerHaptic","jsxs","jsx","SegmentedControl","OtpInput","Spinner","Input","Button","Text","TextLink","Card","useSocialProviders","PasswordInput","Fragment","SocialLoginButtons","EnvelopeIcon","AuthLayout","useEffect","UserIcon","LockClosedIcon","PasswordStrengthMeter","FormCheckbox","EmptyState","CheckCircleIcon","BaseForm","DevicePhoneMobileIcon","PaperAirplaneIcon","CardContent","Avatar","Badge","ShieldExclamationIcon","ListCard","ListCardItem","InlineSpinner","ChevronRightIcon","BuildingOffice2Icon","Menu","ChevronUpDownIcon","Transition","ArrowRightStartOnRectangleIcon","DynamicIslandConfirm"],"mappings":"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","file":"chunk-435TRHC2.js","sourcesContent":["import React, { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n Input,\n SegmentedControl,\n Button,\n Spinner,\n Text,\n TextLink,\n triggerHaptic,\n} from '@ui/index'\nimport { OtpInput } from './components'\nimport { useAuth } from '../../_auth'\n\nexport type { MfaMethod, MfaChallengeProps } from '@datatechsolutions/shared-domain'\nimport type { MfaMethod, MfaChallengeProps } from '@datatechsolutions/shared-domain'\n\nexport function MfaChallenge({\n mfaToken,\n onSuccess,\n onCancel,\n availableMethods = ['totp', 'backup'],\n embedded = false,\n}: MfaChallengeProps) {\n const t = useTranslations('windsock')\n const { verifyMFA } = useAuth()\n\n const [method, setMethod] = useState<MfaMethod>('totp')\n const [totpCode, setTotpCode] = useState('')\n const [backupCode, setBackupCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [failureCount, setFailureCount] = useState(0)\n\n const handleVerify = useCallback(\n async (code: string) => {\n setError(null)\n setIsSubmitting(true)\n triggerHaptic('light')\n\n try {\n const result = await verifyMFA(mfaToken, code)\n if (result.success) {\n triggerHaptic('success')\n onSuccess?.()\n } else if (result.error) {\n triggerHaptic('error')\n const count = failureCount + 1\n setFailureCount(count)\n if (count >= 3) {\n setError(t('mfa.challenge.errorLockout'))\n } else {\n setError(t('mfa.challenge.errorInvalidCode'))\n }\n }\n } catch {\n triggerHaptic('error')\n setError(t('mfa.challenge.errorVerificationFailed'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [verifyMFA, mfaToken, onSuccess, failureCount, t],\n )\n\n const handleTotpComplete = useCallback(\n (code: string) => {\n handleVerify(code)\n },\n [handleVerify],\n )\n\n const handleBackupSubmit = useCallback(() => {\n if (backupCode.trim()) {\n handleVerify(backupCode.trim())\n }\n }, [backupCode, handleVerify])\n\n const handleMethodChange = useCallback((value: string) => {\n triggerHaptic('light')\n setMethod(value as MfaMethod)\n setError(null)\n setTotpCode('')\n setBackupCode('')\n }, [])\n\n const segments = availableMethods.map((m) => ({\n value: m,\n label: m === 'totp' ? t('mfa.challenge.methodTotp') : t('mfa.challenge.methodBackup'),\n }))\n\n const content = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\n {t('mfa.challenge.title')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {method === 'totp'\n ? t('mfa.challenge.descriptionTotp')\n : t('mfa.challenge.descriptionBackup')}\n </p>\n </div>\n\n {/* Method toggle */}\n {availableMethods.length > 1 && (\n <div className=\"flex justify-center\">\n <SegmentedControl\n segments={segments}\n value={method}\n onChange={handleMethodChange}\n size=\"sm\"\n />\n </div>\n )}\n\n {/* Lockout warning banner */}\n {failureCount >= 3 && (\n <div className=\"rounded-xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-400 text-center\">\n {t('mfa.challenge.lockoutWarning')}\n </div>\n )}\n\n {/* TOTP input */}\n {method === 'totp' && (\n <div className=\"space-y-4\">\n <OtpInput\n value={totpCode}\n onChange={setTotpCode}\n onComplete={handleTotpComplete}\n error={error ?? undefined}\n disabled={isSubmitting}\n autoFocus\n />\n {isSubmitting && (\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n )}\n </div>\n )}\n\n {/* Backup code input */}\n {method === 'backup' && (\n <div className=\"space-y-4\">\n <Input\n value={backupCode}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setBackupCode(event.target.value)}\n placeholder={t('mfa.challenge.backupCodePlaceholder')}\n error={error ?? undefined}\n disabled={isSubmitting}\n autoFocus\n className=\"font-mono text-center tracking-widest\"\n />\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleBackupSubmit}\n disabled={!backupCode.trim() || isSubmitting}\n loading={isSubmitting}\n >\n {t('mfa.challenge.verifyBackupCode')}\n </Button>\n </div>\n )}\n\n {/* Cancel link */}\n {onCancel && (\n <Text className=\"text-center\">\n <TextLink\n href=\"#\"\n onClick={(event) => {\n event.preventDefault()\n triggerHaptic('light')\n onCancel()\n }}\n >\n {t('mfa.challenge.useDifferentAccount')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n if (embedded) return content\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {content}\n </Card>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Input,\n PasswordInput,\n Button,\n Text,\n TextLink,\n} from '@ui/index'\nimport {\n AuthLayout,\n SocialLoginButtons,\n type SocialProvider,\n} from './components'\nimport { EnvelopeIcon } from '@heroicons/react/24/outline'\nimport { useAuth, useSocialProviders } from '../../_auth'\nimport { MfaChallenge } from './mfa-challenge'\n\nexport type { SignInProps } from '@datatechsolutions/shared-domain'\nimport type { SignInProps, MfaRequiredState } from '@datatechsolutions/shared-domain'\n\nexport function SignIn({\n onSuccess,\n onSignUp,\n onForgotPassword,\n onPasswordless,\n socialProviders,\n allowPasswordless,\n defaultEmail = '',\n embedded = false,\n heroPanel,\n}: SignInProps) {\n const t = useTranslations('windsock')\n const { loginWithCredentials, loginWithProvider } = useAuth()\n\n // Caller may pass an explicit `socialProviders` prop to pin the\n // button list (useful in tests / storybook); otherwise we fetch\n // the enabled set from the backend so we never advertise a button\n // whose callback will fail.\n const discovered = useSocialProviders()\n const effectiveSocialProviders: readonly SocialProvider[] = socialProviders ?? discovered.providers\n\n const [email, setEmail] = useState(defaultEmail)\n const [password, setPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [mfaRequired, setMfaRequired] = useState<MfaRequiredState | null>(null)\n const [socialLoading, setSocialLoading] = useState<SocialProvider | null>(null)\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n setIsSubmitting(true)\n\n try {\n const result = await loginWithCredentials(email, password)\n\n if (result.success) {\n onSuccess?.()\n } else if (result.mfaRequired && result.mfaToken) {\n setMfaRequired({ mfaToken: result.mfaToken })\n } else if (result.error) {\n // Surface the actual Cognito error (e.g. \"User does not\n // exist\", \"Incorrect username or password\") instead of the\n // generic placeholder. Falls back to the translated string\n // when Cognito returns no message.\n setError(result.error || t('signInError'))\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : t('signInError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [email, password, loginWithCredentials, onSuccess, t],\n )\n\n const handleSocialLogin = useCallback((provider: SocialProvider) => {\n setSocialLoading(provider)\n loginWithProvider(provider)\n }, [loginWithProvider])\n\n if (mfaRequired) {\n return (\n <MfaChallenge\n mfaToken={mfaRequired.mfaToken}\n onSuccess={onSuccess}\n onCancel={() => setMfaRequired(null)}\n embedded={embedded}\n />\n )\n }\n\n const content = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-slate-900 dark:text-white\">\n {t('signInTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">\n {t('signInSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* Credentials form */}\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <Input\n label={t('emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('emailPlaceholder')}\n autoComplete=\"email\"\n disabled={isSubmitting}\n required\n />\n\n <PasswordInput\n label={t('passwordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('passwordPlaceholder')}\n autoComplete=\"current-password\"\n disabled={isSubmitting}\n required\n />\n\n {/* Forgot password link */}\n {onForgotPassword && (\n <div className=\"flex justify-end\">\n <Button type=\"button\" plain size=\"sm\" onClick={onForgotPassword}>\n {t('forgotPassword')}\n </Button>\n </div>\n )}\n\n <Button\n type=\"submit\"\n color=\"ios-glass-green\"\n size=\"lg\"\n fullWidth\n disabled={isSubmitting || !email || !password}\n loading={isSubmitting}\n >\n {t('signInButton')}\n </Button>\n </form>\n\n {/* Social login divider — only renders when the backend\n reports at least one enabled provider (or the caller passed\n an explicit list). We never show a divider for zero buttons. */}\n {effectiveSocialProviders.length > 0 && (\n <>\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-slate-200/60 dark:border-white/10\" />\n </div>\n <div className=\"relative flex justify-center text-xs\">\n <span className=\"bg-white/80 px-3 text-slate-400 dark:bg-slate-900/80 dark:text-slate-500\">\n {t('orContinueWith')}\n </span>\n </div>\n </div>\n\n <SocialLoginButtons\n providers={[...effectiveSocialProviders]}\n onProviderClick={handleSocialLogin}\n loading={socialLoading}\n disabled={isSubmitting}\n />\n </>\n )}\n\n {/* Passwordless sign-in button */}\n {allowPasswordless && (\n <Button\n type=\"button\"\n color=\"ios-glass-blue\"\n size=\"lg\"\n fullWidth\n onClick={onPasswordless}\n >\n <EnvelopeIcon className=\"h-5 w-5\" />\n {t('signInPasswordless')}\n </Button>\n )}\n\n {/* Sign up link */}\n {onSignUp && (\n <Text className=\"text-center\">\n {t('noAccount')}{' '}\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); onSignUp() }}>\n {t('signUpLink')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n if (embedded) return content\n\n return (\n <AuthLayout heroPanel={heroPanel}>\n {content}\n </AuthLayout>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n Button,\n Spinner,\n} from '@ui/index'\nimport { OtpInput } from './components'\nimport { EnvelopeIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { VerifyEmailProps } from '@datatechsolutions/shared-domain'\nimport type { VerifyEmailProps } from '@datatechsolutions/shared-domain'\n\nconst RESEND_COOLDOWN_SECONDS = 60\n\nexport function VerifyEmail({\n email,\n onSuccess,\n onResend,\n embedded = false,\n}: VerifyEmailProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [code, setCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [isResending, setIsResending] = useState(false)\n const [cooldown, setCooldown] = useState(RESEND_COOLDOWN_SECONDS)\n\n // Countdown timer for resend cooldown\n useEffect(() => {\n if (cooldown <= 0) return\n\n const timer = setInterval(() => {\n setCooldown((previous) => {\n if (previous <= 1) {\n clearInterval(timer)\n return 0\n }\n return previous - 1\n })\n }, 1000)\n\n return () => clearInterval(timer)\n }, [cooldown])\n\n const handleComplete = useCallback(\n async (completedCode: string) => {\n setError(null)\n setIsSubmitting(true)\n\n try {\n await client.verifyEmail(email, completedCode)\n onSuccess?.()\n } catch {\n setError(t('verifyEmailError'))\n setCode('')\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, email, onSuccess, t],\n )\n\n const handleResend = useCallback(async () => {\n if (cooldown > 0 || isResending) return\n\n setIsResending(true)\n setError(null)\n\n try {\n onResend?.()\n setCooldown(RESEND_COOLDOWN_SECONDS)\n } catch {\n setError(t('resendEmailError'))\n } finally {\n setIsResending(false)\n }\n }, [cooldown, isResending, onResend, t])\n\n const content = (\n <div className=\"space-y-6\">\n {/* Mail icon header */}\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-full bg-blue-50 dark:bg-blue-500/10\">\n <EnvelopeIcon className=\"h-8 w-8 text-ios-blue\" />\n </div>\n <div>\n <h2 className=\"text-xl font-bold text-slate-900 dark:text-white\">\n {t('verifyEmailTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">\n {t('verifyEmailSubtitle', { email })}\n </p>\n </div>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red text-center\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* OTP input */}\n <OtpInput\n value={code}\n onChange={setCode}\n onComplete={handleComplete}\n error={error ?? undefined}\n disabled={isSubmitting}\n autoFocus\n />\n\n {/* Spinner while verifying */}\n {isSubmitting && (\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n )}\n\n {/* Resend section */}\n <div className=\"text-center space-y-1\">\n <p className=\"text-sm text-slate-500 dark:text-slate-400\">\n {t('verifyEmailNoCode')}\n </p>\n <Button\n type=\"button\"\n outline\n onClick={handleResend}\n disabled={cooldown > 0 || isResending || isSubmitting}\n loading={isResending}\n >\n {cooldown > 0\n ? t('resendEmailCooldown', { seconds: cooldown })\n : t('resendEmailButton')}\n </Button>\n </div>\n </div>\n )\n\n if (embedded) return content\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {content}\n </Card>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Input,\n PasswordInput,\n Button,\n FormCheckbox,\n Text,\n TextLink,\n} from '@ui/index'\nimport {\n AuthLayout,\n PasswordStrengthMeter,\n SocialLoginButtons,\n type SocialProvider,\n} from './components'\nimport { EnvelopeIcon, LockClosedIcon, UserIcon } from '@heroicons/react/24/outline'\nimport { useAuth, useSocialProviders } from '../../_auth'\nimport { VerifyEmail } from './verify-email'\n\nexport type { SignUpProps, SignUpPhase } from '@datatechsolutions/shared-domain'\nimport type { SignUpProps, SignUpPhase } from '@datatechsolutions/shared-domain'\n\nexport function SignUp({\n onSuccess,\n onSignIn,\n socialProviders,\n passwordPolicy,\n embedded = false,\n heroPanel,\n}: SignUpProps) {\n const t = useTranslations('windsock')\n const { client, loginWithProvider } = useAuth()\n\n // Same source-of-truth story as SignIn — prop override wins when\n // present, otherwise fetch the enabled list so the register page\n // never advertises a provider that can't complete the callback.\n const discovered = useSocialProviders()\n const effectiveSocialProviders: readonly SocialProvider[] = socialProviders ?? discovered.providers\n\n const [phase, setPhase] = useState<SignUpPhase>('form')\n const [registeredEmail, setRegisteredEmail] = useState('')\n\n const [name, setName] = useState('')\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [termsAccepted, setTermsAccepted] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [socialLoading, setSocialLoading] = useState<SocialProvider | null>(null)\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n setIsSubmitting(true)\n\n try {\n // `client.register` resolves with `{success, error}` — it does\n // NOT throw on Cognito-side failures (password policy, email\n // already in use, etc.). Without checking `result.success` the\n // user got silently bounced to the verify-code page even on\n // failed signups. Surface the actual Cognito message; fall\n // back to the generic translation only when the SDK throws\n // (network / config error).\n const result = await client.register({ name, email, password })\n if (!result.success) {\n setError(result.error ?? t('signUpError'))\n return\n }\n setRegisteredEmail(email)\n setPhase('verify')\n } catch (e) {\n setError(e instanceof Error ? e.message : t('signUpError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, name, email, password, t],\n )\n\n const handleSocialLogin = useCallback((provider: SocialProvider) => {\n setSocialLoading(provider)\n loginWithProvider(provider)\n }, [loginWithProvider])\n\n if (phase === 'verify') {\n return (\n <VerifyEmail\n email={registeredEmail}\n onSuccess={onSuccess}\n embedded={embedded}\n />\n )\n }\n\n const isFormValid = name.trim() !== '' && email.trim() !== '' && password !== '' && termsAccepted\n\n const content = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-slate-900 dark:text-white\">\n {t('signUpTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">\n {t('signUpSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* Registration form */}\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <Input\n label={t('nameLabel')}\n type=\"text\"\n value={name}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setName(event.target.value)}\n placeholder={t('namePlaceholder')}\n icon={<UserIcon className=\"h-5 w-5\" />}\n autoComplete=\"name\"\n disabled={isSubmitting}\n required\n />\n\n <Input\n label={t('emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('emailPlaceholder')}\n icon={<EnvelopeIcon className=\"h-5 w-5\" />}\n autoComplete=\"email\"\n disabled={isSubmitting}\n required\n />\n\n <div className=\"space-y-2\">\n <PasswordInput\n label={t('passwordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('passwordPlaceholder')}\n icon={<LockClosedIcon className=\"h-5 w-5\" />}\n autoComplete=\"new-password\"\n disabled={isSubmitting}\n required\n />\n <PasswordStrengthMeter\n password={password}\n policy={passwordPolicy}\n showRequirements\n />\n </div>\n\n <FormCheckbox\n checked={termsAccepted}\n onChange={setTermsAccepted}\n label={t('termsLabel')}\n description={t('termsDescription')}\n disabled={isSubmitting}\n />\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n disabled={isSubmitting || !isFormValid}\n loading={isSubmitting}\n >\n {t('signUpButton')}\n </Button>\n </form>\n\n {/* Social login divider — only rendered when at least one\n provider is enabled. Source: caller's prop override if set,\n otherwise backend /oauth/providers. */}\n {effectiveSocialProviders.length > 0 && (\n <>\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-slate-200 dark:border-white/10\" />\n </div>\n <div className=\"relative flex justify-center text-xs\">\n <span className=\"bg-white dark:bg-slate-900 px-3 text-slate-400 dark:text-slate-500\">\n {t('orContinueWith')}\n </span>\n </div>\n </div>\n\n <SocialLoginButtons\n providers={[...effectiveSocialProviders]}\n onProviderClick={handleSocialLogin}\n loading={socialLoading}\n disabled={isSubmitting}\n />\n </>\n )}\n\n {/* Sign in link */}\n {onSignIn && (\n <Text className=\"text-center\">\n {t('alreadyHaveAccount')}{' '}\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); onSignIn() }}>\n {t('signInLink')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n if (embedded) return content\n\n return (\n <AuthLayout heroPanel={heroPanel}>\n {content}\n </AuthLayout>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n BaseForm,\n Input,\n EmptyState,\n Text,\n TextLink,\n} from '@ui/index'\nimport { EnvelopeIcon, CheckCircleIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { ForgotPasswordProps, ForgotPasswordPhase } from '@datatechsolutions/shared-domain'\nimport type { ForgotPasswordProps, ForgotPasswordPhase } from '@datatechsolutions/shared-domain'\n\nexport function ForgotPassword({\n onSuccess,\n onBack,\n defaultEmail = '',\n embedded = false,\n}: ForgotPasswordProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [phase, setPhase] = useState<ForgotPasswordPhase>('form')\n const [email, setEmail] = useState(defaultEmail)\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n setIsSubmitting(true)\n\n try {\n await client.requestPasswordReset(email)\n setPhase('sent')\n onSuccess?.()\n } catch {\n setError(t('forgotPasswordError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, email, onSuccess, t],\n )\n\n const sentContent = (\n <div className=\"space-y-5\">\n <EmptyState\n variant=\"minimal\"\n icon={CheckCircleIcon}\n message={t('forgotPasswordSuccessTitle')}\n description={t('forgotPasswordSuccessDescription', { email })}\n />\n\n {onBack && (\n <Text className=\"text-center\">\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); onBack() }}>\n {t('backToSignIn')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n const formContent = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {t('forgotPasswordTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {t('forgotPasswordSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n <BaseForm\n icon={<EnvelopeIcon className=\"h-5 w-5\" />}\n iconColor=\"blue\"\n title={t('forgotPasswordFormTitle')}\n subtitle={t('forgotPasswordFormSubtitle')}\n onSubmit={handleSubmit}\n submitLabel={t('forgotPasswordSubmit')}\n isLoading={isSubmitting}\n submitDisabled={!email.trim()}\n showHeader={false}\n >\n <Input\n label={t('emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('emailPlaceholder')}\n icon={<EnvelopeIcon className=\"h-5 w-5\" />}\n autoComplete=\"email\"\n disabled={isSubmitting}\n required\n autoFocus\n />\n </BaseForm>\n\n {/* Back link */}\n {onBack && (\n <Text className=\"text-center\">\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); onBack() }}>\n {t('backToSignIn')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n const activeContent = phase === 'sent' ? sentContent : formContent\n\n if (embedded) return activeContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {activeContent}\n </Card>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n PasswordInput,\n Button,\n EmptyState,\n} from '@ui/index'\nimport { PasswordStrengthMeter } from './components'\nimport { LockClosedIcon, CheckCircleIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { ResetPasswordProps, ResetPasswordPhase } from '@datatechsolutions/shared-domain'\nimport type { ResetPasswordProps, ResetPasswordPhase } from '@datatechsolutions/shared-domain'\n\nexport function ResetPassword({\n token,\n onSuccess,\n passwordPolicy,\n embedded = false,\n}: ResetPasswordProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [phase, setPhase] = useState<ResetPasswordPhase>('form')\n const [password, setPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const passwordsMatch = password !== '' && confirmPassword !== '' && password === confirmPassword\n const hasPasswordMismatch = confirmPassword !== '' && password !== confirmPassword\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n\n if (!passwordsMatch) {\n setError(t('passwordMismatchError'))\n return\n }\n\n setIsSubmitting(true)\n\n try {\n await client.resetPassword(token, password)\n setPhase('success')\n onSuccess?.()\n } catch {\n setError(t('resetPasswordError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, token, password, passwordsMatch, onSuccess, t],\n )\n\n const successContent = (\n <div className=\"space-y-5\">\n <EmptyState\n variant=\"minimal\"\n icon={CheckCircleIcon}\n message={t('resetPasswordSuccessTitle')}\n description={t('resetPasswordSuccessDescription')}\n />\n </div>\n )\n\n const formContent = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-slate-900 dark:text-white\">\n {t('resetPasswordTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">\n {t('resetPasswordSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <PasswordInput\n label={t('newPasswordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('newPasswordPlaceholder')}\n icon={<LockClosedIcon className=\"h-5 w-5\" />}\n autoComplete=\"new-password\"\n disabled={isSubmitting}\n required\n autoFocus\n />\n <PasswordStrengthMeter\n password={password}\n policy={passwordPolicy}\n showRequirements\n />\n </div>\n\n <PasswordInput\n label={t('confirmPasswordLabel')}\n value={confirmPassword}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setConfirmPassword(event.target.value)}\n placeholder={t('confirmPasswordPlaceholder')}\n icon={<LockClosedIcon className=\"h-5 w-5\" />}\n autoComplete=\"new-password\"\n disabled={isSubmitting}\n error={hasPasswordMismatch ? t('passwordMismatchError') : undefined}\n success={passwordsMatch}\n required\n />\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n disabled={isSubmitting || !passwordsMatch}\n loading={isSubmitting}\n >\n {t('resetPasswordButton')}\n </Button>\n </form>\n </div>\n )\n\n const activeContent = phase === 'success' ? successContent : formContent\n\n if (embedded) return activeContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {activeContent}\n </Card>\n )\n}\n","import React, { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n Input,\n Button,\n EmptyState,\n SegmentedControl,\n Spinner,\n Text,\n TextLink,\n} from '@ui/index'\nimport { OtpInput } from './components'\nimport { EnvelopeIcon, DevicePhoneMobileIcon, PaperAirplaneIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { PasswordlessChannel, PasswordlessSignInProps, PasswordlessStep } from '@datatechsolutions/shared-domain'\nimport type { PasswordlessChannel, PasswordlessSignInProps, PasswordlessStep } from '@datatechsolutions/shared-domain'\n\nexport function PasswordlessSignIn({\n defaultMethod = 'email',\n allowedChannels = ['email', 'sms'],\n onSuccess,\n onBack,\n defaultEmail = '',\n embedded = false,\n}: PasswordlessSignInProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [step, setStep] = useState<PasswordlessStep>('input')\n const [channel, setChannel] = useState<PasswordlessChannel>(\n allowedChannels.includes(defaultMethod) ? defaultMethod : (allowedChannels[0] ?? 'email'),\n )\n const [identifier, setIdentifier] = useState(defaultEmail)\n const [code, setCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSending, setIsSending] = useState(false)\n const [isVerifying, setIsVerifying] = useState(false)\n\n const channelSegments = allowedChannels.map((ch) => ({\n value: ch,\n label: ch === 'email' ? t('channelEmail') : t('channelSms'),\n }))\n\n const handleSendCode = useCallback(async () => {\n if (!identifier.trim()) return\n\n setError(null)\n setIsSending(true)\n\n try {\n await client.sendPasswordlessCode(channel, identifier.trim())\n setStep('sent')\n\n // Auto-advance to OTP entry after a brief confirmation display\n setTimeout(() => setStep('verify'), 1500)\n } catch {\n setError(t('passwordlessSendError'))\n } finally {\n setIsSending(false)\n }\n }, [client, channel, identifier, t])\n\n const handleVerifyCode = useCallback(\n async (completedCode: string) => {\n setError(null)\n setIsVerifying(true)\n\n try {\n await client.verifyPasswordlessCode(channel, identifier.trim(), completedCode)\n onSuccess?.()\n } catch {\n setError(t('passwordlessVerifyError'))\n setCode('')\n } finally {\n setIsVerifying(false)\n }\n },\n [client, channel, identifier, onSuccess, t],\n )\n\n // Step 1: Channel + identifier input\n const inputContent = (\n <div className=\"space-y-6\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-slate-900 dark:text-white\">\n {t('passwordlessTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">\n {t('passwordlessSubtitle')}\n </p>\n </div>\n\n {/* Channel selector */}\n {allowedChannels.length > 1 && (\n <div className=\"flex justify-center\">\n <SegmentedControl\n segments={channelSegments}\n value={channel}\n onChange={(value: string) => {\n setChannel(value as PasswordlessChannel)\n setIdentifier(value === 'email' ? defaultEmail : '')\n setError(null)\n }}\n size=\"sm\"\n />\n </div>\n )}\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* Identifier input */}\n <Input\n label={channel === 'email' ? t('emailLabel') : t('phoneLabel')}\n type={channel === 'email' ? 'email' : 'tel'}\n value={identifier}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setIdentifier(event.target.value)}\n placeholder={channel === 'email' ? t('emailPlaceholder') : t('phonePlaceholder')}\n icon={\n channel === 'email'\n ? <EnvelopeIcon className=\"h-5 w-5\" />\n : <DevicePhoneMobileIcon className=\"h-5 w-5\" />\n }\n autoComplete={channel === 'email' ? 'email' : 'tel'}\n disabled={isSending}\n autoFocus\n />\n\n <Button\n type=\"button\"\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleSendCode}\n disabled={isSending || !identifier.trim()}\n loading={isSending}\n >\n {t('passwordlessSendButton')}\n </Button>\n\n {/* Back link */}\n {onBack && (\n <Text className=\"text-center\">\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); onBack() }}>\n {t('backToSignIn')}\n </TextLink>\n </Text>\n )}\n </div>\n )\n\n // Step 2: Sent confirmation (brief auto-advancing state)\n const sentContent = (\n <div className=\"space-y-6\">\n <EmptyState\n variant=\"minimal\"\n icon={PaperAirplaneIcon}\n message={t('passwordlessCodeSentTitle')}\n description={\n channel === 'email'\n ? t('passwordlessCodeSentEmailDescription', { email: identifier })\n : t('passwordlessCodeSentSmsDescription', { phone: identifier })\n }\n />\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n </div>\n )\n\n // Step 3: OTP entry\n const verifyContent = (\n <div className=\"space-y-6\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-xl font-bold text-slate-900 dark:text-white\">\n {t('passwordlessEnterCodeTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">\n {channel === 'email'\n ? t('passwordlessEnterCodeEmailSubtitle', { email: identifier })\n : t('passwordlessEnterCodeSmsSubtitle', { phone: identifier })}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red text-center\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* OTP input */}\n <OtpInput\n value={code}\n onChange={setCode}\n onComplete={handleVerifyCode}\n error={error ?? undefined}\n disabled={isVerifying}\n autoFocus\n />\n\n {/* Verifying spinner */}\n {isVerifying && (\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n )}\n\n {/* Resend / back */}\n <div className=\"flex items-center justify-between\">\n <Text>\n <TextLink\n href=\"#\"\n onClick={(event) => {\n event.preventDefault()\n setStep('input')\n setCode('')\n setError(null)\n }}\n >\n {t('passwordlessChangeIdentifier')}\n </TextLink>\n </Text>\n <Button\n type=\"button\"\n plain\n size=\"sm\"\n onClick={() => {\n setCode('')\n setError(null)\n handleSendCode()\n }}\n disabled={isSending}\n >\n {t('resendEmailButton')}\n </Button>\n </div>\n </div>\n )\n\n const activeContent = step === 'input'\n ? inputContent\n : step === 'sent'\n ? sentContent\n : verifyContent\n\n if (embedded) return activeContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {activeContent}\n </Card>\n )\n}\n","import { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n CardContent,\n Avatar,\n Badge,\n ListCard,\n ListCardItem,\n FormCheckbox,\n Button,\n triggerHaptic,\n} from '@ui/index'\nimport { AuthLayout } from './components'\nimport { ShieldExclamationIcon } from '@heroicons/react/24/outline'\n\nexport type { ConsentScreenProps } from '@datatechsolutions/shared-domain'\nimport type { ConsentScreenProps } from '@datatechsolutions/shared-domain'\n\nexport function ConsentScreen({\n application,\n scopes,\n grantedScopes,\n onApprove,\n onDeny,\n isSubmitting = false,\n}: ConsentScreenProps) {\n const t = useTranslations('windsock')\n\n const [checkedScopes, setCheckedScopes] = useState<Set<string>>(\n () => new Set(grantedScopes && grantedScopes.length > 0 ? grantedScopes : scopes.map((s) => s.id)),\n )\n\n const handleScopeToggle = useCallback((scopeId: string, checked: boolean) => {\n setCheckedScopes((previous) => {\n const next = new Set(previous)\n if (checked) {\n next.add(scopeId)\n } else {\n next.delete(scopeId)\n }\n return next\n })\n }, [])\n\n const handleApprove = useCallback(() => {\n triggerHaptic('light')\n onApprove(Array.from(checkedScopes))\n }, [checkedScopes, onApprove])\n\n const handleDeny = useCallback(() => {\n triggerHaptic('light')\n onDeny()\n }, [onDeny])\n\n const appInitials = application.name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n\n return (\n <AuthLayout>\n <Card variant=\"glass\" className=\"mx-auto w-full max-w-md\">\n <CardContent className=\"space-y-6 p-6 sm:p-8\">\n {/* App identity */}\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <Avatar\n src={application.logoUrl}\n initials={appInitials}\n alt={application.name}\n />\n\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-center gap-2\">\n <span className=\"text-lg font-semibold text-slate-900 dark:text-white\">\n {application.name}\n </span>\n {application.verified ? (\n <Badge color=\"green\">\n {t('consent.verified')}\n </Badge>\n ) : (\n <Badge color=\"amber\">\n {t('consent.unverified')}\n </Badge>\n )}\n </div>\n\n {application.url && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{application.url}</p>\n )}\n\n <p className=\"text-sm text-slate-600 dark:text-slate-300\">\n {t('consent.wantsAccess')}\n </p>\n </div>\n </div>\n\n {/* Unverified warning */}\n {!application.verified && (\n <div className=\"flex items-start gap-3 rounded-xl border border-amber-500/30 bg-amber-500/10 p-3\">\n <ShieldExclamationIcon className=\"mt-0.5 h-5 w-5 shrink-0 text-amber-600 dark:text-amber-400\" />\n <p className=\"text-sm text-amber-700 dark:text-amber-300\">\n {t('consent.unverifiedWarning', { name: application.name })}\n </p>\n </div>\n )}\n\n {/* Scopes */}\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {t('consent.permissionsLabel')}\n </p>\n <ListCard>\n {scopes.map((scope) => (\n <ListCardItem\n key={scope.id}\n leading={\n <FormCheckbox\n checked={checkedScopes.has(scope.id)}\n onChange={(checked: boolean) => handleScopeToggle(scope.id, checked)}\n label=\"\"\n />\n }\n onClick={() => handleScopeToggle(scope.id, !checkedScopes.has(scope.id))}\n >\n <div>\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">\n {scope.name}\n </p>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{scope.description}</p>\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n </div>\n\n {/* Actions */}\n <div className=\"flex flex-col gap-2 sm:flex-row-reverse\">\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleApprove}\n loading={isSubmitting}\n disabled={isSubmitting || checkedScopes.size === 0}\n >\n {t('consent.approveButton')}\n </Button>\n <Button\n outline\n fullWidth\n onClick={handleDeny}\n disabled={isSubmitting}\n >\n {t('consent.denyButton')}\n </Button>\n </div>\n\n <p className=\"text-center text-xs text-slate-400 dark:text-slate-500\">\n {t('consent.footerNote')}\n </p>\n </CardContent>\n </Card>\n </AuthLayout>\n )\n}\n","import { useTranslations } from '@ui/lib/i18n-context'\nimport { Avatar, Badge, ListCard, ListCardItem, InlineSpinner } from '@ui/index'\nimport { ChevronRightIcon } from '@heroicons/react/20/solid'\n\nexport type { SsoConnector, SsoConnectorListProps } from '@datatechsolutions/shared-domain'\nimport type { SsoConnector, SsoConnectorListProps } from '@datatechsolutions/shared-domain'\n\nexport function SsoConnectorList({ connectors, onSelect, loading = false }: SsoConnectorListProps) {\n const t = useTranslations('windsock')\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-8 text-sm text-slate-500 dark:text-slate-400\">\n <InlineSpinner />\n <span>{t('sso.connectorList.loading')}</span>\n </div>\n )\n }\n\n if (connectors.length === 0) {\n return (\n <p className=\"py-6 text-center text-sm text-slate-500 dark:text-slate-400\">\n {t('sso.connectorList.empty')}\n </p>\n )\n }\n\n return (\n <ListCard>\n {connectors.map((connector) => {\n const initials = connector.name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n\n return (\n <ListCardItem\n key={connector.id}\n leading={\n <Avatar\n src={connector.logoUrl}\n initials={initials}\n alt={connector.name}\n />\n }\n trailing={\n <div className=\"flex items-center gap-2\">\n <Badge color=\"zinc\">\n {connector.type === 'saml' ? t('sso.connectorList.typeSaml') : t('sso.connectorList.typeOidc')}\n </Badge>\n <ChevronRightIcon className=\"h-4 w-4 text-slate-400\" />\n </div>\n }\n onClick={() => onSelect(connector)}\n >\n <div>\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">\n {connector.name}\n </p>\n {connector.domain && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{connector.domain}</p>\n )}\n </div>\n </ListCardItem>\n )\n })}\n </ListCard>\n )\n}\n","import React, { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { BaseForm, Input, Button, Card, CardContent, Text, TextLink } from '@ui/index'\nimport { BuildingOffice2Icon } from '@heroicons/react/24/outline'\nimport { SsoConnectorList } from './sso-connector-list'\n\nexport type { SsoConnector, SsoEmailFormProps, SsoEmailFormPhase } from '@datatechsolutions/shared-domain'\nimport type { SsoConnector, SsoEmailFormProps, SsoEmailFormPhase as Phase } from '@datatechsolutions/shared-domain'\n\nexport function SsoEmailForm({\n onEmailSubmit,\n onConnectorSelect,\n defaultEmail = '',\n embedded = false,\n}: SsoEmailFormProps) {\n const t = useTranslations('windsock')\n\n const [phase, setPhase] = useState<Phase>('email')\n const [email, setEmail] = useState(defaultEmail)\n const [emailError, setEmailError] = useState<string | null>(null)\n const [connectors, setConnectors] = useState<SsoConnector[]>([])\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [loadingConnectors, setLoadingConnectors] = useState(false)\n\n const validateEmail = useCallback(\n (value: string): boolean => {\n if (!value.trim()) {\n setEmailError(t('sso.emailForm.errorEmailRequired'))\n return false\n }\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n setEmailError(t('sso.emailForm.errorEmailInvalid'))\n return false\n }\n setEmailError(null)\n return true\n },\n [t],\n )\n\n const handleEmailSubmit = useCallback(async () => {\n if (!validateEmail(email)) return\n\n setIsSubmitting(true)\n setLoadingConnectors(true)\n\n try {\n const discovered = await onEmailSubmit(email)\n setConnectors(discovered)\n setPhase('connectors')\n } catch {\n setEmailError(t('sso.emailForm.errorDiscoveryFailed'))\n } finally {\n setIsSubmitting(false)\n setLoadingConnectors(false)\n }\n }, [email, onEmailSubmit, validateEmail, t])\n\n const handleBackToEmail = useCallback(() => {\n setPhase('email')\n setConnectors([])\n setEmailError(null)\n }, [])\n\n if (phase === 'connectors') {\n const connectorsContent = (\n <div className=\"space-y-4\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">\n {t('sso.emailForm.connectorsTitle')}\n </p>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {t('sso.emailForm.connectorsSubtitle', { email })}\n </p>\n </div>\n\n <SsoConnectorList\n connectors={connectors}\n onSelect={onConnectorSelect}\n loading={loadingConnectors}\n />\n\n <Text className=\"text-center\">\n <TextLink href=\"#\" onClick={(event) => { event.preventDefault(); handleBackToEmail() }}>\n {t('sso.emailForm.backButton')}\n </TextLink>\n </Text>\n </div>\n )\n\n if (embedded) return connectorsContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto w-full max-w-md\">\n <CardContent className=\"p-6 sm:p-8\">\n {connectorsContent}\n </CardContent>\n </Card>\n )\n }\n\n const emailContent = (\n <div className=\"space-y-4\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">\n {t('sso.emailForm.title')}\n </p>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {t('sso.emailForm.subtitle')}\n </p>\n </div>\n\n <BaseForm onSubmit={handleEmailSubmit} submitLabel={t('sso.emailForm.continueButton')} showFooter={false}>\n <Input\n type=\"email\"\n label={t('sso.emailForm.emailLabel')}\n placeholder={t('sso.emailForm.emailPlaceholder')}\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n setEmail(event.target.value)\n if (emailError) setEmailError(null)\n }}\n error={emailError ?? undefined}\n icon={<BuildingOffice2Icon className=\"h-5 w-5\" />}\n disabled={isSubmitting}\n autoFocus\n autoComplete=\"email\"\n />\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n loading={isSubmitting}\n disabled={isSubmitting}\n >\n {t('sso.emailForm.continueButton')}\n </Button>\n </BaseForm>\n </div>\n )\n\n if (embedded) return emailContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto w-full max-w-md\">\n <CardContent className=\"p-6 sm:p-8\">\n {emailContent}\n </CardContent>\n </Card>\n )\n}\n","import { useState, useCallback, Fragment, type ReactNode } from 'react'\nimport { Menu, Transition } from '@headlessui/react'\nimport { Avatar, DynamicIslandConfirm, triggerHaptic } from '@ui/index'\nimport { useAuth } from '../../_auth'\nimport { ChevronUpDownIcon, ArrowRightStartOnRectangleIcon } from '@heroicons/react/20/solid'\n\nexport type { UserButtonProps } from '@datatechsolutions/shared-domain'\nimport type { UserButtonProps } from '@datatechsolutions/shared-domain'\n\nconst DEFAULT_LABELS = {\n menuLabel: 'User menu',\n userAlt: 'User',\n signOut: 'Sign out',\n signOutConfirmTitle: 'Sign out?',\n signOutConfirmButton: 'Sign out',\n signOutCancelButton: 'Cancel',\n} as const\n\nexport function UserButton({ menuItems = [], onSignOut, avatarUrl, labels }: UserButtonProps) {\n const resolvedLabels = { ...DEFAULT_LABELS, ...labels }\n const { user, logout, status } = useAuth()\n\n const [confirmSignOut, setConfirmSignOut] = useState(false)\n\n if (status !== 'authenticated') {\n return null\n }\n\n const userInitials = user?.name\n ? user.name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n : user?.email?.slice(0, 2).toUpperCase() ?? '??'\n\n const resolvedAvatarUrl = avatarUrl ?? user?.image\n\n const handleSignOutRequest = () => {\n triggerHaptic('light')\n setConfirmSignOut(true)\n }\n\n const handleSignOutConfirm = async () => {\n triggerHaptic('success')\n setConfirmSignOut(false)\n try {\n // Pass '/' as redirect — logout() handles the full end-session flow\n // including server-side session termination and redirect.\n // onSignOut is called before the redirect for any cleanup the consumer needs.\n onSignOut?.()\n await logout('/')\n } catch {\n // logout errors are non-critical; session will expire naturally\n }\n }\n\n const handleSignOutCancel = () => {\n triggerHaptic('light')\n setConfirmSignOut(false)\n }\n\n return (\n <>\n <Menu as=\"div\" className=\"relative inline-block text-left\">\n <Menu.Button\n className=\"flex items-center gap-2 rounded-full p-1 transition-opacity hover:opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500\"\n aria-label={resolvedLabels.menuLabel}\n >\n <Avatar\n src={resolvedAvatarUrl}\n initials={userInitials}\n alt={user?.name ?? user?.email ?? resolvedLabels.userAlt}\n />\n <ChevronUpDownIcon className=\"h-4 w-4 text-slate-500 dark:text-slate-400\" />\n </Menu.Button>\n\n <Transition\n as={Fragment}\n enter=\"transition ease-out duration-100\"\n enterFrom=\"transform opacity-0 scale-95\"\n enterTo=\"transform opacity-100 scale-100\"\n leave=\"transition ease-in duration-75\"\n leaveFrom=\"transform opacity-100 scale-100\"\n leaveTo=\"transform opacity-0 scale-95\"\n >\n <Menu.Items className=\"liquid-surface absolute right-0 z-50 mt-2 w-60 origin-top-right rounded-2xl shadow-lg ring-1 ring-black/5 focus:outline-none dark:ring-white/10\">\n {/* User identity header */}\n <div className=\"liquid-divider flex items-center gap-3 px-4 py-3\">\n <Avatar\n src={resolvedAvatarUrl}\n initials={userInitials}\n alt={user?.name ?? user?.email ?? resolvedLabels.userAlt}\n />\n <div className=\"min-w-0 flex-1\">\n {user?.name && (\n <p className=\"truncate text-sm font-medium text-slate-900 dark:text-white\">\n {user.name}\n </p>\n )}\n {user?.email && (\n <p className=\"truncate text-xs text-slate-500 dark:text-slate-400\">{user.email}</p>\n )}\n </div>\n </div>\n\n {/* Custom menu items */}\n {menuItems.length > 0 && (\n <>\n <div className=\"px-1 py-1\">\n {menuItems.map((item, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <button /* no-raw-button-ok: required child of @headlessui/react Menu.Item — the Headless Menu API expects a focusable button child it can wire keyboard nav + active state to; <Button> would double-wrap */\n type=\"button\"\n onClick={() => {\n triggerHaptic('light')\n item.onClick()\n }}\n className={`flex w-full items-center gap-2 rounded-xl px-3 py-2 text-sm transition-colors ${\n active\n ? 'bg-slate-100 text-slate-900 dark:bg-white/10 dark:text-white'\n : 'text-slate-700 dark:text-slate-300'\n }`}\n >\n {item.icon ? (\n <span className=\"h-4 w-4 shrink-0 text-slate-400\">{item.icon as ReactNode}</span>\n ) : null}\n {item.label}\n </button>\n )}\n </Menu.Item>\n ))}\n </div>\n <div className=\"border-t border-slate-200/60 dark:border-white/10\" />\n </>\n )}\n\n {/* Sign out */}\n <div className=\"border-t border-slate-200/60 px-1 py-1 dark:border-white/10\">\n <Menu.Item>\n {({ active }) => (\n <button /* no-raw-button-ok: UserButton primitive — avatar trigger and dropdown menu items */\n type=\"button\"\n onClick={handleSignOutRequest}\n className={`flex w-full items-center gap-2 rounded-xl px-3 py-2 text-sm transition-colors ${\n active\n ? 'bg-red-50 text-red-700 dark:bg-red-500/10 dark:text-red-400'\n : 'text-red-600 dark:text-red-400'\n }`}\n >\n <ArrowRightStartOnRectangleIcon className=\"h-4 w-4 shrink-0\" />\n {resolvedLabels.signOut}\n </button>\n )}\n </Menu.Item>\n </div>\n </Menu.Items>\n </Transition>\n </Menu>\n\n {/* Sign-out confirmation */}\n <DynamicIslandConfirm\n open={confirmSignOut}\n onClose={handleSignOutCancel}\n onConfirm={handleSignOutConfirm}\n title={resolvedLabels.signOutConfirmTitle}\n confirmLabel={resolvedLabels.signOutConfirmButton}\n cancelLabel={resolvedLabels.signOutCancelButton}\n />\n </>\n )\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useAuth, usePlatformPreferences, useNotifications, PlatformShell, LOCALE_FLAGS } from './chunk-
|
|
2
|
+
import { useAuth, usePlatformPreferences, useNotifications, PlatformShell, LOCALE_FLAGS } from './chunk-QCGSE24W.mjs';
|
|
3
3
|
import { useTranslations, useLocale } from './chunk-ZEFNBGYI.mjs';
|
|
4
4
|
import { usePathname, useRouter } from './chunk-QWG2FMUN.mjs';
|
|
5
5
|
import { createContext, useMemo, useContext, useCallback } from 'react';
|
|
@@ -125,5 +125,5 @@ function PlatformAppShell({
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
export { PlatformAppShell, PlatformStateProvider, usePlatformState };
|
|
128
|
-
//# sourceMappingURL=chunk-
|
|
129
|
-
//# sourceMappingURL=chunk-
|
|
128
|
+
//# sourceMappingURL=chunk-5QRU3KKV.mjs.map
|
|
129
|
+
//# sourceMappingURL=chunk-5QRU3KKV.mjs.map
|