import { z } from 'zod'; import { PositionSchema, CEFRLevelSchema, GrammarDifficultySchema } from './base.js'; /** * Vocabulary item node schema * * Individual word or phrase with translation and metadata. Used for * vocabulary learning in lessons. This is a leaf node (no children). * * @example * ```typescript * import { VocabularyItemNodeSchema } from '@syllst/core/schemas'; * * const vocabItem = { * type: 'vocabularyItem', * id: 'vocab-hello', * word: 'สวัสดี', * transcription: 'sawatdee', * translation: 'Hello', * partOfSpeech: 'interjection', * value: 'สวัสดี' * }; * * const result = VocabularyItemNodeSchema.safeParse(vocabItem); * if (result.success) { * console.log('Valid vocabulary item:', result.data); * } * ``` */ export declare const VocabularyItemNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"vocabularyItem">; id: z.ZodString; word: z.ZodString; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; translation: z.ZodString; definition: z.ZodOptional; preview: z.ZodOptional; category: z.ZodOptional; tags: z.ZodOptional>; partOfSpeech: z.ZodOptional; notes: z.ZodOptional; example: z.ZodOptional; related: z.ZodOptional>; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Character item node schema * * Individual character or letter with pronunciation and metadata. * Used for alphabet/script learning systems (Thai, Japanese, Korean, * Georgian, Arabic, etc.). This is a leaf node (no children). * * @example * ```typescript * import { CharacterItemNodeSchema } from '@syllst/core/schemas'; * * // Thai consonant example * const thaiChar = { * type: 'characterItem', * id: 'th-ko-kai', * char: 'ก', * name: 'Ko Kai', * nativeName: 'กอไก่', * transcription: 'k', * charType: 'consonant', * canonicalRef: 'chicken', * value: 'ก' * }; * * const result = CharacterItemNodeSchema.safeParse(thaiChar); * ``` * * @example * ```typescript * // Japanese hiragana example * const hiraganaChar = { * type: 'characterItem', * id: 'ja-hiragana-a', * char: 'あ', * name: 'a', * transcription: 'a', * charType: 'syllable-block', * mnemonic: 'Looks like an antenna', * value: 'あ' * }; * ``` */ export declare const CharacterItemNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"characterItem">; id: z.ZodString; char: z.ZodString; name: z.ZodString; nativeName: z.ZodOptional; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; charType: z.ZodUnion, z.ZodString]>; preview: z.ZodOptional; category: z.ZodOptional; tags: z.ZodOptional>; mnemonic: z.ZodOptional; association: z.ZodOptional; }, z.core.$strip>, z.ZodString]>>; exampleWords: z.ZodOptional>; variants: z.ZodOptional>>; notes: z.ZodOptional; audioPath: z.ZodOptional; canonicalRef: z.ZodOptional; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Example node schema * * Example sentence demonstrating language usage. Used to illustrate * grammar rules, vocabulary usage, or provide context for learning. * This is a leaf node (no children). * * @example * ```typescript * import { ExampleNodeSchema } from '@syllst/core/schemas'; * * const example = { * type: 'example', * id: 'ex-greeting', * text: 'สวัสดีครับ ผมชื่อจอห์น', * transcription: 'sawatdee khrap phom chue john', * translation: 'Hello, my name is John.', * literalTranslation: 'hello [polite-masculine] I name John', * illustrates: ['grammar-self-intro', 'vocab-greetings'], * value: 'สวัสดีครับ ผมชื่อจอห์น' * }; * * const result = ExampleNodeSchema.safeParse(example); * ``` */ export declare const ExampleNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"example">; id: z.ZodString; text: z.ZodString; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; translation: z.ZodString; literalTranslation: z.ZodOptional; notes: z.ZodOptional; illustrates: z.ZodOptional>; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Content node schema */ export declare const ContentNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"content">; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Metadata node schema */ export declare const MetadataNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"metadata">; key: z.ZodString; value: z.ZodUnknown; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Dialogue participant schema */ export declare const DialogueParticipantSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodOptional; gender: z.ZodOptional>; role: z.ZodOptional; }, z.core.$strip>; /** * Gender variants schema */ export declare const GenderVariantsSchema: z.ZodObject<{ masculine: z.ZodString; feminine: z.ZodString; neutral: z.ZodOptional; }, z.core.$strip>; /** * Dialogue turn node schema * * Represents a single speaker's utterance in a dialogue. Used for * structured conversation practice. Can contain gender variants for * languages with gendered particles (Thai ครับ/ค่ะ, Japanese です/ですわ). * This is a leaf node (no children). * * @example * ```typescript * import { DialogueTurnNodeSchema } from '@syllst/core/schemas'; * * // Thai dialogue with gender variants * const turn = { * type: 'dialogueTurn', * speakerId: 'customer', * text: 'ขอโทษ{ครับ|ค่ะ} ห้องน้ำอยู่ที่ไหน{ครับ|ค่ะ}', * genderVariants: { * masculine: 'ขอโทษครับ ห้องน้ำอยู่ที่ไหนครับ', * feminine: 'ขอโทษค่ะ ห้องน้ำอยู่ที่ไหนค่ะ' * }, * transcription: 'kho-thot khrap hong-nam yu thi-nai khrap', * translation: 'Excuse me, where is the bathroom?', * value: 'ขอโทษ{ครับ|ค่ะ} ห้องน้ำอยู่ที่ไหน{ครับ|ค่ะ}' * }; * * const result = DialogueTurnNodeSchema.safeParse(turn); * ``` */ export declare const DialogueTurnNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"dialogueTurn">; speakerId: z.ZodString; text: z.ZodString; genderVariants: z.ZodOptional; }, z.core.$strip>>; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; translation: z.ZodString; glostSentences: z.ZodOptional>; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Dialogue node schema */ export declare const DialogueNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"dialogue">; id: z.ZodString; participants: z.ZodArray; gender: z.ZodOptional>; role: z.ZodOptional; }, z.core.$strip>>; context: z.ZodOptional; culturalNotes: z.ZodOptional; lang: z.ZodOptional; children: z.ZodArray; speakerId: z.ZodString; text: z.ZodString; genderVariants: z.ZodOptional; }, z.core.$strip>>; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; translation: z.ZodString; glostSentences: z.ZodOptional>; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Rule condition node schema */ export declare const RuleConditionNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"ruleCondition">; id: z.ZodOptional; condition: z.ZodRecord; result: z.ZodString; example: z.ZodOptional; exampleTranscription: z.ZodOptional; exampleTranslation: z.ZodOptional; notes: z.ZodOptional; value: z.ZodString; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Phonological rule node schema */ export declare const PhonologicalRuleNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"phonologicalRule">; id: z.ZodString; title: z.ZodString; ruleType: z.ZodUnion, z.ZodString]>; description: z.ZodOptional; exceptions: z.ZodOptional; relatedRules: z.ZodOptional>; children: z.ZodArray; id: z.ZodOptional; condition: z.ZodRecord; result: z.ZodString; example: z.ZodOptional; exampleTranscription: z.ZodOptional; exampleTranslation: z.ZodOptional; notes: z.ZodOptional; value: z.ZodString; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"example">; id: z.ZodString; text: z.ZodString; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; translation: z.ZodString; literalTranslation: z.ZodOptional; notes: z.ZodOptional; illustrates: z.ZodOptional>; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"content">; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>]>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Pattern example node schema */ export declare const PatternExampleNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"patternExample">; text: z.ZodString; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; translation: z.ZodOptional; notes: z.ZodOptional; references: z.ZodOptional>; value: z.ZodString; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Syllable pattern node schema */ export declare const SyllablePatternNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"syllablePattern">; id: z.ZodString; title: z.ZodString; patternType: z.ZodOptional; structure: z.ZodOptional; description: z.ZodOptional; children: z.ZodArray; text: z.ZodString; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; translation: z.ZodOptional; notes: z.ZodOptional; references: z.ZodOptional>; value: z.ZodString; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"content">; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>]>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Writing pattern node schema */ export declare const WritingPatternNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"writingPattern">; id: z.ZodString; title: z.ZodString; patternType: z.ZodString; description: z.ZodOptional; children: z.ZodArray; id: z.ZodString; text: z.ZodString; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; translation: z.ZodString; literalTranslation: z.ZodOptional; notes: z.ZodOptional; illustrates: z.ZodOptional>; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"content">; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>]>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Vocabulary set node schema */ export declare const VocabularySetNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"vocabularySet">; id: z.ZodString; title: z.ZodOptional; description: z.ZodOptional; children: z.ZodArray; id: z.ZodString; word: z.ZodString; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; translation: z.ZodString; definition: z.ZodOptional; preview: z.ZodOptional; category: z.ZodOptional; tags: z.ZodOptional>; partOfSpeech: z.ZodOptional; notes: z.ZodOptional; example: z.ZodOptional; related: z.ZodOptional>; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Word list item node schema * * Individual word entry for external word lists (e.g., CEFR lists, frequency * corpora). Distinct from VocabularyItemNode which is for MDX syllabus content. * This is a leaf node (no children). * * @example * ```typescript * import { WordListItemNodeSchema } from '@syllst/core/schemas'; * * const wordItem = { * type: 'wordListItem', * id: 'th:vocab:greetings:hello', * word: 'สวัสดี', * transcription: { * 'paiboon+': 'sà-wàt-dii', * 'rtgs': 'sawatdi', * 'ipa': '/sa˨˩.wat˨˩.diː˧/' * }, * translation: 'Hello', * partOfSpeech: 'interjection', * difficulty: 'beginner', * examGrade: 'A1', * value: 'สวัสดี' * }; * * const result = WordListItemNodeSchema.safeParse(wordItem); * ``` */ export declare const WordListItemNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"wordListItem">; id: z.ZodString; word: z.ZodString; translation: z.ZodOptional; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; partOfSpeech: z.ZodOptional; example: z.ZodOptional; notes: z.ZodOptional; difficulty: z.ZodOptional>; examGrade: z.ZodOptional>; category: z.ZodOptional; tags: z.ZodOptional>; frequency: z.ZodOptional; externalIds: z.ZodOptional>; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Word list set node schema * * Collection of word list items. Distinct from VocabularySetNode which is * for MDX syllabus content. This is a parent node containing WordListItemNode * children. * * @example * ```typescript * import { WordListSetNodeSchema } from '@syllst/core/schemas'; * * const wordList = { * type: 'wordListSet', * id: 'a1-greetings', * title: 'A1 Greetings', * description: 'Basic greeting vocabulary', * source: 'CEFR A1', * difficulty: 'beginner', * examGrade: 'A1', * category: 'greetings', * children: [...] * }; * * const result = WordListSetNodeSchema.safeParse(wordList); * ``` */ export declare const WordListSetNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"wordListSet">; id: z.ZodString; title: z.ZodOptional; description: z.ZodOptional; source: z.ZodOptional; difficulty: z.ZodOptional>; examGrade: z.ZodOptional>; category: z.ZodOptional; subcategory: z.ZodOptional; children: z.ZodArray; id: z.ZodString; word: z.ZodString; translation: z.ZodOptional; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; partOfSpeech: z.ZodOptional; example: z.ZodOptional; notes: z.ZodOptional; difficulty: z.ZodOptional>; examGrade: z.ZodOptional>; category: z.ZodOptional; tags: z.ZodOptional>; frequency: z.ZodOptional; externalIds: z.ZodOptional>; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Character set node schema */ export declare const CharacterSetNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"characterSet">; id: z.ZodString; title: z.ZodOptional; description: z.ZodOptional; charType: z.ZodOptional, z.ZodString]>>; phoneticCategory: z.ZodOptional>; children: z.ZodArray; id: z.ZodString; char: z.ZodString; name: z.ZodString; nativeName: z.ZodOptional; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; charType: z.ZodUnion, z.ZodString]>; preview: z.ZodOptional; category: z.ZodOptional; tags: z.ZodOptional>; mnemonic: z.ZodOptional; association: z.ZodOptional; }, z.core.$strip>, z.ZodString]>>; exampleWords: z.ZodOptional>; variants: z.ZodOptional>>; notes: z.ZodOptional; audioPath: z.ZodOptional; canonicalRef: z.ZodOptional; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Example set node schema */ export declare const ExampleSetNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"exampleSet">; id: z.ZodString; title: z.ZodOptional; description: z.ZodOptional; children: z.ZodArray; id: z.ZodString; text: z.ZodString; transcription: z.ZodOptional; primary: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ primary: z.ZodString; ipa: z.ZodOptional; }, z.core.$catchall>>]>]>>; translation: z.ZodString; literalTranslation: z.ZodOptional; notes: z.ZodOptional; illustrates: z.ZodOptional>; value: z.ZodString; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Multiple-choice exercise schema. * Options required (>= 2). Answer is a string. */ export declare const MultipleChoiceExerciseSchema: z.ZodObject<{ exerciseType: z.ZodLiteral<"multiple-choice">; options: z.ZodArray; answer: z.ZodString; items: z.ZodOptional; }, z.core.$strip>>>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Matching exercise schema. * Items required (>= 2 pairs). */ export declare const MatchingExerciseSchema: z.ZodObject<{ exerciseType: z.ZodLiteral<"matching">; items: z.ZodArray; }, z.core.$strip>>; answer: z.ZodUnion]>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Fill-in-blank exercise schema. */ export declare const FillInBlankExerciseSchema: z.ZodObject<{ exerciseType: z.ZodLiteral<"fill-in-blank">; items: z.ZodOptional; }, z.core.$strip>>>; answer: z.ZodUnion]>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * True-false exercise schema. * Answer must be "true" or "false". */ export declare const TrueFalseExerciseSchema: z.ZodObject<{ exerciseType: z.ZodLiteral<"true-false">; answer: z.ZodEnum<{ true: "true"; false: "false"; }>; items: z.ZodOptional; }, z.core.$strip>>>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Translation exercise schema. */ export declare const TranslationExerciseSchema: z.ZodObject<{ exerciseType: z.ZodLiteral<"translation">; answer: z.ZodUnion]>; items: z.ZodOptional; }, z.core.$strip>>>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Transformation exercise schema. * Items required (>= 1). */ export declare const TransformationExerciseSchema: z.ZodObject<{ exerciseType: z.ZodLiteral<"transformation">; items: z.ZodArray; }, z.core.$strip>>; answer: z.ZodUnion]>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Pattern-practice exercise schema. * Items required (>= 1). */ export declare const PatternPracticeExerciseSchema: z.ZodObject<{ exerciseType: z.ZodLiteral<"pattern-practice">; items: z.ZodArray; }, z.core.$strip>>; answer: z.ZodUnion]>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Dialogue exercise schema. * Items required (>= 1 dialogue turn). */ export declare const DialogueExerciseSchema: z.ZodObject<{ exerciseType: z.ZodLiteral<"dialogue">; items: z.ZodArray; }, z.core.$strip>>; answer: z.ZodUnion]>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Open-ended exercise schema. * Answer is optional. */ export declare const OpenEndedExerciseSchema: z.ZodObject<{ exerciseType: z.ZodLiteral<"open-ended">; answer: z.ZodOptional]>>; items: z.ZodOptional; }, z.core.$strip>>>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Exercise node schema — discriminated union on `exerciseType`. * * Each branch enforces per-type structural requirements: * - multiple-choice: options required (>= 2), answer is string * - matching: items required (>= 2 pairs) * - true-false: answer must be "true" or "false" * - transformation/pattern-practice/dialogue: items required (>= 1) * - open-ended: answer is optional * - fill-in-blank/translation: minimal constraints */ export declare const ExerciseNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{ exerciseType: z.ZodLiteral<"multiple-choice">; options: z.ZodArray; answer: z.ZodString; items: z.ZodOptional; }, z.core.$strip>>>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ exerciseType: z.ZodLiteral<"matching">; items: z.ZodArray; }, z.core.$strip>>; answer: z.ZodUnion]>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ exerciseType: z.ZodLiteral<"fill-in-blank">; items: z.ZodOptional; }, z.core.$strip>>>; answer: z.ZodUnion]>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ exerciseType: z.ZodLiteral<"true-false">; answer: z.ZodEnum<{ true: "true"; false: "false"; }>; items: z.ZodOptional; }, z.core.$strip>>>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ exerciseType: z.ZodLiteral<"translation">; answer: z.ZodUnion]>; items: z.ZodOptional; }, z.core.$strip>>>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ exerciseType: z.ZodLiteral<"transformation">; items: z.ZodArray; }, z.core.$strip>>; answer: z.ZodUnion]>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ exerciseType: z.ZodLiteral<"pattern-practice">; items: z.ZodArray; }, z.core.$strip>>; answer: z.ZodUnion]>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ exerciseType: z.ZodLiteral<"dialogue">; items: z.ZodArray; }, z.core.$strip>>; answer: z.ZodUnion]>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ exerciseType: z.ZodLiteral<"open-ended">; answer: z.ZodOptional]>>; items: z.ZodOptional; }, z.core.$strip>>>; options: z.ZodOptional>; type: z.ZodLiteral<"exercise">; id: z.ZodString; title: z.ZodOptional; question: z.ZodString; explanation: z.ZodOptional; difficulty: z.ZodOptional>; skill: z.ZodOptional; tests: z.ZodOptional>; objectiveId: z.ZodOptional; children: z.ZodArray; format: z.ZodEnum<{ markdown: "markdown"; text: "text"; html: "html"; glost: "glost"; "glost-dialogue": "glost-dialogue"; }>; value: z.ZodString; ref: z.ZodOptional; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>], "exerciseType">; /** * Grammar rule node schema (recursive) */ export declare const GrammarRuleNodeSchema: z.ZodType; interface GrammarRuleNodeSchemaType { type: 'grammarRule'; id: string; title: string; explanation: string; exceptions?: string; relatedRules?: string[]; commonMistakes?: string[]; children: (z.infer | GrammarRuleNodeSchemaType | z.infer)[]; data?: Record; position?: z.infer; } /** * Lesson content child schema (union of all possible lesson children) */ export declare const LessonContentChildSchema: z.ZodTypeAny; /** * Lesson AST node schema */ export declare const LessonAstNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"lesson">; id: z.ZodString; title: z.ZodString; description: z.ZodOptional; order: z.ZodNumber; parentId: z.ZodOptional; difficulty: z.ZodOptional>; cefrLevel: z.ZodOptional, z.ZodArray>]>>; categories: z.ZodOptional>; metadata: z.ZodOptional>; sectionNumber: z.ZodOptional>; estimatedTime: z.ZodOptional>; prerequisites: z.ZodOptional>>; objectives: z.ZodOptional>>; learningObjectives: z.ZodOptional; isPrimary: z.ZodOptional; skill: z.ZodOptional; references: z.ZodOptional>; }, z.core.$strip>>>>; takeaways: z.ZodOptional>>; culturalNotes: z.ZodOptional>; notes: z.ZodOptional>; sourceFile: z.ZodOptional>; completionCriteria: z.ZodOptional>; masteryPercentage: z.ZodOptional>; minMasteredCount: z.ZodOptional>; requireAllExercises: z.ZodOptional>; requireAllContent: z.ZodOptional>; }, z.core.$strip>>>; progressionRule: z.ZodOptional>>; defaultMasteryScore: z.ZodOptional>; }, z.core.$strip>>; children: z.ZodArray>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Section node schema (recursive, can contain sections or lessons) */ export declare const SectionNodeSchema: z.ZodType; interface SectionNodeSchemaType { type: 'section'; id: string; title: string; description?: string; order: number; parentId?: string; difficulty?: z.infer; cefrLevel?: z.infer | z.infer[]; categories?: string[]; children: (SectionNodeSchemaType | z.infer)[]; data?: Record; position?: z.infer; } /** * Chapter node schema */ export declare const ChapterNodeSchema: z.ZodObject<{ type: z.ZodLiteral<"chapter">; id: z.ZodString; title: z.ZodString; description: z.ZodOptional; order: z.ZodNumber; difficulty: z.ZodOptional>; cefrLevel: z.ZodOptional, z.ZodArray>]>>; categories: z.ZodOptional>; children: z.ZodArray>, z.ZodObject<{ type: z.ZodLiteral<"lesson">; id: z.ZodString; title: z.ZodString; description: z.ZodOptional; order: z.ZodNumber; parentId: z.ZodOptional; difficulty: z.ZodOptional>; cefrLevel: z.ZodOptional, z.ZodArray>]>>; categories: z.ZodOptional>; metadata: z.ZodOptional>; sectionNumber: z.ZodOptional>; estimatedTime: z.ZodOptional>; prerequisites: z.ZodOptional>>; objectives: z.ZodOptional>>; learningObjectives: z.ZodOptional; isPrimary: z.ZodOptional; skill: z.ZodOptional; references: z.ZodOptional>; }, z.core.$strip>>>>; takeaways: z.ZodOptional>>; culturalNotes: z.ZodOptional>; notes: z.ZodOptional>; sourceFile: z.ZodOptional>; completionCriteria: z.ZodOptional>; masteryPercentage: z.ZodOptional>; minMasteredCount: z.ZodOptional>; requireAllExercises: z.ZodOptional>; requireAllContent: z.ZodOptional>; }, z.core.$strip>>>; progressionRule: z.ZodOptional>>; defaultMasteryScore: z.ZodOptional>; }, z.core.$strip>>; children: z.ZodArray>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>]>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * Syllabus meta schema */ export declare const SyllabusMetaSchema: z.ZodObject<{ id: z.ZodString; title: z.ZodString; language: z.ZodString; source: z.ZodObject<{ title: z.ZodString; url: z.ZodOptional; pdfUrl: z.ZodOptional; authors: z.ZodOptional>; year: z.ZodOptional; publisher: z.ZodOptional; }, z.core.$strip>; version: z.ZodString; extractedAt: z.ZodString; }, z.core.$catchall>; /** * Syllabus root node schema */ export declare const SyllabusRootSchema: z.ZodObject<{ type: z.ZodLiteral<"syllabusRoot">; meta: z.ZodObject<{ id: z.ZodString; title: z.ZodString; language: z.ZodString; source: z.ZodObject<{ title: z.ZodString; url: z.ZodOptional; pdfUrl: z.ZodOptional; authors: z.ZodOptional>; year: z.ZodOptional; publisher: z.ZodOptional; }, z.core.$strip>; version: z.ZodString; extractedAt: z.ZodString; }, z.core.$catchall>; children: z.ZodArray; id: z.ZodString; title: z.ZodString; description: z.ZodOptional; order: z.ZodNumber; difficulty: z.ZodOptional>; cefrLevel: z.ZodOptional, z.ZodArray>]>>; categories: z.ZodOptional>; children: z.ZodArray>, z.ZodObject<{ type: z.ZodLiteral<"lesson">; id: z.ZodString; title: z.ZodString; description: z.ZodOptional; order: z.ZodNumber; parentId: z.ZodOptional; difficulty: z.ZodOptional>; cefrLevel: z.ZodOptional, z.ZodArray>]>>; categories: z.ZodOptional>; metadata: z.ZodOptional>; sectionNumber: z.ZodOptional>; estimatedTime: z.ZodOptional>; prerequisites: z.ZodOptional>>; objectives: z.ZodOptional>>; learningObjectives: z.ZodOptional; isPrimary: z.ZodOptional; skill: z.ZodOptional; references: z.ZodOptional>; }, z.core.$strip>>>>; takeaways: z.ZodOptional>>; culturalNotes: z.ZodOptional>; notes: z.ZodOptional>; sourceFile: z.ZodOptional>; completionCriteria: z.ZodOptional>; masteryPercentage: z.ZodOptional>; minMasteredCount: z.ZodOptional>; requireAllExercises: z.ZodOptional>; requireAllContent: z.ZodOptional>; }, z.core.$strip>>>; progressionRule: z.ZodOptional>>; defaultMasteryScore: z.ZodOptional>; }, z.core.$strip>>; children: z.ZodArray>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>]>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"metadata">; key: z.ZodString; value: z.ZodUnknown; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>]>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>; /** * All possible syllabus node types schema */ export declare const SyllabusNodeSchema: z.ZodTypeAny; /** * Parent nodes schema */ export declare const SyllabusParentSchema: z.ZodTypeAny; /** * Leaf nodes schema */ export declare const SyllabusLeafSchema: z.ZodTypeAny; export type ZodSyllabusRoot = z.infer; export type ZodChapterNode = z.infer; export type ZodSectionNode = z.infer; export type ZodLessonAstNode = z.infer; export type ZodGrammarRuleNode = z.infer; export type ZodVocabularySetNode = z.infer; export type ZodVocabularyItemNode = z.infer; export type ZodCharacterSetNode = z.infer; export type ZodCharacterItemNode = z.infer; export type ZodExampleSetNode = z.infer; export type ZodExampleNode = z.infer; export type ZodExerciseNode = z.infer; export type ZodMultipleChoiceExercise = z.infer; export type ZodMatchingExercise = z.infer; export type ZodFillInBlankExercise = z.infer; export type ZodTrueFalseExercise = z.infer; export type ZodTranslationExercise = z.infer; export type ZodTransformationExercise = z.infer; export type ZodPatternPracticeExercise = z.infer; export type ZodDialogueExercise = z.infer; export type ZodOpenEndedExercise = z.infer; export type ZodContentNode = z.infer; export type ZodMetadataNode = z.infer; export type ZodDialogueNode = z.infer; export type ZodDialogueTurnNode = z.infer; export type ZodDialogueParticipant = z.infer; export type ZodGenderVariants = z.infer; export type ZodPhonologicalRuleNode = z.infer; export type ZodRuleConditionNode = z.infer; export type ZodSyllablePatternNode = z.infer; export type ZodPatternExampleNode = z.infer; export type ZodWritingPatternNode = z.infer; export type ZodSyllabusNode = z.infer; export type ZodSyllabusParent = z.infer; export type ZodSyllabusLeaf = z.infer; export type ZodWordListItemNode = z.infer; export type ZodWordListSetNode = z.infer; /** * CEFR range schema */ export declare const CEFRRangeSchema: z.ZodObject<{ min: z.ZodEnum<{ A1: "A1"; A2: "A2"; B1: "B1"; B2: "B2"; C1: "C1"; C2: "C2"; }>; max: z.ZodEnum<{ A1: "A1"; A2: "A2"; B1: "B1"; B2: "B2"; C1: "C1"; C2: "C2"; }>; }, z.core.$strip>; /** * Course manifest schema */ export declare const CourseManifestSchema: z.ZodObject<{ id: z.ZodString; title: z.ZodString; version: z.ZodString; language: z.ZodString; sourceLanguage: z.ZodOptional; bundledAt: z.ZodString; lessonOrder: z.ZodArray; source: z.ZodOptional; pdfUrl: z.ZodOptional; authors: z.ZodOptional>; year: z.ZodOptional; publisher: z.ZodOptional; }, z.core.$strip>>; description: z.ZodOptional; cefrRange: z.ZodOptional; max: z.ZodEnum<{ A1: "A1"; A2: "A2"; B1: "B1"; B2: "B2"; C1: "C1"; C2: "C2"; }>; }, z.core.$strip>>; prerequisites: z.ZodOptional>; objectives: z.ZodOptional>; }, z.core.$strip>; /** * Course statistics schema */ export declare const CourseStatisticsSchema: z.ZodObject<{ totalLessons: z.ZodNumber; totalVocabularyItems: z.ZodNumber; uniqueVocabularyItems: z.ZodNumber; totalGrammarRules: z.ZodNumber; totalExercises: z.ZodNumber; estimatedTotalTime: z.ZodNumber; cefrLevelCoverage: z.ZodOptional, z.ZodNumber>>; difficultyDistribution: z.ZodOptional, z.ZodNumber>>; exerciseTypeDistribution: z.ZodOptional, z.ZodNumber>>; }, z.core.$strip>; /** * Course bundle schema (for validation) * Note: Index types use Map which can't be validated with Zod, * so we validate the serializable form (with arrays instead of Maps) */ export declare const CourseBundleSchema: z.ZodObject<{ type: z.ZodLiteral<"courseBundle">; manifest: z.ZodObject<{ id: z.ZodString; title: z.ZodString; version: z.ZodString; language: z.ZodString; sourceLanguage: z.ZodOptional; bundledAt: z.ZodString; lessonOrder: z.ZodArray; source: z.ZodOptional; pdfUrl: z.ZodOptional; authors: z.ZodOptional>; year: z.ZodOptional; publisher: z.ZodOptional; }, z.core.$strip>>; description: z.ZodOptional; cefrRange: z.ZodOptional; max: z.ZodEnum<{ A1: "A1"; A2: "A2"; B1: "B1"; B2: "B2"; C1: "C1"; C2: "C2"; }>; }, z.core.$strip>>; prerequisites: z.ZodOptional>; objectives: z.ZodOptional>; }, z.core.$strip>; lessons: z.ZodArray; id: z.ZodString; title: z.ZodString; description: z.ZodOptional; order: z.ZodNumber; parentId: z.ZodOptional; difficulty: z.ZodOptional>; cefrLevel: z.ZodOptional, z.ZodArray>]>>; categories: z.ZodOptional>; metadata: z.ZodOptional>; sectionNumber: z.ZodOptional>; estimatedTime: z.ZodOptional>; prerequisites: z.ZodOptional>>; objectives: z.ZodOptional>>; learningObjectives: z.ZodOptional; isPrimary: z.ZodOptional; skill: z.ZodOptional; references: z.ZodOptional>; }, z.core.$strip>>>>; takeaways: z.ZodOptional>>; culturalNotes: z.ZodOptional>; notes: z.ZodOptional>; sourceFile: z.ZodOptional>; completionCriteria: z.ZodOptional>; masteryPercentage: z.ZodOptional>; minMasteredCount: z.ZodOptional>; requireAllExercises: z.ZodOptional>; requireAllContent: z.ZodOptional>; }, z.core.$strip>>>; progressionRule: z.ZodOptional>>; defaultMasteryScore: z.ZodOptional>; }, z.core.$strip>>; children: z.ZodArray>>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; position: z.ZodOptional; }, z.core.$strip>; end: z.ZodObject<{ line: z.ZodNumber; column: z.ZodNumber; offset: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>>; statistics: z.ZodObject<{ totalLessons: z.ZodNumber; totalVocabularyItems: z.ZodNumber; uniqueVocabularyItems: z.ZodNumber; totalGrammarRules: z.ZodNumber; totalExercises: z.ZodNumber; estimatedTotalTime: z.ZodNumber; cefrLevelCoverage: z.ZodOptional, z.ZodNumber>>; difficultyDistribution: z.ZodOptional, z.ZodNumber>>; exerciseTypeDistribution: z.ZodOptional, z.ZodNumber>>; }, z.core.$strip>; extensions: z.ZodOptional>>>; data: z.ZodOptional>; }, z.core.$strip>; export type ZodCourseManifest = z.infer; export type ZodCourseStatistics = z.infer; export type ZodCourseBundle = z.infer; export {}; //# sourceMappingURL=nodes.d.ts.map