@polyglot-bundles/th-syllabi 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dist/index.d.ts +73 -0
  2. package/dist/index.js +28 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/lesson-01-5WMLkFR4.js +6 -0
  5. package/dist/lesson-01-5WMLkFR4.js.map +1 -0
  6. package/dist/lesson-01-Ax46-L8c.js +6 -0
  7. package/dist/lesson-01-Ax46-L8c.js.map +1 -0
  8. package/dist/lesson-01-BAicxju8.js +6 -0
  9. package/dist/lesson-01-BAicxju8.js.map +1 -0
  10. package/dist/lesson-01-Bkv5huMA.js +6 -0
  11. package/dist/lesson-01-Bkv5huMA.js.map +1 -0
  12. package/dist/lesson-01-CUGNC_ZI.js +6 -0
  13. package/dist/lesson-01-CUGNC_ZI.js.map +1 -0
  14. package/dist/lesson-01-CXbu1LWK.js +6 -0
  15. package/dist/lesson-01-CXbu1LWK.js.map +1 -0
  16. package/dist/lesson-01-CehO_zmj.js +6 -0
  17. package/dist/lesson-01-CehO_zmj.js.map +1 -0
  18. package/dist/lesson-01-Cru6vUXD.js +6 -0
  19. package/dist/lesson-01-Cru6vUXD.js.map +1 -0
  20. package/dist/lesson-01-Te5nTr_7.js +6 -0
  21. package/dist/lesson-01-Te5nTr_7.js.map +1 -0
  22. package/dist/lesson-02-3mt33eeQ.js +6 -0
  23. package/dist/lesson-02-3mt33eeQ.js.map +1 -0
  24. package/dist/lesson-02-BkgwkNSk.js +6 -0
  25. package/dist/lesson-02-BkgwkNSk.js.map +1 -0
  26. package/dist/lesson-02-BppqeuRW.js +6 -0
  27. package/dist/lesson-02-BppqeuRW.js.map +1 -0
  28. package/dist/lesson-02-C_BELKyt.js +6 -0
  29. package/dist/lesson-02-C_BELKyt.js.map +1 -0
  30. package/dist/lesson-02-DWCqJO4h.js +6 -0
  31. package/dist/lesson-02-DWCqJO4h.js.map +1 -0
  32. package/dist/lesson-02-DgKk9Fsv.js +6 -0
  33. package/dist/lesson-02-DgKk9Fsv.js.map +1 -0
  34. package/dist/lesson-02-DzOSV4Dp.js +6 -0
  35. package/dist/lesson-02-DzOSV4Dp.js.map +1 -0
  36. package/dist/lesson-02-Pco4rB-e.js +6 -0
  37. package/dist/lesson-02-Pco4rB-e.js.map +1 -0
  38. package/dist/lesson-02-vTQTLjqo.js +6 -0
  39. package/dist/lesson-02-vTQTLjqo.js.map +1 -0
  40. package/dist/lesson-03-8YUkTQTv.js +6 -0
  41. package/dist/lesson-03-8YUkTQTv.js.map +1 -0
  42. package/dist/lesson-03-BdqAXlLg.js +6 -0
  43. package/dist/lesson-03-BdqAXlLg.js.map +1 -0
  44. package/dist/lesson-03-CEOY4VLo.js +6 -0
  45. package/dist/lesson-03-CEOY4VLo.js.map +1 -0
  46. package/dist/lesson-03-CKHl0mvU.js +6 -0
  47. package/dist/lesson-03-CKHl0mvU.js.map +1 -0
  48. package/dist/lesson-03-C_8Ud78K.js +6 -0
  49. package/dist/lesson-03-C_8Ud78K.js.map +1 -0
  50. package/dist/lesson-03-CcEoyIow.js +6 -0
  51. package/dist/lesson-03-CcEoyIow.js.map +1 -0
  52. package/dist/lesson-03-DqL8dx5j.js +6 -0
  53. package/dist/lesson-03-DqL8dx5j.js.map +1 -0
  54. package/dist/lesson-03-gfHMYFsC.js +6 -0
  55. package/dist/lesson-03-gfHMYFsC.js.map +1 -0
  56. package/dist/lesson-03-ovWxl9M5.js +6 -0
  57. package/dist/lesson-03-ovWxl9M5.js.map +1 -0
  58. package/dist/lesson-04-5iuH2ilz.js +6 -0
  59. package/dist/lesson-04-5iuH2ilz.js.map +1 -0
  60. package/dist/lesson-04-BnRott80.js +6 -0
  61. package/dist/lesson-04-BnRott80.js.map +1 -0
  62. package/dist/lesson-04-DSDwkfCW.js +6 -0
  63. package/dist/lesson-04-DSDwkfCW.js.map +1 -0
  64. package/dist/lesson-04-DXdHOnBY.js +6 -0
  65. package/dist/lesson-04-DXdHOnBY.js.map +1 -0
  66. package/dist/lesson-04-DiBGRoWo.js +6 -0
  67. package/dist/lesson-04-DiBGRoWo.js.map +1 -0
  68. package/dist/lesson-04-_0xY9yxd.js +6 -0
  69. package/dist/lesson-04-_0xY9yxd.js.map +1 -0
  70. package/dist/lesson-04-aMmWZQzM.js +6 -0
  71. package/dist/lesson-04-aMmWZQzM.js.map +1 -0
  72. package/dist/lesson-04-eMzwvqbJ.js +6 -0
  73. package/dist/lesson-04-eMzwvqbJ.js.map +1 -0
  74. package/dist/lesson-04-zsMZdbns.js +6 -0
  75. package/dist/lesson-04-zsMZdbns.js.map +1 -0
  76. package/dist/lesson-05-B73O6R3e.js +6 -0
  77. package/dist/lesson-05-B73O6R3e.js.map +1 -0
  78. package/dist/lesson-05-BJz1OMdo.js +6 -0
  79. package/dist/lesson-05-BJz1OMdo.js.map +1 -0
  80. package/dist/lesson-05-CmInabsx.js +6 -0
  81. package/dist/lesson-05-CmInabsx.js.map +1 -0
  82. package/dist/lesson-05-CtLAKu4H.js +6 -0
  83. package/dist/lesson-05-CtLAKu4H.js.map +1 -0
  84. package/dist/lesson-05-CtxbttlQ.js +6 -0
  85. package/dist/lesson-05-CtxbttlQ.js.map +1 -0
  86. package/dist/lesson-05-CvkiKhAc.js +6 -0
  87. package/dist/lesson-05-CvkiKhAc.js.map +1 -0
  88. package/dist/lesson-05-DZ2zLG_f.js +6 -0
  89. package/dist/lesson-05-DZ2zLG_f.js.map +1 -0
  90. package/dist/lesson-05-LEwbqTUO.js +6 -0
  91. package/dist/lesson-05-LEwbqTUO.js.map +1 -0
  92. package/dist/lesson-05-xwJq5Ahp.js +6 -0
  93. package/dist/lesson-05-xwJq5Ahp.js.map +1 -0
  94. package/dist/lesson-06-3mzCr_fw.js +6 -0
  95. package/dist/lesson-06-3mzCr_fw.js.map +1 -0
  96. package/dist/lesson-06-7LtYBqua.js +6 -0
  97. package/dist/lesson-06-7LtYBqua.js.map +1 -0
  98. package/dist/lesson-06-B3nh5S8u.js +6 -0
  99. package/dist/lesson-06-B3nh5S8u.js.map +1 -0
  100. package/dist/lesson-06-Bb-2_iM_.js +6 -0
  101. package/dist/lesson-06-Bb-2_iM_.js.map +1 -0
  102. package/dist/lesson-06-CGSWklWf.js +6 -0
  103. package/dist/lesson-06-CGSWklWf.js.map +1 -0
  104. package/dist/lesson-06-CbptJEVj.js +6 -0
  105. package/dist/lesson-06-CbptJEVj.js.map +1 -0
  106. package/dist/lesson-06-UZMKnHut.js +6 -0
  107. package/dist/lesson-06-UZMKnHut.js.map +1 -0
  108. package/dist/lesson-06-VVLJG5tS.js +6 -0
  109. package/dist/lesson-06-VVLJG5tS.js.map +1 -0
  110. package/dist/lesson-07-B-ymvSq1.js +6 -0
  111. package/dist/lesson-07-B-ymvSq1.js.map +1 -0
  112. package/dist/lesson-07-BC_VS67I.js +6 -0
  113. package/dist/lesson-07-BC_VS67I.js.map +1 -0
  114. package/dist/lesson-07-BGH2VCfQ.js +6 -0
  115. package/dist/lesson-07-BGH2VCfQ.js.map +1 -0
  116. package/dist/lesson-07-ChjCsvGT.js +6 -0
  117. package/dist/lesson-07-ChjCsvGT.js.map +1 -0
  118. package/dist/lesson-07-Cv5XFbyM.js +6 -0
  119. package/dist/lesson-07-Cv5XFbyM.js.map +1 -0
  120. package/dist/lesson-07-DOc-6Wro.js +6 -0
  121. package/dist/lesson-07-DOc-6Wro.js.map +1 -0
  122. package/dist/lesson-07-Djb8lV_0.js +6 -0
  123. package/dist/lesson-07-Djb8lV_0.js.map +1 -0
  124. package/dist/lesson-08-BQAzD1Fs.js +6 -0
  125. package/dist/lesson-08-BQAzD1Fs.js.map +1 -0
  126. package/dist/lesson-08-BTjJzUbl.js +6 -0
  127. package/dist/lesson-08-BTjJzUbl.js.map +1 -0
  128. package/dist/lesson-08-CkL1Hm9B.js +6 -0
  129. package/dist/lesson-08-CkL1Hm9B.js.map +1 -0
  130. package/dist/lesson-08-DCzbB4SF.js +6 -0
  131. package/dist/lesson-08-DCzbB4SF.js.map +1 -0
  132. package/dist/lesson-08-DPH_n5aL.js +6 -0
  133. package/dist/lesson-08-DPH_n5aL.js.map +1 -0
  134. package/dist/lesson-08-Dd8wp6wx.js +6 -0
  135. package/dist/lesson-08-Dd8wp6wx.js.map +1 -0
  136. package/dist/lesson-09-B5N9z5cw.js +6 -0
  137. package/dist/lesson-09-B5N9z5cw.js.map +1 -0
  138. package/dist/lesson-09-DV0xLHEY.js +6 -0
  139. package/dist/lesson-09-DV0xLHEY.js.map +1 -0
  140. package/dist/lesson-10-BfrJTy0x.js +6 -0
  141. package/dist/lesson-10-BfrJTy0x.js.map +1 -0
  142. package/dist/lesson-10-fqBcOfNb.js +6 -0
  143. package/dist/lesson-10-fqBcOfNb.js.map +1 -0
  144. package/dist/lesson-11-tee-mG6O.js +6 -0
  145. package/dist/lesson-11-tee-mG6O.js.map +1 -0
  146. package/dist/lesson-12-DkmVVMEs.js +6 -0
  147. package/dist/lesson-12-DkmVVMEs.js.map +1 -0
  148. package/dist/shared-Cpn5kpPR.js +35 -0
  149. package/dist/shared-Cpn5kpPR.js.map +1 -0
  150. package/dist/syllabi/alphabet/index.d.ts +7 -0
  151. package/dist/syllabi/alphabet/index.js +42 -0
  152. package/dist/syllabi/alphabet/index.js.map +1 -0
  153. package/dist/syllabi/dialogue/index.d.ts +7 -0
  154. package/dist/syllabi/dialogue/index.js +38 -0
  155. package/dist/syllabi/dialogue/index.js.map +1 -0
  156. package/dist/syllabi/essentials/index.d.ts +7 -0
  157. package/dist/syllabi/essentials/index.js +36 -0
  158. package/dist/syllabi/essentials/index.js.map +1 -0
  159. package/dist/syllabi/food/index.d.ts +7 -0
  160. package/dist/syllabi/food/index.js +38 -0
  161. package/dist/syllabi/food/index.js.map +1 -0
  162. package/dist/syllabi/grammar/index.d.ts +7 -0
  163. package/dist/syllabi/grammar/index.js +38 -0
  164. package/dist/syllabi/grammar/index.js.map +1 -0
  165. package/dist/syllabi/numbers/index.d.ts +7 -0
  166. package/dist/syllabi/numbers/index.js +35 -0
  167. package/dist/syllabi/numbers/index.js.map +1 -0
  168. package/dist/syllabi/reading/index.d.ts +7 -0
  169. package/dist/syllabi/reading/index.js +40 -0
  170. package/dist/syllabi/reading/index.js.map +1 -0
  171. package/dist/syllabi/travel/index.d.ts +7 -0
  172. package/dist/syllabi/travel/index.js +37 -0
  173. package/dist/syllabi/travel/index.js.map +1 -0
  174. package/dist/syllabi/vowels-tones/index.d.ts +7 -0
  175. package/dist/syllabi/vowels-tones/index.js +38 -0
  176. package/dist/syllabi/vowels-tones/index.js.map +1 -0
  177. package/package.json +5 -5
  178. package/src/syllabi/essentials/lessons/lesson-01.mdx +3 -1
  179. package/src/syllabi/vowels-tones/lessons/lesson-07.mdx +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-12-DkmVVMEs.js","names":[],"sources":["../src/syllabi/alphabet/lessons/lesson-12.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: thai-script-lesson-12\\ntitle: \\\"บทที่ 12 — ตัวเลขและสัญลักษณ์\\\"\\ndescription: \\\"Numbers & Symbols: ๐-๙ ฯ ๆ — Thai numerals and special characters\\\"\\norder: 12\\nparentId: thai-script-alphabet\\ndifficulty: advanced\\ncefrLevel: B1\\ncategories:\\n - numbers\\n - symbols\\n - punctuation\\n - advanced-characters\\nmetadata:\\n estimatedTime: 20\\n prerequisites:\\n - thai-script-lesson-11\\n learningObjectives:\\n - id: obj-numerals\\n description: \\\"Learn Thai numerals 0-9\\\"\\n skill: character-recognition\\n references: [num-zero, num-one, num-two, num-three, num-four, num-five, num-six, num-seven, num-eight, num-nine]\\n - id: obj-punctuation\\n description: \\\"Understand Thai punctuation marks\\\"\\n skill: character-recognition\\n references: [paiyannoi, maiyamok]\\n - id: obj-repetition-mark\\n description: \\\"Master the repetition mark ๆ\\\"\\n skill: character-sound-mapping\\n references: [maiyamok]\\n - id: obj-script-literacy\\n description: \\\"Complete your Thai script literacy\\\"\\n skill: character-recognition\\n references: [num-zero, num-one, num-two, num-three, num-four, num-five, num-six, num-seven, num-eight, num-nine, paiyannoi, maiyamok]\\n---\\n\\n# บทที่ 12 (Lesson 12) — Numbers & Symbols\\n\\n## Introduction\\n\\nThai has its own numeral system dating back centuries. While Arabic numerals (0-9) are common in modern Thailand, Thai numerals still appear on official documents, temples, traditional contexts, and formal writing. This lesson also covers essential Thai punctuation.\\n\\n## Thai Numerals\\n\\n:::character-set{id=\\\"thai-numbers\\\" title=\\\"Thai Numerals\\\"}\\n\\n::character{id=\\\"num-zero\\\" canonicalRef=\\\"num-zero\\\" char=\\\"๐\\\" name=\\\"ศูนย์ (sǔun)\\\" nativeName=\\\"ศูนย์\\\" transliteration=\\\"0\\\" charType=\\\"number\\\"}\\n\\n::character{id=\\\"num-one\\\" canonicalRef=\\\"num-one\\\" char=\\\"๑\\\" name=\\\"หนึ่ง (nʉ̀ng)\\\" nativeName=\\\"หนึ่ง\\\" transliteration=\\\"1\\\" charType=\\\"number\\\"}\\n\\n::character{id=\\\"num-two\\\" canonicalRef=\\\"num-two\\\" char=\\\"๒\\\" name=\\\"สอง (sɔ̌ɔng)\\\" nativeName=\\\"สอง\\\" transliteration=\\\"2\\\" charType=\\\"number\\\"}\\n\\n::character{id=\\\"num-three\\\" canonicalRef=\\\"num-three\\\" char=\\\"๓\\\" name=\\\"สาม (sǎam)\\\" nativeName=\\\"สาม\\\" transliteration=\\\"3\\\" charType=\\\"number\\\"}\\n\\n::character{id=\\\"num-four\\\" canonicalRef=\\\"num-four\\\" char=\\\"๔\\\" name=\\\"สี่ (sìi)\\\" nativeName=\\\"สี่\\\" transliteration=\\\"4\\\" charType=\\\"number\\\"}\\n\\n::character{id=\\\"num-five\\\" canonicalRef=\\\"num-five\\\" char=\\\"๕\\\" name=\\\"ห้า (hâa)\\\" nativeName=\\\"ห้า\\\" transliteration=\\\"5\\\" charType=\\\"number\\\"}\\n\\n::character{id=\\\"num-six\\\" canonicalRef=\\\"num-six\\\" char=\\\"๖\\\" name=\\\"หก (hòk)\\\" nativeName=\\\"หก\\\" transliteration=\\\"6\\\" charType=\\\"number\\\"}\\n\\n::character{id=\\\"num-seven\\\" canonicalRef=\\\"num-seven\\\" char=\\\"๗\\\" name=\\\"เจ็ด (jèt)\\\" nativeName=\\\"เจ็ด\\\" transliteration=\\\"7\\\" charType=\\\"number\\\"}\\n\\n::character{id=\\\"num-eight\\\" canonicalRef=\\\"num-eight\\\" char=\\\"๘\\\" name=\\\"แปด (bpàaet)\\\" nativeName=\\\"แปด\\\" transliteration=\\\"8\\\" charType=\\\"number\\\"}\\n\\n::character{id=\\\"num-nine\\\" canonicalRef=\\\"num-nine\\\" char=\\\"๙\\\" name=\\\"เก้า (gâo)\\\" nativeName=\\\"เก้า\\\" transliteration=\\\"9\\\" charType=\\\"number\\\"}\\n\\n:::\\n\\n## Shape Recognition for Numbers\\n\\nThai numerals have distinctive shapes:\\n\\n| Numeral | Shape Hint |\\n|---------|------------|\\n| ๐ | Circle (like 0) |\\n| ๑ | Simple hook |\\n| ๒ | Like ๑ with extra curve |\\n| ๓ | Three loops/curves |\\n| ๔ | Complex with descender |\\n| ๕ | Curved shape |\\n| ๖ | Has a \\\"tail\\\" going down |\\n| ๗ | Curves at top |\\n| ๘ | Complex with loops |\\n| ๙ | Almost like a \\\"9\\\" reversed |\\n\\n**Memory tip**: ๐ (zero) looks like a circle, ๓ (three) has three connected parts.\\n\\n## Where You'll See Thai Numerals\\n\\n1. **Temple dates**: Buddhist Era years (พ.ศ. ๒๕๖๗)\\n2. **Official documents**: Government forms, IDs\\n3. **Royal contexts**: Anything related to monarchy\\n4. **Traditional signs**: Old buildings, historical markers\\n5. **Lottery tickets**: Thai lottery uses Thai numerals\\n6. **Clock faces**: Traditional-style clocks\\n\\n## The Buddhist Era Calendar\\n\\nThailand uses the **Buddhist Era (พ.ศ.)**, which is 543 years ahead of the Gregorian calendar:\\n- 2024 CE = พ.ศ. ๒๕๖๗\\n- 2025 CE = พ.ศ. ๒๕๖๘\\n\\nWhen you see dates in Thai numerals, they're likely Buddhist Era!\\n\\n## Special Symbols\\n\\n:::character-set{id=\\\"thai-symbols\\\" title=\\\"Thai Symbols\\\"}\\n\\n::character{id=\\\"paiyannoi\\\" canonicalRef=\\\"paiyannoi\\\" char=\\\"ฯ\\\" name=\\\"ไปยาลน้อย (bpai-yaan-nói)\\\" nativeName=\\\"ไปยาลน้อย\\\" transliteration=\\\"abbrev.\\\" charType=\\\"symbol\\\"}\\n\\n::character{id=\\\"maiyamok\\\" canonicalRef=\\\"maiyamok\\\" char=\\\"ๆ\\\" name=\\\"ไม้ยมก (mái-yá-mók)\\\" nativeName=\\\"ไม้ยมก\\\" transliteration=\\\"repeat\\\" charType=\\\"symbol\\\"}\\n\\n:::\\n\\n### ฯ Paiyannoi (Abbreviation Mark)\\n\\nUsed to indicate abbreviation, similar to a period in abbreviations:\\n- กรุงเทพฯ (Krung Thep...) — Bangkok (full: กรุงเทพมหานคร)\\n- ฯลฯ — etc. (literally \\\"and so on\\\")\\n\\nYou'll see ฯ in:\\n- Place name abbreviations\\n- Title abbreviations\\n- Lists ending with \\\"etc.\\\"\\n\\n### ๆ Maiyamok (Repetition Mark)\\n\\nIndicates that the previous word should be repeated:\\n- ช้า ๆ (cháa cháa) — slowly (literally \\\"slow slow\\\")\\n- เด็ก ๆ (dèk dèk) — children (plural marker)\\n- บาง ๆ (baang baang) — somewhat thin\\n\\n**Usage patterns**:\\n1. **Emphasis/intensity**: ดี ๆ (really good)\\n2. **Plurality**: คน ๆ (people, multiple)\\n3. **Reduplication for meaning change**: Various idiomatic uses\\n\\nWithout ๆ, you'd have to write the word twice. This mark saves space and is very common in everyday Thai.\\n\\n## Other Symbols You May Encounter\\n\\n| Symbol | Name | Use |\\n|--------|------|-----|\\n| ๆ | Maiyamok | Repetition |\\n| ฯ | Paiyannoi | Abbreviation |\\n| ๏ | Fongman | Old paragraph marker (rare) |\\n| ฯลฯ | (etc.) | Et cetera |\\n| ฯพณฯ | (title) | Royal/noble title prefix |\\n\\n## Punctuation in Thai\\n\\nTraditional Thai used **no punctuation** — no spaces between words, no periods, no commas. Modern Thai has adopted:\\n\\n| Punctuation | Usage |\\n|-------------|-------|\\n| (space) | Between clauses, not words |\\n| . | Rarely used; sometimes in abbreviations |\\n| , | Borrowed from English, used sparingly |\\n| ? | Used in informal writing |\\n| ! | Used in informal writing |\\n| \\\" \\\" | Quotation marks (borrowed) |\\n\\n**Important**: Thai traditionally has no spaces between words. Word boundaries are learned through experience. Spaces appear between phrases or clauses, not individual words.\\n\\n## Complete Script Summary\\n\\nYou've now learned the complete Thai script:\\n\\n| Category | Count | Examples |\\n|----------|-------|----------|\\n| Consonants | 44 | ก ข ค... |\\n| Vowels | 32+ | ◌า ◌ิ เ◌... |\\n| Tone Marks | 4 | ◌่ ◌้ ◌๊ ◌๋ |\\n| Numerals | 10 | ๐-๙ |\\n| Symbols | 2+ | ฯ ๆ |\\n\\n## Key Points\\n\\n1. **Thai numerals exist**: Used in traditional/formal contexts\\n2. **Buddhist Era**: Add 543 to get Thai year\\n3. **ๆ means repeat**: Common in everyday writing\\n4. **ฯ means abbreviated**: Like \\\"...\\\" or abbreviation periods\\n5. **No word spaces**: Thai doesn't space between words\\n6. **Modern punctuation**: Borrowed from English, used sparingly\\n\\n## Practice Exercises\\n\\n:::exercise{id=\\\"numbers-1-numeral-conversion\\\" type=\\\"fill-in-blank\\\" title=\\\"Numeral Conversion\\\" skill=\\\"character-recognition\\\" tests=\\\"num-zero,num-one,num-two,num-three,num-five,num-six,num-seven\\\" objectiveId=\\\"obj-numerals\\\"}\\n\\n**Question:** Convert these Thai numerals to Arabic numerals:\\n\\n- ๒๕๖๗\\n- ๑๒๓\\n- ๕๐\\n\\n**Answer:**\\n\\n- ๒๕๖๗ = 2567 (Buddhist Era year, equivalent to 2024 CE)\\n- ๑๒๓ = 123\\n- ๕๐ = 50\\n\\n**Explanation:** Thai numerals work exactly like Arabic numerals — position determines value. ๒๕๖๗ is a Buddhist Era year (add 543 to get Gregorian year).\\n\\n:::\\n\\n:::exercise{id=\\\"numbers-1-symbol-usage\\\" type=\\\"matching\\\" title=\\\"Symbol Usage\\\" skill=\\\"character-recognition\\\" tests=\\\"maiyamok,paiyannoi\\\" objectiveId=\\\"obj-punctuation\\\"}\\n\\n**Question:** Match each symbol to its correct usage\\n\\n- ๆ (mái yamok)\\n- ฯ (paiyannoi)\\n- ฯลฯ\\n\\n**Answer:**\\n\\n- ๆ → Repetition mark (repeat the previous word)\\n- ฯ → Abbreviation mark (indicates shortened form)\\n- ฯลฯ → Et cetera (and so on)\\n\\n**Explanation:** ๆ is very common in Thai writing for emphasis and plurality. ฯ indicates abbreviations, especially in place names. ฯลฯ means \\\"etc.\\\"\\n\\n:::\\n\\n:::exercise{id=\\\"numbers-1-reading-practice\\\" type=\\\"fill-in-blank\\\" title=\\\"Reading Practice with Symbols\\\" skill=\\\"character-sound-mapping\\\" tests=\\\"paiyannoi,maiyamok\\\" objectiveId=\\\"obj-repetition-mark\\\"}\\n\\n**Question:** What do these phrases mean?\\n\\n- กรุงเทพฯ\\n- ช้า ๆ\\n- เด็ก ๆ\\n\\n**Answer:**\\n\\n- กรุงเทพฯ = Bangkok (abbreviated from กรุงเทพมหานคร)\\n- ช้า ๆ = slowly (reduplication for emphasis)\\n- เด็ก ๆ = children (plural marker)\\n\\n**Explanation:** ฯ abbreviates long place names. ๆ creates reduplication for emphasis (ช้า = slow, ช้า ๆ = slowly) or plurality (เด็ก = child, เด็ก ๆ = children).\\n\\n:::\\n\\n## Congratulations!\\n\\nYou've completed the Thai Script course! You now know:\\n- All 44 consonants and their classes\\n- The tone mark system\\n- Thai numerals and symbols\\n\\n**What's next?**\\n- Practice reading real Thai text\\n- Learn Thai vowels in depth\\n- Build vocabulary\\n- Study grammar patterns\\n\\nRemember: Reading Thai is a skill that improves with practice. The patterns you've learned will become automatic as you read more Thai text.\\n\\n## Final Practice Challenge\\n\\nTry reading this sentence:\\n\\n**กรุงเทพฯ เป็นเมืองหลวงของประเทศไทย**\\n\\n- กรุงเทพฯ (Krung Thep...) — Bangkok\\n- เป็น (bpen) — is\\n- เมืองหลวง (mʉang-lǔang) — capital city\\n- ของ (khɔ̌ɔng) — of\\n- ประเทศไทย (bprà-thêet-thai) — Thailand\\n\\n\\\"Bangkok is the capital city of Thailand.\\\"\\n\\nYou can read Thai!\\n\""],"mappings":";AAAA,IAAA,IAAe"}
@@ -0,0 +1,35 @@
1
+ //#region \0rolldown/runtime.js
2
+ var e = Object.defineProperty, t = (t, n) => {
3
+ let r = {};
4
+ for (var i in t) e(r, i, {
5
+ get: t[i],
6
+ enumerable: !0
7
+ });
8
+ return n || e(r, Symbol.toStringTag, { value: "Module" }), r;
9
+ };
10
+ //#endregion
11
+ //#region src/shared.ts
12
+ function n(e, t) {
13
+ return {
14
+ config: e,
15
+ async loadLesson(n) {
16
+ if (n < 1 || n > e.lessonCount) throw Error(`Lesson ${n} not found. Valid range: 1-${e.lessonCount}`);
17
+ return {
18
+ number: n,
19
+ rawContent: (await t(n)).default
20
+ };
21
+ },
22
+ async loadAllLessons() {
23
+ let t = [];
24
+ for (let n = 1; n <= e.lessonCount; n++) t.push(await this.loadLesson(n));
25
+ return t;
26
+ },
27
+ getAvailableLessons() {
28
+ return Array.from({ length: e.lessonCount }, (e, t) => t + 1);
29
+ }
30
+ };
31
+ }
32
+ //#endregion
33
+ export { t as n, n as t };
34
+
35
+ //# sourceMappingURL=shared-Cpn5kpPR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-Cpn5kpPR.js","names":[],"sources":["../src/shared.ts"],"sourcesContent":["/**\n * Shared types and utilities for SYLLST content.\n * `CEFRLevel` is the canonical type from `@polyglot-bundles/syllabi-base`\n * (was previously inlined locally; see #13).\n */\n\nimport type { CEFRLevel } from \"@polyglot-bundles/syllabi-base\";\nexport type { CEFRLevel };\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"],"mappings":";;;;;;;;;;;AAgFA,SAAgB,EACd,GACA,GACe;AACf,QAAO;EACL;EAEA,MAAM,WAAW,GAA6C;AAC5D,OAAI,IAAe,KAAK,IAAe,EAAO,YAC5C,OAAU,MAAM,UAAU,EAAa,6BAA6B,EAAO,cAAc;AAG3F,UAAO;IACL,QAAQ;IACR,aAHa,MAAM,EAAc,EAAa,EAG3B;IACpB;;EAGH,MAAM,iBAA0C;GAC9C,IAAM,IAA0B,EAAE;AAClC,QAAK,IAAI,IAAI,GAAG,KAAK,EAAO,aAAa,IACvC,GAAQ,KAAK,MAAM,KAAK,WAAW,EAAE,CAAC;AAExC,UAAO;;EAGT,sBAAgC;AAC9B,UAAO,MAAM,KAAK,EAAE,QAAQ,EAAO,aAAa,GAAG,GAAG,MAAM,IAAI,EAAE;;EAErE"}
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,42 @@
1
+ import { n as e, t } from "../../shared-Cpn5kpPR.js";
2
+ //#region src/syllabi/alphabet/index.ts
3
+ var n = /* @__PURE__ */ e({
4
+ config: () => r,
5
+ getAvailableLessons: () => c,
6
+ loadAllLessons: () => s,
7
+ loadLesson: () => o,
8
+ loader: () => a
9
+ }), r = {
10
+ id: "th-alphabet",
11
+ title: "อักษรไทย (Thai Alphabet)",
12
+ description: "Learn the Thai writing system - consonants, vowels, and tone marks",
13
+ language: "th",
14
+ locale: "th-TH",
15
+ lessonCount: 12,
16
+ difficulty: "beginner",
17
+ cefrLevel: "A1",
18
+ icon: "alphabet",
19
+ version: "0.1.0"
20
+ };
21
+ async function i(e) {
22
+ switch (e) {
23
+ case 1: return import("../../lesson-01-Ax46-L8c.js");
24
+ case 2: return import("../../lesson-02-BkgwkNSk.js");
25
+ case 3: return import("../../lesson-03-CEOY4VLo.js");
26
+ case 4: return import("../../lesson-04-aMmWZQzM.js");
27
+ case 5: return import("../../lesson-05-BJz1OMdo.js");
28
+ case 6: return import("../../lesson-06-3mzCr_fw.js");
29
+ case 7: return import("../../lesson-07-DOc-6Wro.js");
30
+ case 8: return import("../../lesson-08-CkL1Hm9B.js");
31
+ case 9: return import("../../lesson-09-DV0xLHEY.js");
32
+ case 10: return import("../../lesson-10-fqBcOfNb.js");
33
+ case 11: return import("../../lesson-11-tee-mG6O.js");
34
+ case 12: return import("../../lesson-12-DkmVVMEs.js");
35
+ default: throw Error(`Lesson ${e} not found`);
36
+ }
37
+ }
38
+ var a = t(r, i), o = a.loadLesson.bind(a), s = a.loadAllLessons.bind(a), c = a.getAvailableLessons.bind(a);
39
+ //#endregion
40
+ export { r as config, c as getAvailableLessons, s as loadAllLessons, o as loadLesson, a as loader, n as t };
41
+
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"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"],"mappings":";;;;;;;;IAMa,IAAyB;CACpC,IAAI;CACJ,OAAO;CACP,aAAa;CACb,UAAU;CACV,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,WAAW;CACX,MAAM;CACN,SAAS;CACV;AAED,eAAe,EAAc,GAAsB;AACjD,SAAQ,GAAR;EACE,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,GAAI,QAAO,OAAO;EACvB,KAAK,GAAI,QAAO,OAAO;EACvB,KAAK,GAAI,QAAO,OAAO;EACvB,QAAS,OAAU,MAAM,UAAU,EAAa,YAAY;;;AAIhE,IAAa,IAAwB,EAAoB,GAAQ,EAAc,EAClE,IAAa,EAAO,WAAW,KAAK,EAAO,EAC3C,IAAiB,EAAO,eAAe,KAAK,EAAO,EACnD,IAAsB,EAAO,oBAAoB,KAAK,EAAO"}
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,38 @@
1
+ import { n as e, t } from "../../shared-Cpn5kpPR.js";
2
+ //#region src/syllabi/dialogue/index.ts
3
+ var n = /* @__PURE__ */ e({
4
+ config: () => r,
5
+ getAvailableLessons: () => c,
6
+ loadAllLessons: () => s,
7
+ loadLesson: () => o,
8
+ loader: () => a
9
+ }), r = {
10
+ id: "th-dialogue",
11
+ title: "บทสนทนา (Thai Dialogue)",
12
+ description: "Practical conversations for everyday situations",
13
+ language: "th",
14
+ locale: "th-TH",
15
+ lessonCount: 8,
16
+ difficulty: "intermediate",
17
+ cefrLevel: "A2",
18
+ icon: "dialogue",
19
+ version: "0.1.0"
20
+ };
21
+ async function i(e) {
22
+ switch (e) {
23
+ case 1: return import("../../lesson-01-BAicxju8.js");
24
+ case 2: return import("../../lesson-02-vTQTLjqo.js");
25
+ case 3: return import("../../lesson-03-DqL8dx5j.js");
26
+ case 4: return import("../../lesson-04-eMzwvqbJ.js");
27
+ case 5: return import("../../lesson-05-CmInabsx.js");
28
+ case 6: return import("../../lesson-06-VVLJG5tS.js");
29
+ case 7: return import("../../lesson-07-Djb8lV_0.js");
30
+ case 8: return import("../../lesson-08-DCzbB4SF.js");
31
+ default: throw Error(`Lesson ${e} not found`);
32
+ }
33
+ }
34
+ var a = t(r, i), o = a.loadLesson.bind(a), s = a.loadAllLessons.bind(a), c = a.getAvailableLessons.bind(a);
35
+ //#endregion
36
+ export { r as config, c as getAvailableLessons, s as loadAllLessons, o as loadLesson, a as loader, n as t };
37
+
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"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"],"mappings":";;;;;;;;IAMa,IAAyB;CACpC,IAAI;CACJ,OAAO;CACP,aAAa;CACb,UAAU;CACV,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,WAAW;CACX,MAAM;CACN,SAAS;CACV;AAED,eAAe,EAAc,GAAsB;AACjD,SAAQ,GAAR;EACE,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,QAAS,OAAU,MAAM,UAAU,EAAa,YAAY;;;AAIhE,IAAa,IAAwB,EAAoB,GAAQ,EAAc,EAClE,IAAa,EAAO,WAAW,KAAK,EAAO,EAC3C,IAAiB,EAAO,eAAe,KAAK,EAAO,EACnD,IAAsB,EAAO,oBAAoB,KAAK,EAAO"}
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,36 @@
1
+ import { n as e, t } from "../../shared-Cpn5kpPR.js";
2
+ //#region src/syllabi/essentials/index.ts
3
+ var n = /* @__PURE__ */ e({
4
+ config: () => r,
5
+ getAvailableLessons: () => c,
6
+ loadAllLessons: () => s,
7
+ loadLesson: () => o,
8
+ loader: () => a
9
+ }), r = {
10
+ id: "th-essentials",
11
+ title: "คำพื้นฐาน (Thai Essentials)",
12
+ description: "Essential phrases and greetings for everyday use",
13
+ language: "th",
14
+ locale: "th-TH",
15
+ lessonCount: 6,
16
+ difficulty: "beginner",
17
+ cefrLevel: "A1",
18
+ icon: "dialogue",
19
+ version: "0.1.0"
20
+ };
21
+ async function i(e) {
22
+ switch (e) {
23
+ case 1: return import("../../lesson-01-CehO_zmj.js");
24
+ case 2: return import("../../lesson-02-DzOSV4Dp.js");
25
+ case 3: return import("../../lesson-03-ovWxl9M5.js");
26
+ case 4: return import("../../lesson-04-DSDwkfCW.js");
27
+ case 5: return import("../../lesson-05-B73O6R3e.js");
28
+ case 6: return import("../../lesson-06-B3nh5S8u.js");
29
+ default: throw Error(`Lesson ${e} not found`);
30
+ }
31
+ }
32
+ var a = t(r, i), o = a.loadLesson.bind(a), s = a.loadAllLessons.bind(a), c = a.getAvailableLessons.bind(a);
33
+ //#endregion
34
+ export { r as config, c as getAvailableLessons, s as loadAllLessons, o as loadLesson, a as loader, n as t };
35
+
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"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"],"mappings":";;;;;;;;IAMa,IAAyB;CACpC,IAAI;CACJ,OAAO;CACP,aAAa;CACb,UAAU;CACV,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,WAAW;CACX,MAAM;CACN,SAAS;CACV;AAED,eAAe,EAAc,GAAsB;AACjD,SAAQ,GAAR;EACE,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,QAAS,OAAU,MAAM,UAAU,EAAa,YAAY;;;AAIhE,IAAa,IAAwB,EAAoB,GAAQ,EAAc,EAClE,IAAa,EAAO,WAAW,KAAK,EAAO,EAC3C,IAAiB,EAAO,eAAe,KAAK,EAAO,EACnD,IAAsB,EAAO,oBAAoB,KAAK,EAAO"}
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,38 @@
1
+ import { n as e, t } from "../../shared-Cpn5kpPR.js";
2
+ //#region src/syllabi/food/index.ts
3
+ var n = /* @__PURE__ */ e({
4
+ config: () => r,
5
+ getAvailableLessons: () => c,
6
+ loadAllLessons: () => s,
7
+ loadLesson: () => o,
8
+ loader: () => a
9
+ }), r = {
10
+ id: "th-food",
11
+ title: "อาหารไทย (Thai Food)",
12
+ description: "Food vocabulary and ordering at restaurants",
13
+ language: "th",
14
+ locale: "th-TH",
15
+ lessonCount: 8,
16
+ difficulty: "beginner",
17
+ cefrLevel: "A2",
18
+ icon: "food",
19
+ version: "0.1.0"
20
+ };
21
+ async function i(e) {
22
+ switch (e) {
23
+ case 1: return import("../../lesson-01-CUGNC_ZI.js");
24
+ case 2: return import("../../lesson-02-C_BELKyt.js");
25
+ case 3: return import("../../lesson-03-8YUkTQTv.js");
26
+ case 4: return import("../../lesson-04-zsMZdbns.js");
27
+ case 5: return import("../../lesson-05-CtxbttlQ.js");
28
+ case 6: return import("../../lesson-06-Bb-2_iM_.js");
29
+ case 7: return import("../../lesson-07-B-ymvSq1.js");
30
+ case 8: return import("../../lesson-08-DPH_n5aL.js");
31
+ default: throw Error(`Lesson ${e} not found`);
32
+ }
33
+ }
34
+ var a = t(r, i), o = a.loadLesson.bind(a), s = a.loadAllLessons.bind(a), c = a.getAvailableLessons.bind(a);
35
+ //#endregion
36
+ export { r as config, c as getAvailableLessons, s as loadAllLessons, o as loadLesson, a as loader, n as t };
37
+
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"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"],"mappings":";;;;;;;;IAMa,IAAyB;CACpC,IAAI;CACJ,OAAO;CACP,aAAa;CACb,UAAU;CACV,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,WAAW;CACX,MAAM;CACN,SAAS;CACV;AAED,eAAe,EAAc,GAAsB;AACjD,SAAQ,GAAR;EACE,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,QAAS,OAAU,MAAM,UAAU,EAAa,YAAY;;;AAIhE,IAAa,IAAwB,EAAoB,GAAQ,EAAc,EAClE,IAAa,EAAO,WAAW,KAAK,EAAO,EAC3C,IAAiB,EAAO,eAAe,KAAK,EAAO,EACnD,IAAsB,EAAO,oBAAoB,KAAK,EAAO"}
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,38 @@
1
+ import { n as e, t } from "../../shared-Cpn5kpPR.js";
2
+ //#region src/syllabi/grammar/index.ts
3
+ var n = /* @__PURE__ */ e({
4
+ config: () => r,
5
+ getAvailableLessons: () => c,
6
+ loadAllLessons: () => s,
7
+ loadLesson: () => o,
8
+ loader: () => a
9
+ }), r = {
10
+ id: "th-grammar",
11
+ title: "ไวยากรณ์ไทย (Thai Grammar)",
12
+ description: "Essential Thai grammar patterns",
13
+ language: "th",
14
+ locale: "th-TH",
15
+ lessonCount: 8,
16
+ difficulty: "intermediate",
17
+ cefrLevel: "B1",
18
+ icon: "grammar",
19
+ version: "0.1.0"
20
+ };
21
+ async function i(e) {
22
+ switch (e) {
23
+ case 1: return import("../../lesson-01-Te5nTr_7.js");
24
+ case 2: return import("../../lesson-02-BppqeuRW.js");
25
+ case 3: return import("../../lesson-03-BdqAXlLg.js");
26
+ case 4: return import("../../lesson-04-BnRott80.js");
27
+ case 5: return import("../../lesson-05-DZ2zLG_f.js");
28
+ case 6: return import("../../lesson-06-7LtYBqua.js");
29
+ case 7: return import("../../lesson-07-ChjCsvGT.js");
30
+ case 8: return import("../../lesson-08-Dd8wp6wx.js");
31
+ default: throw Error(`Lesson ${e} not found`);
32
+ }
33
+ }
34
+ var a = t(r, i), o = a.loadLesson.bind(a), s = a.loadAllLessons.bind(a), c = a.getAvailableLessons.bind(a);
35
+ //#endregion
36
+ export { r as config, c as getAvailableLessons, s as loadAllLessons, o as loadLesson, a as loader, n as t };
37
+
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"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"],"mappings":";;;;;;;;IAMa,IAAyB;CACpC,IAAI;CACJ,OAAO;CACP,aAAa;CACb,UAAU;CACV,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,WAAW;CACX,MAAM;CACN,SAAS;CACV;AAED,eAAe,EAAc,GAAsB;AACjD,SAAQ,GAAR;EACE,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,QAAS,OAAU,MAAM,UAAU,EAAa,YAAY;;;AAIhE,IAAa,IAAwB,EAAoB,GAAQ,EAAc,EAClE,IAAa,EAAO,WAAW,KAAK,EAAO,EAC3C,IAAiB,EAAO,eAAe,KAAK,EAAO,EACnD,IAAsB,EAAO,oBAAoB,KAAK,EAAO"}
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,35 @@
1
+ import { n as e, t } from "../../shared-Cpn5kpPR.js";
2
+ //#region src/syllabi/numbers/index.ts
3
+ var n = /* @__PURE__ */ e({
4
+ config: () => r,
5
+ getAvailableLessons: () => c,
6
+ loadAllLessons: () => s,
7
+ loadLesson: () => o,
8
+ loader: () => a
9
+ }), r = {
10
+ id: "th-numbers",
11
+ title: "ตัวเลขไทย (Thai Numbers)",
12
+ description: "Learn Thai numerals and counting",
13
+ language: "th",
14
+ locale: "th-TH",
15
+ lessonCount: 5,
16
+ difficulty: "beginner",
17
+ cefrLevel: "A1",
18
+ icon: "numbers",
19
+ version: "0.1.0"
20
+ };
21
+ async function i(e) {
22
+ switch (e) {
23
+ case 1: return import("../../lesson-01-Cru6vUXD.js");
24
+ case 2: return import("../../lesson-02-DWCqJO4h.js");
25
+ case 3: return import("../../lesson-03-gfHMYFsC.js");
26
+ case 4: return import("../../lesson-04-5iuH2ilz.js");
27
+ case 5: return import("../../lesson-05-LEwbqTUO.js");
28
+ default: throw Error(`Lesson ${e} not found`);
29
+ }
30
+ }
31
+ var a = t(r, i), o = a.loadLesson.bind(a), s = a.loadAllLessons.bind(a), c = a.getAvailableLessons.bind(a);
32
+ //#endregion
33
+ export { r as config, c as getAvailableLessons, s as loadAllLessons, o as loadLesson, a as loader, n as t };
34
+
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"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"],"mappings":";;;;;;;;IAMa,IAAyB;CACpC,IAAI;CACJ,OAAO;CACP,aAAa;CACb,UAAU;CACV,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,WAAW;CACX,MAAM;CACN,SAAS;CACV;AAED,eAAe,EAAc,GAAsB;AACjD,SAAQ,GAAR;EACE,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,QAAS,OAAU,MAAM,UAAU,EAAa,YAAY;;;AAIhE,IAAa,IAAwB,EAAoB,GAAQ,EAAc,EAClE,IAAa,EAAO,WAAW,KAAK,EAAO,EAC3C,IAAiB,EAAO,eAAe,KAAK,EAAO,EACnD,IAAsB,EAAO,oBAAoB,KAAK,EAAO"}
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,40 @@
1
+ import { n as e, t } from "../../shared-Cpn5kpPR.js";
2
+ //#region src/syllabi/reading/index.ts
3
+ var n = /* @__PURE__ */ e({
4
+ config: () => r,
5
+ getAvailableLessons: () => c,
6
+ loadAllLessons: () => s,
7
+ loadLesson: () => o,
8
+ loader: () => a
9
+ }), r = {
10
+ id: "th-reading",
11
+ title: "การอ่าน (Thai Reading)",
12
+ description: "Reading practice with Thai texts",
13
+ language: "th",
14
+ locale: "th-TH",
15
+ lessonCount: 10,
16
+ difficulty: "intermediate",
17
+ cefrLevel: "B1",
18
+ icon: "reading",
19
+ version: "0.1.0"
20
+ };
21
+ async function i(e) {
22
+ switch (e) {
23
+ case 1: return import("../../lesson-01-5WMLkFR4.js");
24
+ case 2: return import("../../lesson-02-Pco4rB-e.js");
25
+ case 3: return import("../../lesson-03-CcEoyIow.js");
26
+ case 4: return import("../../lesson-04-DiBGRoWo.js");
27
+ case 5: return import("../../lesson-05-CtLAKu4H.js");
28
+ case 6: return import("../../lesson-06-CbptJEVj.js");
29
+ case 7: return import("../../lesson-07-Cv5XFbyM.js");
30
+ case 8: return import("../../lesson-08-BTjJzUbl.js");
31
+ case 9: return import("../../lesson-09-B5N9z5cw.js");
32
+ case 10: return import("../../lesson-10-BfrJTy0x.js");
33
+ default: throw Error(`Lesson ${e} not found`);
34
+ }
35
+ }
36
+ var a = t(r, i), o = a.loadLesson.bind(a), s = a.loadAllLessons.bind(a), c = a.getAvailableLessons.bind(a);
37
+ //#endregion
38
+ export { r as config, c as getAvailableLessons, s as loadAllLessons, o as loadLesson, a as loader, n as t };
39
+
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"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"],"mappings":";;;;;;;;IAMa,IAAyB;CACpC,IAAI;CACJ,OAAO;CACP,aAAa;CACb,UAAU;CACV,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,WAAW;CACX,MAAM;CACN,SAAS;CACV;AAED,eAAe,EAAc,GAAsB;AACjD,SAAQ,GAAR;EACE,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,GAAI,QAAO,OAAO;EACvB,QAAS,OAAU,MAAM,UAAU,EAAa,YAAY;;;AAIhE,IAAa,IAAwB,EAAoB,GAAQ,EAAc,EAClE,IAAa,EAAO,WAAW,KAAK,EAAO,EAC3C,IAAiB,EAAO,eAAe,KAAK,EAAO,EACnD,IAAsB,EAAO,oBAAoB,KAAK,EAAO"}
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,37 @@
1
+ import { n as e, t } from "../../shared-Cpn5kpPR.js";
2
+ //#region src/syllabi/travel/index.ts
3
+ var n = /* @__PURE__ */ e({
4
+ config: () => r,
5
+ getAvailableLessons: () => c,
6
+ loadAllLessons: () => s,
7
+ loadLesson: () => o,
8
+ loader: () => a
9
+ }), r = {
10
+ id: "th-travel",
11
+ title: "การเดินทาง (Thai Travel)",
12
+ description: "Travel vocabulary and directions",
13
+ language: "th",
14
+ locale: "th-TH",
15
+ lessonCount: 7,
16
+ difficulty: "beginner",
17
+ cefrLevel: "A2",
18
+ icon: "travel",
19
+ version: "0.1.0"
20
+ };
21
+ async function i(e) {
22
+ switch (e) {
23
+ case 1: return import("../../lesson-01-Bkv5huMA.js");
24
+ case 2: return import("../../lesson-02-DgKk9Fsv.js");
25
+ case 3: return import("../../lesson-03-C_8Ud78K.js");
26
+ case 4: return import("../../lesson-04-DXdHOnBY.js");
27
+ case 5: return import("../../lesson-05-CvkiKhAc.js");
28
+ case 6: return import("../../lesson-06-UZMKnHut.js");
29
+ case 7: return import("../../lesson-07-BC_VS67I.js");
30
+ default: throw Error(`Lesson ${e} not found`);
31
+ }
32
+ }
33
+ var a = t(r, i), o = a.loadLesson.bind(a), s = a.loadAllLessons.bind(a), c = a.getAvailableLessons.bind(a);
34
+ //#endregion
35
+ export { r as config, c as getAvailableLessons, s as loadAllLessons, o as loadLesson, a as loader, n as t };
36
+
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"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"],"mappings":";;;;;;;;IAMa,IAAyB;CACpC,IAAI;CACJ,OAAO;CACP,aAAa;CACb,UAAU;CACV,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,WAAW;CACX,MAAM;CACN,SAAS;CACV;AAED,eAAe,EAAc,GAAsB;AACjD,SAAQ,GAAR;EACE,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,QAAS,OAAU,MAAM,UAAU,EAAa,YAAY;;;AAIhE,IAAa,IAAwB,EAAoB,GAAQ,EAAc,EAClE,IAAa,EAAO,WAAW,KAAK,EAAO,EAC3C,IAAiB,EAAO,eAAe,KAAK,EAAO,EACnD,IAAsB,EAAO,oBAAoB,KAAK,EAAO"}
@@ -0,0 +1,7 @@
1
+ import { SyllabusConfig, ContentLoader } from '../../shared.js';
2
+ export declare const config: SyllabusConfig;
3
+ export declare const loader: ContentLoader;
4
+ export declare const loadLesson: (lessonNumber: number) => Promise<import('../../shared.js').LoadedLesson>;
5
+ export declare const loadAllLessons: () => Promise<import('../../shared.js').LoadedLesson[]>;
6
+ export declare const getAvailableLessons: () => number[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,38 @@
1
+ import { n as e, t } from "../../shared-Cpn5kpPR.js";
2
+ //#region src/syllabi/vowels-tones/index.ts
3
+ var n = /* @__PURE__ */ e({
4
+ config: () => r,
5
+ getAvailableLessons: () => c,
6
+ loadAllLessons: () => s,
7
+ loadLesson: () => o,
8
+ loader: () => a
9
+ }), r = {
10
+ id: "th-vowels-tones",
11
+ title: "สระและวรรณยุกต์ (Vowels & Tones)",
12
+ description: "Master Thai vowels and the five tones",
13
+ language: "th",
14
+ locale: "th-TH",
15
+ lessonCount: 8,
16
+ difficulty: "beginner",
17
+ cefrLevel: "A1",
18
+ icon: "alphabet",
19
+ version: "0.1.0"
20
+ };
21
+ async function i(e) {
22
+ switch (e) {
23
+ case 1: return import("../../lesson-01-CXbu1LWK.js");
24
+ case 2: return import("../../lesson-02-3mt33eeQ.js");
25
+ case 3: return import("../../lesson-03-CKHl0mvU.js");
26
+ case 4: return import("../../lesson-04-_0xY9yxd.js");
27
+ case 5: return import("../../lesson-05-xwJq5Ahp.js");
28
+ case 6: return import("../../lesson-06-CGSWklWf.js");
29
+ case 7: return import("../../lesson-07-BGH2VCfQ.js");
30
+ case 8: return import("../../lesson-08-BQAzD1Fs.js");
31
+ default: throw Error(`Lesson ${e} not found`);
32
+ }
33
+ }
34
+ var a = t(r, i), o = a.loadLesson.bind(a), s = a.loadAllLessons.bind(a), c = a.getAvailableLessons.bind(a);
35
+ //#endregion
36
+ export { r as config, c as getAvailableLessons, s as loadAllLessons, o as loadLesson, a as loader, n as t };
37
+
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"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"],"mappings":";;;;;;;;IAMa,IAAyB;CACpC,IAAI;CACJ,OAAO;CACP,aAAa;CACb,UAAU;CACV,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,WAAW;CACX,MAAM;CACN,SAAS;CACV;AAED,eAAe,EAAc,GAAsB;AACjD,SAAQ,GAAR;EACE,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,KAAK,EAAG,QAAO,OAAO;EACtB,QAAS,OAAU,MAAM,UAAU,EAAa,YAAY;;;AAIhE,IAAa,IAAwB,EAAoB,GAAQ,EAAc,EAClE,IAAa,EAAO,WAAW,KAAK,EAAO,EAC3C,IAAiB,EAAO,eAAe,KAAK,EAAO,EACnD,IAAsB,EAAO,oBAAoB,KAAK,EAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polyglot-bundles/th-syllabi",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
4
  "description": "Thai syllabi - all Thai language syllabi in one package",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -55,10 +55,10 @@
55
55
  "tsx": "^4.7.0",
56
56
  "vite": "^8.0.8",
57
57
  "vite-plugin-dts": "^4.5.4",
58
- "@polyglot-bundles/syllabi-base": "0.6.0",
59
- "@polyglot-bundles/content-shared": "0.6.0",
58
+ "@polyglot-bundles/content-shared": "0.7.1",
59
+ "@polyglot-bundles/syllabi-base": "0.7.1",
60
60
  "@polyglot-bundles/lang-tooling": "0.0.0",
61
- "@polyglot-bundles/th-lang": "1.2.0"
61
+ "@polyglot-bundles/th-lang": "1.3.1"
62
62
  },
63
63
  "peerDependencies": {
64
64
  "@syllst/core": "^0.7.0",
@@ -79,7 +79,7 @@
79
79
  "license": "MIT",
80
80
  "repository": {
81
81
  "type": "git",
82
- "url": "https://github.com/fustilio/polyglot-bundles",
82
+ "url": "git+https://github.com/fustilio/polyglot-bundles.git",
83
83
  "directory": "packages/th/syllabi"
84
84
  },
85
85
  "scripts": {
@@ -13,7 +13,9 @@ categories:
13
13
  - basics
14
14
  metadata:
15
15
  estimatedTime: 30
16
- prerequisites: []
16
+ prerequisites:
17
+ - th-alphabet
18
+ - thai-vowels-lesson-02
17
19
  learningObjectives:
18
20
  - id: obj-greetings-hello-goodbye
19
21
  description: "Say hello and goodbye properly"