export function readCssVar(element: HTMLElement, varName: string) { return new CssVarReader(getComputedStyle(element).getPropertyValue("--" + varName)); } export class CssVarReader { protected value: string; constructor(rawValue: string) { this.value = rawValue; } asString(defaultValue?: string) { return (this.value) ? this.value : defaultValue; } asNumber(defaultValue?: number) { let number: Number = NaN; if (this.value) { number = parseFloat(this.value); } return (!isNaN(number.valueOf()) ? number.valueOf() : defaultValue) } asEnum(enumType: T, defaultValue?: T[keyof T]): T[keyof T] | undefined { let result: T[keyof T] | undefined; result = enumType[this.value as keyof T]; if (result === undefined) { result = defaultValue; } return result; } asArray(delimiter: string = " "): CssVarReader[] { // Note: ignoring delimiters inside quotation marks is currently unsupported let values = this.value.split(delimiter); return values.map((v) => new CssVarReader(v)); } }