{"version":3,"sources":["../../../src/primitives/Auth/AuthDialog.tsx"],"names":["resolveCanSignup"],"mappings":"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","file":"AuthDialog.mjs","sourcesContent":["import {\n  createContext,\n  useCallback,\n  useContext,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n  type FormEvent,\n  type ReactNode,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type { UseAuthResult } from '../../hooks/useAuth';\nimport { canSignup as resolveCanSignup, type AuthMode } from '../../types/auth';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface AuthDialogContextValue {\n  auth: UseAuthResult;\n  open: boolean;\n  close: () => void;\n  titleId: string;\n}\n\nconst AuthDialogContext = createContext<AuthDialogContextValue | null>(null);\n\nfunction useDialogContext(): AuthDialogContextValue {\n  const ctx = useContext(AuthDialogContext);\n  if (!ctx) {\n    throw new Error('<AuthDialog.*> must be rendered inside <AuthDialog>.');\n  }\n  return ctx;\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport interface AuthDialogProps {\n  /** Result from useAuth(). The dialog reads + drives this. */\n  auth: UseAuthResult;\n  /** Controlled open state. */\n  open: boolean;\n  /** Called when the dialog wants to close (overlay click, ESC, Close button). */\n  onOpenChange: (open: boolean) => void;\n  /** Children (typically `<AuthDialog.Overlay />` and `<AuthDialog.Panel>...`). */\n  children: ReactNode;\n  /**\n   * Disable closing via ESC key. Defaults to false (ESC closes).\n   */\n  disableEscapeClose?: boolean;\n  /**\n   * Where to portal the dialog. Defaults to `document.body`. Pass `null` to\n   * disable portaling and render in-place.\n   */\n  container?: HTMLElement | null;\n}\n\nfunction AuthDialogRoot({\n  auth,\n  open,\n  onOpenChange,\n  children,\n  disableEscapeClose,\n  container,\n}: AuthDialogProps) {\n  const titleId = useId();\n  const previouslyFocused = useRef<HTMLElement | null>(null);\n\n  const close = useCallback(() => {\n    onOpenChange(false);\n  }, [onOpenChange]);\n\n  // ESC to close + focus restore.\n  useEffect(() => {\n    if (!open) return;\n\n    if (typeof document !== 'undefined') {\n      previouslyFocused.current = document.activeElement as HTMLElement | null;\n    }\n\n    if (disableEscapeClose) return;\n\n    const onKey = (e: KeyboardEvent) => {\n      if (e.key === 'Escape') {\n        e.stopPropagation();\n        close();\n      }\n    };\n    if (typeof window !== 'undefined') {\n      window.addEventListener('keydown', onKey);\n      return () => {\n        window.removeEventListener('keydown', onKey);\n      };\n    }\n    return;\n  }, [open, disableEscapeClose, close]);\n\n  useEffect(() => {\n    if (open) return;\n    const el = previouslyFocused.current;\n    previouslyFocused.current = null;\n    if (el && typeof el.focus === 'function') {\n      try {\n        el.focus();\n      } catch {\n        // ignore\n      }\n    }\n  }, [open]);\n\n  const ctx = useMemo<AuthDialogContextValue>(\n    () => ({ auth, open, close, titleId }),\n    [auth, open, close, titleId],\n  );\n\n  if (!open) return null;\n\n  const content = <AuthDialogContext.Provider value={ctx}>{children}</AuthDialogContext.Provider>;\n\n  if (container === null) return content;\n\n  if (typeof document === 'undefined') return null;\n  const target = container ?? document.body;\n  return createPortal(content, target);\n}\n\n// ─── Overlay ──────────────────────────────────────────────────────────────────\n\nexport interface AuthDialogOverlayProps {\n  className?: string;\n  /**\n   * If true (default), clicking the overlay closes the dialog.\n   */\n  closeOnClick?: boolean;\n}\n\nfunction Overlay({ className, closeOnClick = true }: AuthDialogOverlayProps) {\n  const { close, open } = useDialogContext();\n  return (\n    <div\n      data-state={open ? 'open' : 'closed'}\n      className={className}\n      onClick={closeOnClick ? close : undefined}\n      aria-hidden\n    />\n  );\n}\n\n// ─── Panel ────────────────────────────────────────────────────────────────────\n\nexport interface AuthDialogPanelProps {\n  className?: string;\n  children: ReactNode;\n}\n\nfunction Panel({ className, children }: AuthDialogPanelProps) {\n  const { open, titleId } = useDialogContext();\n  const ref = useRef<HTMLDivElement | null>(null);\n\n  // Focus first focusable on open.\n  useEffect(() => {\n    if (!open || !ref.current) return;\n    const first = ref.current.querySelector<HTMLElement>(\n      'input, button, [tabindex]:not([tabindex=\"-1\"])',\n    );\n    if (first) {\n      try {\n        first.focus();\n      } catch {\n        // ignore\n      }\n    }\n  }, [open]);\n\n  return (\n    <div\n      ref={ref}\n      role=\"dialog\"\n      aria-modal=\"true\"\n      aria-labelledby={titleId}\n      data-state={open ? 'open' : 'closed'}\n      className={className}\n    >\n      {children}\n    </div>\n  );\n}\n\n// ─── Header / Title / Close ───────────────────────────────────────────────────\n\nexport interface AuthDialogHeaderProps {\n  className?: string;\n  children: ReactNode;\n}\nfunction Header({ className, children }: AuthDialogHeaderProps) {\n  return <div className={className}>{children}</div>;\n}\n\nexport interface AuthDialogTitleProps {\n  className?: string;\n  children?: ReactNode;\n  /**\n   * If provided, this string is shown when none of the more-specific\n   * mode children are passed. Defaults to a per-mode label.\n   */\n  fallback?: string;\n}\n\nfunction Title({ className, children, fallback }: AuthDialogTitleProps) {\n  const { auth, titleId } = useDialogContext();\n  const text = children ?? fallback ?? defaultTitleForMode(auth.mode);\n  return (\n    <h2 id={titleId} className={className}>\n      {text}\n    </h2>\n  );\n}\n\nfunction defaultTitleForMode(mode: AuthMode): string {\n  switch (mode) {\n    case 'signin':\n      return 'Sign in';\n    case 'signup':\n      return 'Create account';\n    case 'forgot':\n      return 'Reset your password';\n    case 'reset':\n      return 'Choose a new password';\n    case 'verify':\n      return 'Verifying your email';\n    case 'verify-sent':\n      return 'Check your inbox';\n    default:\n      return 'Account';\n  }\n}\n\nexport interface AuthDialogCloseProps {\n  className?: string;\n  children?: ReactNode;\n  ariaLabel?: string;\n}\nfunction Close({ className, children, ariaLabel }: AuthDialogCloseProps) {\n  const { close } = useDialogContext();\n  return (\n    <button\n      type=\"button\"\n      onClick={close}\n      className={className}\n      aria-label={ariaLabel ?? 'Close'}\n    >\n      {children ?? '×'}\n    </button>\n  );\n}\n\n// ─── Error ────────────────────────────────────────────────────────────────────\n\nexport interface AuthDialogErrorProps {\n  className?: string;\n  /** If true, hide when there's no error (default true). */\n  hideEmpty?: boolean;\n  children?: (message: string) => ReactNode;\n}\nfunction ErrorDisplay({ className, hideEmpty = true, children }: AuthDialogErrorProps) {\n  const { auth } = useDialogContext();\n  if (!auth.error) {\n    if (hideEmpty) return null;\n    return <div className={className} role=\"alert\" />;\n  }\n  return (\n    <div className={className} role=\"alert\">\n      {children ? children(auth.error.message) : auth.error.message}\n    </div>\n  );\n}\n\n// ─── Forms ────────────────────────────────────────────────────────────────────\n\ninterface FormPropsBase {\n  className?: string;\n  inputClassName?: string;\n  submitClassName?: string;\n  submitLabel?: ReactNode;\n  /** Optional renderProp slot: render after default fields, before submit. */\n  children?: ReactNode;\n}\n\nfunction shouldShowFor(mode: AuthMode, current: AuthMode): boolean {\n  return mode === current;\n}\n\nexport interface AuthDialogSignInFormProps extends FormPropsBase {\n  /** Default email value. */\n  defaultEmail?: string;\n}\n\nfunction SignInForm(props: AuthDialogSignInFormProps) {\n  const { auth } = useDialogContext();\n  if (!shouldShowFor(auth.mode, 'signin')) return null;\n\n  return (\n    <FormShell\n      onSubmit={async (data) => {\n        await auth.signIn(data.email, data.password);\n      }}\n      loading={auth.loading}\n      className={props.className}\n    >\n      <Field\n        type=\"email\"\n        name=\"email\"\n        label=\"Email\"\n        autoComplete=\"email\"\n        required\n        className={props.inputClassName}\n        defaultValue={props.defaultEmail}\n      />\n      <Field\n        type=\"password\"\n        name=\"password\"\n        label=\"Password\"\n        autoComplete=\"current-password\"\n        required\n        className={props.inputClassName}\n      />\n      {props.children}\n      <button type=\"submit\" className={props.submitClassName} disabled={auth.loading}>\n        {props.submitLabel ?? (auth.loading ? 'Signing in…' : 'Sign in')}\n      </button>\n    </FormShell>\n  );\n}\n\nexport interface AuthDialogSignUpFormProps extends FormPropsBase {\n  defaultEmail?: string;\n  /** Minimum password length hint shown to the user. Defaults to 8. */\n  minPasswordLength?: number;\n}\n\nfunction SignUpForm(props: AuthDialogSignUpFormProps) {\n  const { auth } = useDialogContext();\n  if (!shouldShowFor(auth.mode, 'signup')) return null;\n\n  // If the site doesn't accept signups, render a disabled panel instead of\n  // the form. Covers two cases: (1) consumer template still calls\n  // auth.setMode('signup') somewhere we can't intercept, (2) user lands on\n  // signup mode via a deep link / URL state.\n  if (!resolveCanSignup(auth.loginMethods)) {\n    return (\n      <div className={props.className} role=\"status\">\n        <p>This site doesn't accept new signups.</p>\n        <p>\n          If you already have an account,{' '}\n          <button\n            type=\"button\"\n            onClick={() => {\n              auth.clearError();\n              auth.setMode('signin');\n            }}\n          >\n            sign in\n          </button>\n          .\n        </p>\n      </div>\n    );\n  }\n\n  const minLen = props.minPasswordLength ?? 8;\n\n  return (\n    <FormShell\n      onSubmit={async (data) => {\n        await auth.signUp(data.email, data.password);\n      }}\n      loading={auth.loading}\n      className={props.className}\n    >\n      <Field\n        type=\"email\"\n        name=\"email\"\n        label=\"Email\"\n        autoComplete=\"email\"\n        required\n        className={props.inputClassName}\n        defaultValue={props.defaultEmail}\n      />\n      <Field\n        type=\"password\"\n        name=\"password\"\n        label=\"Password\"\n        autoComplete=\"new-password\"\n        required\n        minLength={minLen}\n        className={props.inputClassName}\n        hint={`At least ${minLen} characters`}\n      />\n      {props.children}\n      <button type=\"submit\" className={props.submitClassName} disabled={auth.loading}>\n        {props.submitLabel ?? (auth.loading ? 'Creating account…' : 'Create account')}\n      </button>\n    </FormShell>\n  );\n}\n\nexport interface AuthDialogForgotPasswordFormProps extends FormPropsBase {\n  defaultEmail?: string;\n  /** Message shown after the request is submitted. */\n  sentMessage?: ReactNode;\n  sentClassName?: string;\n}\n\nfunction ForgotPasswordForm(props: AuthDialogForgotPasswordFormProps) {\n  const { auth } = useDialogContext();\n  const [sent, setSent] = useState(false);\n  if (!shouldShowFor(auth.mode, 'forgot')) return null;\n\n  if (sent) {\n    return (\n      <div className={props.sentClassName}>\n        {props.sentMessage ??\n          'If an account exists for that email, a reset link has been sent. Check your inbox.'}\n      </div>\n    );\n  }\n\n  return (\n    <FormShell\n      onSubmit={async (data) => {\n        await auth.forgotPassword(data.email);\n        setSent(true);\n      }}\n      loading={auth.loading}\n      className={props.className}\n    >\n      <Field\n        type=\"email\"\n        name=\"email\"\n        label=\"Email\"\n        autoComplete=\"email\"\n        required\n        className={props.inputClassName}\n        defaultValue={props.defaultEmail}\n      />\n      {props.children}\n      <button type=\"submit\" className={props.submitClassName} disabled={auth.loading}>\n        {props.submitLabel ?? (auth.loading ? 'Sending…' : 'Send reset link')}\n      </button>\n    </FormShell>\n  );\n}\n\nexport interface AuthDialogResetPasswordFormProps extends FormPropsBase {\n  minPasswordLength?: number;\n}\n\nfunction ResetPasswordForm(props: AuthDialogResetPasswordFormProps) {\n  const { auth } = useDialogContext();\n  if (!shouldShowFor(auth.mode, 'reset')) return null;\n  const minLen = props.minPasswordLength ?? 8;\n\n  return (\n    <FormShell\n      onSubmit={async (data) => {\n        await auth.resetPassword(data.password);\n      }}\n      loading={auth.loading}\n      className={props.className}\n    >\n      <Field\n        type=\"password\"\n        name=\"password\"\n        label=\"New password\"\n        autoComplete=\"new-password\"\n        required\n        minLength={minLen}\n        className={props.inputClassName}\n        hint={`At least ${minLen} characters`}\n      />\n      {props.children}\n      <button type=\"submit\" className={props.submitClassName} disabled={auth.loading}>\n        {props.submitLabel ?? (auth.loading ? 'Saving…' : 'Save new password')}\n      </button>\n    </FormShell>\n  );\n}\n\nexport interface AuthDialogVerifyEmailNoticeProps {\n  className?: string;\n  resendClassName?: string;\n  resendLabel?: ReactNode;\n  /** Custom message renderer; receives the captured email or null. */\n  children?: (email: string | null) => ReactNode;\n}\n\nfunction VerifyEmailNotice(props: AuthDialogVerifyEmailNoticeProps) {\n  const { auth } = useDialogContext();\n  const [resent, setResent] = useState(false);\n\n  // Show during 'verify-sent' (post-signup) and 'verify' (auto-verify in flight).\n  if (auth.mode !== 'verify' && auth.mode !== 'verify-sent') return null;\n\n  if (auth.mode === 'verify') {\n    return (\n      <div className={props.className} aria-live=\"polite\">\n        Verifying your email…\n      </div>\n    );\n  }\n\n  return (\n    <div className={props.className} aria-live=\"polite\">\n      {props.children ? (\n        props.children(auth.pendingVerifyEmail)\n      ) : (\n        <p>\n          We sent a verification link\n          {auth.pendingVerifyEmail ? ` to ${auth.pendingVerifyEmail}` : ''}. Click the\n          link to finish setting up your account.\n        </p>\n      )}\n      <button\n        type=\"button\"\n        className={props.resendClassName}\n        disabled={auth.loading || resent}\n        onClick={async () => {\n          try {\n            await auth.resendVerification();\n            setResent(true);\n          } catch {\n            // error surfaced via auth.error\n          }\n        }}\n      >\n        {resent ? 'Sent.' : props.resendLabel ?? 'Resend email'}\n      </button>\n    </div>\n  );\n}\n\n// ─── Mode switches ────────────────────────────────────────────────────────────\n\nexport interface AuthDialogModeSwitchProps {\n  to: AuthMode;\n  className?: string;\n  children: ReactNode;\n  /** Show only when the current mode is in this set. Defaults to always. */\n  visibleWhen?: AuthMode[];\n}\n\nfunction ModeSwitch({ to, className, children, visibleWhen }: AuthDialogModeSwitchProps) {\n  const { auth } = useDialogContext();\n  if (visibleWhen && !visibleWhen.includes(auth.mode)) return null;\n  // Hide \"switch to sign up\" links when the site doesn't accept new signups.\n  // Workspace-level kill switch OR per-project allowPublicSignup=false collapses\n  // both to canSignup=false here, so the consumer template doesn't need to\n  // know which gate fired.\n  if (to === 'signup' && !resolveCanSignup(auth.loginMethods)) return null;\n  return (\n    <button\n      type=\"button\"\n      className={className}\n      onClick={() => {\n        auth.clearError();\n        auth.setMode(to);\n      }}\n    >\n      {children}\n    </button>\n  );\n}\n\n// ─── Identity-provider branding ───────────────────────────────────────────────\n\nexport interface AuthDialogPoweredByProps {\n  className?: string;\n  /**\n   * The URL of the central account hub. Defaults to\n   * `https://admin.sites.bffless.app/account`. Override for self-hosted CE\n   * deployments or staging environments.\n   */\n  href?: string;\n  /**\n   * Override the rendered link text. Defaults to\n   * `\"Powered by BFFless Auth · Manage account\"`.\n   */\n  children?: ReactNode;\n}\n\n/**\n * Subtle footer link communicating the identity-provider model: \"this site's\n * sign-in is BFFless Auth; you can manage credentials and see all your sites\n * at one central place.\" Pair it with `<AuthDialog.Panel>`.\n *\n * Rendered as a normal anchor so it works with any styling system. Opens in\n * a new tab so the consumer site doesn't lose context.\n */\nfunction PoweredBy({ className, href, children }: AuthDialogPoweredByProps) {\n  return (\n    <a\n      href={href ?? 'https://admin.sites.bffless.app/account'}\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n      className={className}\n    >\n      {children ?? 'Powered by BFFless Auth · Manage account'}\n    </a>\n  );\n}\n\n// ─── Smart-error UX: account already exists ──────────────────────────────────\n\nexport interface AuthDialogAccountExistsHintProps {\n  className?: string;\n  /**\n   * Render slot. Receives the helper to switch to sign-in mode (which also\n   * clears the current error). Use this to wire your own copy / button:\n   *\n   * ```tsx\n   * <AuthDialog.AccountExistsHint>\n   *   {(switchToSignIn) => (\n   *     <p>\n   *       That email is already registered. <button onClick={switchToSignIn}>Sign in</button> instead.\n   *     </p>\n   *   )}\n   * </AuthDialog.AccountExistsHint>\n   * ```\n   */\n  children?: (switchToSignIn: () => void) => ReactNode;\n  /** Class for the inline \"Sign in instead\" button in the default copy. */\n  switchClassName?: string;\n}\n\n/**\n * Inline helper that detects the `email_exists` error coming back from\n * `<AuthDialog.SignUpForm>` and offers to switch to the Sign-in tab. Renders\n * nothing in any other state — safe to drop into the panel unconditionally.\n *\n * Place it near `<AuthDialog.Error>` (or replace the generic error display\n * for the email-exists path):\n *\n * ```tsx\n * <AuthDialog.SignUpForm />\n * <AuthDialog.AccountExistsHint />\n * <AuthDialog.Error />\n * ```\n *\n * The component decides when to show; the consumer keeps full control over\n * styling and copy via the optional render prop.\n */\nfunction AccountExistsHint({\n  className,\n  children,\n  switchClassName,\n}: AuthDialogAccountExistsHintProps) {\n  const { auth } = useDialogContext();\n  if (auth.mode !== 'signup') return null;\n  if (auth.error?.code !== 'email_exists') return null;\n\n  const switchToSignIn = () => {\n    auth.clearError();\n    auth.setMode('signin');\n  };\n\n  if (children) return <>{children(switchToSignIn)}</>;\n\n  return (\n    <div className={className} role=\"alert\">\n      An account with this email already exists.{' '}\n      <button type=\"button\" onClick={switchToSignIn} className={switchClassName}>\n        Sign in instead\n      </button>\n    </div>\n  );\n}\n\nexport interface AuthDialogForgotPasswordLinkProps {\n  className?: string;\n  children?: ReactNode;\n}\nfunction ForgotPasswordLink({ className, children }: AuthDialogForgotPasswordLinkProps) {\n  const { auth } = useDialogContext();\n  if (auth.mode !== 'signin') return null;\n  return (\n    <button\n      type=\"button\"\n      className={className}\n      onClick={() => {\n        auth.clearError();\n        auth.setMode('forgot');\n      }}\n    >\n      {children ?? 'Forgot password?'}\n    </button>\n  );\n}\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\ninterface FormShellProps {\n  className?: string;\n  loading: boolean;\n  children: ReactNode;\n  onSubmit: (data: { email: string; password: string }) => Promise<void> | void;\n}\nfunction FormShell({ className, loading, children, onSubmit }: FormShellProps) {\n  const handle = useCallback(\n    async (e: FormEvent<HTMLFormElement>) => {\n      e.preventDefault();\n      if (loading) return;\n      const fd = new FormData(e.currentTarget);\n      const email = String(fd.get('email') ?? '');\n      const password = String(fd.get('password') ?? '');\n      try {\n        await onSubmit({ email, password });\n      } catch {\n        // surfaced via auth.error\n      }\n    },\n    [loading, onSubmit],\n  );\n  return (\n    <form className={className} onSubmit={handle} noValidate>\n      {children}\n    </form>\n  );\n}\n\ninterface FieldProps {\n  type: 'email' | 'password';\n  name: 'email' | 'password';\n  label: ReactNode;\n  autoComplete?: string;\n  required?: boolean;\n  minLength?: number;\n  defaultValue?: string;\n  hint?: ReactNode;\n  className?: string;\n}\nfunction Field({\n  type,\n  name,\n  label,\n  autoComplete,\n  required,\n  minLength,\n  defaultValue,\n  hint,\n  className,\n}: FieldProps) {\n  const id = useId();\n  return (\n    <label htmlFor={id}>\n      <span>{label}</span>\n      <input\n        id={id}\n        type={type}\n        name={name}\n        autoComplete={autoComplete}\n        required={required}\n        minLength={minLength}\n        defaultValue={defaultValue}\n        className={className}\n      />\n      {hint ? <small>{hint}</small> : null}\n    </label>\n  );\n}\n\n// ─── Compound export ──────────────────────────────────────────────────────────\n\nexport const AuthDialog = Object.assign(AuthDialogRoot, {\n  Overlay,\n  Panel,\n  Header,\n  Title,\n  Close,\n  Error: ErrorDisplay,\n  SignInForm,\n  SignUpForm,\n  ForgotPasswordForm,\n  ResetPasswordForm,\n  VerifyEmailNotice,\n  ModeSwitch,\n  ForgotPasswordLink,\n  PoweredBy,\n  AccountExistsHint,\n});\n"]}