import type { CrLitElement } from '//resources/lit/v3_0/lit.rollup.js';
export interface KeyedActionState<T> {
    key: string;
    state: T;
    exiting?: boolean;
    animateIn?: boolean;
    dragPlaceholder?: boolean;
}
type Constructor<T> = new (...args: any[]) => T;
export declare class AnimationTracker {
    private static reducedMotion_;
    static showAnimations: boolean;
}
export interface ToolbarActionContainerMixinInterface<T> {
    states: T[];
    keyedStates: Array<KeyedActionState<T>>;
    getKey(state: T): string;
    isInitialUpdate(newStates: T[]): boolean;
    allExiting(): boolean;
    animateInDivider(): boolean;
    reconcileKeys(): void;
}
/**
 * A mixin for WebUI toolbar icon container elements (such as pinned toolbar
 * actions and extensions) that manage a list of dynamic items with slide-in
 * and slide-out animations.
 *
 * It reconciles new state arrays (`state`) against internal keyed items
 * (`keyedStates`), automatically setting animation flags (`animateIn` for
 * newly added items, and `exiting` for removed items) while keeping exiting
 * items in the DOM until their CSS transitions complete.
 *
 * Usage:
 * 1. Mix in `ToolbarActionContainerMixin<T>` where `T` is your item state type.
 * 2. Implement `getKey(state: T): string` to return a unique key for each item.
 * 3. Optionally override `isInitialUpdate(newStates: T[]): boolean` to suppress
 *    slide-in animations on initial load.
 * 4. In your Lit template (`.html.ts`), iterate over `this.keyedStates` using
 *    the Lit `repeat()` directive, applying `animate-in` and `exiting` CSS
 *    classes based on `keyedState.animateIn` and `keyedState.exiting`.
 */
export declare const ToolbarActionContainerMixin: <T, BaseClass extends Constructor<CrLitElement>>(superClass: BaseClass, initialState: T[]) => BaseClass & Constructor<ToolbarActionContainerMixinInterface<T>>;
export {};
