export type ParamValues = Record; export type ParamGroup = "stroke"; interface BaseParamDefinition { key: TKey; label: string; group?: ParamGroup; } export interface NumberParamDefinition extends BaseParamDefinition { type: "number"; default: number; min: number; max?: number; step: number; /** When set, min/max/step are in display space. display = stored * displayMultiplier. */ displayMultiplier?: number; /** Show as percentage of max. min/max/step/default stay in stored space. */ unit?: "percent"; /** Short label shown as the scrub handle icon in the number field (e.g. "W", "R"). */ shortLabel?: string; } export interface BooleanParamDefinition extends BaseParamDefinition { type: "boolean"; default: boolean; } export interface ColorParamDefinition extends BaseParamDefinition { type: "color"; default: string; } export interface SelectParamDefinition extends BaseParamDefinition { type: "select"; default: string; options: Array<{ value: string; label: string }>; } export type ParamDefinition = | NumberParamDefinition | BooleanParamDefinition | ColorParamDefinition | SelectParamDefinition;