@polyglot-bundles/fr-syllabi 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/index.d.ts +80 -0
  2. package/dist/index.js +92 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/lesson-01-CKlUAQ-l.js +73 -0
  5. package/dist/lesson-01-CKlUAQ-l.js.map +1 -0
  6. package/dist/lesson-02-Sg_0WpK1.js +76 -0
  7. package/dist/lesson-02-Sg_0WpK1.js.map +1 -0
  8. package/dist/lesson-03-BFuDIIZH.js +75 -0
  9. package/dist/lesson-03-BFuDIIZH.js.map +1 -0
  10. package/dist/lesson-04-DOobkbMZ.js +74 -0
  11. package/dist/lesson-04-DOobkbMZ.js.map +1 -0
  12. package/dist/lesson-05-bDgswwl9.js +74 -0
  13. package/dist/lesson-05-bDgswwl9.js.map +1 -0
  14. package/dist/lesson-06-CkchAanW.js +77 -0
  15. package/dist/lesson-06-CkchAanW.js.map +1 -0
  16. package/dist/lesson-07-BJh9y1Qk.js +78 -0
  17. package/dist/lesson-07-BJh9y1Qk.js.map +1 -0
  18. package/dist/lesson-08-BepauIPO.js +77 -0
  19. package/dist/lesson-08-BepauIPO.js.map +1 -0
  20. package/dist/lesson-09-CeGc0fz7.js +76 -0
  21. package/dist/lesson-09-CeGc0fz7.js.map +1 -0
  22. package/dist/lesson-10-A9U08tSq.js +77 -0
  23. package/dist/lesson-10-A9U08tSq.js.map +1 -0
  24. package/dist/syllabi/basics/index.d.ts +7 -0
  25. package/dist/syllabi/basics/index.js +70 -0
  26. package/dist/syllabi/basics/index.js.map +1 -0
  27. package/package.json +57 -0
  28. package/src/syllabi/basics/lessons/lesson-01.mdx +68 -0
  29. package/src/syllabi/basics/lessons/lesson-02.mdx +71 -0
  30. package/src/syllabi/basics/lessons/lesson-03.mdx +70 -0
  31. package/src/syllabi/basics/lessons/lesson-04.mdx +69 -0
  32. package/src/syllabi/basics/lessons/lesson-05.mdx +69 -0
  33. package/src/syllabi/basics/lessons/lesson-06.mdx +72 -0
  34. package/src/syllabi/basics/lessons/lesson-07.mdx +73 -0
  35. package/src/syllabi/basics/lessons/lesson-08.mdx +72 -0
  36. package/src/syllabi/basics/lessons/lesson-09.mdx +71 -0
  37. package/src/syllabi/basics/lessons/lesson-10.mdx +72 -0
  38. package/src/syllabi/basics/meta.mdx +81 -0
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Shared types and utilities for SYLLST content
3
+ * (Inlined from @syllst/content-shared to make package self-contained)
4
+ */
5
+ /**
6
+ * CEFR language proficiency levels
7
+ */
8
+ declare type CEFRLevel = 'A1' | 'A2' | 'B1' | 'B2' | 'C1' | 'C2';
9
+
10
+ export declare const config: SyllabusConfig;
11
+
12
+ /**
13
+ * Content loader interface
14
+ */
15
+ declare interface ContentLoader {
16
+ /** Syllabus configuration */
17
+ config: SyllabusConfig;
18
+ /** Load a single lesson by number */
19
+ loadLesson(lessonNumber: number): Promise<LoadedLesson>;
20
+ /** Load all lessons */
21
+ loadAllLessons(): Promise<LoadedLesson[]>;
22
+ /** Get list of available lesson numbers */
23
+ getAvailableLessons(): number[];
24
+ }
25
+
26
+ /**
27
+ * Difficulty levels
28
+ */
29
+ declare type Difficulty = 'beginner' | 'intermediate' | 'advanced';
30
+
31
+ export declare const getAvailableLessons: () => number[];
32
+
33
+ export declare const loadAllLessons: () => Promise<LoadedLesson[]>;
34
+
35
+ /**
36
+ * Result of loading a lesson
37
+ */
38
+ declare interface LoadedLesson {
39
+ /** Lesson number (1-indexed) */
40
+ number: number;
41
+ /** Raw MDX content */
42
+ rawContent: string;
43
+ }
44
+
45
+ export declare const loader: ContentLoader;
46
+
47
+ export declare const loadLesson: (lessonNumber: number) => Promise<LoadedLesson>;
48
+
49
+ /**
50
+ * Configuration for a syllabus content package
51
+ */
52
+ declare interface SyllabusConfig {
53
+ /** Unique syllabus ID (e.g., "french-basics") */
54
+ id: string;
55
+ /** Display title */
56
+ title: string;
57
+ /** Description */
58
+ description: string;
59
+ /** Language code (ISO 639-1) */
60
+ language: string;
61
+ /** Locale code (e.g., "fr-FR") */
62
+ locale: string;
63
+ /** Number of lessons */
64
+ lessonCount: number;
65
+ /** Difficulty level */
66
+ difficulty: Difficulty;
67
+ /** CEFR level */
68
+ cefrLevel: CEFRLevel;
69
+ /** Icon for display */
70
+ icon?: SyllabusIcon;
71
+ /** Package version */
72
+ version: string;
73
+ }
74
+
75
+ /**
76
+ * Icon types for syllabi
77
+ */
78
+ declare type SyllabusIcon = 'alphabet' | 'dialogue' | 'vocabulary' | 'grammar' | 'reading' | 'numbers' | 'food' | 'travel';
79
+
80
+ export { }
package/dist/index.js ADDED
@@ -0,0 +1,92 @@
1
+ import { config as a, loadAllLessons as i } from "./syllabi/basics/index.js";
2
+ import { getAvailableLessons as w, loadLesson as v, loader as L } from "./syllabi/basics/index.js";
3
+ import { buildLessonFromMDX as l } from "@syllst/processor";
4
+ async function d(e) {
5
+ const o = (await i()).find((s) => s.number === e);
6
+ if (!o)
7
+ throw new Error(`Lesson ${e} not found`);
8
+ return l(o.rawContent, {
9
+ validate: !0,
10
+ strictValidation: !1
11
+ });
12
+ }
13
+ async function r() {
14
+ const e = [];
15
+ for (let t = 1; t <= 10; t++) {
16
+ const o = await d(t);
17
+ e.push(o);
18
+ }
19
+ return e;
20
+ }
21
+ async function p() {
22
+ const e = await r();
23
+ return {
24
+ type: "syllabusRoot",
25
+ meta: {
26
+ id: a.id,
27
+ title: a.title,
28
+ language: a.language,
29
+ version: "1.0.0",
30
+ source: {
31
+ title: "Lalia French Basics Syllabus"
32
+ },
33
+ extractedAt: (/* @__PURE__ */ new Date()).toISOString()
34
+ },
35
+ children: e.map((t, o) => ({
36
+ type: "chapter",
37
+ id: `french-basics-chapter-${o + 1}`,
38
+ title: t.title,
39
+ description: t.description,
40
+ order: o + 1,
41
+ difficulty: t.difficulty,
42
+ cefrLevel: t.cefrLevel,
43
+ categories: t.categories,
44
+ children: [t]
45
+ }))
46
+ };
47
+ }
48
+ function c(e) {
49
+ const t = [];
50
+ for (const o of e.children)
51
+ o.type === "vocabularySet" && t.push(...o.children);
52
+ return t;
53
+ }
54
+ async function b() {
55
+ return (await r()).flatMap(c);
56
+ }
57
+ async function f() {
58
+ const e = await r(), t = [];
59
+ for (const o of e) {
60
+ const s = c(o);
61
+ for (const n of s)
62
+ t.push({
63
+ id: n.id,
64
+ word: n.word,
65
+ translation: n.translation || "",
66
+ partOfSpeech: n.partOfSpeech || "unknown",
67
+ gender: void 0,
68
+ lessonNumber: o.order
69
+ });
70
+ }
71
+ return t;
72
+ }
73
+ async function y() {
74
+ return (await f()).map(
75
+ (t) => `fr:vocab:basics:${t.id}`
76
+ );
77
+ }
78
+ export {
79
+ a as config,
80
+ c as extractVocabItems,
81
+ b as getAllFrenchBasicsVocab,
82
+ w as getAvailableLessons,
83
+ p as getFrenchBasicsSyllabus,
84
+ f as getFrenchVocabForProgress,
85
+ y as getFrenchVocabKubitIds,
86
+ r as loadAllFrenchBasicsLessons,
87
+ i as loadAllLessons,
88
+ d as loadFrenchBasicsLesson,
89
+ v as loadLesson,
90
+ L as loader
91
+ };
92
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/adapters/basics-syllabus-adapter.ts"],"sourcesContent":["/**\n * French Basics Syllabus Adapter\n *\n * Provides functions to load and process the French Basics vocabulary syllabus\n * from MDX files using @syllst/processor.\n */\n\nimport type {\n LessonAstNode,\n SyllabusRoot,\n VocabularyItemNode,\n VocabularySetNode,\n} from \"@syllst/processor\";\nimport { buildLessonFromMDX } from \"@syllst/processor\";\nimport { config, loadAllLessons } from \"../syllabi/basics\";\n\ntype LessonNumber = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;\n\n/**\n * Load a specific French Basics lesson from MDX\n */\nexport async function loadFrenchBasicsLesson(\n lessonNumber: LessonNumber\n): Promise<LessonAstNode> {\n const loaded = await loadAllLessons();\n const lessonData = loaded.find((l) => l.number === lessonNumber);\n\n if (!lessonData) {\n throw new Error(`Lesson ${lessonNumber} not found`);\n }\n\n return buildLessonFromMDX(lessonData.rawContent, {\n validate: true,\n strictValidation: false,\n }) as Promise<LessonAstNode>;\n}\n\n/**\n * Load all French Basics lessons from MDX\n */\nexport async function loadAllFrenchBasicsLessons(): Promise<LessonAstNode[]> {\n const lessons: LessonAstNode[] = [];\n\n for (let i = 1; i <= 10; i++) {\n const lesson = await loadFrenchBasicsLesson(i as LessonNumber);\n lessons.push(lesson);\n }\n\n return lessons;\n}\n\n/**\n * Get the complete French Basics syllabus as a SyllabusRoot\n */\nexport async function getFrenchBasicsSyllabus(): Promise<SyllabusRoot> {\n const lessons = await loadAllFrenchBasicsLessons();\n\n return {\n type: \"syllabusRoot\",\n meta: {\n id: config.id,\n title: config.title,\n language: config.language,\n version: \"1.0.0\",\n source: {\n title: \"Lalia French Basics Syllabus\",\n },\n extractedAt: new Date().toISOString(),\n },\n children: lessons.map((lesson, index) => ({\n type: \"chapter\" as const,\n id: `french-basics-chapter-${index + 1}`,\n title: lesson.title,\n description: lesson.description,\n order: index + 1,\n difficulty: lesson.difficulty,\n cefrLevel: lesson.cefrLevel,\n categories: lesson.categories,\n children: [lesson],\n })),\n };\n}\n\n/**\n * Extract all vocabulary items from a lesson\n */\nexport function extractVocabItems(lesson: LessonAstNode): VocabularyItemNode[] {\n const items: VocabularyItemNode[] = [];\n\n for (const child of lesson.children) {\n if (child.type === \"vocabularySet\") {\n items.push(...(child as VocabularySetNode).children);\n }\n }\n\n return items;\n}\n\n/**\n * Get all vocabulary items from all French Basics lessons\n */\nexport async function getAllFrenchBasicsVocab(): Promise<VocabularyItemNode[]> {\n const lessons = await loadAllFrenchBasicsLessons();\n return lessons.flatMap(extractVocabItems);\n}\n\n/**\n * Vocabulary info for progress tracking\n */\nexport interface FrenchVocabInfo {\n id: string;\n word: string;\n translation: string;\n partOfSpeech: string;\n gender?: string;\n lessonNumber: number;\n}\n\n/**\n * Get all French vocabulary with lesson numbers for progress tracking\n */\nexport async function getFrenchVocabForProgress(): Promise<FrenchVocabInfo[]> {\n const lessons = await loadAllFrenchBasicsLessons();\n const vocabulary: FrenchVocabInfo[] = [];\n\n for (const lesson of lessons) {\n const items = extractVocabItems(lesson);\n for (const item of items) {\n vocabulary.push({\n id: item.id,\n word: item.word,\n translation: item.translation || \"\",\n partOfSpeech: item.partOfSpeech || \"unknown\",\n gender: undefined,\n lessonNumber: lesson.order,\n });\n }\n }\n\n return vocabulary;\n}\n\n/**\n * Get kubit IDs for all French vocabulary\n * Format: fr:vocab:basics:{word_id}\n */\nexport async function getFrenchVocabKubitIds(): Promise<string[]> {\n const vocab = await getFrenchVocabForProgress();\n return vocab.map(\n (v) => `fr:vocab:basics:${v.id}`\n );\n}\n"],"names":["loadFrenchBasicsLesson","lessonNumber","lessonData","loadAllLessons","l","buildLessonFromMDX","loadAllFrenchBasicsLessons","lessons","i","lesson","getFrenchBasicsSyllabus","config","index","extractVocabItems","items","child","getAllFrenchBasicsVocab","getFrenchVocabForProgress","vocabulary","item","getFrenchVocabKubitIds","v"],"mappings":";;;AAqBA,eAAsBA,EACpBC,GACwB;AAExB,QAAMC,KADS,MAAMC,EAAA,GACK,KAAK,CAACC,MAAMA,EAAE,WAAWH,CAAY;AAE/D,MAAI,CAACC;AACH,UAAM,IAAI,MAAM,UAAUD,CAAY,YAAY;AAGpD,SAAOI,EAAmBH,EAAW,YAAY;AAAA,IAC/C,UAAU;AAAA,IACV,kBAAkB;AAAA,EAAA,CACnB;AACH;AAKA,eAAsBI,IAAuD;AAC3E,QAAMC,IAA2B,CAAA;AAEjC,WAASC,IAAI,GAAGA,KAAK,IAAIA,KAAK;AAC5B,UAAMC,IAAS,MAAMT,EAAuBQ,CAAiB;AAC7D,IAAAD,EAAQ,KAAKE,CAAM;AAAA,EACrB;AAEA,SAAOF;AACT;AAKA,eAAsBG,IAAiD;AACrE,QAAMH,IAAU,MAAMD,EAAA;AAEtB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,IAAIK,EAAO;AAAA,MACX,OAAOA,EAAO;AAAA,MACd,UAAUA,EAAO;AAAA,MACjB,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,cAAa,oBAAI,KAAA,GAAO,YAAA;AAAA,IAAY;AAAA,IAEtC,UAAUJ,EAAQ,IAAI,CAACE,GAAQG,OAAW;AAAA,MACxC,MAAM;AAAA,MACN,IAAI,yBAAyBA,IAAQ,CAAC;AAAA,MACtC,OAAOH,EAAO;AAAA,MACd,aAAaA,EAAO;AAAA,MACpB,OAAOG,IAAQ;AAAA,MACf,YAAYH,EAAO;AAAA,MACnB,WAAWA,EAAO;AAAA,MAClB,YAAYA,EAAO;AAAA,MACnB,UAAU,CAACA,CAAM;AAAA,IAAA,EACjB;AAAA,EAAA;AAEN;AAKO,SAASI,EAAkBJ,GAA6C;AAC7E,QAAMK,IAA8B,CAAA;AAEpC,aAAWC,KAASN,EAAO;AACzB,IAAIM,EAAM,SAAS,mBACjBD,EAAM,KAAK,GAAIC,EAA4B,QAAQ;AAIvD,SAAOD;AACT;AAKA,eAAsBE,IAAyD;AAE7E,UADgB,MAAMV,EAAA,GACP,QAAQO,CAAiB;AAC1C;AAiBA,eAAsBI,IAAwD;AAC5E,QAAMV,IAAU,MAAMD,EAAA,GAChBY,IAAgC,CAAA;AAEtC,aAAWT,KAAUF,GAAS;AAC5B,UAAMO,IAAQD,EAAkBJ,CAAM;AACtC,eAAWU,KAAQL;AACjB,MAAAI,EAAW,KAAK;AAAA,QACd,IAAIC,EAAK;AAAA,QACT,MAAMA,EAAK;AAAA,QACX,aAAaA,EAAK,eAAe;AAAA,QACjC,cAAcA,EAAK,gBAAgB;AAAA,QACnC,QAAQ;AAAA,QACR,cAAcV,EAAO;AAAA,MAAA,CACtB;AAAA,EAEL;AAEA,SAAOS;AACT;AAMA,eAAsBE,IAA4C;AAEhE,UADc,MAAMH,EAAA,GACP;AAAA,IACX,CAACI,MAAM,mBAAmBA,EAAE,EAAE;AAAA,EAAA;AAElC;"}
@@ -0,0 +1,73 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: french-basics-lesson-01
4
+ title: "Leçon 1 — Salutations et Bases"
5
+ description: "Greetings & Basic Expressions: bonjour, merci, oui, non, s'il vous plaît..."
6
+ order: 1
7
+ parentId: french-basics-vocabulary
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - greetings
12
+ - expressions
13
+ metadata:
14
+ estimatedTime: 15
15
+ prerequisites: []
16
+ objectives:
17
+ - "Learn common French greetings"
18
+ - "Master basic polite expressions"
19
+ - "Understand formal vs informal address"
20
+ ---
21
+
22
+ # Leçon 1 (Lesson 1) — Salutations et Bases
23
+
24
+ ## Introduction
25
+
26
+ This lesson covers the essential greetings and basic expressions you'll use every day in French. These are the foundation of polite conversation.
27
+
28
+ ## Vocabulary
29
+
30
+ :::vocabulary-set{id="french-greetings" title="Greetings & Basic Expressions"}
31
+
32
+ ::vocab{id="fr-bonjour" word="bonjour" translation="hello, good day" partOfSpeech="interjection"}
33
+ ::
34
+
35
+ ::vocab{id="fr-bonsoir" word="bonsoir" translation="good evening" partOfSpeech="interjection"}
36
+ ::
37
+
38
+ ::vocab{id="fr-salut" word="salut" translation="hi, bye (informal)" partOfSpeech="interjection"}
39
+ ::
40
+
41
+ ::vocab{id="fr-aurevoir" word="au revoir" translation="goodbye" partOfSpeech="interjection"}
42
+ ::
43
+
44
+ ::vocab{id="fr-merci" word="merci" translation="thank you" partOfSpeech="interjection"}
45
+ ::
46
+
47
+ ::vocab{id="fr-svp" word="s'il vous plaît" translation="please (formal)" partOfSpeech="phrase"}
48
+ ::
49
+
50
+ ::vocab{id="fr-stp" word="s'il te plaît" translation="please (informal)" partOfSpeech="phrase"}
51
+ ::
52
+
53
+ ::vocab{id="fr-oui" word="oui" translation="yes" partOfSpeech="adverb"}
54
+ ::
55
+
56
+ ::vocab{id="fr-non" word="non" translation="no" partOfSpeech="adverb"}
57
+ ::
58
+
59
+ ::vocab{id="fr-excusez" word="excusez-moi" translation="excuse me (formal)" partOfSpeech="phrase"}
60
+ ::
61
+
62
+ :::
63
+
64
+ ## Key Points
65
+
66
+ 1. **Formal vs Informal**: "Vous" (formal) vs "tu" (informal)
67
+ 2. **Time of day matters**: bonjour (day) vs bonsoir (evening)
68
+ 3. **Politeness is essential**: Always use merci and s'il vous plaît
69
+ `;
70
+ export {
71
+ n as default
72
+ };
73
+ //# sourceMappingURL=lesson-01-CKlUAQ-l.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-01-CKlUAQ-l.js","sources":["../src/syllabi/basics/lessons/lesson-01.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: french-basics-lesson-01\\ntitle: \\\"Leçon 1 — Salutations et Bases\\\"\\ndescription: \\\"Greetings & Basic Expressions: bonjour, merci, oui, non, s'il vous plaît...\\\"\\norder: 1\\nparentId: french-basics-vocabulary\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - greetings\\n - expressions\\nmetadata:\\n estimatedTime: 15\\n prerequisites: []\\n objectives:\\n - \\\"Learn common French greetings\\\"\\n - \\\"Master basic polite expressions\\\"\\n - \\\"Understand formal vs informal address\\\"\\n---\\n\\n# Leçon 1 (Lesson 1) — Salutations et Bases\\n\\n## Introduction\\n\\nThis lesson covers the essential greetings and basic expressions you'll use every day in French. These are the foundation of polite conversation.\\n\\n## Vocabulary\\n\\n:::vocabulary-set{id=\\\"french-greetings\\\" title=\\\"Greetings & Basic Expressions\\\"}\\n\\n::vocab{id=\\\"fr-bonjour\\\" word=\\\"bonjour\\\" translation=\\\"hello, good day\\\" partOfSpeech=\\\"interjection\\\"}\\n::\\n\\n::vocab{id=\\\"fr-bonsoir\\\" word=\\\"bonsoir\\\" translation=\\\"good evening\\\" partOfSpeech=\\\"interjection\\\"}\\n::\\n\\n::vocab{id=\\\"fr-salut\\\" word=\\\"salut\\\" translation=\\\"hi, bye (informal)\\\" partOfSpeech=\\\"interjection\\\"}\\n::\\n\\n::vocab{id=\\\"fr-aurevoir\\\" word=\\\"au revoir\\\" translation=\\\"goodbye\\\" partOfSpeech=\\\"interjection\\\"}\\n::\\n\\n::vocab{id=\\\"fr-merci\\\" word=\\\"merci\\\" translation=\\\"thank you\\\" partOfSpeech=\\\"interjection\\\"}\\n::\\n\\n::vocab{id=\\\"fr-svp\\\" word=\\\"s'il vous plaît\\\" translation=\\\"please (formal)\\\" partOfSpeech=\\\"phrase\\\"}\\n::\\n\\n::vocab{id=\\\"fr-stp\\\" word=\\\"s'il te plaît\\\" translation=\\\"please (informal)\\\" partOfSpeech=\\\"phrase\\\"}\\n::\\n\\n::vocab{id=\\\"fr-oui\\\" word=\\\"oui\\\" translation=\\\"yes\\\" partOfSpeech=\\\"adverb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-non\\\" word=\\\"non\\\" translation=\\\"no\\\" partOfSpeech=\\\"adverb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-excusez\\\" word=\\\"excusez-moi\\\" translation=\\\"excuse me (formal)\\\" partOfSpeech=\\\"phrase\\\"}\\n::\\n\\n:::\\n\\n## Key Points\\n\\n1. **Formal vs Informal**: \\\"Vous\\\" (formal) vs \\\"tu\\\" (informal)\\n2. **Time of day matters**: bonjour (day) vs bonsoir (evening)\\n3. **Politeness is essential**: Always use merci and s'il vous plaît\\n\""],"names":["lesson01"],"mappings":"AAAA,MAAAA,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -0,0 +1,76 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: french-basics-lesson-02
4
+ title: "Leçon 2 — Les Nombres"
5
+ description: "Numbers 1-12: un, deux, trois, quatre, cinq..."
6
+ order: 2
7
+ parentId: french-basics-vocabulary
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - numbers
12
+ metadata:
13
+ estimatedTime: 15
14
+ prerequisites: [french-basics-lesson-01]
15
+ objectives:
16
+ - "Count from 1 to 12 in French"
17
+ - "Understand French number pronunciation"
18
+ ---
19
+
20
+ # Leçon 2 (Lesson 2) — Les Nombres
21
+
22
+ ## Introduction
23
+
24
+ Numbers are essential for everyday life - shopping, telling time, and giving phone numbers.
25
+
26
+ ## Vocabulary
27
+
28
+ :::vocabulary-set{id="french-numbers" title="Numbers (Les Nombres)"}
29
+
30
+ ::vocab{id="fr-un" word="un" translation="one (1)" partOfSpeech="numeral" gender="masculine"}
31
+ ::
32
+
33
+ ::vocab{id="fr-deux" word="deux" translation="two (2)" partOfSpeech="numeral"}
34
+ ::
35
+
36
+ ::vocab{id="fr-trois" word="trois" translation="three (3)" partOfSpeech="numeral"}
37
+ ::
38
+
39
+ ::vocab{id="fr-quatre" word="quatre" translation="four (4)" partOfSpeech="numeral"}
40
+ ::
41
+
42
+ ::vocab{id="fr-cinq" word="cinq" translation="five (5)" partOfSpeech="numeral"}
43
+ ::
44
+
45
+ ::vocab{id="fr-six" word="six" translation="six (6)" partOfSpeech="numeral"}
46
+ ::
47
+
48
+ ::vocab{id="fr-sept" word="sept" translation="seven (7)" partOfSpeech="numeral"}
49
+ ::
50
+
51
+ ::vocab{id="fr-huit" word="huit" translation="eight (8)" partOfSpeech="numeral"}
52
+ ::
53
+
54
+ ::vocab{id="fr-neuf" word="neuf" translation="nine (9)" partOfSpeech="numeral"}
55
+ ::
56
+
57
+ ::vocab{id="fr-dix" word="dix" translation="ten (10)" partOfSpeech="numeral"}
58
+ ::
59
+
60
+ ::vocab{id="fr-onze" word="onze" translation="eleven (11)" partOfSpeech="numeral"}
61
+ ::
62
+
63
+ ::vocab{id="fr-douze" word="douze" translation="twelve (12)" partOfSpeech="numeral"}
64
+ ::
65
+
66
+ :::
67
+
68
+ ## Key Points
69
+
70
+ 1. **One is gendered**: "un" (masculine), "une" (feminine)
71
+ 2. **Pronunciation changes**: Final consonants often silent or change
72
+ `;
73
+ export {
74
+ n as default
75
+ };
76
+ //# sourceMappingURL=lesson-02-Sg_0WpK1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-02-Sg_0WpK1.js","sources":["../src/syllabi/basics/lessons/lesson-02.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: french-basics-lesson-02\\ntitle: \\\"Leçon 2 — Les Nombres\\\"\\ndescription: \\\"Numbers 1-12: un, deux, trois, quatre, cinq...\\\"\\norder: 2\\nparentId: french-basics-vocabulary\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - numbers\\nmetadata:\\n estimatedTime: 15\\n prerequisites: [french-basics-lesson-01]\\n objectives:\\n - \\\"Count from 1 to 12 in French\\\"\\n - \\\"Understand French number pronunciation\\\"\\n---\\n\\n# Leçon 2 (Lesson 2) — Les Nombres\\n\\n## Introduction\\n\\nNumbers are essential for everyday life - shopping, telling time, and giving phone numbers.\\n\\n## Vocabulary\\n\\n:::vocabulary-set{id=\\\"french-numbers\\\" title=\\\"Numbers (Les Nombres)\\\"}\\n\\n::vocab{id=\\\"fr-un\\\" word=\\\"un\\\" translation=\\\"one (1)\\\" partOfSpeech=\\\"numeral\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-deux\\\" word=\\\"deux\\\" translation=\\\"two (2)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n::vocab{id=\\\"fr-trois\\\" word=\\\"trois\\\" translation=\\\"three (3)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n::vocab{id=\\\"fr-quatre\\\" word=\\\"quatre\\\" translation=\\\"four (4)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n::vocab{id=\\\"fr-cinq\\\" word=\\\"cinq\\\" translation=\\\"five (5)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n::vocab{id=\\\"fr-six\\\" word=\\\"six\\\" translation=\\\"six (6)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n::vocab{id=\\\"fr-sept\\\" word=\\\"sept\\\" translation=\\\"seven (7)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n::vocab{id=\\\"fr-huit\\\" word=\\\"huit\\\" translation=\\\"eight (8)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n::vocab{id=\\\"fr-neuf\\\" word=\\\"neuf\\\" translation=\\\"nine (9)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n::vocab{id=\\\"fr-dix\\\" word=\\\"dix\\\" translation=\\\"ten (10)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n::vocab{id=\\\"fr-onze\\\" word=\\\"onze\\\" translation=\\\"eleven (11)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n::vocab{id=\\\"fr-douze\\\" word=\\\"douze\\\" translation=\\\"twelve (12)\\\" partOfSpeech=\\\"numeral\\\"}\\n::\\n\\n:::\\n\\n## Key Points\\n\\n1. **One is gendered**: \\\"un\\\" (masculine), \\\"une\\\" (feminine)\\n2. **Pronunciation changes**: Final consonants often silent or change\\n\""],"names":["lesson02"],"mappings":"AAAA,MAAAA,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -0,0 +1,75 @@
1
+ const e = `---
2
+ type: lesson
3
+ id: french-basics-lesson-03
4
+ title: "Leçon 3 — Les Couleurs"
5
+ description: "Colors: rouge, bleu, vert, jaune, noir, blanc..."
6
+ order: 3
7
+ parentId: french-basics-vocabulary
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - colors
12
+ - adjectives
13
+ metadata:
14
+ estimatedTime: 15
15
+ prerequisites: [french-basics-lesson-01]
16
+ objectives:
17
+ - "Learn basic color names in French"
18
+ - "Understand color agreement with nouns"
19
+ ---
20
+
21
+ # Leçon 3 (Lesson 3) — Les Couleurs
22
+
23
+ ## Introduction
24
+
25
+ Colors are adjectives in French and change form based on the gender of the noun they describe.
26
+
27
+ ## Vocabulary
28
+
29
+ :::vocabulary-set{id="french-colors" title="Colors (Les Couleurs)"}
30
+
31
+ ::vocab{id="fr-rouge" word="rouge" translation="red" partOfSpeech="adjective"}
32
+ ::
33
+
34
+ ::vocab{id="fr-bleu" word="bleu" translation="blue" partOfSpeech="adjective" gender="masculine"}
35
+ ::
36
+
37
+ ::vocab{id="fr-vert" word="vert" translation="green" partOfSpeech="adjective" gender="masculine"}
38
+ ::
39
+
40
+ ::vocab{id="fr-jaune" word="jaune" translation="yellow" partOfSpeech="adjective"}
41
+ ::
42
+
43
+ ::vocab{id="fr-orange" word="orange" translation="orange" partOfSpeech="adjective"}
44
+ ::
45
+
46
+ ::vocab{id="fr-noir" word="noir" translation="black" partOfSpeech="adjective" gender="masculine"}
47
+ ::
48
+
49
+ ::vocab{id="fr-blanc" word="blanc" translation="white" partOfSpeech="adjective" gender="masculine"}
50
+ ::
51
+
52
+ ::vocab{id="fr-gris" word="gris" translation="gray" partOfSpeech="adjective" gender="masculine"}
53
+ ::
54
+
55
+ ::vocab{id="fr-rose" word="rose" translation="pink" partOfSpeech="adjective"}
56
+ ::
57
+
58
+ ::vocab{id="fr-violet" word="violet" translation="purple" partOfSpeech="adjective" gender="masculine"}
59
+ ::
60
+
61
+ ::vocab{id="fr-marron" word="marron" translation="brown" partOfSpeech="adjective"}
62
+ ::
63
+
64
+ :::
65
+
66
+ ## Key Points
67
+
68
+ 1. **Gender agreement**: Most colors change for feminine (add -e)
69
+ 2. **Invariable colors**: rouge, jaune, orange, rose, marron stay the same
70
+ 3. **Position**: Colors usually come after the noun
71
+ `;
72
+ export {
73
+ e as default
74
+ };
75
+ //# sourceMappingURL=lesson-03-BFuDIIZH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-03-BFuDIIZH.js","sources":["../src/syllabi/basics/lessons/lesson-03.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: french-basics-lesson-03\\ntitle: \\\"Leçon 3 — Les Couleurs\\\"\\ndescription: \\\"Colors: rouge, bleu, vert, jaune, noir, blanc...\\\"\\norder: 3\\nparentId: french-basics-vocabulary\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - colors\\n - adjectives\\nmetadata:\\n estimatedTime: 15\\n prerequisites: [french-basics-lesson-01]\\n objectives:\\n - \\\"Learn basic color names in French\\\"\\n - \\\"Understand color agreement with nouns\\\"\\n---\\n\\n# Leçon 3 (Lesson 3) — Les Couleurs\\n\\n## Introduction\\n\\nColors are adjectives in French and change form based on the gender of the noun they describe.\\n\\n## Vocabulary\\n\\n:::vocabulary-set{id=\\\"french-colors\\\" title=\\\"Colors (Les Couleurs)\\\"}\\n\\n::vocab{id=\\\"fr-rouge\\\" word=\\\"rouge\\\" translation=\\\"red\\\" partOfSpeech=\\\"adjective\\\"}\\n::\\n\\n::vocab{id=\\\"fr-bleu\\\" word=\\\"bleu\\\" translation=\\\"blue\\\" partOfSpeech=\\\"adjective\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-vert\\\" word=\\\"vert\\\" translation=\\\"green\\\" partOfSpeech=\\\"adjective\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-jaune\\\" word=\\\"jaune\\\" translation=\\\"yellow\\\" partOfSpeech=\\\"adjective\\\"}\\n::\\n\\n::vocab{id=\\\"fr-orange\\\" word=\\\"orange\\\" translation=\\\"orange\\\" partOfSpeech=\\\"adjective\\\"}\\n::\\n\\n::vocab{id=\\\"fr-noir\\\" word=\\\"noir\\\" translation=\\\"black\\\" partOfSpeech=\\\"adjective\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-blanc\\\" word=\\\"blanc\\\" translation=\\\"white\\\" partOfSpeech=\\\"adjective\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-gris\\\" word=\\\"gris\\\" translation=\\\"gray\\\" partOfSpeech=\\\"adjective\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-rose\\\" word=\\\"rose\\\" translation=\\\"pink\\\" partOfSpeech=\\\"adjective\\\"}\\n::\\n\\n::vocab{id=\\\"fr-violet\\\" word=\\\"violet\\\" translation=\\\"purple\\\" partOfSpeech=\\\"adjective\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-marron\\\" word=\\\"marron\\\" translation=\\\"brown\\\" partOfSpeech=\\\"adjective\\\"}\\n::\\n\\n:::\\n\\n## Key Points\\n\\n1. **Gender agreement**: Most colors change for feminine (add -e)\\n2. **Invariable colors**: rouge, jaune, orange, rose, marron stay the same\\n3. **Position**: Colors usually come after the noun\\n\""],"names":["lesson03"],"mappings":"AAAA,MAAAA,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -0,0 +1,74 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: french-basics-lesson-04
4
+ title: "Leçon 4 — La Famille"
5
+ description: "Family: mère, père, frère, soeur, fils, fille..."
6
+ order: 4
7
+ parentId: french-basics-vocabulary
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - family
12
+ - nouns
13
+ metadata:
14
+ estimatedTime: 15
15
+ prerequisites: [french-basics-lesson-01]
16
+ objectives:
17
+ - "Learn family member vocabulary"
18
+ - "Understand masculine/feminine pairs"
19
+ ---
20
+
21
+ # Leçon 4 (Lesson 4) — La Famille
22
+
23
+ ## Introduction
24
+
25
+ Family vocabulary is essential for introducing yourself and talking about your loved ones.
26
+
27
+ ## Vocabulary
28
+
29
+ :::vocabulary-set{id="french-family" title="Family (La Famille)"}
30
+
31
+ ::vocab{id="fr-mere" word="mère" translation="mother" partOfSpeech="noun" gender="feminine"}
32
+ ::
33
+
34
+ ::vocab{id="fr-pere" word="père" translation="father" partOfSpeech="noun" gender="masculine"}
35
+ ::
36
+
37
+ ::vocab{id="fr-frere" word="frère" translation="brother" partOfSpeech="noun" gender="masculine"}
38
+ ::
39
+
40
+ ::vocab{id="fr-soeur" word="sœur" translation="sister" partOfSpeech="noun" gender="feminine"}
41
+ ::
42
+
43
+ ::vocab{id="fr-fils" word="fils" translation="son" partOfSpeech="noun" gender="masculine"}
44
+ ::
45
+
46
+ ::vocab{id="fr-fille" word="fille" translation="daughter" partOfSpeech="noun" gender="feminine"}
47
+ ::
48
+
49
+ ::vocab{id="fr-grandmere" word="grand-mère" translation="grandmother" partOfSpeech="noun" gender="feminine"}
50
+ ::
51
+
52
+ ::vocab{id="fr-grandpere" word="grand-père" translation="grandfather" partOfSpeech="noun" gender="masculine"}
53
+ ::
54
+
55
+ ::vocab{id="fr-ami" word="ami" translation="friend (male)" partOfSpeech="noun" gender="masculine"}
56
+ ::
57
+
58
+ ::vocab{id="fr-enfant" word="enfant" translation="child" partOfSpeech="noun" gender="masculine"}
59
+ ::
60
+
61
+ ::vocab{id="fr-famille" word="famille" translation="family" partOfSpeech="noun" gender="feminine"}
62
+ ::
63
+
64
+ :::
65
+
66
+ ## Key Points
67
+
68
+ 1. **Masculine/Feminine pairs**: père/mère, frère/sœur, fils/fille
69
+ 2. **Possessive adjectives**: mon (my, m.), ma (my, f.), mes (my, pl.)
70
+ `;
71
+ export {
72
+ n as default
73
+ };
74
+ //# sourceMappingURL=lesson-04-DOobkbMZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-04-DOobkbMZ.js","sources":["../src/syllabi/basics/lessons/lesson-04.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: french-basics-lesson-04\\ntitle: \\\"Leçon 4 — La Famille\\\"\\ndescription: \\\"Family: mère, père, frère, soeur, fils, fille...\\\"\\norder: 4\\nparentId: french-basics-vocabulary\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - family\\n - nouns\\nmetadata:\\n estimatedTime: 15\\n prerequisites: [french-basics-lesson-01]\\n objectives:\\n - \\\"Learn family member vocabulary\\\"\\n - \\\"Understand masculine/feminine pairs\\\"\\n---\\n\\n# Leçon 4 (Lesson 4) — La Famille\\n\\n## Introduction\\n\\nFamily vocabulary is essential for introducing yourself and talking about your loved ones.\\n\\n## Vocabulary\\n\\n:::vocabulary-set{id=\\\"french-family\\\" title=\\\"Family (La Famille)\\\"}\\n\\n::vocab{id=\\\"fr-mere\\\" word=\\\"mère\\\" translation=\\\"mother\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-pere\\\" word=\\\"père\\\" translation=\\\"father\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-frere\\\" word=\\\"frère\\\" translation=\\\"brother\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-soeur\\\" word=\\\"sœur\\\" translation=\\\"sister\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-fils\\\" word=\\\"fils\\\" translation=\\\"son\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-fille\\\" word=\\\"fille\\\" translation=\\\"daughter\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-grandmere\\\" word=\\\"grand-mère\\\" translation=\\\"grandmother\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-grandpere\\\" word=\\\"grand-père\\\" translation=\\\"grandfather\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-ami\\\" word=\\\"ami\\\" translation=\\\"friend (male)\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-enfant\\\" word=\\\"enfant\\\" translation=\\\"child\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-famille\\\" word=\\\"famille\\\" translation=\\\"family\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n:::\\n\\n## Key Points\\n\\n1. **Masculine/Feminine pairs**: père/mère, frère/sœur, fils/fille\\n2. **Possessive adjectives**: mon (my, m.), ma (my, f.), mes (my, pl.)\\n\""],"names":["lesson04"],"mappings":"AAAA,MAAAA,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -0,0 +1,74 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: french-basics-lesson-05
4
+ title: "Leçon 5 — Les Animaux"
5
+ description: "Animals: chat, chien, oiseau, poisson, cheval..."
6
+ order: 5
7
+ parentId: french-basics-vocabulary
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - animals
12
+ - nouns
13
+ metadata:
14
+ estimatedTime: 15
15
+ prerequisites: [french-basics-lesson-01]
16
+ objectives:
17
+ - "Learn common animal names"
18
+ - "Practice noun genders with animals"
19
+ ---
20
+
21
+ # Leçon 5 (Lesson 5) — Les Animaux
22
+
23
+ ## Introduction
24
+
25
+ Animals are a fun way to practice French nouns and their genders.
26
+
27
+ ## Vocabulary
28
+
29
+ :::vocabulary-set{id="french-animals" title="Animals (Les Animaux)"}
30
+
31
+ ::vocab{id="fr-chat" word="chat" translation="cat" partOfSpeech="noun" gender="masculine"}
32
+ ::
33
+
34
+ ::vocab{id="fr-chien" word="chien" translation="dog" partOfSpeech="noun" gender="masculine"}
35
+ ::
36
+
37
+ ::vocab{id="fr-oiseau" word="oiseau" translation="bird" partOfSpeech="noun" gender="masculine"}
38
+ ::
39
+
40
+ ::vocab{id="fr-poisson" word="poisson" translation="fish" partOfSpeech="noun" gender="masculine"}
41
+ ::
42
+
43
+ ::vocab{id="fr-cheval" word="cheval" translation="horse" partOfSpeech="noun" gender="masculine"}
44
+ ::
45
+
46
+ ::vocab{id="fr-vache" word="vache" translation="cow" partOfSpeech="noun" gender="feminine"}
47
+ ::
48
+
49
+ ::vocab{id="fr-cochon" word="cochon" translation="pig" partOfSpeech="noun" gender="masculine"}
50
+ ::
51
+
52
+ ::vocab{id="fr-mouton" word="mouton" translation="sheep" partOfSpeech="noun" gender="masculine"}
53
+ ::
54
+
55
+ ::vocab{id="fr-lapin" word="lapin" translation="rabbit" partOfSpeech="noun" gender="masculine"}
56
+ ::
57
+
58
+ ::vocab{id="fr-souris" word="souris" translation="mouse" partOfSpeech="noun" gender="feminine"}
59
+ ::
60
+
61
+ ::vocab{id="fr-canard" word="canard" translation="duck" partOfSpeech="noun" gender="masculine"}
62
+ ::
63
+
64
+ :::
65
+
66
+ ## Key Points
67
+
68
+ 1. **Grammatical gender**: Each animal has a fixed gender
69
+ 2. **Irregular plurals**: cheval → chevaux, oiseau → oiseaux
70
+ `;
71
+ export {
72
+ n as default
73
+ };
74
+ //# sourceMappingURL=lesson-05-bDgswwl9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-05-bDgswwl9.js","sources":["../src/syllabi/basics/lessons/lesson-05.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: french-basics-lesson-05\\ntitle: \\\"Leçon 5 — Les Animaux\\\"\\ndescription: \\\"Animals: chat, chien, oiseau, poisson, cheval...\\\"\\norder: 5\\nparentId: french-basics-vocabulary\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - animals\\n - nouns\\nmetadata:\\n estimatedTime: 15\\n prerequisites: [french-basics-lesson-01]\\n objectives:\\n - \\\"Learn common animal names\\\"\\n - \\\"Practice noun genders with animals\\\"\\n---\\n\\n# Leçon 5 (Lesson 5) — Les Animaux\\n\\n## Introduction\\n\\nAnimals are a fun way to practice French nouns and their genders.\\n\\n## Vocabulary\\n\\n:::vocabulary-set{id=\\\"french-animals\\\" title=\\\"Animals (Les Animaux)\\\"}\\n\\n::vocab{id=\\\"fr-chat\\\" word=\\\"chat\\\" translation=\\\"cat\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-chien\\\" word=\\\"chien\\\" translation=\\\"dog\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-oiseau\\\" word=\\\"oiseau\\\" translation=\\\"bird\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-poisson\\\" word=\\\"poisson\\\" translation=\\\"fish\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-cheval\\\" word=\\\"cheval\\\" translation=\\\"horse\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-vache\\\" word=\\\"vache\\\" translation=\\\"cow\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-cochon\\\" word=\\\"cochon\\\" translation=\\\"pig\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-mouton\\\" word=\\\"mouton\\\" translation=\\\"sheep\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-lapin\\\" word=\\\"lapin\\\" translation=\\\"rabbit\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-souris\\\" word=\\\"souris\\\" translation=\\\"mouse\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-canard\\\" word=\\\"canard\\\" translation=\\\"duck\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n:::\\n\\n## Key Points\\n\\n1. **Grammatical gender**: Each animal has a fixed gender\\n2. **Irregular plurals**: cheval → chevaux, oiseau → oiseaux\\n\""],"names":["lesson05"],"mappings":"AAAA,MAAAA,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}