| // One segment of a Japanese string. `reading` is the hiragana for any kanji | |
| // portion; omit it (or leave empty) for kana-only segments. Concatenating each | |
| // `text` reproduces the original string exactly. | |
| export type FuriSegment = { text: string; reading?: string }; | |
| export type DialogueOption = { | |
| text: string; | |
| textSegments?: FuriSegment[]; | |
| isCorrect: boolean; | |
| feedback: string; | |
| }; | |
| export type DialogueTurn = { | |
| type: "narration" | "character" | "user_choice"; | |
| text: string; | |
| textSegments?: FuriSegment[]; | |
| translation?: string; | |
| speakerName?: string; | |
| options?: DialogueOption[]; | |
| }; | |
| export type Dialogue = { | |
| id: string; | |
| title: string; | |
| scenario: string; | |
| level: string; | |
| targetLang: string; | |
| nativeLang: string; | |
| turns: DialogueTurn[]; | |
| }; | |
| export type Story = { | |
| id: string; | |
| title: string; | |
| content: string; | |
| vocab: Array<{ word: string; gloss: string }>; | |
| targetLang: string; | |
| nativeLang: string; | |
| level: string; | |
| }; | |