/**
 * `<ContactForm />` — the canonical contact form used by every public
 * surface (TMCG join, case-study pitch, generic /contact, Help Center
 * ticket creation, etc.).
 *
 * Self-contained inside the lib — host-specific values (user id for
 * tracking, platform-specific contact reasons, reddit-click attribution
 * id) flow IN via props. The hub passes them via a thin
 * `<ContactForm>` wrapper that resolves them from `useAuth` /
 * `getAppConfig` / `getStoredRedditClickId`. Other embedders pass
 * whatever they have (or omit).
 *
 * Field-hide + custom-submit + extra-top-field knobs let one form
 * serve both contact and ticket-creation flows without forking:
 *   - Contact page: rendered with all fields visible, built-in submit
 *     flow to `/api/contact` via `useContactSubmission`.
 *   - Ticket page: hides name/email/companySize/referralSource/
 *     helpCategory; supplies `extraTopField` (a Subject input) +
 *     `onCustomSubmit` wired to `useTicketActions.submitTicket`.
 */
import { type ReactNode } from 'react';
import { type ContactFormData } from '../../schemas/contact-schema';
import { type ButtonProps } from '../ui';
import type { ChatAttachment } from '../chat/utils/chat-attachment-markdown';
/**
 * Fields the caller can suppress. Six values — every primary form
 * field plus `name` and `email` (newly hideable so ticket-creation
 * surfaces can hide them; they still need to validate, so the caller
 * MUST supply pre-filled values via `defaultValues` when hiding them).
 */
export type ContactFormHideableField = 'name' | 'email' | 'companySize' | 'referralSource' | 'helpCategory' | 'message';
export interface ContactFormProps {
    /** Host-side user id passed to `useContactSubmission` for attribution.
     *  Hub wrapper passes `useAuth().user?.id`; lib's Help Center surface
     *  passes `useChatIdentity().user?.id`. Omit for anon flows. */
    userId?: string;
    /** Platform-specific help-category dropdown options. Hub wrapper
     *  passes `getAppConfig().contact.contactReasons`. Defaults to the
     *  lib's `defaultHelpCategoryOptions`. */
    helpCategoryOptions?: readonly string[];
    /** Reddit click attribution id. Caller resolves from wherever they
     *  stash it (hub: sessionStorage via `getStoredRedditClickId`). When
     *  set, it's spread into the submission payload. */
    rdtCid?: string;
    /** Called after a successful submit so the caller can clear their
     *  attribution storage (hub wrapper calls `clearStoredRedditClickId`).
     *  Fires for BOTH the built-in and custom submit paths. */
    onSubmitSuccess?: () => void;
    prefilledReason?: string;
    prefilledMessage?: string;
    hideFields?: ContactFormHideableField[];
    /** Authoritative pre-fill for any field the caller hides. Merged
     *  into react-hook-form's `defaultValues` AFTER the legacy
     *  `prefilledReason` / `prefilledMessage` props (caller-supplied
     *  wins). REQUIRED when hiding `name` / `email` / `helpCategory` —
     *  those fields are still validated by Zod even when not rendered. */
    defaultValues?: Partial<ContactFormData>;
    /** Optional custom submit handler. When provided, the form bypasses
     *  the built-in `useContactSubmission` flow (no /api/contact call,
     *  no success-redirect, no built-in toast) — the caller owns the
     *  entire side-effect chain. Reset + `onSubmitSuccess` still fire
     *  on a successful await.
     *
     *  Receives the schema-validated form payload PLUS the ready
     *  attachments array (empty when `attachmentsEnabled === false` or
     *  the user hasn't picked any). Caller forwards `attachments` to
     *  whichever sink owns the upload (e.g. `actions.submitTicket`'s
     *  `attachments` field for HubSpot Note engagements). */
    onCustomSubmit?: (data: ContactFormData, attachments: ChatAttachment[]) => Promise<void>;
    /** Turn on the attachments bar (file `+` button + chip strip) using
     *  the same lib primitives the chat composer uses
     *  (`<ChatAttachmentAddButton>` + `<ChatAttachmentChipStrip>` +
     *  `useChatAttachments`). When `false` (the default), the form
     *  doesn't render the bar AND the attachments array passed to
     *  `onCustomSubmit` is always empty. */
    attachmentsEnabled?: boolean;
    /** Render slot for an EXTRA field at the very top of the form,
     *  ABOVE the name/email row. Use this for ticket surfaces that need
     *  a Subject input — the field is NOT part of `ContactSchema`, so
     *  the caller manages its own state + validation and reads the
     *  value back inside `onCustomSubmit`. */
    extraTopField?: ReactNode;
    title?: string;
    subtitle?: string;
    footerText?: string;
    noBorder?: boolean;
    noPadding?: boolean;
    buttonVariant?: ButtonProps['variant'];
    buttonClassName?: string;
    /** Submit-button label. Defaults to "Send Message". Override for
     *  ticket surfaces (e.g. "Open ticket"). */
    submitLabel?: string;
    /** Success-state submit-button label (shown briefly after submit on
     *  the built-in flow). Defaults to "Message Sent!". Has no effect
     *  when `onCustomSubmit` is provided — the caller owns success UX. */
    submitSuccessLabel?: string;
    successRedirectUrl?: string;
    successToastMessage?: string;
}
export declare function ContactForm({ userId, helpCategoryOptions, rdtCid, onSubmitSuccess, prefilledReason, prefilledMessage, hideFields, defaultValues: defaultValuesProp, onCustomSubmit, extraTopField, attachmentsEnabled, title, subtitle, footerText, noBorder, noPadding, buttonVariant, buttonClassName, submitLabel, submitSuccessLabel, successRedirectUrl, successToastMessage, }?: ContactFormProps): import("react").JSX.Element;
//# sourceMappingURL=contact-form.d.ts.map