import type { ClocksState, Duration, Context } from '@datadog/browser-core';
import type { LifeCycle } from '../lifeCycle';
import { VitalType } from '../../rawRumEvent.types';
import type { PageStateHistory } from '../contexts/pageStateHistory';
export interface DurationVitalOptions {
    context?: Context;
    description?: string;
}
export interface DurationVitalReference {
    __dd_vital_reference: true;
}
export interface DurationVitalStart {
    name: string;
    startClocks: ClocksState;
    context?: Context;
    description?: string;
}
export interface DurationVital {
    name: string;
    type: VitalType.DURATION;
    startClocks: ClocksState;
    duration: Duration;
    description?: string;
    context?: Context;
}
export interface CustomVitalsState {
    vitalsByName: Map<string, DurationVitalStart>;
    vitalsByReference: WeakMap<DurationVitalReference, DurationVitalStart>;
}
export declare function createCustomVitalsState(): {
    vitalsByName: Map<string, DurationVitalStart>;
    vitalsByReference: WeakMap<DurationVitalReference, DurationVitalStart>;
};
export declare function startVitalCollection(lifeCycle: LifeCycle, pageStateHistory: PageStateHistory, customVitalsState: CustomVitalsState): {
    addDurationVital: (vital: DurationVital) => void;
    startDurationVital: (name: string, options?: DurationVitalOptions) => DurationVitalReference;
    stopDurationVital: (nameOrRef: string | DurationVitalReference, options?: DurationVitalOptions) => void;
};
export declare function startDurationVital({ vitalsByName, vitalsByReference }: CustomVitalsState, name: string, options?: DurationVitalOptions): DurationVitalReference;
export declare function stopDurationVital(stopCallback: (vital: DurationVital) => void, { vitalsByName, vitalsByReference }: CustomVitalsState, nameOrRef: string | DurationVitalReference, options?: DurationVitalOptions): void;
