import Store, { type AsyncStorage } from "@userscripters/storage"; export type UserscriptOptionType = "toggle" | "text" | "select" | "checkbox"; export interface UserscriptOptionItem { disabled?: boolean; id?: string; label: string; name?: string; selected?: boolean; value?: string; } export interface UserscriptOptionConfig { items?: UserscriptOptionItem[]; desc: string; def?: unknown; disabledWhen?: Record; title?: string; type: UserscriptOptionType; } export interface UserscriptToggleOption extends UserscriptOptionConfig { direction?: "left" | "right"; } export type UserscriptOptionConfigRecord< U extends Record, V extends Partial > = { [P in keyof U]: Omit & { [R in Extract]?: U[P][R] } }; export declare class UserscriptOption< T extends Storage | AsyncStorage, U extends UserScripters.UserscriptOptionConfig, > { container?: HTMLElement; name: string; render(): Promise; shouldDisable(): Promise; } export declare class Userscript extends Store { get(name: string): UserscriptOption | undefined; option(name: string, config: U): Userscript; options>(configs: U): Userscript; options< U extends Record, V extends Partial >(configs: UserscriptOptionConfigRecord, common: V): Userscript; render(): Promise; } export declare class Configurer { get(name: string): Userscript | undefined; hide(): Configurer; register(name: string, storage?: T): Userscript; render(): Promise>; show(): Configurer; unregister(name: string): Userscript | undefined; }