import { z } from 'zod';
import { type ButtonSystem } from '../types';
import { type StyleTags } from '../../site-styles/styleTags';
/**
 * Branded ID for a button personality entry in the curated library.
 * Shape matches the `Brand<T, TBrand>` convention in `site-styles/types.ts`
 * (kept structurally compatible until that alias is hoisted to a shared file).
 * Use `asButtonPersonalityId` at the parse/construction boundary.
 */
export type ButtonPersonalityId<T extends string = string> = T & {
    readonly __brand: 'ButtonPersonalityId';
};
export declare function asButtonPersonalityId<const T extends string>(value: T): ButtonPersonalityId<T>;
export declare const buttonPersonalityIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<ButtonPersonalityId<string>, string>>;
/**
 * A button personality is a complete `ButtonSystem` plus the tags that decide
 * which curated site styles will accept it. The `name` and `description` are
 * surfaced in the Style configurator UI.
 */
export type ButtonPersonality<TId extends ButtonPersonalityId = ButtonPersonalityId> = Readonly<{
    id: TId;
    name: string;
    description: string;
    tags: StyleTags;
    buttonSystem: ButtonSystem;
}>;
export declare const buttonPersonalitySchema: z.ZodObject<{
    id: z.ZodPipe<z.ZodString, z.ZodTransform<ButtonPersonalityId<string>, string>>;
    name: z.ZodString;
    description: z.ZodString;
    tags: z.ZodObject<{
        tone: z.ZodOptional<z.ZodEnum<{
            bold: "bold";
            minimal: "minimal";
            classic: "classic";
        }>>;
        energy: z.ZodOptional<z.ZodEnum<{
            calm: "calm";
            vibrant: "vibrant";
        }>>;
        motion: z.ZodOptional<z.ZodEnum<{
            standard: "standard";
            subtle: "subtle";
            expressive: "expressive";
        }>>;
        era: z.ZodOptional<z.ZodEnum<{
            editorial: "editorial";
            modern: "modern";
            retro: "retro";
            technical: "technical";
            organic: "organic";
        }>>;
    }, z.core.$strip>;
    buttonSystem: z.ZodObject<{
        global: z.ZodObject<{
            cornerStyle: z.ZodEnum<{
                square: "square";
                rounded: "rounded";
                pill: "pill";
            }>;
            cornerRadius: z.ZodOptional<z.ZodNumber>;
            shadow: z.ZodEnum<{
                none: "none";
                low: "low";
                high: "high";
                medium: "medium";
            }>;
            textTransform: z.ZodEnum<{
                none: "none";
                uppercase: "uppercase";
                capitalize: "capitalize";
                lowercase: "lowercase";
            }>;
            fontWeight: z.ZodUnion<readonly [z.ZodLiteral<500>, z.ZodLiteral<600>, z.ZodLiteral<700>]>;
            borderWidth: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>;
            typography: z.ZodOptional<z.ZodEnum<{
                body: "body";
                heading: "heading";
            }>>;
            fontSize: z.ZodOptional<z.ZodString>;
            letterSpacing: z.ZodOptional<z.ZodEnum<{
                tight: "tight";
                normal: "normal";
                loose: "loose";
            }>>;
            italic: z.ZodOptional<z.ZodBoolean>;
            paddingPreset: z.ZodOptional<z.ZodEnum<{
                default: "default";
                compact: "compact";
                spacious: "spacious";
            }>>;
            hoverTransform: z.ZodEnum<{
                none: "none";
                scale: "scale";
                lift: "lift";
                press: "press";
            }>;
            hoverColor: z.ZodEnum<{
                none: "none";
                token: "token";
                brighten: "brighten";
                darken: "darken";
                saturate: "saturate";
            }>;
            hoverColorToken: z.ZodOptional<z.ZodString>;
            gradientStyle: z.ZodOptional<z.ZodEnum<{
                linear: "linear";
                radial: "radial";
                conic: "conic";
            }>>;
            gradientAngle: z.ZodOptional<z.ZodNumber>;
            gradientSharpness: z.ZodOptional<z.ZodEnum<{
                medium: "medium";
                hard: "hard";
                smooth: "smooth";
            }>>;
        }, z.core.$strip>;
        variants: z.ZodArray<z.ZodObject<{
            id: z.ZodString;
            name: z.ZodString;
            enabled: z.ZodBoolean;
            priority: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>;
            background: z.ZodDiscriminatedUnion<[z.ZodObject<{
                type: z.ZodLiteral<"solid">;
                colorToken: z.ZodString;
            }, z.core.$strip>, z.ZodObject<{
                type: z.ZodLiteral<"gradient">;
                stops: z.ZodArray<z.ZodString>;
                direction: z.ZodEnum<{
                    "to-r": "to-r";
                    "to-l": "to-l";
                    "to-t": "to-t";
                    "to-b": "to-b";
                    "to-tr": "to-tr";
                    "to-tl": "to-tl";
                    "to-br": "to-br";
                    "to-bl": "to-bl";
                }>;
            }, z.core.$strip>, z.ZodObject<{
                type: z.ZodLiteral<"transparent">;
            }, z.core.$strip>], "type">;
            textColorToken: z.ZodString;
            borderRadius: z.ZodOptional<z.ZodString>;
            shadow: z.ZodOptional<z.ZodObject<{
                elevation: z.ZodEnum<{
                    none: "none";
                    low: "low";
                    high: "high";
                    medium: "medium";
                }>;
                softness: z.ZodNullable<z.ZodEnum<{
                    crisp: "crisp";
                    soft: "soft";
                    hard: "hard";
                }>>;
                position: z.ZodDefault<z.ZodEnum<{
                    bottom: "bottom";
                    "bottom-right": "bottom-right";
                }>>;
            }, z.core.$strip>>;
            border: z.ZodOptional<z.ZodObject<{
                widthClass: z.ZodString;
                colorToken: z.ZodString;
            }, z.core.$strip>>;
            hoverBackgroundToken: z.ZodOptional<z.ZodString>;
            effects: z.ZodOptional<z.ZodObject<{
                base: z.ZodOptional<z.ZodArray<z.ZodObject<{
                    effectId: z.ZodString;
                    options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
                }, z.core.$strip>>>;
                hover: z.ZodOptional<z.ZodArray<z.ZodObject<{
                    effectId: z.ZodString;
                    options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
                }, z.core.$strip>>>;
                active: z.ZodOptional<z.ZodArray<z.ZodObject<{
                    effectId: z.ZodString;
                    options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
                }, z.core.$strip>>>;
                focus: z.ZodOptional<z.ZodArray<z.ZodObject<{
                    effectId: z.ZodString;
                    options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
                }, z.core.$strip>>>;
            }, z.core.$strip>>;
            sizes: z.ZodOptional<z.ZodObject<{
                sm: z.ZodOptional<z.ZodObject<{
                    padding: z.ZodString;
                    fontSize: z.ZodOptional<z.ZodString>;
                }, z.core.$strip>>;
                md: z.ZodOptional<z.ZodObject<{
                    padding: z.ZodString;
                    fontSize: z.ZodOptional<z.ZodString>;
                }, z.core.$strip>>;
                lg: z.ZodOptional<z.ZodObject<{
                    padding: z.ZodString;
                    fontSize: z.ZodOptional<z.ZodString>;
                }, z.core.$strip>>;
                xl: z.ZodOptional<z.ZodObject<{
                    padding: z.ZodString;
                    fontSize: z.ZodOptional<z.ZodString>;
                }, z.core.$strip>>;
            }, z.core.$strip>>;
        }, z.core.$strip>>;
        sizes: z.ZodOptional<z.ZodPipe<z.ZodObject<{
            sm: z.ZodObject<{
                padding: z.ZodString;
                fontSize: z.ZodOptional<z.ZodString>;
            }, z.core.$strip>;
            md: z.ZodObject<{
                padding: z.ZodString;
                fontSize: z.ZodOptional<z.ZodString>;
            }, z.core.$strip>;
            lg: z.ZodObject<{
                padding: z.ZodString;
                fontSize: z.ZodOptional<z.ZodString>;
            }, z.core.$strip>;
            xl: z.ZodOptional<z.ZodObject<{
                padding: z.ZodString;
                fontSize: z.ZodOptional<z.ZodString>;
            }, z.core.$strip>>;
        }, z.core.$strip>, z.ZodTransform<{
            sm: {
                padding: string;
                fontSize?: string | undefined;
            };
            md: {
                padding: string;
                fontSize?: string | undefined;
            };
            lg: {
                padding: string;
                fontSize?: string | undefined;
            };
            xl: {
                padding: string;
                fontSize?: string | undefined;
            };
        }, {
            sm: {
                padding: string;
                fontSize?: string | undefined;
            };
            md: {
                padding: string;
                fontSize?: string | undefined;
            };
            lg: {
                padding: string;
                fontSize?: string | undefined;
            };
            xl?: {
                padding: string;
                fontSize?: string | undefined;
            } | undefined;
        }>>>;
    }, z.core.$strip>;
}, z.core.$strip>;
/**
 * Helper for personality file modules to keep the call site short and
 * type-safe. `as const satisfies ...` would also work but produces wider
 * types at use sites.
 */
export declare function defineButtonPersonality<const TId extends string>(input: {
    id: TId;
    name: string;
    description: string;
    tags: StyleTags;
    buttonSystem: ButtonSystem;
}): ButtonPersonality<ButtonPersonalityId<TId>>;
