@polyglot-bundles/ko-minimal-pairs 0.2.1 → 0.2.3

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.
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared';
2
+ export declare const level0Pairs: MinimalPairsMinimalPair[];
3
+ //# sourceMappingURL=level-0.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-0.d.ts","sourceRoot":"","sources":["../../src/data/level-0.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,eAAO,MAAM,WAAW,EAAE,uBAAuB,EAmBhD,CAAC"}
@@ -0,0 +1,23 @@
1
+ const i = [
2
+ {
3
+ pairId: "ko_l0_001",
4
+ level: 0,
5
+ tags: ["level_0"],
6
+ contrastFeature: "consonant",
7
+ contrastDescription: "/k/ vs /t/",
8
+ word1: { script: "가구", romanization: "gagu", definition: "furniture", audioFile: null },
9
+ word2: { script: "다구", romanization: "dagu", definition: "(name)", audioFile: null }
10
+ },
11
+ {
12
+ pairId: "ko_l0_002",
13
+ level: 0,
14
+ tags: ["level_0"],
15
+ contrastFeature: "consonant",
16
+ contrastDescription: "/m/ vs /b/",
17
+ word1: { script: "물", romanization: "mul", definition: "water", audioFile: null },
18
+ word2: { script: "불", romanization: "bul", definition: "fire", audioFile: null }
19
+ }
20
+ ];
21
+ export {
22
+ i as level0Pairs
23
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared';
2
+ export declare const level1Pairs: MinimalPairsMinimalPair[];
3
+ //# sourceMappingURL=level-1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-1.d.ts","sourceRoot":"","sources":["../../src/data/level-1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,eAAO,MAAM,WAAW,EAAE,uBAAuB,EAmFhD,CAAC"}
@@ -0,0 +1,87 @@
1
+ const n = [
2
+ {
3
+ pairId: "ko_l1_001",
4
+ level: 1,
5
+ tags: ["level_1", "consonant"],
6
+ contrastFeature: "consonant",
7
+ contrastDescription: "Plain /p/ vs tense /p͈/ vs aspirated /pʰ/",
8
+ pronunciationTipId: "consonant_three_way",
9
+ word1: { script: "발", romanization: "bal", definition: "foot", audioFile: null },
10
+ word2: { script: "팔", romanization: "pal", definition: "arm", audioFile: null }
11
+ },
12
+ {
13
+ pairId: "ko_l1_002",
14
+ level: 1,
15
+ tags: ["level_1", "consonant"],
16
+ contrastFeature: "consonant",
17
+ contrastDescription: "Plain /p/ vs tense /p͈/",
18
+ word1: { script: "발", romanization: "bal", definition: "foot", audioFile: null },
19
+ word2: { script: "쌀", romanization: "ssal", definition: "uncooked rice", audioFile: null }
20
+ },
21
+ {
22
+ pairId: "ko_l1_003",
23
+ level: 1,
24
+ tags: ["level_1", "consonant"],
25
+ contrastFeature: "consonant",
26
+ contrastDescription: "Tense /p͈/ vs aspirated /pʰ/",
27
+ word1: { script: "빨", romanization: "ppal", definition: "red", audioFile: null },
28
+ word2: { script: "팔", romanization: "pal", definition: "arm", audioFile: null }
29
+ },
30
+ {
31
+ pairId: "ko_l1_004",
32
+ level: 1,
33
+ tags: ["level_1", "consonant"],
34
+ contrastFeature: "consonant",
35
+ contrastDescription: "Plain /t/ vs tense /t͈/ vs aspirated /tʰ/",
36
+ word1: { script: "달", romanization: "dal", definition: "moon", audioFile: null },
37
+ word2: { script: "딸", romanization: "ttal", definition: "daughter", audioFile: null }
38
+ },
39
+ {
40
+ pairId: "ko_l1_005",
41
+ level: 1,
42
+ tags: ["level_1", "consonant"],
43
+ contrastFeature: "consonant",
44
+ contrastDescription: "Plain /t/ vs aspirated /tʰ/",
45
+ word1: { script: "달", romanization: "dal", definition: "moon", audioFile: null },
46
+ word2: { script: "탈", romanization: "tal", definition: "mask", audioFile: null }
47
+ },
48
+ {
49
+ pairId: "ko_l1_006",
50
+ level: 1,
51
+ tags: ["level_1", "consonant"],
52
+ contrastFeature: "consonant",
53
+ contrastDescription: "Plain /k/ vs tense /k͈/ vs aspirated /kʰ/",
54
+ word1: { script: "갈", romanization: "gal", definition: "to go", audioFile: null },
55
+ word2: { script: "깔", romanization: "kkal", definition: "to spread", audioFile: null }
56
+ },
57
+ {
58
+ pairId: "ko_l1_007",
59
+ level: 1,
60
+ tags: ["level_1", "consonant"],
61
+ contrastFeature: "consonant",
62
+ contrastDescription: "Plain /k/ vs aspirated /kʰ/",
63
+ word1: { script: "갈", romanization: "gal", definition: "to go", audioFile: null },
64
+ word2: { script: "칼", romanization: "kal", definition: "knife", audioFile: null }
65
+ },
66
+ {
67
+ pairId: "ko_l1_008",
68
+ level: 1,
69
+ tags: ["level_1", "consonant"],
70
+ contrastFeature: "consonant",
71
+ contrastDescription: "Plain /tɕ/ vs tense /tɕ͈/ vs aspirated /tɕʰ/",
72
+ word1: { script: "자", romanization: "ja", definition: "self; ruler", audioFile: null },
73
+ word2: { script: "짜", romanization: "jja", definition: "salty; to pair", audioFile: null }
74
+ },
75
+ {
76
+ pairId: "ko_l1_009",
77
+ level: 1,
78
+ tags: ["level_1", "consonant"],
79
+ contrastFeature: "consonant",
80
+ contrastDescription: "Plain /s/ vs tense /s͈/",
81
+ word1: { script: "살", romanization: "sal", definition: "flesh; to live", audioFile: null },
82
+ word2: { script: "쌀", romanization: "ssal", definition: "uncooked rice", audioFile: null }
83
+ }
84
+ ];
85
+ export {
86
+ n as level1Pairs
87
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared';
2
+ export declare const level2Pairs: MinimalPairsMinimalPair[];
3
+ //# sourceMappingURL=level-2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-2.d.ts","sourceRoot":"","sources":["../../src/data/level-2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,eAAO,MAAM,WAAW,EAAE,uBAAuB,EAuChD,CAAC"}
@@ -0,0 +1,43 @@
1
+ const i = [
2
+ {
3
+ pairId: "ko_l2_001",
4
+ level: 2,
5
+ tags: ["level_2", "vowel"],
6
+ contrastFeature: "vowel",
7
+ contrastDescription: "/a/ vs /ʌ/",
8
+ pronunciationTipId: "vowel_a_eo",
9
+ word1: { script: "말", romanization: "mal", definition: "horse; speech", audioFile: null },
10
+ word2: { script: "멀", romanization: "meol", definition: "distance", audioFile: null }
11
+ },
12
+ {
13
+ pairId: "ko_l2_002",
14
+ level: 2,
15
+ tags: ["level_2", "vowel"],
16
+ contrastFeature: "vowel",
17
+ contrastDescription: "/o/ vs /u/",
18
+ word1: { script: "보", romanization: "bo", definition: "treasure", audioFile: null },
19
+ word2: { script: "부", romanization: "bu", definition: "wealth; part", audioFile: null }
20
+ },
21
+ {
22
+ pairId: "ko_l2_003",
23
+ level: 2,
24
+ tags: ["level_2", "vowel"],
25
+ contrastFeature: "vowel",
26
+ contrastDescription: "/i/ vs /ɛ/",
27
+ word1: { script: "비", romanization: "bi", definition: "rain", audioFile: null },
28
+ word2: { script: "배", romanization: "bae", definition: "ship; pear; stomach", audioFile: null }
29
+ },
30
+ {
31
+ pairId: "ko_l2_004",
32
+ level: 2,
33
+ tags: ["level_2", "vowel"],
34
+ contrastFeature: "vowel",
35
+ contrastDescription: "/e/ vs /ɛ/ (merging in modern Korean)",
36
+ word1: { script: "게", romanization: "ge", definition: "crab", audioFile: null },
37
+ word2: { script: "개", romanization: "gae", definition: "dog", audioFile: null },
38
+ notes: "These vowels are merging in modern Seoul Korean"
39
+ }
40
+ ];
41
+ export {
42
+ i as level2Pairs
43
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared';
2
+ export declare const level3Pairs: MinimalPairsMinimalPair[];
3
+ //# sourceMappingURL=level-3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-3.d.ts","sourceRoot":"","sources":["../../src/data/level-3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,eAAO,MAAM,WAAW,EAAE,uBAAuB,EA6BhD,CAAC"}
@@ -0,0 +1,33 @@
1
+ const n = [
2
+ {
3
+ pairId: "ko_l3_001",
4
+ level: 3,
5
+ tags: ["level_3", "consonant"],
6
+ contrastFeature: "consonant",
7
+ contrastDescription: "/n/ vs /l/",
8
+ pronunciationTipId: "consonant_n_l",
9
+ word1: { script: "남", romanization: "nam", definition: "man; south", audioFile: null },
10
+ word2: { script: "람", romanization: "ram", definition: "(in compounds)", audioFile: null }
11
+ },
12
+ {
13
+ pairId: "ko_l3_002",
14
+ level: 3,
15
+ tags: ["level_3", "consonant"],
16
+ contrastFeature: "consonant",
17
+ contrastDescription: "/m/ vs /n/",
18
+ word1: { script: "무", romanization: "mu", definition: "radish", audioFile: null },
19
+ word2: { script: "누", romanization: "nu", definition: "(name)", audioFile: null }
20
+ },
21
+ {
22
+ pairId: "ko_l3_003",
23
+ level: 3,
24
+ tags: ["level_3", "consonant"],
25
+ contrastFeature: "consonant",
26
+ contrastDescription: "/p/ vs /m/",
27
+ word1: { script: "박", romanization: "bak", definition: "park (surname); gourd", audioFile: null },
28
+ word2: { script: "막", romanization: "mak", definition: "block; 막걸리", audioFile: null }
29
+ }
30
+ ];
31
+ export {
32
+ n as level3Pairs
33
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared';
2
+ export declare const level4Pairs: MinimalPairsMinimalPair[];
3
+ //# sourceMappingURL=level-4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-4.d.ts","sourceRoot":"","sources":["../../src/data/level-4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,eAAO,MAAM,WAAW,EAAE,uBAAuB,EA6BhD,CAAC"}
@@ -0,0 +1,33 @@
1
+ const i = [
2
+ {
3
+ pairId: "ko_l4_001",
4
+ level: 4,
5
+ tags: ["level_4", "final"],
6
+ contrastFeature: "final_consonant",
7
+ contrastDescription: "Final /-k/ vs final /-t/",
8
+ pronunciationTipId: "final_consonants",
9
+ word1: { script: "국", romanization: "guk", definition: "soup", audioFile: null },
10
+ word2: { script: "굳", romanization: "gut", definition: "(firm)", audioFile: null }
11
+ },
12
+ {
13
+ pairId: "ko_l4_002",
14
+ level: 4,
15
+ tags: ["level_4", "final"],
16
+ contrastFeature: "final_consonant",
17
+ contrastDescription: "Final /-n/ vs final /-ng/",
18
+ word1: { script: "산", romanization: "san", definition: "mountain", audioFile: null },
19
+ word2: { script: "상", romanization: "sang", definition: "table; injury", audioFile: null }
20
+ },
21
+ {
22
+ pairId: "ko_l4_003",
23
+ level: 4,
24
+ tags: ["level_4", "final"],
25
+ contrastFeature: "final_consonant",
26
+ contrastDescription: "Final /-m/ vs final /-n/",
27
+ word1: { script: "감", romanization: "gam", definition: "persimmon; feeling", audioFile: null },
28
+ word2: { script: "간", romanization: "gan", definition: "liver; interval", audioFile: null }
29
+ }
30
+ ];
31
+ export {
32
+ i as level4Pairs
33
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared';
2
+ export declare const level5Pairs: MinimalPairsMinimalPair[];
3
+ //# sourceMappingURL=level-5.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-5.d.ts","sourceRoot":"","sources":["../../src/data/level-5.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,eAAO,MAAM,WAAW,EAAE,uBAAuB,EAqBhD,CAAC"}
@@ -0,0 +1,25 @@
1
+ const i = [
2
+ {
3
+ pairId: "ko_l5_001",
4
+ level: 5,
5
+ tags: ["level_5", "consonant"],
6
+ contrastFeature: "consonant",
7
+ contrastDescription: "/h/ vs /k/",
8
+ word1: { script: "하다", romanization: "hada", definition: "to do", audioFile: null },
9
+ word2: { script: "카다", romanization: "kada", definition: "(loanword: card+suffix)", audioFile: null },
10
+ notes: "The /h/ sound is often weak or silent in certain positions"
11
+ },
12
+ {
13
+ pairId: "ko_l5_002",
14
+ level: 5,
15
+ tags: ["level_5", "vowel"],
16
+ contrastFeature: "vowel",
17
+ contrastDescription: "/ɯ/ (eu) vs /u/ (u)",
18
+ word1: { script: "그", romanization: "geu", definition: "that; the", audioFile: null },
19
+ word2: { script: "구", romanization: "gu", definition: "district; nine", audioFile: null },
20
+ notes: "/ɯ/ is unrounded, /u/ is rounded. English speakers often confuse these."
21
+ }
22
+ ];
23
+ export {
24
+ i as level5Pairs
25
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAEjF,eAAO,MAAM,gBAAgB,EAAE,wBAsP9B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAmBjF,eAAO,MAAM,gBAAgB,EAAE,wBAI9B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
package/dist/data.js CHANGED
@@ -1,242 +1,24 @@
1
- const i = {
2
- levels: [
3
- { level: 0, title: "Getting Started", description: "Practice with clearly different sounds" },
4
- { level: 1, title: "Three-Way Consonant Contrast", description: "Plain vs tense vs aspirated" },
5
- { level: 2, title: "Vowels", description: "Korean vowel system" },
6
- { level: 3, title: "Advanced Consonants", description: "Fricatives and affricates" },
7
- { level: 4, title: "Syllable Structure", description: "Final consonant contrasts" },
8
- { level: 5, title: "Expert Level", description: "Subtle distinctions and loanwords" }
9
- ],
10
- minimalPairs: [
11
- // Level 0: Clear contrasts
12
- {
13
- pairId: "ko_l0_001",
14
- level: 0,
15
- tags: ["level_0"],
16
- contrastFeature: "consonant",
17
- contrastDescription: "/k/ vs /t/",
18
- word1: { script: "가구", romanization: "gagu", definition: "furniture", audioFile: null },
19
- word2: { script: "다구", romanization: "dagu", definition: "(name)", audioFile: null }
20
- },
21
- {
22
- pairId: "ko_l0_002",
23
- level: 0,
24
- tags: ["level_0"],
25
- contrastFeature: "consonant",
26
- contrastDescription: "/m/ vs /b/",
27
- word1: { script: "물", romanization: "mul", definition: "water", audioFile: null },
28
- word2: { script: "불", romanization: "bul", definition: "fire", audioFile: null }
29
- },
30
- // Level 1: The famous three-way contrast (plain, tense, aspirated)
31
- {
32
- pairId: "ko_l1_001",
33
- level: 1,
34
- tags: ["level_1", "consonant"],
35
- contrastFeature: "consonant",
36
- contrastDescription: "Plain /p/ vs tense /p͈/ vs aspirated /pʰ/",
37
- pronunciationTipId: "consonant_three_way",
38
- word1: { script: "발", romanization: "bal", definition: "foot", audioFile: null },
39
- word2: { script: "팔", romanization: "pal", definition: "arm", audioFile: null }
40
- },
41
- {
42
- pairId: "ko_l1_002",
43
- level: 1,
44
- tags: ["level_1", "consonant"],
45
- contrastFeature: "consonant",
46
- contrastDescription: "Plain /p/ vs tense /p͈/",
47
- word1: { script: "발", romanization: "bal", definition: "foot", audioFile: null },
48
- word2: { script: "쌀", romanization: "ssal", definition: "uncooked rice", audioFile: null }
49
- },
50
- {
51
- pairId: "ko_l1_003",
52
- level: 1,
53
- tags: ["level_1", "consonant"],
54
- contrastFeature: "consonant",
55
- contrastDescription: "Tense /p͈/ vs aspirated /pʰ/",
56
- word1: { script: "빨", romanization: "ppal", definition: "red", audioFile: null },
57
- word2: { script: "팔", romanization: "pal", definition: "arm", audioFile: null }
58
- },
59
- {
60
- pairId: "ko_l1_004",
61
- level: 1,
62
- tags: ["level_1", "consonant"],
63
- contrastFeature: "consonant",
64
- contrastDescription: "Plain /t/ vs tense /t͈/ vs aspirated /tʰ/",
65
- word1: { script: "달", romanization: "dal", definition: "moon", audioFile: null },
66
- word2: { script: "딸", romanization: "ttal", definition: "daughter", audioFile: null }
67
- },
68
- {
69
- pairId: "ko_l1_005",
70
- level: 1,
71
- tags: ["level_1", "consonant"],
72
- contrastFeature: "consonant",
73
- contrastDescription: "Plain /t/ vs aspirated /tʰ/",
74
- word1: { script: "달", romanization: "dal", definition: "moon", audioFile: null },
75
- word2: { script: "탈", romanization: "tal", definition: "mask", audioFile: null }
76
- },
77
- {
78
- pairId: "ko_l1_006",
79
- level: 1,
80
- tags: ["level_1", "consonant"],
81
- contrastFeature: "consonant",
82
- contrastDescription: "Plain /k/ vs tense /k͈/ vs aspirated /kʰ/",
83
- word1: { script: "갈", romanization: "gal", definition: "to go", audioFile: null },
84
- word2: { script: "깔", romanization: "kkal", definition: "to spread", audioFile: null }
85
- },
86
- {
87
- pairId: "ko_l1_007",
88
- level: 1,
89
- tags: ["level_1", "consonant"],
90
- contrastFeature: "consonant",
91
- contrastDescription: "Plain /k/ vs aspirated /kʰ/",
92
- word1: { script: "갈", romanization: "gal", definition: "to go", audioFile: null },
93
- word2: { script: "칼", romanization: "kal", definition: "knife", audioFile: null }
94
- },
95
- {
96
- pairId: "ko_l1_008",
97
- level: 1,
98
- tags: ["level_1", "consonant"],
99
- contrastFeature: "consonant",
100
- contrastDescription: "Plain /tɕ/ vs tense /tɕ͈/ vs aspirated /tɕʰ/",
101
- word1: { script: "자", romanization: "ja", definition: "self; ruler", audioFile: null },
102
- word2: { script: "짜", romanization: "jja", definition: "salty; to pair", audioFile: null }
103
- },
104
- {
105
- pairId: "ko_l1_009",
106
- level: 1,
107
- tags: ["level_1", "consonant"],
108
- contrastFeature: "consonant",
109
- contrastDescription: "Plain /s/ vs tense /s͈/",
110
- word1: { script: "살", romanization: "sal", definition: "flesh; to live", audioFile: null },
111
- word2: { script: "쌀", romanization: "ssal", definition: "uncooked rice", audioFile: null }
112
- },
113
- // Level 2: Vowels
114
- {
115
- pairId: "ko_l2_001",
116
- level: 2,
117
- tags: ["level_2", "vowel"],
118
- contrastFeature: "vowel",
119
- contrastDescription: "/a/ vs /ʌ/",
120
- pronunciationTipId: "vowel_a_eo",
121
- word1: { script: "말", romanization: "mal", definition: "horse; speech", audioFile: null },
122
- word2: { script: "멀", romanization: "meol", definition: "distance", audioFile: null }
123
- },
124
- {
125
- pairId: "ko_l2_002",
126
- level: 2,
127
- tags: ["level_2", "vowel"],
128
- contrastFeature: "vowel",
129
- contrastDescription: "/o/ vs /u/",
130
- word1: { script: "보", romanization: "bo", definition: "treasure", audioFile: null },
131
- word2: { script: "부", romanization: "bu", definition: "wealth; part", audioFile: null }
132
- },
133
- {
134
- pairId: "ko_l2_003",
135
- level: 2,
136
- tags: ["level_2", "vowel"],
137
- contrastFeature: "vowel",
138
- contrastDescription: "/i/ vs /ɛ/",
139
- word1: { script: "비", romanization: "bi", definition: "rain", audioFile: null },
140
- word2: { script: "배", romanization: "bae", definition: "ship; pear; stomach", audioFile: null }
141
- },
142
- {
143
- pairId: "ko_l2_004",
144
- level: 2,
145
- tags: ["level_2", "vowel"],
146
- contrastFeature: "vowel",
147
- contrastDescription: "/e/ vs /ɛ/ (merging in modern Korean)",
148
- word1: { script: "게", romanization: "ge", definition: "crab", audioFile: null },
149
- word2: { script: "개", romanization: "gae", definition: "dog", audioFile: null },
150
- notes: "These vowels are merging in modern Seoul Korean"
151
- },
152
- // Level 3: Advanced consonants
153
- {
154
- pairId: "ko_l3_001",
155
- level: 3,
156
- tags: ["level_3", "consonant"],
157
- contrastFeature: "consonant",
158
- contrastDescription: "/n/ vs /l/",
159
- pronunciationTipId: "consonant_n_l",
160
- word1: { script: "남", romanization: "nam", definition: "man; south", audioFile: null },
161
- word2: { script: "람", romanization: "ram", definition: "(in compounds)", audioFile: null }
162
- },
163
- {
164
- pairId: "ko_l3_002",
165
- level: 3,
166
- tags: ["level_3", "consonant"],
167
- contrastFeature: "consonant",
168
- contrastDescription: "/m/ vs /n/",
169
- word1: { script: "무", romanization: "mu", definition: "radish", audioFile: null },
170
- word2: { script: "누", romanization: "nu", definition: "(name)", audioFile: null }
171
- },
172
- {
173
- pairId: "ko_l3_003",
174
- level: 3,
175
- tags: ["level_3", "consonant"],
176
- contrastFeature: "consonant",
177
- contrastDescription: "/p/ vs /m/",
178
- word1: { script: "박", romanization: "bak", definition: "park (surname); gourd", audioFile: null },
179
- word2: { script: "막", romanization: "mak", definition: "block; 막걸리", audioFile: null }
180
- },
181
- // Level 4: Syllable structure - final consonants
182
- {
183
- pairId: "ko_l4_001",
184
- level: 4,
185
- tags: ["level_4", "final"],
186
- contrastFeature: "final_consonant",
187
- contrastDescription: "Final /-k/ vs final /-t/",
188
- pronunciationTipId: "final_consonants",
189
- word1: { script: "국", romanization: "guk", definition: "soup", audioFile: null },
190
- word2: { script: "굳", romanization: "gut", definition: "(firm)", audioFile: null }
191
- },
192
- {
193
- pairId: "ko_l4_002",
194
- level: 4,
195
- tags: ["level_4", "final"],
196
- contrastFeature: "final_consonant",
197
- contrastDescription: "Final /-n/ vs final /-ng/",
198
- word1: { script: "산", romanization: "san", definition: "mountain", audioFile: null },
199
- word2: { script: "상", romanization: "sang", definition: "table; injury", audioFile: null }
200
- },
201
- {
202
- pairId: "ko_l4_003",
203
- level: 4,
204
- tags: ["level_4", "final"],
205
- contrastFeature: "final_consonant",
206
- contrastDescription: "Final /-m/ vs final /-n/",
207
- word1: { script: "감", romanization: "gam", definition: "persimmon; feeling", audioFile: null },
208
- word2: { script: "간", romanization: "gan", definition: "liver; interval", audioFile: null }
209
- },
210
- // Level 5: Expert - subtle distinctions
211
- {
212
- pairId: "ko_l5_001",
213
- level: 5,
214
- tags: ["level_5", "consonant"],
215
- contrastFeature: "consonant",
216
- contrastDescription: "/h/ vs /k/",
217
- word1: { script: "하다", romanization: "hada", definition: "to do", audioFile: null },
218
- word2: { script: "카다", romanization: "kada", definition: "(loanword: card+suffix)", audioFile: null },
219
- notes: "The /h/ sound is often weak or silent in certain positions"
220
- },
221
- {
222
- pairId: "ko_l5_002",
223
- level: 5,
224
- tags: ["level_5", "vowel"],
225
- contrastFeature: "vowel",
226
- contrastDescription: "/ɯ/ (eu) vs /u/ (u)",
227
- word1: { script: "그", romanization: "geu", definition: "that; the", audioFile: null },
228
- word2: { script: "구", romanization: "gu", definition: "district; nine", audioFile: null },
229
- notes: "/ɯ/ is unrounded, /u/ is rounded. English speakers often confuse these."
230
- }
231
- ],
232
- pronunciationTips: {
233
- consonant_three_way: "Korean has a three-way contrast: plain (ㄱㄷㅂㅈ), tense (ㄲㄸㅃㅉ), and aspirated (ㅋㅌㅍㅊ). Plain is voiced between vowels, tense is tight with no aspiration, aspirated has a strong puff of air.",
234
- vowel_a_eo: "/a/ (ㅏ) is open front-central. /ʌ/ (ㅓ) is open-mid back. Think of 'father' vs 'sun' for approximation.",
235
- consonant_n_l: "/n/ (ㄴ) is nasal through the nose. /l/ (ㄹ) is a flap - tongue briefly taps the ridge behind teeth.",
236
- final_consonants: "Final consonants are unreleased. /-k/, /-t/, /-p/ stop abruptly without the final release burst."
237
- }
1
+ import { levels as r } from "./levels.js";
2
+ import { pronunciationTips as i } from "./pronunciationTips.js";
3
+ import { level0Pairs as o } from "./data/level-0.js";
4
+ import { level1Pairs as m } from "./data/level-1.js";
5
+ import { level2Pairs as l } from "./data/level-2.js";
6
+ import { level3Pairs as a } from "./data/level-3.js";
7
+ import { level4Pairs as e } from "./data/level-4.js";
8
+ import { level5Pairs as s } from "./data/level-5.js";
9
+ const t = [
10
+ ...o,
11
+ ...m,
12
+ ...l,
13
+ ...a,
14
+ ...e,
15
+ ...s
16
+ ], x = {
17
+ levels: r,
18
+ minimalPairs: t,
19
+ pronunciationTips: i
238
20
  };
239
21
  export {
240
- i as default,
241
- i as minimalPairsData
22
+ x as default,
23
+ x as minimalPairsData
242
24
  };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,11 @@
1
1
  export { minimalPairsData as default } from './data';
2
- export { minimalPairsData } from './data';
2
+ export { levels } from './levels';
3
+ export { pronunciationTips } from './pronunciationTips';
4
+ export { level0Pairs } from './data/level-0';
5
+ export { level1Pairs } from './data/level-1';
6
+ export { level2Pairs } from './data/level-2';
7
+ export { level3Pairs } from './data/level-3';
8
+ export { level4Pairs } from './data/level-4';
9
+ export { level5Pairs } from './data/level-5';
3
10
  export type { MinimalPairsLanguageData, MinimalPairsLevelInfo, MinimalPairsMinimalPair, MinimalPairsPronunciationTipsMap, MinimalPairsRubySegment, MinimalPairsWordInfo, } from '../../content-shared';
4
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAG1C,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,gCAAgC,EAChC,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGrD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,gCAAgC,EAChC,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,kCAAkC,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,20 @@
1
- import { default as e, default as f } from "./data.js";
1
+ import { default as o } from "./data.js";
2
+ import { levels as p } from "./levels.js";
3
+ import { pronunciationTips as f } from "./pronunciationTips.js";
4
+ import { level0Pairs as m } from "./data/level-0.js";
5
+ import { level1Pairs as a } from "./data/level-1.js";
6
+ import { level2Pairs as v } from "./data/level-2.js";
7
+ import { level3Pairs as n } from "./data/level-3.js";
8
+ import { level4Pairs as c } from "./data/level-4.js";
9
+ import { level5Pairs as T } from "./data/level-5.js";
2
10
  export {
3
- e as default,
4
- f as minimalPairsData
11
+ o as default,
12
+ m as level0Pairs,
13
+ a as level1Pairs,
14
+ v as level2Pairs,
15
+ n as level3Pairs,
16
+ c as level4Pairs,
17
+ T as level5Pairs,
18
+ p as levels,
19
+ f as pronunciationTips
5
20
  };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsLevelInfo } from '../../content-shared';
2
+ export declare const levels: MinimalPairsLevelInfo[];
3
+ //# sourceMappingURL=levels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levels.d.ts","sourceRoot":"","sources":["../src/levels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE9E,eAAO,MAAM,MAAM,EAAE,qBAAqB,EAOzC,CAAC"}
package/dist/levels.js ADDED
@@ -0,0 +1,11 @@
1
+ const e = [
2
+ { level: 0, title: "Getting Started", description: "Practice with clearly different sounds" },
3
+ { level: 1, title: "Three-Way Consonant Contrast", description: "Plain vs tense vs aspirated" },
4
+ { level: 2, title: "Vowels", description: "Korean vowel system" },
5
+ { level: 3, title: "Advanced Consonants", description: "Fricatives and affricates" },
6
+ { level: 4, title: "Syllable Structure", description: "Final consonant contrasts" },
7
+ { level: 5, title: "Expert Level", description: "Subtle distinctions and loanwords" }
8
+ ];
9
+ export {
10
+ e as levels
11
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsPronunciationTipsMap } from '../../content-shared';
2
+ export declare const pronunciationTips: MinimalPairsPronunciationTipsMap;
3
+ //# sourceMappingURL=pronunciationTips.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pronunciationTips.d.ts","sourceRoot":"","sources":["../src/pronunciationTips.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAEzF,eAAO,MAAM,iBAAiB,EAAE,gCAS/B,CAAC"}
@@ -0,0 +1,9 @@
1
+ const n = {
2
+ consonant_three_way: "Korean has a three-way contrast: plain (ㄱㄷㅂㅈ), tense (ㄲㄸㅃㅉ), and aspirated (ㅋㅌㅍㅊ). Plain is voiced between vowels, tense is tight with no aspiration, aspirated has a strong puff of air.",
3
+ vowel_a_eo: "/a/ (ㅏ) is open front-central. /ʌ/ (ㅓ) is open-mid back. Think of 'father' vs 'sun' for approximation.",
4
+ consonant_n_l: "/n/ (ㄴ) is nasal through the nose. /l/ (ㄹ) is a flap - tongue briefly taps the ridge behind teeth.",
5
+ final_consonants: "Final consonants are unreleased. /-k/, /-t/, /-p/ stop abruptly without the final release burst."
6
+ };
7
+ export {
8
+ n as pronunciationTips
9
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polyglot-bundles/ko-minimal-pairs",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -12,14 +12,46 @@
12
12
  "./data": {
13
13
  "types": "./dist/data.d.ts",
14
14
  "import": "./dist/data.js"
15
+ },
16
+ "./levels": {
17
+ "types": "./dist/levels.d.ts",
18
+ "import": "./dist/levels.js"
19
+ },
20
+ "./pronunciationTips": {
21
+ "types": "./dist/pronunciationTips.d.ts",
22
+ "import": "./dist/pronunciationTips.js"
23
+ },
24
+ "./data/level-0": {
25
+ "types": "./dist/data/level-0.d.ts",
26
+ "import": "./dist/data/level-0.js"
27
+ },
28
+ "./data/level-1": {
29
+ "types": "./dist/data/level-1.d.ts",
30
+ "import": "./dist/data/level-1.js"
31
+ },
32
+ "./data/level-2": {
33
+ "types": "./dist/data/level-2.d.ts",
34
+ "import": "./dist/data/level-2.js"
35
+ },
36
+ "./data/level-3": {
37
+ "types": "./dist/data/level-3.d.ts",
38
+ "import": "./dist/data/level-3.js"
39
+ },
40
+ "./data/level-4": {
41
+ "types": "./dist/data/level-4.d.ts",
42
+ "import": "./dist/data/level-4.js"
43
+ },
44
+ "./data/level-5": {
45
+ "types": "./dist/data/level-5.d.ts",
46
+ "import": "./dist/data/level-5.js"
15
47
  }
16
48
  },
17
49
  "files": [
18
50
  "dist"
19
51
  ],
20
52
  "dependencies": {
21
- "@polyglot-bundles/content-shared": "^0.3.0",
22
- "@polyglot-bundles/ko-lang": "0.2.0"
53
+ "@polyglot-bundles/content-shared": "0.3.1",
54
+ "@polyglot-bundles/ko-lang": "0.2.1"
23
55
  },
24
56
  "devDependencies": {
25
57
  "vite": "^5.4.0",