export type DeclValueRoot = { important: boolean; value: RootValue; }; export enum DeclRootValueKind { List = "List", Group = "Group", Value = "Value", } export type BaseRootValue = { expressionKind: TKind; }; export type List = { items: ListItem[]; } & BaseRootValue; export type ListItem = Group | Value; export enum ListItemKind { Group = "Group", Value = "Value", } export type BaseListItem = { listItemKind: TKind; }; export type Group = { parameters: Value[]; } & BaseListItem & BaseRootValue; export enum ValueKind { Dimension = "Dimension", Operation = "Operation", Number = "Number", String = "Str", Raw = "Raw", Hex = "Hex", Keyword = "Keyword", FunctionCall = "FunctionCall", } type BaseValue = { valueKind: TKind; } & BaseListItem & BaseRootValue; export type Dimension = { value: Num; unit: string; } & BaseValue; export type Operation = { left: Value; operation: string; right: Value; } & BaseValue; export type Num = { value: string; } & BaseValue; export type Str = { value: string; } & BaseValue; export type Raw = { value: string; } & BaseValue; export type Hex = { value: string; } & BaseValue; export type Keyword = { value: string; } & BaseValue; export type FunctionCall = { name: string; parameters: List; } & BaseValue; export type Value = | Dimension | Operation | Num | Str | Raw | Hex | Keyword | FunctionCall; export type RootValue = List | Group | Value;