/** Editable + computed shape of the General tab form. */
export interface GeneralSettingsForm {
    siteTitle: string;
    tagline: string;
    siteUrl: string;
    language: string;
    timezone: string;
    defaultNoIndex: boolean;
    defaultNoFollow: boolean;
    noIndexNonProduction: boolean;
}
export type SettingsSource = 'config' | 'environment' | 'database' | 'plugin' | 'computed';
export interface SettingsSourceMetadata {
    source: SettingsSource;
    editable: boolean;
    reason?: string;
}
export type IndexStatusLevel = 'indexable' | 'protected' | 'blocked' | 'partially_blocked' | 'unknown';
export interface SiteIndexStatus {
    status: IndexStatusLevel;
    severity: 'success' | 'warning' | 'danger' | 'neutral';
    label: string;
    description: string;
    environment: string;
    checks: Array<{
        key: string;
        label: string;
        value: string;
        status: 'pass' | 'warning' | 'fail' | 'unknown';
    }>;
    actions: Array<{
        label: string;
        href?: string;
        action?: string;
    }>;
    lastAuditAt: string | null;
}
export interface ValidationIssue {
    /** Field key the issue relates to. A plain string so the primitive can be
     * reused by other settings tabs (e.g. Appearance) whose fields aren't part
     * of `GeneralSettingsForm`. */
    field: string;
    message: string;
    severity: 'error' | 'warning';
}
/** Validate a site URL: absolute http(s), no trailing slash, parseable. */
export declare function validateSiteUrl(value: string): {
    valid: boolean;
    error?: string;
};
/** Best-effort IANA timezone check using the Intl API. */
export declare function isValidTimeZone(tz: string): boolean;
/** Best-effort BCP 47 locale check. */
export declare function isValidLocale(locale: string): boolean;
type SaveState = 'idle' | 'saving' | 'success' | 'error';
export interface UseGeneralSettings {
    loading: boolean;
    loadError: string | null;
    form: GeneralSettingsForm;
    setField: <K extends keyof GeneralSettingsForm>(key: K, value: GeneralSettingsForm[K]) => void;
    dirty: boolean;
    issues: ValidationIssue[];
    hasErrors: boolean;
    indexStatus: SiteIndexStatus | null;
    sources: Record<string, SettingsSourceMetadata>;
    isProduction: boolean;
    saveState: SaveState;
    saveError: string | null;
    save: () => Promise<void>;
    reset: () => void;
    refetch: () => void;
}
/**
 * Loads the General tab from its three real backends — the `settings` global
 * (site info / locale), the shared `/seo/config` (site URL + robots defaults),
 * and the computed `/seo/index-status` — tracks a dirty diff, and on save
 * writes each field back to its OWNING store (never a duplicate), preserving
 * unrelated keys.
 */
export declare function useGeneralSettings(canEdit: boolean): UseGeneralSettings;
export {};
//# sourceMappingURL=useGeneralSettings.d.ts.map