import type { UmbPartialSome } from '../../utils/type/index.js';
import type { UmbHint, UmbIncomingHintBase } from '../types.js';
import { UmbControllerBase, type UmbClassInterface } from '../../../../libs/class-api/index.js';
import type { UmbControllerHost } from '../../../../libs/controller-api/index.js';
import { type Observable } from '../../../../libs/observable-api/index.js';
export interface UmbHintControllerArgs<HintType extends UmbHint = UmbHint> {
    viewAlias?: string | null;
    scaffold?: Partial<HintType>;
}
export declare class UmbHintController<HintType extends UmbHint = UmbHint, IncomingHintType extends UmbIncomingHintBase = UmbPartialSome<HintType, 'unique' | 'weight' | 'path'>> extends UmbControllerBase {
    #private;
    getViewAlias(): string | null;
    setPathFilter(filter: (path: Array<string>) => boolean): void;
    readonly scaffold: Observable<Partial<HintType>>;
    readonly hints: Observable<HintType[]>;
    readonly firstHint: Observable<HintType>;
    updateScaffold(updates: Partial<HintType>): void;
    getScaffold(): Partial<HintType>;
    constructor(host: UmbControllerHost, args?: UmbHintControllerArgs<HintType>);
    /**
     * Provide this validation context to a specific controller host.
     * This can be used to Host a validation context in a Workspace, but provide it on a certain scope, like a specific Workspace View.
     * @param {UmbClassInterface} controllerHost - The controller host to provide this validation context to.
     */
    provideAt(controllerHost: UmbClassInterface): void;
    unprovide(): void;
    asObservablePart<R>(fn: (hints: HintType[]) => R): Observable<R>;
    descendingHints(viewAlias?: string | null): Observable<Array<UmbHint> | undefined>;
    /**
     * @internal
     * @param {(path: Array<string>) => boolean} filter - A filter function to filter the hints by their path.
     * @returns {Observable<Array<UmbHint> | undefined>} An observable of an array of hints that match the filter.
     */
    _internal_descendingHintsByFilter(filter: (path: Array<string>) => boolean): Observable<Array<UmbHint> | undefined>;
    inherit(): void;
    inheritFrom(parent: UmbHintController | undefined): void;
    initiateChange(): void;
    finishChange(): void;
    /**
     * Add a new hint
     * @param {HintType} hint - The hint to add
     * @returns {HintType['unique']} Unique value of the hint
     */
    addOne(hint: IncomingHintType): string | symbol;
    /**
     * Add multiple rules
     * @param {HintType[]} hints - Array of hints to add
     */
    add(hints: IncomingHintType[]): void;
    /**
     * Remove a hint
     * @param {HintType['unique']} unique Unique value of the hint to remove
     */
    removeOne(unique: HintType['unique']): void;
    /**
     * Remove multiple hints
     * @param {HintType['unique'][]} uniques Array of unique values to remove
     */
    remove(uniques: HintType['unique'][]): void;
    /**
     * Check if a hint exists
     * @param {HintType['unique']} unique Unique value of the hint to check
     * @returns {boolean} True if the hint exists, false otherwise
     */
    has(unique: HintType['unique']): boolean;
    /**
     * Get all hints
     * @returns {HintType[]} Array of hints
     */
    getAll(): HintType[];
    /**
     * Clear all hints
     */
    clear(): void;
    destroy(): void;
}
