import type { ExecutionContext } from '../../types/core';
import type { ASTNode, ExpressionNode } from '../../types/base-types';
import type { ExpressionEvaluator } from '../../core/expression-evaluator';
import type { DecoratedCommand, CommandMetadata } from '../decorators';
export type DOMModificationMode = 'add' | 'remove';
export type ClassModificationInput = {
    type: 'classes';
    classes: string[];
    targets: HTMLElement[];
};
export type AttributeModificationInput = {
    type: 'attribute';
    name: string;
    value?: string;
    targets: HTMLElement[];
};
export type StyleModificationInput = {
    type: 'styles';
    styles?: Record<string, string>;
    properties?: string[];
    targets: HTMLElement[];
};
export type ElementRemovalInput = {
    type: 'element';
    targets: HTMLElement[];
};
export interface RawCommandInput {
    args: ASTNode[];
    modifiers: Record<string, ExpressionNode>;
    commandName?: string;
}
export declare abstract class DOMModificationBase implements DecoratedCommand {
    readonly name: string;
    readonly metadata: CommandMetadata;
    protected abstract readonly mode: DOMModificationMode;
    protected abstract readonly preposition: string;
    protected resolveTargets(args: ASTNode[], evaluator: ExpressionEvaluator, context: ExecutionContext, modifiers: Record<string, ExpressionNode>): Promise<HTMLElement[]>;
    protected evaluateFirst(arg: ASTNode, evaluator: ExpressionEvaluator, context: ExecutionContext): Promise<{
        value: unknown;
    }>;
    protected parseClassNames(value: unknown): string[];
    protected isAttribute(value: string): boolean;
    protected isCSSProperty(value: string): boolean;
    protected validateTargets(targets: unknown): targets is HTMLElement[];
    protected validateType<T extends string>(type: unknown, validTypes: readonly T[]): type is T;
    protected validateStringArray(arr: unknown, minLength?: number): arr is string[];
}
//# sourceMappingURL=dom-modification-base.d.ts.map