export interface GroupMember {
    /**
     * This option names the group, to keep it distinct from other
     * groups of choices.
     */
    group: string;
    /**
     * This option names that member. e.g. if the user can choose
     * between doing either A-and-B or C-and-D, this identifies
     * whether we are part ofth e first choice (A+B) or the second
     * (C+D).
     */
    member: number;
}
export interface Title {
    title: string;
}
export interface Description {
    description: string;
}
export type Source = {
    source: string;
};
/**
 * Is this a member of a group of choices? e.g. am I `A` in a choice
 * to do either `A+B` or `C+D`?
 */
export type Choice = GroupMember & Source & Title & Partial<Description> & Kind<'Choice'> & {
    /** Title and Source for the choice group */
    groupDetail: Partial<Title> & Source;
};
export type Import = Title & Source & Kind<'Import'> & {
    key: string;
    filepath: string;
};
type Kind<T extends string> = {
    kind: T;
};
export type Wizard = {
    wizard: Title & Partial<Description> & Source;
};
export type WizardStep = Wizard & GroupMember & Title & Partial<Description> & Kind<'WizardStep'> & Source;
type CodeBlockNestingParent = Choice | Import | WizardStep;
export declare function isGroupMember<T extends CodeBlockNestingParent>(part: T): part is T & GroupMember;
export declare function isChoice(part: CodeBlockNestingParent): part is Choice;
export declare function isImport(part: CodeBlockNestingParent): part is Import;
export declare function isWizardStep(part: CodeBlockNestingParent): part is WizardStep;
export default interface CodeBlockProps {
    id: string;
    body: string;
    language: string;
    optional?: boolean;
    validate?: string;
    nesting?: CodeBlockNestingParent[];
}
export declare function addNesting(props: CodeBlockProps, nesting: CodeBlockNestingParent): void;
export {};
