imba-localization 0.4.8 โ†’ 0.4.10

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.
package/README.md CHANGED
@@ -10,6 +10,7 @@ A lightweight Imba module for loading and handling JSON-based localization files
10
10
  - ๐Ÿ”„ **Smart fallback system** - Falls back to a default language when needed
11
11
  - ๐Ÿง  **Intuitive access** - Proxy-based access to translation strings
12
12
  - ๐Ÿ“ก **Event handling** - Support for `onready`, `onchange`, and `onerror` events
13
+ - ๐Ÿงพ **Type declarations** - Includes package-level TypeScript declarations for editor and language-server imports
13
14
  - ๐Ÿš€ **Simple integration** - Easy to use in any Imba-based web application
14
15
  - ๐Ÿงฉ **`<language-selector>`** - Plug and play tag component for switching languages
15
16
 
@@ -310,4 +311,4 @@ tag App
310
311
  css w:20px h:20px stroke:red
311
312
  <{svg-arrow-down}>
312
313
 
313
- ```
314
+ ```
package/index.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ export type LocalizationLanguage = Record<string, any>;
2
+ export type LocalizationLanguages = Record<string, LocalizationLanguage>;
3
+
4
+ export interface LocalizationErrorState {
5
+ cache: Record<string, boolean>;
6
+ throw(code: string, details?: any): void;
7
+ }
8
+
9
+ export class Localization {
10
+ constructor(url: string, fallback?: string);
11
+
12
+ onready?: () => void;
13
+ onerror?: (error: string, details?: any) => void;
14
+ onchange?: (language: string) => void;
15
+
16
+ languages: LocalizationLanguages;
17
+ preferred: string;
18
+ default: string;
19
+ ready: boolean;
20
+ err: LocalizationErrorState;
21
+
22
+ active: string;
23
+
24
+ [key: string]: any;
25
+ }
26
+
27
+ export const flags: Record<string, string>;
28
+
29
+ declare global {
30
+ interface HTMLElementTagNameMap {
31
+ "language-selector": HTMLElement;
32
+ }
33
+ }
package/localization.imba CHANGED
@@ -1,3 +1,67 @@
1
+ # Emoji flags mapping - comprehensive list by region
2
+ export const flags = {
3
+ # Europe
4
+ 'gb': '๐Ÿ‡ฌ๐Ÿ‡ง', 'us': '๐Ÿ‡บ๐Ÿ‡ธ', 'ru': '๐Ÿ‡ท๐Ÿ‡บ', 'de': '๐Ÿ‡ฉ๐Ÿ‡ช', 'fr': '๐Ÿ‡ซ๐Ÿ‡ท',
5
+ 'es': '๐Ÿ‡ช๐Ÿ‡ธ', 'it': '๐Ÿ‡ฎ๐Ÿ‡น', 'nl': '๐Ÿ‡ณ๐Ÿ‡ฑ', 'pl': '๐Ÿ‡ต๐Ÿ‡ฑ', 'ua': '๐Ÿ‡บ๐Ÿ‡ฆ',
6
+ 'cz': '๐Ÿ‡จ๐Ÿ‡ฟ', 'gr': '๐Ÿ‡ฌ๐Ÿ‡ท', 'hu': '๐Ÿ‡ญ๐Ÿ‡บ', 'ro': '๐Ÿ‡ท๐Ÿ‡ด', 'se': '๐Ÿ‡ธ๐Ÿ‡ช',
7
+ 'no': '๐Ÿ‡ณ๐Ÿ‡ด', 'dk': '๐Ÿ‡ฉ๐Ÿ‡ฐ', 'fi': '๐Ÿ‡ซ๐Ÿ‡ฎ', 'pt': '๐Ÿ‡ต๐Ÿ‡น', 'ie': '๐Ÿ‡ฎ๐Ÿ‡ช',
8
+ 'be': '๐Ÿ‡ง๐Ÿ‡ช', 'at': '๐Ÿ‡ฆ๐Ÿ‡น', 'ch': '๐Ÿ‡จ๐Ÿ‡ญ', 'sk': '๐Ÿ‡ธ๐Ÿ‡ฐ', 'bg': '๐Ÿ‡ง๐Ÿ‡ฌ',
9
+ 'hr': '๐Ÿ‡ญ๐Ÿ‡ท', 'rs': '๐Ÿ‡ท๐Ÿ‡ธ', 'si': '๐Ÿ‡ธ๐Ÿ‡ฎ', 'lt': '๐Ÿ‡ฑ๐Ÿ‡น', 'lv': '๐Ÿ‡ฑ๐Ÿ‡ป',
10
+ 'ee': '๐Ÿ‡ช๐Ÿ‡ช', 'is': '๐Ÿ‡ฎ๐Ÿ‡ธ', 'lu': '๐Ÿ‡ฑ๐Ÿ‡บ', 'mt': '๐Ÿ‡ฒ๐Ÿ‡น', 'cy': '๐Ÿ‡จ๐Ÿ‡พ',
11
+ 'ba': '๐Ÿ‡ง๐Ÿ‡ฆ', 'mk': '๐Ÿ‡ฒ๐Ÿ‡ฐ', 'al': '๐Ÿ‡ฆ๐Ÿ‡ฑ', 'md': '๐Ÿ‡ฒ๐Ÿ‡ฉ', 'me': '๐Ÿ‡ฒ๐Ÿ‡ช',
12
+ 'by': '๐Ÿ‡ง๐Ÿ‡พ', 'ru': '๐Ÿ‡ท๐Ÿ‡บ', 'ge': '๐Ÿ‡ฌ๐Ÿ‡ช', 'am': '๐Ÿ‡ฆ๐Ÿ‡ฒ', 'az': '๐Ÿ‡ฆ๐Ÿ‡ฟ',
13
+
14
+ # Asia
15
+ 'cn': '๐Ÿ‡จ๐Ÿ‡ณ', 'jp': '๐Ÿ‡ฏ๐Ÿ‡ต', 'kr': '๐Ÿ‡ฐ๐Ÿ‡ท', 'in': '๐Ÿ‡ฎ๐Ÿ‡ณ', 'id': '๐Ÿ‡ฎ๐Ÿ‡ฉ',
16
+ 'th': '๐Ÿ‡น๐Ÿ‡ญ', 'vn': '๐Ÿ‡ป๐Ÿ‡ณ', 'ph': '๐Ÿ‡ต๐Ÿ‡ญ', 'sg': '๐Ÿ‡ธ๐Ÿ‡ฌ', 'my': '๐Ÿ‡ฒ๐Ÿ‡พ',
17
+ 'hk': '๐Ÿ‡ญ๐Ÿ‡ฐ', 'tw': '๐Ÿ‡น๐Ÿ‡ผ', 'pk': '๐Ÿ‡ต๐Ÿ‡ฐ', 'bd': '๐Ÿ‡ง๐Ÿ‡ฉ', 'lk': '๐Ÿ‡ฑ๐Ÿ‡ฐ',
18
+ 'kh': '๐Ÿ‡ฐ๐Ÿ‡ญ', 'la': '๐Ÿ‡ฑ๐Ÿ‡ฆ', 'mm': '๐Ÿ‡ฒ๐Ÿ‡ฒ', 'bn': '๐Ÿ‡ง๐Ÿ‡ณ', 'mo': '๐Ÿ‡ฒ๐Ÿ‡ด',
19
+ 'mn': '๐Ÿ‡ฒ๐Ÿ‡ณ', 'np': '๐Ÿ‡ณ๐Ÿ‡ต', 'bt': '๐Ÿ‡ง๐Ÿ‡น', 'mv': '๐Ÿ‡ฒ๐Ÿ‡ป', 'kz': '๐Ÿ‡ฐ๐Ÿ‡ฟ',
20
+ 'uz': '๐Ÿ‡บ๐Ÿ‡ฟ', 'tm': '๐Ÿ‡น๐Ÿ‡ฒ', 'kg': '๐Ÿ‡ฐ๐Ÿ‡ฌ', 'tj': '๐Ÿ‡น๐Ÿ‡ฏ', 'af': '๐Ÿ‡ฆ๐Ÿ‡ซ',
21
+
22
+ # Middle East
23
+ 'tr': '๐Ÿ‡น๐Ÿ‡ท', 'il': '๐Ÿ‡ฎ๐Ÿ‡ฑ', 'ae': '๐Ÿ‡ฆ๐Ÿ‡ช', 'sa': '๐Ÿ‡ธ๐Ÿ‡ฆ', 'qa': '๐Ÿ‡ถ๐Ÿ‡ฆ',
24
+ 'kw': '๐Ÿ‡ฐ๐Ÿ‡ผ', 'bh': '๐Ÿ‡ง๐Ÿ‡ญ', 'om': '๐Ÿ‡ด๐Ÿ‡ฒ', 'jo': '๐Ÿ‡ฏ๐Ÿ‡ด', 'lb': '๐Ÿ‡ฑ๐Ÿ‡ง',
25
+ 'iq': '๐Ÿ‡ฎ๐Ÿ‡ถ', 'ir': '๐Ÿ‡ฎ๐Ÿ‡ท', 'sy': '๐Ÿ‡ธ๐Ÿ‡พ', 'ye': '๐Ÿ‡พ๐Ÿ‡ช', 'ps': '๐Ÿ‡ต๐Ÿ‡ธ',
26
+
27
+ # Americas
28
+ 'br': '๐Ÿ‡ง๐Ÿ‡ท', 'mx': '๐Ÿ‡ฒ๐Ÿ‡ฝ', 'ca': '๐Ÿ‡จ๐Ÿ‡ฆ', 'ar': '๐Ÿ‡ฆ๐Ÿ‡ท', 'cl': '๐Ÿ‡จ๐Ÿ‡ฑ',
29
+ 'co': '๐Ÿ‡จ๐Ÿ‡ด', 'pe': '๐Ÿ‡ต๐Ÿ‡ช', 've': '๐Ÿ‡ป๐Ÿ‡ช', 'ec': '๐Ÿ‡ช๐Ÿ‡จ', 'uy': '๐Ÿ‡บ๐Ÿ‡พ',
30
+ 'py': '๐Ÿ‡ต๐Ÿ‡พ', 'bo': '๐Ÿ‡ง๐Ÿ‡ด', 'cr': '๐Ÿ‡จ๐Ÿ‡ท', 'pa': '๐Ÿ‡ต๐Ÿ‡ฆ', 'gt': '๐Ÿ‡ฌ๐Ÿ‡น',
31
+ 'cu': '๐Ÿ‡จ๐Ÿ‡บ', 'do': '๐Ÿ‡ฉ๐Ÿ‡ด', 'hn': '๐Ÿ‡ญ๐Ÿ‡ณ', 'sv': '๐Ÿ‡ธ๐Ÿ‡ป', 'ni': '๐Ÿ‡ณ๐Ÿ‡ฎ',
32
+ 'jm': '๐Ÿ‡ฏ๐Ÿ‡ฒ', 'tt': '๐Ÿ‡น๐Ÿ‡น', 'bs': '๐Ÿ‡ง๐Ÿ‡ธ', 'bb': '๐Ÿ‡ง๐Ÿ‡ง', 'pr': '๐Ÿ‡ต๐Ÿ‡ท',
33
+
34
+ # Africa
35
+ 'za': '๐Ÿ‡ฟ๐Ÿ‡ฆ', 'eg': '๐Ÿ‡ช๐Ÿ‡ฌ', 'ng': '๐Ÿ‡ณ๐Ÿ‡ฌ', 'ke': '๐Ÿ‡ฐ๐Ÿ‡ช', 'gh': '๐Ÿ‡ฌ๐Ÿ‡ญ',
36
+ 'ma': '๐Ÿ‡ฒ๐Ÿ‡ฆ', 'dz': '๐Ÿ‡ฉ๐Ÿ‡ฟ', 'tn': '๐Ÿ‡น๐Ÿ‡ณ', 'et': '๐Ÿ‡ช๐Ÿ‡น', 'tz': '๐Ÿ‡น๐Ÿ‡ฟ',
37
+ 'ug': '๐Ÿ‡บ๐Ÿ‡ฌ', 'zw': '๐Ÿ‡ฟ๐Ÿ‡ผ', 'ao': '๐Ÿ‡ฆ๐Ÿ‡ด', 'cm': '๐Ÿ‡จ๐Ÿ‡ฒ', 'ci': '๐Ÿ‡จ๐Ÿ‡ฎ',
38
+ 'cd': '๐Ÿ‡จ๐Ÿ‡ฉ', 'sn': '๐Ÿ‡ธ๐Ÿ‡ณ', 'ml': '๐Ÿ‡ฒ๐Ÿ‡ฑ', 'bf': '๐Ÿ‡ง๐Ÿ‡ซ', 'ne': '๐Ÿ‡ณ๐Ÿ‡ช',
39
+ 'tg': '๐Ÿ‡น๐Ÿ‡ฌ', 'bw': '๐Ÿ‡ง๐Ÿ‡ผ', 'na': '๐Ÿ‡ณ๐Ÿ‡ฆ', 'mz': '๐Ÿ‡ฒ๐Ÿ‡ฟ', 'mg': '๐Ÿ‡ฒ๐Ÿ‡ฌ',
40
+
41
+ # Oceania
42
+ 'au': '๐Ÿ‡ฆ๐Ÿ‡บ', 'nz': '๐Ÿ‡ณ๐Ÿ‡ฟ', 'fj': '๐Ÿ‡ซ๐Ÿ‡ฏ', 'pg': '๐Ÿ‡ต๐Ÿ‡ฌ', 'ws': '๐Ÿ‡ผ๐Ÿ‡ธ',
43
+ 'to': '๐Ÿ‡น๐Ÿ‡ด', 'vu': '๐Ÿ‡ป๐Ÿ‡บ', 'sb': '๐Ÿ‡ธ๐Ÿ‡ง', 'nc': '๐Ÿ‡ณ๐Ÿ‡จ', 'pf': '๐Ÿ‡ต๐Ÿ‡ซ',
44
+ 'gu': '๐Ÿ‡ฌ๐Ÿ‡บ', 'as': '๐Ÿ‡ฆ๐Ÿ‡ธ', 'ck': '๐Ÿ‡จ๐Ÿ‡ฐ', 'nu': '๐Ÿ‡ณ๐Ÿ‡บ', 'tk': '๐Ÿ‡น๐Ÿ‡ฐ',
45
+
46
+ # Caribbean & Atlantic
47
+ 'bm': '๐Ÿ‡ง๐Ÿ‡ฒ', 'ky': '๐Ÿ‡ฐ๐Ÿ‡พ', 'vi': '๐Ÿ‡ป๐Ÿ‡ฎ', 'ag': '๐Ÿ‡ฆ๐Ÿ‡ฌ', 'dm': '๐Ÿ‡ฉ๐Ÿ‡ฒ',
48
+ 'gd': '๐Ÿ‡ฌ๐Ÿ‡ฉ', 'kn': '๐Ÿ‡ฐ๐Ÿ‡ณ', 'lc': '๐Ÿ‡ฑ๐Ÿ‡จ', 'vc': '๐Ÿ‡ป๐Ÿ‡จ', 'ai': '๐Ÿ‡ฆ๐Ÿ‡ฎ',
49
+ 'ms': '๐Ÿ‡ฒ๐Ÿ‡ธ', 'gp': '๐Ÿ‡ฌ๐Ÿ‡ต', 'mq': '๐Ÿ‡ฒ๐Ÿ‡ถ', 'gf': '๐Ÿ‡ฌ๐Ÿ‡ซ', 'aw': '๐Ÿ‡ฆ๐Ÿ‡ผ',
50
+ 'cw': '๐Ÿ‡จ๐Ÿ‡ผ', 'sx': '๐Ÿ‡ธ๐Ÿ‡ฝ', 'bq': '๐Ÿ‡ง๐Ÿ‡ถ', 'tc': '๐Ÿ‡น๐Ÿ‡จ', 'vg': '๐Ÿ‡ป๐Ÿ‡ฌ',
51
+
52
+ # Indian Ocean
53
+ 'mu': '๐Ÿ‡ฒ๐Ÿ‡บ', 'sc': '๐Ÿ‡ธ๐Ÿ‡จ', 're': '๐Ÿ‡ท๐Ÿ‡ช', 'yt': '๐Ÿ‡พ๐Ÿ‡น', 'km': '๐Ÿ‡ฐ๐Ÿ‡ฒ',
54
+ 'mv': '๐Ÿ‡ฒ๐Ÿ‡ป', 'io': '๐Ÿ‡ฎ๐Ÿ‡ด', 'cx': '๐Ÿ‡จ๐Ÿ‡ฝ', 'cc': '๐Ÿ‡จ๐Ÿ‡จ', 'hm': '๐Ÿ‡ญ๐Ÿ‡ฒ',
55
+
56
+ # Arctic & Antarctic
57
+ 'gl': '๐Ÿ‡ฌ๐Ÿ‡ฑ', 'fo': '๐Ÿ‡ซ๐Ÿ‡ด', 'sj': '๐Ÿ‡ธ๐Ÿ‡ฏ', 'ax': '๐Ÿ‡ฆ๐Ÿ‡ฝ', 'tf': '๐Ÿ‡น๐Ÿ‡ซ',
58
+ 'bv': '๐Ÿ‡ง๐Ÿ‡ป', 'gs': '๐Ÿ‡ฌ๐Ÿ‡ธ', 'aq': '๐Ÿ‡ฆ๐Ÿ‡ถ', 'tf': '๐Ÿ‡น๐Ÿ‡ซ',
59
+
60
+ # Special territories
61
+ 'eu': '๐Ÿ‡ช๐Ÿ‡บ', 'un': '๐Ÿ‡บ๐Ÿ‡ณ', 'ac': '๐Ÿ‡ฆ๐Ÿ‡จ', 'ta': '๐Ÿ‡น๐Ÿ‡ฆ', 'cp': '๐Ÿ‡จ๐Ÿ‡ต',
62
+ 'dg': '๐Ÿ‡ฉ๐Ÿ‡ฌ', 'ea': '๐Ÿ‡ช๐Ÿ‡ฆ', 'ic': '๐Ÿ‡ฎ๐Ÿ‡จ', 'xk': '๐Ÿ‡ฝ๐Ÿ‡ฐ'
63
+ }
64
+
1
65
  export class Localization
2
66
  onready
3
67
  onerror
@@ -65,70 +129,6 @@ export class Localization
65
129
 
66
130
  export const path-arrow-down = <path d="M213.66,165.66a8,8,0,0,1-11.32,0L128,91.31,53.66,165.66a8,8,0,0,1-11.32-11.32l80-80a8,8,0,0,1,11.32,0l80,80A8,8,0,0,1,213.66,165.66Z">
67
131
 
68
- # Emoji flags mapping - comprehensive list by region
69
- const flags = {
70
- # Europe
71
- 'gb': '๐Ÿ‡ฌ๐Ÿ‡ง', 'us': '๐Ÿ‡บ๐Ÿ‡ธ', 'ru': '๐Ÿ‡ท๐Ÿ‡บ', 'de': '๐Ÿ‡ฉ๐Ÿ‡ช', 'fr': '๐Ÿ‡ซ๐Ÿ‡ท',
72
- 'es': '๐Ÿ‡ช๐Ÿ‡ธ', 'it': '๐Ÿ‡ฎ๐Ÿ‡น', 'nl': '๐Ÿ‡ณ๐Ÿ‡ฑ', 'pl': '๐Ÿ‡ต๐Ÿ‡ฑ', 'ua': '๐Ÿ‡บ๐Ÿ‡ฆ',
73
- 'cz': '๐Ÿ‡จ๐Ÿ‡ฟ', 'gr': '๐Ÿ‡ฌ๐Ÿ‡ท', 'hu': '๐Ÿ‡ญ๐Ÿ‡บ', 'ro': '๐Ÿ‡ท๐Ÿ‡ด', 'se': '๐Ÿ‡ธ๐Ÿ‡ช',
74
- 'no': '๐Ÿ‡ณ๐Ÿ‡ด', 'dk': '๐Ÿ‡ฉ๐Ÿ‡ฐ', 'fi': '๐Ÿ‡ซ๐Ÿ‡ฎ', 'pt': '๐Ÿ‡ต๐Ÿ‡น', 'ie': '๐Ÿ‡ฎ๐Ÿ‡ช',
75
- 'be': '๐Ÿ‡ง๐Ÿ‡ช', 'at': '๐Ÿ‡ฆ๐Ÿ‡น', 'ch': '๐Ÿ‡จ๐Ÿ‡ญ', 'sk': '๐Ÿ‡ธ๐Ÿ‡ฐ', 'bg': '๐Ÿ‡ง๐Ÿ‡ฌ',
76
- 'hr': '๐Ÿ‡ญ๐Ÿ‡ท', 'rs': '๐Ÿ‡ท๐Ÿ‡ธ', 'si': '๐Ÿ‡ธ๐Ÿ‡ฎ', 'lt': '๐Ÿ‡ฑ๐Ÿ‡น', 'lv': '๐Ÿ‡ฑ๐Ÿ‡ป',
77
- 'ee': '๐Ÿ‡ช๐Ÿ‡ช', 'is': '๐Ÿ‡ฎ๐Ÿ‡ธ', 'lu': '๐Ÿ‡ฑ๐Ÿ‡บ', 'mt': '๐Ÿ‡ฒ๐Ÿ‡น', 'cy': '๐Ÿ‡จ๐Ÿ‡พ',
78
- 'ba': '๐Ÿ‡ง๐Ÿ‡ฆ', 'mk': '๐Ÿ‡ฒ๐Ÿ‡ฐ', 'al': '๐Ÿ‡ฆ๐Ÿ‡ฑ', 'md': '๐Ÿ‡ฒ๐Ÿ‡ฉ', 'me': '๐Ÿ‡ฒ๐Ÿ‡ช',
79
- 'by': '๐Ÿ‡ง๐Ÿ‡พ', 'ru': '๐Ÿ‡ท๐Ÿ‡บ', 'ge': '๐Ÿ‡ฌ๐Ÿ‡ช', 'am': '๐Ÿ‡ฆ๐Ÿ‡ฒ', 'az': '๐Ÿ‡ฆ๐Ÿ‡ฟ',
80
-
81
- # Asia
82
- 'cn': '๐Ÿ‡จ๐Ÿ‡ณ', 'jp': '๐Ÿ‡ฏ๐Ÿ‡ต', 'kr': '๐Ÿ‡ฐ๐Ÿ‡ท', 'in': '๐Ÿ‡ฎ๐Ÿ‡ณ', 'id': '๐Ÿ‡ฎ๐Ÿ‡ฉ',
83
- 'th': '๐Ÿ‡น๐Ÿ‡ญ', 'vn': '๐Ÿ‡ป๐Ÿ‡ณ', 'ph': '๐Ÿ‡ต๐Ÿ‡ญ', 'sg': '๐Ÿ‡ธ๐Ÿ‡ฌ', 'my': '๐Ÿ‡ฒ๐Ÿ‡พ',
84
- 'hk': '๐Ÿ‡ญ๐Ÿ‡ฐ', 'tw': '๐Ÿ‡น๐Ÿ‡ผ', 'pk': '๐Ÿ‡ต๐Ÿ‡ฐ', 'bd': '๐Ÿ‡ง๐Ÿ‡ฉ', 'lk': '๐Ÿ‡ฑ๐Ÿ‡ฐ',
85
- 'kh': '๐Ÿ‡ฐ๐Ÿ‡ญ', 'la': '๐Ÿ‡ฑ๐Ÿ‡ฆ', 'mm': '๐Ÿ‡ฒ๐Ÿ‡ฒ', 'bn': '๐Ÿ‡ง๐Ÿ‡ณ', 'mo': '๐Ÿ‡ฒ๐Ÿ‡ด',
86
- 'mn': '๐Ÿ‡ฒ๐Ÿ‡ณ', 'np': '๐Ÿ‡ณ๐Ÿ‡ต', 'bt': '๐Ÿ‡ง๐Ÿ‡น', 'mv': '๐Ÿ‡ฒ๐Ÿ‡ป', 'kz': '๐Ÿ‡ฐ๐Ÿ‡ฟ',
87
- 'uz': '๐Ÿ‡บ๐Ÿ‡ฟ', 'tm': '๐Ÿ‡น๐Ÿ‡ฒ', 'kg': '๐Ÿ‡ฐ๐Ÿ‡ฌ', 'tj': '๐Ÿ‡น๐Ÿ‡ฏ', 'af': '๐Ÿ‡ฆ๐Ÿ‡ซ',
88
-
89
- # Middle East
90
- 'tr': '๐Ÿ‡น๐Ÿ‡ท', 'il': '๐Ÿ‡ฎ๐Ÿ‡ฑ', 'ae': '๐Ÿ‡ฆ๐Ÿ‡ช', 'sa': '๐Ÿ‡ธ๐Ÿ‡ฆ', 'qa': '๐Ÿ‡ถ๐Ÿ‡ฆ',
91
- 'kw': '๐Ÿ‡ฐ๐Ÿ‡ผ', 'bh': '๐Ÿ‡ง๐Ÿ‡ญ', 'om': '๐Ÿ‡ด๐Ÿ‡ฒ', 'jo': '๐Ÿ‡ฏ๐Ÿ‡ด', 'lb': '๐Ÿ‡ฑ๐Ÿ‡ง',
92
- 'iq': '๐Ÿ‡ฎ๐Ÿ‡ถ', 'ir': '๐Ÿ‡ฎ๐Ÿ‡ท', 'sy': '๐Ÿ‡ธ๐Ÿ‡พ', 'ye': '๐Ÿ‡พ๐Ÿ‡ช', 'ps': '๐Ÿ‡ต๐Ÿ‡ธ',
93
-
94
- # Americas
95
- 'br': '๐Ÿ‡ง๐Ÿ‡ท', 'mx': '๐Ÿ‡ฒ๐Ÿ‡ฝ', 'ca': '๐Ÿ‡จ๐Ÿ‡ฆ', 'ar': '๐Ÿ‡ฆ๐Ÿ‡ท', 'cl': '๐Ÿ‡จ๐Ÿ‡ฑ',
96
- 'co': '๐Ÿ‡จ๐Ÿ‡ด', 'pe': '๐Ÿ‡ต๐Ÿ‡ช', 've': '๐Ÿ‡ป๐Ÿ‡ช', 'ec': '๐Ÿ‡ช๐Ÿ‡จ', 'uy': '๐Ÿ‡บ๐Ÿ‡พ',
97
- 'py': '๐Ÿ‡ต๐Ÿ‡พ', 'bo': '๐Ÿ‡ง๐Ÿ‡ด', 'cr': '๐Ÿ‡จ๐Ÿ‡ท', 'pa': '๐Ÿ‡ต๐Ÿ‡ฆ', 'gt': '๐Ÿ‡ฌ๐Ÿ‡น',
98
- 'cu': '๐Ÿ‡จ๐Ÿ‡บ', 'do': '๐Ÿ‡ฉ๐Ÿ‡ด', 'hn': '๐Ÿ‡ญ๐Ÿ‡ณ', 'sv': '๐Ÿ‡ธ๐Ÿ‡ป', 'ni': '๐Ÿ‡ณ๐Ÿ‡ฎ',
99
- 'jm': '๐Ÿ‡ฏ๐Ÿ‡ฒ', 'tt': '๐Ÿ‡น๐Ÿ‡น', 'bs': '๐Ÿ‡ง๐Ÿ‡ธ', 'bb': '๐Ÿ‡ง๐Ÿ‡ง', 'pr': '๐Ÿ‡ต๐Ÿ‡ท',
100
-
101
- # Africa
102
- 'za': '๐Ÿ‡ฟ๐Ÿ‡ฆ', 'eg': '๐Ÿ‡ช๐Ÿ‡ฌ', 'ng': '๐Ÿ‡ณ๐Ÿ‡ฌ', 'ke': '๐Ÿ‡ฐ๐Ÿ‡ช', 'gh': '๐Ÿ‡ฌ๐Ÿ‡ญ',
103
- 'ma': '๐Ÿ‡ฒ๐Ÿ‡ฆ', 'dz': '๐Ÿ‡ฉ๐Ÿ‡ฟ', 'tn': '๐Ÿ‡น๐Ÿ‡ณ', 'et': '๐Ÿ‡ช๐Ÿ‡น', 'tz': '๐Ÿ‡น๐Ÿ‡ฟ',
104
- 'ug': '๐Ÿ‡บ๐Ÿ‡ฌ', 'zw': '๐Ÿ‡ฟ๐Ÿ‡ผ', 'ao': '๐Ÿ‡ฆ๐Ÿ‡ด', 'cm': '๐Ÿ‡จ๐Ÿ‡ฒ', 'ci': '๐Ÿ‡จ๐Ÿ‡ฎ',
105
- 'cd': '๐Ÿ‡จ๐Ÿ‡ฉ', 'sn': '๐Ÿ‡ธ๐Ÿ‡ณ', 'ml': '๐Ÿ‡ฒ๐Ÿ‡ฑ', 'bf': '๐Ÿ‡ง๐Ÿ‡ซ', 'ne': '๐Ÿ‡ณ๐Ÿ‡ช',
106
- 'tg': '๐Ÿ‡น๐Ÿ‡ฌ', 'bw': '๐Ÿ‡ง๐Ÿ‡ผ', 'na': '๐Ÿ‡ณ๐Ÿ‡ฆ', 'mz': '๐Ÿ‡ฒ๐Ÿ‡ฟ', 'mg': '๐Ÿ‡ฒ๐Ÿ‡ฌ',
107
-
108
- # Oceania
109
- 'au': '๐Ÿ‡ฆ๐Ÿ‡บ', 'nz': '๐Ÿ‡ณ๐Ÿ‡ฟ', 'fj': '๐Ÿ‡ซ๐Ÿ‡ฏ', 'pg': '๐Ÿ‡ต๐Ÿ‡ฌ', 'ws': '๐Ÿ‡ผ๐Ÿ‡ธ',
110
- 'to': '๐Ÿ‡น๐Ÿ‡ด', 'vu': '๐Ÿ‡ป๐Ÿ‡บ', 'sb': '๐Ÿ‡ธ๐Ÿ‡ง', 'nc': '๐Ÿ‡ณ๐Ÿ‡จ', 'pf': '๐Ÿ‡ต๐Ÿ‡ซ',
111
- 'gu': '๐Ÿ‡ฌ๐Ÿ‡บ', 'as': '๐Ÿ‡ฆ๐Ÿ‡ธ', 'ck': '๐Ÿ‡จ๐Ÿ‡ฐ', 'nu': '๐Ÿ‡ณ๐Ÿ‡บ', 'tk': '๐Ÿ‡น๐Ÿ‡ฐ',
112
-
113
- # Caribbean & Atlantic
114
- 'bm': '๐Ÿ‡ง๐Ÿ‡ฒ', 'ky': '๐Ÿ‡ฐ๐Ÿ‡พ', 'vi': '๐Ÿ‡ป๐Ÿ‡ฎ', 'ag': '๐Ÿ‡ฆ๐Ÿ‡ฌ', 'dm': '๐Ÿ‡ฉ๐Ÿ‡ฒ',
115
- 'gd': '๐Ÿ‡ฌ๐Ÿ‡ฉ', 'kn': '๐Ÿ‡ฐ๐Ÿ‡ณ', 'lc': '๐Ÿ‡ฑ๐Ÿ‡จ', 'vc': '๐Ÿ‡ป๐Ÿ‡จ', 'ai': '๐Ÿ‡ฆ๐Ÿ‡ฎ',
116
- 'ms': '๐Ÿ‡ฒ๐Ÿ‡ธ', 'gp': '๐Ÿ‡ฌ๐Ÿ‡ต', 'mq': '๐Ÿ‡ฒ๐Ÿ‡ถ', 'gf': '๐Ÿ‡ฌ๐Ÿ‡ซ', 'aw': '๐Ÿ‡ฆ๐Ÿ‡ผ',
117
- 'cw': '๐Ÿ‡จ๐Ÿ‡ผ', 'sx': '๐Ÿ‡ธ๐Ÿ‡ฝ', 'bq': '๐Ÿ‡ง๐Ÿ‡ถ', 'tc': '๐Ÿ‡น๐Ÿ‡จ', 'vg': '๐Ÿ‡ป๐Ÿ‡ฌ',
118
-
119
- # Indian Ocean
120
- 'mu': '๐Ÿ‡ฒ๐Ÿ‡บ', 'sc': '๐Ÿ‡ธ๐Ÿ‡จ', 're': '๐Ÿ‡ท๐Ÿ‡ช', 'yt': '๐Ÿ‡พ๐Ÿ‡น', 'km': '๐Ÿ‡ฐ๐Ÿ‡ฒ',
121
- 'mv': '๐Ÿ‡ฒ๐Ÿ‡ป', 'io': '๐Ÿ‡ฎ๐Ÿ‡ด', 'cx': '๐Ÿ‡จ๐Ÿ‡ฝ', 'cc': '๐Ÿ‡จ๐Ÿ‡จ', 'hm': '๐Ÿ‡ญ๐Ÿ‡ฒ',
122
-
123
- # Arctic & Antarctic
124
- 'gl': '๐Ÿ‡ฌ๐Ÿ‡ฑ', 'fo': '๐Ÿ‡ซ๐Ÿ‡ด', 'sj': '๐Ÿ‡ธ๐Ÿ‡ฏ', 'ax': '๐Ÿ‡ฆ๐Ÿ‡ฝ', 'tf': '๐Ÿ‡น๐Ÿ‡ซ',
125
- 'bv': '๐Ÿ‡ง๐Ÿ‡ป', 'gs': '๐Ÿ‡ฌ๐Ÿ‡ธ', 'aq': '๐Ÿ‡ฆ๐Ÿ‡ถ', 'tf': '๐Ÿ‡น๐Ÿ‡ซ',
126
-
127
- # Special territories
128
- 'eu': '๐Ÿ‡ช๐Ÿ‡บ', 'un': '๐Ÿ‡บ๐Ÿ‡ณ', 'ac': '๐Ÿ‡ฆ๐Ÿ‡จ', 'ta': '๐Ÿ‡น๐Ÿ‡ฆ', 'cp': '๐Ÿ‡จ๐Ÿ‡ต',
129
- 'dg': '๐Ÿ‡ฉ๐Ÿ‡ฌ', 'ea': '๐Ÿ‡ช๐Ÿ‡ฆ', 'ic': '๐Ÿ‡ฎ๐Ÿ‡จ', 'xk': '๐Ÿ‡ฝ๐Ÿ‡ฐ'
130
- }
131
-
132
132
  tag language-selector
133
133
  state
134
134
  #dropdown = false
@@ -136,9 +136,6 @@ tag language-selector
136
136
  passive = false
137
137
  first = true # Show selected language first in dropdown
138
138
 
139
- def setup
140
- data = state.active
141
-
142
139
  def onselect key
143
140
  #dropdown = false
144
141
  data = key
@@ -195,22 +192,23 @@ tag language-selector
195
192
  .text fs:13px bd:1px solid transparent
196
193
 
197
194
  <self [pos:rel] @mouseenter=mouseenter @mouseleave=mouseleave @click=click>
198
- <div.container [pos:rel d:hcc] .active=#dropdown [cursor:pointer]=(Object.keys(state.languages).length > 1)>
199
- <span.flag> flag(state[data])
200
- <div.name> name(state[data])
201
- if Object.keys(state.languages).length > 1
202
- <svg.arrow [ead:$ease] .active=#dropdown viewBox="0 0 256 256">
203
- <{arrow}>
195
+ <global @click.outside=(do #dropdown = false)>
196
+ <div.container [pos:rel d:hcc] .active=#dropdown [cursor:pointer]=(Object.keys(state.languages).length > 1)>
197
+ <span.flag> flag(state.languages[data])
198
+ <div.name> name(state.languages[data])
199
+ if Object.keys(state.languages).length > 1
200
+ <svg.arrow [ead:$ease] .active=#dropdown viewBox="0 0 256 256">
201
+ <{arrow}>
204
202
 
205
- if #dropdown and Object.keys(state.languages).length > 1
206
- <div$menu.menu [pos:abs w:100% > max-content o@off:0] ease>
207
- # Current language first (if first is true)
208
- if first
209
- <div.item @click.trap=onselect(data)>
210
- <span.icon> flag(state[data])
211
- <span.text> name(state[data])
212
- # Other languages
213
- for own key, value of state.languages
214
- <div.item @click.trap=onselect(key) [d:none]=(key == data && first)>
215
- <span.icon> flag(value)
216
- <span.text> name(value)
203
+ if #dropdown and Object.keys(state.languages).length > 1
204
+ <div$menu.menu [pos:abs w:100% > max-content o@off:0] ease>
205
+ # Current language first (if first is true)
206
+ if first
207
+ <div.item>
208
+ <span.icon> flag(state.languages[data])
209
+ <span.text> name(state.languages[data])
210
+ # Other languages
211
+ for own key, value of state.languages
212
+ <div.item @click.trap=onselect(key) [d:none]=(key == data && first)>
213
+ <span.icon> flag(value)
214
+ <span.text> name(value)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "imba-localization",
3
- "version": "0.4.8",
3
+ "version": "0.4.10",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/HeapVoid/imba-localization.git"
@@ -8,11 +8,25 @@
8
8
  "main": "localization.imba",
9
9
  "module": "localization.imba",
10
10
  "browser": "localization.imba",
11
+ "types": "index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./index.d.ts",
15
+ "import": "./localization.imba",
16
+ "default": "./localization.imba"
17
+ },
18
+ "./localization.imba": {
19
+ "types": "./index.d.ts",
20
+ "import": "./localization.imba",
21
+ "default": "./localization.imba"
22
+ }
23
+ },
11
24
  "description": "A class to make using language localizations in Imba easier.",
12
25
  "keywords": ["imba", "theme", "localization"],
13
26
  "license": "MIT",
14
27
  "type": "module",
15
28
  "files": [
16
- "localization.imba"
29
+ "localization.imba",
30
+ "index.d.ts"
17
31
  ]
18
- }
32
+ }