export interface PreferenceOptions { name: string; description?: string; category?: string; defaultValue: ValueType; } export abstract class Preference { public abstract options: PreferenceOptions; } export class TextPreference extends Preference { constructor(public options: PreferenceOptions) { super(); } } export class NumberPreference extends Preference { constructor( public options: PreferenceOptions & { integer?: boolean; step?: number; min?: number; max?: number; }, ) { super(); } } export class BooleanPreference extends Preference { constructor(public options: PreferenceOptions) { super(); } } export class SelectPreference extends Preference { constructor( public options: PreferenceOptions & { options: Record; }, ) { super(); } } export class CodePreference extends Preference { constructor( public options: PreferenceOptions & { language?: "css"; }, ) { super(); } } export class MultiSelectPreference extends Preference { constructor( public options: PreferenceOptions & { options: Record; }, ) { super(); } } export class UrlPreference extends Preference { constructor(public options: PreferenceOptions) { super(); } }