import { ParticipantChange, SubAttributesPayload, SetAttributeInput, ChangePayload } from '@empirica/tajriba';
import { Observable, Subject } from 'rxjs';
import { g as ScopeUpdate, d as AttributeUpdate } from './scopes-eb5984a4.js';

interface StepChange {
    id: string;
    running: boolean;
    elapsed?: number;
    remaining?: number;
}
interface StepUpdate {
    step: StepChange;
    removed: boolean;
}
interface StepTick {
    started: boolean;
    ended: boolean;
    elapsed: number;
    remaining: number;
    duration: number;
}
declare type Epoch = number;
declare class Step {
    private running;
    private ticker;
    private startAt;
    private endAt;
    constructor(step: StepChange, ticker: Observable<DOMHighResTimeStamp>);
    private recalc;
    obs(): Observable<StepTick | undefined>;
    get current(): StepTick | undefined;
    _update(step: StepChange): void;
    _stop(): void;
}
declare class Steps {
    private steps;
    private updates;
    private _hadUpdates;
    private ticker;
    constructor(stepsObs: Observable<StepUpdate>, donesObs: Observable<void>);
    step(stepID: string): Step | undefined;
    hadUpdates(): boolean;
    private update;
    private next;
}

interface ParticipantUpdate {
    participant: ParticipantChange;
    removed: boolean;
}
declare class TajribaProvider {
    readonly globals: Observable<SubAttributesPayload>;
    readonly setAttributes: (input: SetAttributeInput[]) => Promise<any>;
    scopes: Subject<ScopeUpdate>;
    attributes: Subject<AttributeUpdate>;
    participants: Subject<ParticipantUpdate>;
    steps: Subject<StepUpdate>;
    dones: Subject<string[]>;
    constructor(changes: Observable<ChangePayload>, globals: Observable<SubAttributesPayload>, setAttributes: (input: SetAttributeInput[]) => Promise<any>);
}

export { Epoch as E, ParticipantUpdate as P, Step as S, TajribaProvider as T, Steps as a, StepChange as b, StepTick as c, StepUpdate as d };
