diff --git a/assets/icons/flags/AC.svg b/assets/icons/flags/AC.svg
new file mode 100644
index 0000000000..19546929be
--- /dev/null
+++ b/assets/icons/flags/AC.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AD.svg b/assets/icons/flags/AD.svg
new file mode 100644
index 0000000000..36151a9b27
--- /dev/null
+++ b/assets/icons/flags/AD.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AE.svg b/assets/icons/flags/AE.svg
new file mode 100644
index 0000000000..79141e0305
--- /dev/null
+++ b/assets/icons/flags/AE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AF.svg b/assets/icons/flags/AF.svg
new file mode 100644
index 0000000000..801fca7bcf
--- /dev/null
+++ b/assets/icons/flags/AF.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AG.svg b/assets/icons/flags/AG.svg
new file mode 100644
index 0000000000..8b0f0b95da
--- /dev/null
+++ b/assets/icons/flags/AG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AI.svg b/assets/icons/flags/AI.svg
new file mode 100644
index 0000000000..af8d14bf36
--- /dev/null
+++ b/assets/icons/flags/AI.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AL.svg b/assets/icons/flags/AL.svg
new file mode 100644
index 0000000000..95e24a01a1
--- /dev/null
+++ b/assets/icons/flags/AL.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AM.svg b/assets/icons/flags/AM.svg
new file mode 100644
index 0000000000..9bca705153
--- /dev/null
+++ b/assets/icons/flags/AM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AO.svg b/assets/icons/flags/AO.svg
new file mode 100644
index 0000000000..f8004f04bb
--- /dev/null
+++ b/assets/icons/flags/AO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AQ.svg b/assets/icons/flags/AQ.svg
new file mode 100644
index 0000000000..91b492dbe5
--- /dev/null
+++ b/assets/icons/flags/AQ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AR.svg b/assets/icons/flags/AR.svg
new file mode 100644
index 0000000000..27759f3d3a
--- /dev/null
+++ b/assets/icons/flags/AR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AS.svg b/assets/icons/flags/AS.svg
new file mode 100644
index 0000000000..8ef1ce8f73
--- /dev/null
+++ b/assets/icons/flags/AS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AT.svg b/assets/icons/flags/AT.svg
new file mode 100644
index 0000000000..27b8648339
--- /dev/null
+++ b/assets/icons/flags/AT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AU.svg b/assets/icons/flags/AU.svg
new file mode 100644
index 0000000000..1355a9222f
--- /dev/null
+++ b/assets/icons/flags/AU.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AW.svg b/assets/icons/flags/AW.svg
new file mode 100644
index 0000000000..7dcdeb5987
--- /dev/null
+++ b/assets/icons/flags/AW.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AX.svg b/assets/icons/flags/AX.svg
new file mode 100644
index 0000000000..021e6c7640
--- /dev/null
+++ b/assets/icons/flags/AX.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/AZ.svg b/assets/icons/flags/AZ.svg
new file mode 100644
index 0000000000..934e6d2058
--- /dev/null
+++ b/assets/icons/flags/AZ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BA.svg b/assets/icons/flags/BA.svg
new file mode 100644
index 0000000000..a8efea626a
--- /dev/null
+++ b/assets/icons/flags/BA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BB.svg b/assets/icons/flags/BB.svg
new file mode 100644
index 0000000000..1513a070ab
--- /dev/null
+++ b/assets/icons/flags/BB.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BD.svg b/assets/icons/flags/BD.svg
new file mode 100644
index 0000000000..2dc182e779
--- /dev/null
+++ b/assets/icons/flags/BD.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BE.svg b/assets/icons/flags/BE.svg
new file mode 100644
index 0000000000..1351f50eba
--- /dev/null
+++ b/assets/icons/flags/BE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BF.svg b/assets/icons/flags/BF.svg
new file mode 100644
index 0000000000..fcbf06f933
--- /dev/null
+++ b/assets/icons/flags/BF.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BG.svg b/assets/icons/flags/BG.svg
new file mode 100644
index 0000000000..aaa99ccd9f
--- /dev/null
+++ b/assets/icons/flags/BG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BH.svg b/assets/icons/flags/BH.svg
new file mode 100644
index 0000000000..00cce67ac4
--- /dev/null
+++ b/assets/icons/flags/BH.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BI.svg b/assets/icons/flags/BI.svg
new file mode 100644
index 0000000000..d97e6da547
--- /dev/null
+++ b/assets/icons/flags/BI.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BJ.svg b/assets/icons/flags/BJ.svg
new file mode 100644
index 0000000000..8af1e89fcd
--- /dev/null
+++ b/assets/icons/flags/BJ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BL.svg b/assets/icons/flags/BL.svg
new file mode 100644
index 0000000000..2edc17aff0
--- /dev/null
+++ b/assets/icons/flags/BL.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BM.svg b/assets/icons/flags/BM.svg
new file mode 100644
index 0000000000..0a6580e7f2
--- /dev/null
+++ b/assets/icons/flags/BM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BN.svg b/assets/icons/flags/BN.svg
new file mode 100644
index 0000000000..ff3d7806b4
--- /dev/null
+++ b/assets/icons/flags/BN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BO.svg b/assets/icons/flags/BO.svg
new file mode 100644
index 0000000000..75169435b6
--- /dev/null
+++ b/assets/icons/flags/BO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BQ-BO.svg b/assets/icons/flags/BQ-BO.svg
new file mode 100644
index 0000000000..a099b97a13
--- /dev/null
+++ b/assets/icons/flags/BQ-BO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BQ-SA.svg b/assets/icons/flags/BQ-SA.svg
new file mode 100644
index 0000000000..0bbd03cf6f
--- /dev/null
+++ b/assets/icons/flags/BQ-SA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BQ-SE.svg b/assets/icons/flags/BQ-SE.svg
new file mode 100644
index 0000000000..03c7dbcfd6
--- /dev/null
+++ b/assets/icons/flags/BQ-SE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BQ.svg b/assets/icons/flags/BQ.svg
new file mode 100644
index 0000000000..a099b97a13
--- /dev/null
+++ b/assets/icons/flags/BQ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BR.svg b/assets/icons/flags/BR.svg
new file mode 100644
index 0000000000..1f383a13c2
--- /dev/null
+++ b/assets/icons/flags/BR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BS.svg b/assets/icons/flags/BS.svg
new file mode 100644
index 0000000000..4e72f16d63
--- /dev/null
+++ b/assets/icons/flags/BS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BT.svg b/assets/icons/flags/BT.svg
new file mode 100644
index 0000000000..aa6f20a229
--- /dev/null
+++ b/assets/icons/flags/BT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BV.svg b/assets/icons/flags/BV.svg
new file mode 100644
index 0000000000..756480c1ab
--- /dev/null
+++ b/assets/icons/flags/BV.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BW.svg b/assets/icons/flags/BW.svg
new file mode 100644
index 0000000000..149c6555de
--- /dev/null
+++ b/assets/icons/flags/BW.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BY.svg b/assets/icons/flags/BY.svg
new file mode 100644
index 0000000000..074379538d
--- /dev/null
+++ b/assets/icons/flags/BY.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/BZ.svg b/assets/icons/flags/BZ.svg
new file mode 100644
index 0000000000..34cb5ad55d
--- /dev/null
+++ b/assets/icons/flags/BZ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CA.svg b/assets/icons/flags/CA.svg
new file mode 100644
index 0000000000..ecd62d9bfc
--- /dev/null
+++ b/assets/icons/flags/CA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CC.svg b/assets/icons/flags/CC.svg
new file mode 100644
index 0000000000..5f4e39cf31
--- /dev/null
+++ b/assets/icons/flags/CC.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CD.svg b/assets/icons/flags/CD.svg
new file mode 100644
index 0000000000..43b4dd7bf6
--- /dev/null
+++ b/assets/icons/flags/CD.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CF.svg b/assets/icons/flags/CF.svg
new file mode 100644
index 0000000000..fc0814ee85
--- /dev/null
+++ b/assets/icons/flags/CF.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CG.svg b/assets/icons/flags/CG.svg
new file mode 100644
index 0000000000..e1c3267533
--- /dev/null
+++ b/assets/icons/flags/CG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CH.svg b/assets/icons/flags/CH.svg
new file mode 100644
index 0000000000..230fdcebd7
--- /dev/null
+++ b/assets/icons/flags/CH.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CI.svg b/assets/icons/flags/CI.svg
new file mode 100644
index 0000000000..83187cc0f0
--- /dev/null
+++ b/assets/icons/flags/CI.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CK.svg b/assets/icons/flags/CK.svg
new file mode 100644
index 0000000000..b7ca9cbd6d
--- /dev/null
+++ b/assets/icons/flags/CK.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CL.svg b/assets/icons/flags/CL.svg
new file mode 100644
index 0000000000..e74764adf8
--- /dev/null
+++ b/assets/icons/flags/CL.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CM.svg b/assets/icons/flags/CM.svg
new file mode 100644
index 0000000000..cb00606c71
--- /dev/null
+++ b/assets/icons/flags/CM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CN.svg b/assets/icons/flags/CN.svg
new file mode 100644
index 0000000000..f306585ca4
--- /dev/null
+++ b/assets/icons/flags/CN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CO.svg b/assets/icons/flags/CO.svg
new file mode 100644
index 0000000000..c54c22a48a
--- /dev/null
+++ b/assets/icons/flags/CO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CR.svg b/assets/icons/flags/CR.svg
new file mode 100644
index 0000000000..50001d5299
--- /dev/null
+++ b/assets/icons/flags/CR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CU.svg b/assets/icons/flags/CU.svg
new file mode 100644
index 0000000000..8306ad2a2e
--- /dev/null
+++ b/assets/icons/flags/CU.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CV.svg b/assets/icons/flags/CV.svg
new file mode 100644
index 0000000000..0576d1e248
--- /dev/null
+++ b/assets/icons/flags/CV.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CW.svg b/assets/icons/flags/CW.svg
new file mode 100644
index 0000000000..c39ff6a97f
--- /dev/null
+++ b/assets/icons/flags/CW.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CX.svg b/assets/icons/flags/CX.svg
new file mode 100644
index 0000000000..1980977cec
--- /dev/null
+++ b/assets/icons/flags/CX.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CY.svg b/assets/icons/flags/CY.svg
new file mode 100644
index 0000000000..5d0692a2cf
--- /dev/null
+++ b/assets/icons/flags/CY.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/CZ.svg b/assets/icons/flags/CZ.svg
new file mode 100644
index 0000000000..077b9bfc8f
--- /dev/null
+++ b/assets/icons/flags/CZ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/DE.svg b/assets/icons/flags/DE.svg
new file mode 100644
index 0000000000..16240101c3
--- /dev/null
+++ b/assets/icons/flags/DE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/DJ.svg b/assets/icons/flags/DJ.svg
new file mode 100644
index 0000000000..15f9b1b579
--- /dev/null
+++ b/assets/icons/flags/DJ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/DK.svg b/assets/icons/flags/DK.svg
new file mode 100644
index 0000000000..9d8860c32c
--- /dev/null
+++ b/assets/icons/flags/DK.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/DM.svg b/assets/icons/flags/DM.svg
new file mode 100644
index 0000000000..7bbf97cdb3
--- /dev/null
+++ b/assets/icons/flags/DM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/DO.svg b/assets/icons/flags/DO.svg
new file mode 100644
index 0000000000..14da9aad1a
--- /dev/null
+++ b/assets/icons/flags/DO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/DZ.svg b/assets/icons/flags/DZ.svg
new file mode 100644
index 0000000000..6ebc4e4b81
--- /dev/null
+++ b/assets/icons/flags/DZ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/EC.svg b/assets/icons/flags/EC.svg
new file mode 100644
index 0000000000..d49f58caf8
--- /dev/null
+++ b/assets/icons/flags/EC.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/EE.svg b/assets/icons/flags/EE.svg
new file mode 100644
index 0000000000..9490e3d74e
--- /dev/null
+++ b/assets/icons/flags/EE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/EG.svg b/assets/icons/flags/EG.svg
new file mode 100644
index 0000000000..74a3879cb6
--- /dev/null
+++ b/assets/icons/flags/EG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/EH.svg b/assets/icons/flags/EH.svg
new file mode 100644
index 0000000000..8caa920828
--- /dev/null
+++ b/assets/icons/flags/EH.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/ER.svg b/assets/icons/flags/ER.svg
new file mode 100644
index 0000000000..841e1f2d6b
--- /dev/null
+++ b/assets/icons/flags/ER.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/ES.svg b/assets/icons/flags/ES.svg
new file mode 100644
index 0000000000..57b19fbfcf
--- /dev/null
+++ b/assets/icons/flags/ES.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/ET.svg b/assets/icons/flags/ET.svg
new file mode 100644
index 0000000000..656ae9e85d
--- /dev/null
+++ b/assets/icons/flags/ET.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/EU.svg b/assets/icons/flags/EU.svg
new file mode 100644
index 0000000000..474c815251
--- /dev/null
+++ b/assets/icons/flags/EU.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/FI.svg b/assets/icons/flags/FI.svg
new file mode 100644
index 0000000000..62badfe2fe
--- /dev/null
+++ b/assets/icons/flags/FI.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/FJ.svg b/assets/icons/flags/FJ.svg
new file mode 100644
index 0000000000..a3f1daf728
--- /dev/null
+++ b/assets/icons/flags/FJ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/FK.svg b/assets/icons/flags/FK.svg
new file mode 100644
index 0000000000..f83058a403
--- /dev/null
+++ b/assets/icons/flags/FK.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/FM.svg b/assets/icons/flags/FM.svg
new file mode 100644
index 0000000000..87dfbd92cc
--- /dev/null
+++ b/assets/icons/flags/FM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/FO.svg b/assets/icons/flags/FO.svg
new file mode 100644
index 0000000000..d0212aaab5
--- /dev/null
+++ b/assets/icons/flags/FO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/FR.svg b/assets/icons/flags/FR.svg
new file mode 100644
index 0000000000..b5badd1cac
--- /dev/null
+++ b/assets/icons/flags/FR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GA.svg b/assets/icons/flags/GA.svg
new file mode 100644
index 0000000000..72aa571de2
--- /dev/null
+++ b/assets/icons/flags/GA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GB-ENG.svg b/assets/icons/flags/GB-ENG.svg
new file mode 100644
index 0000000000..0aa64158b6
--- /dev/null
+++ b/assets/icons/flags/GB-ENG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GB-NIR.svg b/assets/icons/flags/GB-NIR.svg
new file mode 100644
index 0000000000..b26e75f0f7
--- /dev/null
+++ b/assets/icons/flags/GB-NIR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GB-SCT.svg b/assets/icons/flags/GB-SCT.svg
new file mode 100644
index 0000000000..564b78ce28
--- /dev/null
+++ b/assets/icons/flags/GB-SCT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GB-WLS.svg b/assets/icons/flags/GB-WLS.svg
new file mode 100644
index 0000000000..0689531485
--- /dev/null
+++ b/assets/icons/flags/GB-WLS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GB.svg b/assets/icons/flags/GB.svg
new file mode 100644
index 0000000000..3b1d9e3964
--- /dev/null
+++ b/assets/icons/flags/GB.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GD.svg b/assets/icons/flags/GD.svg
new file mode 100644
index 0000000000..5645235243
--- /dev/null
+++ b/assets/icons/flags/GD.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GE-AB.svg b/assets/icons/flags/GE-AB.svg
new file mode 100644
index 0000000000..f9a49bd2d8
--- /dev/null
+++ b/assets/icons/flags/GE-AB.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GE-OS.svg b/assets/icons/flags/GE-OS.svg
new file mode 100644
index 0000000000..129c31d9fe
--- /dev/null
+++ b/assets/icons/flags/GE-OS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GE.svg b/assets/icons/flags/GE.svg
new file mode 100644
index 0000000000..5983d83b4f
--- /dev/null
+++ b/assets/icons/flags/GE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GF.svg b/assets/icons/flags/GF.svg
new file mode 100644
index 0000000000..f5342f6c28
--- /dev/null
+++ b/assets/icons/flags/GF.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GG.svg b/assets/icons/flags/GG.svg
new file mode 100644
index 0000000000..c16d330658
--- /dev/null
+++ b/assets/icons/flags/GG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GH.svg b/assets/icons/flags/GH.svg
new file mode 100644
index 0000000000..faed278025
--- /dev/null
+++ b/assets/icons/flags/GH.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GI.svg b/assets/icons/flags/GI.svg
new file mode 100644
index 0000000000..748fe7c880
--- /dev/null
+++ b/assets/icons/flags/GI.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GL.svg b/assets/icons/flags/GL.svg
new file mode 100644
index 0000000000..19be13633e
--- /dev/null
+++ b/assets/icons/flags/GL.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GM.svg b/assets/icons/flags/GM.svg
new file mode 100644
index 0000000000..acde58a19a
--- /dev/null
+++ b/assets/icons/flags/GM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GN.svg b/assets/icons/flags/GN.svg
new file mode 100644
index 0000000000..ac1d0e54ee
--- /dev/null
+++ b/assets/icons/flags/GN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GP.svg b/assets/icons/flags/GP.svg
new file mode 100644
index 0000000000..b5badd1cac
--- /dev/null
+++ b/assets/icons/flags/GP.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GQ.svg b/assets/icons/flags/GQ.svg
new file mode 100644
index 0000000000..d8887dbd10
--- /dev/null
+++ b/assets/icons/flags/GQ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GR.svg b/assets/icons/flags/GR.svg
new file mode 100644
index 0000000000..9e8da77a81
--- /dev/null
+++ b/assets/icons/flags/GR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GS.svg b/assets/icons/flags/GS.svg
new file mode 100644
index 0000000000..7b98b6c9ad
--- /dev/null
+++ b/assets/icons/flags/GS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GT.svg b/assets/icons/flags/GT.svg
new file mode 100644
index 0000000000..adb292e8d7
--- /dev/null
+++ b/assets/icons/flags/GT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GU.svg b/assets/icons/flags/GU.svg
new file mode 100644
index 0000000000..e9800dfb1f
--- /dev/null
+++ b/assets/icons/flags/GU.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GW.svg b/assets/icons/flags/GW.svg
new file mode 100644
index 0000000000..55273b99c3
--- /dev/null
+++ b/assets/icons/flags/GW.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/GY.svg b/assets/icons/flags/GY.svg
new file mode 100644
index 0000000000..fa6701a4b5
--- /dev/null
+++ b/assets/icons/flags/GY.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/HK.svg b/assets/icons/flags/HK.svg
new file mode 100644
index 0000000000..424e0268f5
--- /dev/null
+++ b/assets/icons/flags/HK.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/HM.svg b/assets/icons/flags/HM.svg
new file mode 100644
index 0000000000..fd92835f03
--- /dev/null
+++ b/assets/icons/flags/HM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/HN.svg b/assets/icons/flags/HN.svg
new file mode 100644
index 0000000000..1ddf9a6b22
--- /dev/null
+++ b/assets/icons/flags/HN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/HR.svg b/assets/icons/flags/HR.svg
new file mode 100644
index 0000000000..f925d4dfab
--- /dev/null
+++ b/assets/icons/flags/HR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/HT.svg b/assets/icons/flags/HT.svg
new file mode 100644
index 0000000000..b0a13cb34c
--- /dev/null
+++ b/assets/icons/flags/HT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/HU.svg b/assets/icons/flags/HU.svg
new file mode 100644
index 0000000000..b0bb33ea4b
--- /dev/null
+++ b/assets/icons/flags/HU.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/IC.svg b/assets/icons/flags/IC.svg
new file mode 100644
index 0000000000..afe0b50fbe
--- /dev/null
+++ b/assets/icons/flags/IC.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/ID.svg b/assets/icons/flags/ID.svg
new file mode 100644
index 0000000000..e0b7116f7c
--- /dev/null
+++ b/assets/icons/flags/ID.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/IE.svg b/assets/icons/flags/IE.svg
new file mode 100644
index 0000000000..4c375d1c37
--- /dev/null
+++ b/assets/icons/flags/IE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/IL.svg b/assets/icons/flags/IL.svg
new file mode 100644
index 0000000000..5cdba0b14a
--- /dev/null
+++ b/assets/icons/flags/IL.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/IM.svg b/assets/icons/flags/IM.svg
new file mode 100644
index 0000000000..209e082422
--- /dev/null
+++ b/assets/icons/flags/IM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/IN.svg b/assets/icons/flags/IN.svg
new file mode 100644
index 0000000000..7247466440
--- /dev/null
+++ b/assets/icons/flags/IN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/IO.svg b/assets/icons/flags/IO.svg
new file mode 100644
index 0000000000..c3cf26da8f
--- /dev/null
+++ b/assets/icons/flags/IO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/IQ.svg b/assets/icons/flags/IQ.svg
new file mode 100644
index 0000000000..2331570036
--- /dev/null
+++ b/assets/icons/flags/IQ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/IR.svg b/assets/icons/flags/IR.svg
new file mode 100644
index 0000000000..8180a7dcd3
--- /dev/null
+++ b/assets/icons/flags/IR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/IS.svg b/assets/icons/flags/IS.svg
new file mode 100644
index 0000000000..0eeb61c4e1
--- /dev/null
+++ b/assets/icons/flags/IS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/IT.svg b/assets/icons/flags/IT.svg
new file mode 100644
index 0000000000..57f6a3ac51
--- /dev/null
+++ b/assets/icons/flags/IT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/JE.svg b/assets/icons/flags/JE.svg
new file mode 100644
index 0000000000..a1e99d962a
--- /dev/null
+++ b/assets/icons/flags/JE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/JM.svg b/assets/icons/flags/JM.svg
new file mode 100644
index 0000000000..f1f5116d36
--- /dev/null
+++ b/assets/icons/flags/JM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/JO.svg b/assets/icons/flags/JO.svg
new file mode 100644
index 0000000000..4c6c532b45
--- /dev/null
+++ b/assets/icons/flags/JO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/JP.svg b/assets/icons/flags/JP.svg
new file mode 100644
index 0000000000..90b8cd1324
--- /dev/null
+++ b/assets/icons/flags/JP.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KE.svg b/assets/icons/flags/KE.svg
new file mode 100644
index 0000000000..24d4fc4f0d
--- /dev/null
+++ b/assets/icons/flags/KE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KG.svg b/assets/icons/flags/KG.svg
new file mode 100644
index 0000000000..3df8dbf305
--- /dev/null
+++ b/assets/icons/flags/KG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KH.svg b/assets/icons/flags/KH.svg
new file mode 100644
index 0000000000..fa1d0d6427
--- /dev/null
+++ b/assets/icons/flags/KH.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KI.svg b/assets/icons/flags/KI.svg
new file mode 100644
index 0000000000..88c1cad9f0
--- /dev/null
+++ b/assets/icons/flags/KI.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KM.svg b/assets/icons/flags/KM.svg
new file mode 100644
index 0000000000..798007879f
--- /dev/null
+++ b/assets/icons/flags/KM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KN.svg b/assets/icons/flags/KN.svg
new file mode 100644
index 0000000000..d17ff30105
--- /dev/null
+++ b/assets/icons/flags/KN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KP.svg b/assets/icons/flags/KP.svg
new file mode 100644
index 0000000000..8708465ca9
--- /dev/null
+++ b/assets/icons/flags/KP.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KR.svg b/assets/icons/flags/KR.svg
new file mode 100644
index 0000000000..4848a4cbf6
--- /dev/null
+++ b/assets/icons/flags/KR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KW.svg b/assets/icons/flags/KW.svg
new file mode 100644
index 0000000000..12ce61edb3
--- /dev/null
+++ b/assets/icons/flags/KW.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KY.svg b/assets/icons/flags/KY.svg
new file mode 100644
index 0000000000..740f678545
--- /dev/null
+++ b/assets/icons/flags/KY.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/KZ.svg b/assets/icons/flags/KZ.svg
new file mode 100644
index 0000000000..ff07cbe752
--- /dev/null
+++ b/assets/icons/flags/KZ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LA.svg b/assets/icons/flags/LA.svg
new file mode 100644
index 0000000000..a5898c81f4
--- /dev/null
+++ b/assets/icons/flags/LA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LB.svg b/assets/icons/flags/LB.svg
new file mode 100644
index 0000000000..90385e1a1d
--- /dev/null
+++ b/assets/icons/flags/LB.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LC.svg b/assets/icons/flags/LC.svg
new file mode 100644
index 0000000000..955aba2669
--- /dev/null
+++ b/assets/icons/flags/LC.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LI.svg b/assets/icons/flags/LI.svg
new file mode 100644
index 0000000000..53abf35386
--- /dev/null
+++ b/assets/icons/flags/LI.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LK.svg b/assets/icons/flags/LK.svg
new file mode 100644
index 0000000000..025ec7a5b0
--- /dev/null
+++ b/assets/icons/flags/LK.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LR.svg b/assets/icons/flags/LR.svg
new file mode 100644
index 0000000000..a5214afd42
--- /dev/null
+++ b/assets/icons/flags/LR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LS.svg b/assets/icons/flags/LS.svg
new file mode 100644
index 0000000000..5ec52c0d16
--- /dev/null
+++ b/assets/icons/flags/LS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LT.svg b/assets/icons/flags/LT.svg
new file mode 100644
index 0000000000..bb38ff68a0
--- /dev/null
+++ b/assets/icons/flags/LT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LU.svg b/assets/icons/flags/LU.svg
new file mode 100644
index 0000000000..e1027c1ec5
--- /dev/null
+++ b/assets/icons/flags/LU.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LV.svg b/assets/icons/flags/LV.svg
new file mode 100644
index 0000000000..91c70db231
--- /dev/null
+++ b/assets/icons/flags/LV.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/LY.svg b/assets/icons/flags/LY.svg
new file mode 100644
index 0000000000..469399e70a
--- /dev/null
+++ b/assets/icons/flags/LY.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MA.svg b/assets/icons/flags/MA.svg
new file mode 100644
index 0000000000..011d0936cd
--- /dev/null
+++ b/assets/icons/flags/MA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MC.svg b/assets/icons/flags/MC.svg
new file mode 100644
index 0000000000..86bdf0fc21
--- /dev/null
+++ b/assets/icons/flags/MC.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MD.svg b/assets/icons/flags/MD.svg
new file mode 100644
index 0000000000..193115948f
--- /dev/null
+++ b/assets/icons/flags/MD.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/ME.svg b/assets/icons/flags/ME.svg
new file mode 100644
index 0000000000..14da4b6bd8
--- /dev/null
+++ b/assets/icons/flags/ME.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MF.svg b/assets/icons/flags/MF.svg
new file mode 100644
index 0000000000..c273767c92
--- /dev/null
+++ b/assets/icons/flags/MF.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MG.svg b/assets/icons/flags/MG.svg
new file mode 100644
index 0000000000..e028cd6f81
--- /dev/null
+++ b/assets/icons/flags/MG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MH.svg b/assets/icons/flags/MH.svg
new file mode 100644
index 0000000000..14bbdb6c47
--- /dev/null
+++ b/assets/icons/flags/MH.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MK.svg b/assets/icons/flags/MK.svg
new file mode 100644
index 0000000000..96f493547c
--- /dev/null
+++ b/assets/icons/flags/MK.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/ML.svg b/assets/icons/flags/ML.svg
new file mode 100644
index 0000000000..6124e3ab41
--- /dev/null
+++ b/assets/icons/flags/ML.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MM.svg b/assets/icons/flags/MM.svg
new file mode 100644
index 0000000000..10b91e6e81
--- /dev/null
+++ b/assets/icons/flags/MM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MN.svg b/assets/icons/flags/MN.svg
new file mode 100644
index 0000000000..fcc533dc8d
--- /dev/null
+++ b/assets/icons/flags/MN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MO.svg b/assets/icons/flags/MO.svg
new file mode 100644
index 0000000000..2e3aec70d0
--- /dev/null
+++ b/assets/icons/flags/MO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MP.svg b/assets/icons/flags/MP.svg
new file mode 100644
index 0000000000..b48744316f
--- /dev/null
+++ b/assets/icons/flags/MP.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MQ.svg b/assets/icons/flags/MQ.svg
new file mode 100644
index 0000000000..b2ad901891
--- /dev/null
+++ b/assets/icons/flags/MQ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MR.svg b/assets/icons/flags/MR.svg
new file mode 100644
index 0000000000..6194ad73fa
--- /dev/null
+++ b/assets/icons/flags/MR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MS.svg b/assets/icons/flags/MS.svg
new file mode 100644
index 0000000000..253f44705d
--- /dev/null
+++ b/assets/icons/flags/MS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MT.svg b/assets/icons/flags/MT.svg
new file mode 100644
index 0000000000..bc617d44bb
--- /dev/null
+++ b/assets/icons/flags/MT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MU.svg b/assets/icons/flags/MU.svg
new file mode 100644
index 0000000000..0f967a6dee
--- /dev/null
+++ b/assets/icons/flags/MU.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MV.svg b/assets/icons/flags/MV.svg
new file mode 100644
index 0000000000..b2bb113211
--- /dev/null
+++ b/assets/icons/flags/MV.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MW.svg b/assets/icons/flags/MW.svg
new file mode 100644
index 0000000000..1766294d0a
--- /dev/null
+++ b/assets/icons/flags/MW.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MX.svg b/assets/icons/flags/MX.svg
new file mode 100644
index 0000000000..99736f6093
--- /dev/null
+++ b/assets/icons/flags/MX.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MY.svg b/assets/icons/flags/MY.svg
new file mode 100644
index 0000000000..a3bff4d51f
--- /dev/null
+++ b/assets/icons/flags/MY.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/MZ.svg b/assets/icons/flags/MZ.svg
new file mode 100644
index 0000000000..1c079286ce
--- /dev/null
+++ b/assets/icons/flags/MZ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NA.svg b/assets/icons/flags/NA.svg
new file mode 100644
index 0000000000..f38e9b4075
--- /dev/null
+++ b/assets/icons/flags/NA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NC.svg b/assets/icons/flags/NC.svg
new file mode 100644
index 0000000000..000085726f
--- /dev/null
+++ b/assets/icons/flags/NC.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NE.svg b/assets/icons/flags/NE.svg
new file mode 100644
index 0000000000..b41710a5df
--- /dev/null
+++ b/assets/icons/flags/NE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NF.svg b/assets/icons/flags/NF.svg
new file mode 100644
index 0000000000..b8ee1853eb
--- /dev/null
+++ b/assets/icons/flags/NF.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NG.svg b/assets/icons/flags/NG.svg
new file mode 100644
index 0000000000..2a2e1b5b6b
--- /dev/null
+++ b/assets/icons/flags/NG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NI.svg b/assets/icons/flags/NI.svg
new file mode 100644
index 0000000000..af63fbf4ae
--- /dev/null
+++ b/assets/icons/flags/NI.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NL.svg b/assets/icons/flags/NL.svg
new file mode 100644
index 0000000000..444e6164d0
--- /dev/null
+++ b/assets/icons/flags/NL.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NO.svg b/assets/icons/flags/NO.svg
new file mode 100644
index 0000000000..5ed30a5a46
--- /dev/null
+++ b/assets/icons/flags/NO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NP.svg b/assets/icons/flags/NP.svg
new file mode 100644
index 0000000000..d6a4ae2165
--- /dev/null
+++ b/assets/icons/flags/NP.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NR.svg b/assets/icons/flags/NR.svg
new file mode 100644
index 0000000000..369fe2528a
--- /dev/null
+++ b/assets/icons/flags/NR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NU.svg b/assets/icons/flags/NU.svg
new file mode 100644
index 0000000000..b0de11e264
--- /dev/null
+++ b/assets/icons/flags/NU.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/NZ.svg b/assets/icons/flags/NZ.svg
new file mode 100644
index 0000000000..0358324d4f
--- /dev/null
+++ b/assets/icons/flags/NZ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/OM.svg b/assets/icons/flags/OM.svg
new file mode 100644
index 0000000000..fe378218ee
--- /dev/null
+++ b/assets/icons/flags/OM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PA.svg b/assets/icons/flags/PA.svg
new file mode 100644
index 0000000000..4ae42c69c6
--- /dev/null
+++ b/assets/icons/flags/PA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PE.svg b/assets/icons/flags/PE.svg
new file mode 100644
index 0000000000..1abe3b2878
--- /dev/null
+++ b/assets/icons/flags/PE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PF.svg b/assets/icons/flags/PF.svg
new file mode 100644
index 0000000000..64d6dbb477
--- /dev/null
+++ b/assets/icons/flags/PF.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PG.svg b/assets/icons/flags/PG.svg
new file mode 100644
index 0000000000..d8e60b58c8
--- /dev/null
+++ b/assets/icons/flags/PG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PH.svg b/assets/icons/flags/PH.svg
new file mode 100644
index 0000000000..adbb119660
--- /dev/null
+++ b/assets/icons/flags/PH.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PK.svg b/assets/icons/flags/PK.svg
new file mode 100644
index 0000000000..07049f36da
--- /dev/null
+++ b/assets/icons/flags/PK.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PL.svg b/assets/icons/flags/PL.svg
new file mode 100644
index 0000000000..3a7b14b75d
--- /dev/null
+++ b/assets/icons/flags/PL.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PM.svg b/assets/icons/flags/PM.svg
new file mode 100644
index 0000000000..b5badd1cac
--- /dev/null
+++ b/assets/icons/flags/PM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PN.svg b/assets/icons/flags/PN.svg
new file mode 100644
index 0000000000..a03859e335
--- /dev/null
+++ b/assets/icons/flags/PN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PR.svg b/assets/icons/flags/PR.svg
new file mode 100644
index 0000000000..f5c2446689
--- /dev/null
+++ b/assets/icons/flags/PR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PS.svg b/assets/icons/flags/PS.svg
new file mode 100644
index 0000000000..0c8ed3a255
--- /dev/null
+++ b/assets/icons/flags/PS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PT.svg b/assets/icons/flags/PT.svg
new file mode 100644
index 0000000000..c51521b273
--- /dev/null
+++ b/assets/icons/flags/PT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PW.svg b/assets/icons/flags/PW.svg
new file mode 100644
index 0000000000..e9835b9cff
--- /dev/null
+++ b/assets/icons/flags/PW.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/PY.svg b/assets/icons/flags/PY.svg
new file mode 100644
index 0000000000..6a69eb7fcb
--- /dev/null
+++ b/assets/icons/flags/PY.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/QA.svg b/assets/icons/flags/QA.svg
new file mode 100644
index 0000000000..f4c1fe4140
--- /dev/null
+++ b/assets/icons/flags/QA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/RE.svg b/assets/icons/flags/RE.svg
new file mode 100644
index 0000000000..b5badd1cac
--- /dev/null
+++ b/assets/icons/flags/RE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/README.md b/assets/icons/flags/README.md
new file mode 100644
index 0000000000..3a9d7499c6
--- /dev/null
+++ b/assets/icons/flags/README.md
@@ -0,0 +1,4 @@
+The flags in this directory are from the excellent [country-flag-icons](https://gitlab.com/catamphetamine/country-flag-icons).
+
+MIT License
+Copyright (c) 2020 @catamphetamine
diff --git a/assets/icons/flags/RO.svg b/assets/icons/flags/RO.svg
new file mode 100644
index 0000000000..43dbefc3c1
--- /dev/null
+++ b/assets/icons/flags/RO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/RS.svg b/assets/icons/flags/RS.svg
new file mode 100644
index 0000000000..09c7d1b290
--- /dev/null
+++ b/assets/icons/flags/RS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/RU.svg b/assets/icons/flags/RU.svg
new file mode 100644
index 0000000000..2a53b90c1a
--- /dev/null
+++ b/assets/icons/flags/RU.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/RW.svg b/assets/icons/flags/RW.svg
new file mode 100644
index 0000000000..cd0b5406b9
--- /dev/null
+++ b/assets/icons/flags/RW.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SA.svg b/assets/icons/flags/SA.svg
new file mode 100644
index 0000000000..75230d685a
--- /dev/null
+++ b/assets/icons/flags/SA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SB.svg b/assets/icons/flags/SB.svg
new file mode 100644
index 0000000000..505d976bfe
--- /dev/null
+++ b/assets/icons/flags/SB.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SC.svg b/assets/icons/flags/SC.svg
new file mode 100644
index 0000000000..04eb788548
--- /dev/null
+++ b/assets/icons/flags/SC.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SD.svg b/assets/icons/flags/SD.svg
new file mode 100644
index 0000000000..334e00697b
--- /dev/null
+++ b/assets/icons/flags/SD.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SE.svg b/assets/icons/flags/SE.svg
new file mode 100644
index 0000000000..97f1917641
--- /dev/null
+++ b/assets/icons/flags/SE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SG.svg b/assets/icons/flags/SG.svg
new file mode 100644
index 0000000000..5487a91588
--- /dev/null
+++ b/assets/icons/flags/SG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SH.svg b/assets/icons/flags/SH.svg
new file mode 100644
index 0000000000..00605856e2
--- /dev/null
+++ b/assets/icons/flags/SH.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SI.svg b/assets/icons/flags/SI.svg
new file mode 100644
index 0000000000..70fa43b0f6
--- /dev/null
+++ b/assets/icons/flags/SI.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SJ.svg b/assets/icons/flags/SJ.svg
new file mode 100644
index 0000000000..5ed30a5a46
--- /dev/null
+++ b/assets/icons/flags/SJ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SK.svg b/assets/icons/flags/SK.svg
new file mode 100644
index 0000000000..531a958391
--- /dev/null
+++ b/assets/icons/flags/SK.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SL.svg b/assets/icons/flags/SL.svg
new file mode 100644
index 0000000000..055a0e69a0
--- /dev/null
+++ b/assets/icons/flags/SL.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SM.svg b/assets/icons/flags/SM.svg
new file mode 100644
index 0000000000..edeee75916
--- /dev/null
+++ b/assets/icons/flags/SM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SN.svg b/assets/icons/flags/SN.svg
new file mode 100644
index 0000000000..4fc64ab9da
--- /dev/null
+++ b/assets/icons/flags/SN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SO.svg b/assets/icons/flags/SO.svg
new file mode 100644
index 0000000000..369d0b7b68
--- /dev/null
+++ b/assets/icons/flags/SO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SR.svg b/assets/icons/flags/SR.svg
new file mode 100644
index 0000000000..1f093d2723
--- /dev/null
+++ b/assets/icons/flags/SR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SS.svg b/assets/icons/flags/SS.svg
new file mode 100644
index 0000000000..8f8e6944f4
--- /dev/null
+++ b/assets/icons/flags/SS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/ST.svg b/assets/icons/flags/ST.svg
new file mode 100644
index 0000000000..c92c394c1f
--- /dev/null
+++ b/assets/icons/flags/ST.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SV.svg b/assets/icons/flags/SV.svg
new file mode 100644
index 0000000000..ba6209620b
--- /dev/null
+++ b/assets/icons/flags/SV.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SX.svg b/assets/icons/flags/SX.svg
new file mode 100644
index 0000000000..2baa040e03
--- /dev/null
+++ b/assets/icons/flags/SX.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SY.svg b/assets/icons/flags/SY.svg
new file mode 100644
index 0000000000..91f3d59015
--- /dev/null
+++ b/assets/icons/flags/SY.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/SZ.svg b/assets/icons/flags/SZ.svg
new file mode 100644
index 0000000000..14626636a9
--- /dev/null
+++ b/assets/icons/flags/SZ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TA.svg b/assets/icons/flags/TA.svg
new file mode 100644
index 0000000000..21c7b3596c
--- /dev/null
+++ b/assets/icons/flags/TA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TC.svg b/assets/icons/flags/TC.svg
new file mode 100644
index 0000000000..156efe3128
--- /dev/null
+++ b/assets/icons/flags/TC.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TD.svg b/assets/icons/flags/TD.svg
new file mode 100644
index 0000000000..e4cd67eed6
--- /dev/null
+++ b/assets/icons/flags/TD.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TF.svg b/assets/icons/flags/TF.svg
new file mode 100644
index 0000000000..f198ab156f
--- /dev/null
+++ b/assets/icons/flags/TF.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TG.svg b/assets/icons/flags/TG.svg
new file mode 100644
index 0000000000..38432170d0
--- /dev/null
+++ b/assets/icons/flags/TG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TH.svg b/assets/icons/flags/TH.svg
new file mode 100644
index 0000000000..9d991cca56
--- /dev/null
+++ b/assets/icons/flags/TH.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TJ.svg b/assets/icons/flags/TJ.svg
new file mode 100644
index 0000000000..63bcc0aaee
--- /dev/null
+++ b/assets/icons/flags/TJ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TK.svg b/assets/icons/flags/TK.svg
new file mode 100644
index 0000000000..e8dea76b4f
--- /dev/null
+++ b/assets/icons/flags/TK.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TL.svg b/assets/icons/flags/TL.svg
new file mode 100644
index 0000000000..f19173481c
--- /dev/null
+++ b/assets/icons/flags/TL.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TM.svg b/assets/icons/flags/TM.svg
new file mode 100644
index 0000000000..a0d0249a61
--- /dev/null
+++ b/assets/icons/flags/TM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TN.svg b/assets/icons/flags/TN.svg
new file mode 100644
index 0000000000..72c6854fcf
--- /dev/null
+++ b/assets/icons/flags/TN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TO.svg b/assets/icons/flags/TO.svg
new file mode 100644
index 0000000000..af1ea76a20
--- /dev/null
+++ b/assets/icons/flags/TO.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TR.svg b/assets/icons/flags/TR.svg
new file mode 100644
index 0000000000..2ae4cfad49
--- /dev/null
+++ b/assets/icons/flags/TR.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TT.svg b/assets/icons/flags/TT.svg
new file mode 100644
index 0000000000..5d2d956e92
--- /dev/null
+++ b/assets/icons/flags/TT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TV.svg b/assets/icons/flags/TV.svg
new file mode 100644
index 0000000000..ee26557a64
--- /dev/null
+++ b/assets/icons/flags/TV.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TW.svg b/assets/icons/flags/TW.svg
new file mode 100644
index 0000000000..7f99d2ba75
--- /dev/null
+++ b/assets/icons/flags/TW.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/TZ.svg b/assets/icons/flags/TZ.svg
new file mode 100644
index 0000000000..3c2f42d9d3
--- /dev/null
+++ b/assets/icons/flags/TZ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/UA.svg b/assets/icons/flags/UA.svg
new file mode 100644
index 0000000000..8c8986fe46
--- /dev/null
+++ b/assets/icons/flags/UA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/UG.svg b/assets/icons/flags/UG.svg
new file mode 100644
index 0000000000..8ec2ec68f8
--- /dev/null
+++ b/assets/icons/flags/UG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/UM.svg b/assets/icons/flags/UM.svg
new file mode 100644
index 0000000000..c8dc4669e8
--- /dev/null
+++ b/assets/icons/flags/UM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/US.svg b/assets/icons/flags/US.svg
new file mode 100644
index 0000000000..c8dc4669e8
--- /dev/null
+++ b/assets/icons/flags/US.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/UY.svg b/assets/icons/flags/UY.svg
new file mode 100644
index 0000000000..42e38de43e
--- /dev/null
+++ b/assets/icons/flags/UY.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/UZ.svg b/assets/icons/flags/UZ.svg
new file mode 100644
index 0000000000..1b18a9335b
--- /dev/null
+++ b/assets/icons/flags/UZ.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/VA.svg b/assets/icons/flags/VA.svg
new file mode 100644
index 0000000000..8682f982c8
--- /dev/null
+++ b/assets/icons/flags/VA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/VC.svg b/assets/icons/flags/VC.svg
new file mode 100644
index 0000000000..23d26b7f2e
--- /dev/null
+++ b/assets/icons/flags/VC.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/VE.svg b/assets/icons/flags/VE.svg
new file mode 100644
index 0000000000..3a505c656e
--- /dev/null
+++ b/assets/icons/flags/VE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/VG.svg b/assets/icons/flags/VG.svg
new file mode 100644
index 0000000000..160681b53d
--- /dev/null
+++ b/assets/icons/flags/VG.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/VI.svg b/assets/icons/flags/VI.svg
new file mode 100644
index 0000000000..177603428d
--- /dev/null
+++ b/assets/icons/flags/VI.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/VN.svg b/assets/icons/flags/VN.svg
new file mode 100644
index 0000000000..7d2c0cdf53
--- /dev/null
+++ b/assets/icons/flags/VN.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/VU.svg b/assets/icons/flags/VU.svg
new file mode 100644
index 0000000000..4936535a09
--- /dev/null
+++ b/assets/icons/flags/VU.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/WF.svg b/assets/icons/flags/WF.svg
new file mode 100644
index 0000000000..f537338379
--- /dev/null
+++ b/assets/icons/flags/WF.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/WS.svg b/assets/icons/flags/WS.svg
new file mode 100644
index 0000000000..516afd881a
--- /dev/null
+++ b/assets/icons/flags/WS.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/XK.svg b/assets/icons/flags/XK.svg
new file mode 100644
index 0000000000..913166f1a2
--- /dev/null
+++ b/assets/icons/flags/XK.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/YE.svg b/assets/icons/flags/YE.svg
new file mode 100644
index 0000000000..782127b1cd
--- /dev/null
+++ b/assets/icons/flags/YE.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/YT.svg b/assets/icons/flags/YT.svg
new file mode 100644
index 0000000000..2baa22a60f
--- /dev/null
+++ b/assets/icons/flags/YT.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/ZA.svg b/assets/icons/flags/ZA.svg
new file mode 100644
index 0000000000..3756770441
--- /dev/null
+++ b/assets/icons/flags/ZA.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/ZM.svg b/assets/icons/flags/ZM.svg
new file mode 100644
index 0000000000..fd3077c16c
--- /dev/null
+++ b/assets/icons/flags/ZM.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flags/ZW.svg b/assets/icons/flags/ZW.svg
new file mode 100644
index 0000000000..4a8509b4ab
--- /dev/null
+++ b/assets/icons/flags/ZW.svg
@@ -0,0 +1 @@
+
diff --git a/package.json b/package.json
index 4d7e1d8cf8..e26f1645b2 100644
--- a/package.json
+++ b/package.json
@@ -83,9 +83,10 @@
"@expo/webpack-config": "^19.0.1",
"@floating-ui/dom": "^1.6.3",
"@floating-ui/react-dom": "^2.0.8",
- "@formatjs/intl-locale": "^4.2.8",
- "@formatjs/intl-numberformat": "^8.15.1",
- "@formatjs/intl-pluralrules": "^5.4.1",
+ "@formatjs/intl-displaynames": "^6.8.13",
+ "@formatjs/intl-locale": "^4.2.13",
+ "@formatjs/intl-numberformat": "^8.15.6",
+ "@formatjs/intl-pluralrules": "^5.4.6",
"@fortawesome/fontawesome-svg-core": "^6.1.1",
"@fortawesome/free-regular-svg-icons": "^6.1.1",
"@fortawesome/free-solid-svg-icons": "^6.1.1",
diff --git a/src/components/AppLanguageDropdown.tsx b/src/components/AppLanguageDropdown.tsx
index 7ad0928778..a57794a2ef 100644
--- a/src/components/AppLanguageDropdown.tsx
+++ b/src/components/AppLanguageDropdown.tsx
@@ -66,6 +66,7 @@ export function AppLanguageDropdown() {
)}
(
diff --git a/src/components/Button.tsx b/src/components/Button.tsx
index 810442fea0..717985d475 100644
--- a/src/components/Button.tsx
+++ b/src/components/Button.tsx
@@ -105,7 +105,8 @@ export type ButtonProps = Pick<
PressableComponent?: React.ComponentType
}
-export type ButtonTextProps = TextProps & VariantProps & {disabled?: boolean}
+export type ButtonTextProps = TextProps &
+ VariantProps & {disabled?: boolean; emoji?: boolean}
const Context = React.createContext({
hovered: false,
diff --git a/src/components/InternationalPhoneCodeSelect.tsx b/src/components/InternationalPhoneCodeSelect.tsx
new file mode 100644
index 0000000000..f42f4a21a3
--- /dev/null
+++ b/src/components/InternationalPhoneCodeSelect.tsx
@@ -0,0 +1,116 @@
+import {Fragment, useMemo} from 'react'
+import {Image} from 'expo-image'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {
+ getDefaultCountry,
+ INTERNATIONAL_TELEPHONE_CODES,
+} from '#/lib/international-telephone-codes'
+import {regionName} from '#/locale/helpers'
+import {isWeb} from '#/platform/detection'
+import {atoms as a, web} from '#/alf'
+import * as Select from '#/components/Select'
+import {useGeolocation} from '#/geolocation'
+
+/**
+ * Country picker for a phone number input
+ *
+ * Pro tip: you can use `location?.countryCode` from `useGeolocationStatus()`
+ * to set a default value.
+ */
+export function InternationalPhoneCodeSelect({
+ value,
+ onChange,
+}: {
+ value?: string
+ onChange: (value: string) => void
+}) {
+ const {_, i18n} = useLingui()
+ const location = useGeolocation()
+
+ const defaultCountry = useMemo(() => {
+ return getDefaultCountry(location)
+ }, [location])
+
+ const items = useMemo(() => {
+ return (
+ Object.entries(INTERNATIONAL_TELEPHONE_CODES)
+ .map(([value, {code, unicodeFlag, svgFlag}]) => {
+ const name = regionName(value, i18n.locale)
+
+ return {
+ value,
+ name,
+ code,
+ label: `${name} ${code}`,
+ unicodeFlag,
+ svgFlag,
+ }
+ })
+ // boost the default value to the top, then sort by name
+ .sort((a, b) => {
+ if (a.value === defaultCountry) return -1
+ if (b.value === defaultCountry) return 1
+ return a.name.localeCompare(b.name)
+ })
+ )
+ }, [i18n.locale, defaultCountry])
+
+ const selected = useMemo(() => {
+ return items.find(item => item.value === value)
+ }, [value, items])
+
+ return (
+
+
+
+ {selected => (
+ <>
+
+ {selected.code}
+ >
+ )}
+
+
+
+ (
+
+
+
+
+ {isWeb ? : item.unicodeFlag + ' '}
+ {item.name}
+
+
+ {' '}
+ {item.code}
+
+
+ {item.value === defaultCountry && }
+
+ )}
+ />
+
+ )
+}
+
+function Flag({unicodeFlag, svgFlag}: {unicodeFlag: string; svgFlag: any}) {
+ if (isWeb) {
+ return (
+
+ )
+ }
+ return unicodeFlag + ' '
+}
diff --git a/src/components/LanguageSelect.tsx b/src/components/LanguageSelect.tsx
index 2ad3949aee..6b466609f4 100644
--- a/src/components/LanguageSelect.tsx
+++ b/src/components/LanguageSelect.tsx
@@ -13,10 +13,12 @@ export function LanguageSelect({
label: l.name,
value: l.code2,
})),
+ label,
}: {
value?: string
onChange: (value: string) => void
items?: {label: string; value: string}[]
+ label?: string
}) {
const {_} = useLingui()
@@ -37,6 +39,7 @@ export function LanguageSelect({
(
diff --git a/src/components/Select/index.tsx b/src/components/Select/index.tsx
index a723e52370..8d4412be2a 100644
--- a/src/components/Select/index.tsx
+++ b/src/components/Select/index.tsx
@@ -7,7 +7,7 @@ import {
useState,
} from 'react'
import {View} from 'react-native'
-import {msg, Trans} from '@lingui/macro'
+import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {useTheme} from '#/alf'
@@ -15,9 +15,9 @@ import {atoms as a} from '#/alf'
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
import * as Dialog from '#/components/Dialog'
import {useInteractionState} from '#/components/hooks/useInteractionState'
-import {Check_Stroke2_Corner0_Rounded as CheckIcon} from '#/components/icons/Check'
import {ChevronTopBottom_Stroke2_Corner0_Rounded as ChevronUpDownIcon} from '#/components/icons/Chevron'
import {Text} from '#/components/Typography'
+import {BaseRadio} from '../forms/Toggle'
import {
type ContentProps,
type IconProps,
@@ -122,10 +122,12 @@ export function ValueText({
const t = useTheme()
let text = value && children(value)
- if (typeof text !== 'string') text = placeholder
+ if (!text) text = placeholder
return (
- {text}
+
+ {text}
+
)
}
@@ -162,15 +164,14 @@ export function Content({
}
function ContentInner({
+ label,
items,
renderItem,
valueExtractor,
...context
}: ContentProps & ContextType) {
- const control = Dialog.useDialogContext()
-
const {_} = useLingui()
- const [headerHeight, setHeaderHeight] = useState(50)
+ const [headerHeight, setHeaderHeight] = useState(61)
const render = useCallback(
({item, index}: {item: T; index: number}) => {
@@ -179,33 +180,26 @@ function ContentInner({
[renderItem, context.value],
)
- const doneButton = useCallback(
- () => (
-
- ),
- [control, _],
- )
-
return (
setHeaderHeight(evt.nativeEvent.layout.height)}
- style={[a.absolute, a.top_0, a.left_0, a.right_0, a.z_10]}>
-
- Select an option
+ style={[
+ a.absolute,
+ a.top_0,
+ a.left_0,
+ a.right_0,
+ a.z_10,
+ a.pt_3xl,
+ a.pb_sm,
+ a.border_b_0,
+ ]}>
+
+ {label ?? _(msg`Select an option`)}
+
{children}
@@ -273,20 +268,48 @@ export function Item({children, value, label, style}: ItemProps) {
)
}
-export function ItemText({children}: ItemTextProps) {
+export function ItemText({children, style, emoji}: ItemTextProps) {
const {selected} = useItemContext()
- const t = useTheme()
- // eslint-disable-next-line bsky-internal/avoid-unwrapped-text
return (
-
- {children}
-
+
+ {children}
+
)
}
-export function ItemIndicator({icon: Icon = CheckIcon}: ItemIndicatorProps) {
- const {selected} = useItemContext()
+export function ItemIndicator({icon: Icon}: ItemIndicatorProps) {
+ const {selected, focused, hovered} = useItemContext()
- return {selected && }
+ if (Icon) {
+ return {selected && }
+ }
+
+ return (
+
+ )
+}
+
+export function Separator() {
+ const t = useTheme()
+
+ return (
+
+ )
}
diff --git a/src/components/Select/index.web.tsx b/src/components/Select/index.web.tsx
index 995f9d412e..23a0279914 100644
--- a/src/components/Select/index.web.tsx
+++ b/src/components/Select/index.web.tsx
@@ -2,7 +2,8 @@ import {createContext, forwardRef, Fragment, useContext, useMemo} from 'react'
import {View} from 'react-native'
import {Select as RadixSelect} from 'radix-ui'
-import {flatten, useTheme} from '#/alf'
+import {useA11y} from '#/state/a11y'
+import {flatten, useTheme, web} from '#/alf'
import {atoms as a} from '#/alf'
import {useInteractionState} from '#/components/hooks/useInteractionState'
import {Check_Stroke2_Corner0_Rounded as CheckIcon} from '#/components/icons/Check'
@@ -16,6 +17,7 @@ import {
type IconProps,
type ItemIndicatorProps,
type ItemProps,
+ type ItemTextProps,
type RadixPassThroughTriggerProps,
type RootProps,
type TriggerProps,
@@ -97,7 +99,6 @@ export function Trigger({children, label}: TriggerProps) {
a.flex,
a.relative,
t.atoms.bg_contrast_50,
- a.w_full,
a.align_center,
a.gap_sm,
a.justify_between,
@@ -121,10 +122,21 @@ export function Trigger({children, label}: TriggerProps) {
}
}
-export function ValueText({children: _, style, ...props}: ValueProps) {
+export function ValueText({
+ children,
+ webOverrideValue,
+ style,
+ ...props
+}: ValueProps) {
+ let content
+
+ if (webOverrideValue && children) {
+ content = children(webOverrideValue)
+ }
+
return (
-
+ {content}
)
}
@@ -145,6 +157,7 @@ export function Content({
}: ContentProps) {
const t = useTheme()
const selectedValue = useContext(SelectedValueContext)
+ const {reduceMotionEnabled} = useA11y()
const scrollBtnStyles: React.CSSProperties[] = [
a.absolute,
@@ -186,8 +199,11 @@ export function Content({
+ className="radix-select-content"
+ // prevent the keyboard shortcut for opening the composer
+ onKeyDown={evt => evt.stopPropagation()}>
({
t.atoms.border_contrast_low,
a.rounded_sm,
a.overflow_hidden,
+ !reduceMotionEnabled && a.zoom_fade_in,
]}>
@@ -261,7 +278,7 @@ export function Item({ref, value, style, children}: ItemProps) {
t.atoms.text,
a.relative,
a.flex,
- {minHeight: 25, paddingLeft: 30, paddingRight: 35},
+ {minHeight: 25, paddingLeft: 30, paddingRight: 8},
a.user_select_none,
a.align_center,
a.rounded_xs,
@@ -278,7 +295,15 @@ export function Item({ref, value, style, children}: ItemProps) {
)
}
-export const ItemText = RadixSelect.ItemText
+export const ItemText = function ItemText({children, style}: ItemTextProps) {
+ return (
+
+
+ {children}
+
+
+ )
+}
export function ItemIndicator({icon: Icon = CheckIcon}: ItemIndicatorProps) {
return (
@@ -294,3 +319,20 @@ export function ItemIndicator({icon: Icon = CheckIcon}: ItemIndicatorProps) {
)
}
+
+export function Separator() {
+ const t = useTheme()
+
+ return (
+
+ )
+}
diff --git a/src/components/Select/types.ts b/src/components/Select/types.ts
index 0e58c197be..b1288caceb 100644
--- a/src/components/Select/types.ts
+++ b/src/components/Select/types.ts
@@ -123,9 +123,16 @@ export type ValueProps = {
/**
* Only needed for native. Extracts the label from an item. Defaults to `item => item.label`
*/
- children?: (value: any) => string
+ children?: (value: any) => React.ReactNode
placeholder?: string
style?: StyleProp
+ /**
+ * By default, web just extracts the component from inside the dropdown and portals it in here.
+ * If you want to override this, pass a value that will then be rendered via `children(value)`
+ *
+ * @platform web
+ */
+ webOverrideValue?: any
}
/*
@@ -137,6 +144,12 @@ export type ValueProps = {
export type IconProps = TextStyleProp
export type ContentProps = {
+ /**
+ * Label at the top of the sheet on native.
+ *
+ * @default "Select an option"
+ */
+ label?: string
/**
* Items to render. Recommended to be in the form {value: string, label: string} - if not,
* you need to provide a `valueExtractor` function to extract the value from an item and
@@ -180,6 +193,8 @@ export type ItemProps = {
export type ItemTextProps = {
children: React.ReactNode
+ style?: StyleProp
+ emoji?: boolean
}
export type ItemIndicatorProps = {
diff --git a/src/components/ageAssurance/AgeAssuranceInitDialog.tsx b/src/components/ageAssurance/AgeAssuranceInitDialog.tsx
index bce3bdc0f8..14f34f8163 100644
--- a/src/components/ageAssurance/AgeAssuranceInitDialog.tsx
+++ b/src/components/ageAssurance/AgeAssuranceInitDialog.tsx
@@ -289,6 +289,7 @@ function Inner() {
Your preferred language
{
setLanguage(value)
diff --git a/src/components/forms/Toggle/index.tsx b/src/components/forms/Toggle/index.tsx
index 60fa50478a..819008f34f 100644
--- a/src/components/forms/Toggle/index.tsx
+++ b/src/components/forms/Toggle/index.tsx
@@ -503,9 +503,23 @@ export function Switch() {
}
export function Radio() {
+ const props = useContext(ItemContext)
+
+ return
+}
+
+export function BaseRadio({
+ hovered,
+ focused,
+ selected,
+ disabled,
+ isInvalid,
+}: Pick<
+ ItemState,
+ 'hovered' | 'focused' | 'selected' | 'disabled' | 'isInvalid'
+>) {
const t = useTheme()
- const {selected, hovered, focused, disabled, isInvalid} =
- useContext(ItemContext)
+
const {baseStyles, baseHoverStyles, indicatorStyles} =
createSharedToggleStyles({
theme: t,
@@ -515,6 +529,7 @@ export function Radio() {
disabled,
isInvalid,
})
+
return (
(
@@ -133,6 +134,7 @@ export function LanguageSettingsScreen({}: Props) {
(
diff --git a/src/view/screens/Storybook/Forms.tsx b/src/view/screens/Storybook/Forms.tsx
index a29aa70ab7..3c8de8db95 100644
--- a/src/view/screens/Storybook/Forms.tsx
+++ b/src/view/screens/Storybook/Forms.tsx
@@ -1,6 +1,7 @@
import React from 'react'
import {type TextInput, View} from 'react-native'
+import {getDefaultCountry} from '#/lib/international-telephone-codes'
import {atoms as a} from '#/alf'
import {Button, ButtonText} from '#/components/Button'
import {DateField, LabelText} from '#/components/forms/DateField'
@@ -9,7 +10,9 @@ import * as TextField from '#/components/forms/TextField'
import * as Toggle from '#/components/forms/Toggle'
import * as ToggleButton from '#/components/forms/ToggleButton'
import {Globe_Stroke2_Corner0_Rounded as Globe} from '#/components/icons/Globe'
+import {InternationalPhoneCodeSelect} from '#/components/InternationalPhoneCodeSelect'
import {H1, H3} from '#/components/Typography'
+import {useGeolocation} from '#/geolocation'
export function Forms() {
const [toggleGroupAValues, setToggleGroupAValues] = React.useState(['a'])
@@ -23,6 +26,11 @@ export function Forms() {
const [value, setValue] = React.useState('')
const [date, setDate] = React.useState('2001-01-01')
+ const location = useGeolocation()
+ const [telCode, setTelCode] = React.useState(() =>
+ getDefaultCountry(location),
+ )
+
const inputRef = React.useRef(null)
return (
@@ -119,6 +127,20 @@ export function Forms() {
label="Input"
/>
+
+ InternationalPhoneCodeSelect
+
+
+
+
+
+
+
+
+
diff --git a/yarn.lock b/yarn.lock
index e1d8d9871f..8082783b7f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4664,74 +4664,83 @@
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2"
integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==
-"@formatjs/ecma402-abstract@2.3.1":
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.1.tgz#cdeb3ffe1aeea9c4284b85b7e37e8e8615314c39"
- integrity sha512-Ip9uV+/MpLXWRk03U/GzeJMuPeOXpJBSB5V1tjA6kJhvqssye5J5LoYLc7Z5IAHb7nR62sRoguzrFiVCP/hnzw==
+"@formatjs/ecma402-abstract@2.3.6":
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz#d6ca9d3579054fe1e1a0a0b5e872e0d64922e4e1"
+ integrity sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==
dependencies:
- "@formatjs/fast-memoize" "2.2.5"
- "@formatjs/intl-localematcher" "0.5.9"
- decimal.js "10"
- tslib "2"
+ "@formatjs/fast-memoize" "2.2.7"
+ "@formatjs/intl-localematcher" "0.6.2"
+ decimal.js "^10.4.3"
+ tslib "^2.8.0"
-"@formatjs/fast-memoize@2.2.5":
- version "2.2.5"
- resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.5.tgz#54a4a1793d773b72c372d3dcab3595149aee7880"
- integrity sha512-6PoewUMrrcqxSoBXAOJDiW1m+AmkrAj0RiXnOMD59GRaswjXhm3MDhgepXPBgonc09oSirAJTsAggzAGQf6A6g==
+"@formatjs/fast-memoize@2.2.7":
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz#707f9ddaeb522a32f6715bb7950b0831f4cc7b15"
+ integrity sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==
dependencies:
- tslib "2"
+ tslib "^2.8.0"
-"@formatjs/intl-enumerator@1.8.7":
- version "1.8.7"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-enumerator/-/intl-enumerator-1.8.7.tgz#3f004753333f80cc468ae34046bd8416772a0412"
- integrity sha512-qd7UlWUivKRJ073btssUqMSqzWW9yN3Ki6EqfCZ6uvIv19mONelE5q3GMmdPWBEjgqZikBzBE2qPTqfrgJ4TCA==
+"@formatjs/intl-displaynames@^6.8.13":
+ version "6.8.13"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.8.13.tgz#5e85980b40fbaa0b81e504608e33db6e16a3891e"
+ integrity sha512-VbY7BdYJX5eURVKLk2grndUQtnbCLNbcJId/Sb/PsX7fWXiqWvg7qt/mecVHRzqoSEoGCQToKDxzpJj8RC0s3g==
dependencies:
- "@formatjs/ecma402-abstract" "2.3.1"
- tslib "2"
+ "@formatjs/ecma402-abstract" "2.3.6"
+ "@formatjs/intl-localematcher" "0.6.2"
+ tslib "^2.8.0"
-"@formatjs/intl-getcanonicallocales@2.5.4":
- version "2.5.4"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.5.4.tgz#9b843e1891dea83405c51eb3d00c42ef9cb6cab9"
- integrity sha512-vSDOsAcc3U+Kl/0b3de8wCQkb3W30H8LUuslyz67wTAHOPSQhPimZyquhwxXpJR+K5yy9CkzTgk5YE5kFT+PFg==
+"@formatjs/intl-enumerator@1.8.12":
+ version "1.8.12"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-enumerator/-/intl-enumerator-1.8.12.tgz#8c94a9bff855fb942a95a4c93b5bdeb1a8f54007"
+ integrity sha512-rT2hnyQ0q6RDG1jISMH+MP6wlHQLUC81C0BeYEzabJb48S4tU2HGCPUxsOqMa3vDAUmpnz9Kw5vYTD5hTkOVgg==
dependencies:
- tslib "2"
+ "@formatjs/ecma402-abstract" "2.3.6"
+ tslib "^2.8.0"
-"@formatjs/intl-locale@^4.2.8":
- version "4.2.8"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-locale/-/intl-locale-4.2.8.tgz#571d44e92b6eb43b7410b37f25e280ec384a32cf"
- integrity sha512-6RY/npeA0kyoZ8QW0JRAT+VBAFBT6+4ZVeGkKCNIDjbLX2LPuU73emGR35Mbwcc6pquVFrxyo6mXxKNzib0kEA==
+"@formatjs/intl-getcanonicallocales@2.5.6":
+ version "2.5.6"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.5.6.tgz#d4a8e13dad31f83c142746b423462dcbdf839503"
+ integrity sha512-CnBbc4St61RL06gDXlCZG08Gt41uiySgsdZNBExh8/c0FBONJCrAlQ9FsyalUdq9ze0nCeknJtMmO8JnB9xHgQ==
dependencies:
- "@formatjs/ecma402-abstract" "2.3.1"
- "@formatjs/intl-enumerator" "1.8.7"
- "@formatjs/intl-getcanonicallocales" "2.5.4"
- tslib "2"
+ tslib "^2.8.0"
-"@formatjs/intl-localematcher@0.5.9":
- version "0.5.9"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.9.tgz#43c6ee22be85b83340bcb09bdfed53657a2720db"
- integrity sha512-8zkGu/sv5euxbjfZ/xmklqLyDGQSxsLqg8XOq88JW3cmJtzhCP8EtSJXlaKZnVO4beEaoiT9wj4eIoCQ9smwxA==
+"@formatjs/intl-locale@^4.2.13":
+ version "4.2.13"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-locale/-/intl-locale-4.2.13.tgz#21d4b54ee03b75a7b7384a122510be7ee080a9c5"
+ integrity sha512-Qcs0mP9JhEPCinPfpZ5JKzOa+VYDg94TQSFZozYuqG8R+hEGUTKyoyMqB5xi5QZT/hlB0CSgeNc/0fWMGtTFXA==
dependencies:
- tslib "2"
+ "@formatjs/ecma402-abstract" "2.3.6"
+ "@formatjs/intl-enumerator" "1.8.12"
+ "@formatjs/intl-getcanonicallocales" "2.5.6"
+ tslib "^2.8.0"
-"@formatjs/intl-numberformat@^8.15.1":
- version "8.15.1"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-numberformat/-/intl-numberformat-8.15.1.tgz#b2a5b00889ed31dbef9d4e5aeee1dea3d040b068"
- integrity sha512-NIouSY50xpH/SMJrRbX1Q3hMsGyQmT5MQrta/bOYhpZda1bztOlEYZAKLytk8VGs10wkGz875602mCMhtg4/LA==
+"@formatjs/intl-localematcher@0.6.2":
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz#e9ebe0b4082d7d48e5b2d753579fb7ece4eaefea"
+ integrity sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==
dependencies:
- "@formatjs/ecma402-abstract" "2.3.1"
- "@formatjs/intl-localematcher" "0.5.9"
- decimal.js "10"
- tslib "2"
+ tslib "^2.8.0"
-"@formatjs/intl-pluralrules@^5.4.1":
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-5.4.1.tgz#1c03cd2da449e1871bb7c54ea36fec1de68b7e7e"
- integrity sha512-kKK4ixTsfKAzyJIVRiJGuw4zd18nEHXiKloYBO9VmLpxrwJTgLQHv2+1hcbxQcwbbo2uc8moUFQuyvxeGEFOfw==
+"@formatjs/intl-numberformat@^8.15.6":
+ version "8.15.6"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-numberformat/-/intl-numberformat-8.15.6.tgz#baf3a00e97887366eddfb4b9782830e06b96883f"
+ integrity sha512-htynTNKm5WOnbR521tNSMkWzX3yO6Z77qjOxvRujh5/A/UBKeoNElyuKCJltizdx3X33QNWQZC4aWjLKcccyeQ==
dependencies:
- "@formatjs/ecma402-abstract" "2.3.1"
- "@formatjs/intl-localematcher" "0.5.9"
- decimal.js "10"
- tslib "2"
+ "@formatjs/ecma402-abstract" "2.3.6"
+ "@formatjs/intl-localematcher" "0.6.2"
+ decimal.js "^10.4.3"
+ tslib "^2.8.0"
+
+"@formatjs/intl-pluralrules@^5.4.6":
+ version "5.4.6"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-5.4.6.tgz#4bd73c4e87974265a7962b6caf0d146e3310f3ad"
+ integrity sha512-2HlOq+c7KsSps829SJ3B5987coX5mzKx9NbPcNwQ07eq8FBHgB3HfMoxt5HvLsdk4oQwCjAEnocbtd+wVwZ2Kg==
+ dependencies:
+ "@formatjs/ecma402-abstract" "2.3.6"
+ "@formatjs/intl-localematcher" "0.6.2"
+ decimal.js "^10.4.3"
+ tslib "^2.8.0"
"@fortawesome/fontawesome-common-types@6.4.2":
version "6.4.2"
@@ -10209,11 +10218,16 @@ decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
-decimal.js@10, decimal.js@^10.4.2:
+decimal.js@^10.4.2:
version "10.4.3"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
+decimal.js@^10.4.3:
+ version "10.6.0"
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a"
+ integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==
+
decode-uri-component@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
@@ -19227,11 +19241,6 @@ tsconfig-paths@^3.15.0:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@2, tslib@^2.6.2, tslib@^2.8.1:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
- integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
-
tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
@@ -19242,6 +19251,11 @@ tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+tslib@^2.6.2, tslib@^2.8.0, tslib@^2.8.1:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
+ integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"