import type { ButtonComponent, DropdownComponent, ExtraButtonComponent, ValueComponent } from "obsidian";
import type { ReadonlyTuple } from "./types.js";
export declare function closeSetting(container: HTMLElement): void;
export interface ComponentAction<C, V> {
    readonly pre?: (component: C) => void;
    readonly post?: (component: C, activate: (value: V) => PromiseLike<void>) => void;
}
export declare function linkSetting<V, C extends ValueComponent<V> & {
    readonly onChange: (callback: (value: V) => unknown) => C;
}>(getter: () => V, setter: (value: V, component: C, getter: () => V) => unknown, callback: (value: V, component: C, getter: () => V) => unknown, { pre, post }?: ComponentAction<C, V>): (component: C) => void;
export declare function composeSetters<V, C extends ValueComponent<V>>(...setters: readonly ((value: V, component: C, getter: () => V) => unknown)[]): (value: V, component: C, getter: () => V) => Promise<boolean>;
export declare function setTextToEnum<const Es extends ReadonlyTuple<V>, V, C extends ValueComponent<V>>(enums: Es, setter: (value: Es[number], component: C, getter: () => V) => unknown): (value: V, component: C, getter: () => V) => Promise<boolean>;
export declare function setTextToNumber<C extends ValueComponent<string>>(setter: (value: number, component: C, getter: () => string) => unknown, integer?: boolean): (value: string, component: C, getter: () => string) => Promise<boolean>;
export declare function resetButton<C extends ButtonComponent | ExtraButtonComponent>(icon: string, tooltip: string, resetter: (component: C) => unknown, callback: (component: C) => unknown, { pre, post }?: ComponentAction<C, void>): (component: C) => void;
export declare function dropdownSelect<V, C extends DropdownComponent>(unselected: string, selections: readonly {
    readonly name: string;
    readonly value: V;
}[], callback: (value: V, component: C) => unknown, action?: ComponentAction<C, string>): (component: C) => void;
//# sourceMappingURL=settings-widgets.d.ts.map