import * as VScript from "vscript";
import * as _Primitives from "./Primitives";
import * as _PTP from "./PTP";
import * as _Time from "./Time";
export declare const lift: {
    readonly Stretcher: (kwl: string | null, socket: VScript.VSocket) => Stretcher | null;
    readonly Shifter: (kwl: string | null, socket: VScript.VSocket) => Shifter | null;
    readonly DriftConverter: (kwl: string | null, socket: VScript.VSocket) => DriftConverter | null;
    readonly Detonator: (kwl: string | null, socket: VScript.VSocket) => Detonator | null;
    readonly Combinator: (kwl: string | null, socket: VScript.VSocket) => Combinator | null;
    readonly CombinatorInputs: (kwl: string | null, socket: VScript.VSocket) => CombinatorInputs | null;
    readonly Aligner: (kwl: string | null, socket: VScript.VSocket) => Aligner | null;
};
export declare const lower: {
    readonly Stretcher: (ref: Stretcher | null) => string | null;
    readonly Shifter: (ref: Shifter | null) => string | null;
    readonly DriftConverter: (ref: DriftConverter | null) => string | null;
    readonly Detonator: (ref: Detonator | null) => string | null;
    readonly Combinator: (ref: Combinator | null) => string | null;
    readonly CombinatorInputs: (ref: CombinatorInputs | null) => string | null;
    readonly Aligner: (ref: Aligner | null) => string | null;
};
/**
  ideally, all inputs to a clock combinator should use the same reference
  frame as the clock combinator itself. If this is not the case, mismatching
  inputs will be discarded by default. By setting
  `on_reference_frame_mismatch` to `Convert`, inputs can also be converted to
  the combinator's own reference frame. Note, however, that this generally
  incurs a loss in precision
*/
export declare type ReferenceFrameMismatchPolicy = "Discard" | "Convert";
export declare type PTPSourceTypeFilter = "UseHighest" | "UseAtomicClock" | "UseGPSOrBetter" | "UseTerrestrialRadioOrBetter" | "UsePTPOrBetter" | "UseNTPOrBetter" | "UseHandSetOrBetter" | "UseInternalOscillatorOrBetter";
export declare class Aligner {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get alert_level(): VScript.rKeyword<_Primitives.AlertLevel, _Primitives.AlertLevel, Aligner>;
    get absolute_input(): VScript.duplexKeyword<string | null, _Time.Source | null, Aligner>;
    get grain_accurate_input(): VScript.duplexKeyword<string | null, _Time.Source | null, Aligner>;
    get warning_threshold(): VScript.rwKeyword<number, number, Aligner>;
    get holdover_grains(): VScript.rwKeyword<number, number, Aligner>;
    get output(): _Time.Source;
    get ptp_traits(): _PTP.Traits;
}
export declare class AlignerAsNamedTableRow extends Aligner {
    private readonly raw_row;
    readonly enclosing_table: VScript.StronglyTypedNamedTable<Aligner>;
    readonly index: number;
    constructor(raw_row: VScript.NamedTableRow, enclosing_table: VScript.StronglyTypedNamedTable<Aligner>);
    rename(name: string, opts?: VScript.CommonWriteOptions): Promise<void>;
    delete(opts?: VScript.CommonWriteOptions): Promise<void>;
}
export declare type CombinatorType = "AbsoluteTime";
declare class CombinatorInputs {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get selected(): VScript.rKeyword<boolean, boolean, CombinatorInputs>;
    get source(): VScript.duplexKeyword<string | null, _Time.Source | null, CombinatorInputs>;
}
export declare class Combinator {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get required_offset_type(): VScript.rwKeyword<"AbsoluteTime", "AbsoluteTime", Combinator>;
    get required_ptp_source_type(): VScript.rwKeyword<PTPSourceTypeFilter, PTPSourceTypeFilter, Combinator>;
    get drift_reference(): VScript.rwKeyword<_Time.ReferenceFrame, _Time.ReferenceFrame, Combinator>;
    get min_drift_tolerance(): VScript.rwKeyword<number, number, Combinator>;
    get min_offset_tolerance(): VScript.rwKeyword<number, number, Combinator>;
    get quorum(): VScript.duplexKeyword<number, number, Combinator>;
    get session_length(): VScript.duplexKeyword<number, number, Combinator>;
    get inputs(): VScript.StronglyTypedArray<Combinator, CombinatorInputs, VScript.RowView<CombinatorInputs>>;
    get output(): _Time.Source;
    get ptp_traits(): _PTP.Traits;
}
export declare class CombinatorAsNamedTableRow extends Combinator {
    private readonly raw_row;
    readonly enclosing_table: VScript.StronglyTypedNamedTable<Combinator>;
    readonly index: number;
    constructor(raw_row: VScript.NamedTableRow, enclosing_table: VScript.StronglyTypedNamedTable<Combinator>);
    rename(name: string, opts?: VScript.CommonWriteOptions): Promise<void>;
    delete(opts?: VScript.CommonWriteOptions): Promise<void>;
}
export declare class Detonator {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get max_drift_blast(): VScript.rwKeyword<number, number, Detonator>;
    get max_offset_blast(): VScript.rwKeyword<number, number, Detonator>;
    /**
      Discharge
    */
    get discharge(): VScript.wKeyword<"Click", "Click", Detonator>;
    /**
      Realign
    */
    get realign(): VScript.wKeyword<"Click", "Click", Detonator>;
    get friction(): VScript.rwKeyword<number, number, Detonator>;
    get stiffness(): VScript.rwKeyword<number, number, Detonator>;
    get input(): VScript.duplexKeyword<string | null, _Time.Source | null, Detonator>;
    get output(): _Time.Source;
    get ptp_traits(): _PTP.Traits;
}
export declare class DetonatorAsNamedTableRow extends Detonator {
    private readonly raw_row;
    readonly enclosing_table: VScript.StronglyTypedNamedTable<Detonator>;
    readonly index: number;
    constructor(raw_row: VScript.NamedTableRow, enclosing_table: VScript.StronglyTypedNamedTable<Detonator>);
    rename(name: string, opts?: VScript.CommonWriteOptions): Promise<void>;
    delete(opts?: VScript.CommonWriteOptions): Promise<void>;
}
export declare class DriftConverter {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get drift_reference(): VScript.rwKeyword<_Time.ReferenceFrame, _Time.ReferenceFrame, DriftConverter>;
    /**
      ideally, all inputs to a clock combinator should use the same reference
      frame as the clock combinator itself. If this is not the case,
      mismatching inputs will be discarded by default. By setting
      `on_reference_frame_mismatch` to `Convert`, inputs can also be converted
      to the combinator's own reference frame. Note, however, that this
      generally incurs a loss in precision
    */
    get on_drift_reference_mismatch(): VScript.rwKeyword<ReferenceFrameMismatchPolicy, ReferenceFrameMismatchPolicy, DriftConverter>;
    get input(): VScript.duplexKeyword<string | null, _Time.Source | null, DriftConverter>;
    get output(): _Time.Source;
    get ptp_traits(): _PTP.Traits;
}
export declare class DriftConverterAsNamedTableRow extends DriftConverter {
    private readonly raw_row;
    readonly enclosing_table: VScript.StronglyTypedNamedTable<DriftConverter>;
    readonly index: number;
    constructor(raw_row: VScript.NamedTableRow, enclosing_table: VScript.StronglyTypedNamedTable<DriftConverter>);
    rename(name: string, opts?: VScript.CommonWriteOptions): Promise<void>;
    delete(opts?: VScript.CommonWriteOptions): Promise<void>;
}
export declare class Shifter {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get shift(): VScript.rwKeyword<number, number, Shifter>;
    get input(): VScript.duplexKeyword<string | null, _Time.Source | null, Shifter>;
    get output(): _Time.Source;
    get ptp_traits(): _PTP.Traits;
}
export declare class ShifterAsNamedTableRow extends Shifter {
    private readonly raw_row;
    readonly enclosing_table: VScript.StronglyTypedNamedTable<Shifter>;
    readonly index: number;
    constructor(raw_row: VScript.NamedTableRow, enclosing_table: VScript.StronglyTypedNamedTable<Shifter>);
    rename(name: string, opts?: VScript.CommonWriteOptions): Promise<void>;
    delete(opts?: VScript.CommonWriteOptions): Promise<void>;
}
/**
  stretchers shift their input source's measured drift by a user-defined
  amount (note that this demotes `Absolute` and `GrainAccurate` time sources
  to class `FrequencyOnly`). Stretchers are probably useless in a production
  setting, but can be helpful in simulating failure scenarios.
*/
export declare class Stretcher {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get frequency_shift(): VScript.rwKeyword<number, number, Stretcher>;
    get input(): VScript.duplexKeyword<string | null, _Time.Source | null, Stretcher>;
    get output(): _Time.Source;
    get ptp_traits(): _PTP.Traits;
}
export declare class StretcherAsNamedTableRow extends Stretcher {
    private readonly raw_row;
    readonly enclosing_table: VScript.StronglyTypedNamedTable<Stretcher>;
    readonly index: number;
    constructor(raw_row: VScript.NamedTableRow, enclosing_table: VScript.StronglyTypedNamedTable<Stretcher>);
    rename(name: string, opts?: VScript.CommonWriteOptions): Promise<void>;
    delete(opts?: VScript.CommonWriteOptions): Promise<void>;
}
export declare class All {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get aligners(): VScript.StronglyTypedNamedTable<Aligner, VScript.NamedTableRowView<Aligner>>;
    get combinators(): VScript.StronglyTypedNamedTable<Combinator, VScript.NamedTableRowView<Combinator>>;
    get detonators(): VScript.StronglyTypedNamedTable<Detonator, VScript.NamedTableRowView<Detonator>>;
    get drift_converters(): VScript.StronglyTypedNamedTable<DriftConverter, VScript.NamedTableRowView<DriftConverter>>;
    get shifters(): VScript.StronglyTypedNamedTable<Shifter, VScript.NamedTableRowView<Shifter>>;
    /**
      stretchers shift their input source's measured drift by a user-defined
      amount (note that this demotes `Absolute` and `GrainAccurate` time
      sources to class `FrequencyOnly`). Stretchers are probably useless in a
      production setting, but can be helpful in simulating failure scenarios.
    */
    get stretchers(): VScript.StronglyTypedNamedTable<Stretcher, VScript.NamedTableRowView<Stretcher>>;
}
export declare const Enums: {
    readonly CombinatorType: "AbsoluteTime"[];
    readonly PTPSourceTypeFilter: PTPSourceTypeFilter[];
    readonly ReferenceFrameMismatchPolicy: ReferenceFrameMismatchPolicy[];
};
export {};
