import React from 'react';
import type { TSequence } from './CompositionManager.js';
import type { CanUpdateSequencePropStatus, CodeValues, GetDragOverrides, GetEffectDragOverrides } from './use-schema.js';
export type SequenceManagerContext = {
    registerSequence: (seq: TSequence) => void;
    unregisterSequence: (id: string) => void;
    sequences: TSequence[];
};
export type SequenceNodePath = Array<string | number>;
export declare const SequenceManager: React.Context<SequenceManagerContext>;
export type VisualModeCodeValues = {
    codeValues: CodeValues;
};
export type VisualModeDragOverrides = {
    getDragOverrides: GetDragOverrides;
    getEffectDragOverrides: GetEffectDragOverrides;
};
export type VisualModeSetters = {
    setDragOverrides: (nodePath: SequencePropsSubscriptionKey, key: string, value: unknown) => void;
    clearDragOverrides: (nodePath: SequencePropsSubscriptionKey) => void;
    setEffectDragOverrides: (nodePath: SequencePropsSubscriptionKey, effectIndex: number, key: string, value: unknown) => void;
    clearEffectDragOverrides: (nodePath: SequencePropsSubscriptionKey, effectIndex: number) => void;
    setCodeValues: (nodePath: SequencePropsSubscriptionKey, values: (prev: CanUpdateSequencePropsResponse) => CanUpdateSequencePropsResponse) => void;
};
export type CanUpdateEffectPropsResponseTrue = {
    canUpdate: true;
    callee: string;
    effectIndex: number;
    props: Record<string, CanUpdateSequencePropStatus>;
};
export type CannotUpdateEffectReason = 'not-found' | 'computed' | 'not-call-expression';
export type CannotUpdateSequenceReason = 'not-found' | 'error';
export type CanUpdateEffectPropsResponseFalse = {
    canUpdate: false;
    effectIndex: number;
    reason: CannotUpdateEffectReason;
};
export type CanUpdateEffectPropsResponse = CanUpdateEffectPropsResponseTrue | CanUpdateEffectPropsResponseFalse;
export type CanUpdateSequencePropsResponseTrue = {
    canUpdate: true;
    props: Record<string, CanUpdateSequencePropStatus>;
    effects: CanUpdateEffectPropsResponse[];
};
export type CanUpdateSequencePropsResponseFalse = {
    canUpdate: false;
    reason: CannotUpdateSequenceReason;
};
export type CanUpdateSequencePropsResponse = CanUpdateSequencePropsResponseTrue | CanUpdateSequencePropsResponseFalse;
export declare const makeSequencePropsSubscriptionKey: (key: SequencePropsSubscriptionKey) => string;
export declare const VisualModeCodeValuesContext: React.Context<VisualModeCodeValues>;
export declare const VisualModeDragOverridesContext: React.Context<VisualModeDragOverrides>;
export declare const VisualModeSettersContext: React.Context<VisualModeSetters>;
export type SequencePropsSubscriptionKey = {
    absolutePath: string;
    nodePath: SequenceNodePath;
    sequenceKeys: string[];
    effectKeys: string[][];
};
export declare const SequenceManagerProvider: React.FC<{
    readonly children: React.ReactNode;
}>;
