@aceshooting/lyra-flags 1.1.0 → 1.3.0

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 (333) hide show
  1. package/README.md +41 -4
  2. package/flags/ad.svg +1 -281
  3. package/flags/af.svg +1 -8
  4. package/flags/ar.svg +1 -71
  5. package/flags/as.svg +1 -112
  6. package/flags/bl.svg +1 -391
  7. package/flags/bm.svg +1 -224
  8. package/flags/bn.svg +1 -60
  9. package/flags/br.svg +1 -298
  10. package/flags/bt.svg +1 -551
  11. package/flags/bz.svg +1 -172
  12. package/flags/compact/ad.webp +0 -0
  13. package/flags/compact/af.webp +0 -0
  14. package/flags/compact/ar.webp +0 -0
  15. package/flags/compact/as.webp +0 -0
  16. package/flags/compact/bl.webp +0 -0
  17. package/flags/compact/bm.webp +0 -0
  18. package/flags/compact/bn.webp +0 -0
  19. package/flags/compact/br.webp +0 -0
  20. package/flags/compact/bt.webp +0 -0
  21. package/flags/compact/bz.webp +0 -0
  22. package/flags/compact/cy.webp +0 -0
  23. package/flags/compact/dm.webp +0 -0
  24. package/flags/compact/do.webp +0 -0
  25. package/flags/compact/ec.webp +0 -0
  26. package/flags/compact/eg.webp +0 -0
  27. package/flags/compact/es.webp +0 -0
  28. package/flags/compact/fj.webp +0 -0
  29. package/flags/compact/fk.webp +0 -0
  30. package/flags/compact/gi.webp +0 -0
  31. package/flags/compact/gq.webp +0 -0
  32. package/flags/compact/gs.webp +0 -0
  33. package/flags/compact/gt.webp +0 -0
  34. package/flags/compact/gu.webp +0 -0
  35. package/flags/compact/hr.webp +0 -0
  36. package/flags/compact/ht.webp +0 -0
  37. package/flags/compact/im.webp +0 -0
  38. package/flags/compact/io.webp +0 -0
  39. package/flags/compact/ir.webp +0 -0
  40. package/flags/compact/je.webp +0 -0
  41. package/flags/compact/kh.webp +0 -0
  42. package/flags/compact/ki.webp +0 -0
  43. package/flags/compact/ky.webp +0 -0
  44. package/flags/compact/kz.webp +0 -0
  45. package/flags/compact/li.webp +0 -0
  46. package/flags/compact/lk.webp +0 -0
  47. package/flags/compact/loaders/ad.js +5 -0
  48. package/flags/compact/loaders/af.js +5 -0
  49. package/flags/compact/loaders/ar.js +5 -0
  50. package/flags/compact/loaders/as.js +5 -0
  51. package/flags/compact/loaders/bl.js +5 -0
  52. package/flags/compact/loaders/bm.js +5 -0
  53. package/flags/compact/loaders/bn.js +5 -0
  54. package/flags/compact/loaders/br.js +5 -0
  55. package/flags/compact/loaders/bt.js +5 -0
  56. package/flags/compact/loaders/bz.js +5 -0
  57. package/flags/compact/loaders/cy.js +5 -0
  58. package/flags/compact/loaders/dm.js +5 -0
  59. package/flags/compact/loaders/do.js +5 -0
  60. package/flags/compact/loaders/ec.js +5 -0
  61. package/flags/compact/loaders/eg.js +5 -0
  62. package/flags/compact/loaders/es.js +5 -0
  63. package/flags/compact/loaders/fj.js +5 -0
  64. package/flags/compact/loaders/fk.js +5 -0
  65. package/flags/compact/loaders/gi.js +5 -0
  66. package/flags/compact/loaders/gq.js +5 -0
  67. package/flags/compact/loaders/gs.js +5 -0
  68. package/flags/compact/loaders/gt.js +5 -0
  69. package/flags/compact/loaders/gu.js +5 -0
  70. package/flags/compact/loaders/hr.js +5 -0
  71. package/flags/compact/loaders/ht.js +5 -0
  72. package/flags/compact/loaders/im.js +5 -0
  73. package/flags/compact/loaders/io.js +5 -0
  74. package/flags/compact/loaders/ir.js +5 -0
  75. package/flags/compact/loaders/je.js +5 -0
  76. package/flags/compact/loaders/kh.js +5 -0
  77. package/flags/compact/loaders/ki.js +5 -0
  78. package/flags/compact/loaders/ky.js +5 -0
  79. package/flags/compact/loaders/kz.js +5 -0
  80. package/flags/compact/loaders/li.js +5 -0
  81. package/flags/compact/loaders/lk.js +5 -0
  82. package/flags/compact/loaders/md.js +5 -0
  83. package/flags/compact/loaders/me.js +5 -0
  84. package/flags/compact/loaders/mp.js +5 -0
  85. package/flags/compact/loaders/ms.js +5 -0
  86. package/flags/compact/loaders/mt.js +5 -0
  87. package/flags/compact/loaders/mx.js +5 -0
  88. package/flags/compact/loaders/nf.js +5 -0
  89. package/flags/compact/loaders/ni.js +5 -0
  90. package/flags/compact/loaders/om.js +5 -0
  91. package/flags/compact/loaders/pf.js +5 -0
  92. package/flags/compact/loaders/pm.js +5 -0
  93. package/flags/compact/loaders/pn.js +5 -0
  94. package/flags/compact/loaders/pt.js +5 -0
  95. package/flags/compact/loaders/py.js +5 -0
  96. package/flags/compact/loaders/rs.js +5 -0
  97. package/flags/compact/loaders/sa.js +5 -0
  98. package/flags/compact/loaders/sh.js +5 -0
  99. package/flags/compact/loaders/sm.js +5 -0
  100. package/flags/compact/loaders/sv.js +5 -0
  101. package/flags/compact/loaders/sx.js +5 -0
  102. package/flags/compact/loaders/sz.js +5 -0
  103. package/flags/compact/loaders/tc.js +5 -0
  104. package/flags/compact/loaders/tm.js +5 -0
  105. package/flags/compact/loaders/ug.js +5 -0
  106. package/flags/compact/loaders/uy.js +5 -0
  107. package/flags/compact/loaders/va.js +5 -0
  108. package/flags/compact/loaders/vg.js +5 -0
  109. package/flags/compact/loaders/vi.js +5 -0
  110. package/flags/compact/loaders/yt.js +5 -0
  111. package/flags/compact/loaders/zm.js +5 -0
  112. package/flags/compact/md.webp +0 -0
  113. package/flags/compact/me.webp +0 -0
  114. package/flags/compact/mp.webp +0 -0
  115. package/flags/compact/ms.webp +0 -0
  116. package/flags/compact/mt.webp +0 -0
  117. package/flags/compact/mx.webp +0 -0
  118. package/flags/compact/nf.webp +0 -0
  119. package/flags/compact/ni.webp +0 -0
  120. package/flags/compact/om.webp +0 -0
  121. package/flags/compact/pf.webp +0 -0
  122. package/flags/compact/pm.webp +0 -0
  123. package/flags/compact/pn.webp +0 -0
  124. package/flags/compact/pt.webp +0 -0
  125. package/flags/compact/py.webp +0 -0
  126. package/flags/compact/rs.webp +0 -0
  127. package/flags/compact/sa.webp +0 -0
  128. package/flags/compact/sh.webp +0 -0
  129. package/flags/compact/sm.webp +0 -0
  130. package/flags/compact/sv.webp +0 -0
  131. package/flags/compact/sx.webp +0 -0
  132. package/flags/compact/sz.webp +0 -0
  133. package/flags/compact/tc.webp +0 -0
  134. package/flags/compact/tm.webp +0 -0
  135. package/flags/compact/ug.webp +0 -0
  136. package/flags/compact/uy.webp +0 -0
  137. package/flags/compact/va.webp +0 -0
  138. package/flags/compact/vg.webp +0 -0
  139. package/flags/compact/vi.webp +0 -0
  140. package/flags/compact/yt.webp +0 -0
  141. package/flags/compact/zm.webp +0 -0
  142. package/flags/cy.svg +1 -8
  143. package/flags/detailed/ad.svg +281 -0
  144. package/flags/detailed/af.svg +8 -0
  145. package/flags/detailed/ar.svg +71 -0
  146. package/flags/detailed/as.svg +112 -0
  147. package/flags/detailed/bl.svg +391 -0
  148. package/flags/detailed/bm.svg +224 -0
  149. package/flags/detailed/bn.svg +60 -0
  150. package/flags/detailed/br.svg +298 -0
  151. package/flags/detailed/bt.svg +551 -0
  152. package/flags/detailed/bz.svg +172 -0
  153. package/flags/detailed/cy.svg +8 -0
  154. package/flags/detailed/dm.svg +164 -0
  155. package/flags/detailed/do.svg +502 -0
  156. package/flags/detailed/ec.svg +1662 -0
  157. package/flags/detailed/eg.svg +101 -0
  158. package/flags/detailed/es.svg +712 -0
  159. package/flags/detailed/fj.svg +251 -0
  160. package/flags/detailed/fk.svg +293 -0
  161. package/flags/detailed/gi.svg +83 -0
  162. package/flags/detailed/gq.svg +82 -0
  163. package/flags/detailed/gs.svg +325 -0
  164. package/flags/detailed/gt.svg +579 -0
  165. package/flags/detailed/gu.svg +27 -0
  166. package/flags/detailed/hr.svg +233 -0
  167. package/flags/detailed/ht.svg +413 -0
  168. package/flags/detailed/im.svg +64 -0
  169. package/flags/detailed/io.svg +251 -0
  170. package/flags/detailed/ir.svg +59 -0
  171. package/flags/detailed/je.svg +178 -0
  172. package/flags/detailed/kh.svg +143 -0
  173. package/flags/detailed/ki.svg +28 -0
  174. package/flags/detailed/ky.svg +373 -0
  175. package/flags/detailed/kz.svg +56 -0
  176. package/flags/detailed/li.svg +117 -0
  177. package/flags/detailed/lk.svg +70 -0
  178. package/flags/detailed/loaders/ad.js +5 -0
  179. package/flags/detailed/loaders/af.js +5 -0
  180. package/flags/detailed/loaders/ar.js +5 -0
  181. package/flags/detailed/loaders/as.js +5 -0
  182. package/flags/detailed/loaders/bl.js +5 -0
  183. package/flags/detailed/loaders/bm.js +5 -0
  184. package/flags/detailed/loaders/bn.js +5 -0
  185. package/flags/detailed/loaders/br.js +5 -0
  186. package/flags/detailed/loaders/bt.js +5 -0
  187. package/flags/detailed/loaders/bz.js +5 -0
  188. package/flags/detailed/loaders/cy.js +5 -0
  189. package/flags/detailed/loaders/dm.js +5 -0
  190. package/flags/detailed/loaders/do.js +5 -0
  191. package/flags/detailed/loaders/ec.js +5 -0
  192. package/flags/detailed/loaders/eg.js +5 -0
  193. package/flags/detailed/loaders/es.js +5 -0
  194. package/flags/detailed/loaders/fj.js +5 -0
  195. package/flags/detailed/loaders/fk.js +5 -0
  196. package/flags/detailed/loaders/gi.js +5 -0
  197. package/flags/detailed/loaders/gq.js +5 -0
  198. package/flags/detailed/loaders/gs.js +5 -0
  199. package/flags/detailed/loaders/gt.js +5 -0
  200. package/flags/detailed/loaders/gu.js +5 -0
  201. package/flags/detailed/loaders/hr.js +5 -0
  202. package/flags/detailed/loaders/ht.js +5 -0
  203. package/flags/detailed/loaders/im.js +5 -0
  204. package/flags/detailed/loaders/io.js +5 -0
  205. package/flags/detailed/loaders/ir.js +5 -0
  206. package/flags/detailed/loaders/je.js +5 -0
  207. package/flags/detailed/loaders/kh.js +5 -0
  208. package/flags/detailed/loaders/ki.js +5 -0
  209. package/flags/detailed/loaders/ky.js +5 -0
  210. package/flags/detailed/loaders/kz.js +5 -0
  211. package/flags/detailed/loaders/li.js +5 -0
  212. package/flags/detailed/loaders/lk.js +5 -0
  213. package/flags/detailed/loaders/md.js +5 -0
  214. package/flags/detailed/loaders/me.js +5 -0
  215. package/flags/detailed/loaders/mp.js +5 -0
  216. package/flags/detailed/loaders/ms.js +5 -0
  217. package/flags/detailed/loaders/mt.js +5 -0
  218. package/flags/detailed/loaders/mx.js +5 -0
  219. package/flags/detailed/loaders/nf.js +5 -0
  220. package/flags/detailed/loaders/ni.js +5 -0
  221. package/flags/detailed/loaders/om.js +5 -0
  222. package/flags/detailed/loaders/pf.js +5 -0
  223. package/flags/detailed/loaders/pm.js +5 -0
  224. package/flags/detailed/loaders/pn.js +5 -0
  225. package/flags/detailed/loaders/pt.js +5 -0
  226. package/flags/detailed/loaders/py.js +5 -0
  227. package/flags/detailed/loaders/rs.js +5 -0
  228. package/flags/detailed/loaders/sa.js +5 -0
  229. package/flags/detailed/loaders/sh.js +5 -0
  230. package/flags/detailed/loaders/sm.js +5 -0
  231. package/flags/detailed/loaders/sv.js +5 -0
  232. package/flags/detailed/loaders/sx.js +5 -0
  233. package/flags/detailed/loaders/sz.js +5 -0
  234. package/flags/detailed/loaders/tc.js +5 -0
  235. package/flags/detailed/loaders/tm.js +5 -0
  236. package/flags/detailed/loaders/ug.js +5 -0
  237. package/flags/detailed/loaders/uy.js +5 -0
  238. package/flags/detailed/loaders/va.js +5 -0
  239. package/flags/detailed/loaders/vg.js +5 -0
  240. package/flags/detailed/loaders/vi.js +5 -0
  241. package/flags/detailed/loaders/yt.js +5 -0
  242. package/flags/detailed/loaders/zm.js +5 -0
  243. package/flags/detailed/md.svg +135 -0
  244. package/flags/detailed/me.svg +259 -0
  245. package/flags/detailed/mp.svg +281 -0
  246. package/flags/detailed/ms.svg +82 -0
  247. package/flags/detailed/mt.svg +67 -0
  248. package/flags/detailed/mx.svg +766 -0
  249. package/flags/detailed/nf.svg +7 -0
  250. package/flags/detailed/ni.svg +359 -0
  251. package/flags/detailed/om.svg +382 -0
  252. package/flags/detailed/pf.svg +64 -0
  253. package/flags/detailed/pm.svg +535 -0
  254. package/flags/detailed/pn.svg +147 -0
  255. package/flags/detailed/pt.svg +264 -0
  256. package/flags/detailed/py.svg +103 -0
  257. package/flags/detailed/rs.svg +546 -0
  258. package/flags/detailed/sa.svg +6 -0
  259. package/flags/detailed/sh.svg +298 -0
  260. package/flags/detailed/sm.svg +494 -0
  261. package/flags/detailed/sv.svg +1536 -0
  262. package/flags/detailed/sx.svg +49 -0
  263. package/flags/detailed/sz.svg +61 -0
  264. package/flags/detailed/tc.svg +142 -0
  265. package/flags/detailed/tm.svg +371 -0
  266. package/flags/detailed/ug.svg +37 -0
  267. package/flags/detailed/uy.svg +82 -0
  268. package/flags/detailed/va.svg +415 -0
  269. package/flags/detailed/vg.svg +280 -0
  270. package/flags/detailed/vi.svg +144 -0
  271. package/flags/detailed/yt.svg +80 -0
  272. package/flags/detailed/zm.svg +38 -0
  273. package/flags/dm.svg +1 -164
  274. package/flags/do.svg +1 -502
  275. package/flags/ec.svg +1 -1662
  276. package/flags/eg.svg +1 -101
  277. package/flags/es.svg +1 -712
  278. package/flags/fj.svg +1 -251
  279. package/flags/fk.svg +1 -293
  280. package/flags/generated-compact.d.ts +6 -0
  281. package/flags/generated-compact.js +80 -0
  282. package/flags/generated-detailed.d.ts +6 -0
  283. package/flags/generated-detailed.js +79 -0
  284. package/flags/gi.svg +1 -83
  285. package/flags/gq.svg +1 -82
  286. package/flags/gs.svg +1 -325
  287. package/flags/gt.svg +1 -579
  288. package/flags/gu.svg +1 -27
  289. package/flags/hr.svg +1 -233
  290. package/flags/ht.svg +1 -413
  291. package/flags/im.svg +1 -64
  292. package/flags/io.svg +1 -251
  293. package/flags/ir.svg +1 -59
  294. package/flags/je.svg +1 -178
  295. package/flags/kh.svg +1 -143
  296. package/flags/ki.svg +1 -28
  297. package/flags/ky.svg +1 -373
  298. package/flags/kz.svg +1 -56
  299. package/flags/li.svg +1 -117
  300. package/flags/lk.svg +1 -70
  301. package/flags/md.svg +1 -135
  302. package/flags/me.svg +1 -259
  303. package/flags/mp.svg +1 -281
  304. package/flags/ms.svg +1 -82
  305. package/flags/mt.svg +1 -67
  306. package/flags/mx.svg +1 -766
  307. package/flags/nf.svg +1 -7
  308. package/flags/ni.svg +1 -359
  309. package/flags/om.svg +1 -382
  310. package/flags/pf.svg +1 -64
  311. package/flags/pm.svg +1 -535
  312. package/flags/pn.svg +1 -147
  313. package/flags/pt.svg +1 -264
  314. package/flags/py.svg +1 -103
  315. package/flags/rs.svg +1 -546
  316. package/flags/sa.svg +1 -6
  317. package/flags/sh.svg +1 -298
  318. package/flags/sm.svg +1 -494
  319. package/flags/sv.svg +1 -1536
  320. package/flags/sx.svg +1 -49
  321. package/flags/sz.svg +1 -61
  322. package/flags/tc.svg +1 -142
  323. package/flags/tm.svg +1 -371
  324. package/flags/ug.svg +1 -37
  325. package/flags/uy.svg +1 -82
  326. package/flags/va.svg +1 -415
  327. package/flags/vg.svg +1 -280
  328. package/flags/vi.svg +1 -144
  329. package/flags/yt.svg +1 -80
  330. package/flags/zm.svg +1 -38
  331. package/index.d.ts +24 -1
  332. package/index.js +20 -2
  333. package/package.json +8 -1
package/README.md CHANGED
@@ -36,16 +36,53 @@ import { flagUrls } from '@aceshooting/lyra-flags';
36
36
  const urls = await flagUrls(); // -> { ad: '...', ae: '...', ..., zw: '...' } — all 249 at once
37
37
  ```
38
38
 
39
+ ## Fidelity tiers: compact / standard / detailed
40
+
41
+ A minority of flags (65 of 249) embed a detailed coat of arms, seal, or emblem in their source
42
+ artwork (e.g. `es`, `pt`, `sv`) — full illustrative vector detail that isn't visually
43
+ distinguishable at icon scale but costs real transfer bytes regardless (the worst case, `sv`, is
44
+ 741 KB raw). Those 65 codes ship **three tiers**, each the best representation for a size band; pick
45
+ one with `flagUrl(code, { variant })` or `<lyra-flag variant="...">`:
46
+
47
+ - **`compact`** — a tiny WebP raster (~1–3 KB) for icon-scale use (menu items, language selectors,
48
+ dense lists; ~12–28px), where the emblem is a sub-pixel smudge anyway. At that size a downscaled
49
+ raster is both crisper *and* far smaller than hundreds of sub-pixel vector paths.
50
+ - **`standard`** (the default — what `flagUrl(code)` / `<lyra-flag country="...">` resolve to) — an
51
+ aggressively-but-losslessly SVGO-optimized vector for card/row sizes (~28–96px). Every flag is
52
+ under 80 KB, with no fidelity loss perceptible at that scale.
53
+ - **`detailed`** — the pristine, unmodified original vector, for rendering larger than icon scale
54
+ (e.g. a hero display) where the extra illustrative detail is actually visible.
55
+
56
+ For the other 184 codes (already appropriately sized simple flags), every `variant` is a safe
57
+ no-op — all tiers resolve to the same small vector file.
58
+
59
+ ```js
60
+ await flagUrl('es'); // -> standard vector (~48 KB)
61
+ await flagUrl('es', { variant: 'compact' }); // -> WebP raster (~2 KB)
62
+ await flagUrl('es', { variant: 'detailed' }); // -> pristine original (~415 KB)
63
+ ```
64
+
65
+ Every tier is code-split per flag **and** per tier: a bundled app that only ever requests
66
+ `variant: 'compact'` for a handful of codes ships only those few compact WebPs — never their
67
+ standard or detailed variants, and never the other flags.
68
+
69
+ Maintainers, after adding/replacing source art: `pnpm run optimize` (re-derives the standard tier
70
+ from the pristine `flags/detailed/` originals) → `pnpm run build-compact` (renders the compact WebP
71
+ rasters) → `pnpm run generate` (updates the generated loader index).
72
+
39
73
  ## Asset provenance / license
40
74
 
41
75
  The code in this package (`index.js`, `index.d.ts`) is MIT, © Aceshooting.
42
76
 
43
- The flag artwork (`flags/*.svg`) is vendored unmodified from Google's
77
+ The flag artwork (`flags/*.svg`, and every `flags/detailed/*.svg`) is vendored from Google's
44
78
  [**Noto Emoji**](https://github.com/googlefonts/noto-emoji) project
45
79
  (`third_party/region-flags/waved-svg/`), traced there after visually matching three flags
46
- (France, the US, the UK) pixel-for-pixel against that source. Per that directory's `LICENSE`:
47
- the flags were downloaded from Wikipedia/Wikimedia Commons and verified to be **Public Domain
48
- or otherwise exempt from Copyright**. Full upstream `LICENSE`/`AUTHORS`/`README.third_party`
80
+ (France, the US, the UK) pixel-for-pixel against that source. `flags/detailed/*.svg` (65 codes) are
81
+ unmodified; the corresponding `flags/*.svg` for those same 65 codes is an SVGO-optimized derivative,
82
+ and each `flags/compact/*.webp` is a downscaled raster derivative of the same original (see
83
+ "Fidelity tiers" above) — every other `flags/*.svg` is unmodified. Per that
84
+ directory's `LICENSE`: the flags were downloaded from Wikipedia/Wikimedia Commons and verified to be
85
+ **Public Domain or otherwise exempt from Copyright**. Full upstream `LICENSE`/`AUTHORS`/`README.third_party`
49
86
  text, the exact source commit, and per-flag exceptions are reproduced in
50
87
  [`THIRD_PARTY_NOTICES.md`](./THIRD_PARTY_NOTICES.md).
51
88