@syllst/th 0.2.3 → 0.3.11

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 (208) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.d.ts +21 -15
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +98 -59
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.umd.cjs +106 -0
  7. package/dist/index.umd.cjs.map +1 -0
  8. package/dist/syllabi/alphabet/index.d.ts +2 -5
  9. package/dist/syllabi/alphabet/index.d.ts.map +1 -0
  10. package/dist/syllabi/dialogue/index.d.ts +2 -5
  11. package/dist/syllabi/dialogue/index.d.ts.map +1 -0
  12. package/dist/syllabi/essentials/index.d.ts +2 -5
  13. package/dist/syllabi/essentials/index.d.ts.map +1 -0
  14. package/dist/syllabi/food/index.d.ts +2 -5
  15. package/dist/syllabi/food/index.d.ts.map +1 -0
  16. package/dist/syllabi/grammar/index.d.ts +2 -5
  17. package/dist/syllabi/grammar/index.d.ts.map +1 -0
  18. package/dist/syllabi/numbers/index.d.ts +2 -5
  19. package/dist/syllabi/numbers/index.d.ts.map +1 -0
  20. package/dist/syllabi/reading/index.d.ts +2 -5
  21. package/dist/syllabi/reading/index.d.ts.map +1 -0
  22. package/dist/syllabi/travel/index.d.ts +2 -5
  23. package/dist/syllabi/travel/index.d.ts.map +1 -0
  24. package/dist/syllabi/vowels-tones/index.d.ts +2 -5
  25. package/dist/syllabi/vowels-tones/index.d.ts.map +1 -0
  26. package/package.json +7 -5
  27. package/dist/index-BM-LWlCm.js +0 -52
  28. package/dist/index-BM-LWlCm.js.map +0 -1
  29. package/dist/index-Bjym0crS.js +0 -48
  30. package/dist/index-Bjym0crS.js.map +0 -1
  31. package/dist/index-BuKXw7-Z.js +0 -46
  32. package/dist/index-BuKXw7-Z.js.map +0 -1
  33. package/dist/index-ByS0o5dz.js +0 -52
  34. package/dist/index-ByS0o5dz.js.map +0 -1
  35. package/dist/index-C9VnG7dT.js +0 -52
  36. package/dist/index-C9VnG7dT.js.map +0 -1
  37. package/dist/index-CPQkjFjV.js +0 -50
  38. package/dist/index-CPQkjFjV.js.map +0 -1
  39. package/dist/index-CkHd3Fal.js +0 -56
  40. package/dist/index-CkHd3Fal.js.map +0 -1
  41. package/dist/index-DBkPBXe2.js +0 -52
  42. package/dist/index-DBkPBXe2.js.map +0 -1
  43. package/dist/index-DdRhLqkM.js +0 -82
  44. package/dist/index-DdRhLqkM.js.map +0 -1
  45. package/dist/lesson-01-B0wtSaSl.js +0 -118
  46. package/dist/lesson-01-B0wtSaSl.js.map +0 -1
  47. package/dist/lesson-01-C9vbUlA4.js +0 -138
  48. package/dist/lesson-01-C9vbUlA4.js.map +0 -1
  49. package/dist/lesson-01-CPmBFTe0.js +0 -132
  50. package/dist/lesson-01-CPmBFTe0.js.map +0 -1
  51. package/dist/lesson-01-Cc4Ws8eR.js +0 -158
  52. package/dist/lesson-01-Cc4Ws8eR.js.map +0 -1
  53. package/dist/lesson-01-Cm5k-m-9.js +0 -136
  54. package/dist/lesson-01-Cm5k-m-9.js.map +0 -1
  55. package/dist/lesson-01-DELblCNj.js +0 -97
  56. package/dist/lesson-01-DELblCNj.js.map +0 -1
  57. package/dist/lesson-01-Djl_72e7.js +0 -153
  58. package/dist/lesson-01-Djl_72e7.js.map +0 -1
  59. package/dist/lesson-01-LEHTeGQQ.js +0 -155
  60. package/dist/lesson-01-LEHTeGQQ.js.map +0 -1
  61. package/dist/lesson-01-ih_-OO_O.js +0 -111
  62. package/dist/lesson-01-ih_-OO_O.js.map +0 -1
  63. package/dist/lesson-02-B2aZrKUQ.js +0 -120
  64. package/dist/lesson-02-B2aZrKUQ.js.map +0 -1
  65. package/dist/lesson-02-BI1Vnwiz.js +0 -169
  66. package/dist/lesson-02-BI1Vnwiz.js.map +0 -1
  67. package/dist/lesson-02-BXbwEMaL.js +0 -180
  68. package/dist/lesson-02-BXbwEMaL.js.map +0 -1
  69. package/dist/lesson-02-CbJJ5Amt.js +0 -201
  70. package/dist/lesson-02-CbJJ5Amt.js.map +0 -1
  71. package/dist/lesson-02-DGrALAgG.js +0 -203
  72. package/dist/lesson-02-DGrALAgG.js.map +0 -1
  73. package/dist/lesson-02-DcMDDBDL.js +0 -116
  74. package/dist/lesson-02-DcMDDBDL.js.map +0 -1
  75. package/dist/lesson-02-Dk59HZWp.js +0 -222
  76. package/dist/lesson-02-Dk59HZWp.js.map +0 -1
  77. package/dist/lesson-02-L8oNhBej.js +0 -145
  78. package/dist/lesson-02-L8oNhBej.js.map +0 -1
  79. package/dist/lesson-02-VDOme3ES.js +0 -204
  80. package/dist/lesson-02-VDOme3ES.js.map +0 -1
  81. package/dist/lesson-03-9WioSe19.js +0 -196
  82. package/dist/lesson-03-9WioSe19.js.map +0 -1
  83. package/dist/lesson-03-BZutWzMD.js +0 -124
  84. package/dist/lesson-03-BZutWzMD.js.map +0 -1
  85. package/dist/lesson-03-Bj5hWZ9t.js +0 -152
  86. package/dist/lesson-03-Bj5hWZ9t.js.map +0 -1
  87. package/dist/lesson-03-CSIF5xRS.js +0 -181
  88. package/dist/lesson-03-CSIF5xRS.js.map +0 -1
  89. package/dist/lesson-03-CSKig363.js +0 -225
  90. package/dist/lesson-03-CSKig363.js.map +0 -1
  91. package/dist/lesson-03-DPJOG2M_.js +0 -138
  92. package/dist/lesson-03-DPJOG2M_.js.map +0 -1
  93. package/dist/lesson-03-DkjCuJ26.js +0 -237
  94. package/dist/lesson-03-DkjCuJ26.js.map +0 -1
  95. package/dist/lesson-03-DucbRMOQ.js +0 -171
  96. package/dist/lesson-03-DucbRMOQ.js.map +0 -1
  97. package/dist/lesson-03-MIne1PbH.js +0 -185
  98. package/dist/lesson-03-MIne1PbH.js.map +0 -1
  99. package/dist/lesson-04-0Pj_x1DU.js +0 -233
  100. package/dist/lesson-04-0Pj_x1DU.js.map +0 -1
  101. package/dist/lesson-04-B9h0p9kE.js +0 -190
  102. package/dist/lesson-04-B9h0p9kE.js.map +0 -1
  103. package/dist/lesson-04-BLuPI1-X.js +0 -216
  104. package/dist/lesson-04-BLuPI1-X.js.map +0 -1
  105. package/dist/lesson-04-CmDvofL4.js +0 -230
  106. package/dist/lesson-04-CmDvofL4.js.map +0 -1
  107. package/dist/lesson-04-DGKHK4LW.js +0 -178
  108. package/dist/lesson-04-DGKHK4LW.js.map +0 -1
  109. package/dist/lesson-04-DUcHZzsk.js +0 -218
  110. package/dist/lesson-04-DUcHZzsk.js.map +0 -1
  111. package/dist/lesson-04-DnVIXXk-.js +0 -141
  112. package/dist/lesson-04-DnVIXXk-.js.map +0 -1
  113. package/dist/lesson-04-FZnIE7tu.js +0 -187
  114. package/dist/lesson-04-FZnIE7tu.js.map +0 -1
  115. package/dist/lesson-04-ToX3nRz1.js +0 -172
  116. package/dist/lesson-04-ToX3nRz1.js.map +0 -1
  117. package/dist/lesson-05-2aTCGXMh.js +0 -181
  118. package/dist/lesson-05-2aTCGXMh.js.map +0 -1
  119. package/dist/lesson-05-BvitRdE8.js +0 -206
  120. package/dist/lesson-05-BvitRdE8.js.map +0 -1
  121. package/dist/lesson-05-CgXGkcjS.js +0 -143
  122. package/dist/lesson-05-CgXGkcjS.js.map +0 -1
  123. package/dist/lesson-05-ClfrUrvX.js +0 -244
  124. package/dist/lesson-05-ClfrUrvX.js.map +0 -1
  125. package/dist/lesson-05-D2zf9n7k.js +0 -201
  126. package/dist/lesson-05-D2zf9n7k.js.map +0 -1
  127. package/dist/lesson-05-DWquBfdl.js +0 -220
  128. package/dist/lesson-05-DWquBfdl.js.map +0 -1
  129. package/dist/lesson-05-DpIkwhJ8.js +0 -244
  130. package/dist/lesson-05-DpIkwhJ8.js.map +0 -1
  131. package/dist/lesson-05-UYz39ORV.js +0 -189
  132. package/dist/lesson-05-UYz39ORV.js.map +0 -1
  133. package/dist/lesson-05-t6XuANiZ.js +0 -180
  134. package/dist/lesson-05-t6XuANiZ.js.map +0 -1
  135. package/dist/lesson-06-B2y08mKv.js +0 -238
  136. package/dist/lesson-06-B2y08mKv.js.map +0 -1
  137. package/dist/lesson-06-CHqaVQix.js +0 -202
  138. package/dist/lesson-06-CHqaVQix.js.map +0 -1
  139. package/dist/lesson-06-CaCZBX1V.js +0 -273
  140. package/dist/lesson-06-CaCZBX1V.js.map +0 -1
  141. package/dist/lesson-06-ClplsJBT.js +0 -204
  142. package/dist/lesson-06-ClplsJBT.js.map +0 -1
  143. package/dist/lesson-06-CzGnNKo5.js +0 -141
  144. package/dist/lesson-06-CzGnNKo5.js.map +0 -1
  145. package/dist/lesson-06-Dg_bQLNC.js +0 -172
  146. package/dist/lesson-06-Dg_bQLNC.js.map +0 -1
  147. package/dist/lesson-06-OWFMgO0a.js +0 -231
  148. package/dist/lesson-06-OWFMgO0a.js.map +0 -1
  149. package/dist/lesson-06-Q2aRAzws.js +0 -190
  150. package/dist/lesson-06-Q2aRAzws.js.map +0 -1
  151. package/dist/lesson-07-BLDUA_Ff.js +0 -194
  152. package/dist/lesson-07-BLDUA_Ff.js.map +0 -1
  153. package/dist/lesson-07-BpyF1Ssq.js +0 -236
  154. package/dist/lesson-07-BpyF1Ssq.js.map +0 -1
  155. package/dist/lesson-07-C4GrfDTW.js +0 -234
  156. package/dist/lesson-07-C4GrfDTW.js.map +0 -1
  157. package/dist/lesson-07-CVCUt1Jn.js +0 -206
  158. package/dist/lesson-07-CVCUt1Jn.js.map +0 -1
  159. package/dist/lesson-07-DQFXCZsZ.js +0 -197
  160. package/dist/lesson-07-DQFXCZsZ.js.map +0 -1
  161. package/dist/lesson-07-Dcry2Yjo.js +0 -248
  162. package/dist/lesson-07-Dcry2Yjo.js.map +0 -1
  163. package/dist/lesson-07-JS_cqdNr.js +0 -142
  164. package/dist/lesson-07-JS_cqdNr.js.map +0 -1
  165. package/dist/lesson-08-18gscaS0.js +0 -227
  166. package/dist/lesson-08-18gscaS0.js.map +0 -1
  167. package/dist/lesson-08-2kBUq_B2.js +0 -220
  168. package/dist/lesson-08-2kBUq_B2.js.map +0 -1
  169. package/dist/lesson-08-BP5lpiGe.js +0 -287
  170. package/dist/lesson-08-BP5lpiGe.js.map +0 -1
  171. package/dist/lesson-08-BXm9GgdN.js +0 -146
  172. package/dist/lesson-08-BXm9GgdN.js.map +0 -1
  173. package/dist/lesson-08-Bru0PdEK.js +0 -277
  174. package/dist/lesson-08-Bru0PdEK.js.map +0 -1
  175. package/dist/lesson-08-Dd-8cbGW.js +0 -205
  176. package/dist/lesson-08-Dd-8cbGW.js.map +0 -1
  177. package/dist/lesson-09-B1qWE3Yl.js +0 -221
  178. package/dist/lesson-09-B1qWE3Yl.js.map +0 -1
  179. package/dist/lesson-09-B5Vb70xj.js +0 -143
  180. package/dist/lesson-09-B5Vb70xj.js.map +0 -1
  181. package/dist/lesson-10-00qNLc7A.js +0 -233
  182. package/dist/lesson-10-00qNLc7A.js.map +0 -1
  183. package/dist/lesson-10-Dw-Jtm3D.js +0 -156
  184. package/dist/lesson-10-Dw-Jtm3D.js.map +0 -1
  185. package/dist/lesson-11-BM3R_S7I.js +0 -260
  186. package/dist/lesson-11-BM3R_S7I.js.map +0 -1
  187. package/dist/lesson-12-D1Wx7CyK.js +0 -277
  188. package/dist/lesson-12-D1Wx7CyK.js.map +0 -1
  189. package/dist/skills-hcn-pGD0.js +0 -244
  190. package/dist/skills-hcn-pGD0.js.map +0 -1
  191. package/dist/syllabi/alphabet/index.js +0 -9
  192. package/dist/syllabi/alphabet/index.js.map +0 -1
  193. package/dist/syllabi/dialogue/index.js +0 -10
  194. package/dist/syllabi/dialogue/index.js.map +0 -1
  195. package/dist/syllabi/essentials/index.js +0 -10
  196. package/dist/syllabi/essentials/index.js.map +0 -1
  197. package/dist/syllabi/food/index.js +0 -10
  198. package/dist/syllabi/food/index.js.map +0 -1
  199. package/dist/syllabi/grammar/index.js +0 -10
  200. package/dist/syllabi/grammar/index.js.map +0 -1
  201. package/dist/syllabi/numbers/index.js +0 -10
  202. package/dist/syllabi/numbers/index.js.map +0 -1
  203. package/dist/syllabi/reading/index.js +0 -10
  204. package/dist/syllabi/reading/index.js.map +0 -1
  205. package/dist/syllabi/travel/index.js +0 -10
  206. package/dist/syllabi/travel/index.js.map +0 -1
  207. package/dist/syllabi/vowels-tones/index.js +0 -10
  208. package/dist/syllabi/vowels-tones/index.js.map +0 -1
@@ -1,48 +0,0 @@
1
- import { c as n } from "./skills-hcn-pGD0.js";
2
- const o = {
3
- id: "th-essentials",
4
- title: "คำพื้นฐาน (Thai Essentials)",
5
- description: "Essential phrases and greetings for everyday use",
6
- language: "th",
7
- locale: "th-TH",
8
- lessonCount: 6,
9
- difficulty: "beginner",
10
- cefrLevel: "A1",
11
- icon: "dialogue",
12
- version: "0.1.0"
13
- };
14
- async function t(s) {
15
- switch (s) {
16
- case 1:
17
- return import("./lesson-01-C9vbUlA4.js");
18
- case 2:
19
- return import("./lesson-02-VDOme3ES.js");
20
- case 3:
21
- return import("./lesson-03-CSKig363.js");
22
- case 4:
23
- return import("./lesson-04-0Pj_x1DU.js");
24
- case 5:
25
- return import("./lesson-05-ClfrUrvX.js");
26
- case 6:
27
- return import("./lesson-06-CaCZBX1V.js");
28
- default:
29
- throw new Error(`Lesson ${s} not found`);
30
- }
31
- }
32
- const e = n(o, t), a = e.loadLesson.bind(e), r = e.loadAllLessons.bind(e), i = e.getAvailableLessons.bind(e), c = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
33
- __proto__: null,
34
- config: o,
35
- getAvailableLessons: i,
36
- loadAllLessons: r,
37
- loadLesson: a,
38
- loader: e
39
- }, Symbol.toStringTag, { value: "Module" }));
40
- export {
41
- r as a,
42
- a as b,
43
- o as c,
44
- i as g,
45
- c as i,
46
- e as l
47
- };
48
- //# sourceMappingURL=index-Bjym0crS.js.map
@@ -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,46 +0,0 @@
1
- import { c as s } from "./skills-hcn-pGD0.js";
2
- const o = {
3
- id: "th-numbers",
4
- title: "ตัวเลขไทย (Thai Numbers)",
5
- description: "Learn Thai numerals and counting",
6
- language: "th",
7
- locale: "th-TH",
8
- lessonCount: 5,
9
- difficulty: "beginner",
10
- cefrLevel: "A1",
11
- icon: "numbers",
12
- version: "0.1.0"
13
- };
14
- async function t(n) {
15
- switch (n) {
16
- case 1:
17
- return import("./lesson-01-CPmBFTe0.js");
18
- case 2:
19
- return import("./lesson-02-DGrALAgG.js");
20
- case 3:
21
- return import("./lesson-03-9WioSe19.js");
22
- case 4:
23
- return import("./lesson-04-DUcHZzsk.js");
24
- case 5:
25
- return import("./lesson-05-DWquBfdl.js");
26
- default:
27
- throw new Error(`Lesson ${n} not found`);
28
- }
29
- }
30
- const e = s(o, t), r = e.loadLesson.bind(e), a = e.loadAllLessons.bind(e), i = e.getAvailableLessons.bind(e), c = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
31
- __proto__: null,
32
- config: o,
33
- getAvailableLessons: i,
34
- loadAllLessons: a,
35
- loadLesson: r,
36
- loader: e
37
- }, Symbol.toStringTag, { value: "Module" }));
38
- export {
39
- a,
40
- r as b,
41
- o as c,
42
- i as g,
43
- c as i,
44
- e as l
45
- };
46
- //# sourceMappingURL=index-BuKXw7-Z.js.map
@@ -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,52 +0,0 @@
1
- import { c as s } from "./skills-hcn-pGD0.js";
2
- const t = {
3
- id: "th-dialogue",
4
- title: "บทสนทนา (Thai Dialogue)",
5
- description: "Practical conversations for everyday situations",
6
- language: "th",
7
- locale: "th-TH",
8
- lessonCount: 8,
9
- difficulty: "intermediate",
10
- cefrLevel: "A2",
11
- icon: "dialogue",
12
- version: "0.1.0"
13
- };
14
- async function n(o) {
15
- switch (o) {
16
- case 1:
17
- return import("./lesson-01-ih_-OO_O.js");
18
- case 2:
19
- return import("./lesson-02-B2aZrKUQ.js");
20
- case 3:
21
- return import("./lesson-03-BZutWzMD.js");
22
- case 4:
23
- return import("./lesson-04-ToX3nRz1.js");
24
- case 5:
25
- return import("./lesson-05-UYz39ORV.js");
26
- case 6:
27
- return import("./lesson-06-Dg_bQLNC.js");
28
- case 7:
29
- return import("./lesson-07-DQFXCZsZ.js");
30
- case 8:
31
- return import("./lesson-08-Dd-8cbGW.js");
32
- default:
33
- throw new Error(`Lesson ${o} not found`);
34
- }
35
- }
36
- const e = s(t, n), r = e.loadLesson.bind(e), a = e.loadAllLessons.bind(e), i = e.getAvailableLessons.bind(e), l = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
37
- __proto__: null,
38
- config: t,
39
- getAvailableLessons: i,
40
- loadAllLessons: a,
41
- loadLesson: r,
42
- loader: e
43
- }, Symbol.toStringTag, { value: "Module" }));
44
- export {
45
- a,
46
- r as b,
47
- t as c,
48
- i as g,
49
- l as i,
50
- e as l
51
- };
52
- //# sourceMappingURL=index-ByS0o5dz.js.map
@@ -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,52 +0,0 @@
1
- import { c as n } from "./skills-hcn-pGD0.js";
2
- const t = {
3
- id: "th-food",
4
- title: "อาหารไทย (Thai Food)",
5
- description: "Food vocabulary and ordering at restaurants",
6
- language: "th",
7
- locale: "th-TH",
8
- lessonCount: 8,
9
- difficulty: "beginner",
10
- cefrLevel: "A2",
11
- icon: "food",
12
- version: "0.1.0"
13
- };
14
- async function r(e) {
15
- switch (e) {
16
- case 1:
17
- return import("./lesson-01-Djl_72e7.js");
18
- case 2:
19
- return import("./lesson-02-Dk59HZWp.js");
20
- case 3:
21
- return import("./lesson-03-DkjCuJ26.js");
22
- case 4:
23
- return import("./lesson-04-CmDvofL4.js");
24
- case 5:
25
- return import("./lesson-05-DpIkwhJ8.js");
26
- case 6:
27
- return import("./lesson-06-B2y08mKv.js");
28
- case 7:
29
- return import("./lesson-07-Dcry2Yjo.js");
30
- case 8:
31
- return import("./lesson-08-BP5lpiGe.js");
32
- default:
33
- throw new Error(`Lesson ${e} not found`);
34
- }
35
- }
36
- const o = n(t, r), s = o.loadLesson.bind(o), a = o.loadAllLessons.bind(o), i = o.getAvailableLessons.bind(o), l = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
37
- __proto__: null,
38
- config: t,
39
- getAvailableLessons: i,
40
- loadAllLessons: a,
41
- loadLesson: s,
42
- loader: o
43
- }, Symbol.toStringTag, { value: "Module" }));
44
- export {
45
- a,
46
- s as b,
47
- t as c,
48
- i as g,
49
- l as i,
50
- o as l
51
- };
52
- //# sourceMappingURL=index-C9VnG7dT.js.map
@@ -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,50 +0,0 @@
1
- import { c as n } from "./skills-hcn-pGD0.js";
2
- const t = {
3
- id: "th-travel",
4
- title: "การเดินทาง (Thai Travel)",
5
- description: "Travel vocabulary and directions",
6
- language: "th",
7
- locale: "th-TH",
8
- lessonCount: 7,
9
- difficulty: "beginner",
10
- cefrLevel: "A2",
11
- icon: "travel",
12
- version: "0.1.0"
13
- };
14
- async function r(o) {
15
- switch (o) {
16
- case 1:
17
- return import("./lesson-01-LEHTeGQQ.js");
18
- case 2:
19
- return import("./lesson-02-BI1Vnwiz.js");
20
- case 3:
21
- return import("./lesson-03-DucbRMOQ.js");
22
- case 4:
23
- return import("./lesson-04-DGKHK4LW.js");
24
- case 5:
25
- return import("./lesson-05-t6XuANiZ.js");
26
- case 6:
27
- return import("./lesson-06-Q2aRAzws.js");
28
- case 7:
29
- return import("./lesson-07-BLDUA_Ff.js");
30
- default:
31
- throw new Error(`Lesson ${o} not found`);
32
- }
33
- }
34
- const e = n(t, r), s = e.loadLesson.bind(e), a = e.loadAllLessons.bind(e), i = e.getAvailableLessons.bind(e), c = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
35
- __proto__: null,
36
- config: t,
37
- getAvailableLessons: i,
38
- loadAllLessons: a,
39
- loadLesson: s,
40
- loader: e
41
- }, Symbol.toStringTag, { value: "Module" }));
42
- export {
43
- a,
44
- s as b,
45
- t as c,
46
- i as g,
47
- c as i,
48
- e as l
49
- };
50
- //# sourceMappingURL=index-CPQkjFjV.js.map
@@ -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,56 +0,0 @@
1
- import { c as r } from "./skills-hcn-pGD0.js";
2
- const o = {
3
- id: "th-reading",
4
- title: "การอ่าน (Thai Reading)",
5
- description: "Reading practice with Thai texts",
6
- language: "th",
7
- locale: "th-TH",
8
- lessonCount: 10,
9
- difficulty: "intermediate",
10
- cefrLevel: "B1",
11
- icon: "reading",
12
- version: "0.1.0"
13
- };
14
- async function n(t) {
15
- switch (t) {
16
- case 1:
17
- return import("./lesson-01-Cm5k-m-9.js");
18
- case 2:
19
- return import("./lesson-02-L8oNhBej.js");
20
- case 3:
21
- return import("./lesson-03-DPJOG2M_.js");
22
- case 4:
23
- return import("./lesson-04-DnVIXXk-.js");
24
- case 5:
25
- return import("./lesson-05-CgXGkcjS.js");
26
- case 6:
27
- return import("./lesson-06-CzGnNKo5.js");
28
- case 7:
29
- return import("./lesson-07-JS_cqdNr.js");
30
- case 8:
31
- return import("./lesson-08-BXm9GgdN.js");
32
- case 9:
33
- return import("./lesson-09-B5Vb70xj.js");
34
- case 10:
35
- return import("./lesson-10-Dw-Jtm3D.js");
36
- default:
37
- throw new Error(`Lesson ${t} not found`);
38
- }
39
- }
40
- 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({
41
- __proto__: null,
42
- config: o,
43
- getAvailableLessons: i,
44
- loadAllLessons: a,
45
- loadLesson: s,
46
- loader: e
47
- }, Symbol.toStringTag, { value: "Module" }));
48
- export {
49
- a,
50
- s as b,
51
- o as c,
52
- i as g,
53
- l as i,
54
- e as l
55
- };
56
- //# sourceMappingURL=index-CkHd3Fal.js.map
@@ -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,52 +0,0 @@
1
- import { c as s } from "./skills-hcn-pGD0.js";
2
- const t = {
3
- id: "th-vowels-tones",
4
- title: "สระและวรรณยุกต์ (Vowels & Tones)",
5
- description: "Master Thai vowels and the five tones",
6
- language: "th",
7
- locale: "th-TH",
8
- lessonCount: 8,
9
- difficulty: "beginner",
10
- cefrLevel: "A1",
11
- icon: "alphabet",
12
- version: "0.1.0"
13
- };
14
- async function n(o) {
15
- switch (o) {
16
- case 1:
17
- return import("./lesson-01-B0wtSaSl.js");
18
- case 2:
19
- return import("./lesson-02-BXbwEMaL.js");
20
- case 3:
21
- return import("./lesson-03-MIne1PbH.js");
22
- case 4:
23
- return import("./lesson-04-FZnIE7tu.js");
24
- case 5:
25
- return import("./lesson-05-BvitRdE8.js");
26
- case 6:
27
- return import("./lesson-06-ClplsJBT.js");
28
- case 7:
29
- return import("./lesson-07-C4GrfDTW.js");
30
- case 8:
31
- return import("./lesson-08-Bru0PdEK.js");
32
- default:
33
- throw new Error(`Lesson ${o} not found`);
34
- }
35
- }
36
- const e = s(t, n), r = e.loadLesson.bind(e), a = e.loadAllLessons.bind(e), i = e.getAvailableLessons.bind(e), c = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
37
- __proto__: null,
38
- config: t,
39
- getAvailableLessons: i,
40
- loadAllLessons: a,
41
- loadLesson: r,
42
- loader: e
43
- }, Symbol.toStringTag, { value: "Module" }));
44
- export {
45
- a,
46
- r as b,
47
- t as c,
48
- i as g,
49
- c as i,
50
- e as l
51
- };
52
- //# sourceMappingURL=index-DBkPBXe2.js.map
@@ -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,82 +0,0 @@
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 = {
25
- id: "th-alphabet",
26
- title: "อักษรไทย (Thai Alphabet)",
27
- description: "Learn the Thai writing system - consonants, vowels, and tone marks",
28
- language: "th",
29
- locale: "th-TH",
30
- lessonCount: 12,
31
- difficulty: "beginner",
32
- cefrLevel: "A1",
33
- icon: "alphabet",
34
- version: "0.1.0"
35
- };
36
- async function l(t) {
37
- switch (t) {
38
- case 1:
39
- return import("./lesson-01-Cc4Ws8eR.js");
40
- case 2:
41
- return import("./lesson-02-CbJJ5Amt.js");
42
- case 3:
43
- return import("./lesson-03-Bj5hWZ9t.js");
44
- case 4:
45
- return import("./lesson-04-BLuPI1-X.js");
46
- case 5:
47
- return import("./lesson-05-D2zf9n7k.js");
48
- case 6:
49
- return import("./lesson-06-OWFMgO0a.js");
50
- case 7:
51
- return import("./lesson-07-BpyF1Ssq.js");
52
- case 8:
53
- return import("./lesson-08-18gscaS0.js");
54
- case 9:
55
- return import("./lesson-09-B1qWE3Yl.js");
56
- case 10:
57
- return import("./lesson-10-00qNLc7A.js");
58
- case 11:
59
- return import("./lesson-11-BM3R_S7I.js");
60
- case 12:
61
- return import("./lesson-12-D1Wx7CyK.js");
62
- default:
63
- throw new Error(`Lesson ${t} not found`);
64
- }
65
- }
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({
67
- __proto__: null,
68
- config: s,
69
- getAvailableLessons: u,
70
- loadAllLessons: c,
71
- loadLesson: i,
72
- loader: o
73
- }, Symbol.toStringTag, { value: "Module" }));
74
- 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
81
- };
82
- //# sourceMappingURL=index-DdRhLqkM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DdRhLqkM.js","sources":["../src/shared.ts","../src/syllabi/alphabet/index.ts"],"sourcesContent":["/**\n * Shared types and utilities for SYLLST content\n * (Inlined from @syllst/content-shared to make package self-contained)\n */\n\n/**\n * CEFR language proficiency levels\n */\nexport type CEFRLevel = 'A1' | 'A2' | 'B1' | 'B2' | 'C1' | 'C2';\n\n/**\n * Difficulty levels\n */\nexport type Difficulty = 'beginner' | 'intermediate' | 'advanced';\n\n/**\n * Icon types for syllabi\n */\nexport type SyllabusIcon =\n | 'alphabet'\n | 'dialogue'\n | 'vocabulary'\n | 'grammar'\n | 'reading'\n | 'numbers'\n | 'food'\n | 'travel';\n\n/**\n * Configuration for a syllabus content package\n */\nexport interface SyllabusConfig {\n /** Unique syllabus ID (e.g., \"th-alphabet\") */\n id: string;\n /** Display title */\n title: string;\n /** Description */\n description: string;\n /** Language code (ISO 639-1) */\n language: string;\n /** Locale code (e.g., \"th-TH\") */\n locale: string;\n /** Number of lessons */\n lessonCount: number;\n /** Difficulty level */\n difficulty: Difficulty;\n /** CEFR level */\n cefrLevel: CEFRLevel;\n /** Icon for display */\n icon?: SyllabusIcon;\n /** Package version */\n version: string;\n}\n\n/**\n * Result of loading a lesson\n */\nexport interface LoadedLesson {\n /** Lesson number (1-indexed) */\n number: number;\n /** Raw MDX content */\n rawContent: string;\n}\n\n/**\n * Content loader interface\n */\nexport interface ContentLoader {\n /** Syllabus configuration */\n config: SyllabusConfig;\n /** Load a single lesson by number */\n loadLesson(lessonNumber: number): Promise<LoadedLesson>;\n /** Load all lessons */\n loadAllLessons(): Promise<LoadedLesson[]>;\n /** Get list of available lesson numbers */\n getAvailableLessons(): number[];\n}\n\n/**\n * Create a content loader from config and lesson loader function\n */\nexport function createContentLoader(\n config: SyllabusConfig,\n loadLessonMDX: (lessonNumber: number) => Promise<{ default: string }>\n): ContentLoader {\n return {\n config,\n\n async loadLesson(lessonNumber: number): Promise<LoadedLesson> {\n if (lessonNumber < 1 || lessonNumber > config.lessonCount) {\n throw new Error(`Lesson ${lessonNumber} not found. Valid range: 1-${config.lessonCount}`);\n }\n const module = await loadLessonMDX(lessonNumber);\n return {\n number: lessonNumber,\n rawContent: module.default,\n };\n },\n\n async loadAllLessons(): Promise<LoadedLesson[]> {\n const lessons: LoadedLesson[] = [];\n for (let i = 1; i <= config.lessonCount; i++) {\n lessons.push(await this.loadLesson(i));\n }\n return lessons;\n },\n\n getAvailableLessons(): number[] {\n return Array.from({ length: config.lessonCount }, (_, i) => i + 1);\n },\n };\n}\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,118 +0,0 @@
1
- const n = `---
2
- type: lesson
3
- id: thai-vowels-lesson-01
4
- title: "บทที่ 1 — สระเสียงสั้น I"
5
- description: "Short Vowels Part 1: Above and below the consonant"
6
- order: 1
7
- parentId: thai-vowels-tones
8
- difficulty: beginner
9
- cefrLevel: A1
10
- categories:
11
- - vowels
12
- - short-vowels
13
- - basic-vowels
14
- metadata:
15
- estimatedTime: 30
16
- prerequisites:
17
- - thai-alphabet
18
- learningObjectives:
19
- - id: obj-recognize-above-vowels
20
- description: "Recognize vowels written above consonants"
21
- skill: character-recognition
22
- references: [vowel-i, vowel-ue]
23
- - id: obj-recognize-below-vowels
24
- description: "Recognize vowels written below consonants"
25
- skill: character-recognition
26
- references: [vowel-u]
27
- - id: obj-short-vowel-duration
28
- description: "Understand the short vowel duration concept"
29
- skill: character-sound-mapping
30
- references: [vowel-i, vowel-ue, vowel-u]
31
- - id: obj-combine-vowels-consonants
32
- description: "Practice combining vowels with familiar consonants"
33
- skill: vowel-positioning
34
- references: [vowel-i, vowel-ue, vowel-u]
35
- ---
36
-
37
- # บทที่ 1 (Lesson 1) — Short Vowels I
38
-
39
- ## Introduction
40
-
41
- Welcome to Thai vowels! Unlike English where vowels are standalone letters (a, e, i, o, u), Thai vowels are **diacritical marks** that attach to consonants in various positions. In this first lesson, you'll learn vowels that appear **above** and **below** the consonant.
42
-
43
- ## Why Position Matters
44
-
45
- Thai vowels can appear in four locations relative to a consonant:
46
- - **Above** (◌ิ ◌ี) — like hats on the consonant
47
- - **Below** (◌ุ ◌ู) — like shoes under the consonant
48
- - **Before** (เ◌ แ◌) — written first, pronounced after
49
- - **After** (◌า) — written and pronounced after
50
-
51
- Today we focus on **above** and **below** positions.
52
-
53
- ## Characters
54
-
55
- :::character-set{id="thai-short-vowels-above" title="Short Vowels Above Consonant"}
56
-
57
- ::character{id="vowel-i" canonicalRef="vowel-i" char="ิ" name="สระอิ (sara i)" nativeName="สระอิ" transliteration="i" charType="vowel"}
58
-
59
- ::character{id="vowel-ue" canonicalRef="vowel-ue" char="ึ" name="สระอึ (sara ue)" nativeName="สระอึ" transliteration="ue" charType="vowel"}
60
-
61
- :::
62
-
63
- :::character-set{id="thai-short-vowels-below" title="Short Vowels Below Consonant"}
64
-
65
- ::character{id="vowel-u" canonicalRef="vowel-u" char="ุ" name="สระอุ (sara u)" nativeName="สระอุ" transliteration="u" charType="vowel"}
66
-
67
- :::
68
-
69
- ## How They Combine
70
-
71
- When you add these vowels to a consonant, watch the position:
72
-
73
- | Consonant + Vowel | Result | Pronunciation |
74
- |-------------------|--------|---------------|
75
- | ก + ิ | กิ | gi |
76
- | ม + ิ | มิ | mi |
77
- | ก + ึ | กึ | gue |
78
- | ก + ุ | กุ | gu |
79
- | ม + ุ | มุ | mu |
80
-
81
- ## Short vs Long: A Preview
82
-
83
- These are **short** vowels — they have a clipped, brief sound:
84
- - **ิ (i)** is short — like the "i" in English "bit"
85
- - **ี (ii)** is long — like the "ee" in English "bee"
86
-
87
- You'll learn the long versions in Lesson 3. For now, focus on the brief, snappy quality of short vowels.
88
-
89
- ## The "ue" Sound
90
-
91
- The vowel **ึ** (sara ue) has no direct English equivalent. It's like:
92
- - Saying "ee" but with unrounded lips
93
- - Similar to the German "ü" but shorter
94
- - Position your tongue for "ee" but spread your lips
95
-
96
- ## Key Points
97
-
98
- 1. **Position above**: ิ and ึ sit above the consonant like small marks
99
- 2. **Position below**: ุ sits below the consonant
100
- 3. **Short duration**: These vowels are brief — don't drag them out
101
- 4. **No standalone form**: These vowels must attach to a consonant
102
-
103
- ## Practice Recognition
104
-
105
- With consonants you know, try reading these syllables:
106
- - กิ (gi) — like "gee" but shorter
107
- - มิ (mi) — like "me" but shorter
108
- - กุ (gu) — like "goo" but shorter
109
- - มุ (mu) — like "moo" but shorter
110
-
111
- ## What's Next
112
-
113
- In Lesson 2, you'll learn more short vowels, including those that appear **before** and **around** consonants — Thai's unique feature where you write one thing but pronounce another!
114
- `;
115
- export {
116
- n as default
117
- };
118
- //# sourceMappingURL=lesson-01-B0wtSaSl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lesson-01-B0wtSaSl.js","sources":["../src/syllabi/vowels-tones/lessons/lesson-01.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: thai-vowels-lesson-01\\ntitle: \\\"บทที่ 1 — สระเสียงสั้น I\\\"\\ndescription: \\\"Short Vowels Part 1: Above and below the consonant\\\"\\norder: 1\\nparentId: thai-vowels-tones\\ndifficulty: beginner\\ncefrLevel: A1\\ncategories:\\n - vowels\\n - short-vowels\\n - basic-vowels\\nmetadata:\\n estimatedTime: 30\\n prerequisites:\\n - thai-alphabet\\n learningObjectives:\\n - id: obj-recognize-above-vowels\\n description: \\\"Recognize vowels written above consonants\\\"\\n skill: character-recognition\\n references: [vowel-i, vowel-ue]\\n - id: obj-recognize-below-vowels\\n description: \\\"Recognize vowels written below consonants\\\"\\n skill: character-recognition\\n references: [vowel-u]\\n - id: obj-short-vowel-duration\\n description: \\\"Understand the short vowel duration concept\\\"\\n skill: character-sound-mapping\\n references: [vowel-i, vowel-ue, vowel-u]\\n - id: obj-combine-vowels-consonants\\n description: \\\"Practice combining vowels with familiar consonants\\\"\\n skill: vowel-positioning\\n references: [vowel-i, vowel-ue, vowel-u]\\n---\\n\\n# บทที่ 1 (Lesson 1) — Short Vowels I\\n\\n## Introduction\\n\\nWelcome to Thai vowels! Unlike English where vowels are standalone letters (a, e, i, o, u), Thai vowels are **diacritical marks** that attach to consonants in various positions. In this first lesson, you'll learn vowels that appear **above** and **below** the consonant.\\n\\n## Why Position Matters\\n\\nThai vowels can appear in four locations relative to a consonant:\\n- **Above** (◌ิ ◌ี) — like hats on the consonant\\n- **Below** (◌ุ ◌ู) — like shoes under the consonant\\n- **Before** (เ◌ แ◌) — written first, pronounced after\\n- **After** (◌า) — written and pronounced after\\n\\nToday we focus on **above** and **below** positions.\\n\\n## Characters\\n\\n:::character-set{id=\\\"thai-short-vowels-above\\\" title=\\\"Short Vowels Above Consonant\\\"}\\n\\n::character{id=\\\"vowel-i\\\" canonicalRef=\\\"vowel-i\\\" char=\\\"ิ\\\" name=\\\"สระอิ (sara i)\\\" nativeName=\\\"สระอิ\\\" transliteration=\\\"i\\\" charType=\\\"vowel\\\"}\\n\\n::character{id=\\\"vowel-ue\\\" canonicalRef=\\\"vowel-ue\\\" char=\\\"ึ\\\" name=\\\"สระอึ (sara ue)\\\" nativeName=\\\"สระอึ\\\" transliteration=\\\"ue\\\" charType=\\\"vowel\\\"}\\n\\n:::\\n\\n:::character-set{id=\\\"thai-short-vowels-below\\\" title=\\\"Short Vowels Below Consonant\\\"}\\n\\n::character{id=\\\"vowel-u\\\" canonicalRef=\\\"vowel-u\\\" char=\\\"ุ\\\" name=\\\"สระอุ (sara u)\\\" nativeName=\\\"สระอุ\\\" transliteration=\\\"u\\\" charType=\\\"vowel\\\"}\\n\\n:::\\n\\n## How They Combine\\n\\nWhen you add these vowels to a consonant, watch the position:\\n\\n| Consonant + Vowel | Result | Pronunciation |\\n|-------------------|--------|---------------|\\n| ก + ิ | กิ | gi |\\n| ม + ิ | มิ | mi |\\n| ก + ึ | กึ | gue |\\n| ก + ุ | กุ | gu |\\n| ม + ุ | มุ | mu |\\n\\n## Short vs Long: A Preview\\n\\nThese are **short** vowels — they have a clipped, brief sound:\\n- **ิ (i)** is short — like the \\\"i\\\" in English \\\"bit\\\"\\n- **ี (ii)** is long — like the \\\"ee\\\" in English \\\"bee\\\"\\n\\nYou'll learn the long versions in Lesson 3. For now, focus on the brief, snappy quality of short vowels.\\n\\n## The \\\"ue\\\" Sound\\n\\nThe vowel **ึ** (sara ue) has no direct English equivalent. It's like:\\n- Saying \\\"ee\\\" but with unrounded lips\\n- Similar to the German \\\"ü\\\" but shorter\\n- Position your tongue for \\\"ee\\\" but spread your lips\\n\\n## Key Points\\n\\n1. **Position above**: ิ and ึ sit above the consonant like small marks\\n2. **Position below**: ุ sits below the consonant\\n3. **Short duration**: These vowels are brief — don't drag them out\\n4. **No standalone form**: These vowels must attach to a consonant\\n\\n## Practice Recognition\\n\\nWith consonants you know, try reading these syllables:\\n- กิ (gi) — like \\\"gee\\\" but shorter\\n- มิ (mi) — like \\\"me\\\" but shorter\\n- กุ (gu) — like \\\"goo\\\" but shorter\\n- มุ (mu) — like \\\"moo\\\" but shorter\\n\\n## What's Next\\n\\nIn Lesson 2, you'll learn more short vowels, including those that appear **before** and **around** consonants — Thai's unique feature where you write one thing but pronounce another!\\n\""],"names":["lesson01"],"mappings":"AAAA,MAAAA,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}