@datatechsolutions/ui 3.6.1 → 3.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/astrlabe/graph-node.js +8 -5
  2. package/dist/astrlabe/graph-node.mjs +4 -1
  3. package/dist/astrlabe/index.js +115 -114
  4. package/dist/astrlabe/index.mjs +7 -6
  5. package/dist/astrlabe/workflow-canvas.js +7 -6
  6. package/dist/astrlabe/workflow-canvas.mjs +6 -5
  7. package/dist/{chunk-3Z66NXEB.mjs → chunk-2OPBUVTQ.mjs} +3 -3
  8. package/dist/{chunk-3Z66NXEB.mjs.map → chunk-2OPBUVTQ.mjs.map} +1 -1
  9. package/dist/{chunk-4JDJRGAB.mjs → chunk-34XRH2FX.mjs} +5 -4
  10. package/dist/chunk-34XRH2FX.mjs.map +1 -0
  11. package/dist/{chunk-KEWRLEYV.js → chunk-3JZGRXSG.js} +4 -4
  12. package/dist/{chunk-KEWRLEYV.js.map → chunk-3JZGRXSG.js.map} +1 -1
  13. package/dist/{chunk-JQYDJ75Q.mjs → chunk-3VYD7QL2.mjs} +3 -3
  14. package/dist/{chunk-JQYDJ75Q.mjs.map → chunk-3VYD7QL2.mjs.map} +1 -1
  15. package/dist/{chunk-MRRFDIUQ.mjs → chunk-4JRMXHPU.mjs} +5 -4
  16. package/dist/chunk-4JRMXHPU.mjs.map +1 -0
  17. package/dist/{chunk-4OFG6POC.mjs → chunk-5LCWQKGQ.mjs} +207 -1128
  18. package/dist/chunk-5LCWQKGQ.mjs.map +1 -0
  19. package/dist/{chunk-W5YCZOXO.js → chunk-7YK4WXHO.js} +79 -78
  20. package/dist/chunk-7YK4WXHO.js.map +1 -0
  21. package/dist/{chunk-YOJIPZ72.js → chunk-BBLBSDPN.js} +9 -9
  22. package/dist/{chunk-YOJIPZ72.js.map → chunk-BBLBSDPN.js.map} +1 -1
  23. package/dist/chunk-BHOT22QL.js +998 -0
  24. package/dist/chunk-BHOT22QL.js.map +1 -0
  25. package/dist/{chunk-MQNXKBFP.mjs → chunk-C4AJWDFB.mjs} +7 -6
  26. package/dist/chunk-C4AJWDFB.mjs.map +1 -0
  27. package/dist/{chunk-UOABOFKO.mjs → chunk-CBFK4W4C.mjs} +3 -3
  28. package/dist/{chunk-UOABOFKO.mjs.map → chunk-CBFK4W4C.mjs.map} +1 -1
  29. package/dist/{chunk-P5F257N3.js → chunk-CVZXZK2X.js} +35 -34
  30. package/dist/chunk-CVZXZK2X.js.map +1 -0
  31. package/dist/{chunk-IHHGT3LP.mjs → chunk-CYAAL3BY.mjs} +6 -5
  32. package/dist/chunk-CYAAL3BY.mjs.map +1 -0
  33. package/dist/{chunk-LVK7VXW7.js → chunk-DMPBNWJB.js} +37 -36
  34. package/dist/chunk-DMPBNWJB.js.map +1 -0
  35. package/dist/{chunk-ESLKQJQS.mjs → chunk-DXLATMGD.mjs} +6 -5
  36. package/dist/chunk-DXLATMGD.mjs.map +1 -0
  37. package/dist/{chunk-P4YYEM4B.js → chunk-EZQ2D47U.js} +7 -10
  38. package/dist/chunk-EZQ2D47U.js.map +1 -0
  39. package/dist/{chunk-6ZMTJSQF.js → chunk-FUHNEP3Y.js} +164 -163
  40. package/dist/chunk-FUHNEP3Y.js.map +1 -0
  41. package/dist/{chunk-YTE6WCBX.js → chunk-JHN2OUWG.js} +64 -63
  42. package/dist/chunk-JHN2OUWG.js.map +1 -0
  43. package/dist/{chunk-AMYQSPQC.js → chunk-JLECJI7S.js} +18 -17
  44. package/dist/chunk-JLECJI7S.js.map +1 -0
  45. package/dist/{chunk-DRORQGN2.js → chunk-KMNWPC64.js} +40 -39
  46. package/dist/chunk-KMNWPC64.js.map +1 -0
  47. package/dist/{chunk-VUAGVZJM.mjs → chunk-NJ6HH4QP.mjs} +6 -5
  48. package/dist/chunk-NJ6HH4QP.mjs.map +1 -0
  49. package/dist/{chunk-OZNTQROP.mjs → chunk-PLTLRL2V.mjs} +7 -10
  50. package/dist/chunk-PLTLRL2V.mjs.map +1 -0
  51. package/dist/{chunk-5ZAZ2C7A.mjs → chunk-PMMP76MV.mjs} +7 -6
  52. package/dist/chunk-PMMP76MV.mjs.map +1 -0
  53. package/dist/{chunk-NJZIE4EH.js → chunk-QF6WL7XU.js} +6 -5
  54. package/dist/chunk-QF6WL7XU.js.map +1 -0
  55. package/dist/{chunk-QRNFTG6A.js → chunk-QGLGQXJE.js} +4 -4
  56. package/dist/{chunk-QRNFTG6A.js.map → chunk-QGLGQXJE.js.map} +1 -1
  57. package/dist/{chunk-GCYYGSHU.js → chunk-R4EKPXX3.js} +564 -1525
  58. package/dist/chunk-R4EKPXX3.js.map +1 -0
  59. package/dist/{chunk-SQZGQOKU.js → chunk-RWYG7QHP.js} +119 -132
  60. package/dist/chunk-RWYG7QHP.js.map +1 -0
  61. package/dist/{chunk-WBEZATIB.js → chunk-RZ3NDH5S.js} +13 -13
  62. package/dist/{chunk-WBEZATIB.js.map → chunk-RZ3NDH5S.js.map} +1 -1
  63. package/dist/{chunk-HGWVJ3VB.mjs → chunk-SJVKID3E.mjs} +4 -3
  64. package/dist/chunk-SJVKID3E.mjs.map +1 -0
  65. package/dist/{chunk-7LILNZMR.mjs → chunk-TJEZL72T.mjs} +4 -3
  66. package/dist/chunk-TJEZL72T.mjs.map +1 -0
  67. package/dist/{chunk-MUOTTGCX.js → chunk-UDYEUTJC.js} +31 -30
  68. package/dist/chunk-UDYEUTJC.js.map +1 -0
  69. package/dist/{chunk-UGJZ3M4Q.js → chunk-VDLMWOQM.js} +55 -54
  70. package/dist/chunk-VDLMWOQM.js.map +1 -0
  71. package/dist/{chunk-KDFBN2L2.mjs → chunk-VZIUQE7B.mjs} +24 -37
  72. package/dist/chunk-VZIUQE7B.mjs.map +1 -0
  73. package/dist/chunk-WR55H7DH.mjs +934 -0
  74. package/dist/chunk-WR55H7DH.mjs.map +1 -0
  75. package/dist/{chunk-ZYVDDSAC.mjs → chunk-YRXDETBK.mjs} +6 -6
  76. package/dist/{chunk-ZYVDDSAC.mjs.map → chunk-YRXDETBK.mjs.map} +1 -1
  77. package/dist/{chunk-VDLAZR7S.mjs → chunk-ZYRL3WER.mjs} +5 -4
  78. package/dist/chunk-ZYRL3WER.mjs.map +1 -0
  79. package/dist/index.js +826 -825
  80. package/dist/index.mjs +4 -3
  81. package/dist/platform/admin/index.js +13 -12
  82. package/dist/platform/admin/index.mjs +7 -6
  83. package/dist/platform/agents-workspace.js +10 -9
  84. package/dist/platform/agents-workspace.mjs +9 -8
  85. package/dist/platform/app-shell.js +6 -5
  86. package/dist/platform/app-shell.mjs +5 -4
  87. package/dist/platform/auth/index.js +30 -29
  88. package/dist/platform/auth/index.mjs +7 -6
  89. package/dist/platform/billing/index.js +6 -5
  90. package/dist/platform/billing/index.mjs +5 -4
  91. package/dist/platform/impersonation/index.js +6 -5
  92. package/dist/platform/impersonation/index.mjs +5 -4
  93. package/dist/platform/index.js +87 -93
  94. package/dist/platform/index.js.map +1 -1
  95. package/dist/platform/index.mjs +23 -29
  96. package/dist/platform/index.mjs.map +1 -1
  97. package/dist/platform/pages/index.js +210 -209
  98. package/dist/platform/pages/index.js.map +1 -1
  99. package/dist/platform/pages/index.mjs +11 -10
  100. package/dist/platform/pages/index.mjs.map +1 -1
  101. package/dist/platform/settings/index.js +10 -9
  102. package/dist/platform/settings/index.mjs +9 -8
  103. package/dist/platform/workflow-canvas-shell.js +8 -7
  104. package/dist/platform/workflow-canvas-shell.mjs +7 -6
  105. package/package.json +1 -1
  106. package/dist/chunk-4JDJRGAB.mjs.map +0 -1
  107. package/dist/chunk-4OFG6POC.mjs.map +0 -1
  108. package/dist/chunk-5ZAZ2C7A.mjs.map +0 -1
  109. package/dist/chunk-6ZMTJSQF.js.map +0 -1
  110. package/dist/chunk-7LILNZMR.mjs.map +0 -1
  111. package/dist/chunk-AMYQSPQC.js.map +0 -1
  112. package/dist/chunk-DRORQGN2.js.map +0 -1
  113. package/dist/chunk-ESLKQJQS.mjs.map +0 -1
  114. package/dist/chunk-GCYYGSHU.js.map +0 -1
  115. package/dist/chunk-HGWVJ3VB.mjs.map +0 -1
  116. package/dist/chunk-IHHGT3LP.mjs.map +0 -1
  117. package/dist/chunk-KDFBN2L2.mjs.map +0 -1
  118. package/dist/chunk-LVK7VXW7.js.map +0 -1
  119. package/dist/chunk-MQNXKBFP.mjs.map +0 -1
  120. package/dist/chunk-MRRFDIUQ.mjs.map +0 -1
  121. package/dist/chunk-MUOTTGCX.js.map +0 -1
  122. package/dist/chunk-NJZIE4EH.js.map +0 -1
  123. package/dist/chunk-OZNTQROP.mjs.map +0 -1
  124. package/dist/chunk-P4YYEM4B.js.map +0 -1
  125. package/dist/chunk-P5F257N3.js.map +0 -1
  126. package/dist/chunk-SQZGQOKU.js.map +0 -1
  127. package/dist/chunk-UGJZ3M4Q.js.map +0 -1
  128. package/dist/chunk-VDLAZR7S.mjs.map +0 -1
  129. package/dist/chunk-VUAGVZJM.mjs.map +0 -1
  130. package/dist/chunk-W5YCZOXO.js.map +0 -1
  131. package/dist/chunk-YTE6WCBX.js.map +0 -1
@@ -1 +0,0 @@
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","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-W5YCZOXO.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 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 <div className=\"text-center\">\n <button\n type=\"button\"\n onClick={() => {\n triggerHaptic('light')\n onCancel()\n }}\n className=\"text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors\"\n >\n {t('mfa.challenge.useDifferentAccount')}\n </button>\n </div>\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} 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-gray-900 dark:text-white\">\n {t('signInTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-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\n type=\"button\"\n onClick={onForgotPassword}\n className=\"text-sm font-medium text-ios-blue hover:text-blue-700 dark:hover:text-blue-400 transition-colors\"\n >\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-gray-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-gray-400 dark:bg-gray-900/80 dark:text-gray-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 <p className=\"text-center text-sm text-gray-500 dark:text-gray-400\">\n {t('noAccount')}{' '}\n <button\n type=\"button\"\n onClick={onSignUp}\n className=\"font-medium text-ios-blue hover:text-blue-700 dark:hover:text-blue-400 transition-colors\"\n >\n {t('signUpLink')}\n </button>\n </p>\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} 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-gray-900 dark:text-white\">\n {t('signUpTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-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-gray-200 dark:border-white/10\" />\n </div>\n <div className=\"relative flex justify-center text-xs\">\n <span className=\"bg-white dark:bg-gray-900 px-3 text-gray-400 dark:text-gray-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 <p className=\"text-center text-sm text-gray-500 dark:text-gray-400\">\n {t('alreadyHaveAccount')}{' '}\n <button\n type=\"button\"\n onClick={onSignIn}\n className=\"font-medium text-ios-blue hover:text-blue-700 dark:hover:text-blue-400 transition-colors\"\n >\n {t('signInLink')}\n </button>\n </p>\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} 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 <div className=\"text-center\">\n <button\n type=\"button\"\n onClick={onBack}\n className=\"text-sm font-medium text-ios-blue hover:text-blue-700 dark:hover:text-blue-400 transition-colors\"\n >\n {t('backToSignIn')}\n </button>\n </div>\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 <div className=\"text-center\">\n <button\n type=\"button\"\n onClick={onBack}\n className=\"text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors\"\n >\n {t('backToSignIn')}\n </button>\n </div>\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} 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-gray-900 dark:text-white\">\n {t('passwordlessTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-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 <div className=\"text-center\">\n <button\n type=\"button\"\n onClick={onBack}\n className=\"text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors\"\n >\n {t('backToSignIn')}\n </button>\n </div>\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-gray-900 dark:text-white\">\n {t('passwordlessEnterCodeTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-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 text-sm\">\n <button\n type=\"button\"\n onClick={() => {\n setStep('input')\n setCode('')\n setError(null)\n }}\n className=\"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors\"\n >\n {t('passwordlessChangeIdentifier')}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setCode('')\n setError(null)\n handleSendCode()\n }}\n disabled={isSending}\n className=\"font-medium text-ios-blue hover:text-blue-700 dark:hover:text-blue-400 transition-colors disabled:opacity-50\"\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-gray-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-gray-500 dark:text-gray-400\">{application.url}</p>\n )}\n\n <p className=\"text-sm text-gray-600 dark:text-gray-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-gray-500 dark:text-gray-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-gray-900 dark:text-white\">\n {scope.name}\n </p>\n <p className=\"text-xs text-gray-500 dark:text-gray-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-gray-400 dark:text-gray-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-gray-500 dark:text-gray-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-gray-500 dark:text-gray-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-gray-400\" />\n </div>\n }\n onClick={() => onSelect(connector)}\n >\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {connector.name}\n </p>\n {connector.domain && (\n <p className=\"text-xs text-gray-500 dark:text-gray-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 } 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-gray-900 dark:text-white\">\n {t('sso.emailForm.connectorsTitle')}\n </p>\n <p className=\"text-xs text-gray-500 dark:text-gray-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 <div className=\"text-center\">\n <button\n type=\"button\"\n onClick={handleBackToEmail}\n className=\"text-sm text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200\"\n >\n {t('sso.emailForm.backButton')}\n </button>\n </div>\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-gray-900 dark:text-white\">\n {t('sso.emailForm.title')}\n </p>\n <p className=\"text-xs text-gray-500 dark:text-gray-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-gray-500 dark:text-gray-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=\"flex items-center gap-3 border-b border-gray-200/60 px-4 py-3 dark:border-white/10\">\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-gray-900 dark:text-white\">\n {user.name}\n </p>\n )}\n {user?.email && (\n <p className=\"truncate text-xs text-gray-500 dark:text-gray-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\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-gray-100 text-gray-900 dark:bg-white/10 dark:text-white'\n : 'text-gray-700 dark:text-gray-300'\n }`}\n >\n {item.icon ? (\n <span className=\"h-4 w-4 shrink-0 text-gray-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-gray-200/60 dark:border-white/10\" />\n </>\n )}\n\n {/* Sign out */}\n <div className=\"border-t border-gray-200/60 px-1 py-1 dark:border-white/10\">\n <Menu.Item>\n {({ active }) => (\n <button\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 +0,0 @@
1
- {"version":3,"sources":["../src/platform/auth/mfa-setup.tsx","../src/platform/auth/mfa-manage.tsx","../src/platform/auth/user-profile.tsx"],"names":["useTranslations","useAuth","useState","useCallback","triggerHaptic","jsxs","StepFormPage","jsx","ShieldCheckIcon","OptionGrid","Spinner","Fragment","OtpInput","BackupCodeGrid","FormCheckbox","useFormatter","SectionCard","StatusBadge","EmptyState","ShieldExclamationIcon","ListCard","ListCardItem","Button","PlusIcon","ArrowPathIcon","Sheet","PasswordInput","useLocale","useRef","sharedI18n","UserIcon","BaseForm","Avatar","InlineSpinner","CameraIcon","Input","GlobeAltIcon","CheckCircleIcon","PasswordStrengthMeter","useEffect","ComputerDesktopIcon","Badge","LinkIcon","SegmentedControl"],"mappings":"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","file":"chunk-YTE6WCBX.js","sourcesContent":["import { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n StepFormPage,\n OptionGrid,\n FormCheckbox,\n Spinner,\n triggerHaptic,\n type FormStep,\n} from '@ui/index'\nimport { OtpInput, BackupCodeGrid } from './components'\nimport { ShieldCheckIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { MfaSetupProps } from '@datatechsolutions/shared-domain'\nimport type { MfaSetupProps } from '@datatechsolutions/shared-domain'\n\nexport function MfaSetup({\n onSuccess,\n onCancel,\n enforcement = 'optional',\n onGenerateSecret,\n onVerifySetup,\n}: MfaSetupProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const setupSteps: FormStep[] = [\n {\n id: 'method',\n title: t('mfa.setup.stepMethodTitle'),\n description: t('mfa.setup.stepMethodDescription'),\n },\n {\n id: 'scan',\n title: t('mfa.setup.stepScanTitle'),\n description: t('mfa.setup.stepScanDescription'),\n },\n {\n id: 'verify',\n title: t('mfa.setup.stepVerifyTitle'),\n description: t('mfa.setup.stepVerifyDescription'),\n },\n {\n id: 'backup',\n title: t('mfa.setup.stepBackupTitle'),\n description: t('mfa.setup.stepBackupDescription'),\n },\n ]\n\n const [currentStep, setCurrentStep] = useState(0)\n const [selectedMethod, setSelectedMethod] = useState('totp')\n const [qrCodeUri, setQrCodeUri] = useState('')\n const [secret, setSecret] = useState('')\n const [verifyCode, setVerifyCode] = useState('')\n const [verifyError, setVerifyError] = useState<string | null>(null)\n const [backupCodes, setBackupCodes] = useState<string[]>([])\n const [savedBackupCodes, setSavedBackupCodes] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n\n const handleStepChange = useCallback(\n async (step: number) => {\n // Moving from method -> scan: generate secret\n if (step === 1 && currentStep === 0) {\n setIsLoading(true)\n try {\n if (onGenerateSecret) {\n const result = await onGenerateSecret()\n setSecret(result.secret)\n setQrCodeUri(result.qrCodeUri)\n } else {\n const result = await client.generateMfaSecret()\n setSecret(result.secret)\n setQrCodeUri(result.qrCode)\n setBackupCodes(result.backupCodes)\n }\n } catch {\n // Stay on current step if generation fails\n return\n } finally {\n setIsLoading(false)\n }\n }\n triggerHaptic('light')\n setCurrentStep(step)\n },\n [currentStep, onGenerateSecret, client],\n )\n\n const handleMethodSelect = useCallback((method: string) => {\n triggerHaptic('light')\n setSelectedMethod(method)\n }, [])\n\n const handleVerifyComplete = useCallback(\n async (code: string) => {\n setVerifyError(null)\n setIsLoading(true)\n\n try {\n if (onVerifySetup) {\n const result = await onVerifySetup(code)\n if (result.success) {\n triggerHaptic('success')\n if (result.backupCodes?.length) {\n setBackupCodes(result.backupCodes)\n }\n setCurrentStep(3)\n } else {\n triggerHaptic('error')\n setVerifyError(t('mfa.setup.errorInvalidCode'))\n }\n } else {\n const result = await client.verifyMfaSetup(code)\n if (result.success) {\n triggerHaptic('success')\n setCurrentStep(3)\n } else {\n triggerHaptic('error')\n setVerifyError(t('mfa.setup.errorInvalidCode'))\n }\n }\n } catch {\n triggerHaptic('error')\n setVerifyError(t('mfa.setup.errorVerificationFailed'))\n } finally {\n setIsLoading(false)\n }\n },\n [onVerifySetup, client, t],\n )\n\n const handleSubmit = useCallback(() => {\n triggerHaptic('success')\n onSuccess?.()\n }, [onSuccess])\n\n const handleCancel = useCallback(() => {\n triggerHaptic('light')\n onCancel?.()\n }, [onCancel])\n\n const canAdvance = (() => {\n switch (currentStep) {\n case 0: return !!selectedMethod\n case 1: return !!qrCodeUri\n case 2: return false // Advance via OTP complete callback\n case 3: return savedBackupCodes\n default: return false\n }\n })()\n\n return (\n <StepFormPage\n title={t('mfa.setup.title')}\n subtitle={\n enforcement === 'required'\n ? t('mfa.setup.subtitleRequired')\n : t('mfa.setup.subtitleOptional')\n }\n label={t('mfa.setup.label')}\n icon={<ShieldCheckIcon className=\"h-5 w-5\" />}\n gradient=\"from-emerald-500 via-teal-500 to-cyan-500\"\n steps={setupSteps}\n currentStep={currentStep}\n onStepChange={handleStepChange}\n onSubmit={handleSubmit}\n onCancel={handleCancel}\n isSubmitting={isLoading}\n submitLabel={t('mfa.setup.submitLabel')}\n canAdvance={canAdvance}\n >\n {/* Step 0: Choose method */}\n {currentStep === 0 && (\n <OptionGrid\n icon={<ShieldCheckIcon className=\"h-4 w-4\" />}\n title={t('mfa.setup.methodGridTitle')}\n options={[\n {\n code: 'totp',\n flag: '\\u{1F4F1}',\n label: t('mfa.setup.methodAuthenticatorApp'),\n },\n ]}\n selected={selectedMethod}\n onSelect={handleMethodSelect}\n columns={2}\n />\n )}\n\n {/* Step 1: Scan QR code */}\n {currentStep === 1 && (\n <div className=\"space-y-4\">\n {isLoading ? (\n <div className=\"flex justify-center py-8\">\n <Spinner />\n </div>\n ) : (\n <>\n {qrCodeUri && (\n <div className=\"flex justify-center\">\n <div className=\"rounded-xl bg-white p-4\">\n <img\n src={qrCodeUri}\n alt={t('mfa.setup.qrCodeAlt')}\n className=\"h-48 w-48\"\n />\n </div>\n </div>\n )}\n\n {secret && (\n <div className=\"text-center\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400 mb-1\">\n {t('mfa.setup.manualSecretLabel')}\n </p>\n <code className=\"font-mono text-sm font-medium text-gray-900 dark:text-white tracking-widest\">\n {secret}\n </code>\n </div>\n )}\n </>\n )}\n </div>\n )}\n\n {/* Step 2: Verify code */}\n {currentStep === 2 && (\n <div className=\"space-y-4\">\n <OtpInput\n value={verifyCode}\n onChange={setVerifyCode}\n onComplete={handleVerifyComplete}\n error={verifyError ?? undefined}\n disabled={isLoading}\n autoFocus\n />\n {isLoading && (\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n )}\n </div>\n )}\n\n {/* Step 3: Save backup codes */}\n {currentStep === 3 && (\n <div className=\"space-y-4\">\n <BackupCodeGrid\n codes={backupCodes}\n revealed\n />\n <FormCheckbox\n label={t('mfa.setup.backupCodesSavedConfirm')}\n checked={savedBackupCodes}\n onChange={setSavedBackupCodes}\n />\n </div>\n )}\n </StepFormPage>\n )\n}\n","import { useState, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport { toBusinessDate } from '@datatechsolutions/shared-domain'\nimport {\n SectionCard,\n ListCard,\n ListCardItem,\n StatusBadge,\n EmptyState,\n Button,\n PasswordInput,\n Sheet,\n DynamicIslandConfirm,\n triggerHaptic,\n} from '@ui/index'\nimport { BackupCodeGrid } from './components'\nimport {\n ShieldCheckIcon,\n PlusIcon,\n ArrowPathIcon,\n} from '@heroicons/react/24/outline'\nimport { ShieldExclamationIcon } from '@heroicons/react/20/solid'\nimport { useAuth } from '../../_auth'\n\nexport type { EnrolledMethod, MfaManageProps } from '@datatechsolutions/shared-domain'\nimport type { EnrolledMethod, MfaManageProps } from '@datatechsolutions/shared-domain'\n\nexport function MfaManage({\n mfaEnabled,\n enrolledMethods = [],\n onEnroll,\n onDisable,\n onRegenerateBackupCodes,\n}: MfaManageProps) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n const { client } = useAuth()\n\n const [isBackupSheetOpen, setIsBackupSheetOpen] = useState(false)\n const [newBackupCodes, setNewBackupCodes] = useState<string[]>([])\n const [isRegenerating, setIsRegenerating] = useState(false)\n const [isConfirmDisableOpen, setIsConfirmDisableOpen] = useState(false)\n const [disablePassword, setDisablePassword] = useState('')\n const [disableError, setDisableError] = useState<string | null>(null)\n const [isDisabling, setIsDisabling] = useState(false)\n\n const handleOpenBackupSheet = useCallback(async () => {\n triggerHaptic('medium')\n setIsRegenerating(true)\n try {\n const codes = onRegenerateBackupCodes\n ? await onRegenerateBackupCodes()\n : await client.regenerateBackupCodes()\n setNewBackupCodes(codes)\n setIsBackupSheetOpen(true)\n } catch {\n // Fail silently — caller is responsible for error surfacing\n } finally {\n setIsRegenerating(false)\n }\n }, [onRegenerateBackupCodes, client])\n\n const handleCloseBackupSheet = useCallback(() => {\n triggerHaptic('light')\n setIsBackupSheetOpen(false)\n setNewBackupCodes([])\n }, [])\n\n const handleRequestDisable = useCallback(() => {\n triggerHaptic('warning')\n setDisablePassword('')\n setDisableError(null)\n setIsConfirmDisableOpen(true)\n }, [])\n\n const handleConfirmDisable = useCallback(async () => {\n if (!disablePassword.trim()) {\n setDisableError(t('mfa.manage.disablePasswordRequired'))\n triggerHaptic('error')\n return\n }\n\n setDisableError(null)\n setIsDisabling(true)\n triggerHaptic('medium')\n\n try {\n if (onDisable) {\n onDisable()\n } else {\n const result = await client.disableMfa(disablePassword)\n if (!result.success) {\n setDisableError(result.error ?? t('mfa.manage.disableError'))\n triggerHaptic('error')\n return\n }\n }\n setIsConfirmDisableOpen(false)\n triggerHaptic('success')\n } catch {\n setDisableError(t('mfa.manage.disableError'))\n triggerHaptic('error')\n } finally {\n setIsDisabling(false)\n }\n }, [disablePassword, onDisable, client, t])\n\n const handleCancelDisable = useCallback(() => {\n triggerHaptic('light')\n setIsConfirmDisableOpen(false)\n setDisablePassword('')\n setDisableError(null)\n }, [])\n\n const handleEnroll = useCallback(() => {\n triggerHaptic('light')\n onEnroll?.()\n }, [onEnroll])\n\n return (\n <>\n <SectionCard\n header={{\n icon: <ShieldCheckIcon className=\"h-5 w-5 text-white\" />,\n title: t('mfa.manage.title'),\n subtitle: t('mfa.manage.subtitle'),\n gradient: 'from-emerald-500 via-teal-500 to-cyan-500',\n rightContent: mfaEnabled ? (\n <StatusBadge status=\"active\" label={t('mfa.manage.statusEnabled')} size=\"sm\" />\n ) : (\n <StatusBadge status=\"inactive\" label={t('mfa.manage.statusDisabled')} size=\"sm\" />\n ),\n }}\n padded={false}\n >\n {!mfaEnabled ? (\n /* MFA not enabled — show empty state with enable CTA */\n <div className=\"p-4 sm:p-6\">\n <EmptyState\n message={t('mfa.manage.emptyStateMessage')}\n description={t('mfa.manage.emptyStateDescription')}\n icon={ShieldExclamationIcon}\n action={{\n label: t('mfa.manage.enableButton'),\n onClick: handleEnroll,\n }}\n variant=\"card\"\n />\n </div>\n ) : (\n /* MFA enabled — show enrolled methods list + action buttons */\n <div className=\"space-y-4 p-4 sm:p-6\">\n {enrolledMethods.length > 0 && (\n <ListCard>\n {enrolledMethods.map((method, index) => (\n <ListCardItem\n key={`${method.type}-${index}`}\n leading={\n <div className=\"h-9 w-9 rounded-xl bg-gradient-to-br from-emerald-500 to-teal-600 flex items-center justify-center shadow-sm\">\n <ShieldCheckIcon className=\"h-5 w-5 text-white\" />\n </div>\n }\n trailing={\n <StatusBadge status=\"active\" label={t('mfa.manage.methodStatusActive')} size=\"sm\" />\n }\n >\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {method.label}\n </p>\n {method.createdAt && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400 mt-0.5\">\n {t('mfa.manage.methodEnrolledAt', {\n date: format.dateTime(new Date(method.createdAt), {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }),\n })}\n </p>\n )}\n </ListCardItem>\n ))}\n </ListCard>\n )}\n\n {/* Action buttons */}\n <div className=\"flex flex-col gap-2 sm:flex-row sm:gap-3\">\n {onEnroll && (\n <Button\n color=\"ios-glass-blue\"\n onClick={handleEnroll}\n className=\"flex-1\"\n >\n <PlusIcon className=\"h-4 w-4 mr-1.5\" />\n {t('mfa.manage.addMethodButton')}\n </Button>\n )}\n\n <Button\n outline\n onClick={handleOpenBackupSheet}\n loading={isRegenerating}\n disabled={isRegenerating}\n className=\"flex-1\"\n >\n <ArrowPathIcon className=\"h-4 w-4 mr-1.5\" />\n {t('mfa.manage.regenerateBackupCodesButton')}\n </Button>\n\n <Button\n color=\"ios-glass-red\"\n onClick={handleRequestDisable}\n className=\"flex-1\"\n >\n {t('mfa.manage.disableMfaButton')}\n </Button>\n </div>\n </div>\n )}\n </SectionCard>\n\n {/* Backup codes sheet */}\n <Sheet\n open={isBackupSheetOpen}\n onClose={handleCloseBackupSheet}\n title={t('mfa.manage.backupCodesSheetTitle')}\n side=\"bottom\"\n size=\"md\"\n >\n <div className=\"space-y-4 p-4 sm:p-6\">\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('mfa.manage.backupCodesSheetDescription')}\n </p>\n <BackupCodeGrid\n codes={newBackupCodes}\n revealed\n />\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleCloseBackupSheet}\n >\n {t('mfa.manage.backupCodesDoneButton')}\n </Button>\n </div>\n </Sheet>\n\n {/* Disable MFA — requires password confirmation */}\n <Sheet\n open={isConfirmDisableOpen}\n onClose={handleCancelDisable}\n title={t('mfa.manage.confirmDisableTitle')}\n side=\"bottom\"\n size=\"md\"\n >\n <div className=\"space-y-4 p-4 sm:p-6\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-ios-red shadow-sm\">\n <ShieldExclamationIcon className=\"h-5 w-5 text-white\" />\n </div>\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('mfa.manage.confirmDisableDescription')}\n </p>\n </div>\n\n <PasswordInput\n label={t('mfa.manage.disablePasswordLabel')}\n value={disablePassword}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setDisablePassword(event.target.value)}\n placeholder={t('mfa.manage.disablePasswordPlaceholder')}\n disabled={isDisabling}\n autoFocus\n autoComplete=\"current-password\"\n />\n\n {disableError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{disableError}</p>\n )}\n\n <div className=\"flex gap-3\">\n <Button\n outline\n onClick={handleCancelDisable}\n disabled={isDisabling}\n className=\"flex-1\"\n >\n {t('mfa.manage.confirmDisableCancelLabel')}\n </Button>\n <Button\n color=\"ios-glass-red\"\n onClick={handleConfirmDisable}\n loading={isDisabling}\n disabled={isDisabling || !disablePassword.trim()}\n className=\"flex-1\"\n >\n {t('mfa.manage.confirmDisableConfirmLabel')}\n </Button>\n </div>\n </div>\n </Sheet>\n </>\n )\n}\n","import React, { useState, useEffect, useCallback, useRef } from 'react'\nimport { useTranslations, useFormatter, useLocale } from '@ui/lib/i18n-context'\nimport {\n SegmentedControl,\n SectionCard,\n BaseForm,\n Input,\n PasswordInput,\n Button,\n ListCard,\n ListCardItem,\n Avatar,\n Badge,\n InlineSpinner,\n triggerHaptic,\n} from '@ui/index'\nimport { PasswordStrengthMeter } from './components'\nimport {\n UserIcon,\n ComputerDesktopIcon,\n LinkIcon,\n CheckCircleIcon,\n GlobeAltIcon,\n CameraIcon,\n} from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\nimport { MfaManage } from './mfa-manage'\nimport { MfaSetup } from './mfa-setup'\nimport * as sharedI18n from '@datatechsolutions/shared-domain/i18n'\nimport type { LocaleCode } from '@datatechsolutions/shared-domain/i18n'\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport type { ProfileTab, UserProfileProps } from '@datatechsolutions/shared-domain'\nimport type {\n UserSession,\n LinkedAccount,\n ProfileTab,\n ProfileTabContentProps,\n UserProfileProps,\n} from '@datatechsolutions/shared-domain'\n\nconst ALL_TABS: ProfileTab[] = ['profile', 'security', 'sessions', 'linked-accounts']\n\nexport function ProfileTabContent({ onProfileUpdate }: ProfileTabContentProps) {\n const t = useTranslations('windsock')\n const currentLocale = useLocale() as LocaleCode\n const { user, client } = useAuth()\n\n const [name, setName] = useState(user?.name ?? '')\n const [avatarPreview, setAvatarPreview] = useState<string | null>(user?.image ?? null)\n const [isUploadingAvatar, setIsUploadingAvatar] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n const [selectedLocale, setSelectedLocale] = useState<LocaleCode>(currentLocale)\n const [isSaving, setIsSaving] = useState(false)\n const [saveError, setSaveError] = useState<string | null>(null)\n const [saveSuccess, setSaveSuccess] = useState(false)\n\n const handleAvatarChange = useCallback(async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0]\n if (!file) return\n\n // Validate client-side\n if (!['image/jpeg', 'image/png', 'image/webp'].includes(file.type)) {\n setSaveError(t('userProfile.profile.avatarInvalidType'))\n return\n }\n if (file.size > 5 * 1024 * 1024) {\n setSaveError(t('userProfile.profile.avatarTooLarge'))\n return\n }\n\n // Show preview immediately\n const previewUrl = URL.createObjectURL(file)\n setAvatarPreview(previewUrl)\n setSaveError(null)\n setIsUploadingAvatar(true)\n triggerHaptic('light')\n\n try {\n // Upload to S3 via presigned URL\n const uploadResult = await client.uploadFile(file, 'avatars')\n if (!uploadResult.success || !uploadResult.key) {\n throw new Error(uploadResult.error ?? 'Upload failed')\n }\n\n // Save the S3 key to user profile\n const updateResult = await client.updateProfile({ image: uploadResult.key })\n if (!updateResult.success) {\n throw new Error(updateResult.error ?? 'Profile update failed')\n }\n\n triggerHaptic('success')\n } catch (error) {\n setSaveError(error instanceof Error ? error.message : 'Upload failed')\n setAvatarPreview(user?.image ?? null)\n triggerHaptic('error')\n } finally {\n setIsUploadingAvatar(false)\n // Reset file input so same file can be re-selected\n if (fileInputRef.current) fileInputRef.current.value = ''\n }\n }, [client, user, t])\n\n const handleSave = useCallback(async () => {\n setSaveError(null)\n setSaveSuccess(false)\n setIsSaving(true)\n triggerHaptic('light')\n try {\n if (onProfileUpdate) {\n await onProfileUpdate({ name, email: user?.email ?? '', locale: selectedLocale })\n } else {\n const result = await client.updateProfile({ name, locale: selectedLocale })\n if (!result.success) {\n throw new Error(result.error)\n }\n }\n setSaveSuccess(true)\n triggerHaptic('success')\n // Persist locale to cookie and reload if changed\n if (selectedLocale !== currentLocale) {\n sharedI18n.setLocaleCookie(selectedLocale)\n window.location.reload()\n }\n } catch {\n setSaveError(t('userProfile.profile.saveError'))\n triggerHaptic('error')\n } finally {\n setIsSaving(false)\n }\n }, [name, selectedLocale, currentLocale, user, onProfileUpdate, client, t])\n\n return (\n <div className=\"space-y-6\">\n <SectionCard\n header={{\n icon: <UserIcon className=\"h-5 w-5 text-white\" />,\n title: t('userProfile.profile.title'),\n subtitle: t('userProfile.profile.subtitle'),\n gradient: 'from-blue-500 via-indigo-500 to-violet-500',\n }}\n >\n <BaseForm onSubmit={handleSave} submitLabel={t('userProfile.profile.saveButton')} showFooter={false}>\n {/* Avatar Upload */}\n <div className=\"flex flex-col items-center gap-3 pb-4\">\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n disabled={isUploadingAvatar}\n className=\"group relative\"\n >\n <Avatar\n src={avatarPreview ?? undefined}\n initials={user?.name?.slice(0, 2).toUpperCase() ?? user?.email?.slice(0, 2).toUpperCase()}\n alt={user?.name ?? 'Profile'}\n className=\"h-20 w-20 text-2xl\"\n />\n <div className=\"absolute inset-0 flex items-center justify-center rounded-full bg-black/0 transition group-hover:bg-black/40\">\n {isUploadingAvatar ? (\n <InlineSpinner />\n ) : (\n <CameraIcon className=\"h-6 w-6 text-white opacity-0 transition group-hover:opacity-100\" />\n )}\n </div>\n </button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/jpeg,image/png,image/webp\"\n onChange={handleAvatarChange}\n className=\"hidden\"\n />\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {t('userProfile.profile.avatarHint')}\n </p>\n </div>\n\n <Input\n label={t('userProfile.profile.nameLabel')}\n value={name}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setName(event.target.value)}\n disabled={isSaving}\n autoComplete=\"name\"\n />\n <Input\n label={t('userProfile.profile.emailLabel')}\n type=\"email\"\n value={user?.email ?? ''}\n readOnly\n disabled\n autoComplete=\"email\"\n />\n\n {saveError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\">{saveError}</p>\n )}\n\n {saveSuccess && (\n <p className=\"text-sm text-green-600 dark:text-green-400\">\n {t('userProfile.profile.saveSuccess')}\n </p>\n )}\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n loading={isSaving}\n disabled={isSaving}\n >\n {t('userProfile.profile.saveButton')}\n </Button>\n </BaseForm>\n </SectionCard>\n\n <SectionCard\n header={{\n icon: <GlobeAltIcon className=\"h-5 w-5 text-white\" />,\n title: t('userProfile.profile.languageTitle'),\n subtitle: t('userProfile.profile.languageSubtitle'),\n gradient: 'from-lime-400 via-emerald-500 to-green-600',\n }}\n >\n <div className=\"grid grid-cols-3 gap-2\">\n {sharedI18n.SUPPORTED_LOCALES.map((code) => {\n const meta = sharedI18n.LANGUAGE_META[code]\n const checked = selectedLocale === code\n return (\n <button\n key={code}\n type=\"button\"\n onClick={() => {\n setSelectedLocale(code)\n triggerHaptic('light')\n }}\n className={`group relative flex flex-col items-center justify-center rounded-xl border px-2 py-2.5 backdrop-blur-xl shadow-[inset_0_1px_0_rgba(255,255,255,0.9),0_10px_22px_-16px_rgba(15,23,42,0.45)] dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.18),0_10px_22px_-16px_rgba(0,0,0,0.75)] transition ${\n checked\n ? 'border-indigo-400/80 bg-gradient-to-br from-indigo-100/85 via-white/80 to-sky-100/75 dark:border-indigo-300/70 dark:bg-[linear-gradient(140deg,rgba(99,102,241,0.32)_0%,rgba(30,41,59,0.72)_100%)]'\n : 'border-white/55 bg-gradient-to-br from-white/82 via-white/66 to-slate-100/62 hover:from-white/92 hover:to-sky-100/72 dark:border-white/15 dark:bg-[linear-gradient(140deg,rgba(30,41,59,0.72)_0%,rgba(15,23,42,0.62)_100%)] dark:hover:bg-[linear-gradient(140deg,rgba(51,65,85,0.76)_0%,rgba(30,41,59,0.68)_100%)]'\n }`}\n >\n <span className=\"text-lg leading-5\">{meta.flag}</span>\n <span className={`mt-1.5 text-xs font-semibold ${\n checked ? 'text-slate-900 dark:text-indigo-100' : 'text-slate-700 dark:text-slate-100'\n }`}>\n {meta.nativeName}\n </span>\n {checked && (\n <CheckCircleIcon className=\"absolute right-1 top-1 h-3.5 w-3.5 text-indigo-600 dark:text-indigo-300\" />\n )}\n </button>\n )\n })}\n </div>\n {selectedLocale !== currentLocale && (\n <div className=\"mt-4\">\n <Button\n type=\"button\"\n color=\"ios-glass-blue\"\n fullWidth\n loading={isSaving}\n disabled={isSaving}\n onClick={handleSave}\n >\n {t('userProfile.profile.saveButton')}\n </Button>\n </div>\n )}\n </SectionCard>\n </div>\n )\n}\n\n// ── Security Tab ─────────────────────────────────────────────────────────────\n\nexport function SecurityTabContent() {\n const t = useTranslations('windsock')\n const { client, user, refresh } = useAuth()\n\n const [showMfaSetup, setShowMfaSetup] = useState(false)\n const [currentPassword, setCurrentPassword] = useState('')\n const [newPassword, setNewPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n const [passwordError, setPasswordError] = useState<string | null>(null)\n const [passwordSuccess, setPasswordSuccess] = useState(false)\n const [isSavingPassword, setIsSavingPassword] = useState(false)\n\n const handleMfaSetupSuccess = useCallback(() => {\n setShowMfaSetup(false)\n // Refresh user state so mfaEnabled reflects the new status\n refresh()\n }, [refresh])\n\n const handleChangePassword = useCallback(async () => {\n setPasswordError(null)\n setPasswordSuccess(false)\n\n if (!currentPassword) {\n setPasswordError(t('userProfile.security.errorCurrentRequired'))\n return\n }\n if (!newPassword) {\n setPasswordError(t('userProfile.security.errorNewRequired'))\n return\n }\n if (newPassword !== confirmPassword) {\n setPasswordError(t('userProfile.security.errorPasswordMismatch'))\n return\n }\n\n setIsSavingPassword(true)\n triggerHaptic('light')\n\n try {\n const result = await client.changePassword(currentPassword, newPassword)\n if (!result.success) {\n setPasswordError(result.error ?? t('userProfile.security.errorSaveFailed'))\n triggerHaptic('error')\n return\n }\n setCurrentPassword('')\n setNewPassword('')\n setConfirmPassword('')\n setPasswordSuccess(true)\n triggerHaptic('success')\n } catch {\n setPasswordError(t('userProfile.security.errorSaveFailed'))\n triggerHaptic('error')\n } finally {\n setIsSavingPassword(false)\n }\n }, [currentPassword, newPassword, confirmPassword, client, t])\n\n return (\n <div className=\"space-y-6\">\n {showMfaSetup ? (\n <MfaSetup\n onSuccess={handleMfaSetupSuccess}\n onCancel={() => setShowMfaSetup(false)}\n />\n ) : (\n <MfaManage\n mfaEnabled={user?.mfaEnabled ?? false}\n enrolledMethods={user?.mfaEnabled ? [{ type: 'totp', label: t('userProfile.security.mfaTotpLabel') }] : []}\n onEnroll={() => setShowMfaSetup(true)}\n />\n )}\n\n <SectionCard\n header={{\n icon: <UserIcon className=\"h-5 w-5 text-white\" />,\n title: t('userProfile.security.changePasswordTitle'),\n subtitle: t('userProfile.security.changePasswordSubtitle'),\n gradient: 'from-blue-500 via-sky-500 to-cyan-500',\n }}\n >\n <BaseForm onSubmit={handleChangePassword} submitLabel={t('userProfile.security.changePasswordButton')} showFooter={false}>\n <PasswordInput\n label={t('userProfile.security.currentPasswordLabel')}\n value={currentPassword}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setCurrentPassword(event.target.value)}\n disabled={isSavingPassword}\n autoComplete=\"current-password\"\n />\n <PasswordInput\n label={t('userProfile.security.newPasswordLabel')}\n value={newPassword}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setNewPassword(event.target.value)}\n disabled={isSavingPassword}\n autoComplete=\"new-password\"\n />\n <PasswordStrengthMeter password={newPassword} />\n <PasswordInput\n label={t('userProfile.security.confirmPasswordLabel')}\n value={confirmPassword}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setConfirmPassword(event.target.value)}\n disabled={isSavingPassword}\n autoComplete=\"new-password\"\n />\n\n {passwordError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\">{passwordError}</p>\n )}\n\n {passwordSuccess && (\n <p className=\"text-sm text-green-600 dark:text-green-400\">\n {t('userProfile.security.changePasswordSuccess')}\n </p>\n )}\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n loading={isSavingPassword}\n disabled={isSavingPassword}\n >\n {t('userProfile.security.changePasswordButton')}\n </Button>\n </BaseForm>\n </SectionCard>\n </div>\n )\n}\n\n// ── Sessions Tab ─────────────────────────────────────────────────────────────\n\nexport function SessionsTabContent() {\n const t = useTranslations('windsock')\n const format = useFormatter()\n const { client } = useAuth()\n\n const [sessions, setSessions] = useState<UserSession[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [revokingId, setRevokingId] = useState<string | null>(null)\n\n useEffect(() => {\n let cancelled = false\n\n const fetchSessions = async () => {\n setIsLoading(true)\n try {\n const rawSessions = await client.getSessions()\n if (!cancelled) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setSessions(rawSessions.map((session: any) => ({\n id: session.id,\n device: session.userAgent ?? 'Unknown',\n location: session.ipAddress ?? 'Unknown',\n lastActive: typeof session.createdAt === 'string' ? session.createdAt : (session.createdAt as Date).toISOString(),\n current: false,\n })))\n }\n } catch {\n // Non-critical — render empty list\n } finally {\n if (!cancelled) setIsLoading(false)\n }\n }\n\n fetchSessions()\n return () => { cancelled = true }\n }, [client])\n\n const handleRevoke = useCallback(async (sessionId: string) => {\n setRevokingId(sessionId)\n triggerHaptic('medium')\n try {\n await client.revokeSession(sessionId)\n setSessions((previous) => previous.filter((s) => s.id !== sessionId))\n triggerHaptic('success')\n } catch {\n triggerHaptic('error')\n } finally {\n setRevokingId(null)\n }\n }, [client])\n\n return (\n <SectionCard\n header={{\n icon: <ComputerDesktopIcon className=\"h-5 w-5 text-white\" />,\n title: t('userProfile.sessions.title'),\n subtitle: t('userProfile.sessions.subtitle'),\n gradient: 'from-teal-500 via-cyan-500 to-sky-500',\n }}\n padded={false}\n >\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400\">\n <InlineSpinner />\n <span>{t('userProfile.sessions.loading')}</span>\n </div>\n ) : sessions.length === 0 ? (\n <p className=\"p-6 text-center text-sm text-slate-500 dark:text-slate-400\">\n {t('userProfile.sessions.empty')}\n </p>\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b liquid-divider\">\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {t('userProfile.sessions.columnDevice')}\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {t('userProfile.sessions.columnLocation')}\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {t('userProfile.sessions.columnLastActive')}\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {t('userProfile.sessions.columnAction')}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200/60 dark:divide-white/10\">\n {sessions.map((session) => (\n <tr key={session.id}>\n <td className=\"px-4 py-3 text-slate-900 dark:text-white\">\n <div className=\"flex items-center gap-2\">\n {session.device}\n {session.current && (\n <Badge color=\"green\">{t('userProfile.sessions.currentBadge')}</Badge>\n )}\n </div>\n </td>\n <td className=\"px-4 py-3 text-slate-500 dark:text-slate-400\">\n {session.location}\n </td>\n <td className=\"px-4 py-3 text-slate-500 dark:text-slate-400\">\n {format.relativeTime(new Date(session.lastActive))}\n </td>\n <td className=\"px-4 py-3 text-right\">\n {!session.current && (\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={() => handleRevoke(session.id)}\n loading={revokingId === session.id}\n disabled={revokingId !== null}\n >\n {t('userProfile.sessions.revokeButton')}\n </Button>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </SectionCard>\n )\n}\n\n// ── Linked Accounts Tab ──────────────────────────────────────────────────────\n\nexport function LinkedAccountsTabContent() {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [accounts, setAccounts] = useState<LinkedAccount[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [actioningProvider, setActioningProvider] = useState<string | null>(null)\n\n useEffect(() => {\n let cancelled = false\n\n const fetchAccounts = async () => {\n setIsLoading(true)\n try {\n const rawAccounts = await client.getLinkedAccounts()\n if (!cancelled) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setAccounts(rawAccounts.map((account: any) => ({\n provider: account.provider,\n providerUserId: account.providerAccountId,\n connected: true,\n })))\n }\n } catch {\n // Non-critical — render empty list\n } finally {\n if (!cancelled) setIsLoading(false)\n }\n }\n\n fetchAccounts()\n return () => { cancelled = true }\n }, [client])\n\n const handleDisconnect = useCallback(async (provider: string) => {\n setActioningProvider(provider)\n triggerHaptic('medium')\n try {\n await client.disconnectProvider(provider)\n setAccounts((previous) => previous.filter((a) => a.provider !== provider))\n triggerHaptic('success')\n } catch {\n triggerHaptic('error')\n } finally {\n setActioningProvider(null)\n }\n }, [client])\n\n const providerInitials = (provider: string) =>\n provider.slice(0, 2).toUpperCase()\n\n return (\n <SectionCard\n header={{\n icon: <LinkIcon className=\"h-5 w-5 text-white\" />,\n title: t('userProfile.linkedAccounts.title'),\n subtitle: t('userProfile.linkedAccounts.subtitle'),\n gradient: 'from-violet-500 via-purple-500 to-pink-500',\n }}\n padded={false}\n >\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400\">\n <InlineSpinner />\n <span>{t('userProfile.linkedAccounts.loading')}</span>\n </div>\n ) : accounts.length === 0 ? (\n <p className=\"p-6 text-center text-sm text-slate-500 dark:text-slate-400\">\n {t('userProfile.linkedAccounts.empty')}\n </p>\n ) : (\n <ListCard>\n {accounts.map((account) => (\n <ListCardItem\n key={account.provider}\n leading={\n <Avatar\n src={account.logoUrl}\n initials={providerInitials(account.provider)}\n alt={account.provider}\n />\n }\n trailing={\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={() => handleDisconnect(account.provider)}\n loading={actioningProvider === account.provider}\n disabled={actioningProvider !== null}\n >\n {t('userProfile.linkedAccounts.disconnectButton')}\n </Button>\n }\n >\n <div>\n <p className=\"text-sm font-medium capitalize text-slate-900 dark:text-white\">\n {account.provider}\n </p>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {t('userProfile.linkedAccounts.connectedLabel')}\n </p>\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </SectionCard>\n )\n}\n\n// ── UserProfile ──────────────────────────────────────────────────────────────\n\nexport function UserProfile({\n defaultTab = 'profile',\n tabs = ALL_TABS,\n onSignOut: _onSignOut,\n onProfileUpdate,\n}: UserProfileProps) {\n const t = useTranslations('windsock')\n const { status } = useAuth()\n\n const [activeTab, setActiveTab] = useState<ProfileTab>(\n tabs.includes(defaultTab) ? defaultTab : (tabs[0] ?? 'profile'),\n )\n\n if (status === 'loading') {\n return (\n <div className=\"flex items-center justify-center py-12\">\n <InlineSpinner />\n </div>\n )\n }\n\n if (status !== 'authenticated') {\n return null\n }\n\n const segments = tabs.map((tab) => ({\n value: tab,\n label: t(`userProfile.tabs.${tab}`),\n }))\n\n return (\n <div className=\"space-y-6\">\n {tabs.length > 1 && (\n <SegmentedControl\n segments={segments}\n value={activeTab}\n onChange={(value: string) => setActiveTab(value as ProfileTab)}\n fullWidth\n />\n )}\n\n {activeTab === 'profile' && (\n <ProfileTabContent onProfileUpdate={onProfileUpdate} />\n )}\n\n {activeTab === 'security' && (\n <SecurityTabContent />\n )}\n\n {activeTab === 'sessions' && (\n <SessionsTabContent />\n )}\n\n {activeTab === 'linked-accounts' && (\n <LinkedAccountsTabContent />\n )}\n </div>\n )\n}\n"]}