import type { PlatformBlocksTheme } from '../../core/theme/types'; import type { KnobAppearance, KnobVariant } from './types'; /** * Visual variants change the knob's *form* — stroke weights, caps, whether the body is * filled, whether the indicator is an arm or a dot. They deliberately do not invent their * own palettes: color still comes from the theme and the accent, so a variant reads the * same in light and dark and never fights a brand. * * Every value here is a default. The preset is merged *under* the caller's `appearance`, * so any single property can still be overridden without opting out of the variant. */ export type KnobVariantContext = { theme: PlatformBlocksTheme; /** Resolved diameter in pixels — every metric below scales off it. */ size: number; /** The already-resolved highlight color for this knob. */ accentColor: string; disabled: boolean; }; /** Resolves a variant to its appearance defaults. `default` (or unset) adds nothing. */ export declare const buildKnobVariantAppearance: (variant: KnobVariant | undefined, context: KnobVariantContext) => KnobAppearance | undefined; /** * Merges a caller's appearance over a variant preset, one layer deep. `false`/`null` from * the caller wins outright (that is how a layer gets removed), arrays replace rather than * concatenate, and anything the caller leaves out keeps the preset's value — so * `variant="retro"` plus `appearance={{ ring: { color: 'red' } }}` keeps retro's thickness. */ export declare const mergeKnobAppearance: (base: KnobAppearance | undefined, override: KnobAppearance | undefined) => KnobAppearance | undefined;