/**
 * Quiz question type ids. Mirrors the legacy `QuizQuestionDefinitions.js`
 * type set so consumers migrating from v1 retain feature parity.
 */
export type QuizQuestionType = "single-choice" | "multiple-choice" | "true-false" | "text-match" | "numeric-range" | "essay" | "matching" | "ordering" | "fill-blank" | "matching-categories" | "ai-analysis";
export interface QuizOption {
    id: string;
    label: string;
    value: string | number;
    correct?: boolean;
    score?: number;
}
/** A left/right pair for matching questions. */
export interface MatchPair {
    left: string;
    right: string;
}
/** One blank in a fill-in-the-blank question, with the accepted answers. */
export interface FillBlank {
    id: string;
    answers: string[];
}
/** A category bucket for matching-categories questions. */
export interface QuizCategory {
    slug: string;
    label: string;
    items: string[];
}
/** One identifying item in an ai-analysis question's criteria list. */
export interface AiCriterion {
    key: string;
    name: string;
    description: string;
    points: number;
}
export type AiScoringMethod = "standard" | "item_count" | "ai_judgment";
export interface QuizQuestion {
    id: string;
    /** Bank that owns this question. Always set. */
    bankId: string;
    type: QuizQuestionType;
    prompt: string;
    options: QuizOption[];
    helpText?: string;
    hint?: string;
    icon?: string;
    required?: boolean;
    points?: number;
    timeLimit?: number;
    feedback?: {
        correct?: string;
        incorrect?: string;
    };
    allowPartialCredit?: boolean;
    correctAnswer?: string | number | boolean;
    correctAnswers?: string[];
    caseSensitive?: boolean;
    trimWhitespace?: boolean;
    tolerance?: number;
    numericRangeMin?: number;
    numericRangeMax?: number;
    minWords?: number;
    maxWords?: number;
    gradingRubric?: string;
    matchPairs?: MatchPair[];
    shuffleMatches?: boolean;
    correctOrder?: string[];
    partialCreditEnabled?: boolean;
    blanks?: FillBlank[];
    categories?: QuizCategory[];
    itemsPerCategory?: number;
    scoringMethod?: AiScoringMethod;
    aiPrompt?: string;
    aiCriteria?: AiCriterion[];
    pointsPerItem?: number;
    maxPoints?: number;
    confidenceThreshold?: number;
    aiModel?: string;
    maxSubmissions?: number;
    submissionMultipliers?: string;
    useAiFeedback?: boolean;
}
export interface QuestionBank {
    id: string;
    name: string;
    description?: string;
}
/**
 * QuizBuilder schema. The builder's scope is questions and the banks
 * that group them. Quiz-level metadata (title, scoring, …) is owned by
 * the host page, not the builder. The schema always contains at least
 * one bank — the default initial bank.
 */
export interface QuizBuilderSchema {
    questionBanks: QuestionBank[];
    questions: QuizQuestion[];
}
/** Identifies which question is currently selected. */
export interface QuizBuilderSelection {
    id: string | null;
}
/** Test helper to make ids deterministic. */
export declare function __resetQuizBuilderIdCounter(): void;
export declare const useQuizBuilderStore: import('pinia').StoreDefinition<"gx-modui/quizBuilder", Pick<{
    builders: import('vue').Ref<Record<string, QuizBuilderSchema>, Record<string, QuizBuilderSchema>>;
    selections: import('vue').Ref<Record<string, QuizBuilderSelection>, Record<string, QuizBuilderSelection>>;
    ensureBuilder: (builderId: string) => QuizBuilderSchema;
    loadSchema: (builderId: string, schema: Partial<QuizBuilderSchema>) => void;
    resetBuilder: (builderId: string) => void;
    addQuestion: (builderId: string, type: QuizQuestionType, bankId: string) => string;
    removeQuestion: (builderId: string, questionId: string) => void;
    updateQuestion: (builderId: string, questionId: string, patch: Partial<Omit<QuizQuestion, "id" | "bankId">>) => void;
    addOption: (builderId: string, questionId: string) => string;
    removeOption: (builderId: string, questionId: string, optionId: string) => void;
    updateOption: (builderId: string, questionId: string, optionId: string, patch: Partial<Omit<QuizOption, "id">>) => void;
    addBank: (builderId: string, name?: string) => string;
    removeBank: (builderId: string, bankId: string) => void;
    updateBank: (builderId: string, bankId: string, patch: Partial<Omit<QuestionBank, "id">>) => void;
    copyQuestion: (builderId: string, questionId: string, toBankId?: string) => string;
    reorderQuestionInBank: (builderId: string, bankId: string, questionId: string, toIndex: number) => void;
    select: (builderId: string, id: string | null) => void;
    getSelection: (builderId: string) => QuizBuilderSelection;
    getSchema: (builderId: string) => QuizBuilderSchema;
}, "builders" | "selections">, Pick<{
    builders: import('vue').Ref<Record<string, QuizBuilderSchema>, Record<string, QuizBuilderSchema>>;
    selections: import('vue').Ref<Record<string, QuizBuilderSelection>, Record<string, QuizBuilderSelection>>;
    ensureBuilder: (builderId: string) => QuizBuilderSchema;
    loadSchema: (builderId: string, schema: Partial<QuizBuilderSchema>) => void;
    resetBuilder: (builderId: string) => void;
    addQuestion: (builderId: string, type: QuizQuestionType, bankId: string) => string;
    removeQuestion: (builderId: string, questionId: string) => void;
    updateQuestion: (builderId: string, questionId: string, patch: Partial<Omit<QuizQuestion, "id" | "bankId">>) => void;
    addOption: (builderId: string, questionId: string) => string;
    removeOption: (builderId: string, questionId: string, optionId: string) => void;
    updateOption: (builderId: string, questionId: string, optionId: string, patch: Partial<Omit<QuizOption, "id">>) => void;
    addBank: (builderId: string, name?: string) => string;
    removeBank: (builderId: string, bankId: string) => void;
    updateBank: (builderId: string, bankId: string, patch: Partial<Omit<QuestionBank, "id">>) => void;
    copyQuestion: (builderId: string, questionId: string, toBankId?: string) => string;
    reorderQuestionInBank: (builderId: string, bankId: string, questionId: string, toIndex: number) => void;
    select: (builderId: string, id: string | null) => void;
    getSelection: (builderId: string) => QuizBuilderSelection;
    getSchema: (builderId: string) => QuizBuilderSchema;
}, never>, Pick<{
    builders: import('vue').Ref<Record<string, QuizBuilderSchema>, Record<string, QuizBuilderSchema>>;
    selections: import('vue').Ref<Record<string, QuizBuilderSelection>, Record<string, QuizBuilderSelection>>;
    ensureBuilder: (builderId: string) => QuizBuilderSchema;
    loadSchema: (builderId: string, schema: Partial<QuizBuilderSchema>) => void;
    resetBuilder: (builderId: string) => void;
    addQuestion: (builderId: string, type: QuizQuestionType, bankId: string) => string;
    removeQuestion: (builderId: string, questionId: string) => void;
    updateQuestion: (builderId: string, questionId: string, patch: Partial<Omit<QuizQuestion, "id" | "bankId">>) => void;
    addOption: (builderId: string, questionId: string) => string;
    removeOption: (builderId: string, questionId: string, optionId: string) => void;
    updateOption: (builderId: string, questionId: string, optionId: string, patch: Partial<Omit<QuizOption, "id">>) => void;
    addBank: (builderId: string, name?: string) => string;
    removeBank: (builderId: string, bankId: string) => void;
    updateBank: (builderId: string, bankId: string, patch: Partial<Omit<QuestionBank, "id">>) => void;
    copyQuestion: (builderId: string, questionId: string, toBankId?: string) => string;
    reorderQuestionInBank: (builderId: string, bankId: string, questionId: string, toIndex: number) => void;
    select: (builderId: string, id: string | null) => void;
    getSelection: (builderId: string) => QuizBuilderSelection;
    getSchema: (builderId: string) => QuizBuilderSchema;
}, "select" | "ensureBuilder" | "loadSchema" | "resetBuilder" | "getSelection" | "getSchema" | "addQuestion" | "removeQuestion" | "updateQuestion" | "addOption" | "removeOption" | "updateOption" | "addBank" | "removeBank" | "updateBank" | "copyQuestion" | "reorderQuestionInBank">>;
/** Composable wrapping store access for a single builder instance. */
export declare function useQuizBuilder(builderId: string): {
    schema: import('vue').ComputedRef<QuizBuilderSchema>;
    selection: import('vue').ComputedRef<QuizBuilderSelection>;
    addQuestion: (type: QuizQuestionType, bankId: string) => string;
    removeQuestion: (id: string) => void;
    updateQuestion: (id: string, patch: Partial<Omit<QuizQuestion, "id" | "bankId">>) => void;
    addOption: (questionId: string) => string;
    removeOption: (questionId: string, optionId: string) => void;
    updateOption: (questionId: string, optionId: string, patch: Partial<Omit<QuizOption, "id">>) => void;
    addBank: (name?: string) => string;
    removeBank: (bankId: string) => void;
    updateBank: (bankId: string, patch: Partial<Omit<QuestionBank, "id">>) => void;
    copyQuestion: (questionId: string, toBankId?: string) => string;
    reorderQuestionInBank: (bankId: string, questionId: string, toIndex: number) => void;
    select: (id: string | null) => void;
    loadSchema: (schema: Partial<QuizBuilderSchema>) => void;
    reset: () => void;
};
//# sourceMappingURL=quizBuilderStore.d.ts.map