imba-localization 0.4.7 → 0.4.9

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 (2) hide show
  1. package/localization.imba +92 -23
  2. package/package.json +1 -1
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
@@ -67,13 +131,10 @@ export const path-arrow-down = <path d="M213.66,165.66a8,8,0,0,1-11.32,0L128,91.
67
131
 
68
132
  tag language-selector
69
133
  state
70
- icons = "https://kapowaz.github.io/square-flags/flags/##.svg"
71
134
  #dropdown = false
72
135
  arrow = path-arrow-down
73
136
  passive = false
74
-
75
- def setup
76
- data = state.active
137
+ first = true # Show selected language first in dropdown
77
138
 
78
139
  def onselect key
79
140
  #dropdown = false
@@ -83,12 +144,13 @@ tag language-selector
83
144
  const settings = language.$
84
145
  if !settings
85
146
  state.err.throw('localization-no-key', '$')
86
- return undefined
147
+ return '🌐'
87
148
  const flag = settings.flag
88
149
  if !flag
89
150
  state.err.throw('localization-no-key', '$.flag')
90
- return undefined
91
- return icons.replace('##',flag)
151
+ return '🌐'
152
+ # Return emoji flag
153
+ return flags[flag] || '🌐'
92
154
 
93
155
  def name language
94
156
  const settings = language.$
@@ -116,30 +178,37 @@ tag language-selector
116
178
  return if !passive
117
179
  #dropdown = !#dropdown
118
180
 
119
- css
181
+ css
120
182
  $ease: 0.5s
121
183
  .container rd:8px px:15px py:8px bgc:light-dark(#000000/10, #FFFFFF/20) fw:500 fs:13px ead:$ease bd:1px solid transparent
122
184
  @.active bgc:light-dark(#000000/20, #FFFFFF/30) bd:1px solid transparent
123
- .flag mr:10px rd:50% w:20px h:20px bd:1px solid transparent
185
+ .flag mr:10px fs:20px lh:20px bd:1px solid transparent
124
186
  .name mr:10px bd:1px solid transparent
125
187
  .arrow w:16px h:16px fill:light-dark(#000000,#FFFFFF) ml:auto scale-y:-1 bd:1px solid transparent
126
188
  @.active scale-y:1 bd:1px solid transparent
127
189
  .menu t:100% l:50% x:-50% zi:999 backdrop-filter:blur(20px) mt:2px rd:8px rd:8px py:5px bgc:light-dark(#000000/5, #FFFFFF/10) fw:500 fs:13px ead:$ease bd:1px solid transparent
128
190
  .item d:hflex ai:center px:10px py:5px rd:8px cursor:pointer bg@hover:light-dark(#000000/10, #FFFFFF/20) m:5px bd:1px solid transparent
129
- .icon h:20px w:20px mr:10px rd:50% bd:1px solid transparent
191
+ .icon mr:10px fs:20px lh:20px bd:1px solid transparent
130
192
  .text fs:13px bd:1px solid transparent
131
193
 
132
194
  <self [pos:rel] @mouseenter=mouseenter @mouseleave=mouseleave @click=click>
133
- <div.container [pos:rel d:hcc] .active=#dropdown [cursor:pointer]=(Object.keys(state.languages).length > 1)>
134
- <img.flag src=flag(state[data])>
135
- <div.name> name(state[data])
136
- if Object.keys(state.languages).length > 1
137
- <svg.arrow [ead:$ease] .active=#dropdown viewBox="0 0 256 256">
138
- <{arrow}>
139
-
140
- if #dropdown and Object.keys(state.languages).length > 1
141
- <div$menu.menu [pos:abs w:100% > max-content o@off:0] ease>
142
- for own key, value of state.languages
143
- <div.item @click.trap=onselect(key) [d:none]=(key == data)>
144
- <img.icon src=flag(value)>
145
- <span.text> name(value)
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}>
202
+
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.7",
3
+ "version": "0.4.9",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/HeapVoid/imba-localization.git"