@meindesk/react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/motion/tokens.ts","../src/motion/cssVars.ts","../src/styles.ts","../src/components/AuthToast.tsx","../src/provider.tsx","../src/hooks.ts","../src/control.tsx","../src/motion/useReducedMotion.ts","../src/motion/FadePresence.tsx","../src/motion/FormTransition.tsx","../src/components/AuthLoader.tsx","../src/appearance.ts","../src/shell.tsx","../src/providers.tsx","../src/components/LoadingButton.tsx","../src/motion/CollapseTransition.tsx","../src/components/FieldError.tsx","../src/components/SuccessIndicator.tsx","../src/errors.ts","../src/validation.ts","../src/screens.tsx","../src/AuthExperience.tsx","../src/SignIn.tsx","../src/SignUp.tsx","../src/SsoCallback.tsx","../src/ForgotPassword.tsx","../src/ResetPassword.tsx","../src/MagicLinkSignIn.tsx","../src/VerifyEmail.tsx","../src/UserProfile.tsx","../src/components/Skeleton.tsx","../src/UserButton.tsx","../src/fields.tsx"],"names":["createContext","useMemo","useState","useEffect","useCallback","useContext","jsx","useRef","jsxs","LoadingButton","useLayoutEffect","t","MeindeskApiError","result","resolveAbsoluteUrl","timer","Fragment","readTokenFromUrl","getInitials","displayName"],"mappings":";;;;;;;;AACO,IAAM,eAAA,GAAkB;AAAA,EAC7B,OAAA,EAAS,GAAA;AAAA,EACT,IAAA,EAAM,GAAA;AAAA,EACN,MAAA,EAAQ,GAAA;AAAA,EACR,IAAA,EAAM;AACR;AAKO,IAAM,aAAA,GAAgB;AAAA,EAC3B,QAAA,EAAU,4BAAA;AAAA,EACV,KAAA,EAAO,+BAAA;AAAA,EACP,IAAA,EAAM,4BAAA;AAAA,EACN,QAAA,EAAU;AACZ;AAIO,IAAM,eAAA,GAAkB;AAAA;AAAA,EAE7B,MAAA,EAAQ;AACV;;;ACpBO,SAAS,kBAAA,GAA6B;AAC3C,EAAA,OAAO;AAAA,uBAAA,EACgB,gBAAgB,OAAO,CAAA;AAAA,oBAAA,EAC1B,gBAAgB,IAAI,CAAA;AAAA,sBAAA,EAClB,gBAAgB,MAAM,CAAA;AAAA,oBAAA,EACxB,gBAAgB,IAAI,CAAA;AAAA,oBAAA,EACpB,cAAc,QAAQ,CAAA;AAAA,0BAAA,EAChB,cAAc,KAAK,CAAA;AAAA,yBAAA,EACpB,cAAc,IAAI,CAAA;AAAA,6BAAA,EACd,cAAc,QAAQ,CAAA;AAAA,wBAAA,EAC3B,gBAAgB,MAAM,CAAA;AAAA,CAAA,CAC9C,IAAA,EAAK;AACP;;;ACbO,IAAM,UAAA,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,EAiBtB,oBAAoB;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;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","file":"index.js","sourcesContent":["/** Centralized motion timings (ms). Keep auth UI fast — utility, not marketing. */\nexport const MOTION_DURATION = {\n instant: 120,\n fast: 160,\n normal: 220,\n slow: 320,\n} as const;\n\nexport type MotionDuration = keyof typeof MOTION_DURATION;\n\n/** Controlled easings — no overshoot / bounce. */\nexport const MOTION_EASING = {\n standard: \"cubic-bezier(0.2, 0, 0, 1)\",\n enter: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n exit: \"cubic-bezier(0.4, 0, 1, 1)\",\n emphasis: \"cubic-bezier(0.2, 0, 0, 1)\",\n} as const;\n\nexport type MotionEasing = keyof typeof MOTION_EASING;\n\nexport const MOTION_DISTANCE = {\n /** Max Y shift for form / dropdown enter (px). */\n subtle: 6,\n} as const;\n","import { MOTION_DISTANCE, MOTION_DURATION, MOTION_EASING } from \"./tokens\";\n\n/** CSS custom properties injected on `.meindesk-root` via authStyles. */\nexport function motionCssVarsBlock(): string {\n return `\n --md-motion-instant: ${MOTION_DURATION.instant}ms;\n --md-motion-fast: ${MOTION_DURATION.fast}ms;\n --md-motion-normal: ${MOTION_DURATION.normal}ms;\n --md-motion-slow: ${MOTION_DURATION.slow}ms;\n --md-motion-ease: ${MOTION_EASING.standard};\n --md-motion-ease-enter: ${MOTION_EASING.enter};\n --md-motion-ease-exit: ${MOTION_EASING.exit};\n --md-motion-ease-emphasis: ${MOTION_EASING.emphasis};\n --md-motion-distance: ${MOTION_DISTANCE.subtle}px;\n`.trim();\n}\n","import { motionCssVarsBlock } from \"./motion/cssVars\";\n\nexport const authStyles = `\n.meindesk-root {\n --md-bg: #ffffff;\n --md-surface: #f8fafc;\n --md-border: #e2e8f0;\n --md-text: #0f172a;\n --md-muted: #64748b;\n --md-primary: #0f172a;\n --md-primary-hover: #1e293b;\n --md-danger: #b91c1c;\n --md-danger-bg: #fef2f2;\n --md-success: #15803d;\n --md-success-bg: #f0fdf4;\n --md-radius: 10px;\n --md-shadow: 0 1px 2px rgba(15, 23, 42, 0.06), 0 8px 24px rgba(15, 23, 42, 0.06);\n --md-heading-size: 1.35rem;\n --md-body-size: 0.925rem;\n ${motionCssVarsBlock()}\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n color: var(--md-text);\n box-sizing: border-box;\n}\n\n.meindesk-root *,\n.meindesk-root *::before,\n.meindesk-root *::after {\n box-sizing: border-box;\n}\n\n.meindesk-experience {\n width: 100%;\n}\n\n.meindesk-experience-loading {\n width: 100%;\n}\n\n.meindesk-experience-loading-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 14px;\n min-height: 180px;\n border-radius: 8px;\n background: var(--md-surface);\n}\n\n.meindesk-form-transition {\n width: 100%;\n transition: height var(--md-motion-fast) var(--md-motion-ease);\n}\n\n.meindesk-fade-presence {\n width: 100%;\n}\n\n.meindesk-fade-shown {\n opacity: 1;\n transform: translateY(0);\n}\n\n.meindesk-fade-enter {\n animation: meindesk-fade-in var(--md-motion-fast) var(--md-motion-ease-enter) both;\n}\n\n.meindesk-fade-exit {\n animation: meindesk-fade-out var(--md-motion-fast) var(--md-motion-ease-exit) both;\n}\n\n.meindesk-fade-opacity-only.meindesk-fade-enter,\n.meindesk-fade-opacity-only.meindesk-fade-exit {\n animation-name: meindesk-fade-opacity;\n}\n\n@keyframes meindesk-fade-in {\n from { opacity: 0; transform: translateY(var(--md-motion-distance)); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes meindesk-fade-out {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(calc(var(--md-motion-distance) * -0.5)); }\n}\n\n@keyframes meindesk-fade-opacity {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.meindesk-collapse {\n display: grid;\n transition:\n opacity var(--md-motion-fast) var(--md-motion-ease),\n grid-template-rows var(--md-motion-fast) var(--md-motion-ease);\n}\n\n.meindesk-collapse-open,\n.meindesk-collapse-opening {\n grid-template-rows: 1fr;\n opacity: 1;\n}\n\n.meindesk-collapse-closing,\n.meindesk-collapse-closed {\n grid-template-rows: 0fr;\n opacity: 0;\n}\n\n.meindesk-collapse-inner {\n overflow: hidden;\n min-height: 0;\n}\n\n.meindesk-card {\n width: 100%;\n max-width: 400px;\n margin: 0 auto;\n background: var(--md-bg);\n border: 1px solid var(--md-border);\n border-radius: calc(var(--md-radius) + 2px);\n box-shadow: var(--md-shadow);\n padding: 28px 24px;\n}\n\n.meindesk-card-flat {\n box-shadow: none;\n border-color: transparent;\n}\n\n.meindesk-card-bordered {\n box-shadow: none;\n}\n\n.meindesk-card-minimal {\n box-shadow: none;\n border: none;\n background: transparent;\n padding: 16px 0;\n}\n\n.meindesk-branding {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n margin-bottom: 18px;\n}\n\n.meindesk-logo {\n display: block;\n border-radius: 8px;\n}\n\n.meindesk-app-name {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--md-muted);\n letter-spacing: 0.01em;\n}\n\n.meindesk-secured {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n margin-top: 20px;\n padding-top: 16px;\n border-top: 1px solid var(--md-border);\n font-size: 0.7rem;\n font-weight: 500;\n color: var(--md-muted);\n letter-spacing: 0.01em;\n user-select: none;\n}\n\n.meindesk-secured-mark {\n color: var(--md-primary);\n font-size: 0.6rem;\n line-height: 1;\n opacity: 0.85;\n}\n\n.meindesk-title {\n margin: 0 0 6px;\n font-size: var(--md-heading-size);\n font-weight: 650;\n letter-spacing: -0.02em;\n color: var(--md-text);\n}\n\n.meindesk-subtitle {\n margin: 0 0 22px;\n color: var(--md-muted);\n font-size: var(--md-body-size);\n line-height: 1.45;\n}\n\n.meindesk-form {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n.meindesk-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.meindesk-label {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--md-text);\n}\n\n.meindesk-input-wrap {\n position: relative;\n}\n\n.meindesk-input {\n width: 100%;\n appearance: none;\n border: 1px solid var(--md-border);\n background: var(--md-bg);\n color: var(--md-text);\n border-radius: var(--md-radius);\n padding: 10px 12px;\n font-size: 0.9375rem;\n line-height: 1.4;\n outline: none;\n transition:\n border-color var(--md-motion-fast) var(--md-motion-ease),\n background-color var(--md-motion-fast) var(--md-motion-ease),\n box-shadow var(--md-motion-fast) var(--md-motion-ease);\n}\n\n.meindesk-input:hover:not(:disabled):not(:focus) {\n border-color: #cbd5e1;\n}\n\n.meindesk-input:focus {\n border-color: #94a3b8;\n box-shadow: 0 0 0 3px rgba(148, 163, 184, 0.22);\n}\n\n.meindesk-input-invalid {\n border-color: var(--md-danger);\n}\n\n.meindesk-input-invalid:focus {\n box-shadow: 0 0 0 3px rgba(185, 28, 28, 0.15);\n}\n\n.meindesk-input:disabled {\n background: var(--md-surface);\n color: var(--md-muted);\n cursor: not-allowed;\n}\n\n.meindesk-input-action {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n border: none;\n background: transparent;\n color: var(--md-muted);\n font-size: 0.75rem;\n font-weight: 600;\n cursor: pointer;\n padding: 4px 6px;\n border-radius: 6px;\n transition:\n color var(--md-motion-instant) var(--md-motion-ease),\n background-color var(--md-motion-instant) var(--md-motion-ease),\n opacity var(--md-motion-instant) var(--md-motion-ease);\n}\n\n.meindesk-input-action:hover {\n color: var(--md-text);\n background: var(--md-surface);\n}\n\n.meindesk-input-action:active {\n opacity: 0.85;\n}\n\n.meindesk-input-action-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.1em;\n transition: opacity var(--md-motion-instant) var(--md-motion-ease);\n}\n\n.meindesk-otp {\n letter-spacing: 0.28em;\n text-align: center;\n font-weight: 600;\n}\n\n.meindesk-select {\n width: 100%;\n appearance: none;\n border: 1px solid var(--md-border);\n background: var(--md-bg);\n color: var(--md-text);\n border-radius: var(--md-radius);\n padding: 10px 36px 10px 12px;\n font-size: 0.9375rem;\n line-height: 1.4;\n outline: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 12px center;\n transition:\n border-color var(--md-motion-fast) var(--md-motion-ease),\n box-shadow var(--md-motion-fast) var(--md-motion-ease);\n}\n\n.meindesk-select:focus {\n border-color: #94a3b8;\n box-shadow: 0 0 0 3px rgba(148, 163, 184, 0.25);\n}\n\n.meindesk-select:disabled {\n background-color: var(--md-surface);\n color: var(--md-muted);\n cursor: not-allowed;\n}\n\n.meindesk-checkbox-field {\n flex-direction: row;\n align-items: center;\n gap: 10px;\n}\n\n.meindesk-checkbox {\n width: 16px;\n height: 16px;\n margin: 0;\n accent-color: var(--md-primary);\n cursor: pointer;\n flex-shrink: 0;\n}\n\n.meindesk-checkbox:disabled {\n cursor: not-allowed;\n}\n\n.meindesk-success {\n margin: 0;\n padding: 10px 12px;\n border-radius: var(--md-radius);\n background: #f0fdf4;\n color: #166534;\n font-size: 0.875rem;\n line-height: 1.4;\n}\n\n.meindesk-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n width: 100%;\n border: none;\n border-radius: var(--md-radius);\n background: var(--md-primary);\n color: #fff;\n font-size: 0.9375rem;\n font-weight: 600;\n padding: 11px 14px;\n cursor: pointer;\n transition:\n background var(--md-motion-fast) var(--md-motion-ease),\n opacity var(--md-motion-fast) var(--md-motion-ease),\n filter var(--md-motion-instant) var(--md-motion-ease);\n}\n\n.meindesk-button:hover:not(:disabled) {\n filter: brightness(1.06);\n}\n\n.meindesk-button:active:not(:disabled) {\n filter: brightness(0.96);\n}\n\n.meindesk-button:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n}\n\n.meindesk-button-secondary {\n background: var(--md-surface);\n color: var(--md-text);\n border: 1px solid var(--md-border);\n}\n\n.meindesk-button-secondary:hover:not(:disabled) {\n filter: none;\n background: #eef2f7;\n}\n\n.meindesk-button-ghost {\n background: transparent;\n color: var(--md-text);\n}\n\n.meindesk-button-danger {\n background: var(--md-danger);\n}\n\n.meindesk-loading-button-inner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n min-height: 1.25em;\n}\n\n.meindesk-loading-button-busy {\n pointer-events: none;\n}\n\n.meindesk-auth-loader {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n}\n\n.meindesk-auth-loader-ring {\n display: inline-block;\n border: 2px solid currentColor;\n border-right-color: transparent;\n border-radius: 999px;\n opacity: 0.85;\n animation: meindesk-spin var(--md-motion-slow) linear infinite;\n}\n\n.meindesk-auth-loader-button .meindesk-auth-loader-ring {\n color: inherit;\n}\n\n.meindesk-auth-loader-page,\n.meindesk-auth-loader-modal,\n.meindesk-auth-loader-content {\n flex-direction: column;\n color: var(--md-muted);\n padding: 12px;\n}\n\n.meindesk-auth-loader-label {\n font-size: 0.8125rem;\n font-weight: 500;\n}\n\n@keyframes meindesk-spin {\n to { transform: rotate(360deg); }\n}\n\n.meindesk-skeleton {\n display: inline-block;\n background: color-mix(in srgb, var(--md-muted) 18%, var(--md-surface));\n animation: meindesk-pulse 1.4s var(--md-motion-ease) infinite;\n}\n\n.meindesk-skeleton-circle {\n border-radius: 999px;\n}\n\n.meindesk-skeleton-line,\n.meindesk-skeleton-rect {\n border-radius: 6px;\n}\n\n@keyframes meindesk-pulse {\n 0%, 100% { opacity: 0.55; }\n 50% { opacity: 0.9; }\n}\n\n.meindesk-success,\n.meindesk-success-indicator {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin: 0;\n padding: 10px 12px;\n border-radius: var(--md-radius);\n background: var(--md-success-bg);\n color: var(--md-success);\n font-size: 0.875rem;\n line-height: 1.4;\n}\n\n.meindesk-success-check {\n font-weight: 700;\n line-height: 1.2;\n}\n\n.meindesk-toast-viewport {\n position: fixed;\n z-index: 1100;\n right: 16px;\n bottom: 16px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n max-width: min(360px, calc(100vw - 32px));\n pointer-events: none;\n}\n\n.meindesk-toast {\n pointer-events: auto;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 10px;\n border: 1px solid var(--md-border);\n background: var(--md-bg);\n color: var(--md-text);\n box-shadow: var(--md-shadow);\n font-size: 0.875rem;\n animation: meindesk-toast-in var(--md-motion-fast) var(--md-motion-ease-enter);\n}\n\n.meindesk-toast-success {\n border-color: color-mix(in srgb, var(--md-success) 35%, var(--md-border));\n}\n\n.meindesk-toast-error {\n border-color: color-mix(in srgb, var(--md-danger) 35%, var(--md-border));\n background: var(--md-danger-bg);\n}\n\n.meindesk-toast-dismiss {\n border: none;\n background: transparent;\n color: var(--md-muted);\n cursor: pointer;\n font-size: 1rem;\n line-height: 1;\n padding: 0 2px;\n}\n\n@keyframes meindesk-toast-in {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.meindesk-error {\n margin: 0;\n padding: 10px 12px;\n border-radius: var(--md-radius);\n background: var(--md-danger-bg);\n color: var(--md-danger);\n font-size: 0.875rem;\n line-height: 1.4;\n}\n\n.meindesk-field-error {\n margin: 0;\n padding: 0;\n background: transparent;\n color: var(--md-danger);\n font-size: 0.78rem;\n font-weight: 500;\n line-height: 1.35;\n}\n\n.meindesk-input-has-action {\n padding-right: 56px;\n}\n\n.meindesk-providers {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-bottom: 4px;\n}\n\n.meindesk-provider-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n width: 100%;\n border: 1px solid var(--md-border);\n border-radius: var(--md-radius);\n background: var(--md-bg);\n color: var(--md-text);\n font-size: 0.9rem;\n font-weight: 600;\n padding: 10px 14px;\n cursor: pointer;\n transition:\n background var(--md-motion-fast) var(--md-motion-ease),\n border-color var(--md-motion-fast) var(--md-motion-ease),\n opacity var(--md-motion-fast) var(--md-motion-ease);\n}\n\n.meindesk-provider-button:hover:not(:disabled) {\n background: var(--md-surface);\n}\n\n.meindesk-provider-button:active:not(:disabled) {\n opacity: 0.9;\n}\n\n.meindesk-provider-button:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n}\n\n.meindesk-provider-button-busy {\n pointer-events: none;\n}\n\n.meindesk-provider-icon {\n display: inline-flex;\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n}\n\n.meindesk-divider {\n display: flex;\n align-items: center;\n gap: 12px;\n margin: 16px 0;\n color: var(--md-muted);\n font-size: 0.75rem;\n font-weight: 600;\n letter-spacing: 0.06em;\n}\n\n.meindesk-divider::before,\n.meindesk-divider::after {\n content: \"\";\n flex: 1;\n height: 1px;\n background: var(--md-border);\n}\n\n.meindesk-footer {\n margin: 18px 0 0;\n text-align: center;\n}\n\n.meindesk-inline-link {\n display: flex;\n justify-content: flex-end;\n margin-top: -6px;\n}\n\n.meindesk-link {\n border: none;\n background: transparent;\n color: var(--md-muted);\n font-size: 0.8125rem;\n font-weight: 500;\n cursor: pointer;\n padding: 0;\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n\n.meindesk-link:hover {\n color: var(--md-text);\n}\n\n.meindesk-org-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.meindesk-org-item {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n border: 1px solid var(--md-border);\n border-radius: var(--md-radius);\n background: var(--md-bg);\n color: var(--md-text);\n padding: 12px;\n cursor: pointer;\n text-align: left;\n font-size: 0.9rem;\n font-weight: 600;\n}\n\n.meindesk-org-item-active {\n border-color: var(--md-primary);\n box-shadow: 0 0 0 2px rgba(15, 23, 42, 0.12);\n}\n\n.meindesk-org-avatar {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n background: var(--md-surface);\n border: 1px solid var(--md-border);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 0.8125rem;\n font-weight: 700;\n}\n\n.meindesk-user-button {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.meindesk-avatar {\n width: 36px;\n height: 36px;\n border-radius: 999px;\n border: 1px solid var(--md-border);\n background: var(--md-surface);\n color: var(--md-text);\n font-size: 0.8125rem;\n font-weight: 700;\n letter-spacing: 0.02em;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n}\n\n.meindesk-avatar:hover {\n border-color: #cbd5e1;\n}\n\n.meindesk-menu {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n min-width: 200px;\n background: var(--md-bg);\n border: 1px solid var(--md-border);\n border-radius: var(--md-radius);\n box-shadow: var(--md-shadow);\n padding: 6px;\n z-index: 50;\n transform-origin: top right;\n animation: meindesk-dropdown-in var(--md-motion-fast) var(--md-motion-ease-enter);\n}\n\n@keyframes meindesk-dropdown-in {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.meindesk-menu-meta {\n padding: 10px 10px 8px;\n border-bottom: 1px solid var(--md-border);\n margin-bottom: 4px;\n}\n\n.meindesk-menu-name {\n font-size: 0.875rem;\n font-weight: 600;\n margin: 0 0 2px;\n}\n\n.meindesk-menu-email {\n font-size: 0.75rem;\n color: var(--md-muted);\n margin: 0;\n word-break: break-all;\n}\n\n.meindesk-menu-item {\n width: 100%;\n text-align: left;\n border: none;\n background: transparent;\n color: var(--md-text);\n font-size: 0.875rem;\n padding: 9px 10px;\n border-radius: 8px;\n cursor: pointer;\n}\n\n.meindesk-menu-item:hover {\n background: var(--md-surface);\n}\n\n.meindesk-account-overlay {\n --md-account-bg: #131316;\n --md-account-sidebar: #131316;\n --md-account-panel: #1a1a1f;\n --md-account-border: #2a2a32;\n --md-account-text: #ffffff;\n --md-account-muted: #9ca3af;\n --md-account-accent: #6c47ff;\n --md-account-accent-soft: rgba(108, 71, 255, 0.16);\n --md-account-danger: #ef4444;\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(0, 0, 0, 0.62);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n opacity: 0;\n transition: opacity var(--md-motion-normal) var(--md-motion-ease-exit);\n}\n\n.meindesk-account-overlay-open {\n opacity: 1;\n}\n\n.meindesk-account-modal {\n width: min(860px, 100%);\n height: auto;\n max-height: min(720px, calc(100dvh - 32px));\n min-height: min(70vh, calc(100dvh - 32px));\n min-width: 0;\n display: grid;\n grid-template-columns: 220px minmax(0, 1fr);\n grid-template-rows: minmax(0, 1fr);\n overflow: hidden;\n background: var(--md-account-panel);\n border: 1px solid var(--md-account-border);\n border-radius: 12px;\n box-shadow: 0 24px 64px rgba(0, 0, 0, 0.45);\n color: var(--md-account-text);\n opacity: 0;\n transform: translateY(4px) scale(0.99);\n transition:\n opacity var(--md-motion-normal) var(--md-motion-ease-enter),\n transform var(--md-motion-normal) var(--md-motion-ease-enter);\n}\n\n.meindesk-account-overlay-open .meindesk-account-modal {\n opacity: 1;\n transform: translateY(0) scale(1);\n}\n\n.meindesk-account-sidebar {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n min-height: 0;\n height: 100%;\n background: var(--md-account-sidebar);\n border-right: 1px solid var(--md-account-border);\n padding: 22px 14px 16px;\n}\n\n.meindesk-account-brand-title {\n font-size: 1.05rem;\n font-weight: 700;\n letter-spacing: -0.01em;\n}\n\n.meindesk-account-brand-sub {\n margin-top: 4px;\n font-size: 0.78rem;\n color: var(--md-account-muted);\n}\n\n.meindesk-account-nav {\n margin-top: 22px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.meindesk-account-nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n border: none;\n background: transparent;\n color: var(--md-account-muted);\n font-size: 0.875rem;\n font-weight: 500;\n padding: 9px 10px;\n border-radius: 8px;\n cursor: pointer;\n text-align: left;\n transition:\n background-color 120ms ease,\n color 120ms ease;\n}\n\n.meindesk-account-nav-item:hover {\n background: rgba(255, 255, 255, 0.04);\n color: var(--md-account-text);\n}\n\n.meindesk-account-nav-item-active {\n background: var(--md-account-accent-soft);\n color: #c4b5fd;\n}\n\n.meindesk-account-nav-item-active .meindesk-account-nav-icon {\n color: var(--md-account-accent);\n}\n\n.meindesk-account-nav-icon {\n display: inline-flex;\n width: 16px;\n height: 16px;\n color: inherit;\n transition: color 120ms ease;\n}\n\n.meindesk-account-secured {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.7rem;\n color: #6b7280;\n padding: 4px 6px;\n}\n\n.meindesk-account-secured-mark {\n color: #8b5cf6;\n font-size: 0.65rem;\n}\n\n.meindesk-account-main {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n height: 100%;\n overflow: hidden;\n background: var(--md-account-panel);\n}\n\n.meindesk-account-main-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 20px 24px 14px;\n border-bottom: 1px solid var(--md-account-border);\n flex-shrink: 0;\n}\n\n.meindesk-account-page-title {\n margin: 0;\n font-size: 1.15rem;\n font-weight: 700;\n letter-spacing: -0.02em;\n}\n\n.meindesk-account-close {\n border: none;\n background: transparent;\n color: var(--md-account-muted);\n font-size: 1.4rem;\n line-height: 1;\n cursor: pointer;\n padding: 2px 8px;\n border-radius: 8px;\n transition:\n background-color 120ms ease,\n color 120ms ease;\n}\n\n.meindesk-account-close:hover {\n background: rgba(255, 255, 255, 0.06);\n color: var(--md-account-text);\n}\n\n.meindesk-account-main-body {\n padding: 8px 24px 24px;\n overflow-y: auto;\n overflow-x: hidden;\n flex: 1 1 auto;\n min-height: 0;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n}\n\n.meindesk-account-panel-enter {\n animation: meindesk-account-panel-in var(--md-motion-fast) var(--md-motion-ease-enter);\n}\n\n@keyframes meindesk-account-panel-in {\n from {\n opacity: 0;\n transform: translateY(2px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.meindesk-account-section {\n padding: 16px 0;\n border-bottom: 1px solid var(--md-account-border);\n}\n\n.meindesk-account-section:last-child {\n border-bottom: none;\n padding-bottom: 8px;\n}\n\n.meindesk-account-section-label {\n font-size: 0.72rem;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--md-account-muted);\n margin-bottom: 14px;\n}\n\n.meindesk-account-profile-row,\n.meindesk-account-list-row,\n.meindesk-account-setting-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n min-height: 36px;\n}\n\n.meindesk-account-profile-left,\n.meindesk-account-list-main,\n.meindesk-account-device-title {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n\n.meindesk-account-avatar {\n width: 40px;\n height: 40px;\n border-radius: 999px;\n background: #27272a;\n border: 1px solid var(--md-account-border);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 0.8rem;\n font-weight: 700;\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.meindesk-account-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.meindesk-account-profile-name {\n font-size: 0.95rem;\n font-weight: 600;\n}\n\n.meindesk-account-action {\n border: 1px solid var(--md-account-border);\n background: rgba(255, 255, 255, 0.03);\n color: var(--md-account-text);\n font-size: 0.8rem;\n font-weight: 600;\n cursor: pointer;\n padding: 0 12px;\n height: 32px;\n border-radius: 8px;\n white-space: nowrap;\n transition:\n background-color 120ms ease,\n border-color 120ms ease,\n color 120ms ease;\n}\n\n.meindesk-account-action:hover {\n background: rgba(255, 255, 255, 0.06);\n border-color: #3f3f46;\n color: var(--md-account-text);\n}\n\n.meindesk-account-action-add {\n border: none;\n background: transparent;\n color: var(--md-account-accent);\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n padding: 8px 0 0;\n white-space: nowrap;\n transition: color 120ms ease, opacity 120ms ease;\n}\n\n.meindesk-account-action-add:hover {\n color: #8b6bff;\n}\n\n.meindesk-account-badge {\n display: inline-flex;\n align-items: center;\n border-radius: 999px;\n background: #2a2a32;\n color: #e5e7eb;\n font-size: 0.68rem;\n font-weight: 600;\n padding: 2px 8px;\n}\n\n.meindesk-account-muted {\n color: var(--md-account-muted);\n font-size: 0.8rem;\n margin: 6px 0 0;\n}\n\n.meindesk-account-provider-icon {\n width: 28px;\n height: 28px;\n border-radius: 999px;\n background: #27272a;\n border: 1px solid var(--md-account-border);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 0.7rem;\n font-weight: 700;\n flex-shrink: 0;\n}\n\n.meindesk-account-provider-name {\n font-size: 0.875rem;\n font-weight: 600;\n}\n\n.meindesk-account-setting-label {\n font-size: 0.9rem;\n font-weight: 500;\n}\n\n.meindesk-account-setting-control {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n}\n\n.meindesk-account-expander {\n margin-top: 12px;\n padding: 12px;\n border-radius: 10px;\n border: 1px solid var(--md-account-border);\n background: rgba(0, 0, 0, 0.22);\n display: flex;\n flex-direction: column;\n gap: 10px;\n animation: meindesk-account-expander-in 150ms ease-out;\n transform-origin: top center;\n}\n\n@keyframes meindesk-account-expander-in {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.meindesk-account-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n font-size: 0.75rem;\n color: var(--md-account-muted);\n}\n\n.meindesk-account-input,\n.meindesk-account-select {\n height: 36px;\n border-radius: 8px;\n border: 1px solid var(--md-account-border);\n background: #0f0f12;\n color: var(--md-account-text);\n padding: 0 10px;\n font-size: 0.875rem;\n outline: none;\n transition: border-color 120ms ease;\n}\n\n.meindesk-account-input:focus,\n.meindesk-account-select:focus {\n border-color: var(--md-account-accent);\n}\n\n.meindesk-account-expander-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n}\n\n.meindesk-account-btn-primary,\n.meindesk-account-btn-secondary {\n height: 32px;\n border-radius: 8px;\n padding: 0 12px;\n font-size: 0.8rem;\n font-weight: 600;\n cursor: pointer;\n transition: opacity 120ms ease, background-color 120ms ease;\n}\n\n.meindesk-account-btn-primary {\n border: none;\n background: var(--md-account-accent);\n color: white;\n}\n\n.meindesk-account-btn-primary:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.meindesk-account-btn-secondary {\n border: 1px solid var(--md-account-border);\n background: transparent;\n color: var(--md-account-muted);\n}\n\n.meindesk-account-device {\n padding: 14px 0;\n border-top: 1px solid transparent;\n min-height: 64px;\n transition: opacity var(--md-motion-fast) var(--md-motion-ease);\n}\n\n.meindesk-account-device-pending {\n opacity: 0.55;\n pointer-events: none;\n}\n\n.meindesk-account-device + .meindesk-account-device {\n border-top: 1px solid var(--md-account-border);\n}\n\n.meindesk-account-device-top {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n}\n\n.meindesk-account-device-icon {\n color: var(--md-account-muted);\n flex-shrink: 0;\n margin-top: 2px;\n}\n\n.meindesk-account-device-name {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--md-account-text);\n line-height: 1.3;\n}\n\n.meindesk-account-device-browser {\n margin-top: 2px;\n font-size: 0.78rem;\n color: var(--md-account-muted);\n}\n\n.meindesk-account-device-meta {\n margin: 8px 0 0 28px;\n font-size: 0.75rem;\n color: var(--md-account-muted);\n line-height: 1.5;\n}\n\n.meindesk-account-activity {\n padding: 12px 0;\n border-top: 1px solid transparent;\n min-height: 52px;\n}\n\n.meindesk-account-activity + .meindesk-account-activity {\n border-top: 1px solid var(--md-account-border);\n}\n\n.meindesk-account-activity-title {\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--md-account-text);\n}\n\n.meindesk-account-activity-meta {\n margin-top: 4px;\n font-size: 0.75rem;\n color: var(--md-account-muted);\n}\n\n.meindesk-account-menu-wrap {\n position: relative;\n}\n\n.meindesk-account-ellipsis {\n border: none;\n background: transparent;\n color: var(--md-account-muted);\n letter-spacing: 1px;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n font-size: 0.95rem;\n line-height: 1;\n transition:\n background-color 120ms ease,\n color 120ms ease;\n}\n\n.meindesk-account-ellipsis:hover {\n background: rgba(255, 255, 255, 0.06);\n color: var(--md-account-text);\n}\n\n.meindesk-account-menu {\n position: absolute;\n top: 100%;\n right: 0;\n min-width: 140px;\n background: #0f0f12;\n border: 1px solid var(--md-account-border);\n border-radius: 8px;\n padding: 4px;\n z-index: 5;\n box-shadow: 0 10px 24px rgba(0, 0, 0, 0.4);\n animation: meindesk-account-menu-in 120ms ease-out;\n}\n\n@keyframes meindesk-account-menu-in {\n from {\n opacity: 0;\n transform: translateY(-3px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.meindesk-account-menu-item {\n width: 100%;\n text-align: left;\n border: none;\n background: transparent;\n color: var(--md-account-text);\n font-size: 0.8rem;\n padding: 8px 10px;\n border-radius: 6px;\n cursor: pointer;\n transition: background-color 100ms ease;\n}\n\n.meindesk-account-menu-item:hover {\n background: rgba(255, 255, 255, 0.06);\n}\n\n.meindesk-account-menu-item-danger {\n color: var(--md-account-danger);\n}\n\n.meindesk-account-danger-link {\n border: none;\n background: transparent;\n color: var(--md-account-danger);\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n padding: 0;\n transition: opacity 120ms ease;\n}\n\n.meindesk-account-danger-link:hover {\n opacity: 0.85;\n}\n\n.meindesk-account-select-wrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.meindesk-account-select-icon {\n position: absolute;\n left: 10px;\n color: var(--md-account-muted);\n pointer-events: none;\n font-size: 0.75rem;\n}\n\n.meindesk-account-select {\n padding-left: 28px;\n padding-right: 28px;\n min-width: 140px;\n appearance: none;\n background-image: linear-gradient(45deg, transparent 50%, #9ca3af 50%),\n linear-gradient(135deg, #9ca3af 50%, transparent 50%);\n background-position: calc(100% - 14px) 55%, calc(100% - 9px) 55%;\n background-size: 5px 5px, 5px 5px;\n background-repeat: no-repeat;\n}\n\n.meindesk-account-banner {\n margin: 10px 0 4px;\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 0.8rem;\n animation: meindesk-account-panel-in 140ms ease-out;\n}\n\n.meindesk-account-banner-ok {\n border: 1px solid rgba(34, 197, 94, 0.35);\n background: rgba(34, 197, 94, 0.12);\n color: #86efac;\n}\n\n.meindesk-account-banner-err {\n border: 1px solid rgba(239, 68, 68, 0.35);\n background: rgba(239, 68, 68, 0.12);\n color: #fca5a5;\n}\n\n.meindesk-account-banner-info {\n border: 1px solid rgba(108, 71, 255, 0.35);\n background: rgba(108, 71, 255, 0.12);\n color: #c4b5fd;\n}\n\n.meindesk-appearance-light .meindesk-account-modal {\n --md-account-bg: #ffffff;\n --md-account-sidebar: #f8fafc;\n --md-account-panel: #ffffff;\n --md-account-border: #e2e8f0;\n --md-account-text: #0f172a;\n --md-account-muted: #64748b;\n}\n\n@media (max-width: 720px) {\n .meindesk-account-modal {\n grid-template-columns: 1fr;\n grid-template-rows: auto minmax(0, 1fr);\n height: auto;\n max-height: min(720px, calc(100dvh - 24px));\n min-height: min(70vh, calc(100dvh - 24px));\n }\n\n .meindesk-account-sidebar {\n border-right: none;\n border-bottom: 1px solid var(--md-account-border);\n padding-bottom: 10px;\n height: auto;\n }\n\n .meindesk-account-nav {\n flex-direction: row;\n overflow-x: auto;\n margin-top: 12px;\n }\n\n .meindesk-account-secured {\n display: none;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .meindesk-experience,\n .meindesk-form-transition,\n .meindesk-fade-presence,\n .meindesk-fade-enter,\n .meindesk-fade-exit,\n .meindesk-collapse,\n .meindesk-menu,\n .meindesk-toast,\n .meindesk-auth-loader-ring,\n .meindesk-skeleton {\n animation: none !important;\n transition: none !important;\n }\n\n .meindesk-fade-enter,\n .meindesk-fade-exit,\n .meindesk-fade-shown {\n opacity: 1 !important;\n transform: none !important;\n }\n\n .meindesk-account-overlay {\n transition: opacity var(--md-motion-instant) var(--md-motion-ease) !important;\n }\n\n .meindesk-account-modal {\n transform: none !important;\n transition: opacity var(--md-motion-instant) var(--md-motion-ease) !important;\n }\n\n .meindesk-account-nav-item,\n .meindesk-account-close,\n .meindesk-account-action,\n .meindesk-account-ellipsis,\n .meindesk-account-btn-primary,\n .meindesk-account-btn-secondary,\n .meindesk-account-input,\n .meindesk-account-select {\n transition: none !important;\n }\n\n .meindesk-account-panel-enter,\n .meindesk-account-expander,\n .meindesk-account-menu,\n .meindesk-account-banner {\n animation: none !important;\n }\n}\n`;\n\nlet stylesInjected = false;\n\nexport function ensureAuthStyles(): void {\n if (typeof document === \"undefined\") return;\n\n const existing = document.getElementById(\"meindesk-auth-styles\");\n if (existing) {\n existing.textContent = authStyles;\n stylesInjected = true;\n return;\n }\n\n const style = document.createElement(\"style\");\n style.id = \"meindesk-auth-styles\";\n style.textContent = authStyles;\n document.head.appendChild(style);\n stylesInjected = true;\n}\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { ensureAuthStyles } from \"../styles\";\n\nexport type AuthToastTone = \"success\" | \"error\" | \"info\";\n\nexport interface AuthToastItem {\n id: string;\n message: string;\n tone: AuthToastTone;\n}\n\ninterface AuthToastContextValue {\n toasts: AuthToastItem[];\n push: (message: string, tone?: AuthToastTone) => void;\n dismiss: (id: string) => void;\n}\n\nconst AuthToastContext = createContext<AuthToastContextValue | null>(null);\n\nconst MAX_STACK = 2;\nconst TTL_MS = 3200;\n\nexport function AuthToastProvider({ children }: { children: ReactNode }) {\n const [toasts, setToasts] = useState<AuthToastItem[]>([]);\n\n useEffect(() => {\n ensureAuthStyles();\n }, []);\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const push = useCallback(\n (message: string, tone: AuthToastTone = \"success\") => {\n const trimmed = message.trim();\n if (!trimmed) return;\n\n setToasts((prev) => {\n if (prev.some((t) => t.message === trimmed && t.tone === tone)) {\n return prev;\n }\n const id = `toast-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n const next = [...prev, { id, message: trimmed, tone }].slice(-MAX_STACK);\n window.setTimeout(() => dismiss(id), TTL_MS);\n return next;\n });\n },\n [dismiss],\n );\n\n const value = useMemo(\n () => ({ toasts, push, dismiss }),\n [toasts, push, dismiss],\n );\n\n return (\n <AuthToastContext.Provider value={value}>\n {children}\n <AuthToastViewport />\n </AuthToastContext.Provider>\n );\n}\n\nexport function useAuthToast(): AuthToastContextValue {\n const ctx = useContext(AuthToastContext);\n if (!ctx) {\n return {\n toasts: [],\n push: () => {},\n dismiss: () => {},\n };\n }\n return ctx;\n}\n\nfunction AuthToastViewport() {\n const { toasts, dismiss } = useAuthToast();\n if (!toasts.length) return null;\n\n return (\n <div className=\"meindesk-root meindesk-toast-viewport\" aria-live=\"polite\" aria-relevant=\"additions\">\n {toasts.map((toast) => (\n <div\n key={toast.id}\n className={`meindesk-toast meindesk-toast-${toast.tone}`}\n role=\"status\"\n >\n <span>{toast.message}</span>\n <button\n type=\"button\"\n className=\"meindesk-toast-dismiss\"\n aria-label=\"Dismiss\"\n onClick={() => dismiss(toast.id)}\n >\n ×\n </button>\n </div>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport {\n createContext,\n createElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n MeindeskClient,\n MeindeskApiError,\n SESSION_COOKIE_NAME,\n clearSessionTokenCookie,\n getSessionTokenFromCookie,\n setSessionTokenCookie,\n type AuthConfig,\n type AuthResult,\n type Session,\n type SignInData,\n type SignInResult,\n type SignUpData,\n type User,\n} from \"@meindesk/sdk\";\nimport { AuthToastProvider } from \"./components/AuthToast\";\nimport { ensureAuthStyles } from \"./styles\";\n\nconst OAUTH_PROVIDERS = new Set([\n \"google\",\n \"github\",\n \"discord\",\n \"apple\",\n \"facebook\",\n \"microsoft\",\n]);\n\nexport interface AuthContextValue {\n isLoaded: boolean;\n isSignedIn: boolean;\n user: User | null;\n session: Session | null;\n sessionToken: string | null;\n config: AuthConfig | null;\n client: MeindeskClient;\n /** Set when OAuth code exchange fails during bootstrap. */\n oauthError: string | null;\n signIn: (data: SignInData) => Promise<SignInResult>;\n signUp: (data: SignUpData) => Promise<AuthResult>;\n signOut: () => Promise<void>;\n verifyMfa: (data: { mfaToken: string; code: string }) => Promise<AuthResult>;\n startOAuth: (\n provider: string,\n options?: {\n redirectUrl?: string;\n purpose?: \"sign_in\" | \"link\";\n sessionToken?: string;\n },\n ) => void;\n exchangeOAuthCode: (code: string) => Promise<AuthResult>;\n setActive: (result: AuthResult) => void;\n refreshUser: () => Promise<User | null>;\n /** Refetch application auth config (experience, providers, settings). */\n reloadConfig: () => Promise<void>;\n}\n\nconst AuthContext = createContext<AuthContextValue | null>(null);\n\nexport interface AuthProviderProps {\n /** Defaults to `NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY`. */\n publishableKey?: string;\n /** Defaults to `NEXT_PUBLIC_API_URL` or http://localhost:4000. */\n apiUrl?: string;\n children: ReactNode;\n}\n\nfunction resolvePublishableKey(explicit?: string): string {\n // Next.js only inlines *static* NEXT_PUBLIC_* access in client bundles.\n // Dynamic process.env[name] stays undefined at runtime.\n const fromEnv =\n typeof process !== \"undefined\"\n ? process.env.NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY\n : undefined;\n const key = explicit?.trim() || fromEnv?.trim() || \"\";\n if (!key) {\n throw new Error(\n \"Meindesk AuthProvider requires a publishable key. Set NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY or pass publishableKey.\",\n );\n }\n return key;\n}\n\nfunction resolveApiUrl(explicit?: string): string | undefined {\n const fromProp = explicit?.trim();\n if (fromProp) return fromProp;\n const fromEnv =\n typeof process !== \"undefined\" ? process.env.NEXT_PUBLIC_API_URL : undefined;\n return fromEnv?.trim() || undefined;\n}\n\nfunction safePostAuthRedirect(value: string | null): string | null {\n if (!value) return null;\n try {\n if (value.startsWith(\"http://\") || value.startsWith(\"https://\")) {\n const url = new URL(value);\n if (url.origin === window.location.origin) {\n return `${url.pathname}${url.search}` || \"/\";\n }\n return null;\n }\n if (value.startsWith(\"/\") && !value.startsWith(\"//\")) return value;\n } catch {\n return null;\n }\n return null;\n}\n\nexport function AuthProvider({\n publishableKey: publishableKeyProp,\n apiUrl: apiUrlProp,\n children,\n}: AuthProviderProps) {\n const publishableKey = useMemo(\n () => resolvePublishableKey(publishableKeyProp),\n [publishableKeyProp],\n );\n const apiUrl = useMemo(() => resolveApiUrl(apiUrlProp), [apiUrlProp]);\n\n const client = useMemo(\n () => new MeindeskClient({ publishableKey, apiUrl }),\n [publishableKey, apiUrl],\n );\n\n const [isLoaded, setIsLoaded] = useState(false);\n const [user, setUser] = useState<User | null>(null);\n const [session, setSession] = useState<Session | null>(null);\n const [sessionToken, setSessionToken] = useState<string | null>(null);\n const [config, setConfig] = useState<AuthConfig | null>(null);\n const [oauthError, setOauthError] = useState<string | null>(null);\n\n useEffect(() => {\n ensureAuthStyles();\n }, []);\n\n const setActive = useCallback((result: AuthResult) => {\n setSessionToken(result.sessionToken);\n setUser(result.user);\n setSession(result.session);\n setSessionTokenCookie(result.sessionToken);\n setOauthError(null);\n }, []);\n\n const clearActive = useCallback(() => {\n setSessionToken(null);\n setUser(null);\n setSession(null);\n clearSessionTokenCookie();\n }, []);\n\n const loadConfig = useCallback(async () => {\n try {\n const cfg = await client.getConfig();\n setConfig(cfg);\n } catch (err) {\n const message =\n err instanceof MeindeskApiError\n ? err.message\n : err instanceof Error\n ? err.message\n : \"Failed to load auth config\";\n console.warn(\"[meindesk] getConfig failed:\", message);\n // Keep last good config if any\n }\n }, [client]);\n\n const reloadConfig = useCallback(async () => {\n await loadConfig();\n }, [loadConfig]);\n\n useEffect(() => {\n let cancelled = false;\n\n async function bootstrap() {\n try {\n await loadConfig();\n if (cancelled) return;\n\n if (typeof window !== \"undefined\") {\n const params = new URLSearchParams(window.location.search);\n const oauthCode = params.get(\"code\");\n const oauthProvider = params.get(\"provider\");\n const linkedProvider = params.get(\"linked\");\n const postAuth = safePostAuthRedirect(params.get(\"redirect_url\"));\n\n if (linkedProvider && OAUTH_PROVIDERS.has(linkedProvider)) {\n params.delete(\"linked\");\n const clean = `${window.location.pathname}${\n params.toString() ? `?${params}` : \"\"\n }${window.location.hash}`;\n window.history.replaceState({}, \"\", clean);\n }\n\n if (\n oauthCode &&\n oauthProvider &&\n OAUTH_PROVIDERS.has(oauthProvider)\n ) {\n try {\n const result = await client.exchangeOAuthCode(oauthCode);\n if (cancelled) return;\n setActive(result);\n\n params.delete(\"code\");\n params.delete(\"provider\");\n const clean = `${window.location.pathname}${\n params.toString() ? `?${params}` : \"\"\n }${window.location.hash}`;\n window.history.replaceState({}, \"\", clean);\n\n if (postAuth) {\n window.location.assign(postAuth);\n return;\n }\n\n if (!cancelled) setIsLoaded(true);\n return;\n } catch (err) {\n const message =\n err instanceof MeindeskApiError\n ? err.message\n : err instanceof TypeError &&\n /failed to fetch|networkerror|load failed/i.test(\n err.message,\n )\n ? \"Unable to reach the Meindesk API (network/CORS). Check NEXT_PUBLIC_API_URL and that the API is running.\"\n : err instanceof Error\n ? err.message\n : \"OAuth sign-in failed\";\n console.error(\"[meindesk] OAuth code exchange failed:\", message);\n if (!cancelled) setOauthError(message);\n // Fall through to normal session bootstrap\n }\n }\n }\n\n const token = getSessionTokenFromCookie();\n const data = token\n ? await client.getSession(token)\n : await client.getSession();\n if (cancelled) return;\n\n if (data.session && data.user) {\n const restored = data.sessionToken || token;\n if (restored) {\n setSessionTokenCookie(restored);\n setSessionToken(restored);\n } else {\n setSessionToken(null);\n }\n setUser(data.user);\n setSession(data.session);\n } else if (!cancelled) {\n clearSessionTokenCookie();\n setSessionToken(null);\n setUser(null);\n setSession(null);\n }\n } catch {\n if (!cancelled) {\n clearSessionTokenCookie();\n setSessionToken(null);\n setUser(null);\n setSession(null);\n }\n } finally {\n if (!cancelled) setIsLoaded(true);\n }\n }\n\n void bootstrap();\n\n return () => {\n cancelled = true;\n };\n }, [client, setActive, loadConfig]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n function onFocus() {\n void loadConfig();\n }\n\n function onVisibility() {\n if (document.visibilityState === \"visible\") {\n void loadConfig();\n }\n }\n\n window.addEventListener(\"focus\", onFocus);\n document.addEventListener(\"visibilitychange\", onVisibility);\n return () => {\n window.removeEventListener(\"focus\", onFocus);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n };\n }, [loadConfig]);\n\n const signIn = useCallback(\n async (data: SignInData) => {\n const result = await client.signIn(data);\n if (result.status === \"mfa_required\") {\n return result;\n }\n setActive(result);\n return result;\n },\n [client, setActive],\n );\n\n const verifyMfa = useCallback(\n async (data: { mfaToken: string; code: string }) => {\n const result = await client.verifyMfa(data);\n setActive(result);\n return result;\n },\n [client, setActive],\n );\n\n const signUp = useCallback(\n async (data: SignUpData) => {\n const result = await client.signUp(data);\n setActive(result);\n return result;\n },\n [client, setActive],\n );\n\n const startOAuth = useCallback(\n (\n provider: string,\n options?: {\n redirectUrl?: string;\n purpose?: \"sign_in\" | \"link\";\n sessionToken?: string;\n },\n ) => {\n client.startOAuth(provider, options);\n },\n [client],\n );\n\n const exchangeOAuthCode = useCallback(\n async (code: string) => {\n const result = await client.exchangeOAuthCode(code);\n setActive(result);\n return result;\n },\n [client, setActive],\n );\n\n const signOut = useCallback(async () => {\n const token = sessionToken ?? getSessionTokenFromCookie();\n try {\n if (token) await client.signOut(token);\n } finally {\n clearActive();\n }\n }, [client, sessionToken, clearActive]);\n\n const refreshUser = useCallback(async () => {\n const token = sessionToken ?? getSessionTokenFromCookie();\n if (!token) return null;\n const next = await client.getUser(token);\n setUser(next);\n return next;\n }, [client, sessionToken]);\n\n const value = useMemo<AuthContextValue>(\n () => ({\n isLoaded,\n isSignedIn: Boolean(sessionToken && user),\n user,\n session,\n sessionToken,\n config,\n client,\n oauthError,\n signIn,\n signUp,\n signOut,\n verifyMfa,\n startOAuth,\n exchangeOAuthCode,\n setActive,\n refreshUser,\n reloadConfig,\n }),\n [\n isLoaded,\n user,\n session,\n sessionToken,\n config,\n client,\n oauthError,\n signIn,\n signUp,\n signOut,\n verifyMfa,\n startOAuth,\n exchangeOAuthCode,\n setActive,\n refreshUser,\n reloadConfig,\n ],\n );\n\n return createElement(\n AuthToastProvider,\n null,\n createElement(AuthContext.Provider, { value }, children),\n );\n}\n\nexport function useAuthContext(): AuthContextValue {\n const ctx = useContext(AuthContext);\n if (!ctx) {\n throw new Error(\"useAuth must be used within an AuthProvider\");\n }\n return ctx;\n}\n\nexport { AuthContext, SESSION_COOKIE_NAME };\n","\"use client\";\n\nimport { useAuthContext } from \"./provider\";\n\nexport function useAuth() {\n const {\n isLoaded,\n isSignedIn,\n user,\n session,\n sessionToken,\n signIn,\n signUp,\n signOut,\n } = useAuthContext();\n\n return {\n isLoaded,\n isSignedIn,\n user,\n session,\n sessionToken,\n signIn,\n signUp,\n signOut,\n };\n}\n\nexport function useUser() {\n const { isLoaded, isSignedIn, user } = useAuthContext();\n return { isLoaded, isSignedIn, user };\n}\n\nexport function useSession() {\n const { isLoaded, session, sessionToken } = useAuthContext();\n return { isLoaded, session, sessionToken };\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useAuthContext } from \"./provider\";\n\nexport interface ConditionalProps {\n children: ReactNode;\n fallback?: ReactNode;\n}\n\nexport function SignedIn({ children, fallback = null }: ConditionalProps) {\n const { isLoaded, isSignedIn } = useAuthContext();\n if (!isLoaded) return null;\n return isSignedIn ? children : fallback;\n}\n\nexport function SignedOut({ children, fallback = null }: ConditionalProps) {\n const { isLoaded, isSignedIn } = useAuthContext();\n if (!isLoaded) return null;\n return !isSignedIn ? children : fallback;\n}\n\nexport interface ProtectProps extends ConditionalProps {\n /** When false, render fallback even if signed in. */\n condition?: boolean;\n}\n\nexport function Protect({\n children,\n fallback = null,\n condition = true,\n}: ProtectProps) {\n const { isLoaded, isSignedIn } = useAuthContext();\n if (!isLoaded) return null;\n if (!isSignedIn || !condition) return fallback;\n return children;\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nconst QUERY = \"(prefers-reduced-motion: reduce)\";\n\nexport function getPrefersReducedMotion(): boolean {\n if (typeof window === \"undefined\" || !window.matchMedia) return false;\n return window.matchMedia(QUERY).matches;\n}\n\n/** Subscribe to prefers-reduced-motion. Prefer opacity-only / instant swaps when true. */\nexport function useReducedMotion(): boolean {\n const [reduced, setReduced] = useState(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n const mql = window.matchMedia(QUERY);\n const update = () => setReduced(mql.matches);\n update();\n mql.addEventListener(\"change\", update);\n return () => mql.removeEventListener(\"change\", update);\n }, []);\n\n return reduced;\n}\n","\"use client\";\n\nimport {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { MOTION_DURATION } from \"./tokens\";\nimport { useReducedMotion } from \"./useReducedMotion\";\n\nexport interface FadePresenceProps {\n /** When this changes, content crossfades. */\n contentKey: string;\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n /** Skip Y translate (opacity only). */\n opacityOnly?: boolean;\n}\n\n/**\n * Keyed crossfade. Latest key wins immediately (interruptible — no queue).\n */\nexport function FadePresence({\n contentKey,\n children,\n className,\n style,\n opacityOnly = false,\n}: FadePresenceProps) {\n const reduce = useReducedMotion();\n const [activeKey, setActiveKey] = useState(contentKey);\n const [activeChildren, setActiveChildren] = useState(children);\n const [phase, setPhase] = useState<\"shown\" | \"exiting\" | \"entering\">(\n \"shown\",\n );\n const pendingRef = useRef<{ key: string; node: ReactNode } | null>(null);\n const childrenRef = useRef(children);\n childrenRef.current = children;\n\n useEffect(() => {\n if (contentKey === activeKey) {\n setActiveChildren(children);\n return;\n }\n\n if (reduce) {\n setActiveKey(contentKey);\n setActiveChildren(children);\n setPhase(\"shown\");\n return;\n }\n\n pendingRef.current = { key: contentKey, node: children };\n setPhase(\"exiting\");\n }, [contentKey, children, activeKey, reduce]);\n\n useEffect(() => {\n if (phase !== \"exiting\") return;\n const t = window.setTimeout(() => {\n const pending = pendingRef.current;\n if (pending) {\n setActiveKey(pending.key);\n setActiveChildren(pending.node);\n pendingRef.current = null;\n }\n setPhase(\"entering\");\n }, MOTION_DURATION.fast);\n return () => window.clearTimeout(t);\n }, [phase]);\n\n useEffect(() => {\n if (phase !== \"entering\") return;\n const t = window.setTimeout(() => setPhase(\"shown\"), MOTION_DURATION.fast);\n return () => window.clearTimeout(t);\n }, [phase]);\n\n const phaseClass =\n phase === \"exiting\"\n ? \"meindesk-fade-exit\"\n : phase === \"entering\"\n ? \"meindesk-fade-enter\"\n : \"meindesk-fade-shown\";\n\n return (\n <div\n className={[\n \"meindesk-fade-presence\",\n opacityOnly ? \"meindesk-fade-opacity-only\" : \"\",\n phaseClass,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={style}\n data-phase={phase}\n >\n {activeChildren}\n </div>\n );\n}\n","\"use client\";\n\nimport {\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { FadePresence } from \"./FadePresence\";\nimport { useReducedMotion } from \"./useReducedMotion\";\n\nexport interface FormTransitionProps {\n contentKey: string;\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Stable auth form shell: crossfade content and tween height so the card\n * does not collapse then expand between steps.\n */\nexport function FormTransition({\n contentKey,\n children,\n className,\n style,\n}: FormTransitionProps) {\n const reduce = useReducedMotion();\n const shellRef = useRef<HTMLDivElement | null>(null);\n const innerRef = useRef<HTMLDivElement | null>(null);\n const [height, setHeight] = useState<number | \"auto\">(\"auto\");\n const prevKey = useRef(contentKey);\n\n useLayoutEffect(() => {\n const inner = innerRef.current;\n const shell = shellRef.current;\n if (!inner || !shell) return;\n\n const next = inner.scrollHeight;\n\n if (reduce || prevKey.current === contentKey) {\n setHeight(\"auto\");\n prevKey.current = contentKey;\n return;\n }\n\n const from = shell.getBoundingClientRect().height || next;\n setHeight(from);\n prevKey.current = contentKey;\n\n requestAnimationFrame(() => {\n setHeight(next);\n window.setTimeout(() => setHeight(\"auto\"), 220);\n });\n }, [contentKey, children, reduce]);\n\n return (\n <div\n ref={shellRef}\n className={[\"meindesk-form-transition\", className].filter(Boolean).join(\" \")}\n style={{\n ...style,\n height: height === \"auto\" ? undefined : height,\n overflow: height === \"auto\" ? undefined : \"hidden\",\n }}\n >\n <div ref={innerRef}>\n <FadePresence contentKey={contentKey}>{children}</FadePresence>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties, HTMLAttributes } from \"react\";\n\nexport type AuthLoaderVariant =\n | \"inline\"\n | \"button\"\n | \"content\"\n | \"page\"\n | \"modal\";\n\nexport interface AuthLoaderProps extends HTMLAttributes<HTMLDivElement> {\n variant?: AuthLoaderVariant;\n label?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nconst SIZE: Record<AuthLoaderVariant, number> = {\n inline: 16,\n button: 14,\n content: 22,\n page: 28,\n modal: 24,\n};\n\n/** Shared thin-ring spinner for auth hydration, buttons, and modals. */\nexport function AuthLoader({\n variant = \"inline\",\n label,\n className,\n style,\n ...rest\n}: AuthLoaderProps) {\n const size = SIZE[variant];\n const showLabel = Boolean(label) && (variant === \"page\" || variant === \"modal\" || variant === \"content\");\n\n return (\n <div\n className={[\n \"meindesk-auth-loader\",\n `meindesk-auth-loader-${variant}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={style}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={label || \"Loading\"}\n {...rest}\n >\n <span\n className=\"meindesk-auth-loader-ring\"\n style={{ width: size, height: size }}\n aria-hidden\n />\n {showLabel ? (\n <span className=\"meindesk-auth-loader-label\">{label}</span>\n ) : null}\n </div>\n );\n}\n","import type { AppearanceConfig, AuthExperienceConfig } from \"@meindesk/auth-config\";\nimport { radiusToPx } from \"@meindesk/auth-config\";\nimport type { CSSProperties } from \"react\";\n\nconst DARK_APPEARANCE: Partial<AppearanceConfig> = {\n backgroundColor: \"#0b1220\",\n foregroundColor: \"#f8fafc\",\n mutedColor: \"#94a3b8\",\n borderColor: \"#1e293b\",\n surfaceColor: \"#111827\",\n};\n\nexport function appearanceToCssVars(\n appearance: AppearanceConfig,\n theme: \"light\" | \"dark\" = \"light\",\n): CSSProperties {\n const tokens =\n theme === \"dark\" ? { ...appearance, ...DARK_APPEARANCE, primaryColor: appearance.primaryColor } : appearance;\n\n const radius = radiusToPx(tokens.radius);\n const shadow =\n tokens.cardStyle === \"elevated\"\n ? \"0 1px 2px rgba(15, 23, 42, 0.06), 0 8px 24px rgba(15, 23, 42, 0.08)\"\n : \"none\";\n\n return {\n [\"--md-bg\" as string]: tokens.backgroundColor,\n [\"--md-surface\" as string]: tokens.surfaceColor,\n [\"--md-border\" as string]: tokens.borderColor,\n [\"--md-text\" as string]: tokens.foregroundColor,\n [\"--md-muted\" as string]: tokens.mutedColor,\n [\"--md-primary\" as string]: tokens.primaryColor,\n [\"--md-primary-hover\" as string]: tokens.primaryColor,\n [\"--md-radius\" as string]: radius,\n [\"--md-shadow\" as string]: shadow,\n [\"--md-heading-size\" as string]: tokens.headingSize,\n [\"--md-body-size\" as string]: tokens.bodySize,\n fontFamily: tokens.fontFamily,\n color: tokens.foregroundColor,\n } as CSSProperties;\n}\n\nexport function resolveExperienceConfig(\n config: AuthExperienceConfig | null | undefined,\n fallback: AuthExperienceConfig,\n): AuthExperienceConfig {\n return config ?? fallback;\n}\n","\"use client\";\n\nimport type { AppearanceConfig, AuthExperienceConfig } from \"@meindesk/auth-config\";\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { appearanceToCssVars } from \"./appearance\";\n\nexport function AuthShell({\n config,\n theme = \"light\",\n className,\n style,\n children,\n}: {\n config: AuthExperienceConfig;\n theme?: \"light\" | \"dark\";\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}) {\n const appearance = config.appearance;\n const vars = appearanceToCssVars(appearance, theme);\n const layout = appearance.layout;\n const cardClass =\n layout === \"minimal\"\n ? \"meindesk-card meindesk-card-minimal\"\n : appearance.cardStyle === \"flat\"\n ? \"meindesk-card meindesk-card-flat\"\n : appearance.cardStyle === \"bordered\"\n ? \"meindesk-card meindesk-card-bordered\"\n : \"meindesk-card\";\n\n return (\n <div\n className={[\"meindesk-root\", `meindesk-layout-${layout}`, className]\n .filter(Boolean)\n .join(\" \")}\n style={{ ...vars, ...style }}\n data-theme={theme}\n >\n <div className={cardClass}>\n <AuthBranding appearance={appearance} appName={config.applicationName} />\n {children}\n {appearance.showMeindeskBranding !== false ? (\n <div className=\"meindesk-secured\">\n <span className=\"meindesk-secured-mark\" aria-hidden>\n ◆\n </span>\n Secured by Meindesk\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction AuthBranding({\n appearance,\n appName,\n}: {\n appearance: AppearanceConfig;\n appName?: string;\n}) {\n const align =\n appearance.logoAlignment === \"left\"\n ? \"flex-start\"\n : appearance.logoAlignment === \"right\"\n ? \"flex-end\"\n : \"center\";\n\n if (!appearance.logoUrl && !appearance.showAppName) return null;\n\n return (\n <div className=\"meindesk-branding\" style={{ justifyContent: align }}>\n {appearance.logoUrl ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img\n className=\"meindesk-logo\"\n src={appearance.logoUrl}\n alt={appName ?? \"Logo\"}\n style={{\n width: appearance.logoSize,\n height: appearance.logoSize,\n objectFit: \"contain\",\n }}\n />\n ) : null}\n {appearance.showAppName && appName ? (\n <div className=\"meindesk-app-name\">{appName}</div>\n ) : null}\n </div>\n );\n}\n\nexport function AuthDivider({ text = \"OR\", enabled = true }: { text?: string; enabled?: boolean }) {\n if (!enabled) return null;\n return (\n <div className=\"meindesk-divider\" role=\"separator\">\n <span>{text}</span>\n </div>\n );\n}\n\nexport function AuthFooterLink({\n children,\n onClick,\n}: {\n children: ReactNode;\n onClick?: () => void;\n}) {\n return (\n <p className=\"meindesk-footer\">\n <button type=\"button\" className=\"meindesk-link\" onClick={onClick}>\n {children}\n </button>\n </p>\n );\n}\n","\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport type { ProviderConfig, ProviderId } from \"@meindesk/auth-config\";\nimport { AuthLoader } from \"./components/AuthLoader\";\n\nconst ICONS: Record<ProviderId, ReactNode> = {\n google: (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n fill=\"#EA4335\"\n d=\"M12 10.2v3.6h5.1c-.2 1.2-.9 2.2-1.9 2.9l3.1 2.4c1.8-1.7 2.9-4.1 2.9-7 0-.7-.1-1.3-.2-1.9H12z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M5.3 14.3l-.8.6-2.5 1.9C3.5 20 7.4 22.5 12 22.5c2.7 0 5-.9 6.7-2.4l-3.1-2.4c-.9.6-2 .9-3.6.9-2.8 0-5.1-1.9-6-4.4z\"\n />\n <path\n fill=\"#4A90E2\"\n d=\"M2 7.2C1.4 8.4 1 9.7 1 11.1c0 1.4.4 2.7 1 3.9l3.3-2.6c-.2-.6-.3-1.2-.3-1.8 0-.6.1-1.2.3-1.8L2 7.2z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M12 4.9c1.5 0 2.8.5 3.8 1.5l2.8-2.8C16.9 1.9 14.7 1 12 1 7.4 1 3.5 3.5 2 7.2l3.3 2.5C6.9 6.8 9.2 4.9 12 4.9z\"\n />\n </svg>\n ),\n github: (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M12 2C6.48 2 2 6.58 2 12.26c0 4.52 2.87 8.35 6.84 9.7.5.1.68-.22.68-.48 0-.24-.01-.87-.01-1.7-2.78.62-3.37-1.37-3.37-1.37-.45-1.18-1.11-1.5-1.11-1.5-.91-.64.07-.63.07-.63 1 .07 1.53 1.06 1.53 1.06.89 1.56 2.34 1.11 2.91.85.09-.66.35-1.11.63-1.37-2.22-.26-4.55-1.14-4.55-5.07 0-1.12.39-2.03 1.03-2.75-.1-.26-.45-1.3.1-2.7 0 0 .84-.27 2.75 1.05A9.3 9.3 0 0 1 12 6.8c.85 0 1.71.12 2.51.35 1.91-1.32 2.75-1.05 2.75-1.05.55 1.4.2 2.44.1 2.7.64.72 1.03 1.63 1.03 2.75 0 3.94-2.34 4.8-4.57 5.06.36.32.68.94.68 1.9 0 1.37-.01 2.47-.01 2.81 0 .26.18.58.69.48A10.27 10.27 0 0 0 22 12.26C22 6.58 17.52 2 12 2z\" />\n </svg>\n ),\n discord: (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" fill=\"#5865F2\">\n <path d=\"M20.3 4.4A16.5 16.5 0 0 0 15.9 3l-.2.4a14.3 14.3 0 0 1 3.4 1.7 13.8 13.8 0 0 0-12.2 0A12.8 12.8 0 0 1 9.9 3l-.2-.1A16.4 16.4 0 0 0 3.6 4.5C1.3 8.1.7 11.6 1 15.1A16.6 16.6 0 0 0 6.1 17.7l.4-.7a10.7 10.7 0 0 1-1.6-.8l.4-.3c3.2 1.5 6.7 1.5 9.8 0l.4.3c-.5.3-1 .6-1.6.8l.4.7a16.5 16.5 0 0 0 5.1-2.6c.4-4-.6-7.5-2.5-10.7zM8.7 13.4c-1 0-1.8-.9-1.8-2s.8-2 1.8-2 1.8.9 1.8 2-.8 2-1.8 2zm6.6 0c-1 0-1.8-.9-1.8-2s.8-2 1.8-2 1.8.9 1.8 2-.8 2-1.8 2z\" />\n </svg>\n ),\n apple: (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M16.4 12.6c0-2.3 1.9-3.4 2-3.5-1.1-1.6-2.8-1.8-3.4-1.8-1.4-.2-2.8.9-3.5.9-.7 0-1.9-.8-3.1-.8-1.6 0-3.1 1-3.9 2.5-1.7 2.9-.4 7.2 1.2 9.6.8 1.1 1.7 2.4 3 2.3 1.2-.1 1.6-.7 3.1-.7s1.8.7 3.1.7c1.3 0 2.1-1.1 2.9-2.3.9-1.3 1.3-2.6 1.3-2.6s-2.5-1-2.7-4.3zM14.2 5.5c.7-.8 1.1-1.9 1-3-.9.1-2.1.6-2.7 1.4-.6.7-1.2 1.9-1 3 1 .1 2-.5 2.7-1.4z\" />\n </svg>\n ),\n facebook: (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" fill=\"#1877F2\">\n <path d=\"M22 12.1C22 6.5 17.5 2 11.9 2S1.9 6.5 1.9 12.1c0 5 3.7 9.1 8.4 9.9v-7H7.9v-2.9h2.4V9.9c0-2.4 1.4-3.7 3.6-3.7 1 0 2.1.2 2.1.2v2.3h-1.2c-1.2 0-1.5.7-1.5 1.5v1.8h2.6l-.4 2.9h-2.2v7c4.8-.8 8.5-4.9 8.5-9.8z\" />\n </svg>\n ),\n microsoft: (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill=\"#F25022\" d=\"M3 3h8.5v8.5H3z\" />\n <path fill=\"#7FBA00\" d=\"M12.5 3H21v8.5h-8.5z\" />\n <path fill=\"#00A4EF\" d=\"M3 12.5h8.5V21H3z\" />\n <path fill=\"#FFB900\" d=\"M12.5 12.5H21V21h-8.5z\" />\n </svg>\n ),\n};\n\nexport function ProviderButtons({\n providers,\n position,\n onProviderClick,\n disabled,\n}: {\n providers: ProviderConfig[];\n position: \"before\" | \"after\";\n onProviderClick?: (id: ProviderId) => void;\n disabled?: boolean;\n}) {\n const [busyId, setBusyId] = useState<ProviderId | null>(null);\n const list = providers.filter((p) => p.enabled && p.position === position);\n if (!list.length) return null;\n\n async function handleClick(id: ProviderId) {\n if (disabled || busyId) return;\n setBusyId(id);\n try {\n onProviderClick?.(id);\n } finally {\n // Live OAuth navigates away; preview stays — clear after a short beat.\n window.setTimeout(() => setBusyId(null), 800);\n }\n }\n\n return (\n <div className=\"meindesk-providers\">\n {list.map((provider) => {\n const busy = busyId === provider.id;\n return (\n <button\n key={provider.id}\n type=\"button\"\n className={[\n \"meindesk-provider-button\",\n busy ? \"meindesk-provider-button-busy\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n disabled={disabled || Boolean(busyId)}\n aria-busy={busy || undefined}\n onClick={() => void handleClick(provider.id)}\n >\n {busy ? (\n <AuthLoader variant=\"button\" />\n ) : (\n <span className=\"meindesk-provider-icon\">{ICONS[provider.id]}</span>\n )}\n <span>\n {provider.buttonLabel ?? `Continue with ${provider.id}`}\n </span>\n </button>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport {\n forwardRef,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { AuthLoader } from \"./AuthLoader\";\n\nexport interface LoadingButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement> {\n loading?: boolean;\n loadingLabel?: string;\n /** Keep visible label while spinning (default true). */\n showLabelWhileLoading?: boolean;\n variant?: \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\n /** Skip default `.meindesk-button` styles (host supplies className). */\n bare?: boolean;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}\n\nexport const LoadingButton = forwardRef<HTMLButtonElement, LoadingButtonProps>(\n function LoadingButton(\n {\n loading = false,\n loadingLabel,\n showLabelWhileLoading = true,\n variant = \"primary\",\n bare = false,\n className,\n disabled,\n children,\n type = \"button\",\n ...rest\n },\n ref,\n ) {\n const busy = Boolean(loading);\n const label =\n busy && loadingLabel\n ? loadingLabel\n : busy && !showLabelWhileLoading\n ? null\n : children;\n\n return (\n <button\n ref={ref}\n type={type}\n className={[\n bare ? \"\" : \"meindesk-button\",\n !bare && variant !== \"primary\" ? `meindesk-button-${variant}` : \"\",\n \"meindesk-loading-button\",\n busy ? \"meindesk-loading-button-busy\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n disabled={disabled || busy}\n aria-busy={busy || undefined}\n data-loading={busy ? \"true\" : undefined}\n {...rest}\n >\n <span className=\"meindesk-loading-button-inner\">\n {busy ? (\n <AuthLoader variant=\"button\" className=\"meindesk-loading-button-spinner\" />\n ) : null}\n {label != null ? (\n <span className=\"meindesk-loading-button-label\">{label}</span>\n ) : null}\n </span>\n </button>\n );\n },\n);\n","\"use client\";\n\nimport {\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { useReducedMotion } from \"./useReducedMotion\";\n\nexport interface CollapseTransitionProps {\n open: boolean;\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\n/** Reveal / hide inline messages without a harsh layout jump. */\nexport function CollapseTransition({\n open,\n children,\n className,\n style,\n}: CollapseTransitionProps) {\n const reduce = useReducedMotion();\n const ref = useRef<HTMLDivElement | null>(null);\n const [render, setRender] = useState(open);\n const [phase, setPhase] = useState<\"open\" | \"closed\" | \"opening\" | \"closing\">(\n open ? \"open\" : \"closed\",\n );\n\n useLayoutEffect(() => {\n if (open) {\n setRender(true);\n setPhase(reduce ? \"open\" : \"opening\");\n const t = window.setTimeout(\n () => setPhase(\"open\"),\n reduce ? 0 : 160,\n );\n return () => window.clearTimeout(t);\n }\n\n if (!render) return;\n setPhase(reduce ? \"closed\" : \"closing\");\n const t = window.setTimeout(\n () => {\n setPhase(\"closed\");\n setRender(false);\n },\n reduce ? 0 : 160,\n );\n return () => window.clearTimeout(t);\n }, [open, reduce, render]);\n\n if (!render) return null;\n\n return (\n <div\n ref={ref}\n className={[\n \"meindesk-collapse\",\n `meindesk-collapse-${phase}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={style}\n data-open={open ? \"true\" : \"false\"}\n >\n <div className=\"meindesk-collapse-inner\">{children}</div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { CollapseTransition } from \"../motion/CollapseTransition\";\n\nexport interface FieldErrorProps {\n message?: string | null;\n children?: ReactNode;\n className?: string;\n style?: CSSProperties;\n id?: string;\n /** `form` = banner under the form; `field` = compact message under an input. */\n variant?: \"form\" | \"field\";\n}\n\nexport function FieldError({\n message,\n children,\n className,\n style,\n id,\n variant = \"form\",\n}: FieldErrorProps) {\n const content = message ?? children;\n const open = Boolean(content);\n\n return (\n <CollapseTransition open={open}>\n <div\n id={id}\n className={[\n variant === \"field\" ? \"meindesk-field-error\" : \"meindesk-error\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={style}\n role=\"alert\"\n >\n {content}\n </div>\n </CollapseTransition>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { CollapseTransition } from \"../motion/CollapseTransition\";\n\nexport interface SuccessIndicatorProps {\n message?: string | null;\n children?: ReactNode;\n show?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function SuccessIndicator({\n message,\n children,\n show,\n className,\n style,\n}: SuccessIndicatorProps) {\n const content = message ?? children;\n const open = show ?? Boolean(content);\n\n return (\n <CollapseTransition open={open}>\n <div\n className={[\n \"meindesk-success\",\n \"meindesk-success-indicator\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={style}\n role=\"status\"\n >\n <span className=\"meindesk-success-check\" aria-hidden>\n ✓\n </span>\n <span>{content}</span>\n </div>\n </CollapseTransition>\n );\n}\n","import { MeindeskApiError } from \"@meindesk/sdk\";\n\nexport type AuthFormFieldErrors = Record<string, string>;\n\nexport interface AuthFormErrorResult {\n /** Banner / form-level message. */\n formError: string | null;\n /** Per-field messages keyed by field id (email, password, code, …). */\n fieldErrors: AuthFormFieldErrors;\n}\n\nconst FIELD_CODES: Record<string, string> = {\n USER_EXISTS: \"email\",\n EMAIL_TAKEN: \"email\",\n INVALID_EMAIL: \"email\",\n EMAIL_NOT_VERIFIED: \"email\",\n WEAK_PASSWORD: \"password\",\n PASSWORD_TOO_SHORT: \"password\",\n INVALID_PASSWORD: \"password\",\n INVALID_TOKEN: \"code\",\n INVALID_CODE: \"code\",\n MFA_INVALID: \"code\",\n INVALID_MFA_CODE: \"code\",\n};\n\n/** Prefer API message; fall back to a readable default for common codes. */\nexport function formatAuthError(\n err: unknown,\n fallback = \"Something went wrong. Please try again.\",\n): string {\n if (err instanceof MeindeskApiError) {\n if (err.message?.trim()) return err.message.trim();\n switch (err.code) {\n case \"INVALID_CREDENTIALS\":\n return \"Incorrect email or password\";\n case \"USER_EXISTS\":\n return \"An account with this email already exists\";\n case \"USER_DISABLED\":\n return \"This account has been disabled\";\n case \"EMAIL_NOT_VERIFIED\":\n return \"Verify your email before signing in\";\n case \"RATE_LIMITED\":\n return \"Too many attempts. Please wait and try again\";\n case \"PASSWORD_AUTH_DISABLED\":\n return \"Password sign-in is not enabled for this app\";\n case \"WEAK_PASSWORD\":\n return \"Password does not meet the requirements\";\n case \"INVALID_TOKEN\":\n return \"This link or code is invalid or has expired\";\n case \"UNAUTHORIZED\":\n return \"You need to sign in again\";\n default:\n return fallback;\n }\n }\n\n if (err instanceof TypeError && /fetch|network|load failed/i.test(err.message)) {\n return \"Unable to reach the authentication service. Check your connection and try again.\";\n }\n\n if (err instanceof Error && err.message.trim()) {\n return err.message.trim();\n }\n\n return fallback;\n}\n\n/**\n * Map an API/client error into form + field errors.\n * Credential failures stay form-level (no email/password leak via field highlights).\n */\nexport function mapAuthErrorToForm(err: unknown): AuthFormErrorResult {\n const message = formatAuthError(err);\n const fieldErrors: AuthFormFieldErrors = {};\n\n if (err instanceof MeindeskApiError) {\n const field = FIELD_CODES[err.code];\n if (field) {\n fieldErrors[field] = message;\n return { formError: null, fieldErrors };\n }\n\n if (err.code === \"INVALID_CREDENTIALS\") {\n return { formError: message, fieldErrors: {} };\n }\n }\n\n return { formError: message, fieldErrors: {} };\n}\n","import type { ProfileFieldConfig } from \"@meindesk/auth-config\";\nimport type { AuthFormFieldErrors } from \"./errors\";\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst DEFAULT_PASSWORD_MIN = 8;\n\nexport interface ValidateAuthFieldsOptions {\n /** Extra fields not in ProfileFieldConfig (e.g. MFA `code`). */\n extras?: Array<{\n id: string;\n label?: string;\n required?: boolean;\n minLength?: number;\n kind?: \"email\" | \"password\" | \"code\" | \"text\";\n }>;\n passwordMinLength?: number;\n}\n\nfunction labelFor(field: { id: string; label?: string }): string {\n const raw = field.label?.trim();\n if (raw) return raw;\n switch (field.id) {\n case \"email\":\n return \"Email\";\n case \"password\":\n return \"Password\";\n case \"firstName\":\n return \"First name\";\n case \"lastName\":\n return \"Last name\";\n case \"username\":\n return \"Username\";\n case \"phoneNumber\":\n return \"Phone number\";\n case \"code\":\n return \"Code\";\n default:\n return \"This field\";\n }\n}\n\n/** Client-side validation before submit. Returns field errors (empty = valid). */\nexport function validateAuthFields(\n fields: ProfileFieldConfig[] | undefined,\n values: Record<string, string>,\n options: ValidateAuthFieldsOptions = {},\n): AuthFormFieldErrors {\n const errors: AuthFormFieldErrors = {};\n const passwordMin = options.passwordMinLength ?? DEFAULT_PASSWORD_MIN;\n\n for (const field of fields ?? []) {\n if (!field.enabled) continue;\n const value = (values[field.id] ?? \"\").trim();\n const label = labelFor(field);\n\n if (field.required && !value) {\n errors[field.id] = `${label} is required`;\n continue;\n }\n if (!value) continue;\n\n if (field.id === \"email\" && !EMAIL_RE.test(value)) {\n errors[field.id] = \"Enter a valid email address\";\n }\n\n if (field.id === \"password\" && value.length < passwordMin) {\n errors[field.id] = `Password must be at least ${passwordMin} characters`;\n }\n\n if (field.id === \"phoneNumber\" && value.replace(/\\D/g, \"\").length < 7) {\n errors[field.id] = \"Enter a valid phone number\";\n }\n }\n\n for (const extra of options.extras ?? []) {\n const value = (values[extra.id] ?? \"\").trim();\n const label = labelFor({ id: extra.id, label: extra.label });\n\n if ((extra.required ?? true) && !value) {\n errors[extra.id] = `${label} is required`;\n continue;\n }\n if (!value) continue;\n\n if (extra.kind === \"email\" && !EMAIL_RE.test(value)) {\n errors[extra.id] = \"Enter a valid email address\";\n }\n if (extra.kind === \"password\" && value.length < (extra.minLength ?? passwordMin)) {\n errors[extra.id] = `Password must be at least ${extra.minLength ?? passwordMin} characters`;\n }\n if (extra.kind === \"code\") {\n const min = extra.minLength ?? 6;\n if (value.replace(/\\s/g, \"\").length < min) {\n errors[extra.id] = `Enter the ${min}-digit code`;\n }\n }\n }\n\n return errors;\n}\n\nexport function hasFieldErrors(errors: AuthFormFieldErrors): boolean {\n return Object.keys(errors).length > 0;\n}\n\nexport function firstFieldErrorId(\n errors: AuthFormFieldErrors,\n order: string[],\n): string | null {\n for (const id of order) {\n if (errors[id]) return id;\n }\n return Object.keys(errors)[0] ?? null;\n}\n","\"use client\";\n\nimport { useState, type FormEvent, type ReactNode } from \"react\";\nimport type {\n AuthExperienceConfig,\n ExperienceCopy,\n ExperienceId,\n ProfileFieldConfig,\n ProviderId,\n} from \"@meindesk/auth-config\";\nimport { AuthDivider, AuthFooterLink, AuthShell } from \"./shell\";\nimport { ProviderButtons } from \"./providers\";\nimport { LoadingButton } from \"./components/LoadingButton\";\nimport { FieldError } from \"./components/FieldError\";\nimport { SuccessIndicator } from \"./components/SuccessIndicator\";\nimport { mapAuthErrorToForm, type AuthFormFieldErrors } from \"./errors\";\nimport {\n firstFieldErrorId,\n hasFieldErrors,\n validateAuthFields,\n type ValidateAuthFieldsOptions,\n} from \"./validation\";\n\nexport type AuthMode = \"live\" | \"preview\";\n\nexport interface ExperienceScreenProps {\n config: AuthExperienceConfig;\n mode: AuthMode;\n theme?: \"light\" | \"dark\";\n className?: string;\n onNavigate?: (experience: ExperienceId) => void;\n onProviderClick?: (id: ProviderId) => void;\n onSubmit?: (values: Record<string, string>) => void | Promise<void>;\n}\n\nfunction FormFeedback({\n error,\n message,\n}: {\n error?: string | null;\n message?: string | null;\n}) {\n return (\n <>\n <FieldError message={error} variant=\"form\" />\n <SuccessIndicator message={message} />\n </>\n );\n}\n\nfunction SubmitButton({\n pending,\n loadingLabel,\n children,\n}: {\n pending: boolean;\n loadingLabel?: string;\n children: ReactNode;\n}) {\n return (\n <LoadingButton\n type=\"submit\"\n loading={pending}\n loadingLabel={loadingLabel}\n >\n {children}\n </LoadingButton>\n );\n}\n\nfunction focusField(fieldId: string) {\n if (typeof document === \"undefined\") return;\n const escape =\n typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\"\n ? CSS.escape\n : (value: string) => value.replace(/[\"\\\\]/g, \"\\\\$&\");\n const el = document.querySelector<HTMLElement>(\n `[name=\"${escape(fieldId)}\"]`,\n );\n el?.focus();\n}\n\nfunction ProfileFields({\n fields,\n values,\n onChange,\n disabled,\n showPasswordToggle,\n fieldErrors,\n}: {\n fields: ProfileFieldConfig[];\n values: Record<string, string>;\n onChange: (id: string, value: string) => void;\n disabled?: boolean;\n showPasswordToggle?: boolean;\n fieldErrors?: AuthFormFieldErrors;\n}) {\n const [revealed, setRevealed] = useState<Record<string, boolean>>({});\n\n return (\n <>\n {fields\n .filter((f) => f.enabled)\n .map((field) => {\n const isPassword = field.id === \"password\";\n const showToggle =\n isPassword &&\n (field.showPasswordToggle ?? showPasswordToggle ?? true);\n const inputType =\n isPassword && !revealed[field.id]\n ? \"password\"\n : field.id === \"email\"\n ? \"email\"\n : field.id === \"phoneNumber\"\n ? \"tel\"\n : \"text\";\n const error = fieldErrors?.[field.id];\n const errorId = error ? `meindesk-err-${field.id}` : undefined;\n\n return (\n <label key={field.id} className=\"meindesk-field\">\n {field.showLabel !== false ? (\n <span className=\"meindesk-label\">\n {field.label}\n {field.required ? \" *\" : \"\"}\n </span>\n ) : null}\n <div className=\"meindesk-input-wrap\">\n <input\n className={[\n \"meindesk-input\",\n error ? \"meindesk-input-invalid\" : \"\",\n showToggle ? \"meindesk-input-has-action\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n name={field.id}\n type={inputType}\n placeholder={field.placeholder}\n required={field.required}\n disabled={disabled}\n value={values[field.id] ?? \"\"}\n onChange={(e) => onChange(field.id, e.target.value)}\n aria-invalid={error ? true : undefined}\n aria-describedby={errorId}\n autoComplete={\n field.id === \"password\"\n ? \"current-password\"\n : field.id === \"email\"\n ? \"email\"\n : undefined\n }\n />\n {showToggle ? (\n <button\n type=\"button\"\n className=\"meindesk-input-action\"\n aria-label={\n revealed[field.id] ? \"Hide password\" : \"Show password\"\n }\n onClick={() =>\n setRevealed((r) => ({\n ...r,\n [field.id]: !r[field.id],\n }))\n }\n tabIndex={-1}\n >\n <span className=\"meindesk-input-action-icon\">\n {revealed[field.id] ? \"Hide\" : \"Show\"}\n </span>\n </button>\n ) : null}\n </div>\n <FieldError id={errorId} message={error} variant=\"field\" />\n </label>\n );\n })}\n </>\n );\n}\n\nfunction useFormState(fields: ProfileFieldConfig[] | undefined) {\n const [values, setValues] = useState<Record<string, string>>(() => {\n const initial: Record<string, string> = {};\n for (const f of fields ?? []) {\n if (f.enabled) initial[f.id] = \"\";\n }\n return initial;\n });\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [fieldErrors, setFieldErrors] = useState<AuthFormFieldErrors>({});\n const [message, setMessage] = useState<string | null>(null);\n\n function setValue(id: string, value: string) {\n setValues((prev) => ({ ...prev, [id]: value }));\n setFieldErrors((prev) => {\n if (!prev[id]) return prev;\n const next = { ...prev };\n delete next[id];\n return next;\n });\n if (error) setError(null);\n }\n\n function clearErrors() {\n setError(null);\n setFieldErrors({});\n }\n\n return {\n values,\n setValue,\n pending,\n setPending,\n error,\n setError,\n fieldErrors,\n setFieldErrors,\n message,\n setMessage,\n clearErrors,\n };\n}\n\nfunction Header({ copy }: { copy: ExperienceCopy }) {\n return (\n <>\n <h1 className=\"meindesk-title\">{copy.title}</h1>\n {copy.subtitle ? <p className=\"meindesk-subtitle\">{copy.subtitle}</p> : null}\n </>\n );\n}\n\nasync function submitAuthForm({\n mode,\n fields,\n values,\n extras,\n setPending,\n setError,\n setFieldErrors,\n setMessage,\n onSubmit,\n previewMessage,\n}: {\n mode: AuthMode;\n fields?: ProfileFieldConfig[];\n values: Record<string, string>;\n extras?: ValidateAuthFieldsOptions[\"extras\"];\n setPending: (v: boolean) => void;\n setError: (v: string | null) => void;\n setFieldErrors: (v: AuthFormFieldErrors) => void;\n setMessage: (v: string | null) => void;\n onSubmit: ExperienceScreenProps[\"onSubmit\"];\n previewMessage: string;\n}): Promise<boolean> {\n setError(null);\n setMessage(null);\n\n const clientErrors = validateAuthFields(fields, values, { extras });\n if (hasFieldErrors(clientErrors)) {\n setFieldErrors(clientErrors);\n const order = [\n ...(fields ?? []).filter((f) => f.enabled).map((f) => f.id),\n ...(extras ?? []).map((e) => e.id),\n ];\n const first = firstFieldErrorId(clientErrors, order);\n if (first) focusField(first);\n return false;\n }\n\n setFieldErrors({});\n setPending(true);\n try {\n if (mode === \"preview\") {\n await new Promise((r) => setTimeout(r, 400));\n setMessage(previewMessage);\n } else if (onSubmit) {\n await onSubmit(values);\n } else {\n setMessage(previewMessage);\n }\n return true;\n } catch (err) {\n const mapped = mapAuthErrorToForm(err);\n setError(mapped.formError);\n setFieldErrors(mapped.fieldErrors);\n if (hasFieldErrors(mapped.fieldErrors)) {\n const order = [\n ...(fields ?? []).filter((f) => f.enabled).map((f) => f.id),\n ...(extras ?? []).map((e) => e.id),\n \"code\",\n \"email\",\n \"password\",\n ];\n const first = firstFieldErrorId(mapped.fieldErrors, order);\n if (first) focusField(first);\n }\n return false;\n } finally {\n setPending(false);\n }\n}\n\nexport function SignInScreen(props: ExperienceScreenProps) {\n const copy = props.config.experiences.signIn;\n const methods = props.config.methods;\n const form = useFormState(copy.fields);\n const showProviders = props.config.providers.some((p) => p.enabled);\n const showEmailPassword = methods.emailPassword;\n const showMagicLink = methods.magicLink;\n const showPasskeys = methods.passkeys;\n const showPhone = methods.phone;\n const showForm = showEmailPassword || showPhone;\n const showDivider =\n (copy.dividerEnabled ?? true) &&\n showProviders &&\n (showForm || showMagicLink || showPasskeys);\n\n const fields = (copy.fields ?? []).filter((f) => {\n if (!showEmailPassword && (f.id === \"email\" || f.id === \"password\")) {\n if (f.id === \"email\" && (showMagicLink || showPhone)) return true;\n if (f.id === \"password\") return false;\n }\n if (f.id === \"phoneNumber\") return showPhone;\n return f.enabled;\n });\n\n async function onSubmit(e: FormEvent) {\n e.preventDefault();\n const activeFields =\n showMagicLink && !showEmailPassword\n ? fields.filter((f) => f.id === \"email\")\n : fields;\n await submitAuthForm({\n mode: props.mode,\n fields: activeFields,\n values: form.values,\n setPending: form.setPending,\n setError: form.setError,\n setFieldErrors: form.setFieldErrors,\n setMessage: form.setMessage,\n onSubmit: props.onSubmit,\n previewMessage: \"Preview: sign-in submitted\",\n });\n }\n\n return (\n <AuthShell config={props.config} theme={props.theme} className={props.className}>\n <Header copy={copy} />\n <ProviderButtons\n providers={props.config.providers}\n position=\"before\"\n disabled={form.pending}\n onProviderClick={props.onProviderClick}\n />\n {showDivider ? <AuthDivider text={copy.dividerText ?? \"OR\"} /> : null}\n\n {showPasskeys ? (\n <button\n type=\"button\"\n className=\"meindesk-provider-button\"\n disabled={form.pending}\n onClick={() =>\n void submitAuthForm({\n mode: props.mode,\n values: { method: \"passkey\" },\n setPending: form.setPending,\n setError: form.setError,\n setFieldErrors: form.setFieldErrors,\n setMessage: form.setMessage,\n onSubmit: props.onSubmit,\n previewMessage: \"Preview: passkey flow\",\n })\n }\n >\n Continue with passkey\n </button>\n ) : null}\n\n {showMagicLink && !showEmailPassword ? (\n <form className=\"meindesk-form\" onSubmit={onSubmit} noValidate>\n <ProfileFields\n fields={(copy.fields ?? []).filter((f) => f.id === \"email\" && f.enabled)}\n values={form.values}\n onChange={form.setValue}\n disabled={form.pending}\n fieldErrors={form.fieldErrors}\n />\n <FormFeedback error={form.error} message={form.message} />\n <SubmitButton pending={form.pending} loadingLabel={copy.loadingText}>\n Continue with email\n </SubmitButton>\n </form>\n ) : null}\n\n {showForm ? (\n <form className=\"meindesk-form\" onSubmit={onSubmit} noValidate>\n <ProfileFields\n fields={fields}\n values={form.values}\n onChange={form.setValue}\n disabled={form.pending}\n fieldErrors={form.fieldErrors}\n />\n {copy.forgotPasswordEnabled !== false ? (\n <div className=\"meindesk-inline-link\">\n <button\n type=\"button\"\n className=\"meindesk-link\"\n onClick={() => props.onNavigate?.(\"forgotPassword\")}\n >\n {copy.forgotPasswordText ?? \"Forgot password?\"}\n </button>\n </div>\n ) : null}\n <FormFeedback error={form.error} message={form.message} />\n <SubmitButton pending={form.pending} loadingLabel={copy.loadingText}>\n {copy.buttonText}\n </SubmitButton>\n </form>\n ) : null}\n\n <ProviderButtons\n providers={props.config.providers}\n position=\"after\"\n disabled={form.pending}\n onProviderClick={props.onProviderClick}\n />\n\n {copy.showSignUpLink !== false ? (\n <AuthFooterLink onClick={() => props.onNavigate?.(\"signUp\")}>\n {copy.signUpLinkText ?? \"Don't have an account? Sign up\"}\n </AuthFooterLink>\n ) : null}\n </AuthShell>\n );\n}\n\nexport function SignUpScreen(props: ExperienceScreenProps) {\n const copy = props.config.experiences.signUp;\n const methods = props.config.methods;\n const form = useFormState(copy.fields);\n const showProviders = props.config.providers.some((p) => p.enabled);\n const showForm = methods.emailPassword || methods.phone;\n const showDivider =\n (copy.dividerEnabled ?? true) && showProviders && showForm;\n\n const fields = (copy.fields ?? []).filter((f) => {\n if (f.id === \"phoneNumber\") return methods.phone && f.enabled;\n if (f.id === \"password\" || f.id === \"email\") return methods.emailPassword && f.enabled;\n return f.enabled;\n });\n\n async function onSubmit(e: FormEvent) {\n e.preventDefault();\n await submitAuthForm({\n mode: props.mode,\n fields,\n values: form.values,\n setPending: form.setPending,\n setError: form.setError,\n setFieldErrors: form.setFieldErrors,\n setMessage: form.setMessage,\n onSubmit: props.onSubmit,\n previewMessage: \"Preview: sign-up submitted\",\n });\n }\n\n return (\n <AuthShell config={props.config} theme={props.theme} className={props.className}>\n <Header copy={copy} />\n <ProviderButtons\n providers={props.config.providers}\n position=\"before\"\n disabled={form.pending}\n onProviderClick={props.onProviderClick}\n />\n {showDivider ? <AuthDivider text={copy.dividerText ?? \"OR\"} /> : null}\n {showForm ? (\n <form className=\"meindesk-form\" onSubmit={onSubmit} noValidate>\n <ProfileFields\n fields={fields}\n values={form.values}\n onChange={form.setValue}\n disabled={form.pending}\n fieldErrors={form.fieldErrors}\n />\n <FormFeedback error={form.error} message={form.message} />\n <SubmitButton pending={form.pending} loadingLabel={copy.loadingText}>\n {copy.buttonText}\n </SubmitButton>\n </form>\n ) : null}\n <ProviderButtons\n providers={props.config.providers}\n position=\"after\"\n disabled={form.pending}\n onProviderClick={props.onProviderClick}\n />\n {copy.showSignInLink !== false ? (\n <AuthFooterLink onClick={() => props.onNavigate?.(\"signIn\")}>\n {copy.signInLinkText ?? \"Already have an account? Sign in\"}\n </AuthFooterLink>\n ) : null}\n </AuthShell>\n );\n}\n\nexport function ForgotPasswordScreen(props: ExperienceScreenProps) {\n const copy = props.config.experiences.forgotPassword;\n const form = useFormState(copy.fields);\n\n async function onSubmit(e: FormEvent) {\n e.preventDefault();\n await submitAuthForm({\n mode: props.mode,\n fields: (copy.fields ?? []).filter((f) => f.enabled),\n values: form.values,\n setPending: form.setPending,\n setError: form.setError,\n setFieldErrors: form.setFieldErrors,\n setMessage: form.setMessage,\n onSubmit: props.onSubmit,\n previewMessage: \"Preview: reset email sent\",\n });\n }\n\n return (\n <AuthShell config={props.config} theme={props.theme} className={props.className}>\n <Header copy={copy} />\n <form className=\"meindesk-form\" onSubmit={onSubmit} noValidate>\n <ProfileFields\n fields={(copy.fields ?? []).filter((f) => f.enabled)}\n values={form.values}\n onChange={form.setValue}\n disabled={form.pending}\n fieldErrors={form.fieldErrors}\n />\n <FormFeedback error={form.error} message={form.message} />\n <SubmitButton pending={form.pending} loadingLabel={copy.loadingText}>\n {copy.buttonText}\n </SubmitButton>\n </form>\n <AuthFooterLink onClick={() => props.onNavigate?.(\"signIn\")}>\n {copy.signInLinkText ?? \"Back to sign in\"}\n </AuthFooterLink>\n </AuthShell>\n );\n}\n\nexport function ResetPasswordScreen(props: ExperienceScreenProps) {\n const copy = props.config.experiences.resetPassword;\n const form = useFormState(copy.fields);\n\n async function onSubmit(e: FormEvent) {\n e.preventDefault();\n await submitAuthForm({\n mode: props.mode,\n fields: (copy.fields ?? []).filter((f) => f.enabled),\n values: form.values,\n setPending: form.setPending,\n setError: form.setError,\n setFieldErrors: form.setFieldErrors,\n setMessage: form.setMessage,\n onSubmit: props.onSubmit,\n previewMessage: \"Preview: password reset\",\n });\n }\n\n return (\n <AuthShell config={props.config} theme={props.theme} className={props.className}>\n <Header copy={copy} />\n <form className=\"meindesk-form\" onSubmit={onSubmit} noValidate>\n <ProfileFields\n fields={(copy.fields ?? []).filter((f) => f.enabled)}\n values={form.values}\n onChange={form.setValue}\n disabled={form.pending}\n fieldErrors={form.fieldErrors}\n />\n <FormFeedback error={form.error} message={form.message} />\n <SubmitButton pending={form.pending} loadingLabel={copy.loadingText}>\n {copy.buttonText}\n </SubmitButton>\n </form>\n </AuthShell>\n );\n}\n\nexport function MagicLinkScreen(props: ExperienceScreenProps) {\n const copy = props.config.experiences.magicLink;\n const form = useFormState(copy.fields);\n\n async function onSubmit(e: FormEvent) {\n e.preventDefault();\n await submitAuthForm({\n mode: props.mode,\n fields: (copy.fields ?? []).filter((f) => f.enabled),\n values: form.values,\n setPending: form.setPending,\n setError: form.setError,\n setFieldErrors: form.setFieldErrors,\n setMessage: form.setMessage,\n onSubmit: props.onSubmit,\n previewMessage: \"Preview: magic link sent\",\n });\n }\n\n return (\n <AuthShell config={props.config} theme={props.theme} className={props.className}>\n <Header copy={copy} />\n <form className=\"meindesk-form\" onSubmit={onSubmit} noValidate>\n <ProfileFields\n fields={(copy.fields ?? []).filter((f) => f.enabled)}\n values={form.values}\n onChange={form.setValue}\n disabled={form.pending}\n fieldErrors={form.fieldErrors}\n />\n <FormFeedback error={form.error} message={form.message} />\n <SubmitButton pending={form.pending} loadingLabel={copy.loadingText}>\n {copy.buttonText}\n </SubmitButton>\n </form>\n <AuthFooterLink onClick={() => props.onNavigate?.(\"signIn\")}>\n {copy.signInLinkText ?? \"Back to sign in\"}\n </AuthFooterLink>\n </AuthShell>\n );\n}\n\nexport function EmailVerificationScreen(props: ExperienceScreenProps) {\n const copy = props.config.experiences.emailVerification;\n const [code, setCode] = useState(\"\");\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [fieldErrors, setFieldErrors] = useState<AuthFormFieldErrors>({});\n const [message, setMessage] = useState<string | null>(null);\n\n async function onSubmit(e: FormEvent) {\n e.preventDefault();\n await submitAuthForm({\n mode: props.mode,\n values: { code },\n extras: [\n {\n id: \"code\",\n label: \"Verification code\",\n required: true,\n kind: \"code\",\n minLength: 6,\n },\n ],\n setPending,\n setError,\n setFieldErrors,\n setMessage,\n onSubmit: props.onSubmit,\n previewMessage: \"Preview: email verified\",\n });\n }\n\n const codeError = fieldErrors.code;\n\n return (\n <AuthShell config={props.config} theme={props.theme} className={props.className}>\n <Header copy={copy} />\n <form className=\"meindesk-form\" onSubmit={onSubmit} noValidate>\n <label className=\"meindesk-field\">\n <span className=\"meindesk-label\">Verification code</span>\n <input\n className={[\n \"meindesk-input\",\n \"meindesk-otp\",\n codeError ? \"meindesk-input-invalid\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n name=\"code\"\n value={code}\n onChange={(e) => {\n setCode(e.target.value);\n if (fieldErrors.code) setFieldErrors({});\n if (error) setError(null);\n }}\n placeholder=\"123456\"\n inputMode=\"numeric\"\n disabled={pending}\n aria-invalid={codeError ? true : undefined}\n aria-describedby={codeError ? \"meindesk-err-code\" : undefined}\n />\n <FieldError id=\"meindesk-err-code\" message={codeError} variant=\"field\" />\n </label>\n <FormFeedback error={error} message={message} />\n <SubmitButton pending={pending} loadingLabel={copy.loadingText}>\n {copy.buttonText}\n </SubmitButton>\n </form>\n </AuthShell>\n );\n}\n\nexport function MfaScreen(props: ExperienceScreenProps) {\n const copy = props.config.experiences.mfa;\n const [code, setCode] = useState(\"\");\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [fieldErrors, setFieldErrors] = useState<AuthFormFieldErrors>({});\n const [message, setMessage] = useState<string | null>(null);\n\n async function onSubmit(e: FormEvent) {\n e.preventDefault();\n await submitAuthForm({\n mode: props.mode,\n values: { code },\n extras: [\n {\n id: \"code\",\n label: \"Authenticator code\",\n required: true,\n kind: \"code\",\n minLength: 6,\n },\n ],\n setPending,\n setError,\n setFieldErrors,\n setMessage,\n onSubmit: props.onSubmit,\n previewMessage: \"Preview: MFA verified\",\n });\n }\n\n const codeError = fieldErrors.code;\n\n return (\n <AuthShell config={props.config} theme={props.theme} className={props.className}>\n <Header copy={copy} />\n <form className=\"meindesk-form\" onSubmit={onSubmit} noValidate>\n <label className=\"meindesk-field\">\n <span className=\"meindesk-label\">Authenticator code</span>\n <input\n className={[\n \"meindesk-input\",\n \"meindesk-otp\",\n codeError ? \"meindesk-input-invalid\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n name=\"code\"\n value={code}\n onChange={(e) => {\n setCode(e.target.value);\n if (fieldErrors.code) setFieldErrors({});\n if (error) setError(null);\n }}\n placeholder=\"000000\"\n inputMode=\"numeric\"\n disabled={pending}\n aria-invalid={codeError ? true : undefined}\n aria-describedby={codeError ? \"meindesk-err-code\" : undefined}\n />\n <FieldError id=\"meindesk-err-code\" message={codeError} variant=\"field\" />\n </label>\n <FormFeedback error={error} message={message} />\n <SubmitButton pending={pending} loadingLabel={copy.loadingText}>\n {copy.buttonText}\n </SubmitButton>\n </form>\n </AuthShell>\n );\n}\n\nexport function OrganizationSelectionScreen(props: ExperienceScreenProps) {\n const copy = props.config.experiences.organizationSelection;\n const orgs = [\n { id: \"1\", name: \"Acme Inc\" },\n { id: \"2\", name: \"Plural Labs\" },\n ];\n const [selected, setSelected] = useState(orgs[0]!.id);\n const [pending, setPending] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n\n async function onSubmit(e: FormEvent) {\n e.preventDefault();\n setPending(true);\n await new Promise((r) => setTimeout(r, 300));\n setMessage(\n props.mode === \"preview\"\n ? `Preview: continue as ${orgs.find((o) => o.id === selected)?.name}`\n : \"Organization selected\",\n );\n setPending(false);\n await props.onSubmit?.({ organizationId: selected });\n }\n\n return (\n <AuthShell config={props.config} theme={props.theme} className={props.className}>\n <Header copy={copy} />\n <form className=\"meindesk-form\" onSubmit={onSubmit}>\n <div className=\"meindesk-org-list\">\n {orgs.map((org) => (\n <button\n key={org.id}\n type=\"button\"\n className={\n selected === org.id\n ? \"meindesk-org-item meindesk-org-item-active\"\n : \"meindesk-org-item\"\n }\n onClick={() => setSelected(org.id)}\n >\n <span className=\"meindesk-org-avatar\">{org.name.slice(0, 1)}</span>\n <span>{org.name}</span>\n </button>\n ))}\n </div>\n <SuccessIndicator message={message} />\n <SubmitButton pending={pending} loadingLabel={copy.loadingText}>\n {copy.buttonText}\n </SubmitButton>\n </form>\n <AuthFooterLink onClick={() => props.onNavigate?.(\"organizationCreation\")}>\n Create organization\n </AuthFooterLink>\n </AuthShell>\n );\n}\n\nexport function OrganizationCreationScreen(props: ExperienceScreenProps) {\n const copy = props.config.experiences.organizationCreation;\n const [name, setName] = useState(\"\");\n const [pending, setPending] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n\n async function onSubmit(e: FormEvent) {\n e.preventDefault();\n setPending(true);\n await new Promise((r) => setTimeout(r, 300));\n setMessage(\n props.mode === \"preview\"\n ? `Preview: created “${name || \"Organization\"}”`\n : \"Organization created\",\n );\n setPending(false);\n await props.onSubmit?.({ name });\n }\n\n return (\n <AuthShell config={props.config} theme={props.theme} className={props.className}>\n <Header copy={copy} />\n <form className=\"meindesk-form\" onSubmit={onSubmit}>\n <label className=\"meindesk-field\">\n <span className=\"meindesk-label\">Organization name</span>\n <input\n className=\"meindesk-input\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Acme Inc\"\n required\n disabled={pending}\n />\n </label>\n <SuccessIndicator message={message} />\n <SubmitButton pending={pending} loadingLabel={copy.loadingText}>\n {copy.buttonText}\n </SubmitButton>\n </form>\n <AuthFooterLink onClick={() => props.onNavigate?.(\"organizationSelection\")}>\n Back to organizations\n </AuthFooterLink>\n </AuthShell>\n );\n}\n","\"use client\";\n\nimport {\n useEffect,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n assembleAuthExperienceConfig,\n mergeAuthExperienceConfig,\n type AuthExperienceConfig,\n type ExperienceId,\n type ProviderId,\n} from \"@meindesk/auth-config\";\nimport type { AuthConfig } from \"@meindesk/sdk\";\nimport { ensureAuthStyles } from \"./styles\";\nimport { FormTransition } from \"./motion/FormTransition\";\nimport { AuthLoader } from \"./components/AuthLoader\";\nimport {\n EmailVerificationScreen,\n ForgotPasswordScreen,\n MagicLinkScreen,\n MfaScreen,\n OrganizationCreationScreen,\n OrganizationSelectionScreen,\n ResetPasswordScreen,\n SignInScreen,\n SignUpScreen,\n type AuthMode,\n type ExperienceScreenProps,\n} from \"./screens\";\n\nexport interface AuthExperienceProps {\n experience: ExperienceId;\n /** Full experience config. When omitted in live mode, derived from AuthProvider config. */\n config?: AuthExperienceConfig;\n /** Raw SDK AuthConfig used to assemble experience when `config` is omitted. */\n authConfig?: AuthConfig | null;\n mode?: AuthMode;\n theme?: \"light\" | \"dark\";\n className?: string;\n style?: CSSProperties;\n onExperienceChange?: (experience: ExperienceId) => void;\n onProviderClick?: (id: ProviderId) => void;\n onSubmit?: (values: Record<string, string>) => void | Promise<void>;\n}\n\nexport function authConfigToExperience(\n authConfig?: AuthConfig | null,\n): AuthExperienceConfig {\n if (authConfig?.experience && typeof authConfig.experience === \"object\") {\n try {\n return mergeAuthExperienceConfig(authConfig.experience);\n } catch (err) {\n console.warn(\n \"[meindesk] mergeAuthExperienceConfig failed; assembling from forms/settings:\",\n err instanceof Error ? err.message : err,\n );\n }\n }\n\n const experienceAppearance =\n authConfig?.experience &&\n typeof authConfig.experience === \"object\" &&\n (authConfig.experience as { appearance?: unknown }).appearance &&\n typeof (authConfig.experience as { appearance?: unknown }).appearance ===\n \"object\"\n ? ((authConfig.experience as { appearance: AuthExperienceConfig[\"appearance\"] })\n .appearance)\n : null;\n\n return assembleAuthExperienceConfig({\n applicationName: authConfig?.applicationName,\n settings: authConfig?.settings\n ? {\n passwordEnabled: Boolean(\n authConfig.settings.passwordEnabled ?? true,\n ),\n magicLinkEnabled: Boolean(authConfig.settings.magicLinkEnabled),\n passkeysEnabled: Boolean(authConfig.settings.passkeysEnabled),\n phoneEnabled: Boolean(authConfig.settings.phoneEnabled),\n }\n : null,\n providers: (authConfig?.providers ?? []).map((p) => ({\n provider: p.provider,\n enabled: p.enabled,\n buttonLabel: p.buttonLabel,\n position: p.position,\n sortOrder: p.sortOrder,\n })),\n forms: [\n authConfig?.signInForm\n ? { type: \"sign_in\", schema: authConfig.signInForm }\n : null,\n authConfig?.signUpForm\n ? { type: \"sign_up\", schema: authConfig.signUpForm }\n : null,\n authConfig?.forgotPasswordForm\n ? { type: \"forgot_password\", schema: authConfig.forgotPasswordForm }\n : null,\n authConfig?.resetPasswordForm\n ? { type: \"reset_password\", schema: authConfig.resetPasswordForm }\n : null,\n ].filter(Boolean) as Array<{ type: string; schema: unknown }>,\n appearance: experienceAppearance,\n });\n}\n\n/** Minimal placeholder while AuthProvider finishes loading config. */\nexport function AuthExperienceLoading({\n className,\n style,\n}: {\n className?: string;\n style?: CSSProperties;\n}) {\n useEffect(() => {\n ensureAuthStyles();\n }, []);\n\n return (\n <div\n className={[\"meindesk-root\", \"meindesk-experience-loading\", className]\n .filter(Boolean)\n .join(\" \")}\n style={style}\n aria-busy=\"true\"\n aria-label=\"Loading\"\n >\n <div className=\"meindesk-card\">\n <div className=\"meindesk-experience-loading-inner\">\n <AuthLoader variant=\"content\" label=\"Loading…\" />\n </div>\n </div>\n </div>\n );\n}\n\nconst SCREENS: Record<\n ExperienceId,\n (props: ExperienceScreenProps) => ReactNode\n> = {\n signIn: (p) => <SignInScreen {...p} />,\n signUp: (p) => <SignUpScreen {...p} />,\n forgotPassword: (p) => <ForgotPasswordScreen {...p} />,\n resetPassword: (p) => <ResetPasswordScreen {...p} />,\n magicLink: (p) => <MagicLinkScreen {...p} />,\n emailVerification: (p) => <EmailVerificationScreen {...p} />,\n mfa: (p) => <MfaScreen {...p} />,\n organizationSelection: (p) => <OrganizationSelectionScreen {...p} />,\n organizationCreation: (p) => <OrganizationCreationScreen {...p} />,\n};\n\nexport function AuthExperience({\n experience: experienceProp,\n config: configProp,\n authConfig,\n mode = \"live\",\n theme = \"light\",\n className,\n style,\n onExperienceChange,\n onProviderClick,\n onSubmit,\n}: AuthExperienceProps) {\n const [experience, setExperience] = useState<ExperienceId>(experienceProp);\n\n useEffect(() => {\n setExperience(experienceProp);\n }, [experienceProp]);\n\n useEffect(() => {\n ensureAuthStyles();\n }, []);\n\n const config = useMemo(() => {\n if (configProp) return configProp;\n return authConfigToExperience(authConfig);\n }, [configProp, authConfig]);\n\n function navigate(next: ExperienceId) {\n setExperience(next);\n onExperienceChange?.(next);\n }\n\n const Screen = SCREENS[experience];\n\n return (\n <div\n className=\"meindesk-experience\"\n style={style}\n data-experience={experience}\n >\n <FormTransition contentKey={experience}>\n {Screen({\n config,\n mode,\n theme,\n className,\n onNavigate: navigate,\n onProviderClick: (id) => {\n onProviderClick?.(id);\n },\n onSubmit,\n })}\n </FormTransition>\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState, type CSSProperties } from \"react\";\nimport type { AuthResult } from \"@meindesk/sdk\";\nimport { MeindeskApiError } from \"@meindesk/sdk\";\nimport type { ExperienceId } from \"@meindesk/auth-config\";\nimport { AuthExperience, AuthExperienceLoading } from \"./AuthExperience\";\nimport { useAuthContext } from \"./provider\";\n\nfunction resolveAbsoluteUrl(redirectUrl?: string): string | undefined {\n if (!redirectUrl) {\n return typeof window !== \"undefined\" ? window.location.href : undefined;\n }\n if (typeof window === \"undefined\") return redirectUrl;\n try {\n return new URL(redirectUrl, window.location.origin).toString();\n } catch {\n return redirectUrl;\n }\n}\n\nexport interface SignInProps {\n onSuccess?: (result: AuthResult) => void;\n onError?: (error: Error) => void;\n redirectUrl?: string;\n className?: string;\n style?: CSSProperties;\n title?: string;\n subtitle?: string;\n}\n\nexport function SignIn({\n onSuccess,\n onError,\n redirectUrl,\n className,\n style,\n}: SignInProps) {\n const { signIn, verifyMfa, startOAuth, config, isLoaded, isSignedIn } =\n useAuthContext();\n const [mfaToken, setMfaToken] = useState<string | null>(null);\n const experience = (mfaToken ? \"mfa\" : \"signIn\") as ExperienceId;\n\n useEffect(() => {\n if (isLoaded && isSignedIn && redirectUrl && typeof window !== \"undefined\") {\n window.location.assign(resolveAbsoluteUrl(redirectUrl) ?? redirectUrl);\n }\n }, [isLoaded, isSignedIn, redirectUrl]);\n\n if (!isLoaded) {\n return <AuthExperienceLoading className={className} style={style} />;\n }\n\n return (\n <AuthExperience\n experience={experience}\n authConfig={config}\n mode=\"live\"\n className={className}\n style={style}\n onProviderClick={(providerId) => {\n startOAuth(providerId, {\n redirectUrl: resolveAbsoluteUrl(redirectUrl),\n });\n }}\n onSubmit={async (values) => {\n try {\n if (mfaToken) {\n const result = await verifyMfa({\n mfaToken,\n code: values.code ?? \"\",\n });\n setMfaToken(null);\n onSuccess?.(result);\n if (redirectUrl && typeof window !== \"undefined\") {\n window.location.assign(\n resolveAbsoluteUrl(redirectUrl) ?? redirectUrl,\n );\n }\n return;\n }\n\n const result = await signIn({\n email: values.email ?? \"\",\n password: values.password ?? \"\",\n });\n if (result.status === \"mfa_required\") {\n setMfaToken(result.mfaToken);\n return;\n }\n onSuccess?.(result);\n if (redirectUrl && typeof window !== \"undefined\") {\n window.location.assign(\n resolveAbsoluteUrl(redirectUrl) ?? redirectUrl,\n );\n }\n } catch (err) {\n const message =\n err instanceof MeindeskApiError\n ? err.message\n : err instanceof Error\n ? err.message\n : \"Unable to sign in\";\n onError?.(err instanceof Error ? err : new Error(message));\n throw err instanceof Error ? err : new Error(message);\n }\n }}\n />\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport type { AuthResult, SignUpData } from \"@meindesk/sdk\";\nimport { MeindeskApiError } from \"@meindesk/sdk\";\nimport { AuthExperience, AuthExperienceLoading } from \"./AuthExperience\";\nimport { useAuthContext } from \"./provider\";\n\nfunction resolveAbsoluteUrl(redirectUrl?: string): string | undefined {\n if (!redirectUrl) {\n return typeof window !== \"undefined\" ? window.location.href : undefined;\n }\n if (typeof window === \"undefined\") return redirectUrl;\n try {\n return new URL(redirectUrl, window.location.origin).toString();\n } catch {\n return redirectUrl;\n }\n}\n\nexport interface SignUpProps {\n onSuccess?: (result: AuthResult) => void;\n onError?: (error: Error) => void;\n redirectUrl?: string;\n className?: string;\n style?: CSSProperties;\n title?: string;\n subtitle?: string;\n}\n\nexport function SignUp({\n onSuccess,\n onError,\n redirectUrl,\n className,\n style,\n}: SignUpProps) {\n const { signUp, startOAuth, config, isLoaded } = useAuthContext();\n\n if (!isLoaded) {\n return <AuthExperienceLoading className={className} style={style} />;\n }\n\n return (\n <AuthExperience\n experience=\"signUp\"\n authConfig={config}\n mode=\"live\"\n className={className}\n style={style}\n onProviderClick={(providerId) => {\n startOAuth(providerId, {\n redirectUrl: resolveAbsoluteUrl(redirectUrl),\n });\n }}\n onSubmit={async (values) => {\n try {\n const payload: SignUpData = {\n email: values.email ?? \"\",\n password: values.password ?? \"\",\n firstName: values.firstName,\n lastName: values.lastName,\n username: values.username,\n phoneNumber: values.phoneNumber,\n };\n const result = await signUp(payload);\n onSuccess?.(result);\n if (redirectUrl && typeof window !== \"undefined\") {\n window.location.assign(\n resolveAbsoluteUrl(redirectUrl) ?? redirectUrl,\n );\n }\n } catch (err) {\n const message =\n err instanceof MeindeskApiError\n ? err.message\n : err instanceof Error\n ? err.message\n : \"Unable to sign up\";\n onError?.(err instanceof Error ? err : new Error(message));\n throw err instanceof Error ? err : new Error(message);\n }\n }}\n />\n );\n}\n","\"use client\";\n\nimport { useEffect, useState, type ReactNode } from \"react\";\nimport { useAuthContext } from \"./provider\";\nimport { ensureAuthStyles } from \"./styles\";\nimport { AuthLoader } from \"./components/AuthLoader\";\n\nconst KNOWN_PROVIDERS = new Set([\n \"google\",\n \"github\",\n \"discord\",\n \"apple\",\n \"facebook\",\n \"microsoft\",\n]);\n\nfunction safeInternalPath(value: string | null, fallback = \"/\"): string {\n if (!value) return fallback;\n try {\n if (value.startsWith(\"http://\") || value.startsWith(\"https://\")) {\n const url = new URL(value);\n if (typeof window !== \"undefined\" && url.origin === window.location.origin) {\n return `${url.pathname}${url.search}` || fallback;\n }\n return fallback;\n }\n if (value.startsWith(\"/\") && !value.startsWith(\"//\")) return value;\n } catch {\n // fall through\n }\n return fallback;\n}\n\nexport interface SsoCallbackProps {\n /** Where to send the user after a successful exchange. Defaults to `redirect_url` query or `/`. */\n fallbackRedirectUrl?: string;\n /** Shown while exchanging. */\n loading?: ReactNode;\n /** Custom error renderer. */\n renderError?: (error: string) => ReactNode;\n}\n\n/**\n * Optional dedicated OAuth landing page.\n * Most apps do not need this — AuthProvider exchanges on any page and\n * authMiddleware lets `?code=&provider=` through. Use when you want a\n * dedicated sign-in progress screen.\n */\nexport function SsoCallback({\n fallbackRedirectUrl = \"/\",\n loading,\n renderError,\n}: SsoCallbackProps) {\n const { isLoaded, isSignedIn, oauthError } = useAuthContext();\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n ensureAuthStyles();\n }, []);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const params = new URLSearchParams(window.location.search);\n const code = params.get(\"code\");\n const provider = params.get(\"provider\");\n const destination = safeInternalPath(\n params.get(\"redirect_url\"),\n fallbackRedirectUrl,\n );\n\n if (isLoaded && isSignedIn) {\n window.location.replace(destination);\n return;\n }\n\n if (oauthError) {\n setError(oauthError);\n return;\n }\n\n if (!code || !provider || !KNOWN_PROVIDERS.has(provider)) {\n if (isLoaded && !isSignedIn) {\n const timer = window.setTimeout(() => {\n setError(\"Missing or invalid OAuth return parameters.\");\n }, 1500);\n return () => window.clearTimeout(timer);\n }\n return;\n }\n\n if (!isLoaded) return;\n\n const timer = window.setTimeout(() => {\n setError(\n \"Sign-in did not complete. The OAuth code may have expired — try again.\",\n );\n }, 8000);\n\n return () => window.clearTimeout(timer);\n }, [isLoaded, isSignedIn, oauthError, fallbackRedirectUrl]);\n\n if (error) {\n if (renderError) return <>{renderError(error)}</>;\n return (\n <div className=\"meindesk-root\" style={{ padding: 24, textAlign: \"center\" }}>\n <p className=\"meindesk-error\" style={{ display: \"inline-block\" }}>\n {error}\n </p>\n <p className=\"meindesk-footer\">\n <a href=\"/sign-in\" className=\"meindesk-link\">\n Back to sign in\n </a>\n </p>\n </div>\n );\n }\n\n return (\n <>\n {loading ?? (\n <div\n className=\"meindesk-root\"\n style={{\n display: \"flex\",\n minHeight: \"100vh\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <AuthLoader variant=\"page\" label=\"Signing you in…\" />\n </div>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport { MeindeskApiError } from \"@meindesk/sdk\";\nimport { AuthExperience, AuthExperienceLoading } from \"./AuthExperience\";\nimport { useAuthContext } from \"./provider\";\n\nexport interface ForgotPasswordProps {\n onSuccess?: () => void;\n onError?: (error: Error) => void;\n redirectUrl?: string;\n className?: string;\n style?: CSSProperties;\n title?: string;\n subtitle?: string;\n}\n\nexport function ForgotPassword({\n onSuccess,\n onError,\n className,\n style,\n}: ForgotPasswordProps) {\n const { client, config, isLoaded } = useAuthContext();\n\n if (!isLoaded) {\n return <AuthExperienceLoading className={className} style={style} />;\n }\n\n return (\n <AuthExperience\n experience=\"forgotPassword\"\n authConfig={config}\n mode=\"live\"\n className={className}\n style={style}\n onSubmit={async (values) => {\n try {\n await client.forgotPassword({ email: values.email ?? \"\" });\n onSuccess?.();\n } catch (err) {\n const message =\n err instanceof MeindeskApiError\n ? err.message\n : err instanceof Error\n ? err.message\n : \"Unable to request reset\";\n onError?.(err instanceof Error ? err : new Error(message));\n throw err instanceof Error ? err : new Error(message);\n }\n }}\n />\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport { MeindeskApiError } from \"@meindesk/sdk\";\nimport { AuthExperience, AuthExperienceLoading } from \"./AuthExperience\";\nimport { useAuthContext } from \"./provider\";\n\nexport interface ResetPasswordProps {\n onSuccess?: () => void;\n onError?: (error: Error) => void;\n redirectUrl?: string;\n className?: string;\n style?: CSSProperties;\n title?: string;\n subtitle?: string;\n token?: string;\n}\n\nfunction readTokenFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n return new URLSearchParams(window.location.search).get(\"token\");\n}\n\nexport function ResetPassword({\n onSuccess,\n onError,\n redirectUrl,\n className,\n style,\n token: tokenProp,\n}: ResetPasswordProps) {\n const { client, config, isLoaded } = useAuthContext();\n const token = tokenProp ?? readTokenFromUrl() ?? \"\";\n\n if (!isLoaded) {\n return <AuthExperienceLoading className={className} style={style} />;\n }\n\n return (\n <AuthExperience\n experience=\"resetPassword\"\n authConfig={config}\n mode=\"live\"\n className={className}\n style={style}\n onSubmit={async (values) => {\n try {\n await client.resetPassword({\n token,\n password: values.password ?? \"\",\n });\n onSuccess?.();\n if (redirectUrl && typeof window !== \"undefined\") {\n window.location.assign(redirectUrl);\n }\n } catch (err) {\n const message =\n err instanceof MeindeskApiError\n ? err.message\n : err instanceof Error\n ? err.message\n : \"Unable to reset password\";\n onError?.(err instanceof Error ? err : new Error(message));\n throw err instanceof Error ? err : new Error(message);\n }\n }}\n />\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef, type CSSProperties } from \"react\";\nimport type { AuthResult } from \"@meindesk/sdk\";\nimport { MeindeskApiError } from \"@meindesk/sdk\";\nimport { AuthExperience, AuthExperienceLoading } from \"./AuthExperience\";\nimport { useAuthContext } from \"./provider\";\n\nexport interface MagicLinkSignInProps {\n onSuccess?: (result: AuthResult) => void;\n onError?: (error: Error) => void;\n redirectUrl?: string;\n className?: string;\n style?: CSSProperties;\n title?: string;\n subtitle?: string;\n token?: string;\n}\n\nfunction readTokenFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n return new URLSearchParams(window.location.search).get(\"token\");\n}\n\nexport function MagicLinkSignIn({\n onSuccess,\n onError,\n redirectUrl,\n className,\n style,\n token: tokenProp,\n}: MagicLinkSignInProps) {\n const { client, config, setActive, isLoaded } = useAuthContext();\n const consumed = useRef(false);\n const token = tokenProp ?? readTokenFromUrl();\n\n useEffect(() => {\n if (!token || consumed.current) return;\n consumed.current = true;\n void (async () => {\n try {\n const result = await client.verifyMagicLink(token);\n setActive(result);\n onSuccess?.(result);\n if (redirectUrl && typeof window !== \"undefined\") {\n window.location.assign(redirectUrl);\n }\n } catch (err) {\n const message =\n err instanceof MeindeskApiError\n ? err.message\n : err instanceof Error\n ? err.message\n : \"Invalid magic link\";\n onError?.(err instanceof Error ? err : new Error(message));\n }\n })();\n }, [token, client, setActive, onSuccess, onError, redirectUrl]);\n\n if (!isLoaded) {\n return <AuthExperienceLoading className={className} style={style} />;\n }\n\n return (\n <AuthExperience\n experience=\"magicLink\"\n authConfig={config}\n mode=\"live\"\n className={className}\n style={style}\n onSubmit={async (values) => {\n try {\n await client.requestMagicLink({ email: values.email ?? \"\" });\n } catch (err) {\n const message =\n err instanceof MeindeskApiError\n ? err.message\n : err instanceof Error\n ? err.message\n : \"Unable to send magic link\";\n onError?.(err instanceof Error ? err : new Error(message));\n throw err instanceof Error ? err : new Error(message);\n }\n }}\n />\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport { MeindeskApiError } from \"@meindesk/sdk\";\nimport { AuthExperience, AuthExperienceLoading } from \"./AuthExperience\";\nimport { useAuthContext } from \"./provider\";\n\nexport interface VerifyEmailProps {\n onSuccess?: () => void;\n onError?: (error: Error) => void;\n redirectUrl?: string;\n className?: string;\n style?: CSSProperties;\n title?: string;\n subtitle?: string;\n token?: string;\n}\n\nfunction readTokenFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n return new URLSearchParams(window.location.search).get(\"token\");\n}\n\nexport function VerifyEmail({\n onSuccess,\n onError,\n redirectUrl,\n className,\n style,\n token: tokenProp,\n}: VerifyEmailProps) {\n const { client, config, isLoaded } = useAuthContext();\n const token = tokenProp ?? readTokenFromUrl() ?? \"\";\n\n if (!isLoaded) {\n return <AuthExperienceLoading className={className} style={style} />;\n }\n\n return (\n <AuthExperience\n experience=\"emailVerification\"\n authConfig={config}\n mode=\"live\"\n className={className}\n style={style}\n onSubmit={async (values) => {\n try {\n const value = values.code || token;\n await client.verifyEmail(value);\n onSuccess?.();\n if (redirectUrl && typeof window !== \"undefined\") {\n window.location.assign(redirectUrl);\n }\n } catch (err) {\n const message =\n err instanceof MeindeskApiError\n ? err.message\n : err instanceof Error\n ? err.message\n : \"Unable to verify email\";\n onError?.(err instanceof Error ? err : new Error(message));\n throw err instanceof Error ? err : new Error(message);\n }\n }}\n />\n );\n}\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n MeindeskApiError,\n type ActivityItem,\n type ConnectedIdentity,\n type Session,\n} from \"@meindesk/sdk\";\nimport { useAuthContext } from \"./provider\";\nimport { ensureAuthStyles } from \"./styles\";\nimport { FormTransition } from \"./motion/FormTransition\";\nimport { MOTION_DURATION } from \"./motion/tokens\";\nimport { LoadingButton } from \"./components/LoadingButton\";\nimport { useAuthToast } from \"./components/AuthToast\";\n\nexport type UserProfileTab = \"profile\" | \"security\" | \"preferences\" | \"email\";\n\nexport interface UserProfileProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n defaultTab?: UserProfileTab;\n /** When opening via email shortcut, expand the email editor. */\n expandEmailOnOpen?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\ntype DeviceSession = Session & {\n ipAddress?: string | null;\n userAgent?: string | null;\n device?: string | null;\n location?: string | null;\n};\n\ntype AppearanceMode = \"system\" | \"light\" | \"dark\";\ntype Expander =\n | \"profile\"\n | \"email\"\n | \"phone\"\n | \"password\"\n | \"mfa\"\n | \"mfa-disable\"\n | null;\n\nfunction activityLabel(type: string): string {\n switch (type) {\n case \"user.signed_in\":\n case \"user.signed_in_oauth\":\n return \"Signed in\";\n case \"session.created\":\n return \"New session\";\n case \"session.resumed\":\n return \"Session resumed\";\n case \"session.revoked\":\n return \"Signed out a device\";\n case \"password.changed\":\n return \"Password changed\";\n case \"email.changed\":\n return \"Email changed\";\n case \"mfa.enabled\":\n return \"Two-step verification enabled\";\n case \"mfa.disabled\":\n return \"Two-step verification disabled\";\n case \"oauth.linked\":\n return \"Connected account linked\";\n case \"oauth.unlinked\":\n return \"Connected account removed\";\n default:\n return type;\n }\n}\n\nconst APPEARANCE_KEY = \"meindesk-appearance\";\n\nfunction normalizeTab(tab: UserProfileTab | undefined): Exclude<UserProfileTab, \"email\"> {\n if (tab === \"email\") return \"profile\";\n if (tab === \"security\" || tab === \"preferences\") return tab;\n return \"profile\";\n}\n\nfunction getInitials(\n firstName?: string | null,\n lastName?: string | null,\n email?: string | null,\n): string {\n const first = firstName?.trim()?.[0];\n const last = lastName?.trim()?.[0];\n if (first && last) return `${first}${last}`.toUpperCase();\n if (first) return first.toUpperCase();\n if (email?.trim()) return email.trim()[0]!.toUpperCase();\n return \"?\";\n}\n\nfunction displayName(user: {\n firstName?: string | null;\n lastName?: string | null;\n email?: string;\n}) {\n const name = [user.firstName, user.lastName].filter(Boolean).join(\" \");\n return name || user.email || \"Account\";\n}\n\nfunction formatWhen(value?: string | Date | null) {\n if (!value) return \"—\";\n const d = typeof value === \"string\" ? new Date(value) : value;\n try {\n const now = new Date();\n const sameDay =\n d.getFullYear() === now.getFullYear() &&\n d.getMonth() === now.getMonth() &&\n d.getDate() === now.getDate();\n if (sameDay) {\n return `Today at ${d.toLocaleTimeString(undefined, {\n hour: \"numeric\",\n minute: \"2-digit\",\n })}`;\n }\n return d.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n } catch {\n return \"—\";\n }\n}\n\nfunction deviceTitle(session: DeviceSession) {\n if (session.device?.trim()) return session.device.trim();\n const ua = session.userAgent || \"\";\n if (/Macintosh|Mac OS/i.test(ua)) return \"Macintosh\";\n if (/Windows/i.test(ua)) return \"Windows\";\n if (/iPhone|iPad/i.test(ua)) return \"iOS\";\n if (/Android/i.test(ua)) return \"Android\";\n if (/Linux/i.test(ua)) return \"Linux\";\n return \"This device\";\n}\n\nfunction browserLabel(ua?: string | null) {\n if (!ua) return \"Unknown browser\";\n const chrome = ua.match(/Chrome\\/([\\d.]+)/);\n if (chrome && !/Edg\\//.test(ua)) return `Chrome ${chrome[1]}`;\n const firefox = ua.match(/Firefox\\/([\\d.]+)/);\n if (firefox) return `Firefox ${firefox[1]}`;\n const safari = ua.match(/Version\\/([\\d.]+).*Safari/);\n if (safari) return `Safari ${safari[1]}`;\n return ua.slice(0, 48);\n}\n\nfunction readAppearance(): AppearanceMode {\n if (typeof window === \"undefined\") return \"system\";\n const v = window.localStorage.getItem(APPEARANCE_KEY);\n if (v === \"light\" || v === \"dark\" || v === \"system\") return v;\n return \"system\";\n}\n\nexport function UserProfile({\n open: controlledOpen,\n onOpenChange,\n defaultTab = \"profile\",\n expandEmailOnOpen,\n className,\n style,\n}: UserProfileProps) {\n const {\n isLoaded,\n isSignedIn,\n user,\n sessionToken,\n config,\n client,\n refreshUser,\n startOAuth,\n } = useAuthContext();\n\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = controlledOpen ?? uncontrolledOpen;\n const setOpen = useCallback(\n (value: boolean) => {\n onOpenChange?.(value);\n if (controlledOpen === undefined) setUncontrolledOpen(value);\n },\n [controlledOpen, onOpenChange],\n );\n\n const [mounted, setMounted] = useState(open);\n const [entered, setEntered] = useState(false);\n const exitMs = MOTION_DURATION.normal;\n const toast = useAuthToast();\n const [revokingId, setRevokingId] = useState<string | null>(null);\n\n useEffect(() => {\n if (open) {\n setMounted(true);\n const id = window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => setEntered(true));\n });\n return () => window.cancelAnimationFrame(id);\n }\n setEntered(false);\n const t = window.setTimeout(() => setMounted(false), exitMs);\n return () => window.clearTimeout(t);\n }, [open]);\n\n const [tab, setTab] = useState(normalizeTab(defaultTab));\n const [panelKey, setPanelKey] = useState(0);\n const [expander, setExpander] = useState<Expander>(null);\n const [pending, setPending] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n\n const [firstName, setFirstName] = useState(\"\");\n const [lastName, setLastName] = useState(\"\");\n const [username, setUsername] = useState(\"\");\n const [phoneNumber, setPhoneNumber] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [currentPassword, setCurrentPassword] = useState(\"\");\n const [newPassword, setNewPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n\n const [sessions, setSessions] = useState<DeviceSession[]>([]);\n const [currentSessionId, setCurrentSessionId] = useState<string | null>(null);\n const [appearance, setAppearance] = useState<AppearanceMode>(\"system\");\n const [menuFor, setMenuFor] = useState<string | null>(null);\n const [identities, setIdentities] = useState<ConnectedIdentity[]>([]);\n const [activity, setActivity] = useState<ActivityItem[]>([]);\n const [mfaEnabled, setMfaEnabled] = useState(false);\n const [mfaSecret, setMfaSecret] = useState<string | null>(null);\n const [mfaUri, setMfaUri] = useState<string | null>(null);\n const [mfaRecoveryCodes, setMfaRecoveryCodes] = useState<string[]>([]);\n const [mfaCode, setMfaCode] = useState(\"\");\n const [mfaDisablePassword, setMfaDisablePassword] = useState(\"\");\n const [mfaDisableRecovery, setMfaDisableRecovery] = useState(\"\");\n\n const flags = config?.userProfile ?? {\n allowEditProfile: true,\n allowChangeEmail: true,\n allowChangePassword: true,\n };\n\n const providers = useMemo(\n () => (config?.providers ?? []).filter((p) => p.enabled),\n [config?.providers],\n );\n\n useEffect(() => {\n ensureAuthStyles();\n }, []);\n\n const loadSessions = useCallback(async () => {\n if (!sessionToken) return;\n try {\n const data = await client.listSessions(sessionToken);\n setSessions(data.sessions);\n setCurrentSessionId(data.currentSessionId);\n } catch {\n setSessions([]);\n }\n }, [client, sessionToken]);\n\n const loadAccountExtras = useCallback(async () => {\n if (!sessionToken) return;\n try {\n const [idRes, actRes, mfaRes] = await Promise.all([\n client.listIdentities(sessionToken).catch(() => ({ identities: [] })),\n client.listActivity(sessionToken, { limit: 20 }).catch(() => ({\n activity: [],\n })),\n client.getMfaStatus(sessionToken).catch(() => ({\n enabled: false,\n verifiedAt: null,\n })),\n ]);\n setIdentities(idRes.identities);\n setActivity(actRes.activity);\n setMfaEnabled(mfaRes.enabled);\n } catch {\n // ignore\n }\n }, [client, sessionToken]);\n\n useEffect(() => {\n if (!open || !user) return;\n const nextTab = normalizeTab(defaultTab);\n setTab(nextTab);\n setPanelKey((k) => k + 1);\n setExpander(\n defaultTab === \"email\" || expandEmailOnOpen ? \"email\" : null,\n );\n setFirstName(user.firstName ?? \"\");\n setLastName(user.lastName ?? \"\");\n setUsername(user.username ?? \"\");\n setPhoneNumber(user.phoneNumber ?? \"\");\n setEmail(user.email ?? \"\");\n setCurrentPassword(\"\");\n setNewPassword(\"\");\n setConfirmPassword(\"\");\n setMessage(null);\n setError(null);\n setNotice(null);\n setAppearance(readAppearance());\n setMfaSecret(null);\n setMfaUri(null);\n setMfaRecoveryCodes([]);\n setMfaCode(\"\");\n void loadSessions();\n void loadAccountExtras();\n }, [\n open,\n user,\n defaultTab,\n expandEmailOnOpen,\n loadSessions,\n loadAccountExtras,\n ]);\n\n useEffect(() => {\n if (!open) return;\n function onKey(e: KeyboardEvent) {\n if (e.key === \"Escape\") setOpen(false);\n }\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [open, setOpen]);\n\n const initials = useMemo(\n () => getInitials(user?.firstName, user?.lastName, user?.email),\n [user],\n );\n\n if (!isLoaded || !isSignedIn || !user || !sessionToken) return null;\n if (!mounted) return null;\n\n function switchTab(next: Exclude<UserProfileTab, \"email\">) {\n if (next === tab) return;\n setTab(next);\n setExpander(null);\n setPanelKey((k) => k + 1);\n }\n\n function showComingSoon(feature: string) {\n setNotice(`${feature} is coming soon.`);\n setMessage(null);\n setError(null);\n }\n\n async function connectProvider(provider: string) {\n if (!sessionToken) return;\n setError(null);\n try {\n const redirectUrl =\n typeof window !== \"undefined\" ? window.location.href : undefined;\n startOAuth(provider, {\n purpose: \"link\",\n sessionToken,\n redirectUrl,\n });\n } catch (err) {\n setError(\n err instanceof MeindeskApiError\n ? err.message\n : \"Failed to start account linking\",\n );\n }\n }\n\n async function unlinkProvider(provider: string) {\n if (!sessionToken) return;\n setPending(true);\n setError(null);\n try {\n await client.unlinkIdentity(sessionToken, provider);\n await loadAccountExtras();\n setMessage(\"Connected account removed\");\n setMenuFor(null);\n } catch (err) {\n setError(\n err instanceof MeindeskApiError\n ? err.message\n : \"Failed to unlink account\",\n );\n } finally {\n setPending(false);\n }\n }\n\n async function beginMfaEnrollment() {\n if (!sessionToken) return;\n if (!config?.settings?.mfaEnabled) {\n showComingSoon(\"Two-step verification\");\n return;\n }\n setPending(true);\n setError(null);\n try {\n const data = await client.startTotpEnrollment(sessionToken);\n setMfaSecret(data.secret);\n setMfaUri(data.uri);\n setMfaRecoveryCodes(data.recoveryCodes);\n setMfaCode(\"\");\n setExpander(\"mfa\");\n } catch (err) {\n setError(\n err instanceof MeindeskApiError\n ? err.message\n : \"Failed to start two-step verification\",\n );\n } finally {\n setPending(false);\n }\n }\n\n async function confirmMfaEnrollment() {\n if (!sessionToken) return;\n setPending(true);\n setError(null);\n try {\n await client.confirmTotpEnrollment(sessionToken, mfaCode);\n setMfaEnabled(true);\n setExpander(null);\n setMfaSecret(null);\n setMfaUri(null);\n setMessage(\"Two-step verification enabled\");\n await loadAccountExtras();\n } catch (err) {\n setError(\n err instanceof MeindeskApiError\n ? err.message\n : \"Invalid verification code\",\n );\n } finally {\n setPending(false);\n }\n }\n\n async function disableMfa() {\n if (!sessionToken) return;\n setPending(true);\n setError(null);\n try {\n await client.disableTotp(sessionToken, {\n password: mfaDisablePassword || undefined,\n recoveryCode: mfaDisableRecovery || undefined,\n });\n setMfaEnabled(false);\n setExpander(null);\n setMfaDisablePassword(\"\");\n setMfaDisableRecovery(\"\");\n setMessage(\"Two-step verification disabled\");\n await loadAccountExtras();\n } catch (err) {\n setError(\n err instanceof MeindeskApiError\n ? err.message\n : \"Failed to disable two-step verification\",\n );\n } finally {\n setPending(false);\n }\n }\n\n async function saveProfile() {\n if (!flags.allowEditProfile) return;\n setPending(true);\n setError(null);\n setMessage(null);\n try {\n await client.updateUser(sessionToken!, {\n firstName: firstName.trim() || null,\n lastName: lastName.trim() || null,\n username: username.trim() || null,\n phoneNumber: phoneNumber.trim() || null,\n });\n await refreshUser();\n setMessage(\"Profile updated\");\n setExpander(null);\n } catch (err) {\n setError(\n err instanceof MeindeskApiError ? err.message : \"Failed to update profile\",\n );\n } finally {\n setPending(false);\n }\n }\n\n async function saveEmail() {\n if (!flags.allowChangeEmail) return;\n setPending(true);\n setError(null);\n setMessage(null);\n try {\n await client.updateUserEmail(sessionToken!, email.trim());\n await refreshUser();\n setMessage(\"Email updated — verification may be required\");\n setExpander(null);\n } catch (err) {\n setError(\n err instanceof MeindeskApiError ? err.message : \"Failed to update email\",\n );\n } finally {\n setPending(false);\n }\n }\n\n async function savePassword() {\n if (!flags.allowChangePassword) return;\n if (newPassword !== confirmPassword) {\n setError(\"New passwords do not match\");\n return;\n }\n setPending(true);\n setError(null);\n setMessage(null);\n try {\n await client.changePassword(sessionToken!, {\n currentPassword,\n newPassword,\n });\n setCurrentPassword(\"\");\n setNewPassword(\"\");\n setConfirmPassword(\"\");\n setMessage(\"Password updated\");\n setExpander(null);\n } catch (err) {\n setError(\n err instanceof MeindeskApiError\n ? err.message\n : \"Failed to change password\",\n );\n } finally {\n setPending(false);\n }\n }\n\n async function revokeDevice(sessionId: string) {\n setRevokingId(sessionId);\n setError(null);\n try {\n await client.revokeSession(sessionToken!, sessionId);\n setMenuFor(null);\n setSessions((prev) => prev.filter((s) => s.id !== sessionId));\n setMessage(\"Device signed out\");\n toast.push(\"Device signed out\", \"success\");\n } catch (err) {\n setError(\n err instanceof MeindeskApiError ? err.message : \"Failed to revoke session\",\n );\n } finally {\n setRevokingId(null);\n }\n }\n\n function onAppearanceChange(value: AppearanceMode) {\n setAppearance(value);\n window.localStorage.setItem(APPEARANCE_KEY, value);\n setMessage(`Appearance set to ${value}`);\n }\n\n const pageTitle =\n tab === \"profile\"\n ? \"Profile details\"\n : tab === \"security\"\n ? \"Security\"\n : \"Preferences\";\n\n return (\n <div\n className={[\n \"meindesk-root\",\n \"meindesk-account-overlay\",\n entered ? \"meindesk-account-overlay-open\" : \"\",\n `meindesk-appearance-${appearance}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={style}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Account\"\n onClick={(e) => {\n if (e.target === e.currentTarget) setOpen(false);\n }}\n >\n <div className=\"meindesk-account-modal\">\n <aside className=\"meindesk-account-sidebar\">\n <div className=\"meindesk-account-sidebar-top\">\n <div className=\"meindesk-account-brand\">\n <div className=\"meindesk-account-brand-title\">Account</div>\n <div className=\"meindesk-account-brand-sub\">\n Manage your account info.\n </div>\n </div>\n <nav className=\"meindesk-account-nav\" aria-label=\"Account\">\n <NavItem\n active={tab === \"profile\"}\n icon={<IconUser />}\n label=\"Profile\"\n onClick={() => switchTab(\"profile\")}\n />\n <NavItem\n active={tab === \"security\"}\n icon={<IconShield />}\n label=\"Security\"\n onClick={() => switchTab(\"security\")}\n />\n <NavItem\n active={tab === \"preferences\"}\n icon={<IconSliders />}\n label=\"Preferences\"\n onClick={() => switchTab(\"preferences\")}\n />\n </nav>\n </div>\n <div className=\"meindesk-account-secured\">\n <span className=\"meindesk-account-secured-mark\" aria-hidden>\n ◆\n </span>\n Secured by Meindesk\n </div>\n </aside>\n\n <div className=\"meindesk-account-main\">\n <div className=\"meindesk-account-main-header\">\n <h2 className=\"meindesk-account-page-title\">{pageTitle}</h2>\n <button\n type=\"button\"\n className=\"meindesk-account-close\"\n aria-label=\"Close\"\n onClick={() => setOpen(false)}\n >\n ×\n </button>\n </div>\n\n <FormTransition contentKey={tab} className=\"meindesk-account-main-body\">\n <div\n key={panelKey}\n className=\"meindesk-account-panel-enter\"\n data-tab={tab}\n >\n {message ? (\n <div className=\"meindesk-account-banner meindesk-account-banner-ok\">\n {message}\n </div>\n ) : null}\n {error ? (\n <div className=\"meindesk-account-banner meindesk-account-banner-err\">\n {error}\n </div>\n ) : null}\n {notice ? (\n <div className=\"meindesk-account-banner meindesk-account-banner-info\">\n {notice}\n </div>\n ) : null}\n\n {tab === \"profile\" ? (\n <>\n <ProfileSection label=\"Profile\">\n <div className=\"meindesk-account-profile-row\">\n <div className=\"meindesk-account-profile-left\">\n <div className=\"meindesk-account-avatar\" aria-hidden>\n {user.imageUrl ? (\n <img src={user.imageUrl} alt=\"\" />\n ) : (\n initials\n )}\n </div>\n <div className=\"meindesk-account-profile-name\">\n {displayName(user)}\n </div>\n </div>\n {flags.allowEditProfile ? (\n <ActionLink\n onClick={() =>\n setExpander((v) => (v === \"profile\" ? null : \"profile\"))\n }\n >\n Update profile\n </ActionLink>\n ) : null}\n </div>\n {expander === \"profile\" ? (\n <div className=\"meindesk-account-expander\">\n <Field label=\"First name\">\n <input\n className=\"meindesk-account-input\"\n value={firstName}\n onChange={(e) => setFirstName(e.target.value)}\n />\n </Field>\n <Field label=\"Last name\">\n <input\n className=\"meindesk-account-input\"\n value={lastName}\n onChange={(e) => setLastName(e.target.value)}\n />\n </Field>\n <Field label=\"Username\">\n <input\n className=\"meindesk-account-input\"\n value={username}\n onChange={(e) => setUsername(e.target.value)}\n />\n </Field>\n <div className=\"meindesk-account-expander-actions\">\n <button\n type=\"button\"\n className=\"meindesk-account-btn-secondary\"\n onClick={() => setExpander(null)}\n >\n Cancel\n </button>\n <LoadingButton\n bare\n type=\"button\"\n className=\"meindesk-account-btn-primary\"\n loading={pending}\n loadingLabel=\"Saving…\"\n onClick={() => void saveProfile()}\n >\n Save\n </LoadingButton>\n </div>\n </div>\n ) : null}\n </ProfileSection>\n\n <ProfileSection label=\"Email addresses\">\n <div className=\"meindesk-account-list-row\">\n <div className=\"meindesk-account-list-main\">\n <span>{user.email}</span>\n <span className=\"meindesk-account-badge\">Primary</span>\n </div>\n <RowMenu\n open={menuFor === \"email\"}\n onToggle={() =>\n setMenuFor((v) => (v === \"email\" ? null : \"email\"))\n }\n items={[\n {\n label: \"Update email\",\n onClick: () => {\n if (!flags.allowChangeEmail) {\n showComingSoon(\"Email changes\");\n return;\n }\n setExpander(\"email\");\n setMenuFor(null);\n },\n },\n ]}\n />\n </div>\n {expander === \"email\" ? (\n <div className=\"meindesk-account-expander\">\n <Field label=\"Email address\">\n <input\n className=\"meindesk-account-input\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n </Field>\n <div className=\"meindesk-account-expander-actions\">\n <button\n type=\"button\"\n className=\"meindesk-account-btn-secondary\"\n onClick={() => setExpander(null)}\n >\n Cancel\n </button>\n <LoadingButton\n bare\n type=\"button\"\n className=\"meindesk-account-btn-primary\"\n loading={pending}\n loadingLabel=\"Saving…\"\n disabled={email.trim() === user.email}\n onClick={() => void saveEmail()}\n >\n Update email\n </LoadingButton>\n </div>\n </div>\n ) : (\n <ActionLink\n variant=\"add\"\n onClick={() => {\n if (!flags.allowChangeEmail) {\n showComingSoon(\"Adding email addresses\");\n return;\n }\n setExpander(\"email\");\n }}\n >\n + Add email address\n </ActionLink>\n )}\n </ProfileSection>\n\n <ProfileSection label=\"Phone numbers\">\n {user.phoneNumber ? (\n <div className=\"meindesk-account-list-row\">\n <div className=\"meindesk-account-list-main\">\n <span>{user.phoneNumber}</span>\n </div>\n </div>\n ) : null}\n {expander === \"phone\" ? (\n <div className=\"meindesk-account-expander\">\n <Field label=\"Phone number\">\n <input\n className=\"meindesk-account-input\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n placeholder=\"+1 555 000 0000\"\n />\n </Field>\n <div className=\"meindesk-account-expander-actions\">\n <button\n type=\"button\"\n className=\"meindesk-account-btn-secondary\"\n onClick={() => setExpander(null)}\n >\n Cancel\n </button>\n <LoadingButton\n bare\n type=\"button\"\n className=\"meindesk-account-btn-primary\"\n loading={pending}\n loadingLabel=\"Saving…\"\n disabled={!flags.allowEditProfile}\n onClick={() => void saveProfile()}\n >\n Save\n </LoadingButton>\n </div>\n </div>\n ) : (\n <ActionLink\n variant=\"add\"\n onClick={() => {\n if (!flags.allowEditProfile) {\n showComingSoon(\"Phone numbers\");\n return;\n }\n setExpander(\"phone\");\n }}\n >\n + Add phone number\n </ActionLink>\n )}\n </ProfileSection>\n\n <ProfileSection label=\"Connected accounts\">\n {providers.length === 0 ? (\n <p className=\"meindesk-account-muted\">\n No social providers enabled for this application.\n </p>\n ) : (\n providers.map((p) => {\n const linked = identities.find(\n (i) => i.provider === p.provider,\n );\n const label =\n p.buttonLabel ||\n p.provider.charAt(0).toUpperCase() +\n p.provider.slice(1);\n return (\n <div key={p.provider} className=\"meindesk-account-list-row\">\n <div className=\"meindesk-account-list-main\">\n <span className=\"meindesk-account-provider-icon\">\n {p.provider.slice(0, 1).toUpperCase()}\n </span>\n <div>\n <div className=\"meindesk-account-provider-name\">\n {label}\n </div>\n <div className=\"meindesk-account-muted\">\n {linked\n ? linked.email || \"Connected\"\n : \"Not connected\"}\n </div>\n </div>\n </div>\n {linked ? (\n <RowMenu\n open={menuFor === `oauth-${p.provider}`}\n onToggle={() =>\n setMenuFor((v) =>\n v === `oauth-${p.provider}`\n ? null\n : `oauth-${p.provider}`,\n )\n }\n items={[\n {\n label: \"Disconnect\",\n danger: true,\n onClick: () => {\n void unlinkProvider(p.provider);\n },\n },\n ]}\n />\n ) : (\n <ActionLink\n onClick={() => void connectProvider(p.provider)}\n >\n Connect\n </ActionLink>\n )}\n </div>\n );\n })\n )}\n {providers.some(\n (p) => !identities.some((i) => i.provider === p.provider),\n ) ? (\n <ActionLink\n variant=\"add\"\n onClick={() => {\n const next = providers.find(\n (p) =>\n !identities.some((i) => i.provider === p.provider),\n );\n if (next) void connectProvider(next.provider);\n }}\n >\n + Connect account\n </ActionLink>\n ) : null}\n </ProfileSection>\n </>\n ) : null}\n\n {tab === \"security\" ? (\n <>\n <div className=\"meindesk-account-section\">\n <ProfileRow label=\"Password\">\n {flags.allowChangePassword ? (\n <ActionLink\n onClick={() =>\n setExpander((v) =>\n v === \"password\" ? null : \"password\",\n )\n }\n >\n Update password\n </ActionLink>\n ) : (\n <span className=\"meindesk-account-muted\">Disabled</span>\n )}\n </ProfileRow>\n {expander === \"password\" ? (\n <div className=\"meindesk-account-expander\">\n <Field label=\"Current password\">\n <input\n className=\"meindesk-account-input\"\n type=\"password\"\n autoComplete=\"current-password\"\n value={currentPassword}\n onChange={(e) => setCurrentPassword(e.target.value)}\n />\n </Field>\n <Field label=\"New password\">\n <input\n className=\"meindesk-account-input\"\n type=\"password\"\n autoComplete=\"new-password\"\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n />\n </Field>\n <Field label=\"Confirm password\">\n <input\n className=\"meindesk-account-input\"\n type=\"password\"\n autoComplete=\"new-password\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n />\n </Field>\n <div className=\"meindesk-account-expander-actions\">\n <button\n type=\"button\"\n className=\"meindesk-account-btn-secondary\"\n onClick={() => setExpander(null)}\n >\n Cancel\n </button>\n <LoadingButton\n bare\n type=\"button\"\n className=\"meindesk-account-btn-primary\"\n loading={pending}\n loadingLabel=\"Saving…\"\n disabled={\n !currentPassword ||\n !newPassword ||\n !confirmPassword\n }\n onClick={() => void savePassword()}\n >\n Save\n </LoadingButton>\n </div>\n </div>\n ) : null}\n </div>\n\n <div className=\"meindesk-account-section\">\n <ProfileRow label=\"Passkeys\">\n <ActionLink\n variant=\"add\"\n onClick={() => showComingSoon(\"Passkeys\")}\n >\n + Add a passkey\n </ActionLink>\n </ProfileRow>\n </div>\n\n <div className=\"meindesk-account-section\">\n <ProfileRow label=\"Two-step verification\">\n {mfaEnabled ? (\n <ActionLink\n onClick={() =>\n setExpander((v) =>\n v === \"mfa-disable\" ? null : \"mfa-disable\",\n )\n }\n >\n Disable\n </ActionLink>\n ) : (\n <ActionLink\n variant=\"add\"\n onClick={() => void beginMfaEnrollment()}\n >\n + Add two-step verification\n </ActionLink>\n )}\n </ProfileRow>\n {mfaEnabled ? (\n <p className=\"meindesk-account-muted\">\n Authenticator app is enabled on this account.\n </p>\n ) : null}\n {expander === \"mfa\" ? (\n <div className=\"meindesk-account-expander\">\n <p className=\"meindesk-account-muted\">\n Scan this URI in your authenticator app, or enter the\n secret manually.\n </p>\n {mfaUri ? (\n <code className=\"meindesk-account-muted\" style={{ wordBreak: \"break-all\" }}>\n {mfaUri}\n </code>\n ) : null}\n {mfaSecret ? (\n <Field label=\"Secret\">\n <input\n className=\"meindesk-account-input\"\n readOnly\n value={mfaSecret}\n />\n </Field>\n ) : null}\n {mfaRecoveryCodes.length > 0 ? (\n <div>\n <div className=\"meindesk-account-setting-label\">\n Recovery codes (save these)\n </div>\n <p className=\"meindesk-account-muted\">\n {mfaRecoveryCodes.join(\" · \")}\n </p>\n </div>\n ) : null}\n <Field label=\"Verification code\">\n <input\n className=\"meindesk-account-input\"\n value={mfaCode}\n onChange={(e) => setMfaCode(e.target.value)}\n placeholder=\"000000\"\n inputMode=\"numeric\"\n />\n </Field>\n <div className=\"meindesk-account-expander-actions\">\n <button\n type=\"button\"\n className=\"meindesk-account-btn-secondary\"\n onClick={() => setExpander(null)}\n >\n Cancel\n </button>\n <LoadingButton\n bare\n type=\"button\"\n className=\"meindesk-account-btn-primary\"\n loading={pending}\n loadingLabel=\"Verifying…\"\n disabled={mfaCode.trim().length < 6}\n onClick={() => void confirmMfaEnrollment()}\n >\n Enable\n </LoadingButton>\n </div>\n </div>\n ) : null}\n {expander === \"mfa-disable\" ? (\n <div className=\"meindesk-account-expander\">\n <Field label=\"Current password\">\n <input\n className=\"meindesk-account-input\"\n type=\"password\"\n value={mfaDisablePassword}\n onChange={(e) => setMfaDisablePassword(e.target.value)}\n />\n </Field>\n <Field label=\"Or recovery code\">\n <input\n className=\"meindesk-account-input\"\n value={mfaDisableRecovery}\n onChange={(e) => setMfaDisableRecovery(e.target.value)}\n />\n </Field>\n <div className=\"meindesk-account-expander-actions\">\n <button\n type=\"button\"\n className=\"meindesk-account-btn-secondary\"\n onClick={() => setExpander(null)}\n >\n Cancel\n </button>\n <LoadingButton\n bare\n type=\"button\"\n className=\"meindesk-account-btn-primary\"\n loading={pending}\n loadingLabel=\"Disabling…\"\n disabled={\n !mfaDisablePassword && !mfaDisableRecovery\n }\n onClick={() => void disableMfa()}\n >\n Disable\n </LoadingButton>\n </div>\n </div>\n ) : null}\n </div>\n\n <ProfileSection label=\"Active devices\">\n {sessions.length === 0 ? (\n <p className=\"meindesk-account-muted\">No active devices.</p>\n ) : (\n sessions.map((s) => {\n const isCurrent = s.id === currentSessionId;\n const revoking = revokingId === s.id;\n return (\n <div\n key={s.id}\n className={[\n \"meindesk-account-device\",\n revoking ? \"meindesk-account-device-pending\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n aria-busy={revoking || undefined}\n >\n <div className=\"meindesk-account-device-top\">\n <div className=\"meindesk-account-device-title\">\n <span className=\"meindesk-account-device-icon\">\n ⌘\n </span>\n <div>\n <div className=\"meindesk-account-device-name\">\n {deviceTitle(s)}\n {isCurrent ? (\n <span\n className=\"meindesk-account-badge\"\n style={{ marginLeft: 8 }}\n >\n This device\n </span>\n ) : null}\n </div>\n <div className=\"meindesk-account-device-browser\">\n {browserLabel(s.userAgent)}\n </div>\n </div>\n </div>\n {!isCurrent ? (\n revoking ? (\n <LoadingButton\n variant=\"ghost\"\n loading\n loadingLabel=\"Signing out…\"\n className=\"meindesk-account-action\"\n style={{ width: \"auto\" }}\n >\n Sign out\n </LoadingButton>\n ) : (\n <RowMenu\n open={menuFor === s.id}\n onToggle={() =>\n setMenuFor((v) => (v === s.id ? null : s.id))\n }\n items={[\n {\n label: \"Sign out\",\n onClick: () => void revokeDevice(s.id),\n danger: true,\n },\n ]}\n />\n )\n ) : null}\n </div>\n <div className=\"meindesk-account-device-meta\">\n <div>\n {[s.ipAddress, s.location].filter(Boolean).join(\" · \") ||\n \"IP unknown\"}\n </div>\n <div>{formatWhen(s.lastActiveAt)}</div>\n </div>\n </div>\n );\n })\n )}\n </ProfileSection>\n\n <ProfileSection label=\"Recent activity\">\n {activity.length === 0 ? (\n <p className=\"meindesk-account-muted\">No recent activity.</p>\n ) : (\n activity.map((item) => (\n <div key={item.id} className=\"meindesk-account-activity\">\n <div className=\"meindesk-account-activity-title\">\n {activityLabel(item.type)}\n </div>\n <div className=\"meindesk-account-activity-meta\">\n {[\n item.ipAddress,\n item.userAgent\n ? browserLabel(item.userAgent)\n : null,\n formatWhen(item.createdAt),\n ]\n .filter(Boolean)\n .join(\" · \")}\n </div>\n </div>\n ))\n )}\n </ProfileSection>\n\n <div className=\"meindesk-account-section\">\n <ProfileRow label=\"Delete account\">\n <button\n type=\"button\"\n className=\"meindesk-account-danger-link\"\n onClick={() =>\n showComingSoon(\"Account deletion for end users\")\n }\n >\n Delete account\n </button>\n </ProfileRow>\n </div>\n </>\n ) : null}\n\n {tab === \"preferences\" ? (\n <ProfileSection label=\"Appearance\">\n <ProfileRow label=\"Appearance\">\n <div className=\"meindesk-account-select-wrap\">\n <span className=\"meindesk-account-select-icon\" aria-hidden>\n ▣\n </span>\n <select\n className=\"meindesk-account-select\"\n value={appearance}\n onChange={(e) =>\n onAppearanceChange(e.target.value as AppearanceMode)\n }\n >\n <option value=\"system\">System</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n </div>\n </ProfileRow>\n </ProfileSection>\n ) : null}\n </div>\n </FormTransition>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ProfileSection({\n label,\n children,\n}: {\n label: string;\n children: ReactNode;\n}) {\n return (\n <section className=\"meindesk-account-section\">\n <div className=\"meindesk-account-section-label\">{label}</div>\n <div className=\"meindesk-account-section-body\">{children}</div>\n </section>\n );\n}\n\nfunction ProfileRow({\n label,\n children,\n}: {\n label: string;\n children: ReactNode;\n}) {\n return (\n <div className=\"meindesk-account-setting-row\">\n <div className=\"meindesk-account-setting-label\">{label}</div>\n <div className=\"meindesk-account-setting-control\">{children}</div>\n </div>\n );\n}\n\nfunction ActionLink({\n onClick,\n children,\n variant = \"button\",\n}: {\n onClick: () => void;\n children: ReactNode;\n variant?: \"button\" | \"add\";\n}) {\n return (\n <button\n type=\"button\"\n className={\n variant === \"add\"\n ? \"meindesk-account-action-add\"\n : \"meindesk-account-action\"\n }\n onClick={onClick}\n >\n {children}\n </button>\n );\n}\n\nfunction Field({ label, children }: { label: string; children: ReactNode }) {\n return (\n <label className=\"meindesk-account-field\">\n <span>{label}</span>\n {children}\n </label>\n );\n}\n\nfunction NavItem({\n active,\n icon,\n label,\n onClick,\n}: {\n active: boolean;\n icon: ReactNode;\n label: string;\n onClick: () => void;\n}) {\n return (\n <button\n type=\"button\"\n className={[\n \"meindesk-account-nav-item\",\n active ? \"meindesk-account-nav-item-active\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={onClick}\n >\n <span className=\"meindesk-account-nav-icon\">{icon}</span>\n {label}\n </button>\n );\n}\n\nfunction RowMenu({\n open,\n onToggle,\n items,\n}: {\n open: boolean;\n onToggle: () => void;\n items: Array<{ label: string; onClick: () => void; danger?: boolean }>;\n}) {\n return (\n <div className=\"meindesk-account-menu-wrap\">\n <button\n type=\"button\"\n className=\"meindesk-account-ellipsis\"\n aria-label=\"More\"\n onClick={onToggle}\n >\n ···\n </button>\n {open ? (\n <div className=\"meindesk-account-menu\">\n {items.map((item) => (\n <button\n key={item.label}\n type=\"button\"\n className={\n item.danger\n ? \"meindesk-account-menu-item meindesk-account-menu-item-danger\"\n : \"meindesk-account-menu-item\"\n }\n onClick={item.onClick}\n >\n {item.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction IconUser() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <circle cx=\"12\" cy=\"8\" r=\"3.5\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <path\n d=\"M5 19c1.5-3.5 4-5 7-5s5.5 1.5 7 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nfunction IconShield() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <path\n d=\"M12 3l7 3v5c0 4.5-3 8-7 10-4-2-7-5.5-7-10V6l7-3z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction IconSliders() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <path\n d=\"M4 8h10M18 8h2M4 16h2M10 16h10M14 6v4M8 14v4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nexport function UserProfileButton({\n className,\n style,\n label = \"Manage account\",\n defaultTab = \"profile\",\n}: {\n className?: string;\n style?: CSSProperties;\n label?: string;\n defaultTab?: UserProfileTab;\n}) {\n const { isLoaded, isSignedIn } = useAuthContext();\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n ensureAuthStyles();\n }, []);\n\n if (!isLoaded || !isSignedIn) return null;\n\n return (\n <>\n <button\n type=\"button\"\n className={[\"meindesk-root\", \"meindesk-button\", className]\n .filter(Boolean)\n .join(\" \")}\n style={style}\n onClick={() => setOpen(true)}\n >\n {label}\n </button>\n <UserProfile\n open={open}\n onOpenChange={setOpen}\n defaultTab={defaultTab}\n expandEmailOnOpen={defaultTab === \"email\"}\n />\n </>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties, HTMLAttributes } from \"react\";\n\nexport type SkeletonShape = \"circle\" | \"line\" | \"rect\" | \"avatar\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n shape?: SkeletonShape;\n width?: number | string;\n height?: number | string;\n className?: string;\n style?: CSSProperties;\n}\n\n/** Soft pulse placeholder — match final layout, avoid aggressive shimmer. */\nexport function Skeleton({\n shape = \"rect\",\n width,\n height,\n className,\n style,\n ...rest\n}: SkeletonProps) {\n const resolvedShape = shape === \"avatar\" ? \"circle\" : shape;\n const defaults =\n resolvedShape === \"circle\"\n ? { width: width ?? 36, height: height ?? 36 }\n : resolvedShape === \"line\"\n ? { width: width ?? \"100%\", height: height ?? 12 }\n : { width: width ?? \"100%\", height: height ?? 16 };\n\n return (\n <div\n className={[\n \"meindesk-skeleton\",\n `meindesk-skeleton-${resolvedShape}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={{\n width: defaults.width,\n height: defaults.height,\n ...style,\n }}\n aria-hidden\n {...rest}\n />\n );\n}\n\nexport function UserButtonSkeleton({ className }: { className?: string }) {\n return (\n <div\n className={[\"meindesk-root\", \"meindesk-user-button\", className]\n .filter(Boolean)\n .join(\" \")}\n aria-busy=\"true\"\n aria-label=\"Loading account\"\n >\n <Skeleton shape=\"avatar\" width={36} height={36} />\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useState, type CSSProperties } from \"react\";\nimport { useAuthContext } from \"./provider\";\nimport { ensureAuthStyles } from \"./styles\";\nimport { UserProfile, type UserProfileTab } from \"./UserProfile\";\nimport { LoadingButton } from \"./components/LoadingButton\";\nimport { UserButtonSkeleton } from \"./components/Skeleton\";\n\nfunction getInitials(firstName?: string | null, lastName?: string | null, email?: string | null): string {\n const first = firstName?.trim()?.[0];\n const last = lastName?.trim()?.[0];\n if (first && last) return `${first}${last}`.toUpperCase();\n if (first) return first.toUpperCase();\n if (email?.trim()) return email.trim()[0]!.toUpperCase();\n return \"?\";\n}\n\nexport interface UserButtonProps {\n className?: string;\n style?: CSSProperties;\n afterSignOutUrl?: string;\n showName?: boolean;\n userProfileDefaultTab?: UserProfileTab;\n}\n\nexport function UserButton({\n className,\n style,\n afterSignOutUrl,\n showName = false,\n userProfileDefaultTab = \"profile\",\n}: UserButtonProps) {\n const { isLoaded, isSignedIn, user, signOut } = useAuthContext();\n const [open, setOpen] = useState(false);\n const [profileOpen, setProfileOpen] = useState(false);\n const [profileTab, setProfileTab] = useState<UserProfileTab>(userProfileDefaultTab);\n const [pending, setPending] = useState(false);\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n ensureAuthStyles();\n }, []);\n\n useEffect(() => {\n function onPointerDown(event: MouseEvent) {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n }\n\n document.addEventListener(\"mousedown\", onPointerDown);\n return () => document.removeEventListener(\"mousedown\", onPointerDown);\n }, []);\n\n const initials = useMemo(\n () => getInitials(user?.firstName, user?.lastName, user?.email),\n [user],\n );\n\n const displayName = useMemo(() => {\n const name = [user?.firstName, user?.lastName].filter(Boolean).join(\" \");\n return name || user?.email || \"Account\";\n }, [user]);\n\n if (!isLoaded) {\n return <UserButtonSkeleton className={className} />;\n }\n\n if (!isSignedIn || !user) return null;\n\n async function handleSignOut() {\n setPending(true);\n try {\n await signOut();\n if (afterSignOutUrl && typeof window !== \"undefined\") {\n window.location.assign(afterSignOutUrl);\n }\n } finally {\n setPending(false);\n setOpen(false);\n }\n }\n\n function openProfile(tab: UserProfileTab = userProfileDefaultTab) {\n setProfileTab(tab);\n setProfileOpen(true);\n setOpen(false);\n }\n\n return (\n <>\n <div\n ref={rootRef}\n className={[\"meindesk-root\", \"meindesk-user-button\", className]\n .filter(Boolean)\n .join(\" \")}\n style={style}\n >\n {showName ? (\n <span style={{ marginRight: 8, fontSize: \"0.875rem\", fontWeight: 600 }}>\n {displayName}\n </span>\n ) : null}\n <button\n type=\"button\"\n className=\"meindesk-avatar\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n {user.imageUrl ? (\n <img\n src={user.imageUrl}\n alt=\"\"\n width={36}\n height={36}\n style={{ width: \"100%\", height: \"100%\", borderRadius: \"999px\", objectFit: \"cover\" }}\n />\n ) : (\n initials\n )}\n </button>\n\n {open ? (\n <div className=\"meindesk-menu\" role=\"menu\">\n <div className=\"meindesk-menu-meta\">\n <p className=\"meindesk-menu-name\">{displayName}</p>\n {user.email ? <p className=\"meindesk-menu-email\">{user.email}</p> : null}\n </div>\n <button\n type=\"button\"\n className=\"meindesk-menu-item\"\n role=\"menuitem\"\n onClick={() => openProfile(\"profile\")}\n >\n Manage account\n </button>\n <button\n type=\"button\"\n className=\"meindesk-menu-item\"\n role=\"menuitem\"\n onClick={() => openProfile(\"security\")}\n >\n Security\n </button>\n <button\n type=\"button\"\n className=\"meindesk-menu-item\"\n role=\"menuitem\"\n onClick={() => openProfile(\"preferences\")}\n >\n Preferences\n </button>\n <LoadingButton\n bare\n className=\"meindesk-menu-item\"\n role=\"menuitem\"\n loading={pending}\n loadingLabel=\"Signing out…\"\n onClick={() => void handleSignOut()}\n style={{ width: \"100%\", justifyContent: \"flex-start\" }}\n >\n Sign out\n </LoadingButton>\n </div>\n ) : null}\n </div>\n\n <UserProfile\n open={profileOpen}\n onOpenChange={setProfileOpen}\n defaultTab={profileTab}\n expandEmailOnOpen={profileTab === \"email\"}\n />\n </>\n );\n}\n","\"use client\";\n\nimport type { ChangeEvent } from \"react\";\nimport type { FormField } from \"@meindesk/sdk\";\n\nexport interface RenderFormFieldProps {\n field: FormField;\n value: string;\n disabled?: boolean;\n onChange: (name: string, value: string) => void;\n autoComplete?: string;\n}\n\nexport function FormFieldControl({\n field,\n value,\n disabled,\n onChange,\n autoComplete,\n}: RenderFormFieldProps) {\n const label = field.label ?? field.name;\n const requiredMark = field.required ? \" *\" : \"\";\n\n function handleChange(\n event: ChangeEvent<HTMLInputElement | HTMLSelectElement>,\n ) {\n onChange(field.name, event.target.value);\n }\n\n if (field.type === \"checkbox\") {\n return (\n <label className=\"meindesk-field meindesk-checkbox-field\">\n <input\n className=\"meindesk-checkbox\"\n name={field.name}\n type=\"checkbox\"\n required={field.required}\n disabled={disabled}\n checked={value === \"true\" || value === \"on\" || value === \"1\"}\n onChange={(e) =>\n onChange(field.name, e.target.checked ? \"true\" : \"false\")\n }\n />\n <span className=\"meindesk-label\">\n {label}\n {requiredMark}\n </span>\n </label>\n );\n }\n\n if (field.type === \"select\") {\n return (\n <label className=\"meindesk-field\">\n <span className=\"meindesk-label\">\n {label}\n {requiredMark}\n </span>\n <select\n className=\"meindesk-select\"\n name={field.name}\n required={field.required}\n disabled={disabled}\n value={value}\n onChange={handleChange}\n >\n <option value=\"\">{field.placeholder ?? \"Select…\"}</option>\n {(field.options ?? []).map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </label>\n );\n }\n\n if (field.type === \"date\") {\n return (\n <label className=\"meindesk-field\">\n <span className=\"meindesk-label\">\n {label}\n {requiredMark}\n </span>\n <input\n className=\"meindesk-input\"\n name={field.name}\n type=\"date\"\n placeholder={field.placeholder}\n required={field.required}\n disabled={disabled}\n value={value}\n onChange={handleChange}\n autoComplete={autoComplete}\n />\n </label>\n );\n }\n\n return (\n <label className=\"meindesk-field\">\n <span className=\"meindesk-label\">\n {label}\n {requiredMark}\n </span>\n <input\n className=\"meindesk-input\"\n name={field.name}\n type={field.type || \"text\"}\n placeholder={field.placeholder}\n required={field.required}\n disabled={disabled}\n value={value}\n onChange={handleChange}\n autoComplete={autoComplete}\n />\n </label>\n );\n}\n\nexport function autoCompleteForField(\n fieldName: string,\n mode: \"sign-in\" | \"sign-up\" = \"sign-in\",\n): string | undefined {\n if (fieldName === \"password\") {\n return mode === \"sign-up\" ? \"new-password\" : \"current-password\";\n }\n if (fieldName === \"email\") return \"email\";\n if (fieldName === \"firstName\") return \"given-name\";\n if (fieldName === \"lastName\") return \"family-name\";\n if (fieldName === \"username\") return \"username\";\n if (fieldName === \"phoneNumber\") return \"tel\";\n return undefined;\n}\n"]}