@syllst/ka 0.2.0 → 0.2.2

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 (135) hide show
  1. package/dist/index-B9OHu0Ax.js +52 -0
  2. package/dist/index-B9OHu0Ax.js.map +1 -0
  3. package/dist/{index-D9QQnpu5.js → index-D7wYzNIf.js} +18 -40
  4. package/dist/index-D7wYzNIf.js.map +1 -0
  5. package/dist/index-DCpqhby8.js +52 -0
  6. package/dist/index-DCpqhby8.js.map +1 -0
  7. package/dist/index-DflZY235.js +52 -0
  8. package/dist/index-DflZY235.js.map +1 -0
  9. package/dist/index-Dp1OEIeC.js +48 -0
  10. package/dist/index-Dp1OEIeC.js.map +1 -0
  11. package/dist/index-Dx8CaIyS.js +42 -0
  12. package/dist/index-Dx8CaIyS.js.map +1 -0
  13. package/dist/index.js +41 -11
  14. package/dist/index.js.map +1 -1
  15. package/dist/lesson-01-CSwZqadZ.js +193 -0
  16. package/dist/lesson-01-CSwZqadZ.js.map +1 -0
  17. package/dist/lesson-01-CXuaNjfX.js +196 -0
  18. package/dist/lesson-01-CXuaNjfX.js.map +1 -0
  19. package/dist/lesson-01-CjeVy1Pm.js +148 -0
  20. package/dist/lesson-01-CjeVy1Pm.js.map +1 -0
  21. package/dist/lesson-01-Cjq5zM3G.js +169 -0
  22. package/dist/lesson-01-Cjq5zM3G.js.map +1 -0
  23. package/dist/lesson-01-Dln4m4gy.js +185 -0
  24. package/dist/lesson-01-Dln4m4gy.js.map +1 -0
  25. package/dist/lesson-02-CKmyOzkz.js +189 -0
  26. package/dist/lesson-02-CKmyOzkz.js.map +1 -0
  27. package/dist/lesson-02-CW2iIZWk.js +242 -0
  28. package/dist/lesson-02-CW2iIZWk.js.map +1 -0
  29. package/dist/lesson-02-CjWc8Ndm.js +159 -0
  30. package/dist/lesson-02-CjWc8Ndm.js.map +1 -0
  31. package/dist/lesson-02-D6EZkoTX.js +186 -0
  32. package/dist/lesson-02-D6EZkoTX.js.map +1 -0
  33. package/dist/lesson-02-DEX5_pni.js +184 -0
  34. package/dist/lesson-02-DEX5_pni.js.map +1 -0
  35. package/dist/lesson-03-Cc9VcHwa.js +310 -0
  36. package/dist/lesson-03-Cc9VcHwa.js.map +1 -0
  37. package/dist/lesson-03-D-UB6j-3.js +155 -0
  38. package/dist/lesson-03-D-UB6j-3.js.map +1 -0
  39. package/dist/lesson-03-D4MQ-BF0.js +197 -0
  40. package/dist/lesson-03-D4MQ-BF0.js.map +1 -0
  41. package/dist/lesson-03-DIsrN1SX.js +192 -0
  42. package/dist/lesson-03-DIsrN1SX.js.map +1 -0
  43. package/dist/lesson-03-i2GGdsRN.js +181 -0
  44. package/dist/lesson-03-i2GGdsRN.js.map +1 -0
  45. package/dist/lesson-04-D2tqk_vu.js +166 -0
  46. package/dist/lesson-04-D2tqk_vu.js.map +1 -0
  47. package/dist/lesson-04-D3NM9z0Z.js +220 -0
  48. package/dist/lesson-04-D3NM9z0Z.js.map +1 -0
  49. package/dist/lesson-04-DciNjG8E.js +186 -0
  50. package/dist/lesson-04-DciNjG8E.js.map +1 -0
  51. package/dist/lesson-04-vbP_pH7H.js +201 -0
  52. package/dist/lesson-04-vbP_pH7H.js.map +1 -0
  53. package/dist/lesson-05-DDD4BdBD.js +197 -0
  54. package/dist/lesson-05-DDD4BdBD.js.map +1 -0
  55. package/dist/lesson-05-Dp2ZUMvn.js +227 -0
  56. package/dist/lesson-05-Dp2ZUMvn.js.map +1 -0
  57. package/dist/lesson-05-Du04UDw8.js +175 -0
  58. package/dist/lesson-05-Du04UDw8.js.map +1 -0
  59. package/dist/lesson-05-VfiWFnKX.js +192 -0
  60. package/dist/lesson-05-VfiWFnKX.js.map +1 -0
  61. package/dist/lesson-06-B247Ezo8.js +161 -0
  62. package/dist/lesson-06-B247Ezo8.js.map +1 -0
  63. package/dist/lesson-06-CT_T2-CF.js +201 -0
  64. package/dist/lesson-06-CT_T2-CF.js.map +1 -0
  65. package/dist/lesson-06-C_aRLClN.js +224 -0
  66. package/dist/lesson-06-C_aRLClN.js.map +1 -0
  67. package/dist/lesson-06-Cv5qUy34.js +208 -0
  68. package/dist/lesson-06-Cv5qUy34.js.map +1 -0
  69. package/dist/lesson-07-9svk0QSq.js +215 -0
  70. package/dist/lesson-07-9svk0QSq.js.map +1 -0
  71. package/dist/lesson-07-DGrnNH3e.js +223 -0
  72. package/dist/lesson-07-DGrnNH3e.js.map +1 -0
  73. package/dist/lesson-07-XGTm5Tp2.js +182 -0
  74. package/dist/lesson-07-XGTm5Tp2.js.map +1 -0
  75. package/dist/lesson-08-C5Oqga49.js +213 -0
  76. package/dist/lesson-08-C5Oqga49.js.map +1 -0
  77. package/dist/lesson-08-CDZOUysk.js +228 -0
  78. package/dist/lesson-08-CDZOUysk.js.map +1 -0
  79. package/dist/lesson-08-DiHa8O85.js +196 -0
  80. package/dist/lesson-08-DiHa8O85.js.map +1 -0
  81. package/dist/shared-DADMaTE7.js +27 -0
  82. package/dist/shared-DADMaTE7.js.map +1 -0
  83. package/dist/syllabi/alphabet/index.js +6 -5
  84. package/dist/syllabi/alphabet/index.js.map +1 -1
  85. package/dist/syllabi/dialogue/index.d.ts +7 -0
  86. package/dist/syllabi/dialogue/index.js +10 -0
  87. package/dist/syllabi/dialogue/index.js.map +1 -0
  88. package/dist/syllabi/essentials/index.d.ts +7 -0
  89. package/dist/syllabi/essentials/index.js +10 -0
  90. package/dist/syllabi/essentials/index.js.map +1 -0
  91. package/dist/syllabi/grammar/index.d.ts +7 -0
  92. package/dist/syllabi/grammar/index.js +10 -0
  93. package/dist/syllabi/grammar/index.js.map +1 -0
  94. package/dist/syllabi/numbers/index.d.ts +7 -0
  95. package/dist/syllabi/numbers/index.js +10 -0
  96. package/dist/syllabi/numbers/index.js.map +1 -0
  97. package/dist/syllabi/reading/index.d.ts +7 -0
  98. package/dist/syllabi/reading/index.js +10 -0
  99. package/dist/syllabi/reading/index.js.map +1 -0
  100. package/package.json +36 -10
  101. package/src/syllabi/dialogue/lessons/lesson-01.mdx +188 -0
  102. package/src/syllabi/dialogue/lessons/lesson-02.mdx +184 -0
  103. package/src/syllabi/dialogue/lessons/lesson-03.mdx +192 -0
  104. package/src/syllabi/dialogue/lessons/lesson-04.mdx +196 -0
  105. package/src/syllabi/dialogue/lessons/lesson-05.mdx +192 -0
  106. package/src/syllabi/dialogue/lessons/lesson-06.mdx +196 -0
  107. package/src/syllabi/dialogue/lessons/lesson-07.mdx +218 -0
  108. package/src/syllabi/dialogue/lessons/lesson-08.mdx +223 -0
  109. package/src/syllabi/essentials/lessons/lesson-01.mdx +164 -0
  110. package/src/syllabi/essentials/lessons/lesson-02.mdx +179 -0
  111. package/src/syllabi/essentials/lessons/lesson-03.mdx +187 -0
  112. package/src/syllabi/essentials/lessons/lesson-04.mdx +215 -0
  113. package/src/syllabi/essentials/lessons/lesson-05.mdx +222 -0
  114. package/src/syllabi/essentials/lessons/lesson-06.mdx +219 -0
  115. package/src/syllabi/essentials/meta.mdx +87 -0
  116. package/src/syllabi/grammar/lessons/lesson-01.mdx +143 -0
  117. package/src/syllabi/grammar/lessons/lesson-02.mdx +154 -0
  118. package/src/syllabi/grammar/lessons/lesson-03.mdx +150 -0
  119. package/src/syllabi/grammar/lessons/lesson-04.mdx +161 -0
  120. package/src/syllabi/grammar/lessons/lesson-05.mdx +170 -0
  121. package/src/syllabi/grammar/lessons/lesson-06.mdx +156 -0
  122. package/src/syllabi/grammar/lessons/lesson-07.mdx +177 -0
  123. package/src/syllabi/grammar/lessons/lesson-08.mdx +191 -0
  124. package/src/syllabi/numbers/lessons/lesson-01.mdx +191 -0
  125. package/src/syllabi/numbers/lessons/lesson-02.mdx +237 -0
  126. package/src/syllabi/numbers/lessons/lesson-03.mdx +305 -0
  127. package/src/syllabi/reading/lessons/lesson-01.mdx +180 -0
  128. package/src/syllabi/reading/lessons/lesson-02.mdx +181 -0
  129. package/src/syllabi/reading/lessons/lesson-03.mdx +176 -0
  130. package/src/syllabi/reading/lessons/lesson-04.mdx +181 -0
  131. package/src/syllabi/reading/lessons/lesson-05.mdx +187 -0
  132. package/src/syllabi/reading/lessons/lesson-06.mdx +203 -0
  133. package/src/syllabi/reading/lessons/lesson-07.mdx +210 -0
  134. package/src/syllabi/reading/lessons/lesson-08.mdx +208 -0
  135. package/dist/index-D9QQnpu5.js.map +0 -1
@@ -0,0 +1,196 @@
1
+ const e = `---
2
+ type: lesson
3
+ id: georgian-grammar-lesson-08
4
+ title: "გაკვეთილი 8 — ზედსართავები (Adjectives and Agreement)"
5
+ description: "Georgian adjectives precede nouns and have no grammatical gender"
6
+ order: 8
7
+ parentId: georgian-grammar
8
+ difficulty: intermediate
9
+ cefrLevel: A2
10
+ categories:
11
+ - grammar
12
+ - adjectives
13
+ metadata:
14
+ estimatedTime: 30
15
+ prerequisites:
16
+ - georgian-grammar-lesson-07
17
+ learningObjectives:
18
+ - id: obj-08-adjectives-order
19
+ description: "Place adjectives in the correct position before the noun"
20
+ skill: word-order
21
+ - id: obj-08-adjectives-apply
22
+ description: "Use common adjectives in descriptive sentences"
23
+ skill: pattern-application
24
+ - id: obj-08-adjectives-produce
25
+ description: "Produce noun phrases and sentences with adjectives"
26
+ skill: word-production
27
+ ---
28
+
29
+ # გაკვეთილი 8 (Lesson 8) — Adjectives
30
+
31
+ ## Introduction
32
+
33
+ Georgian adjectives are in many ways simpler than those in European languages like French, Spanish, or German. There are two key facts to learn:
34
+
35
+ 1. **Adjectives come before the noun** — just like in English.
36
+ 2. **Georgian has no grammatical gender** — adjectives never change to agree with masculine or feminine nouns, because those categories do not exist in Georgian.
37
+
38
+ This makes Georgian adjectives refreshingly straightforward once you know the vocabulary.
39
+
40
+ ## Adjective Position
41
+
42
+ Adjectives in Georgian always precede the noun they modify:
43
+
44
+ | Georgian | Transliteration | Meaning |
45
+ |----------|-----------------|---------|
46
+ | დიდი სახლი | didi sakhli | big house |
47
+ | პატარა ბავშვი | patara bavshvi | small child |
48
+ | კარგი ადამიანი | kargi adamiani | good person |
49
+ | ცუდი ამინდი | tsudi amindi | bad weather |
50
+ | ახალი წიგნი | akhali tsigni | new book |
51
+ | ლამაზი ქალაქი | lamazi kalaki | beautiful city |
52
+
53
+ ## Core Adjectives
54
+
55
+ :::vocabulary-set{id="ka-gram-08-adjectives" title="Common Georgian Adjectives"}
56
+
57
+ ::vocab-item{id="didi" word="დიდი" pronunciation="di-di" meaning="big, large, great"}
58
+
59
+ ::vocab-item{id="patara" word="პატარა" pronunciation="pa-ta-ra" meaning="small, little"}
60
+
61
+ ::vocab-item{id="kargi" word="კარგი" pronunciation="kar-gi" meaning="good"}
62
+
63
+ ::vocab-item{id="tsudi" word="ცუდი" pronunciation="tsu-di" meaning="bad"}
64
+
65
+ ::vocab-item{id="akhali" word="ახალი" pronunciation="a-kha-li" meaning="new"}
66
+
67
+ ::vocab-item{id="dzvelі" word="ძველი" pronunciation="dzve-li" meaning="old (of things)"}
68
+
69
+ ::vocab-item{id="lamazi" word="ლამაზი" pronunciation="la-ma-zi" meaning="beautiful, pretty"}
70
+
71
+ ::vocab-item{id="dzmali" word="ძლიერი" pronunciation="dzli-e-ri" meaning="strong, powerful"}
72
+
73
+ :::
74
+
75
+ ## No Gender Agreement — A Genuine Advantage
76
+
77
+ In French, you say *un grand homme* (a great man) but *une grande femme* (a great woman) — the adjective changes. In Georgian, **there is no such distinction**:
78
+
79
+ - დიდი კაცი (didi katsi) — a big man
80
+ - დიდი ქალი (didi kali) — a big woman
81
+ - დიდი სახლი (didi sakhli) — a big house
82
+
83
+ The adjective **დიდი** never changes. This holds for all Georgian adjectives.
84
+
85
+ ## Adjectives in Case — They Follow the Noun
86
+
87
+ While the adjective itself does not change for gender, adjectives **do follow the case of the noun they modify** when the noun takes a case ending:
88
+
89
+ | Noun alone | Noun + adj | Meaning |
90
+ |------------|------------|---------|
91
+ | სახლი (nominative) | დიდი სახლი | big house (subject of intransitive) |
92
+ | სახლს (dative) | დიდ სახლს | big house (object in present) |
93
+ | სახლში (in + noun) | დიდ სახლში | in the big house |
94
+
95
+ When the noun loses its -ი ending (as it does before postpositions), the adjective also drops its -ი:
96
+ - დიდი → დიდ- (before postpositions or case-marked noun)
97
+
98
+ This is a learner-level observation — mastery comes with exposure.
99
+
100
+ ## Comparative and Superlative
101
+
102
+ Georgian forms comparatives and superlatives analytically (with separate words, not suffixes):
103
+
104
+ | Degree | Structure | Example | Meaning |
105
+ |--------|-----------|---------|---------|
106
+ | Positive | adjective alone | კარგი | good |
107
+ | Comparative | უ- + adj + -ეს | უკეთესი | better |
108
+ | Superlative | ყველაზე + adj | ყველაზე კარგი | the best |
109
+
110
+ The **ყველაზე** (qvelaze) superlative is formed with the postposition **-ზე** (on/at) attached to **ყველა** (qvela, all) — literally "at all" or "above all."
111
+
112
+ ## Practice Exercises
113
+
114
+ :::exercise{id="ka-gram-08-adjectives-order" type="fill-in-blank" title="Place the Adjective" skill="word-order" objectiveId="obj-08-adjectives-order"}
115
+
116
+ **Question:** Arrange each pair into a correct Georgian noun phrase (adjective before noun)
117
+
118
+ 1. სახლი / დიდი (house / big)
119
+ 2. ბავშვი / პატარა (child / small)
120
+ 3. ქალაქი / ლამაზი (city / beautiful)
121
+ 4. წიგნი / ახალი (book / new)
122
+
123
+ **Answer:**
124
+
125
+ 1. **დიდი სახლი** (big house)
126
+ 2. **პატარა ბავშვი** (small child)
127
+ 3. **ლამაზი ქალაქი** (beautiful city)
128
+ 4. **ახალი წიგნი** (new book)
129
+
130
+ **Explanation:** In Georgian, adjectives always come before the noun — just like English. Unlike French or Spanish, there is no gender agreement to worry about. The adjective form stays the same regardless of the noun.
131
+
132
+ :::
133
+
134
+ :::exercise{id="ka-gram-08-adjectives-apply" type="matching" title="Match Adjective to Meaning" skill="pattern-application" objectiveId="obj-08-adjectives-apply"}
135
+
136
+ **Question:** Match each Georgian adjective to its English meaning
137
+
138
+ - დიდი
139
+ - პატარა
140
+ - კარგი
141
+ - ცუდი
142
+ - ახალი
143
+ - ძველი
144
+
145
+ **Answer:**
146
+
147
+ - დიდი → big / great
148
+ - პატარა → small / little
149
+ - კარგი → good
150
+ - ცუდი → bad
151
+ - ახალი → new
152
+ - ძველი → old (things)
153
+
154
+ **Explanation:** These six adjectives are among the most commonly used in everyday Georgian. კარგი and ცუდი also appear in common phrases: კარგად (well/good-bye) and ცუდი ამინდი (bad weather).
155
+
156
+ :::
157
+
158
+ :::exercise{id="ka-gram-08-adjectives-produce" type="fill-in-blank" title="Describe in Georgian" skill="word-production" objectiveId="obj-08-adjectives-produce"}
159
+
160
+ **Question:** Translate each description into Georgian
161
+
162
+ 1. a new book
163
+ 2. a beautiful city
164
+ 3. a big house
165
+ 4. a good person
166
+
167
+ **Answer:**
168
+
169
+ 1. **ახალი წიგნი**
170
+ 2. **ლამაზი ქალაქი**
171
+ 3. **დიდი სახლი**
172
+ 4. **კარგი ადამიანი**
173
+
174
+ **Explanation:** Place the adjective before the noun. No gender agreement required — the adjective form is identical regardless of what noun follows. This is one area where Georgian is simpler than many European languages.
175
+
176
+ :::
177
+
178
+ ## Congratulations
179
+
180
+ You have completed the Georgian Grammar syllabus. You now understand the core structural features of Georgian:
181
+
182
+ 1. **SOV word order** — verb goes last
183
+ 2. **Personal pronouns and to-be** — six pronouns, no gender
184
+ 3. **Nominative and ergative cases** — case follows verb type
185
+ 4. **Postpositions** — spatial markers that follow the noun
186
+ 5. **Present tense verbs** — ვ- prefix for first person, -ს for third
187
+ 6. **Aorist past tense** — ergative shift for transitive subjects
188
+ 7. **Questions and negation** — question words + intonation, არ / ვერ
189
+ 8. **Adjectives** — before the noun, no gender agreement
190
+
191
+ Continue building fluency by combining these patterns in real conversation and reading practice.
192
+ `;
193
+ export {
194
+ e as default
195
+ };
196
+ //# sourceMappingURL=lesson-08-DiHa8O85.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-08-DiHa8O85.js","sources":["../src/syllabi/grammar/lessons/lesson-08.mdx?raw"],"sourcesContent":["export default \"---\\ntype: lesson\\nid: georgian-grammar-lesson-08\\ntitle: \\\"გაკვეთილი 8 — ზედსართავები (Adjectives and Agreement)\\\"\\ndescription: \\\"Georgian adjectives precede nouns and have no grammatical gender\\\"\\norder: 8\\nparentId: georgian-grammar\\ndifficulty: intermediate\\ncefrLevel: A2\\ncategories:\\n - grammar\\n - adjectives\\nmetadata:\\n estimatedTime: 30\\n prerequisites:\\n - georgian-grammar-lesson-07\\n learningObjectives:\\n - id: obj-08-adjectives-order\\n description: \\\"Place adjectives in the correct position before the noun\\\"\\n skill: word-order\\n - id: obj-08-adjectives-apply\\n description: \\\"Use common adjectives in descriptive sentences\\\"\\n skill: pattern-application\\n - id: obj-08-adjectives-produce\\n description: \\\"Produce noun phrases and sentences with adjectives\\\"\\n skill: word-production\\n---\\n\\n# გაკვეთილი 8 (Lesson 8) — Adjectives\\n\\n## Introduction\\n\\nGeorgian adjectives are in many ways simpler than those in European languages like French, Spanish, or German. There are two key facts to learn:\\n\\n1. **Adjectives come before the noun** — just like in English.\\n2. **Georgian has no grammatical gender** — adjectives never change to agree with masculine or feminine nouns, because those categories do not exist in Georgian.\\n\\nThis makes Georgian adjectives refreshingly straightforward once you know the vocabulary.\\n\\n## Adjective Position\\n\\nAdjectives in Georgian always precede the noun they modify:\\n\\n| Georgian | Transliteration | Meaning |\\n|----------|-----------------|---------|\\n| დიდი სახლი | didi sakhli | big house |\\n| პატარა ბავშვი | patara bavshvi | small child |\\n| კარგი ადამიანი | kargi adamiani | good person |\\n| ცუდი ამინდი | tsudi amindi | bad weather |\\n| ახალი წიგნი | akhali tsigni | new book |\\n| ლამაზი ქალაქი | lamazi kalaki | beautiful city |\\n\\n## Core Adjectives\\n\\n:::vocabulary-set{id=\\\"ka-gram-08-adjectives\\\" title=\\\"Common Georgian Adjectives\\\"}\\n\\n::vocab-item{id=\\\"didi\\\" word=\\\"დიდი\\\" pronunciation=\\\"di-di\\\" meaning=\\\"big, large, great\\\"}\\n\\n::vocab-item{id=\\\"patara\\\" word=\\\"პატარა\\\" pronunciation=\\\"pa-ta-ra\\\" meaning=\\\"small, little\\\"}\\n\\n::vocab-item{id=\\\"kargi\\\" word=\\\"კარგი\\\" pronunciation=\\\"kar-gi\\\" meaning=\\\"good\\\"}\\n\\n::vocab-item{id=\\\"tsudi\\\" word=\\\"ცუდი\\\" pronunciation=\\\"tsu-di\\\" meaning=\\\"bad\\\"}\\n\\n::vocab-item{id=\\\"akhali\\\" word=\\\"ახალი\\\" pronunciation=\\\"a-kha-li\\\" meaning=\\\"new\\\"}\\n\\n::vocab-item{id=\\\"dzvelі\\\" word=\\\"ძველი\\\" pronunciation=\\\"dzve-li\\\" meaning=\\\"old (of things)\\\"}\\n\\n::vocab-item{id=\\\"lamazi\\\" word=\\\"ლამაზი\\\" pronunciation=\\\"la-ma-zi\\\" meaning=\\\"beautiful, pretty\\\"}\\n\\n::vocab-item{id=\\\"dzmali\\\" word=\\\"ძლიერი\\\" pronunciation=\\\"dzli-e-ri\\\" meaning=\\\"strong, powerful\\\"}\\n\\n:::\\n\\n## No Gender Agreement — A Genuine Advantage\\n\\nIn French, you say *un grand homme* (a great man) but *une grande femme* (a great woman) — the adjective changes. In Georgian, **there is no such distinction**:\\n\\n- დიდი კაცი (didi katsi) — a big man\\n- დიდი ქალი (didi kali) — a big woman\\n- დიდი სახლი (didi sakhli) — a big house\\n\\nThe adjective **დიდი** never changes. This holds for all Georgian adjectives.\\n\\n## Adjectives in Case — They Follow the Noun\\n\\nWhile the adjective itself does not change for gender, adjectives **do follow the case of the noun they modify** when the noun takes a case ending:\\n\\n| Noun alone | Noun + adj | Meaning |\\n|------------|------------|---------|\\n| სახლი (nominative) | დიდი სახლი | big house (subject of intransitive) |\\n| სახლს (dative) | დიდ სახლს | big house (object in present) |\\n| სახლში (in + noun) | დიდ სახლში | in the big house |\\n\\nWhen the noun loses its -ი ending (as it does before postpositions), the adjective also drops its -ი:\\n- დიდი → დიდ- (before postpositions or case-marked noun)\\n\\nThis is a learner-level observation — mastery comes with exposure.\\n\\n## Comparative and Superlative\\n\\nGeorgian forms comparatives and superlatives analytically (with separate words, not suffixes):\\n\\n| Degree | Structure | Example | Meaning |\\n|--------|-----------|---------|---------|\\n| Positive | adjective alone | კარგი | good |\\n| Comparative | უ- + adj + -ეს | უკეთესი | better |\\n| Superlative | ყველაზე + adj | ყველაზე კარგი | the best |\\n\\nThe **ყველაზე** (qvelaze) superlative is formed with the postposition **-ზე** (on/at) attached to **ყველა** (qvela, all) — literally \\\"at all\\\" or \\\"above all.\\\"\\n\\n## Practice Exercises\\n\\n:::exercise{id=\\\"ka-gram-08-adjectives-order\\\" type=\\\"fill-in-blank\\\" title=\\\"Place the Adjective\\\" skill=\\\"word-order\\\" objectiveId=\\\"obj-08-adjectives-order\\\"}\\n\\n**Question:** Arrange each pair into a correct Georgian noun phrase (adjective before noun)\\n\\n1. სახლი / დიდი (house / big)\\n2. ბავშვი / პატარა (child / small)\\n3. ქალაქი / ლამაზი (city / beautiful)\\n4. წიგნი / ახალი (book / new)\\n\\n**Answer:**\\n\\n1. **დიდი სახლი** (big house)\\n2. **პატარა ბავშვი** (small child)\\n3. **ლამაზი ქალაქი** (beautiful city)\\n4. **ახალი წიგნი** (new book)\\n\\n**Explanation:** In Georgian, adjectives always come before the noun — just like English. Unlike French or Spanish, there is no gender agreement to worry about. The adjective form stays the same regardless of the noun.\\n\\n:::\\n\\n:::exercise{id=\\\"ka-gram-08-adjectives-apply\\\" type=\\\"matching\\\" title=\\\"Match Adjective to Meaning\\\" skill=\\\"pattern-application\\\" objectiveId=\\\"obj-08-adjectives-apply\\\"}\\n\\n**Question:** Match each Georgian adjective to its English meaning\\n\\n- დიდი\\n- პატარა\\n- კარგი\\n- ცუდი\\n- ახალი\\n- ძველი\\n\\n**Answer:**\\n\\n- დიდი → big / great\\n- პატარა → small / little\\n- კარგი → good\\n- ცუდი → bad\\n- ახალი → new\\n- ძველი → old (things)\\n\\n**Explanation:** These six adjectives are among the most commonly used in everyday Georgian. კარგი and ცუდი also appear in common phrases: კარგად (well/good-bye) and ცუდი ამინდი (bad weather).\\n\\n:::\\n\\n:::exercise{id=\\\"ka-gram-08-adjectives-produce\\\" type=\\\"fill-in-blank\\\" title=\\\"Describe in Georgian\\\" skill=\\\"word-production\\\" objectiveId=\\\"obj-08-adjectives-produce\\\"}\\n\\n**Question:** Translate each description into Georgian\\n\\n1. a new book\\n2. a beautiful city\\n3. a big house\\n4. a good person\\n\\n**Answer:**\\n\\n1. **ახალი წიგნი**\\n2. **ლამაზი ქალაქი**\\n3. **დიდი სახლი**\\n4. **კარგი ადამიანი**\\n\\n**Explanation:** Place the adjective before the noun. No gender agreement required — the adjective form is identical regardless of what noun follows. This is one area where Georgian is simpler than many European languages.\\n\\n:::\\n\\n## Congratulations\\n\\nYou have completed the Georgian Grammar syllabus. You now understand the core structural features of Georgian:\\n\\n1. **SOV word order** — verb goes last\\n2. **Personal pronouns and to-be** — six pronouns, no gender\\n3. **Nominative and ergative cases** — case follows verb type\\n4. **Postpositions** — spatial markers that follow the noun\\n5. **Present tense verbs** — ვ- prefix for first person, -ს for third\\n6. **Aorist past tense** — ergative shift for transitive subjects\\n7. **Questions and negation** — question words + intonation, არ / ვერ\\n8. **Adjectives** — before the noun, no gender agreement\\n\\nContinue building fluency by combining these patterns in real conversation and reading practice.\\n\""],"names":["lesson08"],"mappings":"AAAA,MAAAA,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -0,0 +1,27 @@
1
+ function e(o, s) {
2
+ return {
3
+ config: o,
4
+ async loadLesson(n) {
5
+ if (n < 1 || n > o.lessonCount)
6
+ throw new Error(`Lesson ${n} not found. Valid range: 1-${o.lessonCount}`);
7
+ const t = await s(n);
8
+ return {
9
+ number: n,
10
+ rawContent: t.default
11
+ };
12
+ },
13
+ async loadAllLessons() {
14
+ const n = [];
15
+ for (let t = 1; t <= o.lessonCount; t++)
16
+ n.push(await this.loadLesson(t));
17
+ return n;
18
+ },
19
+ getAvailableLessons() {
20
+ return Array.from({ length: o.lessonCount }, (n, t) => t + 1);
21
+ }
22
+ };
23
+ }
24
+ export {
25
+ e as c
26
+ };
27
+ //# sourceMappingURL=shared-DADMaTE7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-DADMaTE7.js","sources":["../src/shared.ts"],"sourcesContent":["/**\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., \"ka-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., \"ka-GE\") */\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"],"names":["createContentLoader","config","loadLessonMDX","lessonNumber","module","lessons","i","_"],"mappings":"AAiFO,SAASA,EACdC,GACAC,GACe;AACf,SAAO;AAAA,IACL,QAAAD;AAAA,IAEA,MAAM,WAAWE,GAA6C;AAC5D,UAAIA,IAAe,KAAKA,IAAeF,EAAO;AAC5C,cAAM,IAAI,MAAM,UAAUE,CAAY,8BAA8BF,EAAO,WAAW,EAAE;AAE1F,YAAMG,IAAS,MAAMF,EAAcC,CAAY;AAC/C,aAAO;AAAA,QACL,QAAQA;AAAA,QACR,YAAYC,EAAO;AAAA,MAAA;AAAA,IAEvB;AAAA,IAEA,MAAM,iBAA0C;AAC9C,YAAMC,IAA0B,CAAA;AAChC,eAASC,IAAI,GAAGA,KAAKL,EAAO,aAAaK;AACvC,QAAAD,EAAQ,KAAK,MAAM,KAAK,WAAWC,CAAC,CAAC;AAEvC,aAAOD;AAAA,IACT;AAAA,IAEA,sBAAgC;AAC9B,aAAO,MAAM,KAAK,EAAE,QAAQJ,EAAO,YAAA,GAAe,CAACM,GAAGD,MAAMA,IAAI,CAAC;AAAA,IACnE;AAAA,EAAA;AAEJ;"}
@@ -1,9 +1,10 @@
1
- import { c as o, g as l, a as e, b as n, l as d } from "../../index-D9QQnpu5.js";
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-D7wYzNIf.js";
2
3
  export {
3
- o as config,
4
- l as getAvailableLessons,
5
- e as loadAllLessons,
6
- n as loadLesson,
4
+ l as config,
5
+ e as getAvailableLessons,
6
+ n as loadAllLessons,
7
+ r as loadLesson,
7
8
  d as loader
8
9
  };
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -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,10 @@
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-DCpqhby8.js";
3
+ export {
4
+ l as config,
5
+ e as getAvailableLessons,
6
+ n as loadAllLessons,
7
+ r as loadLesson,
8
+ d as loader
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -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,10 @@
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-Dp1OEIeC.js";
3
+ export {
4
+ l as config,
5
+ e as getAvailableLessons,
6
+ n as loadAllLessons,
7
+ r as loadLesson,
8
+ d as loader
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -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,10 @@
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-DflZY235.js";
3
+ export {
4
+ l as config,
5
+ e as getAvailableLessons,
6
+ n as loadAllLessons,
7
+ r as loadLesson,
8
+ d as loader
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -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,10 @@
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-Dx8CaIyS.js";
3
+ export {
4
+ l as config,
5
+ e as getAvailableLessons,
6
+ n as loadAllLessons,
7
+ r as loadLesson,
8
+ d as loader
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -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,10 @@
1
+ import "../../shared-DADMaTE7.js";
2
+ import { c as l, g as e, a as n, b as r, l as d } from "../../index-B9OHu0Ax.js";
3
+ export {
4
+ l as config,
5
+ e as getAvailableLessons,
6
+ n as loadAllLessons,
7
+ r as loadLesson,
8
+ d as loader
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@syllst/ka",
3
- "version": "0.2.0",
4
- "description": "Georgian SYLLST content - Georgian alphabet syllabus (Mkhedruli script)",
3
+ "version": "0.2.2",
4
+ "description": "Georgian SYLLST content - Georgian alphabet (Mkhedruli script), numbers, and essentials syllabi",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -13,6 +13,26 @@
13
13
  "./alphabet": {
14
14
  "types": "./dist/syllabi/alphabet/index.d.ts",
15
15
  "import": "./dist/syllabi/alphabet/index.js"
16
+ },
17
+ "./numbers": {
18
+ "types": "./dist/syllabi/numbers/index.d.ts",
19
+ "import": "./dist/syllabi/numbers/index.js"
20
+ },
21
+ "./essentials": {
22
+ "types": "./dist/syllabi/essentials/index.d.ts",
23
+ "import": "./dist/syllabi/essentials/index.js"
24
+ },
25
+ "./grammar": {
26
+ "types": "./dist/syllabi/grammar/index.d.ts",
27
+ "import": "./dist/syllabi/grammar/index.js"
28
+ },
29
+ "./dialogue": {
30
+ "types": "./dist/syllabi/dialogue/index.d.ts",
31
+ "import": "./dist/syllabi/dialogue/index.js"
32
+ },
33
+ "./reading": {
34
+ "types": "./dist/syllabi/reading/index.d.ts",
35
+ "import": "./dist/syllabi/reading/index.js"
16
36
  }
17
37
  },
18
38
  "files": [
@@ -22,14 +42,15 @@
22
42
  "dependencies": {},
23
43
  "devDependencies": {
24
44
  "tsx": "^4.7.0",
25
- "vite": "^5.4.0",
26
- "vite-plugin-dts": "^4.0.0",
27
- "@laeng/ka": "0.2.0",
28
- "@syllst/content-shared": "0.2.0"
45
+ "vite": "^7.3.1",
46
+ "vite-plugin-dts": "^4.5.4",
47
+ "vitest": "^4.0.18",
48
+ "@laeng/ka": "0.2.1",
49
+ "@syllst/content-shared": "0.2.2"
29
50
  },
30
51
  "peerDependencies": {
31
- "@syllst/core": "^0.4.0",
32
- "@syllst/processor": "^0.4.0"
52
+ "@syllst/core": "^0.4.2",
53
+ "@syllst/processor": "^0.5.0"
33
54
  },
34
55
  "publishConfig": {
35
56
  "access": "public"
@@ -41,7 +62,12 @@
41
62
  "syllst",
42
63
  "mdx",
43
64
  "alphabet",
44
- "mkhedruli"
65
+ "mkhedruli",
66
+ "numbers",
67
+ "counting",
68
+ "essentials",
69
+ "phrases",
70
+ "greetings"
45
71
  ],
46
72
  "license": "MIT",
47
73
  "repository": {
@@ -53,7 +79,7 @@
53
79
  "build": "vite build",
54
80
  "clean": "rm -rf dist",
55
81
  "lint": "eslint src",
56
- "test": "vitest run",
82
+ "test": "vitest run --passWithNoTests",
57
83
  "validate": "tsx scripts/validate-ids.ts"
58
84
  }
59
85
  }