import { Material, Object3D } from "three";
import { Animation } from "../../../../Animation.js";
import { Animator } from "../../../../Animator.js";
import { AudioSource } from "../../../../AudioSource.js";
import { Behaviour, GameObject } from "../../../../Component.js";
import type { IPointerClickHandler, PointerEventData } from "../../../../ui/PointerEvents.js";
import { USDDocument, USDObject, USDZExporterContext } from "../../ThreeUSDZExporter.js";
import { AnimationExtension, RegisteredAnimationInfo, type UsdzAnimation } from "../Animation.js";
import type { BehaviorExtension, UsdzBehaviour } from "./Behaviour.js";
import { EmphasizeActionMotionType, GroupActionModel, Target } from "./BehavioursBuilder.js";
/**
 * @category Everywhere Actions
 * @group Components
 */
export declare class ChangeTransformOnClick extends Behaviour implements IPointerClickHandler, UsdzBehaviour {
    object?: Object3D;
    target?: Object3D;
    duration: number;
    relativeMotion: boolean;
    private coroutine;
    private targetPos;
    private targetRot;
    private targetScale;
    start(): void;
    onPointerClick(args: PointerEventData): void;
    private moveToTarget;
    private moveRelative;
    beforeCreateDocument(ext: any): void;
}
/**
 * @category Everywhere Actions
 * @group Components
 */
export declare class ChangeMaterialOnClick extends Behaviour implements IPointerClickHandler, UsdzBehaviour {
    /**
     * The material that will be switched to the variant material
     */
    materialToSwitch?: Material;
    /**
     * The material that will be switched to
     */
    variantMaterial?: Material;
    /**
     * The duration of the fade effect in seconds (USDZ/Quicklook only)
     * @default 0
     */
    fadeDuration: number;
    start(): void;
    onPointerEnter(_args: PointerEventData): void;
    onPointerExit(_: PointerEventData): void;
    onPointerClick(args: PointerEventData): void;
    private _objectsWithThisMaterial;
    /** Get all objects in the scene that have the assigned materialToSwitch */
    private get objectsWithThisMaterial();
    private selfModel;
    private targetModels;
    private static _materialTriggersPerId;
    private static _startHiddenBehaviour;
    private static _parallelStartHiddenActions;
    beforeCreateDocument(_ext: BehaviorExtension, _context: any): Promise<void>;
    createBehaviours(_ext: BehaviorExtension, model: USDObject, _context: any): void;
    afterCreateDocument(ext: BehaviorExtension, _context: any): void;
    private createAndAttachBehaviors;
    private static getMaterialName;
    static variantSwitchIndex: number;
    private createVariants;
}
/**
 * @category Everywhere Actions
 * @group Components
 */
export declare class SetActiveOnClick extends Behaviour implements IPointerClickHandler, UsdzBehaviour {
    target?: Object3D;
    toggleOnClick: boolean;
    targetState: boolean;
    hideSelf: boolean;
    start(): void;
    onPointerClick(args: PointerEventData): void;
    private selfModel;
    private selfModelClone;
    private targetModel?;
    private toggleModel?;
    createBehaviours(_: any, model: USDObject, _context: USDZExporterContext): void;
    private stateBeforeCreatingDocument;
    private targetStateBeforeCreatingDocument;
    private static clonedToggleIndex;
    private static wasVisible;
    private static toggleClone;
    private static reverseToggleClone;
    beforeCreateDocument(): void;
    afterCreateDocument(ext: BehaviorExtension, context: USDZExporterContext): void;
    afterSerialize(_ext: BehaviorExtension, _context: USDZExporterContext): void;
}
/**
 * @category Everywhere Actions
 * @group Components
 */
export declare class HideOnStart extends Behaviour implements UsdzBehaviour {
    private static _fadeBehaviour?;
    private static _fadeObjects;
    static add(target: Target, ext: BehaviorExtension): void;
    start(): void;
    createBehaviours(ext: any, model: any, _context: any): void;
    private wasVisible;
    beforeCreateDocument(): void;
}
/**
 * @category Everywhere Actions
 * @group Components
 */
export declare class EmphasizeOnClick extends Behaviour implements UsdzBehaviour {
    target?: Object3D;
    duration: number;
    motionType: EmphasizeActionMotionType;
    beforeCreateDocument(): void;
    createBehaviours(ext: any, model: any, _context: any): void;
    afterCreateDocument(_ext: any, _context: any): void;
}
/**
 * @category Everywhere Actions
 * @group Components
 */
export declare class PlayAudioOnClick extends Behaviour implements IPointerClickHandler, UsdzBehaviour {
    target?: AudioSource;
    clip: string;
    toggleOnClick: boolean;
    trigger: "tap" | "start";
    start(): void;
    ensureAudioSource(): void;
    onPointerClick(args: PointerEventData): void;
    createBehaviours(ext: BehaviorExtension, model: USDObject, _context: USDZExporterContext): void;
}
/**
 * @category Everywhere Actions
 * @group Components
 */
export declare class PlayAnimationOnClick extends Behaviour implements IPointerClickHandler, UsdzBehaviour, UsdzAnimation {
    animator?: Animator;
    stateName?: string;
    trigger: "tap" | "start";
    animation?: Animation;
    private get target();
    start(): void;
    onPointerClick(args: PointerEventData): void;
    private selfModel;
    private stateAnimationModel;
    private animationSequence?;
    private animationLoopAfterSequence?;
    private randomOffsetNormalized;
    createBehaviours(_ext: BehaviorExtension, model: USDObject, _context: USDZExporterContext): void;
    private static animationActions;
    private static rootsWithExclusivePlayback;
    afterSerialize(): void;
    afterCreateDocument(ext: BehaviorExtension, context: USDZExporterContext): void;
    static getActionForSequences(_document: USDDocument, model: Target, animationSequence?: Array<RegisteredAnimationInfo>, animationLoopAfterSequence?: Array<RegisteredAnimationInfo>, randomOffsetNormalized?: number): GroupActionModel;
    static getAndRegisterAnimationSequences(ext: AnimationExtension, target: GameObject, stateName?: string): {
        animationSequence: Array<RegisteredAnimationInfo>;
        animationLoopAfterSequence: Array<RegisteredAnimationInfo>;
        randomTimeOffset: number;
    } | undefined;
    createAnimation(ext: AnimationExtension, model: USDObject, _context: USDZExporterContext): void;
}
export declare class PreliminaryAction extends Behaviour {
    getType(): string | void;
    target?: Object3D;
    getDuration(): number | void;
}
export declare class PreliminaryTrigger extends Behaviour {
    target?: PreliminaryAction;
}
/**
 * @category Everywhere Actions
 * @group Components
 */
export declare class VisibilityAction extends PreliminaryAction {
    type: VisibilityActionType;
    duration: number;
    getType(): "show" | "hide";
    getDuration(): number;
}
/**
 * @category Everywhere Actions
 * @group Components
 */
export declare class TapGestureTrigger extends PreliminaryTrigger {
}
export declare enum VisibilityActionType {
    Show = 0,
    Hide = 1
}
