import { default as React } from 'react';
export type ControlType = 'text' | 'textarea' | 'number' | 'color' | 'select' | 'boolean' | 'image' | 'link' | 'slider' | 'custom';
export interface ComponentControl {
    type: ControlType;
    label: string;
    defaultValue?: any;
    options?: {
        label: string;
        value: any;
    }[];
    min?: number;
    max?: number;
    step?: number;
    description?: string;
    group?: string;
    supportsCMS?: boolean;
    readOnly?: boolean;
    hidden?: boolean | ((currentProps: Record<string, any>) => boolean);
    disabled?: boolean | ((currentProps: Record<string, any>) => boolean);
    render?: (args: {
        value: any;
        onChange: (val: any) => void;
        currentProps: Record<string, any>;
        nodeId: string;
    }) => React.ReactNode;
}
export type ThemeRegistry = Record<string, // Group Name (e.g., "Colors", "Typography", "Spacing")
Record<string, ComponentControl>>;
export interface RegistryComponent {
    name: string;
    category: string;
    thumbnail?: string;
    render: React.FC<any>;
    controls: Record<string, ComponentControl>;
    acceptsChildren?: boolean;
}
export type ComponentRegistry = Record<string, RegistryComponent>;
export interface StudioNode {
    id: string;
    type: string;
    props: Record<string, any>;
    events?: Record<string, StudioEventAction[]>;
    children?: StudioNode[];
}
export interface StudioEventAction {
    actionId: string;
    args?: any[];
    code?: string;
}
export interface PageSchema {
    id: string;
    slug: string;
    title: string;
    description?: string;
    content: StudioNode[];
}
export interface DesignSystemSchema {
    tokens: Record<string, string | number>;
    mode?: string;
}
export interface WebsiteSchema {
    projectSettings: {
        name: string;
        domain?: string;
    };
    designSystem: DesignSystemSchema;
    pages: PageSchema[];
}
