@syllst/ja 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/index.d.ts +80 -0
  2. package/dist/index.js +23 -0
  3. package/dist/shared.js +26 -0
  4. package/dist/syllabi/hiragana/index.d.ts +7 -0
  5. package/dist/syllabi/hiragana/index.js +47 -0
  6. package/dist/syllabi/hiragana/lessons/lesson-01.mdx.js +171 -0
  7. package/dist/syllabi/hiragana/lessons/lesson-02.mdx.js +160 -0
  8. package/dist/syllabi/hiragana/lessons/lesson-03.mdx.js +151 -0
  9. package/dist/syllabi/hiragana/lessons/lesson-04.mdx.js +158 -0
  10. package/dist/syllabi/hiragana/lessons/lesson-05.mdx.js +169 -0
  11. package/dist/syllabi/hiragana/lessons/lesson-06.mdx.js +174 -0
  12. package/dist/syllabi/hiragana/lessons/lesson-07.mdx.js +173 -0
  13. package/dist/syllabi/hiragana/lessons/lesson-08.mdx.js +159 -0
  14. package/dist/syllabi/hiragana/lessons/lesson-09.mdx.js +176 -0
  15. package/dist/syllabi/hiragana/lessons/lesson-10.mdx.js +199 -0
  16. package/dist/syllabi/katakana/index.js +37 -0
  17. package/dist/syllabi/katakana/lessons/lesson-01.mdx.js +196 -0
  18. package/dist/syllabi/katakana/lessons/lesson-02.mdx.js +210 -0
  19. package/dist/syllabi/katakana/lessons/lesson-03.mdx.js +214 -0
  20. package/dist/syllabi/katakana/lessons/lesson-04.mdx.js +216 -0
  21. package/dist/syllabi/katakana/lessons/lesson-05.mdx.js +259 -0
  22. package/package.json +64 -0
  23. package/src/syllabi/hiragana/lessons/lesson-01.mdx +167 -0
  24. package/src/syllabi/hiragana/lessons/lesson-02.mdx +156 -0
  25. package/src/syllabi/hiragana/lessons/lesson-03.mdx +147 -0
  26. package/src/syllabi/hiragana/lessons/lesson-04.mdx +154 -0
  27. package/src/syllabi/hiragana/lessons/lesson-05.mdx +165 -0
  28. package/src/syllabi/hiragana/lessons/lesson-06.mdx +170 -0
  29. package/src/syllabi/hiragana/lessons/lesson-07.mdx +169 -0
  30. package/src/syllabi/hiragana/lessons/lesson-08.mdx +155 -0
  31. package/src/syllabi/hiragana/lessons/lesson-09.mdx +172 -0
  32. package/src/syllabi/hiragana/lessons/lesson-10.mdx +195 -0
  33. package/src/syllabi/katakana/lessons/lesson-01.mdx +192 -0
  34. package/src/syllabi/katakana/lessons/lesson-02.mdx +206 -0
  35. package/src/syllabi/katakana/lessons/lesson-03.mdx +210 -0
  36. package/src/syllabi/katakana/lessons/lesson-04.mdx +212 -0
  37. package/src/syllabi/katakana/lessons/lesson-05.mdx +255 -0
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Shared types and utilities for SYLLST content
3
+ * (Inlined from @syllst/content-shared to make package self-contained)
4
+ */
5
+ /**
6
+ * CEFR language proficiency levels
7
+ */
8
+ declare type CEFRLevel = 'A1' | 'A2' | 'B1' | 'B2' | 'C1' | 'C2';
9
+
10
+ export declare const config: SyllabusConfig;
11
+
12
+ /**
13
+ * Content loader interface
14
+ */
15
+ declare interface ContentLoader {
16
+ /** Syllabus configuration */
17
+ config: SyllabusConfig;
18
+ /** Load a single lesson by number */
19
+ loadLesson(lessonNumber: number): Promise<LoadedLesson>;
20
+ /** Load all lessons */
21
+ loadAllLessons(): Promise<LoadedLesson[]>;
22
+ /** Get list of available lesson numbers */
23
+ getAvailableLessons(): number[];
24
+ }
25
+
26
+ /**
27
+ * Difficulty levels
28
+ */
29
+ declare type Difficulty = 'beginner' | 'intermediate' | 'advanced';
30
+
31
+ export declare const getAvailableLessons: () => number[];
32
+
33
+ export declare const loadAllLessons: () => Promise<LoadedLesson[]>;
34
+
35
+ /**
36
+ * Result of loading a lesson
37
+ */
38
+ declare interface LoadedLesson {
39
+ /** Lesson number (1-indexed) */
40
+ number: number;
41
+ /** Raw MDX content */
42
+ rawContent: string;
43
+ }
44
+
45
+ export declare const loader: ContentLoader;
46
+
47
+ export declare const loadLesson: (lessonNumber: number) => Promise<LoadedLesson>;
48
+
49
+ /**
50
+ * Configuration for a syllabus content package
51
+ */
52
+ declare interface SyllabusConfig {
53
+ /** Unique syllabus ID (e.g., "ja-hiragana") */
54
+ id: string;
55
+ /** Display title */
56
+ title: string;
57
+ /** Description */
58
+ description: string;
59
+ /** Language code (ISO 639-1) */
60
+ language: string;
61
+ /** Locale code (e.g., "ja-JP") */
62
+ locale: string;
63
+ /** Number of lessons */
64
+ lessonCount: number;
65
+ /** Difficulty level */
66
+ difficulty: Difficulty;
67
+ /** CEFR level */
68
+ cefrLevel: CEFRLevel;
69
+ /** Icon for display */
70
+ icon?: SyllabusIcon;
71
+ /** Package version */
72
+ version: string;
73
+ }
74
+
75
+ /**
76
+ * Icon types for syllabi
77
+ */
78
+ declare type SyllabusIcon = 'alphabet' | 'dialogue' | 'vocabulary' | 'grammar' | 'reading' | 'numbers' | 'food' | 'travel';
79
+
80
+ export { }
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ import { config as r } from "./syllabi/hiragana/index.js";
2
+ import * as f from "./syllabi/hiragana/index.js";
3
+ import { loader as p } from "./syllabi/hiragana/index.js";
4
+ import { config as i } from "./syllabi/katakana/index.js";
5
+ import * as g from "./syllabi/katakana/index.js";
6
+ import { loader as k } from "./syllabi/katakana/index.js";
7
+ const n = [
8
+ r,
9
+ i
10
+ ];
11
+ function s(a) {
12
+ return n.find((o) => o.id === a);
13
+ }
14
+ export {
15
+ n as allConfigs,
16
+ s as getConfigById,
17
+ f as hiragana,
18
+ r as hiraganaConfig,
19
+ p as hiraganaLoader,
20
+ g as katakana,
21
+ i as katakanaConfig,
22
+ k as katakanaLoader
23
+ };
package/dist/shared.js ADDED
@@ -0,0 +1,26 @@
1
+ function s(o, e) {
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 e(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
+ s as createContentLoader
26
+ };
@@ -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,47 @@
1
+ import { createContentLoader as a } from "../../shared.js";
2
+ const n = {
3
+ id: "ja-hiragana",
4
+ title: "ひらがな (Hiragana)",
5
+ description: "Learn the Japanese Hiragana script — all 46 basic characters across 10 lessons",
6
+ language: "ja",
7
+ locale: "ja-JP",
8
+ lessonCount: 10,
9
+ difficulty: "beginner",
10
+ cefrLevel: "A1",
11
+ icon: "alphabet",
12
+ version: "0.1.0"
13
+ };
14
+ async function s(r) {
15
+ switch (r) {
16
+ case 1:
17
+ return import("./lessons/lesson-01.mdx.js");
18
+ case 2:
19
+ return import("./lessons/lesson-02.mdx.js");
20
+ case 3:
21
+ return import("./lessons/lesson-03.mdx.js");
22
+ case 4:
23
+ return import("./lessons/lesson-04.mdx.js");
24
+ case 5:
25
+ return import("./lessons/lesson-05.mdx.js");
26
+ case 6:
27
+ return import("./lessons/lesson-06.mdx.js");
28
+ case 7:
29
+ return import("./lessons/lesson-07.mdx.js");
30
+ case 8:
31
+ return import("./lessons/lesson-08.mdx.js");
32
+ case 9:
33
+ return import("./lessons/lesson-09.mdx.js");
34
+ case 10:
35
+ return import("./lessons/lesson-10.mdx.js");
36
+ default:
37
+ throw new Error(`Lesson ${r} not found`);
38
+ }
39
+ }
40
+ const e = a(n, s), t = e.loadLesson.bind(e), i = e.loadAllLessons.bind(e), c = e.getAvailableLessons.bind(e);
41
+ export {
42
+ n as config,
43
+ c as getAvailableLessons,
44
+ i as loadAllLessons,
45
+ t as loadLesson,
46
+ e as loader
47
+ };
@@ -0,0 +1,171 @@
1
+ const a = `---
2
+ type: lesson
3
+ id: japanese-hiragana-lesson-01
4
+ title: "Lesson 1 — Vowels (あいうえお)"
5
+ description: "Learn the 5 Japanese vowels in Hiragana script"
6
+ order: 1
7
+ parentId: japanese-hiragana
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - vowels
12
+ - basic-characters
13
+ metadata:
14
+ estimatedTime: 20
15
+ prerequisites: []
16
+ learningObjectives:
17
+ - id: obj-recognize-vowels
18
+ description: "Recognize the five hiragana vowels"
19
+ skill: character-recognition
20
+ references: [hiragana-a, hiragana-i, hiragana-u, hiragana-e, hiragana-o]
21
+ - id: obj-sounds-vowels
22
+ description: "Map each vowel to its sound"
23
+ skill: character-sound-mapping
24
+ references: [hiragana-a, hiragana-i, hiragana-u, hiragana-e, hiragana-o]
25
+ ---
26
+
27
+ # Lesson 1 — Vowels (あいうえお)
28
+
29
+ ## Introduction
30
+
31
+ Welcome to Hiragana, one of the three Japanese writing systems. Hiragana is a phonetic script where each character represents one sound (mora). It is used for native Japanese words, grammatical elements, and is the first script Japanese children learn.
32
+
33
+ In this first lesson, you will learn the 5 vowels of Japanese. These vowels form the foundation of the entire Hiragana system.
34
+
35
+ ## The Japanese Vowel System
36
+
37
+ Japanese has exactly **5 vowel sounds**, similar to Spanish or Italian. These vowels are always pronounced the same way, regardless of context. There are no diphthongs or vowel reductions in standard Japanese.
38
+
39
+ The five vowels are:
40
+
41
+ - **a** (あ) — like "a" in "father"
42
+ - **i** (い) — like "ee" in "see"
43
+ - **u** (う) — like "oo" in "zoo" (but with less lip rounding)
44
+ - **e** (え) — like "e" in "bed"
45
+ - **o** (お) — like "o" in "go"
46
+
47
+ ## Characters
48
+
49
+ :::character-set{id="hiragana-vowels" title="Hiragana Vowels (あ行)"}
50
+
51
+ ::character{id="hiragana-a" canonicalRef="hiragana-a" char="あ" name="あ (a)" charType="hiragana" data:romaji="a" data:row="a"}
52
+
53
+ ::character{id="hiragana-i" canonicalRef="hiragana-i" char="い" name="い (i)" charType="hiragana" data:romaji="i" data:row="a"}
54
+
55
+ ::character{id="hiragana-u" canonicalRef="hiragana-u" char="う" name="う (u)" charType="hiragana" data:romaji="u" data:row="a"}
56
+
57
+ ::character{id="hiragana-e" canonicalRef="hiragana-e" char="え" name="え (e)" charType="hiragana" data:romaji="e" data:row="a"}
58
+
59
+ ::character{id="hiragana-o" canonicalRef="hiragana-o" char="お" name="お (o)" charType="hiragana" data:romaji="o" data:row="a"}
60
+
61
+ :::
62
+
63
+ ## Pronunciation Guide
64
+
65
+ | Character | Romaji | Sound | English Approximation |
66
+ |-----------|--------|-------|----------------------|
67
+ | あ | a | /a/ | "a" in "father" |
68
+ | い | i | /i/ | "ee" in "see" |
69
+ | う | u | /ɯ/ | "oo" in "zoo" (unrounded) |
70
+ | え | e | /e/ | "e" in "bed" |
71
+ | お | o | /o/ | "o" in "go" |
72
+
73
+ **Note on う (u):** The Japanese "u" sound is pronounced without rounding your lips, unlike the English "oo" sound. Try saying "oo" while keeping your lips relaxed and flat.
74
+
75
+ ## Writing Tips
76
+
77
+ - **あ**: Has three strokes. Starts with a small stroke at the top, then a curved body, then a final hook at the bottom right.
78
+ - **い**: Has two simple vertical strokes, slightly curved.
79
+ - **う**: Looks like a "U" with a tail. Two strokes.
80
+ - **え**: Has two strokes forming a distinctive shape like a backward "C" with a horizontal line.
81
+ - **お**: Has three strokes. Looks like a "tree" character (木) but more curved.
82
+
83
+ ## Practice Words
84
+
85
+ With just the five vowels, you can already read some Japanese words:
86
+
87
+ | Hiragana | Romaji | Meaning |
88
+ |----------|--------|---------|
89
+ | あい | ai | love |
90
+ | うえ | ue | above |
91
+ | あお | ao | blue |
92
+ | いえ | ie | house |
93
+
94
+ ## Key Points
95
+
96
+ 1. **Five vowels only**: Japanese has exactly 5 vowel sounds, always pronounced the same way.
97
+ 2. **Pure sounds**: No diphthongs or vowel changes based on position.
98
+ 3. **Foundation**: These 5 vowels combine with consonants to form all other hiragana characters.
99
+ 4. **Order matters**: The traditional order is あいうえお (a-i-u-e-o), not alphabetical like English.
100
+
101
+ ## Practice Recognition
102
+
103
+ :::exercise{id="ja-hiragana-01-recognition" type="matching" title="Match Characters to Sounds" skill="character-recognition" tests="hiragana-a,hiragana-i,hiragana-u,hiragana-e,hiragana-o" objectiveId="obj-recognize-vowels"}
104
+
105
+ **Question:** Match each hiragana vowel to its romaji sound
106
+
107
+ - あ
108
+ - い
109
+ - う
110
+ - え
111
+ - お
112
+
113
+ **Answer:**
114
+
115
+ - あ = a
116
+ - い = i
117
+ - う = u
118
+ - え = e
119
+ - お = o
120
+
121
+ **Explanation:** These are the five vowels of Japanese in their traditional order (a-i-u-e-o). This order is used throughout the hiragana chart and is fundamental to Japanese.
122
+
123
+ :::
124
+
125
+ :::exercise{id="ja-hiragana-01-sounds" type="fill-in-blank" title="Sound Mapping" skill="character-sound-mapping" tests="hiragana-a,hiragana-i,hiragana-u,hiragana-e,hiragana-o" objectiveId="obj-sounds-vowels"}
126
+
127
+ **Question:** What sound does each vowel make?
128
+
129
+ - あ sounds like ___
130
+ - い sounds like ___
131
+ - う sounds like ___
132
+ - え sounds like ___
133
+ - お sounds like ___
134
+
135
+ **Answer:**
136
+
137
+ - あ = /a/ as in "father"
138
+ - い = /i/ as in "see"
139
+ - う = /ɯ/ as in "zoo" (unrounded)
140
+ - え = /e/ as in "bed"
141
+ - お = /o/ as in "go"
142
+
143
+ **Explanation:** Japanese vowels are pure and consistent. Unlike English, they don't change pronunciation based on context or position in a word.
144
+
145
+ :::
146
+
147
+ :::exercise{id="ja-hiragana-01-word-reading" type="fill-in-blank" title="Read Simple Words" skill="word-recognition" tests="hiragana-a,hiragana-i,hiragana-u,hiragana-e,hiragana-o" objectiveId="obj-recognize-vowels"}
148
+
149
+ **Question:** Read the following hiragana words and give their pronunciation
150
+
151
+ - あい = ___
152
+ - うえ = ___
153
+ - いえ = ___
154
+
155
+ **Answer:**
156
+
157
+ - あい = "ai" (love)
158
+ - うえ = "ue" (above)
159
+ - いえ = "ie" (house)
160
+
161
+ **Explanation:** Read each character from left to right. Every hiragana character is always pronounced the same way, making Japanese highly phonetic.
162
+
163
+ :::
164
+
165
+ ## What's Next
166
+
167
+ In Lesson 2, you will learn the か-row (ka, ki, ku, ke, ko), which combines the consonant "k" with each of the five vowels you just learned.
168
+ `;
169
+ export {
170
+ a as default
171
+ };
@@ -0,0 +1,160 @@
1
+ const a = `---
2
+ type: lesson
3
+ id: japanese-hiragana-lesson-02
4
+ title: "Lesson 2 — Ka-row (かきくけこ)"
5
+ description: "Learn the か-row: ka, ki, ku, ke, ko"
6
+ order: 2
7
+ parentId: japanese-hiragana
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - consonants
12
+ - basic-characters
13
+ metadata:
14
+ estimatedTime: 20
15
+ prerequisites: [japanese-hiragana-lesson-01]
16
+ learningObjectives:
17
+ - id: obj-recognize-ka-row
18
+ description: "Recognize the ka-row hiragana characters"
19
+ skill: character-recognition
20
+ references: [hiragana-ka, hiragana-ki, hiragana-ku, hiragana-ke, hiragana-ko]
21
+ - id: obj-sounds-ka-row
22
+ description: "Map each ka-row character to its sound"
23
+ skill: character-sound-mapping
24
+ references: [hiragana-ka, hiragana-ki, hiragana-ku, hiragana-ke, hiragana-ko]
25
+ ---
26
+
27
+ # Lesson 2 — Ka-row (かきくけこ)
28
+
29
+ ## Introduction
30
+
31
+ In this lesson, you will learn the **か-row** (ka-gyō), the second row of the hiragana chart. This row combines the consonant sound "k" with each of the five vowels you learned in Lesson 1.
32
+
33
+ The pattern is simple: **k + vowel = ka, ki, ku, ke, ko**
34
+
35
+ ## Characters
36
+
37
+ :::character-set{id="hiragana-ka-row" title="Hiragana Ka-row (か行)"}
38
+
39
+ ::character{id="hiragana-ka" canonicalRef="hiragana-ka" char="か" name="か (ka)" charType="hiragana" data:romaji="ka" data:row="ka"}
40
+
41
+ ::character{id="hiragana-ki" canonicalRef="hiragana-ki" char="き" name="き (ki)" charType="hiragana" data:romaji="ki" data:row="ka"}
42
+
43
+ ::character{id="hiragana-ku" canonicalRef="hiragana-ku" char="く" name="く (ku)" charType="hiragana" data:romaji="ku" data:row="ka"}
44
+
45
+ ::character{id="hiragana-ke" canonicalRef="hiragana-ke" char="け" name="け (ke)" charType="hiragana" data:romaji="ke" data:row="ka"}
46
+
47
+ ::character{id="hiragana-ko" canonicalRef="hiragana-ko" char="こ" name="こ (ko)" charType="hiragana" data:romaji="ko" data:row="ka"}
48
+
49
+ :::
50
+
51
+ ## Pronunciation Guide
52
+
53
+ | Character | Romaji | Sound | Notes |
54
+ |-----------|--------|-------|-------|
55
+ | か | ka | /ka/ | Like "ka" in "car" |
56
+ | き | ki | /ki/ | Like "kee" in "keen" |
57
+ | く | ku | /kɯ/ | Like "coo" (unrounded lips) |
58
+ | け | ke | /ke/ | Like "ke" in "ketchup" |
59
+ | こ | ko | /ko/ | Like "ko" in "koala" |
60
+
61
+ **Note:** The "k" sound is the same as in English. The vowel sounds follow the same rules you learned in Lesson 1.
62
+
63
+ ## Writing Tips
64
+
65
+ - **か**: Has three strokes. Starts with a vertical stroke, then two curved strokes on the right.
66
+ - **き**: Has four strokes. Looks like three horizontal lines with a fourth diagonal stroke.
67
+ - **く**: Has one simple curved stroke, like a backwards "<".
68
+ - **け**: Has three strokes forming a distinctive shape.
69
+ - **こ**: Has two horizontal strokes, like a simple "二" character.
70
+
71
+ ## Practice Words
72
+
73
+ | Hiragana | Romaji | Meaning |
74
+ |----------|--------|---------|
75
+ | かい | kai | shellfish |
76
+ | きかい | kikai | machine |
77
+ | ここ | koko | here |
78
+ | いけ | ike | pond |
79
+ | かお | kao | face |
80
+
81
+ ## Pattern Recognition
82
+
83
+ Notice the pattern:
84
+ - Each row takes one consonant ("k" in this case)
85
+ - Combines it with all five vowels (a, i, u, e, o)
86
+ - Creates 5 new characters
87
+
88
+ This pattern continues throughout the entire hiragana chart.
89
+
90
+ ## Practice Recognition
91
+
92
+ :::exercise{id="ja-hiragana-02-recognition" type="matching" title="Match Ka-row Characters" skill="character-recognition" tests="hiragana-ka,hiragana-ki,hiragana-ku,hiragana-ke,hiragana-ko" objectiveId="obj-recognize-ka-row"}
93
+
94
+ **Question:** Match each ka-row character to its romaji
95
+
96
+ - か
97
+ - き
98
+ - く
99
+ - け
100
+ - こ
101
+
102
+ **Answer:**
103
+
104
+ - か = ka
105
+ - き = ki
106
+ - く = ku
107
+ - け = ke
108
+ - こ = ko
109
+
110
+ **Explanation:** The ka-row follows the same vowel pattern as the vowels row (a-i-u-e-o), but adds the "k" consonant sound before each vowel.
111
+
112
+ :::
113
+
114
+ :::exercise{id="ja-hiragana-02-sounds" type="fill-in-blank" title="Sound Mapping" skill="character-sound-mapping" tests="hiragana-ka,hiragana-ki,hiragana-ku,hiragana-ke,hiragana-ko" objectiveId="obj-sounds-ka-row"}
115
+
116
+ **Question:** What sound does each character make?
117
+
118
+ - か = ___
119
+ - き = ___
120
+ - く = ___
121
+ - け = ___
122
+ - こ = ___
123
+
124
+ **Answer:**
125
+
126
+ - か = /ka/
127
+ - き = /ki/
128
+ - く = /kɯ/
129
+ - け = /ke/
130
+ - こ = /ko/
131
+
132
+ **Explanation:** Each character combines the "k" consonant with one of the five vowel sounds you learned in Lesson 1.
133
+
134
+ :::
135
+
136
+ :::exercise{id="ja-hiragana-02-word-reading" type="fill-in-blank" title="Read Words with Ka-row" skill="word-recognition" tests="hiragana-ka,hiragana-ki,hiragana-ku,hiragana-ke,hiragana-ko" objectiveId="obj-recognize-ka-row"}
137
+
138
+ **Question:** Read these words
139
+
140
+ - かお = ___
141
+ - ここ = ___
142
+ - いけ = ___
143
+
144
+ **Answer:**
145
+
146
+ - かお = "kao" (face)
147
+ - ここ = "koko" (here)
148
+ - いけ = "ike" (pond)
149
+
150
+ **Explanation:** Combine the characters you've learned so far. Read from left to right, pronouncing each character clearly.
151
+
152
+ :::
153
+
154
+ ## What's Next
155
+
156
+ In Lesson 3, you will learn the さ-row (sa, shi, su, se, so), continuing the pattern with the "s" consonant.
157
+ `;
158
+ export {
159
+ a as default
160
+ };
@@ -0,0 +1,151 @@
1
+ const a = `---
2
+ type: lesson
3
+ id: japanese-hiragana-lesson-03
4
+ title: "Lesson 3 — Sa-row (さしすせそ)"
5
+ description: "Learn the さ-row: sa, shi, su, se, so"
6
+ order: 3
7
+ parentId: japanese-hiragana
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - consonants
12
+ - basic-characters
13
+ metadata:
14
+ estimatedTime: 20
15
+ prerequisites: [japanese-hiragana-lesson-02]
16
+ learningObjectives:
17
+ - id: obj-recognize-sa-row
18
+ description: "Recognize the sa-row hiragana characters"
19
+ skill: character-recognition
20
+ references: [hiragana-sa, hiragana-shi, hiragana-su, hiragana-se, hiragana-so]
21
+ - id: obj-sounds-sa-row
22
+ description: "Map each sa-row character to its sound"
23
+ skill: character-sound-mapping
24
+ references: [hiragana-sa, hiragana-shi, hiragana-su, hiragana-se, hiragana-so]
25
+ ---
26
+
27
+ # Lesson 3 — Sa-row (さしすせそ)
28
+
29
+ ## Introduction
30
+
31
+ In this lesson, you will learn the **さ-row** (sa-gyō), the third row of the hiragana chart. This row combines the "s" consonant with the five vowels.
32
+
33
+ **Important note:** The "si" character is pronounced "shi" (し), not "si". This is one of the irregularities in the hiragana chart.
34
+
35
+ ## Characters
36
+
37
+ :::character-set{id="hiragana-sa-row" title="Hiragana Sa-row (さ行)"}
38
+
39
+ ::character{id="hiragana-sa" canonicalRef="hiragana-sa" char="さ" name="さ (sa)" charType="hiragana" data:romaji="sa" data:row="sa"}
40
+
41
+ ::character{id="hiragana-shi" canonicalRef="hiragana-shi" char="し" name="し (shi)" charType="hiragana" data:romaji="shi" data:row="sa"}
42
+
43
+ ::character{id="hiragana-su" canonicalRef="hiragana-su" char="す" name="す (su)" charType="hiragana" data:romaji="su" data:row="sa"}
44
+
45
+ ::character{id="hiragana-se" canonicalRef="hiragana-se" char="せ" name="せ (se)" charType="hiragana" data:romaji="se" data:row="sa"}
46
+
47
+ ::character{id="hiragana-so" canonicalRef="hiragana-so" char="そ" name="そ (so)" charType="hiragana" data:romaji="so" data:row="sa"}
48
+
49
+ :::
50
+
51
+ ## Pronunciation Guide
52
+
53
+ | Character | Romaji | Sound | Notes |
54
+ |-----------|--------|-------|-------|
55
+ | さ | sa | /sa/ | Like "sa" in "saw" |
56
+ | し | shi | /ɕi/ | Like "shi" in "sheep" (NOT "si") |
57
+ | す | su | /sɯ/ | Like "soo" (unrounded lips) |
58
+ | せ | se | /se/ | Like "se" in "set" |
59
+ | そ | so | /so/ | Like "so" in "soap" |
60
+
61
+ **Key Point:** し is pronounced "shi", not "si". This is a standard irregularity in Japanese. The sound is like English "she" but shorter.
62
+
63
+ ## Writing Tips
64
+
65
+ - **さ**: Has three strokes. Starts with a horizontal stroke, then two curved strokes below.
66
+ - **し**: Has one simple curved stroke, like a backwards "J".
67
+ - **す**: Has two strokes forming a distinctive shape.
68
+ - **せ**: Has three strokes, similar to せ in hiragana.
69
+ - **そ**: Has one continuous stroke forming a distinctive curved shape.
70
+
71
+ ## Practice Words
72
+
73
+ | Hiragana | Romaji | Meaning |
74
+ |----------|--------|---------|
75
+ | さけ | sake | salmon; alcohol |
76
+ | しお | shio | salt |
77
+ | すし | sushi | sushi |
78
+ | そこ | soko | there; bottom |
79
+ | かさ | kasa | umbrella |
80
+
81
+ ## Practice Recognition
82
+
83
+ :::exercise{id="ja-hiragana-03-recognition" type="matching" title="Match Sa-row Characters" skill="character-recognition" tests="hiragana-sa,hiragana-shi,hiragana-su,hiragana-se,hiragana-so" objectiveId="obj-recognize-sa-row"}
84
+
85
+ **Question:** Match each sa-row character to its romaji
86
+
87
+ - さ
88
+ - し
89
+ - す
90
+ - せ
91
+ - そ
92
+
93
+ **Answer:**
94
+
95
+ - さ = sa
96
+ - し = shi (not "si")
97
+ - す = su
98
+ - せ = se
99
+ - そ = so
100
+
101
+ **Explanation:** Remember that し is pronounced "shi", not "si". This is a standard pronunciation in Japanese.
102
+
103
+ :::
104
+
105
+ :::exercise{id="ja-hiragana-03-sounds" type="fill-in-blank" title="Sound Mapping" skill="character-sound-mapping" tests="hiragana-sa,hiragana-shi,hiragana-su,hiragana-se,hiragana-so" objectiveId="obj-sounds-sa-row"}
106
+
107
+ **Question:** What sound does each character make?
108
+
109
+ - さ = ___
110
+ - し = ___
111
+ - す = ___
112
+ - せ = ___
113
+ - そ = ___
114
+
115
+ **Answer:**
116
+
117
+ - さ = /sa/
118
+ - し = /ɕi/ (shi)
119
+ - す = /sɯ/
120
+ - せ = /se/
121
+ - そ = /so/
122
+
123
+ **Explanation:** The し character is always pronounced "shi", never "si" in modern standard Japanese.
124
+
125
+ :::
126
+
127
+ :::exercise{id="ja-hiragana-03-word-reading" type="fill-in-blank" title="Read Words with Sa-row" skill="word-recognition" tests="hiragana-sa,hiragana-shi,hiragana-su,hiragana-se,hiragana-so" objectiveId="obj-recognize-sa-row"}
128
+
129
+ **Question:** Read these words
130
+
131
+ - すし = ___
132
+ - しお = ___
133
+ - かさ = ___
134
+
135
+ **Answer:**
136
+
137
+ - すし = "sushi" (sushi)
138
+ - しお = "shio" (salt)
139
+ - かさ = "kasa" (umbrella)
140
+
141
+ **Explanation:** Notice how し is always pronounced "shi". The word すし (sushi) uses this character twice.
142
+
143
+ :::
144
+
145
+ ## What's Next
146
+
147
+ In Lesson 4, you will learn the た-row (ta, chi, tsu, te, to), which has two more irregular pronunciations to watch for.
148
+ `;
149
+ export {
150
+ a as default
151
+ };