@polyglot-bundles/ja-minimal-pairs 0.2.2 → 0.2.4

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/src';
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,EA8BhD,CAAC"}
@@ -0,0 +1,34 @@
1
+ const i = [
2
+ // Level 0
3
+ {
4
+ pairId: "ja_l0_001",
5
+ level: 0,
6
+ tags: ["level_0"],
7
+ contrastFeature: "consonant",
8
+ contrastDescription: "/k/ vs /s/",
9
+ word1: { script: "かさ", romanization: "kasa", definition: "umbrella", audioFile: null },
10
+ word2: { script: "ささ", romanization: "sasa", definition: "bamboo grass", audioFile: null }
11
+ },
12
+ // Additional Level 0 pairs
13
+ {
14
+ pairId: "ja_l0_002",
15
+ level: 0,
16
+ tags: ["level_0"],
17
+ contrastFeature: "consonant",
18
+ contrastDescription: "/t/ vs /n/",
19
+ word1: { script: "たこ", romanization: "tako", definition: "kite; octopus", audioFile: null },
20
+ word2: { script: "なご", romanization: "nago", definition: "(name)", audioFile: null }
21
+ },
22
+ {
23
+ pairId: "ja_l0_003",
24
+ level: 0,
25
+ tags: ["level_0"],
26
+ contrastFeature: "consonant",
27
+ contrastDescription: "/h/ vs /m/",
28
+ word1: { script: "はな", romanization: "hana", definition: "flower; nose", audioFile: null },
29
+ word2: { script: "まな", romanization: "mana", definition: "learning", audioFile: null }
30
+ }
31
+ ];
32
+ export {
33
+ i as level0Pairs
34
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared/src';
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,EAiDhD,CAAC"}
@@ -0,0 +1,53 @@
1
+ const i = [
2
+ // Level 1: Vowels
3
+ {
4
+ pairId: "ja_l1_001",
5
+ level: 1,
6
+ tags: ["level_1", "vowel"],
7
+ contrastFeature: "vowel",
8
+ contrastDescription: "/a/ vs /o/",
9
+ pronunciationTipId: "vowel_a_o",
10
+ word1: { script: "さか", romanization: "saka", definition: "slope", audioFile: null },
11
+ word2: { script: "さこ", romanization: "sako", definition: "cape", audioFile: null }
12
+ },
13
+ {
14
+ pairId: "ja_l1_002",
15
+ level: 1,
16
+ tags: ["level_1", "vowel"],
17
+ contrastFeature: "vowel",
18
+ contrastDescription: "/i/ vs /e/",
19
+ word1: { script: "きた", romanization: "kita", definition: "north; came", audioFile: null },
20
+ word2: { script: "けた", romanization: "keta", definition: "digit", audioFile: null }
21
+ },
22
+ {
23
+ pairId: "ja_l1_003",
24
+ level: 1,
25
+ tags: ["level_1", "vowel"],
26
+ contrastFeature: "vowel",
27
+ contrastDescription: "/u/ vs /o/",
28
+ word1: { script: "くち", romanization: "kuchi", definition: "mouth", audioFile: null },
29
+ word2: { script: "こち", romanization: "kochi", definition: "this way", audioFile: null }
30
+ },
31
+ // Additional Level 1: More vowel contrasts
32
+ {
33
+ pairId: "ja_l1_004",
34
+ level: 1,
35
+ tags: ["level_1", "vowel"],
36
+ contrastFeature: "vowel",
37
+ contrastDescription: "/a/ vs /u/",
38
+ word1: { script: "さか", romanization: "saka", definition: "slope", audioFile: null },
39
+ word2: { script: "すか", romanization: "suka", definition: "(skirt)", audioFile: null }
40
+ },
41
+ {
42
+ pairId: "ja_l1_005",
43
+ level: 1,
44
+ tags: ["level_1", "vowel"],
45
+ contrastFeature: "vowel",
46
+ contrastDescription: "/o/ vs /u/",
47
+ word1: { script: "とり", romanization: "tori", definition: "bird", audioFile: null },
48
+ word2: { script: "つり", romanization: "tsuri", definition: "fishing", audioFile: null }
49
+ }
50
+ ];
51
+ export {
52
+ i as level1Pairs
53
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared/src';
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,EA0DhD,CAAC"}
@@ -0,0 +1,62 @@
1
+ const i = [
2
+ // Level 2: Long vowels
3
+ {
4
+ pairId: "ja_l2_001",
5
+ level: 2,
6
+ tags: ["level_2", "length"],
7
+ contrastFeature: "vowel",
8
+ contrastDescription: "Short /o/ vs Long /oo/",
9
+ pronunciationTipId: "vowel_length",
10
+ word1: { script: "おばさん", romanization: "obasan", definition: "aunt; middle-aged woman", audioFile: null },
11
+ word2: { script: "おばあさん", romanization: "obaasan", definition: "grandmother; elderly woman", audioFile: null }
12
+ },
13
+ {
14
+ pairId: "ja_l2_002",
15
+ level: 2,
16
+ tags: ["level_2", "length"],
17
+ contrastFeature: "vowel",
18
+ contrastDescription: "Short /u/ vs Long /uu/",
19
+ word1: { script: "ゆき", romanization: "yuki", definition: "snow", audioFile: null },
20
+ word2: { script: "ゆうき", romanization: "yuuki", definition: "courage", audioFile: null }
21
+ },
22
+ {
23
+ pairId: "ja_l2_003",
24
+ level: 2,
25
+ tags: ["level_2", "length"],
26
+ contrastFeature: "vowel",
27
+ contrastDescription: "Short /e/ vs Long /ee/",
28
+ word1: { script: "せんせい", romanization: "sensei", definition: "teacher", audioFile: null },
29
+ word2: { script: "せんせえ", romanization: "sensee", definition: "(casual form of sensei)", audioFile: null }
30
+ },
31
+ // Additional Level 2: More long vowel contrasts
32
+ {
33
+ pairId: "ja_l2_004",
34
+ level: 2,
35
+ tags: ["level_2", "length"],
36
+ contrastFeature: "vowel",
37
+ contrastDescription: "Short /i/ vs Long /ii/",
38
+ word1: { script: "びる", romanization: "biru", definition: "building (loanword)", audioFile: null },
39
+ word2: { script: "びいる", romanization: "biiru", definition: "beer", audioFile: null }
40
+ },
41
+ {
42
+ pairId: "ja_l2_005",
43
+ level: 2,
44
+ tags: ["level_2", "length"],
45
+ contrastFeature: "vowel",
46
+ contrastDescription: "Short /a/ vs Long /aa/",
47
+ word1: { script: "おばさん", romanization: "obasan", definition: "aunt", audioFile: null },
48
+ word2: { script: "おばあさん", romanization: "obaasan", definition: "grandmother", audioFile: null }
49
+ },
50
+ {
51
+ pairId: "ja_l2_006",
52
+ level: 2,
53
+ tags: ["level_2", "length"],
54
+ contrastFeature: "vowel",
55
+ contrastDescription: "Short /e/ vs Long /ee/",
56
+ word1: { script: "えき", romanization: "eki", definition: "station", audioFile: null },
57
+ word2: { script: "ええき", romanization: "eeki", definition: "(good smell - dialectal)", audioFile: null }
58
+ }
59
+ ];
60
+ export {
61
+ i as level2Pairs
62
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared/src';
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,EA0DhD,CAAC"}
@@ -0,0 +1,62 @@
1
+ const i = [
2
+ // Level 3: Voicing
3
+ {
4
+ pairId: "ja_l3_001",
5
+ level: 3,
6
+ tags: ["level_3", "voicing"],
7
+ contrastFeature: "consonant",
8
+ contrastDescription: "/k/ vs /g/ - voiceless vs voiced",
9
+ pronunciationTipId: "consonant_k_g",
10
+ word1: { script: "かみ", romanization: "kami", definition: "paper; god; hair", audioFile: null },
11
+ word2: { script: "がみ", romanization: "gami", definition: "harsh scolding", audioFile: null }
12
+ },
13
+ {
14
+ pairId: "ja_l3_002",
15
+ level: 3,
16
+ tags: ["level_3", "voicing"],
17
+ contrastFeature: "consonant",
18
+ contrastDescription: "/t/ vs /d/",
19
+ word1: { script: "たいこ", romanization: "taiko", definition: "drum", audioFile: null },
20
+ word2: { script: "だいこ", romanization: "daiko", definition: "substitute", audioFile: null }
21
+ },
22
+ {
23
+ pairId: "ja_l3_003",
24
+ level: 3,
25
+ tags: ["level_3", "voicing"],
26
+ contrastFeature: "consonant",
27
+ contrastDescription: "/h/ vs /b/ vs /p/",
28
+ word1: { script: "はな", romanization: "hana", definition: "flower; nose", audioFile: null },
29
+ word2: { script: "ばな", romanization: "bana", definition: "(in compounds)", audioFile: null }
30
+ },
31
+ // Additional Level 3: More voicing contrasts
32
+ {
33
+ pairId: "ja_l3_004",
34
+ level: 3,
35
+ tags: ["level_3", "voicing"],
36
+ contrastFeature: "consonant",
37
+ contrastDescription: "/s/ vs /z/",
38
+ word1: { script: "さか", romanization: "saka", definition: "slope", audioFile: null },
39
+ word2: { script: "ざか", romanization: "zaka", definition: "slope (alternative)", audioFile: null }
40
+ },
41
+ {
42
+ pairId: "ja_l3_005",
43
+ level: 3,
44
+ tags: ["level_3", "voicing"],
45
+ contrastFeature: "consonant",
46
+ contrastDescription: "/h/ vs /p/",
47
+ word1: { script: "はな", romanization: "hana", definition: "flower", audioFile: null },
48
+ word2: { script: "ぱな", romanization: "pana", definition: "(panel - loanword)", audioFile: null }
49
+ },
50
+ {
51
+ pairId: "ja_l3_006",
52
+ level: 3,
53
+ tags: ["level_3", "voicing"],
54
+ contrastFeature: "consonant",
55
+ contrastDescription: "/s/ vs /ʃ/ (sh)",
56
+ word1: { script: "さか", romanization: "saka", definition: "slope", audioFile: null },
57
+ word2: { script: "しゃか", romanization: "shaka", definition: "Shaka (name)", audioFile: null }
58
+ }
59
+ ];
60
+ export {
61
+ i as level3Pairs
62
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared/src';
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,EAgDhD,CAAC"}
@@ -0,0 +1,52 @@
1
+ const i = [
2
+ // Level 4: Special sounds
3
+ {
4
+ pairId: "ja_l4_001",
5
+ level: 4,
6
+ tags: ["level_4", "special"],
7
+ contrastFeature: "consonant",
8
+ contrastDescription: "Without vs with ん /n/",
9
+ word1: { script: "かさい", romanization: "kasai", definition: "fire", audioFile: null },
10
+ word2: { script: "かんさい", romanization: "kansai", definition: "Kansai region", audioFile: null }
11
+ },
12
+ {
13
+ pairId: "ja_l4_002",
14
+ level: 4,
15
+ tags: ["level_4", "special"],
16
+ contrastFeature: "consonant",
17
+ contrastDescription: "Without vs with っ (geminate)",
18
+ word1: { script: "いて", romanization: "ite", definition: "being (te-form)", audioFile: null },
19
+ word2: { script: "いって", romanization: "itte", definition: "going (te-form)", audioFile: null }
20
+ },
21
+ // Additional Level 4: More special sound contrasts
22
+ {
23
+ pairId: "ja_l4_003",
24
+ level: 4,
25
+ tags: ["level_4", "special"],
26
+ contrastFeature: "consonant",
27
+ contrastDescription: "Without vs with ん /n/ (syllabic nasal)",
28
+ word1: { script: "たい", romanization: "tai", definition: "sea bream", audioFile: null },
29
+ word2: { script: "たん", romanization: "tan", definition: "carbon", audioFile: null }
30
+ },
31
+ {
32
+ pairId: "ja_l4_004",
33
+ level: 4,
34
+ tags: ["level_4", "special"],
35
+ contrastFeature: "consonant",
36
+ contrastDescription: "Without vs with っ (geminate consonant)",
37
+ word1: { script: "さか", romanization: "saka", definition: "slope", audioFile: null },
38
+ word2: { script: "さっか", romanization: "sakka", definition: "author", audioFile: null }
39
+ },
40
+ {
41
+ pairId: "ja_l4_005",
42
+ level: 4,
43
+ tags: ["level_4", "special"],
44
+ contrastFeature: "consonant",
45
+ contrastDescription: "ん vs っ contrast",
46
+ word1: { script: "てんき", romanization: "tenki", definition: "weather", audioFile: null },
47
+ word2: { script: "てっき", romanization: "tekki", definition: "(iron key)", audioFile: null }
48
+ }
49
+ ];
50
+ export {
51
+ i as level4Pairs
52
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsMinimalPair } from '../../../content-shared/src';
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,EA2ChD,CAAC"}
@@ -0,0 +1,47 @@
1
+ const i = [
2
+ // Level 5: Expert
3
+ {
4
+ pairId: "ja_l5_001",
5
+ level: 5,
6
+ tags: ["level_5", "pitch"],
7
+ contrastFeature: "pitch_accent",
8
+ contrastDescription: "Pitch accent: はし (bridge) vs はし (chopsticks)",
9
+ word1: { script: "はし", romanization: "hashi", definition: "bridge (LH)", audioFile: null },
10
+ word2: { script: "はし", romanization: "hashi", definition: "chopsticks (HL)", audioFile: null },
11
+ notes: "Same spelling, different pitch accent patterns"
12
+ },
13
+ // Additional Level 5: More pitch accent pairs
14
+ {
15
+ pairId: "ja_l5_002",
16
+ level: 5,
17
+ tags: ["level_5", "pitch"],
18
+ contrastFeature: "pitch_accent",
19
+ contrastDescription: "Pitch accent: かみ (hair) vs かみ (god)",
20
+ word1: { script: "かみ", romanization: "kami", definition: "hair (accent on ka)", audioFile: null },
21
+ word2: { script: "かみ", romanization: "kami", definition: "god; paper (accent on mi)", audioFile: null },
22
+ notes: "Same spelling, different pitch accent. Hair: HI-lo, God/paper: lo-HI."
23
+ },
24
+ {
25
+ pairId: "ja_l5_003",
26
+ level: 5,
27
+ tags: ["level_5", "pitch"],
28
+ contrastFeature: "pitch_accent",
29
+ contrastDescription: "Pitch accent: あめ (rain) vs あめ (candy)",
30
+ word1: { script: "あめ", romanization: "ame", definition: "rain (accent on a)", audioFile: null },
31
+ word2: { script: "あめ", romanization: "ame", definition: "candy (accent on me or unaccented)", audioFile: null },
32
+ notes: "Rain: HI-lo, Candy: lo-HI or flat."
33
+ },
34
+ {
35
+ pairId: "ja_l5_004",
36
+ level: 5,
37
+ tags: ["level_5", "pitch", "length"],
38
+ contrastFeature: "pitch_accent",
39
+ contrastDescription: "Combined pitch and length contrast",
40
+ word1: { script: "おばさん", romanization: "obasan", definition: "aunt (middle-aged woman)", audioFile: null },
41
+ word2: { script: "おばあさん", romanization: "obaasan", definition: "grandmother", audioFile: null },
42
+ notes: "Both pitch and vowel length differ. The long vowel changes the meaning."
43
+ }
44
+ ];
45
+ export {
46
+ i as level5Pairs
47
+ };
@@ -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,wBA4L9B,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,301 +1,24 @@
1
- const i = {
2
- levels: [
3
- { level: 0, title: "Getting Started", description: "Practice with clearly different sounds" },
4
- { level: 1, title: "Vowels", description: "Japanese vowel differences" },
5
- { level: 2, title: "Long Vowels", description: "Short vs long vowels" },
6
- { level: 3, title: "Voicing", description: "Voiceless vs voiced consonants" },
7
- { level: 4, title: "Special Sounds", description: "The differences of n, tt, and long vowels" },
8
- { level: 5, title: "Expert Level", description: "Subtle differences" }
9
- ],
10
- minimalPairs: [
11
- // Level 0
12
- {
13
- pairId: "ja_l0_001",
14
- level: 0,
15
- tags: ["level_0"],
16
- contrastFeature: "consonant",
17
- contrastDescription: "/k/ vs /s/",
18
- word1: { script: "かさ", romanization: "kasa", definition: "umbrella", audioFile: null },
19
- word2: { script: "ささ", romanization: "sasa", definition: "bamboo grass", audioFile: null }
20
- },
21
- // Level 1: Vowels
22
- {
23
- pairId: "ja_l1_001",
24
- level: 1,
25
- tags: ["level_1", "vowel"],
26
- contrastFeature: "vowel",
27
- contrastDescription: "/a/ vs /o/",
28
- pronunciationTipId: "vowel_a_o",
29
- word1: { script: "さか", romanization: "saka", definition: "slope", audioFile: null },
30
- word2: { script: "さこ", romanization: "sako", definition: "cape", audioFile: null }
31
- },
32
- {
33
- pairId: "ja_l1_002",
34
- level: 1,
35
- tags: ["level_1", "vowel"],
36
- contrastFeature: "vowel",
37
- contrastDescription: "/i/ vs /e/",
38
- word1: { script: "きた", romanization: "kita", definition: "north; came", audioFile: null },
39
- word2: { script: "けた", romanization: "keta", definition: "digit", audioFile: null }
40
- },
41
- {
42
- pairId: "ja_l1_003",
43
- level: 1,
44
- tags: ["level_1", "vowel"],
45
- contrastFeature: "vowel",
46
- contrastDescription: "/u/ vs /o/",
47
- word1: { script: "くち", romanization: "kuchi", definition: "mouth", audioFile: null },
48
- word2: { script: "こち", romanization: "kochi", definition: "this way", audioFile: null }
49
- },
50
- // Level 2: Long vowels
51
- {
52
- pairId: "ja_l2_001",
53
- level: 2,
54
- tags: ["level_2", "length"],
55
- contrastFeature: "vowel",
56
- contrastDescription: "Short /o/ vs Long /oo/",
57
- pronunciationTipId: "vowel_length",
58
- word1: { script: "おばさん", romanization: "obasan", definition: "aunt; middle-aged woman", audioFile: null },
59
- word2: { script: "おばあさん", romanization: "obaasan", definition: "grandmother; elderly woman", audioFile: null }
60
- },
61
- {
62
- pairId: "ja_l2_002",
63
- level: 2,
64
- tags: ["level_2", "length"],
65
- contrastFeature: "vowel",
66
- contrastDescription: "Short /u/ vs Long /uu/",
67
- word1: { script: "ゆき", romanization: "yuki", definition: "snow", audioFile: null },
68
- word2: { script: "ゆうき", romanization: "yuuki", definition: "courage", audioFile: null }
69
- },
70
- {
71
- pairId: "ja_l2_003",
72
- level: 2,
73
- tags: ["level_2", "length"],
74
- contrastFeature: "vowel",
75
- contrastDescription: "Short /e/ vs Long /ee/",
76
- word1: { script: "せんせい", romanization: "sensei", definition: "teacher", audioFile: null },
77
- word2: { script: "せんせえ", romanization: "sensee", definition: "(casual form of sensei)", audioFile: null }
78
- },
79
- // Level 3: Voicing
80
- {
81
- pairId: "ja_l3_001",
82
- level: 3,
83
- tags: ["level_3", "voicing"],
84
- contrastFeature: "consonant",
85
- contrastDescription: "/k/ vs /g/ - voiceless vs voiced",
86
- pronunciationTipId: "consonant_k_g",
87
- word1: { script: "かみ", romanization: "kami", definition: "paper; god; hair", audioFile: null },
88
- word2: { script: "がみ", romanization: "gami", definition: "harsh scolding", audioFile: null }
89
- },
90
- {
91
- pairId: "ja_l3_002",
92
- level: 3,
93
- tags: ["level_3", "voicing"],
94
- contrastFeature: "consonant",
95
- contrastDescription: "/t/ vs /d/",
96
- word1: { script: "たいこ", romanization: "taiko", definition: "drum", audioFile: null },
97
- word2: { script: "だいこ", romanization: "daiko", definition: "substitute", audioFile: null }
98
- },
99
- {
100
- pairId: "ja_l3_003",
101
- level: 3,
102
- tags: ["level_3", "voicing"],
103
- contrastFeature: "consonant",
104
- contrastDescription: "/h/ vs /b/ vs /p/",
105
- word1: { script: "はな", romanization: "hana", definition: "flower; nose", audioFile: null },
106
- word2: { script: "ばな", romanization: "bana", definition: "(in compounds)", audioFile: null }
107
- },
108
- // Level 4: Special sounds
109
- {
110
- pairId: "ja_l4_001",
111
- level: 4,
112
- tags: ["level_4", "special"],
113
- contrastFeature: "consonant",
114
- contrastDescription: "Without vs with ん /n/",
115
- word1: { script: "かさい", romanization: "kasai", definition: "fire", audioFile: null },
116
- word2: { script: "かんさい", romanization: "kansai", definition: "Kansai region", audioFile: null }
117
- },
118
- {
119
- pairId: "ja_l4_002",
120
- level: 4,
121
- tags: ["level_4", "special"],
122
- contrastFeature: "consonant",
123
- contrastDescription: "Without vs with っ (geminate)",
124
- word1: { script: "いて", romanization: "ite", definition: "being (te-form)", audioFile: null },
125
- word2: { script: "いって", romanization: "itte", definition: "going (te-form)", audioFile: null }
126
- },
127
- // Level 5: Expert
128
- {
129
- pairId: "ja_l5_001",
130
- level: 5,
131
- tags: ["level_5", "pitch"],
132
- contrastFeature: "pitch_accent",
133
- contrastDescription: "Pitch accent: はし (bridge) vs はし (chopsticks)",
134
- word1: { script: "はし", romanization: "hashi", definition: "bridge (LH)", audioFile: null },
135
- word2: { script: "はし", romanization: "hashi", definition: "chopsticks (HL)", audioFile: null },
136
- notes: "Same spelling, different pitch accent patterns"
137
- },
138
- // Additional Level 0 pairs
139
- {
140
- pairId: "ja_l0_002",
141
- level: 0,
142
- tags: ["level_0"],
143
- contrastFeature: "consonant",
144
- contrastDescription: "/t/ vs /n/",
145
- word1: { script: "たこ", romanization: "tako", definition: "kite; octopus", audioFile: null },
146
- word2: { script: "なご", romanization: "nago", definition: "(name)", audioFile: null }
147
- },
148
- {
149
- pairId: "ja_l0_003",
150
- level: 0,
151
- tags: ["level_0"],
152
- contrastFeature: "consonant",
153
- contrastDescription: "/h/ vs /m/",
154
- word1: { script: "はな", romanization: "hana", definition: "flower; nose", audioFile: null },
155
- word2: { script: "まな", romanization: "mana", definition: "learning", audioFile: null }
156
- },
157
- // Additional Level 1: More vowel contrasts
158
- {
159
- pairId: "ja_l1_004",
160
- level: 1,
161
- tags: ["level_1", "vowel"],
162
- contrastFeature: "vowel",
163
- contrastDescription: "/a/ vs /u/",
164
- word1: { script: "さか", romanization: "saka", definition: "slope", audioFile: null },
165
- word2: { script: "すか", romanization: "suka", definition: "(skirt)", audioFile: null }
166
- },
167
- {
168
- pairId: "ja_l1_005",
169
- level: 1,
170
- tags: ["level_1", "vowel"],
171
- contrastFeature: "vowel",
172
- contrastDescription: "/o/ vs /u/",
173
- word1: { script: "とり", romanization: "tori", definition: "bird", audioFile: null },
174
- word2: { script: "つり", romanization: "tsuri", definition: "fishing", audioFile: null }
175
- },
176
- // Additional Level 2: More long vowel contrasts
177
- {
178
- pairId: "ja_l2_004",
179
- level: 2,
180
- tags: ["level_2", "length"],
181
- contrastFeature: "vowel",
182
- contrastDescription: "Short /i/ vs Long /ii/",
183
- word1: { script: "びる", romanization: "biru", definition: "building (loanword)", audioFile: null },
184
- word2: { script: "びいる", romanization: "biiru", definition: "beer", audioFile: null }
185
- },
186
- {
187
- pairId: "ja_l2_005",
188
- level: 2,
189
- tags: ["level_2", "length"],
190
- contrastFeature: "vowel",
191
- contrastDescription: "Short /a/ vs Long /aa/",
192
- word1: { script: "おばさん", romanization: "obasan", definition: "aunt", audioFile: null },
193
- word2: { script: "おばあさん", romanization: "obaasan", definition: "grandmother", audioFile: null }
194
- },
195
- {
196
- pairId: "ja_l2_006",
197
- level: 2,
198
- tags: ["level_2", "length"],
199
- contrastFeature: "vowel",
200
- contrastDescription: "Short /e/ vs Long /ee/",
201
- word1: { script: "えき", romanization: "eki", definition: "station", audioFile: null },
202
- word2: { script: "ええき", romanization: "eeki", definition: "(good smell - dialectal)", audioFile: null }
203
- },
204
- // Additional Level 3: More voicing contrasts
205
- {
206
- pairId: "ja_l3_004",
207
- level: 3,
208
- tags: ["level_3", "voicing"],
209
- contrastFeature: "consonant",
210
- contrastDescription: "/s/ vs /z/",
211
- word1: { script: "さか", romanization: "saka", definition: "slope", audioFile: null },
212
- word2: { script: "ざか", romanization: "zaka", definition: "slope (alternative)", audioFile: null }
213
- },
214
- {
215
- pairId: "ja_l3_005",
216
- level: 3,
217
- tags: ["level_3", "voicing"],
218
- contrastFeature: "consonant",
219
- contrastDescription: "/h/ vs /p/",
220
- word1: { script: "はな", romanization: "hana", definition: "flower", audioFile: null },
221
- word2: { script: "ぱな", romanization: "pana", definition: "(panel - loanword)", audioFile: null }
222
- },
223
- {
224
- pairId: "ja_l3_006",
225
- level: 3,
226
- tags: ["level_3", "voicing"],
227
- contrastFeature: "consonant",
228
- contrastDescription: "/s/ vs /ʃ/ (sh)",
229
- word1: { script: "さか", romanization: "saka", definition: "slope", audioFile: null },
230
- word2: { script: "しゃか", romanization: "shaka", definition: "Shaka (name)", audioFile: null }
231
- },
232
- // Additional Level 4: More special sound contrasts
233
- {
234
- pairId: "ja_l4_003",
235
- level: 4,
236
- tags: ["level_4", "special"],
237
- contrastFeature: "consonant",
238
- contrastDescription: "Without vs with ん /n/ (syllabic nasal)",
239
- word1: { script: "たい", romanization: "tai", definition: "sea bream", audioFile: null },
240
- word2: { script: "たん", romanization: "tan", definition: "carbon", audioFile: null }
241
- },
242
- {
243
- pairId: "ja_l4_004",
244
- level: 4,
245
- tags: ["level_4", "special"],
246
- contrastFeature: "consonant",
247
- contrastDescription: "Without vs with っ (geminate consonant)",
248
- word1: { script: "さか", romanization: "saka", definition: "slope", audioFile: null },
249
- word2: { script: "さっか", romanization: "sakka", definition: "author", audioFile: null }
250
- },
251
- {
252
- pairId: "ja_l4_005",
253
- level: 4,
254
- tags: ["level_4", "special"],
255
- contrastFeature: "consonant",
256
- contrastDescription: "ん vs っ contrast",
257
- word1: { script: "てんき", romanization: "tenki", definition: "weather", audioFile: null },
258
- word2: { script: "てっき", romanization: "tekki", definition: "(iron key)", audioFile: null }
259
- },
260
- // Additional Level 5: More pitch accent pairs
261
- {
262
- pairId: "ja_l5_002",
263
- level: 5,
264
- tags: ["level_5", "pitch"],
265
- contrastFeature: "pitch_accent",
266
- contrastDescription: "Pitch accent: かみ (hair) vs かみ (god)",
267
- word1: { script: "かみ", romanization: "kami", definition: "hair (accent on ka)", audioFile: null },
268
- word2: { script: "かみ", romanization: "kami", definition: "god; paper (accent on mi)", audioFile: null },
269
- notes: "Same spelling, different pitch accent. Hair: HI-lo, God/paper: lo-HI."
270
- },
271
- {
272
- pairId: "ja_l5_003",
273
- level: 5,
274
- tags: ["level_5", "pitch"],
275
- contrastFeature: "pitch_accent",
276
- contrastDescription: "Pitch accent: あめ (rain) vs あめ (candy)",
277
- word1: { script: "あめ", romanization: "ame", definition: "rain (accent on a)", audioFile: null },
278
- word2: { script: "あめ", romanization: "ame", definition: "candy (accent on me or unaccented)", audioFile: null },
279
- notes: "Rain: HI-lo, Candy: lo-HI or flat."
280
- },
281
- {
282
- pairId: "ja_l5_004",
283
- level: 5,
284
- tags: ["level_5", "pitch", "length"],
285
- contrastFeature: "pitch_accent",
286
- contrastDescription: "Combined pitch and length contrast",
287
- word1: { script: "おばさん", romanization: "obasan", definition: "aunt (middle-aged woman)", audioFile: null },
288
- word2: { script: "おばあさん", romanization: "obaasan", definition: "grandmother", audioFile: null },
289
- notes: "Both pitch and vowel length differ. The long vowel changes the meaning."
290
- }
291
- ],
292
- pronunciationTips: {
293
- vowel_a_o: "/a/ is open, /o/ is rounded. Japanese vowels are pure, not diphthongs.",
294
- vowel_length: "Long vowels are held exactly twice as long as short vowels.",
295
- consonant_k_g: "/k/ is voiceless (no throat vibration). /g/ is voiced (throat vibrates)."
296
- }
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
297
20
  };
298
21
  export {
299
- i as default,
300
- i as minimalPairsData
22
+ x as default,
23
+ x as minimalPairsData
301
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/src';
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/src';
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: "Vowels", description: "Japanese vowel differences" },
4
+ { level: 2, title: "Long Vowels", description: "Short vs long vowels" },
5
+ { level: 3, title: "Voicing", description: "Voiceless vs voiced consonants" },
6
+ { level: 4, title: "Special Sounds", description: "The differences of n, tt, and long vowels" },
7
+ { level: 5, title: "Expert Level", description: "Subtle differences" }
8
+ ];
9
+ export {
10
+ e as levels
11
+ };
@@ -0,0 +1,3 @@
1
+ import { MinimalPairsPronunciationTipsMap } from '../../content-shared/src';
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,gCAI/B,CAAC"}
@@ -0,0 +1,8 @@
1
+ const o = {
2
+ vowel_a_o: "/a/ is open, /o/ is rounded. Japanese vowels are pure, not diphthongs.",
3
+ vowel_length: "Long vowels are held exactly twice as long as short vowels.",
4
+ consonant_k_g: "/k/ is voiceless (no throat vibration). /g/ is voiced (throat vibrates)."
5
+ };
6
+ export {
7
+ o as pronunciationTips
8
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polyglot-bundles/ja-minimal-pairs",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
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/ja-lang": "0.2.1"
53
+ "@polyglot-bundles/content-shared": "0.3.2",
54
+ "@polyglot-bundles/ja-lang": "0.2.2"
23
55
  },
24
56
  "devDependencies": {
25
57
  "vite": "^5.4.0",