{"version":3,"sources":["../src/exports/components.ts","../src/components/NewsletterForm.tsx","../src/components/PreferencesForm.tsx","../src/components/MagicLinkVerify.tsx","../src/hooks/useNewsletterAuth.ts"],"sourcesContent":["'use client'\n\n// Re-export all components from the client export\n// This allows users to import directly from @payloadcms/plugin-newsletter/components\nexport * from './client'","'use client'\n\nimport React, { useState, FormEvent } from 'react'\nimport type { SignupFormProps } from '../types'\n\nconst defaultStyles = {\n  form: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    gap: '1rem',\n    maxWidth: '400px',\n    margin: '0 auto',\n  },\n  inputGroup: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    gap: '0.5rem',\n  },\n  label: {\n    fontSize: '0.875rem',\n    fontWeight: '500',\n    color: '#374151',\n  },\n  input: {\n    padding: '0.5rem 0.75rem',\n    fontSize: '1rem',\n    border: '1px solid #e5e7eb',\n    borderRadius: '0.375rem',\n    outline: 'none',\n    transition: 'border-color 0.2s',\n  },\n  button: {\n    padding: '0.75rem 1.5rem',\n    fontSize: '1rem',\n    fontWeight: '500',\n    color: '#ffffff',\n    backgroundColor: '#3b82f6',\n    border: 'none',\n    borderRadius: '0.375rem',\n    cursor: 'pointer',\n    transition: 'background-color 0.2s',\n  },\n  buttonDisabled: {\n    opacity: 0.5,\n    cursor: 'not-allowed',\n  },\n  error: {\n    fontSize: '0.875rem',\n    color: '#ef4444',\n    marginTop: '0.25rem',\n  },\n  success: {\n    fontSize: '0.875rem',\n    color: '#10b981',\n    marginTop: '0.25rem',\n  },\n  checkbox: {\n    display: 'flex',\n    alignItems: 'center',\n    gap: '0.5rem',\n  },\n  checkboxInput: {\n    width: '1rem',\n    height: '1rem',\n  },\n  checkboxLabel: {\n    fontSize: '0.875rem',\n    color: '#374151',\n  },\n}\n\nexport const NewsletterForm: React.FC<SignupFormProps> = ({\n  onSuccess,\n  onError,\n  showName = false,\n  showPreferences = false,\n  leadMagnet,\n  className,\n  styles: customStyles = {},\n  apiEndpoint = '/api/newsletter/subscribe',\n  buttonText = 'Subscribe',\n  loadingText = 'Subscribing...',\n  successMessage = 'Successfully subscribed!',\n  placeholders = {\n    email: 'Enter your email',\n    name: 'Enter your name',\n  },\n  labels = {\n    email: 'Email',\n    name: 'Name',\n    newsletter: 'Newsletter updates',\n    announcements: 'Product announcements',\n  },\n}) => {\n  const [email, setEmail] = useState('')\n  const [name, setName] = useState('')\n  const [preferences, setPreferences] = useState({\n    newsletter: true,\n    announcements: true,\n  })\n  const [loading, setLoading] = useState(false)\n  const [error, setError] = useState<string | null>(null)\n  const [success, setSuccess] = useState(false)\n\n  const styles = {\n    form: { ...defaultStyles.form, ...customStyles.form },\n    inputGroup: { ...defaultStyles.inputGroup, ...customStyles.inputGroup },\n    label: { ...defaultStyles.label, ...customStyles.label },\n    input: { ...defaultStyles.input, ...customStyles.input },\n    button: { ...defaultStyles.button, ...customStyles.button },\n    buttonDisabled: { ...defaultStyles.buttonDisabled, ...customStyles.buttonDisabled },\n    error: { ...defaultStyles.error, ...customStyles.error },\n    success: { ...defaultStyles.success, ...customStyles.success },\n    checkbox: { ...defaultStyles.checkbox, ...customStyles.checkbox },\n    checkboxInput: { ...defaultStyles.checkboxInput, ...customStyles.checkboxInput },\n    checkboxLabel: { ...defaultStyles.checkboxLabel, ...customStyles.checkboxLabel },\n  }\n\n  const handleSubmit = async (e: FormEvent) => {\n    e.preventDefault()\n    setError(null)\n    setLoading(true)\n\n    try {\n      const payload: any = {\n        email,\n        ...(showName && name && { name }),\n        ...(showPreferences && { preferences }),\n        ...(leadMagnet && { leadMagnet: leadMagnet.id }),\n        metadata: {\n          signupPage: window.location.href,\n          ...(typeof window !== 'undefined' && window.location.search && {\n            utmParams: Object.fromEntries(new URLSearchParams(window.location.search)),\n          }),\n        },\n      }\n\n      const response = await fetch(apiEndpoint, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(payload),\n      })\n\n      const data = await response.json()\n\n      if (!response.ok) {\n        throw new Error(data.error || data.errors?.join(', ') || 'Subscription failed')\n      }\n\n      setSuccess(true)\n      setEmail('')\n      setName('')\n      if (onSuccess) {\n        onSuccess(data.subscriber)\n      }\n    } catch (err) {\n      const errorMessage = err instanceof Error ? err.message : 'An error occurred'\n      setError(errorMessage)\n      if (onError) {\n        onError(new Error(errorMessage))\n      }\n    } finally {\n      setLoading(false)\n    }\n  }\n\n  if (success && !showPreferences) {\n    return (\n      <div className={className} style={styles.form}>\n        <p style={styles.success}>{successMessage}</p>\n      </div>\n    )\n  }\n\n  return (\n    <form onSubmit={handleSubmit} className={className} style={styles.form}>\n      <div style={styles.inputGroup}>\n        <label htmlFor=\"email\" style={styles.label}>\n          {labels.email}\n        </label>\n        <input\n          id=\"email\"\n          type=\"email\"\n          value={email}\n          onChange={(e) => setEmail(e.target.value)}\n          placeholder={placeholders.email}\n          required\n          disabled={loading}\n          style={{\n            ...styles.input,\n            ...(loading && { opacity: 0.5 }),\n          }}\n        />\n      </div>\n\n      {showName && (\n        <div style={styles.inputGroup}>\n          <label htmlFor=\"name\" style={styles.label}>\n            {labels.name}\n          </label>\n          <input\n            id=\"name\"\n            type=\"text\"\n            value={name}\n            onChange={(e) => setName(e.target.value)}\n            placeholder={placeholders.name}\n            disabled={loading}\n            style={{\n              ...styles.input,\n              ...(loading && { opacity: 0.5 }),\n            }}\n          />\n        </div>\n      )}\n\n      {showPreferences && (\n        <div style={styles.inputGroup}>\n          <label style={styles.label}>Email Preferences</label>\n          <div style={styles.checkbox}>\n            <input\n              id=\"newsletter\"\n              type=\"checkbox\"\n              checked={preferences.newsletter}\n              onChange={(e) =>\n                setPreferences({ ...preferences, newsletter: e.target.checked })\n              }\n              disabled={loading}\n              style={styles.checkboxInput}\n            />\n            <label htmlFor=\"newsletter\" style={styles.checkboxLabel}>\n              {labels.newsletter}\n            </label>\n          </div>\n          <div style={styles.checkbox}>\n            <input\n              id=\"announcements\"\n              type=\"checkbox\"\n              checked={preferences.announcements}\n              onChange={(e) =>\n                setPreferences({ ...preferences, announcements: e.target.checked })\n              }\n              disabled={loading}\n              style={styles.checkboxInput}\n            />\n            <label htmlFor=\"announcements\" style={styles.checkboxLabel}>\n              {labels.announcements}\n            </label>\n          </div>\n        </div>\n      )}\n\n      <button\n        type=\"submit\"\n        disabled={loading}\n        style={{\n          ...styles.button,\n          ...(loading && styles.buttonDisabled),\n        }}\n      >\n        {loading ? loadingText : buttonText}\n      </button>\n\n      {error && <p style={styles.error}>{error}</p>}\n      {success && <p style={styles.success}>{successMessage}</p>}\n    </form>\n  )\n}\n\n// Factory function for creating custom newsletter forms\nexport function createNewsletterForm(\n  defaultProps: Partial<SignupFormProps>\n): React.FC<SignupFormProps> {\n  return (props: SignupFormProps) => (\n    <NewsletterForm {...defaultProps} {...props} />\n  )\n}","'use client'\n\nimport React, { useState, useEffect, FormEvent } from 'react'\nimport type { PreferencesFormProps, Subscriber } from '../types'\n\nconst defaultStyles = {\n  container: {\n    maxWidth: '600px',\n    margin: '0 auto',\n    padding: '2rem',\n  },\n  heading: {\n    fontSize: '1.5rem',\n    fontWeight: '600',\n    marginBottom: '1.5rem',\n    color: '#111827',\n  },\n  form: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    gap: '1.5rem',\n  },\n  section: {\n    padding: '1.5rem',\n    backgroundColor: '#f9fafb',\n    borderRadius: '0.5rem',\n    border: '1px solid #e5e7eb',\n  },\n  sectionTitle: {\n    fontSize: '1.125rem',\n    fontWeight: '500',\n    marginBottom: '1rem',\n    color: '#111827',\n  },\n  inputGroup: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    gap: '0.5rem',\n  },\n  label: {\n    fontSize: '0.875rem',\n    fontWeight: '500',\n    color: '#374151',\n  },\n  input: {\n    padding: '0.5rem 0.75rem',\n    fontSize: '1rem',\n    border: '1px solid #e5e7eb',\n    borderRadius: '0.375rem',\n    outline: 'none',\n    transition: 'border-color 0.2s',\n  },\n  select: {\n    padding: '0.5rem 0.75rem',\n    fontSize: '1rem',\n    border: '1px solid #e5e7eb',\n    borderRadius: '0.375rem',\n    outline: 'none',\n    backgroundColor: '#ffffff',\n  },\n  checkbox: {\n    display: 'flex',\n    alignItems: 'center',\n    gap: '0.5rem',\n    marginBottom: '0.5rem',\n  },\n  checkboxInput: {\n    width: '1rem',\n    height: '1rem',\n  },\n  checkboxLabel: {\n    fontSize: '0.875rem',\n    color: '#374151',\n  },\n  buttonGroup: {\n    display: 'flex',\n    gap: '1rem',\n    marginTop: '1rem',\n  },\n  button: {\n    padding: '0.75rem 1.5rem',\n    fontSize: '1rem',\n    fontWeight: '500',\n    borderRadius: '0.375rem',\n    cursor: 'pointer',\n    transition: 'all 0.2s',\n    border: 'none',\n  },\n  primaryButton: {\n    color: '#ffffff',\n    backgroundColor: '#3b82f6',\n  },\n  secondaryButton: {\n    color: '#374151',\n    backgroundColor: '#ffffff',\n    border: '1px solid #e5e7eb',\n  },\n  dangerButton: {\n    color: '#ffffff',\n    backgroundColor: '#ef4444',\n  },\n  error: {\n    fontSize: '0.875rem',\n    color: '#ef4444',\n    marginTop: '0.5rem',\n  },\n  success: {\n    fontSize: '0.875rem',\n    color: '#10b981',\n    marginTop: '0.5rem',\n  },\n  info: {\n    fontSize: '0.875rem',\n    color: '#6b7280',\n    marginTop: '0.5rem',\n  },\n}\n\nexport const PreferencesForm: React.FC<PreferencesFormProps> = ({\n  subscriber: initialSubscriber,\n  onSuccess,\n  onError,\n  className,\n  styles: customStyles = {},\n  sessionToken,\n  apiEndpoint = '/api/newsletter/preferences',\n  showUnsubscribe = true,\n  locales = ['en'],\n  labels = {\n    title: 'Newsletter Preferences',\n    personalInfo: 'Personal Information',\n    emailPreferences: 'Email Preferences',\n    name: 'Name',\n    language: 'Preferred Language',\n    newsletter: 'Newsletter updates',\n    announcements: 'Product announcements',\n    saveButton: 'Save Preferences',\n    unsubscribeButton: 'Unsubscribe',\n    saving: 'Saving...',\n    saved: 'Preferences saved successfully!',\n    unsubscribeConfirm: 'Are you sure you want to unsubscribe? This cannot be undone.',\n  },\n}) => {\n  const [subscriber, setSubscriber] = useState<Partial<Subscriber>>(initialSubscriber || {})\n  const [loading, setLoading] = useState(false)\n  const [loadingData, setLoadingData] = useState(!initialSubscriber)\n  const [error, setError] = useState<string | null>(null)\n  const [success, setSuccess] = useState(false)\n\n  const styles = {\n    container: { ...defaultStyles.container, ...customStyles.container },\n    heading: { ...defaultStyles.heading, ...customStyles.heading },\n    form: { ...defaultStyles.form, ...customStyles.form },\n    section: { ...defaultStyles.section, ...customStyles.section },\n    sectionTitle: { ...defaultStyles.sectionTitle, ...customStyles.sectionTitle },\n    inputGroup: { ...defaultStyles.inputGroup, ...customStyles.inputGroup },\n    label: { ...defaultStyles.label, ...customStyles.label },\n    input: { ...defaultStyles.input, ...customStyles.input },\n    select: { ...defaultStyles.select, ...customStyles.select },\n    checkbox: { ...defaultStyles.checkbox, ...customStyles.checkbox },\n    checkboxInput: { ...defaultStyles.checkboxInput, ...customStyles.checkboxInput },\n    checkboxLabel: { ...defaultStyles.checkboxLabel, ...customStyles.checkboxLabel },\n    buttonGroup: { ...defaultStyles.buttonGroup, ...customStyles.buttonGroup },\n    button: { ...defaultStyles.button, ...customStyles.button },\n    primaryButton: { ...defaultStyles.primaryButton, ...customStyles.primaryButton },\n    secondaryButton: { ...defaultStyles.secondaryButton, ...customStyles.secondaryButton },\n    dangerButton: { ...defaultStyles.dangerButton, ...customStyles.dangerButton },\n    error: { ...defaultStyles.error, ...customStyles.error },\n    success: { ...defaultStyles.success, ...customStyles.success },\n    info: { ...defaultStyles.info, ...customStyles.info },\n  }\n\n  // Fetch current preferences if not provided\n  useEffect(() => {\n    if (!initialSubscriber && sessionToken) {\n      fetchPreferences()\n    }\n  }, [])\n\n  const fetchPreferences = async () => {\n    try {\n      const response = await fetch(apiEndpoint, {\n        headers: {\n          'Authorization': `Bearer ${sessionToken}`,\n        },\n      })\n\n      if (!response.ok) {\n        throw new Error('Failed to load preferences')\n      }\n\n      const data = await response.json()\n      setSubscriber(data.subscriber)\n    } catch (err) {\n      setError(err instanceof Error ? err.message : 'Failed to load preferences')\n      if (onError) {\n        onError(err instanceof Error ? err : new Error('Failed to load preferences'))\n      }\n    } finally {\n      setLoadingData(false)\n    }\n  }\n\n  const handleSave = async (e: FormEvent) => {\n    e.preventDefault()\n    setError(null)\n    setSuccess(false)\n    setLoading(true)\n\n    try {\n      const response = await fetch(apiEndpoint, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'Authorization': `Bearer ${sessionToken}`,\n        },\n        body: JSON.stringify({\n          name: subscriber.name,\n          locale: subscriber.locale,\n          emailPreferences: subscriber.emailPreferences,\n        }),\n      })\n\n      const data = await response.json()\n\n      if (!response.ok) {\n        throw new Error(data.error || 'Failed to save preferences')\n      }\n\n      setSubscriber(data.subscriber)\n      setSuccess(true)\n      if (onSuccess) {\n        onSuccess(data.subscriber)\n      }\n    } catch (err) {\n      const errorMessage = err instanceof Error ? err.message : 'An error occurred'\n      setError(errorMessage)\n      if (onError) {\n        onError(new Error(errorMessage))\n      }\n    } finally {\n      setLoading(false)\n    }\n  }\n\n  const handleUnsubscribe = async () => {\n    if (!window.confirm(labels.unsubscribeConfirm)) {\n      return\n    }\n\n    setLoading(true)\n    setError(null)\n\n    try {\n      const response = await fetch('/api/newsletter/unsubscribe', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'Authorization': `Bearer ${sessionToken}`,\n        },\n        body: JSON.stringify({\n          email: subscriber.email,\n        }),\n      })\n\n      if (!response.ok) {\n        throw new Error('Failed to unsubscribe')\n      }\n\n      setSubscriber({ ...subscriber, subscriptionStatus: 'unsubscribed' })\n      if (onSuccess) {\n        onSuccess({ ...subscriber, subscriptionStatus: 'unsubscribed' } as Subscriber)\n      }\n    } catch (err) {\n      setError('Failed to unsubscribe. Please try again.')\n      if (onError) {\n        onError(err instanceof Error ? err : new Error('Failed to unsubscribe'))\n      }\n    } finally {\n      setLoading(false)\n    }\n  }\n\n  if (loadingData) {\n    return (\n      <div className={className} style={styles.container}>\n        <p style={styles.info}>Loading preferences...</p>\n      </div>\n    )\n  }\n\n  if (subscriber.subscriptionStatus === 'unsubscribed') {\n    return (\n      <div className={className} style={styles.container}>\n        <h2 style={styles.heading}>Unsubscribed</h2>\n        <p style={styles.info}>\n          You have been unsubscribed from all emails. \n          To resubscribe, please sign up again.\n        </p>\n      </div>\n    )\n  }\n\n  return (\n    <div className={className} style={styles.container}>\n      <h2 style={styles.heading}>{labels.title}</h2>\n      \n      <form onSubmit={handleSave} style={styles.form}>\n        <div style={styles.section}>\n          <h3 style={styles.sectionTitle}>{labels.personalInfo}</h3>\n          \n          <div style={styles.inputGroup}>\n            <label htmlFor=\"name\" style={styles.label}>\n              {labels.name}\n            </label>\n            <input\n              id=\"name\"\n              type=\"text\"\n              value={subscriber.name || ''}\n              onChange={(e) => setSubscriber({ ...subscriber, name: e.target.value })}\n              disabled={loading}\n              style={styles.input}\n            />\n          </div>\n\n          {locales.length > 1 && (\n            <div style={styles.inputGroup}>\n              <label htmlFor=\"locale\" style={styles.label}>\n                {labels.language}\n              </label>\n              <select\n                id=\"locale\"\n                value={subscriber.locale || locales[0]}\n                onChange={(e) => setSubscriber({ ...subscriber, locale: e.target.value })}\n                disabled={loading}\n                style={styles.select}\n              >\n                {locales.map(locale => (\n                  <option key={locale} value={locale}>\n                    {locale.toUpperCase()}\n                  </option>\n                ))}\n              </select>\n            </div>\n          )}\n        </div>\n\n        <div style={styles.section}>\n          <h3 style={styles.sectionTitle}>{labels.emailPreferences}</h3>\n          \n          <div style={styles.checkbox}>\n            <input\n              id=\"pref-newsletter\"\n              type=\"checkbox\"\n              checked={subscriber.emailPreferences?.newsletter ?? true}\n              onChange={(e) =>\n                setSubscriber({\n                  ...subscriber,\n                  emailPreferences: {\n                    ...subscriber.emailPreferences,\n                    newsletter: e.target.checked,\n                  },\n                })\n              }\n              disabled={loading}\n              style={styles.checkboxInput}\n            />\n            <label htmlFor=\"pref-newsletter\" style={styles.checkboxLabel}>\n              {labels.newsletter}\n            </label>\n          </div>\n\n          <div style={styles.checkbox}>\n            <input\n              id=\"pref-announcements\"\n              type=\"checkbox\"\n              checked={subscriber.emailPreferences?.announcements ?? true}\n              onChange={(e) =>\n                setSubscriber({\n                  ...subscriber,\n                  emailPreferences: {\n                    ...subscriber.emailPreferences,\n                    announcements: e.target.checked,\n                  },\n                })\n              }\n              disabled={loading}\n              style={styles.checkboxInput}\n            />\n            <label htmlFor=\"pref-announcements\" style={styles.checkboxLabel}>\n              {labels.announcements}\n            </label>\n          </div>\n        </div>\n\n        <div style={styles.buttonGroup}>\n          <button\n            type=\"submit\"\n            disabled={loading}\n            style={{\n              ...styles.button,\n              ...styles.primaryButton,\n              ...(loading && { opacity: 0.5, cursor: 'not-allowed' }),\n            }}\n          >\n            {loading ? labels.saving : labels.saveButton}\n          </button>\n\n          {showUnsubscribe && (\n            <button\n              type=\"button\"\n              onClick={handleUnsubscribe}\n              disabled={loading}\n              style={{\n                ...styles.button,\n                ...styles.dangerButton,\n                ...(loading && { opacity: 0.5, cursor: 'not-allowed' }),\n              }}\n            >\n              {labels.unsubscribeButton}\n            </button>\n          )}\n        </div>\n\n        {error && <p style={styles.error}>{error}</p>}\n        {success && <p style={styles.success}>{labels.saved}</p>}\n      </form>\n    </div>\n  )\n}\n\n// Factory function for creating custom preferences forms\nexport function createPreferencesForm(\n  defaultProps: Partial<PreferencesFormProps>\n): React.FC<PreferencesFormProps> {\n  return (props: PreferencesFormProps) => (\n    <PreferencesForm {...defaultProps} {...props} />\n  )\n}","'use client'\n\nimport React, { useState, useEffect } from 'react'\n\nexport interface MagicLinkVerifyProps {\n  token?: string\n  onSuccess?: (sessionToken: string, subscriber: any) => void\n  onError?: (error: Error) => void\n  apiEndpoint?: string\n  className?: string\n  styles?: {\n    container?: React.CSSProperties\n    heading?: React.CSSProperties\n    message?: React.CSSProperties\n    error?: React.CSSProperties\n    button?: React.CSSProperties\n  }\n  labels?: {\n    verifying?: string\n    success?: string\n    error?: string\n    expired?: string\n    invalid?: string\n    redirecting?: string\n    tryAgain?: string\n  }\n}\n\nconst defaultStyles = {\n  container: {\n    maxWidth: '400px',\n    margin: '4rem auto',\n    padding: '2rem',\n    textAlign: 'center' as const,\n  },\n  heading: {\n    fontSize: '1.5rem',\n    fontWeight: '600',\n    marginBottom: '1rem',\n    color: '#111827',\n  },\n  message: {\n    fontSize: '1rem',\n    color: '#6b7280',\n    marginBottom: '1.5rem',\n  },\n  error: {\n    fontSize: '1rem',\n    color: '#ef4444',\n    marginBottom: '1.5rem',\n  },\n  button: {\n    padding: '0.75rem 1.5rem',\n    fontSize: '1rem',\n    fontWeight: '500',\n    color: '#ffffff',\n    backgroundColor: '#3b82f6',\n    border: 'none',\n    borderRadius: '0.375rem',\n    cursor: 'pointer',\n    transition: 'background-color 0.2s',\n  },\n}\n\nexport const MagicLinkVerify: React.FC<MagicLinkVerifyProps> = ({\n  token: propToken,\n  onSuccess,\n  onError,\n  apiEndpoint = '/api/newsletter/verify-magic-link',\n  className,\n  styles: customStyles = {},\n  labels = {\n    verifying: 'Verifying your magic link...',\n    success: 'Successfully verified! Redirecting...',\n    error: 'Failed to verify magic link',\n    expired: 'This magic link has expired. Please request a new one.',\n    invalid: 'This magic link is invalid. Please request a new one.',\n    redirecting: 'Redirecting to your preferences...',\n    tryAgain: 'Try Again',\n  },\n}) => {\n  const [status, setStatus] = useState<'verifying' | 'success' | 'error'>('verifying')\n  const [error, setError] = useState<string | null>(null)\n  const [_sessionToken, setSessionToken] = useState<string | null>(null)\n\n  const styles = {\n    container: { ...defaultStyles.container, ...customStyles.container },\n    heading: { ...defaultStyles.heading, ...customStyles.heading },\n    message: { ...defaultStyles.message, ...customStyles.message },\n    error: { ...defaultStyles.error, ...customStyles.error },\n    button: { ...defaultStyles.button, ...customStyles.button },\n  }\n\n  useEffect(() => {\n    // Get token from props or URL\n    const token = propToken || new URLSearchParams(window.location.search).get('token')\n    \n    if (token) {\n      verifyToken(token)\n    } else {\n      setStatus('error')\n      setError(labels.invalid || 'Invalid magic link')\n    }\n  }, [propToken])\n\n  const verifyToken = async (token: string) => {\n    try {\n      const response = await fetch(apiEndpoint, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({ token }),\n      })\n\n      const data = await response.json()\n\n      if (!response.ok) {\n        if (data.error?.includes('expired')) {\n          throw new Error(labels.expired)\n        }\n        throw new Error(data.error || labels.error)\n      }\n\n      setStatus('success')\n      setSessionToken(data.sessionToken)\n\n      // Store session token\n      if (typeof window !== 'undefined' && data.sessionToken) {\n        localStorage.setItem('newsletter_session', data.sessionToken)\n      }\n\n      if (onSuccess) {\n        onSuccess(data.sessionToken, data.subscriber)\n      }\n    } catch (err) {\n      setStatus('error')\n      const errorMessage = err instanceof Error ? err.message : (labels.error || 'Verification failed')\n      setError(errorMessage)\n      if (onError) {\n        onError(err instanceof Error ? err : new Error(errorMessage))\n      }\n    }\n  }\n\n  const handleTryAgain = () => {\n    window.location.href = '/'\n  }\n\n  return (\n    <div className={className} style={styles.container}>\n      {status === 'verifying' && (\n        <>\n          <h2 style={styles.heading}>Verifying</h2>\n          <p style={styles.message}>{labels.verifying}</p>\n        </>\n      )}\n\n      {status === 'success' && (\n        <>\n          <h2 style={styles.heading}>Success!</h2>\n          <p style={styles.message}>{labels.success}</p>\n        </>\n      )}\n\n      {status === 'error' && (\n        <>\n          <h2 style={styles.heading}>Verification Failed</h2>\n          <p style={styles.error}>{error}</p>\n          <button onClick={handleTryAgain} style={styles.button}>\n            {labels.tryAgain}\n          </button>\n        </>\n      )}\n    </div>\n  )\n}\n\n// Factory function for creating custom magic link verify components\nexport function createMagicLinkVerify(\n  defaultProps: Partial<MagicLinkVerifyProps>\n): React.FC<MagicLinkVerifyProps> {\n  return (props: MagicLinkVerifyProps) => (\n    <MagicLinkVerify {...defaultProps} {...props} />\n  )\n}","'use client'\n\nimport { useState, useEffect, useCallback } from 'react'\nimport type { Subscriber } from '../types'\n\nexport interface UseNewsletterAuthOptions {\n  sessionTokenKey?: string\n  apiEndpoint?: string\n}\n\nexport interface UseNewsletterAuthReturn {\n  subscriber: Subscriber | null\n  loading: boolean\n  error: Error | null\n  isAuthenticated: boolean\n  login: (token: string) => Promise<void>\n  logout: () => void\n  refreshSubscriber: () => Promise<void>\n}\n\nexport function useNewsletterAuth(\n  options: UseNewsletterAuthOptions = {}\n): UseNewsletterAuthReturn {\n  const {\n    sessionTokenKey = 'newsletter_session',\n    apiEndpoint = '/api/newsletter/preferences',\n  } = options\n\n  const [subscriber, setSubscriber] = useState<Subscriber | null>(null)\n  const [loading, setLoading] = useState(true)\n  const [error, setError] = useState<Error | null>(null)\n\n  // Get session token from localStorage\n  const getSessionToken = useCallback(() => {\n    if (typeof window === 'undefined') return null\n    return localStorage.getItem(sessionTokenKey)\n  }, [sessionTokenKey])\n\n  // Set session token in localStorage\n  const setSessionToken = useCallback((token: string | null) => {\n    if (typeof window === 'undefined') return\n    if (token) {\n      localStorage.setItem(sessionTokenKey, token)\n    } else {\n      localStorage.removeItem(sessionTokenKey)\n    }\n  }, [sessionTokenKey])\n\n  // Fetch subscriber data\n  const fetchSubscriber = useCallback(async (token: string) => {\n    try {\n      const response = await fetch(apiEndpoint, {\n        headers: {\n          'Authorization': `Bearer ${token}`,\n        },\n      })\n\n      if (!response.ok) {\n        if (response.status === 401) {\n          // Token is invalid, clear it\n          setSessionToken(null)\n          throw new Error('Session expired')\n        }\n        throw new Error('Failed to fetch subscriber')\n      }\n\n      const data = await response.json()\n      setSubscriber(data.subscriber)\n      setError(null)\n    } catch (err) {\n      setError(err instanceof Error ? err : new Error('An error occurred'))\n      setSubscriber(null)\n      throw err\n    }\n  }, [apiEndpoint, setSessionToken])\n\n  // Initial load\n  useEffect(() => {\n    const token = getSessionToken()\n    if (token) {\n      fetchSubscriber(token)\n        .catch(() => {\n          // Error is already handled in fetchSubscriber\n        })\n        .finally(() => setLoading(false))\n    } else {\n      setLoading(false)\n    }\n  }, [])\n\n  // Login with session token\n  const login = useCallback(async (token: string) => {\n    setLoading(true)\n    setError(null)\n    try {\n      setSessionToken(token)\n      await fetchSubscriber(token)\n    } catch (err) {\n      setSessionToken(null)\n      throw err\n    } finally {\n      setLoading(false)\n    }\n  }, [fetchSubscriber, setSessionToken])\n\n  // Logout\n  const logout = useCallback(() => {\n    setSessionToken(null)\n    setSubscriber(null)\n    setError(null)\n  }, [setSessionToken])\n\n  // Refresh subscriber data\n  const refreshSubscriber = useCallback(async () => {\n    const token = getSessionToken()\n    if (!token) {\n      throw new Error('Not authenticated')\n    }\n    await fetchSubscriber(token)\n  }, [fetchSubscriber, getSessionToken])\n\n  return {\n    subscriber,\n    loading,\n    error,\n    isAuthenticated: !!subscriber,\n    login,\n    logout,\n    refreshSubscriber,\n  }\n}"],"mappings":"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","names":["import_react","import_jsx_runtime","defaultStyles","import_react","import_jsx_runtime","defaultStyles","import_react"]}