UNPKG

@logic-pad/core

Version:
110 lines (109 loc) 4.13 kB
import GridData from './grid.js'; import { Color, Comparison, Direction, DirectionToggle, Orientation, OrientationToggle, Position, Wrapping } from './primitives.js'; import { ControlLine } from './rules/musicControlLine.js'; export declare enum ConfigType { Boolean = "boolean", NullableBoolean = "nullableBoolean", Number = "number", NullableNumber = "nullableNumber", String = "string", Color = "color", Comparison = "comparison", Wrapping = "wrapping", Direction = "direction", DirectionToggle = "directionToggle", Orientation = "orientation", OrientationToggle = "orientationToggle", Tile = "tile", Grid = "grid", NullableGrid = "nullableGrid", Icon = "icon", ControlLines = "controlLines", NullableNote = "nullableNote", SolvePath = "solvePath" } export interface Config<T> { readonly type: ConfigType; readonly field: string; readonly description: string; readonly default: T; readonly configurable: boolean; } export interface BooleanConfig extends Config<boolean> { readonly type: ConfigType.Boolean; } export interface NullableBooleanConfig extends Config<boolean | null> { readonly type: ConfigType.NullableBoolean; } export interface NumberConfig extends Config<number> { readonly type: ConfigType.Number; readonly min?: number; readonly max?: number; readonly step?: number; } export interface NullableNumberConfig extends Config<number | null> { readonly type: ConfigType.NullableNumber; readonly min?: number; readonly max?: number; readonly step?: number; } export interface StringConfig extends Config<string> { readonly type: ConfigType.String; readonly maxLength?: number; readonly placeholder?: string; } export interface ColorConfig extends Config<Color> { readonly type: ConfigType.Color; readonly allowGray: boolean; } export interface ComparisonConfig extends Config<Comparison> { readonly type: ConfigType.Comparison; } export interface WrappingConfig extends Config<Wrapping> { readonly type: ConfigType.Wrapping; } export interface DirectionConfig extends Config<Direction> { readonly type: ConfigType.Direction; } export interface DirectionToggleConfig extends Config<DirectionToggle> { readonly type: ConfigType.DirectionToggle; } export interface OrientationConfig extends Config<Orientation> { readonly type: ConfigType.Orientation; } export interface OrientationToggleConfig extends Config<OrientationToggle> { readonly type: ConfigType.OrientationToggle; } export interface TileConfig extends Config<GridData> { readonly type: ConfigType.Tile; readonly resizable: boolean; } export interface GridConfig extends Config<GridData> { readonly type: ConfigType.Grid; } export interface NullableGridConfig extends Config<GridData | null> { readonly type: ConfigType.NullableGrid; readonly nonNullDefault: GridData; } export interface IconConfig extends Config<string> { readonly type: ConfigType.Icon; } export interface ControlLinesConfig extends Config<ControlLine[]> { readonly type: ConfigType.ControlLines; } export interface NullableNoteConfig extends Config<string | null> { readonly type: ConfigType.NullableNote; } export interface SolvePathConfig extends Config<Position[]> { readonly type: ConfigType.SolvePath; } export type AnyConfig = BooleanConfig | NullableBooleanConfig | NumberConfig | NullableNumberConfig | StringConfig | ColorConfig | ComparisonConfig | WrappingConfig | DirectionConfig | DirectionToggleConfig | OrientationConfig | OrientationToggleConfig | TileConfig | GridConfig | NullableGridConfig | IconConfig | ControlLinesConfig | NullableNoteConfig | SolvePathConfig; /** * Compare two config values for equality, using an appropriate method for the config type. * * @param type The type of the config. * @param a The first value to compare. * @param b The second value to compare. * @returns Whether the two values are equal. */ export declare function configEquals<C extends AnyConfig>(type: C['type'], a: C['default'], b: C['default']): boolean;