@polyglot-bundles/th 0.1.5 → 0.1.7

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 (53) hide show
  1. package/dist/{index-C9VnG7dT.js → index-B4ln70TK.js} +2 -2
  2. package/dist/index-B4ln70TK.js.map +1 -0
  3. package/dist/{index-ByS0o5dz.js → index-C7ozTvkd.js} +2 -2
  4. package/dist/index-C7ozTvkd.js.map +1 -0
  5. package/dist/{index-Bjym0crS.js → index-CN6WbetG.js} +2 -2
  6. package/dist/index-CN6WbetG.js.map +1 -0
  7. package/dist/{index-BM-LWlCm.js → index-C_h-XZwJ.js} +2 -2
  8. package/dist/index-C_h-XZwJ.js.map +1 -0
  9. package/dist/{index-DBkPBXe2.js → index-Dv-BsrA5.js} +2 -2
  10. package/dist/index-Dv-BsrA5.js.map +1 -0
  11. package/dist/{index-BuKXw7-Z.js → index-IsqLGlvo.js} +2 -2
  12. package/dist/index-IsqLGlvo.js.map +1 -0
  13. package/dist/{index-4uNMctdq.js → index-UR6nfcgF.js} +16 -38
  14. package/dist/index-UR6nfcgF.js.map +1 -0
  15. package/dist/{index-CPQkjFjV.js → index-iPpqghJQ.js} +2 -2
  16. package/dist/index-iPpqghJQ.js.map +1 -0
  17. package/dist/{index-CkHd3Fal.js → index-tgCat6ZW.js} +2 -2
  18. package/dist/index-tgCat6ZW.js.map +1 -0
  19. package/dist/index.d.ts +69 -4
  20. package/dist/index.js +18 -18
  21. package/dist/index.js.map +1 -1
  22. package/dist/shared-DADMaTE7.js +27 -0
  23. package/dist/shared-DADMaTE7.js.map +1 -0
  24. package/dist/syllabi/alphabet/index.js +6 -5
  25. package/dist/syllabi/alphabet/index.js.map +1 -1
  26. package/dist/syllabi/dialogue/index.d.ts +3 -3
  27. package/dist/syllabi/dialogue/index.js +2 -2
  28. package/dist/syllabi/essentials/index.d.ts +3 -3
  29. package/dist/syllabi/essentials/index.js +2 -2
  30. package/dist/syllabi/food/index.d.ts +3 -3
  31. package/dist/syllabi/food/index.js +2 -2
  32. package/dist/syllabi/grammar/index.d.ts +3 -3
  33. package/dist/syllabi/grammar/index.js +2 -2
  34. package/dist/syllabi/numbers/index.d.ts +3 -3
  35. package/dist/syllabi/numbers/index.js +2 -2
  36. package/dist/syllabi/reading/index.d.ts +3 -3
  37. package/dist/syllabi/reading/index.js +2 -2
  38. package/dist/syllabi/travel/index.d.ts +3 -3
  39. package/dist/syllabi/travel/index.js +2 -2
  40. package/dist/syllabi/vowels-tones/index.d.ts +3 -3
  41. package/dist/syllabi/vowels-tones/index.js +2 -2
  42. package/package.json +3 -3
  43. package/dist/index-4uNMctdq.js.map +0 -1
  44. package/dist/index-BM-LWlCm.js.map +0 -1
  45. package/dist/index-Bjym0crS.js.map +0 -1
  46. package/dist/index-BuKXw7-Z.js.map +0 -1
  47. package/dist/index-ByS0o5dz.js.map +0 -1
  48. package/dist/index-C9VnG7dT.js.map +0 -1
  49. package/dist/index-CPQkjFjV.js.map +0 -1
  50. package/dist/index-CkHd3Fal.js.map +0 -1
  51. package/dist/index-DBkPBXe2.js.map +0 -1
  52. package/dist/skills-hcn-pGD0.js +0 -244
  53. package/dist/skills-hcn-pGD0.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { c as n } from "./skills-hcn-pGD0.js";
1
+ import { c as n } from "./shared-DADMaTE7.js";
2
2
  const t = {
3
3
  id: "th-food",
4
4
  title: "อาหารไทย (Thai Food)",
@@ -49,4 +49,4 @@ export {
49
49
  l as i,
50
50
  o as l
51
51
  };
52
- //# sourceMappingURL=index-C9VnG7dT.js.map
52
+ //# sourceMappingURL=index-B4ln70TK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B4ln70TK.js","sources":["../src/syllabi/food/index.ts"],"sourcesContent":["/**\n * Thai Food syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: 'th-food',\n title: 'อาหารไทย (Thai Food)',\n description: 'Food vocabulary and ordering at restaurants',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 8,\n difficulty: 'beginner',\n cefrLevel: 'A2',\n icon: 'food',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { c as s } from "./skills-hcn-pGD0.js";
1
+ import { c as s } from "./shared-DADMaTE7.js";
2
2
  const t = {
3
3
  id: "th-dialogue",
4
4
  title: "บทสนทนา (Thai Dialogue)",
@@ -49,4 +49,4 @@ export {
49
49
  l as i,
50
50
  e as l
51
51
  };
52
- //# sourceMappingURL=index-ByS0o5dz.js.map
52
+ //# sourceMappingURL=index-C7ozTvkd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C7ozTvkd.js","sources":["../src/syllabi/dialogue/index.ts"],"sourcesContent":["/**\n * Thai Dialogue syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: 'th-dialogue',\n title: 'บทสนทนา (Thai Dialogue)',\n description: 'Practical conversations for everyday situations',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 8,\n difficulty: 'intermediate',\n cefrLevel: 'A2',\n icon: 'dialogue',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { c as n } from "./skills-hcn-pGD0.js";
1
+ import { c as n } from "./shared-DADMaTE7.js";
2
2
  const o = {
3
3
  id: "th-essentials",
4
4
  title: "คำพื้นฐาน (Thai Essentials)",
@@ -45,4 +45,4 @@ export {
45
45
  c as i,
46
46
  e as l
47
47
  };
48
- //# sourceMappingURL=index-Bjym0crS.js.map
48
+ //# sourceMappingURL=index-CN6WbetG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CN6WbetG.js","sources":["../src/syllabi/essentials/index.ts"],"sourcesContent":["/**\n * Thai Essentials syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: 'th-essentials',\n title: 'คำพื้นฐาน (Thai Essentials)',\n description: 'Essential phrases and greetings for everyday use',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 6,\n difficulty: 'beginner',\n cefrLevel: 'A1',\n icon: 'dialogue',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { c as o } from "./skills-hcn-pGD0.js";
1
+ import { c as o } from "./shared-DADMaTE7.js";
2
2
  const r = {
3
3
  id: "th-grammar",
4
4
  title: "ไวยากรณ์ไทย (Thai Grammar)",
@@ -49,4 +49,4 @@ export {
49
49
  l as i,
50
50
  e as l
51
51
  };
52
- //# sourceMappingURL=index-BM-LWlCm.js.map
52
+ //# sourceMappingURL=index-C_h-XZwJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C_h-XZwJ.js","sources":["../src/syllabi/grammar/index.ts"],"sourcesContent":["/**\n * Thai Grammar syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: 'th-grammar',\n title: 'ไวยากรณ์ไทย (Thai Grammar)',\n description: 'Essential Thai grammar patterns',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 8,\n difficulty: 'intermediate',\n cefrLevel: 'B1',\n icon: 'grammar',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { c as s } from "./skills-hcn-pGD0.js";
1
+ import { c as s } from "./shared-DADMaTE7.js";
2
2
  const t = {
3
3
  id: "th-vowels-tones",
4
4
  title: "สระและวรรณยุกต์ (Vowels & Tones)",
@@ -49,4 +49,4 @@ export {
49
49
  c as i,
50
50
  e as l
51
51
  };
52
- //# sourceMappingURL=index-DBkPBXe2.js.map
52
+ //# sourceMappingURL=index-Dv-BsrA5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Dv-BsrA5.js","sources":["../src/syllabi/vowels-tones/index.ts"],"sourcesContent":["/**\n * Thai Vowels & Tones syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: 'th-vowels-tones',\n title: 'สระและวรรณยุกต์ (Vowels & Tones)',\n description: 'Master Thai vowels and the five tones',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 8,\n difficulty: 'beginner',\n cefrLevel: 'A1',\n icon: 'alphabet',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { c as s } from "./skills-hcn-pGD0.js";
1
+ import { c as s } from "./shared-DADMaTE7.js";
2
2
  const o = {
3
3
  id: "th-numbers",
4
4
  title: "ตัวเลขไทย (Thai Numbers)",
@@ -43,4 +43,4 @@ export {
43
43
  c as i,
44
44
  e as l
45
45
  };
46
- //# sourceMappingURL=index-BuKXw7-Z.js.map
46
+ //# sourceMappingURL=index-IsqLGlvo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-IsqLGlvo.js","sources":["../src/syllabi/numbers/index.ts"],"sourcesContent":["/**\n * Thai Numbers syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: 'th-numbers',\n title: 'ตัวเลขไทย (Thai Numbers)',\n description: 'Learn Thai numerals and counting',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 5,\n difficulty: 'beginner',\n cefrLevel: 'A1',\n icon: 'numbers',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1,27 +1,5 @@
1
- function a(t, r) {
2
- return {
3
- config: t,
4
- async loadLesson(e) {
5
- if (e < 1 || e > t.lessonCount)
6
- throw new Error(`Lesson ${e} not found. Valid range: 1-${t.lessonCount}`);
7
- const n = await r(e);
8
- return {
9
- number: e,
10
- rawContent: n.default
11
- };
12
- },
13
- async loadAllLessons() {
14
- const e = [];
15
- for (let n = 1; n <= t.lessonCount; n++)
16
- e.push(await this.loadLesson(n));
17
- return e;
18
- },
19
- getAvailableLessons() {
20
- return Array.from({ length: t.lessonCount }, (e, n) => n + 1);
21
- }
22
- };
23
- }
24
- const s = {
1
+ import { c as r } from "./shared-DADMaTE7.js";
2
+ const o = {
25
3
  id: "th-alphabet",
26
4
  title: "อักษรไทย (Thai Alphabet)",
27
5
  description: "Learn the Thai writing system - consonants, vowels, and tone marks",
@@ -33,7 +11,7 @@ const s = {
33
11
  icon: "alphabet",
34
12
  version: "0.1.0"
35
13
  };
36
- async function l(t) {
14
+ async function n(t) {
37
15
  switch (t) {
38
16
  case 1:
39
17
  return import("./lesson-01-Cc4Ws8eR.js");
@@ -63,20 +41,20 @@ async function l(t) {
63
41
  throw new Error(`Lesson ${t} not found`);
64
42
  }
65
43
  }
66
- const o = a(s, l), i = o.loadLesson.bind(o), c = o.loadAllLessons.bind(o), u = o.getAvailableLessons.bind(o), d = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
44
+ const e = r(o, n), s = e.loadLesson.bind(e), a = e.loadAllLessons.bind(e), i = e.getAvailableLessons.bind(e), l = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
67
45
  __proto__: null,
68
- config: s,
69
- getAvailableLessons: u,
70
- loadAllLessons: c,
71
- loadLesson: i,
72
- loader: o
46
+ config: o,
47
+ getAvailableLessons: i,
48
+ loadAllLessons: a,
49
+ loadLesson: s,
50
+ loader: e
73
51
  }, Symbol.toStringTag, { value: "Module" }));
74
52
  export {
75
- c as a,
76
- i as b,
77
- s as c,
78
- u as g,
79
- d as i,
80
- o as l
53
+ a,
54
+ s as b,
55
+ o as c,
56
+ i as g,
57
+ l as i,
58
+ e as l
81
59
  };
82
- //# sourceMappingURL=index-4uNMctdq.js.map
60
+ //# sourceMappingURL=index-UR6nfcgF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-UR6nfcgF.js","sources":["../src/syllabi/alphabet/index.ts"],"sourcesContent":["/**\n * Thai Alphabet syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: 'th-alphabet',\n title: 'อักษรไทย (Thai Alphabet)',\n description: 'Learn the Thai writing system - consonants, vowels, and tone marks',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 12,\n difficulty: 'beginner',\n cefrLevel: 'A1',\n icon: 'alphabet',\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 case 11: return import('./lessons/lesson-11.mdx?raw');\n case 12: return import('./lessons/lesson-12.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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAI,aAAO,OAAO,yBAA6B;AAAA,IACpD,KAAK;AAAI,aAAO,OAAO,yBAA6B;AAAA,IACpD,KAAK;AAAI,aAAO,OAAO,yBAA6B;AAAA,IACpD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { c as n } from "./skills-hcn-pGD0.js";
1
+ import { c as n } from "./shared-DADMaTE7.js";
2
2
  const t = {
3
3
  id: "th-travel",
4
4
  title: "การเดินทาง (Thai Travel)",
@@ -47,4 +47,4 @@ export {
47
47
  c as i,
48
48
  e as l
49
49
  };
50
- //# sourceMappingURL=index-CPQkjFjV.js.map
50
+ //# sourceMappingURL=index-iPpqghJQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-iPpqghJQ.js","sources":["../src/syllabi/travel/index.ts"],"sourcesContent":["/**\n * Thai Travel syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: 'th-travel',\n title: 'การเดินทาง (Thai Travel)',\n description: 'Travel vocabulary and directions',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 7,\n difficulty: 'beginner',\n cefrLevel: 'A2',\n icon: 'travel',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { c as r } from "./skills-hcn-pGD0.js";
1
+ import { c as r } from "./shared-DADMaTE7.js";
2
2
  const o = {
3
3
  id: "th-reading",
4
4
  title: "การอ่าน (Thai Reading)",
@@ -53,4 +53,4 @@ export {
53
53
  l as i,
54
54
  e as l
55
55
  };
56
- //# sourceMappingURL=index-CkHd3Fal.js.map
56
+ //# sourceMappingURL=index-tgCat6ZW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-tgCat6ZW.js","sources":["../src/syllabi/reading/index.ts"],"sourcesContent":["/**\n * Thai Reading syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: 'th-reading',\n title: 'การอ่าน (Thai Reading)',\n description: 'Reading practice with Thai texts',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 10,\n difficulty: 'intermediate',\n cefrLevel: 'B1',\n icon: 'reading',\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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAI,aAAO,OAAO,yBAA6B;AAAA,IACpD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -1,15 +1,80 @@
1
- import { ContentLoader } from '@syllst/content-shared';
2
- import { LoadedLesson } from '@syllst/content-shared';
3
- import { SyllabusConfig } from '@syllst/content-shared';
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';
4
9
 
5
10
  export declare const config: SyllabusConfig;
6
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
+
7
31
  export declare const getAvailableLessons: () => number[];
8
32
 
9
33
  export declare const loadAllLessons: () => Promise<LoadedLesson[]>;
10
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
+
11
45
  export declare const loader: ContentLoader;
12
46
 
13
- export declare const loadLesson: (lessonNumber: number) => Promise<LoadedLesson | null>;
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., "th-alphabet") */
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., "th-TH") */
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';
14
79
 
15
80
  export { }
package/dist/index.js CHANGED
@@ -1,21 +1,21 @@
1
- import { c as r } from "./index-4uNMctdq.js";
2
- import { i as T, l as y } from "./index-4uNMctdq.js";
3
- import { c as s } from "./index-DBkPBXe2.js";
4
- import { i as I, l as j } from "./index-DBkPBXe2.js";
5
- import { c as i } from "./index-BuKXw7-Z.js";
6
- import { i as q, l as z } from "./index-BuKXw7-Z.js";
7
- import { c as e } from "./index-Bjym0crS.js";
8
- import { i as D, l as E } from "./index-Bjym0crS.js";
9
- import { c as f } from "./index-C9VnG7dT.js";
10
- import { i as G, l as H } from "./index-C9VnG7dT.js";
11
- import { c as n } from "./index-CPQkjFjV.js";
12
- import { i as K, l as M } from "./index-CPQkjFjV.js";
13
- import { c as m } from "./index-ByS0o5dz.js";
14
- import { i as O, l as P } from "./index-ByS0o5dz.js";
15
- import { c as t } from "./index-BM-LWlCm.js";
16
- import { i as R, l as S } from "./index-BM-LWlCm.js";
17
- import { c as g } from "./index-CkHd3Fal.js";
18
- import { i as V, l as W } from "./index-CkHd3Fal.js";
1
+ import { c as r } from "./index-UR6nfcgF.js";
2
+ import { i as T, l as y } from "./index-UR6nfcgF.js";
3
+ import { c as s } from "./index-Dv-BsrA5.js";
4
+ import { i as I, l as j } from "./index-Dv-BsrA5.js";
5
+ import { c as i } from "./index-IsqLGlvo.js";
6
+ import { i as q, l as z } from "./index-IsqLGlvo.js";
7
+ import { c as e } from "./index-CN6WbetG.js";
8
+ import { i as D, l as E } from "./index-CN6WbetG.js";
9
+ import { c as f } from "./index-B4ln70TK.js";
10
+ import { i as G, l as H } from "./index-B4ln70TK.js";
11
+ import { c as n } from "./index-iPpqghJQ.js";
12
+ import { i as K, l as M } from "./index-iPpqghJQ.js";
13
+ import { c as m } from "./index-C7ozTvkd.js";
14
+ import { i as O, l as P } from "./index-C7ozTvkd.js";
15
+ import { c as t } from "./index-C_h-XZwJ.js";
16
+ import { i as R, l as S } from "./index-C_h-XZwJ.js";
17
+ import { c as g } from "./index-tgCat6ZW.js";
18
+ import { i as V, l as W } from "./index-tgCat6ZW.js";
19
19
  const l = [
20
20
  r,
21
21
  s,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["/**\n * @syllst/th\n *\n * Thai SYLLST content package.\n * Contains all Thai language syllabi: alphabet, vowels-tones, numbers,\n * essentials, food, travel, dialogue, grammar, and reading.\n */\n\n// Re-export all syllabi\nexport * as alphabet from './syllabi/alphabet/index.js';\nexport * as vowelsTones from './syllabi/vowels-tones/index.js';\nexport * as numbers from './syllabi/numbers/index.js';\nexport * as essentials from './syllabi/essentials/index.js';\nexport * as food from './syllabi/food/index.js';\nexport * as travel from './syllabi/travel/index.js';\nexport * as dialogue from './syllabi/dialogue/index.js';\nexport * as grammar from './syllabi/grammar/index.js';\nexport * as reading from './syllabi/reading/index.js';\n\n// Re-export configs for convenience\nexport { config as alphabetConfig } from './syllabi/alphabet/index.js';\nexport { config as vowelsTonesConfig } from './syllabi/vowels-tones/index.js';\nexport { config as numbersConfig } from './syllabi/numbers/index.js';\nexport { config as essentialsConfig } from './syllabi/essentials/index.js';\nexport { config as foodConfig } from './syllabi/food/index.js';\nexport { config as travelConfig } from './syllabi/travel/index.js';\nexport { config as dialogueConfig } from './syllabi/dialogue/index.js';\nexport { config as grammarConfig } from './syllabi/grammar/index.js';\nexport { config as readingConfig } from './syllabi/reading/index.js';\n\n// Re-export loaders for convenience\nexport { loader as alphabetLoader } from './syllabi/alphabet/index.js';\nexport { loader as vowelsTonesLoader } from './syllabi/vowels-tones/index.js';\nexport { loader as numbersLoader } from './syllabi/numbers/index.js';\nexport { loader as essentialsLoader } from './syllabi/essentials/index.js';\nexport { loader as foodLoader } from './syllabi/food/index.js';\nexport { loader as travelLoader } from './syllabi/travel/index.js';\nexport { loader as dialogueLoader } from './syllabi/dialogue/index.js';\nexport { loader as grammarLoader } from './syllabi/grammar/index.js';\nexport { loader as readingLoader } from './syllabi/reading/index.js';\n\n// Re-export types from content-shared\nexport type { SyllabusConfig, ContentLoader, LoadedLesson } from '@syllst/content-shared';\n\n// Export all configs as array for iteration\nimport { config as alphabetConfig } from './syllabi/alphabet/index.js';\nimport { config as vowelsTonesConfig } from './syllabi/vowels-tones/index.js';\nimport { config as numbersConfig } from './syllabi/numbers/index.js';\nimport { config as essentialsConfig } from './syllabi/essentials/index.js';\nimport { config as foodConfig } from './syllabi/food/index.js';\nimport { config as travelConfig } from './syllabi/travel/index.js';\nimport { config as dialogueConfig } from './syllabi/dialogue/index.js';\nimport { config as grammarConfig } from './syllabi/grammar/index.js';\nimport { config as readingConfig } from './syllabi/reading/index.js';\n\nimport type { SyllabusConfig } from '@syllst/content-shared';\n\n/**\n * All Thai syllabi configurations\n */\nexport const allConfigs: SyllabusConfig[] = [\n alphabetConfig,\n vowelsTonesConfig,\n numbersConfig,\n essentialsConfig,\n foodConfig,\n travelConfig,\n dialogueConfig,\n grammarConfig,\n readingConfig,\n];\n\n/**\n * Get a syllabus config by ID\n */\nexport function getConfigById(id: string): SyllabusConfig | undefined {\n return allConfigs.find(c => c.id === id);\n}\n"],"names":["allConfigs","alphabetConfig","vowelsTonesConfig","numbersConfig","essentialsConfig","foodConfig","travelConfig","dialogueConfig","grammarConfig","readingConfig","getConfigById","id","c"],"mappings":";;;;;;;;;;;;;;;;;;AA4DO,MAAMA,IAA+B;AAAA,EAC1CC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AACF;AAKO,SAASC,EAAcC,GAAwC;AACpE,SAAOX,EAAW,KAAK,CAAAY,MAAKA,EAAE,OAAOD,CAAE;AACzC;"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["/**\n * @syllst/th\n *\n * Thai SYLLST content package.\n * Contains all Thai language syllabi: alphabet, vowels-tones, numbers,\n * essentials, food, travel, dialogue, grammar, and reading.\n */\n\n// Re-export all syllabi\nexport * as alphabet from './syllabi/alphabet/index.js';\nexport * as vowelsTones from './syllabi/vowels-tones/index.js';\nexport * as numbers from './syllabi/numbers/index.js';\nexport * as essentials from './syllabi/essentials/index.js';\nexport * as food from './syllabi/food/index.js';\nexport * as travel from './syllabi/travel/index.js';\nexport * as dialogue from './syllabi/dialogue/index.js';\nexport * as grammar from './syllabi/grammar/index.js';\nexport * as reading from './syllabi/reading/index.js';\n\n// Re-export configs for convenience\nexport { config as alphabetConfig } from './syllabi/alphabet/index.js';\nexport { config as vowelsTonesConfig } from './syllabi/vowels-tones/index.js';\nexport { config as numbersConfig } from './syllabi/numbers/index.js';\nexport { config as essentialsConfig } from './syllabi/essentials/index.js';\nexport { config as foodConfig } from './syllabi/food/index.js';\nexport { config as travelConfig } from './syllabi/travel/index.js';\nexport { config as dialogueConfig } from './syllabi/dialogue/index.js';\nexport { config as grammarConfig } from './syllabi/grammar/index.js';\nexport { config as readingConfig } from './syllabi/reading/index.js';\n\n// Re-export loaders for convenience\nexport { loader as alphabetLoader } from './syllabi/alphabet/index.js';\nexport { loader as vowelsTonesLoader } from './syllabi/vowels-tones/index.js';\nexport { loader as numbersLoader } from './syllabi/numbers/index.js';\nexport { loader as essentialsLoader } from './syllabi/essentials/index.js';\nexport { loader as foodLoader } from './syllabi/food/index.js';\nexport { loader as travelLoader } from './syllabi/travel/index.js';\nexport { loader as dialogueLoader } from './syllabi/dialogue/index.js';\nexport { loader as grammarLoader } from './syllabi/grammar/index.js';\nexport { loader as readingLoader } from './syllabi/reading/index.js';\n\n// Re-export types from local shared\nexport type { SyllabusConfig, ContentLoader, LoadedLesson } from './shared.js';\n\n// Export all configs as array for iteration\nimport { config as alphabetConfig } from './syllabi/alphabet/index.js';\nimport { config as vowelsTonesConfig } from './syllabi/vowels-tones/index.js';\nimport { config as numbersConfig } from './syllabi/numbers/index.js';\nimport { config as essentialsConfig } from './syllabi/essentials/index.js';\nimport { config as foodConfig } from './syllabi/food/index.js';\nimport { config as travelConfig } from './syllabi/travel/index.js';\nimport { config as dialogueConfig } from './syllabi/dialogue/index.js';\nimport { config as grammarConfig } from './syllabi/grammar/index.js';\nimport { config as readingConfig } from './syllabi/reading/index.js';\n\nimport type { SyllabusConfig } from './shared.js';\n\n/**\n * All Thai syllabi configurations\n */\nexport const allConfigs: SyllabusConfig[] = [\n alphabetConfig,\n vowelsTonesConfig,\n numbersConfig,\n essentialsConfig,\n foodConfig,\n travelConfig,\n dialogueConfig,\n grammarConfig,\n readingConfig,\n];\n\n/**\n * Get a syllabus config by ID\n */\nexport function getConfigById(id: string): SyllabusConfig | undefined {\n return allConfigs.find(c => c.id === id);\n}\n"],"names":["allConfigs","alphabetConfig","vowelsTonesConfig","numbersConfig","essentialsConfig","foodConfig","travelConfig","dialogueConfig","grammarConfig","readingConfig","getConfigById","id","c"],"mappings":";;;;;;;;;;;;;;;;;;AA4DO,MAAMA,IAA+B;AAAA,EAC1CC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AACF;AAKO,SAASC,EAAcC,GAAwC;AACpE,SAAOX,EAAW,KAAK,CAAAY,MAAKA,EAAE,OAAOD,CAAE;AACzC;"}
@@ -0,0 +1,27 @@
1
+ function e(o, s) {
2
+ return {
3
+ config: o,
4
+ async loadLesson(n) {
5
+ if (n < 1 || n > o.lessonCount)
6
+ throw new Error(`Lesson ${n} not found. Valid range: 1-${o.lessonCount}`);
7
+ const t = await s(n);
8
+ return {
9
+ number: n,
10
+ rawContent: t.default
11
+ };
12
+ },
13
+ async loadAllLessons() {
14
+ const n = [];
15
+ for (let t = 1; t <= o.lessonCount; t++)
16
+ n.push(await this.loadLesson(t));
17
+ return n;
18
+ },
19
+ getAvailableLessons() {
20
+ return Array.from({ length: o.lessonCount }, (n, t) => t + 1);
21
+ }
22
+ };
23
+ }
24
+ export {
25
+ e as c
26
+ };
27
+ //# sourceMappingURL=shared-DADMaTE7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-DADMaTE7.js","sources":["../src/shared.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., \"th-alphabet\") */\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., \"th-TH\") */\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"],"names":["createContentLoader","config","loadLessonMDX","lessonNumber","module","lessons","i","_"],"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;"}
@@ -1,9 +1,10 @@
1
- import { c as o, g as l, a as e, b as n, l as d } from "../../index-4uNMctdq.js";
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-UR6nfcgF.js";
2
3
  export {
3
- o as config,
4
- l as getAvailableLessons,
5
- e as loadAllLessons,
6
- n as loadLesson,
4
+ l as config,
5
+ e as getAvailableLessons,
6
+ n as loadAllLessons,
7
+ r as loadLesson,
7
8
  d as loader
8
9
  };
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1,7 +1,7 @@
1
- import { SyllabusConfig, ContentLoader } from '@syllst/content-shared';
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
2
  export declare const config: SyllabusConfig;
3
3
  export declare const loader: ContentLoader;
4
- export declare const loadLesson: (lessonNumber: number) => Promise<import('@syllst/content-shared').LoadedLesson | null>;
5
- export declare const loadAllLessons: () => Promise<import('@syllst/content-shared').LoadedLesson[]>;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
6
  export declare const getAvailableLessons: () => number[];
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import "../../skills-hcn-pGD0.js";
2
- import { c as l, g as e, a as n, b as r, l as d } from "../../index-ByS0o5dz.js";
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-C7ozTvkd.js";
3
3
  export {
4
4
  l as config,
5
5
  e as getAvailableLessons,
@@ -1,7 +1,7 @@
1
- import { SyllabusConfig, ContentLoader } from '@syllst/content-shared';
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
2
  export declare const config: SyllabusConfig;
3
3
  export declare const loader: ContentLoader;
4
- export declare const loadLesson: (lessonNumber: number) => Promise<import('@syllst/content-shared').LoadedLesson | null>;
5
- export declare const loadAllLessons: () => Promise<import('@syllst/content-shared').LoadedLesson[]>;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
6
  export declare const getAvailableLessons: () => number[];
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import "../../skills-hcn-pGD0.js";
2
- import { c as l, g as e, a as n, b as r, l as d } from "../../index-Bjym0crS.js";
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-CN6WbetG.js";
3
3
  export {
4
4
  l as config,
5
5
  e as getAvailableLessons,
@@ -1,7 +1,7 @@
1
- import { SyllabusConfig, ContentLoader } from '@syllst/content-shared';
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
2
  export declare const config: SyllabusConfig;
3
3
  export declare const loader: ContentLoader;
4
- export declare const loadLesson: (lessonNumber: number) => Promise<import('@syllst/content-shared').LoadedLesson | null>;
5
- export declare const loadAllLessons: () => Promise<import('@syllst/content-shared').LoadedLesson[]>;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
6
  export declare const getAvailableLessons: () => number[];
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import "../../skills-hcn-pGD0.js";
2
- import { c as l, g as e, a as n, b as r, l as d } from "../../index-C9VnG7dT.js";
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-B4ln70TK.js";
3
3
  export {
4
4
  l as config,
5
5
  e as getAvailableLessons,
@@ -1,7 +1,7 @@
1
- import { SyllabusConfig, ContentLoader } from '@syllst/content-shared';
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
2
  export declare const config: SyllabusConfig;
3
3
  export declare const loader: ContentLoader;
4
- export declare const loadLesson: (lessonNumber: number) => Promise<import('@syllst/content-shared').LoadedLesson | null>;
5
- export declare const loadAllLessons: () => Promise<import('@syllst/content-shared').LoadedLesson[]>;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
6
  export declare const getAvailableLessons: () => number[];
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import "../../skills-hcn-pGD0.js";
2
- import { c as l, g as e, a as n, b as r, l as d } from "../../index-BM-LWlCm.js";
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-C_h-XZwJ.js";
3
3
  export {
4
4
  l as config,
5
5
  e as getAvailableLessons,
@@ -1,7 +1,7 @@
1
- import { SyllabusConfig, ContentLoader } from '@syllst/content-shared';
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
2
  export declare const config: SyllabusConfig;
3
3
  export declare const loader: ContentLoader;
4
- export declare const loadLesson: (lessonNumber: number) => Promise<import('@syllst/content-shared').LoadedLesson | null>;
5
- export declare const loadAllLessons: () => Promise<import('@syllst/content-shared').LoadedLesson[]>;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
6
  export declare const getAvailableLessons: () => number[];
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import "../../skills-hcn-pGD0.js";
2
- import { c as l, g as e, a as n, b as r, l as d } from "../../index-BuKXw7-Z.js";
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-IsqLGlvo.js";
3
3
  export {
4
4
  l as config,
5
5
  e as getAvailableLessons,
@@ -1,7 +1,7 @@
1
- import { SyllabusConfig, ContentLoader } from '@syllst/content-shared';
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
2
  export declare const config: SyllabusConfig;
3
3
  export declare const loader: ContentLoader;
4
- export declare const loadLesson: (lessonNumber: number) => Promise<import('@syllst/content-shared').LoadedLesson | null>;
5
- export declare const loadAllLessons: () => Promise<import('@syllst/content-shared').LoadedLesson[]>;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
6
  export declare const getAvailableLessons: () => number[];
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import "../../skills-hcn-pGD0.js";
2
- import { c as l, g as e, a as n, b as r, l as d } from "../../index-CkHd3Fal.js";
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-tgCat6ZW.js";
3
3
  export {
4
4
  l as config,
5
5
  e as getAvailableLessons,
@@ -1,7 +1,7 @@
1
- import { SyllabusConfig, ContentLoader } from '@syllst/content-shared';
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
2
  export declare const config: SyllabusConfig;
3
3
  export declare const loader: ContentLoader;
4
- export declare const loadLesson: (lessonNumber: number) => Promise<import('@syllst/content-shared').LoadedLesson | null>;
5
- export declare const loadAllLessons: () => Promise<import('@syllst/content-shared').LoadedLesson[]>;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
6
  export declare const getAvailableLessons: () => number[];
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import "../../skills-hcn-pGD0.js";
2
- import { c as l, g as e, a as n, b as r, l as d } from "../../index-CPQkjFjV.js";
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-iPpqghJQ.js";
3
3
  export {
4
4
  l as config,
5
5
  e as getAvailableLessons,
@@ -1,7 +1,7 @@
1
- import { SyllabusConfig, ContentLoader } from '@syllst/content-shared';
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
2
  export declare const config: SyllabusConfig;
3
3
  export declare const loader: ContentLoader;
4
- export declare const loadLesson: (lessonNumber: number) => Promise<import('@syllst/content-shared').LoadedLesson | null>;
5
- export declare const loadAllLessons: () => Promise<import('@syllst/content-shared').LoadedLesson[]>;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
6
  export declare const getAvailableLessons: () => number[];
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import "../../skills-hcn-pGD0.js";
2
- import { c as l, g as e, a as n, b as r, l as d } from "../../index-DBkPBXe2.js";
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-Dv-BsrA5.js";
3
3
  export {
4
4
  l as config,
5
5
  e as getAvailableLessons,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polyglot-bundles/th",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Thai syllabus content - all Thai language syllabi in one package",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -52,13 +52,13 @@
52
52
  "src/syllabi/**/*.mdx"
53
53
  ],
54
54
  "dependencies": {
55
- "@polyglot-bundles/th-lang": "0.1.5"
55
+ "@polyglot-bundles/th-lang": "0.2.1"
56
56
  },
57
57
  "devDependencies": {
58
58
  "tsx": "^4.7.0",
59
59
  "vite": "^5.4.0",
60
60
  "vite-plugin-dts": "^4.0.0",
61
- "@polyglot-bundles/content-shared": "0.1.1"
61
+ "@polyglot-bundles/content-shared": "0.1.4"
62
62
  },
63
63
  "peerDependencies": {
64
64
  "@syllst/core": "^0.6.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-4uNMctdq.js","sources":["../src/shared.ts","../src/syllabi/alphabet/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., \"th-alphabet\") */\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., \"th-TH\") */\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 * Thai Alphabet syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '../../shared.js';\n\nexport const config: SyllabusConfig = {\n id: 'th-alphabet',\n title: 'อักษรไทย (Thai Alphabet)',\n description: 'Learn the Thai writing system - consonants, vowels, and tone marks',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 12,\n difficulty: 'beginner',\n cefrLevel: 'A1',\n icon: 'alphabet',\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 case 11: return import('./lessons/lesson-11.mdx?raw');\n case 12: return import('./lessons/lesson-12.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;ACzGO,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAI,aAAO,OAAO,yBAA6B;AAAA,IACpD,KAAK;AAAI,aAAO,OAAO,yBAA6B;AAAA,IACpD,KAAK;AAAI,aAAO,OAAO,yBAA6B;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;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BM-LWlCm.js","sources":["../src/syllabi/grammar/index.ts"],"sourcesContent":["/**\n * Thai Grammar syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '@syllst/content-shared';\n\nexport const config: SyllabusConfig = {\n id: 'th-grammar',\n title: 'ไวยากรณ์ไทย (Thai Grammar)',\n description: 'Essential Thai grammar patterns',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 8,\n difficulty: 'intermediate',\n cefrLevel: 'B1',\n icon: 'grammar',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Bjym0crS.js","sources":["../src/syllabi/essentials/index.ts"],"sourcesContent":["/**\n * Thai Essentials syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '@syllst/content-shared';\n\nexport const config: SyllabusConfig = {\n id: 'th-essentials',\n title: 'คำพื้นฐาน (Thai Essentials)',\n description: 'Essential phrases and greetings for everyday use',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 6,\n difficulty: 'beginner',\n cefrLevel: 'A1',\n icon: 'dialogue',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BuKXw7-Z.js","sources":["../src/syllabi/numbers/index.ts"],"sourcesContent":["/**\n * Thai Numbers syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '@syllst/content-shared';\n\nexport const config: SyllabusConfig = {\n id: 'th-numbers',\n title: 'ตัวเลขไทย (Thai Numbers)',\n description: 'Learn Thai numerals and counting',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 5,\n difficulty: 'beginner',\n cefrLevel: 'A1',\n icon: 'numbers',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-ByS0o5dz.js","sources":["../src/syllabi/dialogue/index.ts"],"sourcesContent":["/**\n * Thai Dialogue syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '@syllst/content-shared';\n\nexport const config: SyllabusConfig = {\n id: 'th-dialogue',\n title: 'บทสนทนา (Thai Dialogue)',\n description: 'Practical conversations for everyday situations',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 8,\n difficulty: 'intermediate',\n cefrLevel: 'A2',\n icon: 'dialogue',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-C9VnG7dT.js","sources":["../src/syllabi/food/index.ts"],"sourcesContent":["/**\n * Thai Food syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '@syllst/content-shared';\n\nexport const config: SyllabusConfig = {\n id: 'th-food',\n title: 'อาหารไทย (Thai Food)',\n description: 'Food vocabulary and ordering at restaurants',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 8,\n difficulty: 'beginner',\n cefrLevel: 'A2',\n icon: 'food',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CPQkjFjV.js","sources":["../src/syllabi/travel/index.ts"],"sourcesContent":["/**\n * Thai Travel syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '@syllst/content-shared';\n\nexport const config: SyllabusConfig = {\n id: 'th-travel',\n title: 'การเดินทาง (Thai Travel)',\n description: 'Travel vocabulary and directions',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 7,\n difficulty: 'beginner',\n cefrLevel: 'A2',\n icon: 'travel',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CkHd3Fal.js","sources":["../src/syllabi/reading/index.ts"],"sourcesContent":["/**\n * Thai Reading syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '@syllst/content-shared';\n\nexport const config: SyllabusConfig = {\n id: 'th-reading',\n title: 'การอ่าน (Thai Reading)',\n description: 'Reading practice with Thai texts',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 10,\n difficulty: 'intermediate',\n cefrLevel: 'B1',\n icon: 'reading',\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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAI,aAAO,OAAO,yBAA6B;AAAA,IACpD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DBkPBXe2.js","sources":["../src/syllabi/vowels-tones/index.ts"],"sourcesContent":["/**\n * Thai Vowels & Tones syllabus\n */\n\nimport { createContentLoader, type SyllabusConfig, type ContentLoader } from '@syllst/content-shared';\n\nexport const config: SyllabusConfig = {\n id: 'th-vowels-tones',\n title: 'สระและวรรณยุกต์ (Vowels & Tones)',\n description: 'Master Thai vowels and the five tones',\n language: 'th',\n locale: 'th-TH',\n lessonCount: 8,\n difficulty: 'beginner',\n cefrLevel: 'A1',\n icon: 'alphabet',\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 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":["config","loadLessonMDX","lessonNumber","loader","createContentLoader","loadLesson","loadAllLessons","getAvailableLessons"],"mappings":";AAMO,MAAMA,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,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD,KAAK;AAAG,aAAO,OAAO,yBAA6B;AAAA,IACnD;AAAS,YAAM,IAAI,MAAM,UAAUA,CAAY,YAAY;AAAA,EAAA;AAE/D;AAEO,MAAMC,IAAwBC,EAAoBJ,GAAQC,CAAa,GACjEI,IAAaF,EAAO,WAAW,KAAKA,CAAM,GAC1CG,IAAiBH,EAAO,eAAe,KAAKA,CAAM,GAClDI,IAAsBJ,EAAO,oBAAoB,KAAKA,CAAM;;;;;;;;"}
@@ -1,244 +0,0 @@
1
- import { buildLessonFromMDX as t } from "@syllst/processor";
2
- function s(r, a) {
3
- return {
4
- config: r,
5
- async loadLesson(o) {
6
- if (o < 1 || o > r.lessonCount)
7
- return null;
8
- try {
9
- const { default: e } = await a(o), n = await t(e);
10
- return {
11
- lessonNumber: o,
12
- ast: n,
13
- rawContent: e
14
- };
15
- } catch (e) {
16
- return console.error(`Failed to load lesson ${o}:`, e), null;
17
- }
18
- },
19
- async loadAllLessons() {
20
- const o = [];
21
- for (let e = 1; e <= r.lessonCount; e++) {
22
- const n = await this.loadLesson(e);
23
- n && o.push(n);
24
- }
25
- return o;
26
- },
27
- getAvailableLessons() {
28
- return Array.from({ length: r.lessonCount }, (o, e) => e + 1);
29
- }
30
- };
31
- }
32
- const i = [
33
- {
34
- id: "character",
35
- name: "Character Skills",
36
- description: "Skills related to recognizing, writing, and producing characters",
37
- skills: [
38
- {
39
- id: "character-recognition",
40
- name: "Character Recognition",
41
- description: "Identify a character from its visual form",
42
- category: "character"
43
- },
44
- {
45
- id: "character-production",
46
- name: "Character Production",
47
- description: "Write or produce a character from memory",
48
- category: "character"
49
- },
50
- {
51
- id: "character-sound-mapping",
52
- name: "Character-Sound Mapping",
53
- description: "Map a character to its pronunciation",
54
- category: "character"
55
- },
56
- {
57
- id: "character-name-recall",
58
- name: "Character Name Recall",
59
- description: "Recall the name or mnemonic of a character",
60
- category: "character"
61
- },
62
- {
63
- id: "character-class-identification",
64
- name: "Character Class Identification",
65
- description: "Identify the class/category of a character (e.g., consonant class)",
66
- category: "character"
67
- }
68
- ]
69
- },
70
- {
71
- id: "phonology",
72
- name: "Phonology Skills",
73
- description: "Skills related to sound systems, tone rules, and pronunciation",
74
- skills: [
75
- {
76
- id: "tone-rule-application",
77
- name: "Tone Rule Application",
78
- description: "Apply tone rules to determine correct pronunciation",
79
- category: "phonology"
80
- },
81
- {
82
- id: "tone-perception",
83
- name: "Tone Perception",
84
- description: "Distinguish between different tones in spoken language",
85
- category: "phonology"
86
- },
87
- {
88
- id: "tone-production",
89
- name: "Tone Production",
90
- description: "Produce correct tones in speech",
91
- category: "phonology"
92
- },
93
- {
94
- id: "syllable-analysis",
95
- name: "Syllable Analysis",
96
- description: "Break words into syllables and identify syllable types",
97
- category: "phonology"
98
- },
99
- {
100
- id: "sound-change-recognition",
101
- name: "Sound Change Recognition",
102
- description: "Recognize phonological processes like assimilation or elision",
103
- category: "phonology"
104
- }
105
- ]
106
- },
107
- {
108
- id: "vocabulary",
109
- name: "Vocabulary Skills",
110
- description: "Skills related to word knowledge and usage",
111
- skills: [
112
- {
113
- id: "word-recognition",
114
- name: "Word Recognition",
115
- description: "Recognize a word and recall its meaning",
116
- category: "vocabulary"
117
- },
118
- {
119
- id: "word-production",
120
- name: "Word Production",
121
- description: "Produce the correct word for a given meaning",
122
- category: "vocabulary"
123
- },
124
- {
125
- id: "word-pronunciation",
126
- name: "Word Pronunciation",
127
- description: "Pronounce a word correctly (transcription recall)",
128
- category: "vocabulary"
129
- },
130
- {
131
- id: "word-spelling",
132
- name: "Word Spelling",
133
- description: "Spell a word correctly in the target script",
134
- category: "vocabulary"
135
- }
136
- ]
137
- },
138
- {
139
- id: "grammar",
140
- name: "Grammar Skills",
141
- description: "Skills related to grammatical patterns and sentence construction",
142
- skills: [
143
- {
144
- id: "pattern-recognition",
145
- name: "Pattern Recognition",
146
- description: "Recognize a grammatical pattern in context",
147
- category: "grammar"
148
- },
149
- {
150
- id: "pattern-application",
151
- name: "Pattern Application",
152
- description: "Apply a grammatical pattern to construct sentences",
153
- category: "grammar"
154
- },
155
- {
156
- id: "particle-usage",
157
- name: "Particle Usage",
158
- description: "Use grammatical particles correctly",
159
- category: "grammar"
160
- },
161
- {
162
- id: "word-order",
163
- name: "Word Order",
164
- description: "Arrange words in the correct order",
165
- category: "grammar"
166
- }
167
- ]
168
- },
169
- {
170
- id: "reading",
171
- name: "Reading Skills",
172
- description: "Skills related to reading comprehension",
173
- skills: [
174
- {
175
- id: "text-decoding",
176
- name: "Text Decoding",
177
- description: "Read and decode text in the target script",
178
- category: "reading"
179
- },
180
- {
181
- id: "reading-comprehension",
182
- name: "Reading Comprehension",
183
- description: "Understand the meaning of a passage",
184
- category: "reading"
185
- }
186
- ]
187
- },
188
- {
189
- id: "writing",
190
- name: "Writing Skills",
191
- description: "Skills related to the writing system",
192
- skills: [
193
- {
194
- id: "stroke-order",
195
- name: "Stroke Order",
196
- description: "Write characters with correct stroke order",
197
- category: "writing"
198
- },
199
- {
200
- id: "vowel-positioning",
201
- name: "Vowel Positioning",
202
- description: "Place vowel marks in the correct position relative to consonants",
203
- category: "writing"
204
- },
205
- {
206
- id: "tone-mark-placement",
207
- name: "Tone Mark Placement",
208
- description: "Place tone marks correctly on syllables",
209
- category: "writing"
210
- }
211
- ]
212
- },
213
- {
214
- id: "conversation",
215
- name: "Conversation Skills",
216
- description: "Skills related to dialogue and conversation",
217
- skills: [
218
- {
219
- id: "dialogue-comprehension",
220
- name: "Dialogue Comprehension",
221
- description: "Understand a dialogue exchange",
222
- category: "conversation"
223
- },
224
- {
225
- id: "polite-register",
226
- name: "Polite Register",
227
- description: "Use the appropriate level of politeness",
228
- category: "conversation"
229
- },
230
- {
231
- id: "situational-response",
232
- name: "Situational Response",
233
- description: "Choose the correct response for a given situation",
234
- category: "conversation"
235
- }
236
- ]
237
- }
238
- ];
239
- i.flatMap((r) => r.skills.map((a) => a.id));
240
- Object.fromEntries(i.flatMap((r) => r.skills.map((a) => [a.id, a])));
241
- export {
242
- s as c
243
- };
244
- //# sourceMappingURL=skills-hcn-pGD0.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills-hcn-pGD0.js","sources":["../../../../node_modules/.pnpm/@syllst+content-shared@1.0.0/node_modules/@syllst/content-shared/dist/loader.js","../../../../node_modules/.pnpm/@syllst+content-shared@1.0.0/node_modules/@syllst/content-shared/dist/skills.js"],"sourcesContent":["/**\n * MDX content loading utilities\n */\nimport { buildLessonFromMDX } from '@syllst/processor';\n/**\n * Creates a content loader for a syllabus package.\n *\n * @param config - Syllabus configuration\n * @param lessonLoader - Function that imports MDX content for a lesson number\n * @returns ContentLoader implementation\n *\n * @example\n * ```ts\n * const loader = createContentLoader(\n * { id: 'th-alphabet', title: 'Thai Alphabet', ... },\n * async (n) => import(`./lessons/lesson-${n.toString().padStart(2, '0')}.mdx?raw`)\n * );\n * ```\n */\nexport function createContentLoader(config, lessonLoader) {\n return {\n config,\n async loadLesson(lessonNumber) {\n if (lessonNumber < 1 || lessonNumber > config.lessonCount) {\n return null;\n }\n try {\n const { default: rawContent } = await lessonLoader(lessonNumber);\n const ast = await buildLessonFromMDX(rawContent);\n return {\n lessonNumber,\n ast,\n rawContent,\n };\n }\n catch (error) {\n console.error(`Failed to load lesson ${lessonNumber}:`, error);\n return null;\n }\n },\n async loadAllLessons() {\n const lessons = [];\n for (let i = 1; i <= config.lessonCount; i++) {\n const lesson = await this.loadLesson(i);\n if (lesson) {\n lessons.push(lesson);\n }\n }\n return lessons;\n },\n getAvailableLessons() {\n return Array.from({ length: config.lessonCount }, (_, i) => i + 1);\n },\n };\n}\n/**\n * Extracts vocabulary items from a lesson AST.\n */\nexport function extractVocabularyItems(lesson) {\n const items = [];\n function walk(node) {\n if (!node || typeof node !== 'object')\n return;\n const n = node;\n if (n.type === 'vocabularyItem') {\n items.push({\n id: n.id,\n word: n.word,\n translation: n.translation,\n romanization: n.romanization,\n });\n }\n if (Array.isArray(n.children)) {\n n.children.forEach(walk);\n }\n }\n walk(lesson);\n return items;\n}\n/**\n * Extracts character items from a lesson AST.\n */\nexport function extractCharacterItems(lesson) {\n const items = [];\n function walk(node) {\n if (!node || typeof node !== 'object')\n return;\n const n = node;\n if (n.type === 'characterItem') {\n items.push({\n id: n.id,\n char: n.char,\n name: n.name,\n romanization: (typeof n.romanization === 'string' ? n.romanization : undefined),\n charType: n.charType,\n });\n }\n if (Array.isArray(n.children)) {\n n.children.forEach(walk);\n }\n }\n walk(lesson);\n return items;\n}\n/**\n * Extracts exercise skill information from a lesson AST.\n */\nexport function extractExerciseSkills(lesson) {\n const items = [];\n function walk(node) {\n if (!node || typeof node !== 'object')\n return;\n const n = node;\n if (n.type === 'exercise') {\n items.push({\n id: n.id,\n skill: n.skill,\n tests: n.tests,\n objectiveId: n.objectiveId,\n exerciseType: n.exerciseType,\n });\n }\n if (Array.isArray(n.children)) {\n n.children.forEach(walk);\n }\n }\n walk(lesson);\n return items;\n}\n/**\n * Extracts phonological rule nodes from a lesson AST.\n */\nexport function extractPhonologicalRules(lesson) {\n const items = [];\n function walk(node) {\n if (!node || typeof node !== 'object')\n return;\n const n = node;\n if (n.type === 'phonologicalRule') {\n const children = n.children || [];\n const conditionCount = children.filter((c) => c?.type === 'ruleCondition').length;\n items.push({\n id: n.id,\n title: n.title,\n ruleType: n.ruleType,\n conditionCount,\n });\n }\n if (Array.isArray(n.children)) {\n n.children.forEach(walk);\n }\n }\n walk(lesson);\n return items;\n}\n//# sourceMappingURL=loader.js.map","/**\n * Skill Taxonomy for Language Learning\n *\n * Defines the standard skill categories and individual skills\n * that can be tracked across exercises and learning objectives.\n * These skill IDs are used in exercise `skill` fields and\n * learning objective `skill` fields to enable granular tracking.\n */\n/**\n * Core skill categories for language learning.\n * Language-specific packages can extend with additional skills.\n */\nexport const SKILL_CATEGORIES = [\n {\n id: 'character',\n name: 'Character Skills',\n description: 'Skills related to recognizing, writing, and producing characters',\n skills: [\n {\n id: 'character-recognition',\n name: 'Character Recognition',\n description: 'Identify a character from its visual form',\n category: 'character',\n },\n {\n id: 'character-production',\n name: 'Character Production',\n description: 'Write or produce a character from memory',\n category: 'character',\n },\n {\n id: 'character-sound-mapping',\n name: 'Character-Sound Mapping',\n description: 'Map a character to its pronunciation',\n category: 'character',\n },\n {\n id: 'character-name-recall',\n name: 'Character Name Recall',\n description: 'Recall the name or mnemonic of a character',\n category: 'character',\n },\n {\n id: 'character-class-identification',\n name: 'Character Class Identification',\n description: 'Identify the class/category of a character (e.g., consonant class)',\n category: 'character',\n },\n ],\n },\n {\n id: 'phonology',\n name: 'Phonology Skills',\n description: 'Skills related to sound systems, tone rules, and pronunciation',\n skills: [\n {\n id: 'tone-rule-application',\n name: 'Tone Rule Application',\n description: 'Apply tone rules to determine correct pronunciation',\n category: 'phonology',\n },\n {\n id: 'tone-perception',\n name: 'Tone Perception',\n description: 'Distinguish between different tones in spoken language',\n category: 'phonology',\n },\n {\n id: 'tone-production',\n name: 'Tone Production',\n description: 'Produce correct tones in speech',\n category: 'phonology',\n },\n {\n id: 'syllable-analysis',\n name: 'Syllable Analysis',\n description: 'Break words into syllables and identify syllable types',\n category: 'phonology',\n },\n {\n id: 'sound-change-recognition',\n name: 'Sound Change Recognition',\n description: 'Recognize phonological processes like assimilation or elision',\n category: 'phonology',\n },\n ],\n },\n {\n id: 'vocabulary',\n name: 'Vocabulary Skills',\n description: 'Skills related to word knowledge and usage',\n skills: [\n {\n id: 'word-recognition',\n name: 'Word Recognition',\n description: 'Recognize a word and recall its meaning',\n category: 'vocabulary',\n },\n {\n id: 'word-production',\n name: 'Word Production',\n description: 'Produce the correct word for a given meaning',\n category: 'vocabulary',\n },\n {\n id: 'word-pronunciation',\n name: 'Word Pronunciation',\n description: 'Pronounce a word correctly (transcription recall)',\n category: 'vocabulary',\n },\n {\n id: 'word-spelling',\n name: 'Word Spelling',\n description: 'Spell a word correctly in the target script',\n category: 'vocabulary',\n },\n ],\n },\n {\n id: 'grammar',\n name: 'Grammar Skills',\n description: 'Skills related to grammatical patterns and sentence construction',\n skills: [\n {\n id: 'pattern-recognition',\n name: 'Pattern Recognition',\n description: 'Recognize a grammatical pattern in context',\n category: 'grammar',\n },\n {\n id: 'pattern-application',\n name: 'Pattern Application',\n description: 'Apply a grammatical pattern to construct sentences',\n category: 'grammar',\n },\n {\n id: 'particle-usage',\n name: 'Particle Usage',\n description: 'Use grammatical particles correctly',\n category: 'grammar',\n },\n {\n id: 'word-order',\n name: 'Word Order',\n description: 'Arrange words in the correct order',\n category: 'grammar',\n },\n ],\n },\n {\n id: 'reading',\n name: 'Reading Skills',\n description: 'Skills related to reading comprehension',\n skills: [\n {\n id: 'text-decoding',\n name: 'Text Decoding',\n description: 'Read and decode text in the target script',\n category: 'reading',\n },\n {\n id: 'reading-comprehension',\n name: 'Reading Comprehension',\n description: 'Understand the meaning of a passage',\n category: 'reading',\n },\n ],\n },\n {\n id: 'writing',\n name: 'Writing Skills',\n description: 'Skills related to the writing system',\n skills: [\n {\n id: 'stroke-order',\n name: 'Stroke Order',\n description: 'Write characters with correct stroke order',\n category: 'writing',\n },\n {\n id: 'vowel-positioning',\n name: 'Vowel Positioning',\n description: 'Place vowel marks in the correct position relative to consonants',\n category: 'writing',\n },\n {\n id: 'tone-mark-placement',\n name: 'Tone Mark Placement',\n description: 'Place tone marks correctly on syllables',\n category: 'writing',\n },\n ],\n },\n {\n id: 'conversation',\n name: 'Conversation Skills',\n description: 'Skills related to dialogue and conversation',\n skills: [\n {\n id: 'dialogue-comprehension',\n name: 'Dialogue Comprehension',\n description: 'Understand a dialogue exchange',\n category: 'conversation',\n },\n {\n id: 'polite-register',\n name: 'Polite Register',\n description: 'Use the appropriate level of politeness',\n category: 'conversation',\n },\n {\n id: 'situational-response',\n name: 'Situational Response',\n description: 'Choose the correct response for a given situation',\n category: 'conversation',\n },\n ],\n },\n];\n/**\n * Flat list of all skill IDs for quick lookup\n */\nexport const ALL_SKILL_IDS = SKILL_CATEGORIES.flatMap((cat) => cat.skills.map((s) => s.id));\n/**\n * Map from skill ID to Skill object\n */\nexport const SKILL_MAP = Object.fromEntries(SKILL_CATEGORIES.flatMap((cat) => cat.skills.map((s) => [s.id, s])));\n/**\n * Check if a skill ID is valid (exists in the taxonomy)\n */\nexport function isValidSkillId(skillId) {\n return skillId in SKILL_MAP;\n}\n/**\n * Get skill info by ID, returns undefined if not found\n */\nexport function getSkill(skillId) {\n return SKILL_MAP[skillId];\n}\n/**\n * Get all skills in a category\n */\nexport function getSkillsByCategory(categoryId) {\n const category = SKILL_CATEGORIES.find((c) => c.id === categoryId);\n return category?.skills ?? [];\n}\n//# sourceMappingURL=skills.js.map"],"names":["createContentLoader","config","lessonLoader","lessonNumber","rawContent","ast","buildLessonFromMDX","error","lessons","i","lesson","_","SKILL_CATEGORIES","cat","s"],"mappings":";AAmBO,SAASA,EAAoBC,GAAQC,GAAc;AACtD,SAAO;AAAA,IACH,QAAAD;AAAA,IACA,MAAM,WAAWE,GAAc;AAC3B,UAAIA,IAAe,KAAKA,IAAeF,EAAO;AAC1C,eAAO;AAEX,UAAI;AACA,cAAM,EAAE,SAASG,EAAU,IAAK,MAAMF,EAAaC,CAAY,GACzDE,IAAM,MAAMC,EAAmBF,CAAU;AAC/C,eAAO;AAAA,UACH,cAAAD;AAAA,UACA,KAAAE;AAAA,UACA,YAAAD;AAAA,QACpB;AAAA,MACY,SACOG,GAAO;AACV,uBAAQ,MAAM,yBAAyBJ,CAAY,KAAKI,CAAK,GACtD;AAAA,MACX;AAAA,IACJ;AAAA,IACA,MAAM,iBAAiB;AACnB,YAAMC,IAAU,CAAA;AAChB,eAASC,IAAI,GAAGA,KAAKR,EAAO,aAAaQ,KAAK;AAC1C,cAAMC,IAAS,MAAM,KAAK,WAAWD,CAAC;AACtC,QAAIC,KACAF,EAAQ,KAAKE,CAAM;AAAA,MAE3B;AACA,aAAOF;AAAA,IACX;AAAA,IACA,sBAAsB;AAClB,aAAO,MAAM,KAAK,EAAE,QAAQP,EAAO,YAAW,GAAI,CAACU,GAAGF,MAAMA,IAAI,CAAC;AAAA,IACrE;AAAA,EACR;AACA;AC1CO,MAAMG,IAAmB;AAAA,EAC5B;AAAA,IACI,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACJ;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,IACA;AAAA,EACA;AAAA,EACI;AAAA,IACI,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACJ;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,IACA;AAAA,EACA;AAAA,EACI;AAAA,IACI,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACJ;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,IACA;AAAA,EACA;AAAA,EACI;AAAA,IACI,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACJ;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,IACA;AAAA,EACA;AAAA,EACI;AAAA,IACI,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACJ;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,IACA;AAAA,EACA;AAAA,EACI;AAAA,IACI,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACJ;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,IACA;AAAA,EACA;AAAA,EACI;AAAA,IACI,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,MACJ;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,MACY;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MAC1B;AAAA,IACA;AAAA,EACA;AACA;AAI6BA,EAAiB,QAAQ,CAACC,MAAQA,EAAI,OAAO,IAAI,CAACC,MAAMA,EAAE,EAAE,CAAC;AAIjE,OAAO,YAAYF,EAAiB,QAAQ,CAACC,MAAQA,EAAI,OAAO,IAAI,CAACC,MAAM,CAACA,EAAE,IAAIA,CAAC,CAAC,CAAC,CAAC;","x_google_ignoreList":[0,1]}