import type { ComponentProps, SvelteComponent } from 'svelte'; import type * as Components from './index.js'; import type { ButtonColor, ButtonRounded, ButtonSize, ButtonVariant, LabelPlacement, TransitionParams } from '../types/index.js'; import type { TransitionConfig } from 'svelte/transition'; export type ComponentName = keyof typeof Components; type ClassesProp = T extends { prototype: infer PR extends SvelteComponent; } ? ComponentProps extends { classes?: any; } ? ComponentProps['classes'] : ComponentProps extends { class?: string; } ? { root?: string; } : never : never; interface ComponentDefaultProps { Button?: { variant?: ButtonVariant; color?: ButtonColor; size?: ButtonSize; rounded?: ButtonRounded; }; ButtonGroup?: { variant?: ButtonVariant; color?: ButtonColor; size?: ButtonSize; rounded?: ButtonRounded; }; CopyButton?: { variant?: ButtonVariant; color?: ButtonColor; size?: ButtonSize; rounded?: ButtonRounded; }; DateButton?: { variant?: ButtonVariant; }; DateField?: { labelPlacement?: LabelPlacement; }; DatePickerField?: { labelPlacement?: LabelPlacement; }; DateRangeField?: { labelPlacement?: LabelPlacement; }; Field?: { labelPlacement?: LabelPlacement; }; MenuButton?: { variant?: ButtonVariant; color?: ButtonColor; size?: ButtonSize; rounded?: ButtonRounded; }; Menu?: { transition?: (node: HTMLElement, params: TransitionParams) => TransitionConfig; transitionParams?: TransitionParams; }; MenuField?: { labelPlacement?: LabelPlacement; }; MultiSelectField?: { labelPlacement?: LabelPlacement; }; RangeField?: { labelPlacement?: LabelPlacement; }; SelectField?: { labelPlacement?: LabelPlacement; }; TextField?: { labelPlacement?: LabelPlacement; }; ToggleButton?: { variant?: ButtonVariant; color?: ButtonColor; size?: ButtonSize; rounded?: ButtonRounded; }; } export type ResolvedComponentClasses = { [key in ComponentName]: ResolvedComponentClassesProp; }; export type ResolvedComponentClassesProp = ClassesProp<(typeof Components)[NAME]> extends never ? {} : NonNullable>; export type ResolvedDefaultProps = NAME extends keyof ComponentDefaultProps ? NonNullable : {}; export interface ResolvedComponentSettings { defaults: ResolvedDefaultProps; classes: ResolvedComponentClassesProp; } export type ComponentSettings = { [key in ComponentName]?: { classes?: ClassesProp<(typeof Components)[key]> | string; } & (key extends keyof ComponentDefaultProps ? ComponentDefaultProps[key] : {}); }; export declare function getComponents(): ComponentSettings; export declare function resolveComponentClasses(theme: ClassesProp<(typeof Components)[NAME]>): ResolvedComponentClassesProp; /** * Returns default component classes for a given component. See {@link resolveComponentSettings} * to get both default props and classes. * @param name component name */ export declare function getComponentClasses(name: NAME): ResolvedComponentClasses[NAME]; export {};