@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,77 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: french-basics-lesson-06
4
+ title: "Leçon 6 — Le Corps"
5
+ description: "Body Parts: tête, main, pied, œil, bouche..."
6
+ order: 6
7
+ parentId: french-basics-vocabulary
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - body
12
+ - nouns
13
+ metadata:
14
+ estimatedTime: 15
15
+ prerequisites: [french-basics-lesson-01]
16
+ objectives:
17
+ - "Learn body part vocabulary"
18
+ - "Practice irregular plurals"
19
+ ---
20
+
21
+ # Leçon 6 (Lesson 6) — Le Corps
22
+
23
+ ## Introduction
24
+
25
+ Body parts are essential vocabulary for describing people and health situations.
26
+
27
+ ## Vocabulary
28
+
29
+ :::vocabulary-set{id="french-body" title="Body Parts (Le Corps)"}
30
+
31
+ ::vocab{id="fr-tete" word="tête" translation="head" partOfSpeech="noun" gender="feminine"}
32
+ ::
33
+
34
+ ::vocab{id="fr-main" word="main" translation="hand" partOfSpeech="noun" gender="feminine"}
35
+ ::
36
+
37
+ ::vocab{id="fr-pied" word="pied" translation="foot" partOfSpeech="noun" gender="masculine"}
38
+ ::
39
+
40
+ ::vocab{id="fr-bras" word="bras" translation="arm" partOfSpeech="noun" gender="masculine"}
41
+ ::
42
+
43
+ ::vocab{id="fr-jambe" word="jambe" translation="leg" partOfSpeech="noun" gender="feminine"}
44
+ ::
45
+
46
+ ::vocab{id="fr-oeil" word="œil" translation="eye" partOfSpeech="noun" gender="masculine"}
47
+ ::
48
+
49
+ ::vocab{id="fr-yeux" word="yeux" translation="eyes" partOfSpeech="noun" gender="masculine"}
50
+ ::
51
+
52
+ ::vocab{id="fr-bouche" word="bouche" translation="mouth" partOfSpeech="noun" gender="feminine"}
53
+ ::
54
+
55
+ ::vocab{id="fr-nez" word="nez" translation="nose" partOfSpeech="noun" gender="masculine"}
56
+ ::
57
+
58
+ ::vocab{id="fr-oreille" word="oreille" translation="ear" partOfSpeech="noun" gender="feminine"}
59
+ ::
60
+
61
+ ::vocab{id="fr-cheveux" word="cheveux" translation="hair" partOfSpeech="noun" gender="masculine"}
62
+ ::
63
+
64
+ ::vocab{id="fr-dos" word="dos" translation="back" partOfSpeech="noun" gender="masculine"}
65
+ ::
66
+
67
+ :::
68
+
69
+ ## Key Points
70
+
71
+ 1. **Irregular plural**: œil → yeux (completely different!)
72
+ 2. **Article usage**: Use le/la/les with body parts instead of possessives
73
+ `;
74
+ export {
75
+ n as default
76
+ };
77
+ //# sourceMappingURL=lesson-06-CkchAanW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-06-CkchAanW.js","sources":["../src/syllabi/basics/lessons/lesson-06.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: french-basics-lesson-06\\ntitle: \\\"Leçon 6 — Le Corps\\\"\\ndescription: \\\"Body Parts: tête, main, pied, œil, bouche...\\\"\\norder: 6\\nparentId: french-basics-vocabulary\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - body\\n - nouns\\nmetadata:\\n estimatedTime: 15\\n prerequisites: [french-basics-lesson-01]\\n objectives:\\n - \\\"Learn body part vocabulary\\\"\\n - \\\"Practice irregular plurals\\\"\\n---\\n\\n# Leçon 6 (Lesson 6) — Le Corps\\n\\n## Introduction\\n\\nBody parts are essential vocabulary for describing people and health situations.\\n\\n## Vocabulary\\n\\n:::vocabulary-set{id=\\\"french-body\\\" title=\\\"Body Parts (Le Corps)\\\"}\\n\\n::vocab{id=\\\"fr-tete\\\" word=\\\"tête\\\" translation=\\\"head\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-main\\\" word=\\\"main\\\" translation=\\\"hand\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-pied\\\" word=\\\"pied\\\" translation=\\\"foot\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-bras\\\" word=\\\"bras\\\" translation=\\\"arm\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-jambe\\\" word=\\\"jambe\\\" translation=\\\"leg\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-oeil\\\" word=\\\"œil\\\" translation=\\\"eye\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-yeux\\\" word=\\\"yeux\\\" translation=\\\"eyes\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-bouche\\\" word=\\\"bouche\\\" translation=\\\"mouth\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-nez\\\" word=\\\"nez\\\" translation=\\\"nose\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-oreille\\\" word=\\\"oreille\\\" translation=\\\"ear\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-cheveux\\\" word=\\\"cheveux\\\" translation=\\\"hair\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-dos\\\" word=\\\"dos\\\" translation=\\\"back\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n:::\\n\\n## Key Points\\n\\n1. **Irregular plural**: œil → yeux (completely different!)\\n2. **Article usage**: Use le/la/les with body parts instead of possessives\\n\""],"names":["lesson06"],"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;AAAA;"}
@@ -0,0 +1,78 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: french-basics-lesson-07
4
+ title: "Leçon 7 — La Nourriture"
5
+ description: "Food & Drink: pain, eau, café, fromage, viande..."
6
+ order: 7
7
+ parentId: french-basics-vocabulary
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - food
12
+ - drink
13
+ - nouns
14
+ metadata:
15
+ estimatedTime: 15
16
+ prerequisites: [french-basics-lesson-01]
17
+ objectives:
18
+ - "Learn essential food vocabulary"
19
+ - "Order food and drinks"
20
+ ---
21
+
22
+ # Leçon 7 (Lesson 7) — La Nourriture
23
+
24
+ ## Introduction
25
+
26
+ France is famous for its cuisine! Learn food vocabulary for restaurants and daily life.
27
+
28
+ ## Vocabulary
29
+
30
+ :::vocabulary-set{id="french-food" title="Food & Drink (Nourriture et Boissons)"}
31
+
32
+ ::vocab{id="fr-pain" word="pain" translation="bread" partOfSpeech="noun" gender="masculine"}
33
+ ::
34
+
35
+ ::vocab{id="fr-eau" word="eau" translation="water" partOfSpeech="noun" gender="feminine"}
36
+ ::
37
+
38
+ ::vocab{id="fr-cafe" word="café" translation="coffee" partOfSpeech="noun" gender="masculine"}
39
+ ::
40
+
41
+ ::vocab{id="fr-the" word="thé" translation="tea" partOfSpeech="noun" gender="masculine"}
42
+ ::
43
+
44
+ ::vocab{id="fr-lait" word="lait" translation="milk" partOfSpeech="noun" gender="masculine"}
45
+ ::
46
+
47
+ ::vocab{id="fr-fromage" word="fromage" translation="cheese" partOfSpeech="noun" gender="masculine"}
48
+ ::
49
+
50
+ ::vocab{id="fr-viande" word="viande" translation="meat" partOfSpeech="noun" gender="feminine"}
51
+ ::
52
+
53
+ ::vocab{id="fr-poisson-food" word="poisson" translation="fish (food)" partOfSpeech="noun" gender="masculine"}
54
+ ::
55
+
56
+ ::vocab{id="fr-legumes" word="légumes" translation="vegetables" partOfSpeech="noun" gender="masculine"}
57
+ ::
58
+
59
+ ::vocab{id="fr-fruit" word="fruit" translation="fruit" partOfSpeech="noun" gender="masculine"}
60
+ ::
61
+
62
+ ::vocab{id="fr-vin" word="vin" translation="wine" partOfSpeech="noun" gender="masculine"}
63
+ ::
64
+
65
+ ::vocab{id="fr-sucre" word="sucre" translation="sugar" partOfSpeech="noun" gender="masculine"}
66
+ ::
67
+
68
+ :::
69
+
70
+ ## Key Points
71
+
72
+ 1. **Partitive articles**: du/de la/des for "some" (du pain = some bread)
73
+ 2. **Ordering phrases**: "Je voudrais..." (I would like...)
74
+ `;
75
+ export {
76
+ n as default
77
+ };
78
+ //# sourceMappingURL=lesson-07-BJh9y1Qk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-07-BJh9y1Qk.js","sources":["../src/syllabi/basics/lessons/lesson-07.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: french-basics-lesson-07\\ntitle: \\\"Leçon 7 — La Nourriture\\\"\\ndescription: \\\"Food & Drink: pain, eau, café, fromage, viande...\\\"\\norder: 7\\nparentId: french-basics-vocabulary\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - food\\n - drink\\n - nouns\\nmetadata:\\n estimatedTime: 15\\n prerequisites: [french-basics-lesson-01]\\n objectives:\\n - \\\"Learn essential food vocabulary\\\"\\n - \\\"Order food and drinks\\\"\\n---\\n\\n# Leçon 7 (Lesson 7) — La Nourriture\\n\\n## Introduction\\n\\nFrance is famous for its cuisine! Learn food vocabulary for restaurants and daily life.\\n\\n## Vocabulary\\n\\n:::vocabulary-set{id=\\\"french-food\\\" title=\\\"Food & Drink (Nourriture et Boissons)\\\"}\\n\\n::vocab{id=\\\"fr-pain\\\" word=\\\"pain\\\" translation=\\\"bread\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-eau\\\" word=\\\"eau\\\" translation=\\\"water\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-cafe\\\" word=\\\"café\\\" translation=\\\"coffee\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-the\\\" word=\\\"thé\\\" translation=\\\"tea\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-lait\\\" word=\\\"lait\\\" translation=\\\"milk\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-fromage\\\" word=\\\"fromage\\\" translation=\\\"cheese\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-viande\\\" word=\\\"viande\\\" translation=\\\"meat\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-poisson-food\\\" word=\\\"poisson\\\" translation=\\\"fish (food)\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-legumes\\\" word=\\\"légumes\\\" translation=\\\"vegetables\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-fruit\\\" word=\\\"fruit\\\" translation=\\\"fruit\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-vin\\\" word=\\\"vin\\\" translation=\\\"wine\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-sucre\\\" word=\\\"sucre\\\" translation=\\\"sugar\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n:::\\n\\n## Key Points\\n\\n1. **Partitive articles**: du/de la/des for \\\"some\\\" (du pain = some bread)\\n2. **Ordering phrases**: \\\"Je voudrais...\\\" (I would like...)\\n\""],"names":["lesson07"],"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;AAAA;AAAA;"}
@@ -0,0 +1,77 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: french-basics-lesson-08
4
+ title: "Leçon 8 — Les Lieux"
5
+ description: "Places: maison, école, rue, ville, magasin..."
6
+ order: 8
7
+ parentId: french-basics-vocabulary
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - places
12
+ - nouns
13
+ metadata:
14
+ estimatedTime: 15
15
+ prerequisites: [french-basics-lesson-01]
16
+ objectives:
17
+ - "Learn common location vocabulary"
18
+ - "Ask for and give directions"
19
+ ---
20
+
21
+ # Leçon 8 (Lesson 8) — Les Lieux
22
+
23
+ ## Introduction
24
+
25
+ Place vocabulary helps you navigate and describe where you live.
26
+
27
+ ## Vocabulary
28
+
29
+ :::vocabulary-set{id="french-places" title="Places (Les Lieux)"}
30
+
31
+ ::vocab{id="fr-maison" word="maison" translation="house, home" partOfSpeech="noun" gender="feminine"}
32
+ ::
33
+
34
+ ::vocab{id="fr-ecole" word="école" translation="school" partOfSpeech="noun" gender="feminine"}
35
+ ::
36
+
37
+ ::vocab{id="fr-rue" word="rue" translation="street" partOfSpeech="noun" gender="feminine"}
38
+ ::
39
+
40
+ ::vocab{id="fr-ville" word="ville" translation="city, town" partOfSpeech="noun" gender="feminine"}
41
+ ::
42
+
43
+ ::vocab{id="fr-pays" word="pays" translation="country" partOfSpeech="noun" gender="masculine"}
44
+ ::
45
+
46
+ ::vocab{id="fr-magasin" word="magasin" translation="store, shop" partOfSpeech="noun" gender="masculine"}
47
+ ::
48
+
49
+ ::vocab{id="fr-restaurant" word="restaurant" translation="restaurant" partOfSpeech="noun" gender="masculine"}
50
+ ::
51
+
52
+ ::vocab{id="fr-hopital" word="hôpital" translation="hospital" partOfSpeech="noun" gender="masculine"}
53
+ ::
54
+
55
+ ::vocab{id="fr-gare" word="gare" translation="train station" partOfSpeech="noun" gender="feminine"}
56
+ ::
57
+
58
+ ::vocab{id="fr-aeroport" word="aéroport" translation="airport" partOfSpeech="noun" gender="masculine"}
59
+ ::
60
+
61
+ ::vocab{id="fr-bibliotheque" word="bibliothèque" translation="library" partOfSpeech="noun" gender="feminine"}
62
+ ::
63
+
64
+ ::vocab{id="fr-jardin" word="jardin" translation="garden" partOfSpeech="noun" gender="masculine"}
65
+ ::
66
+
67
+ :::
68
+
69
+ ## Key Points
70
+
71
+ 1. **Prepositions**: à (to/at), dans (in), en (in/to for countries)
72
+ 2. **Contractions**: à + le = au, à + les = aux
73
+ `;
74
+ export {
75
+ n as default
76
+ };
77
+ //# sourceMappingURL=lesson-08-BepauIPO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-08-BepauIPO.js","sources":["../src/syllabi/basics/lessons/lesson-08.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: french-basics-lesson-08\\ntitle: \\\"Leçon 8 — Les Lieux\\\"\\ndescription: \\\"Places: maison, école, rue, ville, magasin...\\\"\\norder: 8\\nparentId: french-basics-vocabulary\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - places\\n - nouns\\nmetadata:\\n estimatedTime: 15\\n prerequisites: [french-basics-lesson-01]\\n objectives:\\n - \\\"Learn common location vocabulary\\\"\\n - \\\"Ask for and give directions\\\"\\n---\\n\\n# Leçon 8 (Lesson 8) — Les Lieux\\n\\n## Introduction\\n\\nPlace vocabulary helps you navigate and describe where you live.\\n\\n## Vocabulary\\n\\n:::vocabulary-set{id=\\\"french-places\\\" title=\\\"Places (Les Lieux)\\\"}\\n\\n::vocab{id=\\\"fr-maison\\\" word=\\\"maison\\\" translation=\\\"house, home\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-ecole\\\" word=\\\"école\\\" translation=\\\"school\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-rue\\\" word=\\\"rue\\\" translation=\\\"street\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-ville\\\" word=\\\"ville\\\" translation=\\\"city, town\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-pays\\\" word=\\\"pays\\\" translation=\\\"country\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-magasin\\\" word=\\\"magasin\\\" translation=\\\"store, shop\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-restaurant\\\" word=\\\"restaurant\\\" translation=\\\"restaurant\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-hopital\\\" word=\\\"hôpital\\\" translation=\\\"hospital\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-gare\\\" word=\\\"gare\\\" translation=\\\"train station\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-aeroport\\\" word=\\\"aéroport\\\" translation=\\\"airport\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-bibliotheque\\\" word=\\\"bibliothèque\\\" translation=\\\"library\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-jardin\\\" word=\\\"jardin\\\" translation=\\\"garden\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n:::\\n\\n## Key Points\\n\\n1. **Prepositions**: à (to/at), dans (in), en (in/to for countries)\\n2. **Contractions**: à + le = au, à + les = aux\\n\""],"names":["lesson08"],"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;AAAA;"}
@@ -0,0 +1,76 @@
1
+ const e = `---
2
+ type: lesson
3
+ id: french-basics-lesson-09
4
+ title: "Leçon 9 — Les Verbes"
5
+ description: "Common Verbs: être, avoir, aller, faire, vouloir..."
6
+ order: 9
7
+ parentId: french-basics-vocabulary
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - verbs
12
+ metadata:
13
+ estimatedTime: 20
14
+ prerequisites: [french-basics-lesson-01]
15
+ objectives:
16
+ - "Learn the most essential French verbs"
17
+ - "Understand basic conjugation patterns"
18
+ ---
19
+
20
+ # Leçon 9 (Lesson 9) — Les Verbes Essentiels
21
+
22
+ ## Introduction
23
+
24
+ Verbs are the heart of French sentences. The most common verbs are irregular but essential.
25
+
26
+ ## Vocabulary
27
+
28
+ :::vocabulary-set{id="french-verbs" title="Essential Verbs (Verbes Essentiels)"}
29
+
30
+ ::vocab{id="fr-etre" word="être" translation="to be" partOfSpeech="verb"}
31
+ ::
32
+
33
+ ::vocab{id="fr-avoir" word="avoir" translation="to have" partOfSpeech="verb"}
34
+ ::
35
+
36
+ ::vocab{id="fr-aller" word="aller" translation="to go" partOfSpeech="verb"}
37
+ ::
38
+
39
+ ::vocab{id="fr-faire" word="faire" translation="to do, to make" partOfSpeech="verb"}
40
+ ::
41
+
42
+ ::vocab{id="fr-vouloir" word="vouloir" translation="to want" partOfSpeech="verb"}
43
+ ::
44
+
45
+ ::vocab{id="fr-pouvoir" word="pouvoir" translation="can, to be able to" partOfSpeech="verb"}
46
+ ::
47
+
48
+ ::vocab{id="fr-aimer" word="aimer" translation="to love, to like" partOfSpeech="verb"}
49
+ ::
50
+
51
+ ::vocab{id="fr-manger" word="manger" translation="to eat" partOfSpeech="verb"}
52
+ ::
53
+
54
+ ::vocab{id="fr-boire" word="boire" translation="to drink" partOfSpeech="verb"}
55
+ ::
56
+
57
+ ::vocab{id="fr-parler" word="parler" translation="to speak" partOfSpeech="verb"}
58
+ ::
59
+
60
+ ::vocab{id="fr-voir" word="voir" translation="to see" partOfSpeech="verb"}
61
+ ::
62
+
63
+ ::vocab{id="fr-venir" word="venir" translation="to come" partOfSpeech="verb"}
64
+ ::
65
+
66
+ :::
67
+
68
+ ## Key Points
69
+
70
+ 1. **Irregular verbs**: être, avoir, aller, faire are irregular but essential
71
+ 2. **Regular -er verbs**: Follow predictable patterns (aimer, parler, manger)
72
+ `;
73
+ export {
74
+ e as default
75
+ };
76
+ //# sourceMappingURL=lesson-09-CeGc0fz7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-09-CeGc0fz7.js","sources":["../src/syllabi/basics/lessons/lesson-09.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: french-basics-lesson-09\\ntitle: \\\"Leçon 9 — Les Verbes\\\"\\ndescription: \\\"Common Verbs: être, avoir, aller, faire, vouloir...\\\"\\norder: 9\\nparentId: french-basics-vocabulary\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - verbs\\nmetadata:\\n estimatedTime: 20\\n prerequisites: [french-basics-lesson-01]\\n objectives:\\n - \\\"Learn the most essential French verbs\\\"\\n - \\\"Understand basic conjugation patterns\\\"\\n---\\n\\n# Leçon 9 (Lesson 9) — Les Verbes Essentiels\\n\\n## Introduction\\n\\nVerbs are the heart of French sentences. The most common verbs are irregular but essential.\\n\\n## Vocabulary\\n\\n:::vocabulary-set{id=\\\"french-verbs\\\" title=\\\"Essential Verbs (Verbes Essentiels)\\\"}\\n\\n::vocab{id=\\\"fr-etre\\\" word=\\\"être\\\" translation=\\\"to be\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-avoir\\\" word=\\\"avoir\\\" translation=\\\"to have\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-aller\\\" word=\\\"aller\\\" translation=\\\"to go\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-faire\\\" word=\\\"faire\\\" translation=\\\"to do, to make\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-vouloir\\\" word=\\\"vouloir\\\" translation=\\\"to want\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-pouvoir\\\" word=\\\"pouvoir\\\" translation=\\\"can, to be able to\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-aimer\\\" word=\\\"aimer\\\" translation=\\\"to love, to like\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-manger\\\" word=\\\"manger\\\" translation=\\\"to eat\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-boire\\\" word=\\\"boire\\\" translation=\\\"to drink\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-parler\\\" word=\\\"parler\\\" translation=\\\"to speak\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-voir\\\" word=\\\"voir\\\" translation=\\\"to see\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n::vocab{id=\\\"fr-venir\\\" word=\\\"venir\\\" translation=\\\"to come\\\" partOfSpeech=\\\"verb\\\"}\\n::\\n\\n:::\\n\\n## Key Points\\n\\n1. **Irregular verbs**: être, avoir, aller, faire are irregular but essential\\n2. **Regular -er verbs**: Follow predictable patterns (aimer, parler, manger)\\n\""],"names":["lesson09"],"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,77 @@
1
+ const n = `---
2
+ type: lesson
3
+ id: french-basics-lesson-10
4
+ title: "Leçon 10 — Le Temps"
5
+ description: "Time & Weather: jour, semaine, soleil, pluie, chaud, froid..."
6
+ order: 10
7
+ parentId: french-basics-vocabulary
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - time
12
+ - weather
13
+ metadata:
14
+ estimatedTime: 15
15
+ prerequisites: [french-basics-lesson-01]
16
+ objectives:
17
+ - "Learn time vocabulary"
18
+ - "Describe the weather"
19
+ ---
20
+
21
+ # Leçon 10 (Lesson 10) — Le Temps
22
+
23
+ ## Introduction
24
+
25
+ "Le temps" in French means both "time" and "weather" - two essential topics.
26
+
27
+ ## Vocabulary
28
+
29
+ :::vocabulary-set{id="french-time-weather" title="Time & Weather (Le Temps)"}
30
+
31
+ ::vocab{id="fr-jour" word="jour" translation="day" partOfSpeech="noun" gender="masculine"}
32
+ ::
33
+
34
+ ::vocab{id="fr-semaine" word="semaine" translation="week" partOfSpeech="noun" gender="feminine"}
35
+ ::
36
+
37
+ ::vocab{id="fr-mois" word="mois" translation="month" partOfSpeech="noun" gender="masculine"}
38
+ ::
39
+
40
+ ::vocab{id="fr-annee" word="année" translation="year" partOfSpeech="noun" gender="feminine"}
41
+ ::
42
+
43
+ ::vocab{id="fr-soleil" word="soleil" translation="sun" partOfSpeech="noun" gender="masculine"}
44
+ ::
45
+
46
+ ::vocab{id="fr-pluie" word="pluie" translation="rain" partOfSpeech="noun" gender="feminine"}
47
+ ::
48
+
49
+ ::vocab{id="fr-neige" word="neige" translation="snow" partOfSpeech="noun" gender="feminine"}
50
+ ::
51
+
52
+ ::vocab{id="fr-nuage" word="nuage" translation="cloud" partOfSpeech="noun" gender="masculine"}
53
+ ::
54
+
55
+ ::vocab{id="fr-chaud" word="chaud" translation="hot, warm" partOfSpeech="adjective" gender="masculine"}
56
+ ::
57
+
58
+ ::vocab{id="fr-froid" word="froid" translation="cold" partOfSpeech="adjective" gender="masculine"}
59
+ ::
60
+
61
+ ::vocab{id="fr-vent" word="vent" translation="wind" partOfSpeech="noun" gender="masculine"}
62
+ ::
63
+
64
+ ::vocab{id="fr-temps" word="temps" translation="time, weather" partOfSpeech="noun" gender="masculine"}
65
+ ::
66
+
67
+ :::
68
+
69
+ ## Key Points
70
+
71
+ 1. **"Il fait" + adjective**: Used for weather (Il fait chaud = It's hot)
72
+ 2. **"J'ai chaud/froid"**: Use "avoir" for personal feelings of temperature
73
+ `;
74
+ export {
75
+ n as default
76
+ };
77
+ //# sourceMappingURL=lesson-10-A9U08tSq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-10-A9U08tSq.js","sources":["../src/syllabi/basics/lessons/lesson-10.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: french-basics-lesson-10\\ntitle: \\\"Leçon 10 — Le Temps\\\"\\ndescription: \\\"Time & Weather: jour, semaine, soleil, pluie, chaud, froid...\\\"\\norder: 10\\nparentId: french-basics-vocabulary\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - time\\n - weather\\nmetadata:\\n estimatedTime: 15\\n prerequisites: [french-basics-lesson-01]\\n objectives:\\n - \\\"Learn time vocabulary\\\"\\n - \\\"Describe the weather\\\"\\n---\\n\\n# Leçon 10 (Lesson 10) — Le Temps\\n\\n## Introduction\\n\\n\\\"Le temps\\\" in French means both \\\"time\\\" and \\\"weather\\\" - two essential topics.\\n\\n## Vocabulary\\n\\n:::vocabulary-set{id=\\\"french-time-weather\\\" title=\\\"Time & Weather (Le Temps)\\\"}\\n\\n::vocab{id=\\\"fr-jour\\\" word=\\\"jour\\\" translation=\\\"day\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-semaine\\\" word=\\\"semaine\\\" translation=\\\"week\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-mois\\\" word=\\\"mois\\\" translation=\\\"month\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-annee\\\" word=\\\"année\\\" translation=\\\"year\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-soleil\\\" word=\\\"soleil\\\" translation=\\\"sun\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-pluie\\\" word=\\\"pluie\\\" translation=\\\"rain\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-neige\\\" word=\\\"neige\\\" translation=\\\"snow\\\" partOfSpeech=\\\"noun\\\" gender=\\\"feminine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-nuage\\\" word=\\\"nuage\\\" translation=\\\"cloud\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-chaud\\\" word=\\\"chaud\\\" translation=\\\"hot, warm\\\" partOfSpeech=\\\"adjective\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-froid\\\" word=\\\"froid\\\" translation=\\\"cold\\\" partOfSpeech=\\\"adjective\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-vent\\\" word=\\\"vent\\\" translation=\\\"wind\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n::vocab{id=\\\"fr-temps\\\" word=\\\"temps\\\" translation=\\\"time, weather\\\" partOfSpeech=\\\"noun\\\" gender=\\\"masculine\\\"}\\n::\\n\\n:::\\n\\n## Key Points\\n\\n1. **\\\"Il fait\\\" + adjective**: Used for weather (Il fait chaud = It's hot)\\n2. **\\\"J'ai chaud/froid\\\"**: Use \\\"avoir\\\" for personal feelings of temperature\\n\""],"names":["lesson10"],"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;AAAA;"}
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,70 @@
1
+ function t(n, r) {
2
+ return {
3
+ config: n,
4
+ async loadLesson(e) {
5
+ if (e < 1 || e > n.lessonCount)
6
+ throw new Error(`Lesson ${e} not found. Valid range: 1-${n.lessonCount}`);
7
+ const s = await r(e);
8
+ return {
9
+ number: e,
10
+ rawContent: s.default
11
+ };
12
+ },
13
+ async loadAllLessons() {
14
+ const e = [];
15
+ for (let s = 1; s <= n.lessonCount; s++)
16
+ e.push(await this.loadLesson(s));
17
+ return e;
18
+ },
19
+ getAvailableLessons() {
20
+ return Array.from({ length: n.lessonCount }, (e, s) => s + 1);
21
+ }
22
+ };
23
+ }
24
+ const a = {
25
+ id: "french-basics-vocabulary",
26
+ title: "French Basics - Essential Vocabulary",
27
+ description: "Learn essential French vocabulary - greetings, numbers, colors, family, animals, and more",
28
+ language: "fr",
29
+ locale: "fr-FR",
30
+ lessonCount: 10,
31
+ difficulty: "beginner",
32
+ cefrLevel: "A1",
33
+ icon: "vocabulary",
34
+ version: "0.1.0"
35
+ };
36
+ async function l(n) {
37
+ switch (n) {
38
+ case 1:
39
+ return import("../../lesson-01-CKlUAQ-l.js");
40
+ case 2:
41
+ return import("../../lesson-02-Sg_0WpK1.js");
42
+ case 3:
43
+ return import("../../lesson-03-BFuDIIZH.js");
44
+ case 4:
45
+ return import("../../lesson-04-DOobkbMZ.js");
46
+ case 5:
47
+ return import("../../lesson-05-bDgswwl9.js");
48
+ case 6:
49
+ return import("../../lesson-06-CkchAanW.js");
50
+ case 7:
51
+ return import("../../lesson-07-BJh9y1Qk.js");
52
+ case 8:
53
+ return import("../../lesson-08-BepauIPO.js");
54
+ case 9:
55
+ return import("../../lesson-09-CeGc0fz7.js");
56
+ case 10:
57
+ return import("../../lesson-10-A9U08tSq.js");
58
+ default:
59
+ throw new Error(`Lesson ${n} not found`);
60
+ }
61
+ }
62
+ const o = t(a, l), i = o.loadLesson.bind(o), c = o.loadAllLessons.bind(o), u = o.getAvailableLessons.bind(o);
63
+ export {
64
+ a as config,
65
+ u as getAvailableLessons,
66
+ c as loadAllLessons,
67
+ i as loadLesson,
68
+ o as loader
69
+ };
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/shared.ts","../../../src/syllabi/basics/index.ts"],"sourcesContent":["/**\r\n * Shared types and utilities for SYLLST content\r\n * (Inlined from @syllst/content-shared to make package self-contained)\r\n */\r\n\r\n/**\r\n * CEFR language proficiency levels\r\n */\r\nexport type CEFRLevel = 'A1' | 'A2' | 'B1' | 'B2' | 'C1' | 'C2';\r\n\r\n/**\r\n * Difficulty levels\r\n */\r\nexport type Difficulty = 'beginner' | 'intermediate' | 'advanced';\r\n\r\n/**\r\n * Icon types for syllabi\r\n */\r\nexport type SyllabusIcon =\r\n | 'alphabet'\r\n | 'dialogue'\r\n | 'vocabulary'\r\n | 'grammar'\r\n | 'reading'\r\n | 'numbers'\r\n | 'food'\r\n | 'travel';\r\n\r\n/**\r\n * Configuration for a syllabus content package\r\n */\r\nexport interface SyllabusConfig {\r\n /** Unique syllabus ID (e.g., \"french-basics\") */\r\n id: string;\r\n /** Display title */\r\n title: string;\r\n /** Description */\r\n description: string;\r\n /** Language code (ISO 639-1) */\r\n language: string;\r\n /** Locale code (e.g., \"fr-FR\") */\r\n locale: string;\r\n /** Number of lessons */\r\n lessonCount: number;\r\n /** Difficulty level */\r\n difficulty: Difficulty;\r\n /** CEFR level */\r\n cefrLevel: CEFRLevel;\r\n /** Icon for display */\r\n icon?: SyllabusIcon;\r\n /** Package version */\r\n version: string;\r\n}\r\n\r\n/**\r\n * Result of loading a lesson\r\n */\r\nexport interface LoadedLesson {\r\n /** Lesson number (1-indexed) */\r\n number: number;\r\n /** Raw MDX content */\r\n rawContent: string;\r\n}\r\n\r\n/**\r\n * Content loader interface\r\n */\r\nexport interface ContentLoader {\r\n /** Syllabus configuration */\r\n config: SyllabusConfig;\r\n /** Load a single lesson by number */\r\n loadLesson(lessonNumber: number): Promise<LoadedLesson>;\r\n /** Load all lessons */\r\n loadAllLessons(): Promise<LoadedLesson[]>;\r\n /** Get list of available lesson numbers */\r\n getAvailableLessons(): number[];\r\n}\r\n\r\n/**\r\n * Create a content loader from config and lesson loader function\r\n */\r\nexport function createContentLoader(\r\n config: SyllabusConfig,\r\n loadLessonMDX: (lessonNumber: number) => Promise<{ default: string }>\r\n): ContentLoader {\r\n return {\r\n config,\r\n\r\n async loadLesson(lessonNumber: number): Promise<LoadedLesson> {\r\n if (lessonNumber < 1 || lessonNumber > config.lessonCount) {\r\n throw new Error(`Lesson ${lessonNumber} not found. Valid range: 1-${config.lessonCount}`);\r\n }\r\n const module = await loadLessonMDX(lessonNumber);\r\n return {\r\n number: lessonNumber,\r\n rawContent: module.default,\r\n };\r\n },\r\n\r\n async loadAllLessons(): Promise<LoadedLesson[]> {\r\n const lessons: LoadedLesson[] = [];\r\n for (let i = 1; i <= config.lessonCount; i++) {\r\n lessons.push(await this.loadLesson(i));\r\n }\r\n return lessons;\r\n },\r\n\r\n getAvailableLessons(): number[] {\r\n return Array.from({ length: config.lessonCount }, (_, i) => i + 1);\r\n },\r\n };\r\n}\r\n","/**\n * French Basics Vocabulary Syllabus\n *\n * This module exports the French Basics vocabulary syllabus in syllst format.\n * The syllabus is defined in MDX files (meta.mdx + lessons/*.mdx) and can be\n * processed using @syllst/processor.\n *\n * Syllabus Structure:\n * - meta.mdx: Root syllabus definition with course overview\n * - lessons/lesson-01.mdx: Greetings & Basics\n * - lessons/lesson-02.mdx: Numbers\n * - lessons/lesson-03.mdx: Colors\n * - lessons/lesson-04.mdx: Family & People\n * - lessons/lesson-05.mdx: Animals\n * - lessons/lesson-06.mdx: Body Parts\n * - lessons/lesson-07.mdx: Food & Drink\n * - lessons/lesson-08.mdx: Places\n * - lessons/lesson-09.mdx: Common Verbs\n * - lessons/lesson-10.mdx: Time & Weather\n *\n * Total Vocabulary Items: ~100 essential words\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: \"french-basics-vocabulary\",\n title: \"French Basics - Essential Vocabulary\",\n description: \"Learn essential French vocabulary - greetings, numbers, colors, family, animals, and more\",\n language: 'fr',\n locale: 'fr-FR',\n lessonCount: 10,\n difficulty: 'beginner',\n cefrLevel: 'A1',\n icon: 'vocabulary',\n version: '0.1.0',\n};\n\nasync function loadLessonMDX(lessonNumber: number) {\n switch (lessonNumber) {\n case 1: return import('./lessons/lesson-01.mdx?raw');\n case 2: return import('./lessons/lesson-02.mdx?raw');\n case 3: return import('./lessons/lesson-03.mdx?raw');\n case 4: return import('./lessons/lesson-04.mdx?raw');\n case 5: return import('./lessons/lesson-05.mdx?raw');\n case 6: return import('./lessons/lesson-06.mdx?raw');\n case 7: return import('./lessons/lesson-07.mdx?raw');\n case 8: return import('./lessons/lesson-08.mdx?raw');\n case 9: return import('./lessons/lesson-09.mdx?raw');\n case 10: return import('./lessons/lesson-10.mdx?raw');\n default: throw new Error(`Lesson ${lessonNumber} not found`);\n }\n}\n\nexport const loader: ContentLoader = createContentLoader(config, loadLessonMDX);\nexport const loadLesson = loader.loadLesson.bind(loader);\nexport const loadAllLessons = loader.loadAllLessons.bind(loader);\nexport const getAvailableLessons = loader.getAvailableLessons.bind(loader);\n"],"names":["createContentLoader","config","loadLessonMDX","lessonNumber","module","lessons","i","_","loader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":"AAiFO,SAASA,EACdC,GACAC,GACe;AACf,SAAO;AAAA,IACL,QAAAD;AAAA,IAEA,MAAM,WAAWE,GAA6C;AAC5D,UAAIA,IAAe,KAAKA,IAAeF,EAAO;AAC5C,cAAM,IAAI,MAAM,UAAUE,CAAY,8BAA8BF,EAAO,WAAW,EAAE;AAE1F,YAAMG,IAAS,MAAMF,EAAcC,CAAY;AAC/C,aAAO;AAAA,QACL,QAAQA;AAAA,QACR,YAAYC,EAAO;AAAA,MAAA;AAAA,IAEvB;AAAA,IAEA,MAAM,iBAA0C;AAC9C,YAAMC,IAA0B,CAAA;AAChC,eAASC,IAAI,GAAGA,KAAKL,EAAO,aAAaK;AACvC,QAAAD,EAAQ,KAAK,MAAM,KAAK,WAAWC,CAAC,CAAC;AAEvC,aAAOD;AAAA,IACT;AAAA,IAEA,sBAAgC;AAC9B,aAAO,MAAM,KAAK,EAAE,QAAQJ,EAAO,YAAA,GAAe,CAACM,GAAGD,MAAMA,IAAI,CAAC;AAAA,IACnE;AAAA,EAAA;AAEJ;ACtFO,MAAML,IAAyB;AAAA,EACpC,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,aAAa;AAAA,EACb,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,MAAM;AAAA,EACN,SAAS;AACX;AAEA,eAAeC,EAAcC,GAAsB;AACjD,UAAQA,GAAA;AAAA,IACN,KAAK;AAAG,aAAO,OAAO,6BAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,6BAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,6BAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,6BAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,6BAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,6BAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,6BAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,6BAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,6BAA6B;AAAA,IACnD,KAAK;AAAI,aAAO,OAAO,6BAA6B;AAAA,IACpD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMK,IAAwBR,EAAoBC,GAAQC,CAAa,GACjEO,IAAaD,EAAO,WAAW,KAAKA,CAAM,GAC1CE,IAAiBF,EAAO,eAAe,KAAKA,CAAM,GAClDG,IAAsBH,EAAO,oBAAoB,KAAKA,CAAM;"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@polyglot-bundles/fr-syllabi",
3
+ "version": "0.1.1",
4
+ "description": "French syllabi - French basics vocabulary syllabus",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./basics": {
14
+ "types": "./dist/syllabi/basics/index.d.ts",
15
+ "import": "./dist/syllabi/basics/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "src/syllabi/**/*.mdx"
21
+ ],
22
+ "devDependencies": {
23
+ "@types/node": "^20.0.0",
24
+ "tsx": "^4.7.0",
25
+ "vite": "^5.4.0",
26
+ "vite-plugin-dts": "^4.0.0",
27
+ "@polyglot-bundles/content-shared": "0.1.1"
28
+ },
29
+ "peerDependencies": {
30
+ "@syllst/core": "^0.6.0",
31
+ "@syllst/processor": "^0.5.6"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "keywords": [
37
+ "french",
38
+ "language-learning",
39
+ "syllabi",
40
+ "mdx",
41
+ "vocabulary",
42
+ "basics"
43
+ ],
44
+ "license": "MIT",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/fustilio/polyglot-bundles",
48
+ "directory": "packages/fr/syllabi"
49
+ },
50
+ "scripts": {
51
+ "build": "vite build",
52
+ "clean": "rm -rf dist",
53
+ "lint": "eslint src",
54
+ "test": "vitest run",
55
+ "validate": "tsx scripts/validate-ids.ts"
56
+ }
57
+ }
@@ -0,0 +1,68 @@
1
+ ---
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