/** * Canonical UI-classification helper for program parameters. * * `ParameterSpec` is the raw declaration; every UI consumer of * dicerollerts then has to decide whether to render a parameter as a * toggle, slider, stepper, select, or free-text input. This module * formalises that decision so consumers don't have to reinvent (and * occasionally disagree on) the rules. * * The classification is policy-free in the sense that *rendering* is * still up to each consumer — `ParameterKind` only describes the shape * of the value space, not the widget. */ import type { Parameter } from './program-parameters'; export type ParameterKind = { kind: 'boolean'; } | { kind: 'string-enum'; choices: string[]; labels?: string[]; } | { kind: 'number-enum'; choices: number[]; labels?: string[]; } | { kind: 'number-range'; min: number; max: number; default: number; step?: number; } | { kind: 'number'; default: number; } | { kind: 'string'; default: string; } | { kind: 'expression'; }; /** * Classify a parameter for UI rendering. * * Dispatch precedence (top to bottom): * 1. Dice / expression default → `expression`. * 2. Boolean default → `boolean`. * 3. Enum + string default → `string-enum`. * 4. Enum + number default → `number-enum`. * 5. Number default with both `min` and `max` → `number-range`. * 6. Number default → `number`. * 7. String default → `string`. * * The remaining `expression` fallback applies if a default isn't * present at all (defensive; in practice `ProgramParameters.list` * always populates one branch). */ export declare function classifyParameter(p: Parameter): ParameterKind;