imba-localization 0.4.7 → 0.4.8

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 +84 -13
  2. package/package.json +1 -1
package/localization.imba CHANGED
@@ -65,13 +65,77 @@ export class Localization
65
65
 
66
66
  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
67
 
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
+
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
-
137
+ first = true # Show selected language first in dropdown
138
+
75
139
  def setup
76
140
  data = state.active
77
141
 
@@ -83,12 +147,13 @@ tag language-selector
83
147
  const settings = language.$
84
148
  if !settings
85
149
  state.err.throw('localization-no-key', '$')
86
- return undefined
150
+ return '🌐'
87
151
  const flag = settings.flag
88
152
  if !flag
89
153
  state.err.throw('localization-no-key', '$.flag')
90
- return undefined
91
- return icons.replace('##',flag)
154
+ return '🌐'
155
+ # Return emoji flag
156
+ return flags[flag] || '🌐'
92
157
 
93
158
  def name language
94
159
  const settings = language.$
@@ -116,30 +181,36 @@ tag language-selector
116
181
  return if !passive
117
182
  #dropdown = !#dropdown
118
183
 
119
- css
184
+ css
120
185
  $ease: 0.5s
121
186
  .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
187
  @.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
188
+ .flag mr:10px fs:20px lh:20px bd:1px solid transparent
124
189
  .name mr:10px bd:1px solid transparent
125
190
  .arrow w:16px h:16px fill:light-dark(#000000,#FFFFFF) ml:auto scale-y:-1 bd:1px solid transparent
126
191
  @.active scale-y:1 bd:1px solid transparent
127
192
  .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
193
  .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
194
+ .icon mr:10px fs:20px lh:20px bd:1px solid transparent
130
195
  .text fs:13px bd:1px solid transparent
131
196
 
132
197
  <self [pos:rel] @mouseenter=mouseenter @mouseleave=mouseleave @click=click>
133
198
  <div.container [pos:rel d:hcc] .active=#dropdown [cursor:pointer]=(Object.keys(state.languages).length > 1)>
134
- <img.flag src=flag(state[data])>
199
+ <span.flag> flag(state[data])
135
200
  <div.name> name(state[data])
136
201
  if Object.keys(state.languages).length > 1
137
202
  <svg.arrow [ead:$ease] .active=#dropdown viewBox="0 0 256 256">
138
203
  <{arrow}>
139
-
204
+
140
205
  if #dropdown and Object.keys(state.languages).length > 1
141
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
142
213
  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)
214
+ <div.item @click.trap=onselect(key) [d:none]=(key == data && first)>
215
+ <span.icon> flag(value)
216
+ <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.8",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/HeapVoid/imba-localization.git"