import React from 'react';
import type { CanUpdateSequencePropStatusKeyframed, OverrideIdToNodePaths, PropStatuses, SequencePropsSubscriptionKey, TSequence, InteractivitySchema } from 'remotion';
import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
import type { MoveEffectKeyframeChange, MoveSequenceKeyframeChange } from './call-move-keyframe';
import { type SaveSequencePropChange } from './save-sequence-prop';
import { type TimelineSelection } from './TimelineSelection';
export type TimelineSequenceDurationDragTarget = {
    readonly fileName: string;
    readonly initialDuration: number;
    readonly nodePath: SequencePropsSubscriptionKey;
    readonly schema: InteractivitySchema;
};
export type TimelineSequenceLeftEdgeDragTarget = {
    readonly fileName: string;
    readonly initialDuration: number;
    readonly initialFrom: number;
    readonly initialTrimBefore: number;
    readonly nodePath: SequencePropsSubscriptionKey;
    readonly schema: InteractivitySchema;
};
export type TimelineSequenceFromDragTarget = {
    readonly effectKeyframes: TimelineSequenceEffectKeyframeDragTarget[];
    readonly fileName: string;
    readonly initialFrom: number;
    readonly nodePath: SequencePropsSubscriptionKey;
    readonly sequenceKeyframes: TimelineSequenceKeyframeDragTarget[];
};
type TimelineSequenceKeyframeDragTarget = {
    readonly fieldKey: string;
    readonly schema: InteractivitySchema;
    readonly status: CanUpdateSequencePropStatusKeyframed;
};
type TimelineSequenceEffectKeyframeDragTarget = TimelineSequenceKeyframeDragTarget & {
    readonly effectIndex: number;
};
export declare const isTimelineSequenceDurationDraggable: (sequence: TSequence) => boolean;
export declare const getTimelineSequenceDurationDragValue: ({ initialDuration, deltaFrames, }: {
    readonly initialDuration: number;
    readonly deltaFrames: number;
}) => number;
export declare const getTimelineSequenceLeftEdgeDragDelta: ({ initialDuration, initialTrimBefore, deltaFrames, }: {
    readonly initialDuration: number;
    readonly initialTrimBefore: number;
    readonly deltaFrames: number;
}) => number;
export declare const getTimelineSequenceLeftEdgeDragValues: ({ initialDuration, initialFrom, initialTrimBefore, deltaFrames, }: {
    readonly initialDuration: number;
    readonly initialFrom: number;
    readonly initialTrimBefore: number;
    readonly deltaFrames: number;
}) => {
    durationInFrames: number;
    from: number;
    trimBefore: number;
};
export declare const getTimelineSequenceLeftEdgeDragChanges: ({ targets, deltaFrames, }: {
    readonly targets: readonly TimelineSequenceLeftEdgeDragTarget[];
    readonly deltaFrames: number;
}) => SaveSequencePropChange[];
export declare const getTimelineSequenceDurationDragChanges: ({ targets, deltaFrames, }: {
    readonly targets: readonly TimelineSequenceDurationDragTarget[];
    readonly deltaFrames: number;
}) => SaveSequencePropChange[];
export declare const getTimelineSequenceFromDragValue: ({ initialFrom, deltaFrames, }: {
    readonly initialFrom: number;
    readonly deltaFrames: number;
}) => number;
export declare const getTimelineSequenceFromDragChanges: ({ targets, deltaFrames, }: {
    readonly targets: readonly TimelineSequenceFromDragTarget[];
    readonly deltaFrames: number;
}) => SaveSequencePropChange[];
export declare const getTimelineSequenceFromDragKeyframeMoves: ({ targets, deltaFrames, }: {
    readonly targets: readonly TimelineSequenceFromDragTarget[];
    readonly deltaFrames: number;
}) => {
    readonly effectKeyframes: MoveEffectKeyframeChange[];
    readonly sequenceKeyframes: MoveSequenceKeyframeChange[];
};
export declare const getTimelineSequenceDurationDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, }: {
    readonly draggedNodePathInfo: SequenceNodePathInfo;
    readonly selectedItems: readonly TimelineSelection[];
    readonly sequences: TSequence[];
    readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
    readonly propStatuses: PropStatuses;
}) => TimelineSequenceDurationDragTarget[] | null;
export declare const getTimelineSequenceLeftEdgeDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, }: {
    readonly draggedNodePathInfo: SequenceNodePathInfo;
    readonly selectedItems: readonly TimelineSelection[];
    readonly sequences: TSequence[];
    readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
    readonly propStatuses: PropStatuses;
}) => TimelineSequenceLeftEdgeDragTarget[] | null;
export declare const getTimelineSequenceFromDragTargets: ({ draggedNodePathInfo, selectedItems, sequences, overrideIdsToNodePaths, propStatuses, }: {
    readonly draggedNodePathInfo: SequenceNodePathInfo;
    readonly selectedItems: readonly TimelineSelection[];
    readonly sequences: TSequence[];
    readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
    readonly propStatuses: PropStatuses;
}) => TimelineSequenceFromDragTarget[] | null;
export declare const TimelineSequenceLeftEdgeDragHandle: React.FC<{
    readonly nodePathInfo: SequenceNodePathInfo;
    readonly windowWidth: number;
    readonly timelineDurationInFrames: number;
}>;
export declare const useTimelineSequenceFromDrag: ({ nodePathInfo, windowWidth, timelineDurationInFrames, }: {
    readonly nodePathInfo: SequenceNodePathInfo | null;
    readonly windowWidth: number;
    readonly timelineDurationInFrames: number;
}) => {
    dragging: boolean;
    onPointerDown: (e: React.PointerEvent<HTMLDivElement>) => void;
};
export declare const TimelineSequenceRightEdgeDragHandle: React.FC<{
    readonly nodePathInfo: SequenceNodePathInfo;
    readonly windowWidth: number;
    readonly timelineDurationInFrames: number;
}>;
export {};
