vue3-emoji-picker-2
Version:
[](https://github.com/delowardev/vue3-emoji-picker/actions/workflows/TestAutomation.yaml) [ islands flag",
"flag-cc"
],
u: "1f1e8-1f1e8"
},
{
n: [
"congo - kinshasa flag",
"flag-cd"
],
u: "1f1e8-1f1e9"
},
{
n: [
"central african republic flag",
"flag-cf"
],
u: "1f1e8-1f1eb"
},
{
n: [
"congo - brazzaville flag",
"flag-cg"
],
u: "1f1e8-1f1ec"
},
{
n: [
"switzerland flag",
"flag-ch"
],
u: "1f1e8-1f1ed"
},
{
n: [
"c\xF4te d\u2019ivoire flag",
"flag-ci"
],
u: "1f1e8-1f1ee"
},
{
n: [
"cook islands flag",
"flag-ck"
],
u: "1f1e8-1f1f0"
},
{
n: [
"chile flag",
"flag-cl"
],
u: "1f1e8-1f1f1"
},
{
n: [
"cameroon flag",
"flag-cm"
],
u: "1f1e8-1f1f2"
},
{
n: [
"china flag",
"cn",
"flag-cn"
],
u: "1f1e8-1f1f3"
},
{
n: [
"colombia flag",
"flag-co"
],
u: "1f1e8-1f1f4"
},
{
n: [
"clipperton island flag",
"flag-cp"
],
u: "1f1e8-1f1f5"
},
{
n: [
"costa rica flag",
"flag-cr"
],
u: "1f1e8-1f1f7"
},
{
n: [
"cuba flag",
"flag-cu"
],
u: "1f1e8-1f1fa"
},
{
n: [
"cape verde flag",
"flag-cv"
],
u: "1f1e8-1f1fb"
},
{
n: [
"cura\xE7ao flag",
"flag-cw"
],
u: "1f1e8-1f1fc"
},
{
n: [
"christmas island flag",
"flag-cx"
],
u: "1f1e8-1f1fd"
},
{
n: [
"cyprus flag",
"flag-cy"
],
u: "1f1e8-1f1fe"
},
{
n: [
"czechia flag",
"flag-cz"
],
u: "1f1e8-1f1ff"
},
{
n: [
"germany flag",
"de",
"flag-de"
],
u: "1f1e9-1f1ea"
},
{
n: [
"diego garcia flag",
"flag-dg"
],
u: "1f1e9-1f1ec"
},
{
n: [
"djibouti flag",
"flag-dj"
],
u: "1f1e9-1f1ef"
},
{
n: [
"denmark flag",
"flag-dk"
],
u: "1f1e9-1f1f0"
},
{
n: [
"dominica flag",
"flag-dm"
],
u: "1f1e9-1f1f2"
},
{
n: [
"dominican republic flag",
"flag-do"
],
u: "1f1e9-1f1f4"
},
{
n: [
"algeria flag",
"flag-dz"
],
u: "1f1e9-1f1ff"
},
{
n: [
"ceuta & melilla flag",
"flag-ea"
],
u: "1f1ea-1f1e6"
},
{
n: [
"ecuador flag",
"flag-ec"
],
u: "1f1ea-1f1e8"
},
{
n: [
"estonia flag",
"flag-ee"
],
u: "1f1ea-1f1ea"
},
{
n: [
"egypt flag",
"flag-eg"
],
u: "1f1ea-1f1ec"
},
{
n: [
"western sahara flag",
"flag-eh"
],
u: "1f1ea-1f1ed"
},
{
n: [
"eritrea flag",
"flag-er"
],
u: "1f1ea-1f1f7"
},
{
n: [
"spain flag",
"es",
"flag-es"
],
u: "1f1ea-1f1f8"
},
{
n: [
"ethiopia flag",
"flag-et"
],
u: "1f1ea-1f1f9"
},
{
n: [
"european union flag",
"flag-eu"
],
u: "1f1ea-1f1fa"
},
{
n: [
"finland flag",
"flag-fi"
],
u: "1f1eb-1f1ee"
},
{
n: [
"fiji flag",
"flag-fj"
],
u: "1f1eb-1f1ef"
},
{
n: [
"falkland islands flag",
"flag-fk"
],
u: "1f1eb-1f1f0"
},
{
n: [
"micronesia flag",
"flag-fm"
],
u: "1f1eb-1f1f2"
},
{
n: [
"faroe islands flag",
"flag-fo"
],
u: "1f1eb-1f1f4"
},
{
n: [
"france flag",
"fr",
"flag-fr"
],
u: "1f1eb-1f1f7"
},
{
n: [
"gabon flag",
"flag-ga"
],
u: "1f1ec-1f1e6"
},
{
n: [
"united kingdom flag",
"gb",
"uk",
"flag-gb"
],
u: "1f1ec-1f1e7"
},
{
n: [
"grenada flag",
"flag-gd"
],
u: "1f1ec-1f1e9"
},
{
n: [
"georgia flag",
"flag-ge"
],
u: "1f1ec-1f1ea"
},
{
n: [
"french guiana flag",
"flag-gf"
],
u: "1f1ec-1f1eb"
},
{
n: [
"guernsey flag",
"flag-gg"
],
u: "1f1ec-1f1ec"
},
{
n: [
"ghana flag",
"flag-gh"
],
u: "1f1ec-1f1ed"
},
{
n: [
"gibraltar flag",
"flag-gi"
],
u: "1f1ec-1f1ee"
},
{
n: [
"greenland flag",
"flag-gl"
],
u: "1f1ec-1f1f1"
},
{
n: [
"gambia flag",
"flag-gm"
],
u: "1f1ec-1f1f2"
},
{
n: [
"guinea flag",
"flag-gn"
],
u: "1f1ec-1f1f3"
},
{
n: [
"guadeloupe flag",
"flag-gp"
],
u: "1f1ec-1f1f5"
},
{
n: [
"equatorial guinea flag",
"flag-gq"
],
u: "1f1ec-1f1f6"
},
{
n: [
"greece flag",
"flag-gr"
],
u: "1f1ec-1f1f7"
},
{
n: [
"south georgia & south sandwich islands flag",
"flag-gs"
],
u: "1f1ec-1f1f8"
},
{
n: [
"guatemala flag",
"flag-gt"
],
u: "1f1ec-1f1f9"
},
{
n: [
"guam flag",
"flag-gu"
],
u: "1f1ec-1f1fa"
},
{
n: [
"guinea-bissau flag",
"flag-gw"
],
u: "1f1ec-1f1fc"
},
{
n: [
"guyana flag",
"flag-gy"
],
u: "1f1ec-1f1fe"
},
{
n: [
"hong kong sar china flag",
"flag-hk"
],
u: "1f1ed-1f1f0"
},
{
n: [
"heard & mcdonald islands flag",
"flag-hm"
],
u: "1f1ed-1f1f2"
},
{
n: [
"honduras flag",
"flag-hn"
],
u: "1f1ed-1f1f3"
},
{
n: [
"croatia flag",
"flag-hr"
],
u: "1f1ed-1f1f7"
},
{
n: [
"haiti flag",
"flag-ht"
],
u: "1f1ed-1f1f9"
},
{
n: [
"hungary flag",
"flag-hu"
],
u: "1f1ed-1f1fa"
},
{
n: [
"canary islands flag",
"flag-ic"
],
u: "1f1ee-1f1e8"
},
{
n: [
"indonesia flag",
"flag-id"
],
u: "1f1ee-1f1e9"
},
{
n: [
"ireland flag",
"flag-ie"
],
u: "1f1ee-1f1ea"
},
{
n: [
"israel flag",
"flag-il"
],
u: "1f1ee-1f1f1"
},
{
n: [
"isle of man flag",
"flag-im"
],
u: "1f1ee-1f1f2"
},
{
n: [
"india flag",
"flag-in"
],
u: "1f1ee-1f1f3"
},
{
n: [
"british indian ocean territory flag",
"flag-io"
],
u: "1f1ee-1f1f4"
},
{
n: [
"iraq flag",
"flag-iq"
],
u: "1f1ee-1f1f6"
},
{
n: [
"iran flag",
"flag-ir"
],
u: "1f1ee-1f1f7"
},
{
n: [
"iceland flag",
"flag-is"
],
u: "1f1ee-1f1f8"
},
{
n: [
"italy flag",
"it",
"flag-it"
],
u: "1f1ee-1f1f9"
},
{
n: [
"jersey flag",
"flag-je"
],
u: "1f1ef-1f1ea"
},
{
n: [
"jamaica flag",
"flag-jm"
],
u: "1f1ef-1f1f2"
},
{
n: [
"jordan flag",
"flag-jo"
],
u: "1f1ef-1f1f4"
},
{
n: [
"japan flag",
"jp",
"flag-jp"
],
u: "1f1ef-1f1f5"
},
{
n: [
"kenya flag",
"flag-ke"
],
u: "1f1f0-1f1ea"
},
{
n: [
"kyrgyzstan flag",
"flag-kg"
],
u: "1f1f0-1f1ec"
},
{
n: [
"cambodia flag",
"flag-kh"
],
u: "1f1f0-1f1ed"
},
{
n: [
"kiribati flag",
"flag-ki"
],
u: "1f1f0-1f1ee"
},
{
n: [
"comoros flag",
"flag-km"
],
u: "1f1f0-1f1f2"
},
{
n: [
"st. kitts & nevis flag",
"flag-kn"
],
u: "1f1f0-1f1f3"
},
{
n: [
"north korea flag",
"flag-kp"
],
u: "1f1f0-1f1f5"
},
{
n: [
"south korea flag",
"kr",
"flag-kr"
],
u: "1f1f0-1f1f7"
},
{
n: [
"kuwait flag",
"flag-kw"
],
u: "1f1f0-1f1fc"
},
{
n: [
"cayman islands flag",
"flag-ky"
],
u: "1f1f0-1f1fe"
},
{
n: [
"kazakhstan flag",
"flag-kz"
],
u: "1f1f0-1f1ff"
},
{
n: [
"laos flag",
"flag-la"
],
u: "1f1f1-1f1e6"
},
{
n: [
"lebanon flag",
"flag-lb"
],
u: "1f1f1-1f1e7"
},
{
n: [
"st. lucia flag",
"flag-lc"
],
u: "1f1f1-1f1e8"
},
{
n: [
"liechtenstein flag",
"flag-li"
],
u: "1f1f1-1f1ee"
},
{
n: [
"sri lanka flag",
"flag-lk"
],
u: "1f1f1-1f1f0"
},
{
n: [
"liberia flag",
"flag-lr"
],
u: "1f1f1-1f1f7"
},
{
n: [
"lesotho flag",
"flag-ls"
],
u: "1f1f1-1f1f8"
},
{
n: [
"lithuania flag",
"flag-lt"
],
u: "1f1f1-1f1f9"
},
{
n: [
"luxembourg flag",
"flag-lu"
],
u: "1f1f1-1f1fa"
},
{
n: [
"latvia flag",
"flag-lv"
],
u: "1f1f1-1f1fb"
},
{
n: [
"libya flag",
"flag-ly"
],
u: "1f1f1-1f1fe"
},
{
n: [
"morocco flag",
"flag-ma"
],
u: "1f1f2-1f1e6"
},
{
n: [
"monaco flag",
"flag-mc"
],
u: "1f1f2-1f1e8"
},
{
n: [
"moldova flag",
"flag-md"
],
u: "1f1f2-1f1e9"
},
{
n: [
"montenegro flag",
"flag-me"
],
u: "1f1f2-1f1ea"
},
{
n: [
"st. martin flag",
"flag-mf"
],
u: "1f1f2-1f1eb"
},
{
n: [
"madagascar flag",
"flag-mg"
],
u: "1f1f2-1f1ec"
},
{
n: [
"marshall islands flag",
"flag-mh"
],
u: "1f1f2-1f1ed"
},
{
n: [
"macedonia flag",
"flag-mk"
],
u: "1f1f2-1f1f0"
},
{
n: [
"mali flag",
"flag-ml"
],
u: "1f1f2-1f1f1"
},
{
n: [
"myanmar (burma) flag",
"flag-mm"
],
u: "1f1f2-1f1f2"
},
{
n: [
"mongolia flag",
"flag-mn"
],
u: "1f1f2-1f1f3"
},
{
n: [
"macau sar china flag",
"flag-mo"
],
u: "1f1f2-1f1f4"
},
{
n: [
"northern mariana islands flag",
"flag-mp"
],
u: "1f1f2-1f1f5"
},
{
n: [
"martinique flag",
"flag-mq"
],
u: "1f1f2-1f1f6"
},
{
n: [
"mauritania flag",
"flag-mr"
],
u: "1f1f2-1f1f7"
},
{
n: [
"montserrat flag",
"flag-ms"
],
u: "1f1f2-1f1f8"
},
{
n: [
"malta flag",
"flag-mt"
],
u: "1f1f2-1f1f9"
},
{
n: [
"mauritius flag",
"flag-mu"
],
u: "1f1f2-1f1fa"
},
{
n: [
"maldives flag",
"flag-mv"
],
u: "1f1f2-1f1fb"
},
{
n: [
"malawi flag",
"flag-mw"
],
u: "1f1f2-1f1fc"
},
{
n: [
"mexico flag",
"flag-mx"
],
u: "1f1f2-1f1fd"
},
{
n: [
"malaysia flag",
"flag-my"
],
u: "1f1f2-1f1fe"
},
{
n: [
"mozambique flag",
"flag-mz"
],
u: "1f1f2-1f1ff"
},
{
n: [
"namibia flag",
"flag-na"
],
u: "1f1f3-1f1e6"
},
{
n: [
"new caledonia flag",
"flag-nc"
],
u: "1f1f3-1f1e8"
},
{
n: [
"niger flag",
"flag-ne"
],
u: "1f1f3-1f1ea"
},
{
n: [
"norfolk island flag",
"flag-nf"
],
u: "1f1f3-1f1eb"
},
{
n: [
"nigeria flag",
"flag-ng"
],
u: "1f1f3-1f1ec"
},
{
n: [
"nicaragua flag",
"flag-ni"
],
u: "1f1f3-1f1ee"
},
{
n: [
"netherlands flag",
"flag-nl"
],
u: "1f1f3-1f1f1"
},
{
n: [
"norway flag",
"flag-no"
],
u: "1f1f3-1f1f4"
},
{
n: [
"nepal flag",
"flag-np"
],
u: "1f1f3-1f1f5"
},
{
n: [
"nauru flag",
"flag-nr"
],
u: "1f1f3-1f1f7"
},
{
n: [
"niue flag",
"flag-nu"
],
u: "1f1f3-1f1fa"
},
{
n: [
"new zealand flag",
"flag-nz"
],
u: "1f1f3-1f1ff"
},
{
n: [
"oman flag",
"flag-om"
],
u: "1f1f4-1f1f2"
},
{
n: [
"panama flag",
"flag-pa"
],
u: "1f1f5-1f1e6"
},
{
n: [
"peru flag",
"flag-pe"
],
u: "1f1f5-1f1ea"
},
{
n: [
"french polynesia flag",
"flag-pf"
],
u: "1f1f5-1f1eb"
},
{
n: [
"papua new guinea flag",
"flag-pg"
],
u: "1f1f5-1f1ec"
},
{
n: [
"philippines flag",
"flag-ph"
],
u: "1f1f5-1f1ed"
},
{
n: [
"pakistan flag",
"flag-pk"
],
u: "1f1f5-1f1f0"
},
{
n: [
"poland flag",
"flag-pl"
],
u: "1f1f5-1f1f1"
},
{
n: [
"st. pierre & miquelon flag",
"flag-pm"
],
u: "1f1f5-1f1f2"
},
{
n: [
"pitcairn islands flag",
"flag-pn"
],
u: "1f1f5-1f1f3"
},
{
n: [
"puerto rico flag",
"flag-pr"
],
u: "1f1f5-1f1f7"
},
{
n: [
"palestinian territories flag",
"flag-ps"
],
u: "1f1f5-1f1f8"
},
{
n: [
"portugal flag",
"flag-pt"
],
u: "1f1f5-1f1f9"
},
{
n: [
"palau flag",
"flag-pw"
],
u: "1f1f5-1f1fc"
},
{
n: [
"paraguay flag",
"flag-py"
],
u: "1f1f5-1f1fe"
},
{
n: [
"qatar flag",
"flag-qa"
],
u: "1f1f6-1f1e6"
},
{
n: [
"r\xE9union flag",
"flag-re"
],
u: "1f1f7-1f1ea"
},
{
n: [
"romania flag",
"flag-ro"
],
u: "1f1f7-1f1f4"
},
{
n: [
"serbia flag",
"flag-rs"
],
u: "1f1f7-1f1f8"
},
{
n: [
"russia flag",
"ru",
"flag-ru"
],
u: "1f1f7-1f1fa"
},
{
n: [
"rwanda flag",
"flag-rw"
],
u: "1f1f7-1f1fc"
},
{
n: [
"saudi arabia flag",
"flag-sa"
],
u: "1f1f8-1f1e6"
},
{
n: [
"solomon islands flag",
"flag-sb"
],
u: "1f1f8-1f1e7"
},
{
n: [
"seychelles flag",
"flag-sc"
],
u: "1f1f8-1f1e8"
},
{
n: [
"sudan flag",
"flag-sd"
],
u: "1f1f8-1f1e9"
},
{
n: [
"sweden flag",
"flag-se"
],
u: "1f1f8-1f1ea"
},
{
n: [
"singapore flag",
"flag-sg"
],
u: "1f1f8-1f1ec"
},
{
n: [
"st. helena flag",
"flag-sh"
],
u: "1f1f8-1f1ed"
},
{
n: [
"slovenia flag",
"flag-si"
],
u: "1f1f8-1f1ee"
},
{
n: [
"svalbard & jan mayen flag",
"flag-sj"
],
u: "1f1f8-1f1ef"
},
{
n: [
"slovakia flag",
"flag-sk"
],
u: "1f1f8-1f1f0"
},
{
n: [
"sierra leone flag",
"flag-sl"
],
u: "1f1f8-1f1f1"
},
{
n: [
"san marino flag",
"flag-sm"
],
u: "1f1f8-1f1f2"
},
{
n: [
"senegal flag",
"flag-sn"
],
u: "1f1f8-1f1f3"
},
{
n: [
"somalia flag",
"flag-so"
],
u: "1f1f8-1f1f4"
},
{
n: [
"suriname flag",
"flag-sr"
],
u: "1f1f8-1f1f7"
},
{
n: [
"south sudan flag",
"flag-ss"
],
u: "1f1f8-1f1f8"
},
{
n: [
"s\xE3o tom\xE9 & pr\xEDncipe flag",
"flag-st"
],
u: "1f1f8-1f1f9"
},
{
n: [
"el salvador flag",
"flag-sv"
],
u: "1f1f8-1f1fb"
},
{
n: [
"sint maarten flag",
"flag-sx"
],
u: "1f1f8-1f1fd"
},
{
n: [
"syria flag",
"flag-sy"
],
u: "1f1f8-1f1fe"
},
{
n: [
"swaziland flag",
"flag-sz"
],
u: "1f1f8-1f1ff"
},
{
n: [
"tristan da cunha flag",
"flag-ta"
],
u: "1f1f9-1f1e6"
},
{
n: [
"turks & caicos islands flag",
"flag-tc"
],
u: "1f1f9-1f1e8"
},
{
n: [
"chad flag",
"flag-td"
],
u: "1f1f9-1f1e9"
},
{
n: [
"french southern territories flag",
"flag-tf"
],
u: "1f1f9-1f1eb"
},
{
n: [
"togo flag",
"flag-tg"
],
u: "1f1f9-1f1ec"
},
{
n: [
"thailand flag",
"flag-th"
],
u: "1f1f9-1f1ed"
},
{
n: [
"tajikistan flag",
"flag-tj"
],
u: "1f1f9-1f1ef"
},
{
n: [
"tokelau flag",
"flag-tk"
],
u: "1f1f9-1f1f0"
},
{
n: [
"timor-leste flag",
"flag-tl"
],
u: "1f1f9-1f1f1"
},
{
n: [
"turkmenistan flag",
"flag-tm"
],
u: "1f1f9-1f1f2"
},
{
n: [
"tunisia flag",
"flag-tn"
],
u: "1f1f9-1f1f3"
},
{
n: [
"tonga flag",
"flag-to"
],
u: "1f1f9-1f1f4"
},
{
n: [
"turkey flag",
"flag-tr"
],
u: "1f1f9-1f1f7"
},
{
n: [
"trinidad & tobago flag",
"flag-tt"
],
u: "1f1f9-1f1f9"
},
{
n: [
"tuvalu flag",
"flag-tv"
],
u: "1f1f9-1f1fb"
},
{
n: [
"taiwan flag",
"flag-tw"
],
u: "1f1f9-1f1fc"
},
{
n: [
"tanzania flag",
"flag-tz"
],
u: "1f1f9-1f1ff"
},
{
n: [
"ukraine flag",
"flag-ua"
],
u: "1f1fa-1f1e6"
},
{
n: [
"uganda flag",
"flag-ug"
],
u: "1f1fa-1f1ec"
},
{
n: [
"u.s. outlying islands flag",
"flag-um"
],
u: "1f1fa-1f1f2"
},
{
n: [
"united nations flag",
"flag-un"
],
u: "1f1fa-1f1f3"
},
{
n: [
"united states flag",
"us",
"flag-us"
],
u: "1f1fa-1f1f8"
},
{
n: [
"uruguay flag",
"flag-uy"
],
u: "1f1fa-1f1fe"
},
{
n: [
"uzbekistan flag",
"flag-uz"
],
u: "1f1fa-1f1ff"
},
{
n: [
"vatican city flag",
"flag-va"
],
u: "1f1fb-1f1e6"
},
{
n: [
"st. vincent & grenadines flag",
"flag-vc"
],
u: "1f1fb-1f1e8"
},
{
n: [
"venezuela flag",
"flag-ve"
],
u: "1f1fb-1f1ea"
},
{
n: [
"british virgin islands flag",
"flag-vg"
],
u: "1f1fb-1f1ec"
},
{
n: [
"u.s. virgin islands flag",
"flag-vi"
],
u: "1f1fb-1f1ee"
},
{
n: [
"vietnam flag",
"flag-vn"
],
u: "1f1fb-1f1f3"
},
{
n: [
"vanuatu flag",
"flag-vu"
],
u: "1f1fb-1f1fa"
},
{
n: [
"wallis & futuna flag",
"flag-wf"
],
u: "1f1fc-1f1eb"
},
{
n: [
"samoa flag",
"flag-ws"
],
u: "1f1fc-1f1f8"
},
{
n: [
"kosovo flag",
"flag-xk"
],
u: "1f1fd-1f1f0"
},
{
n: [
"yemen flag",
"flag-ye"
],
u: "1f1fe-1f1ea"
},
{
n: [
"mayotte flag",
"flag-yt"
],
u: "1f1fe-1f1f9"
},
{
n: [
"south africa flag",
"flag-za"
],
u: "1f1ff-1f1e6"
},
{
n: [
"zambia flag",
"flag-zm"
],
u: "1f1ff-1f1f2"
},
{
n: [
"zimbabwe flag",
"flag-zw"
],
u: "1f1ff-1f1fc"
},
{
n: [
"england flag",
"flag-england"
],
u: "1f3f4-e0067-e0062-e0065-e006e-e0067-e007f"
},
{
n: [
"scotland flag",
"flag-scotland"
],
u: "1f3f4-e0067-e0062-e0073-e0063-e0074-e007f"
},
{
n: [
"wales flag",
"flag-wales"
],
u: "1f3f4-e0067-e0062-e0077-e006c-e0073-e007f"
}
];
var emojis = {
smileys_people: smileys_people$1,
animals_nature: animals_nature$1,
food_drink: food_drink$1,
activities: activities$1,
travel_places: travel_places$1,
objects: objects$1,
symbols: symbols$1,
flags: flags$1
};
var _groups = [
{
key: "recent",
title: "Recently Used",
u: "1f551"
},
{
key: "smileys_people",
title: "Smiles & People",
u: "1f600"
},
{
key: "animals_nature",
title: "Animals & Nature",
u: "1F431"
},
{
key: "food_drink",
title: "Food & Drink",
u: "2615"
},
{
key: "activities",
title: "Activities",
u: "26BD"
},
{
key: "travel_places",
title: "Travel & Places",
u: "1F697"
},
{
key: "objects",
title: "Objects",
u: "1F4A1"
},
{
key: "symbols",
title: "Symbols",
u: "1f4af"
},
{
key: "flags",
title: "Flags",
u: "1f3f3-fe0f"
}
];
const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);
let idbProxyableTypes;
let cursorAdvanceMethods;
function getIdbProxyableTypes() {
return idbProxyableTypes || (idbProxyableTypes = [
IDBDatabase,
IDBObjectStore,
IDBIndex,
IDBCursor,
IDBTransaction
]);
}
function getCursorAdvanceMethods() {
return cursorAdvanceMethods || (cursorAdvanceMethods = [
IDBCursor.prototype.advance,
IDBCursor.prototype.continue,
IDBCursor.prototype.continuePrimaryKey
]);
}
const cursorRequestMap = /* @__PURE__ */ new WeakMap();
const transactionDoneMap = /* @__PURE__ */ new WeakMap();
const transactionStoreNamesMap = /* @__PURE__ */ new WeakMap();
const transformCache = /* @__PURE__ */ new WeakMap();
const reverseTransformCache = /* @__PURE__ */ new WeakMap();
function promisifyRequest(request) {
const promise = new Promise((resolve, reject) => {
const unlisten = () => {
request.removeEventListener("success", success);
request.removeEventListener("error", error);
};
const success = () => {
resolve(wrap(request.result));
unlisten();
};
const error = () => {
reject(request.error);
unlisten();
};
request.addEventListener("success", success);
request.addEventListener("error", error);
});
promise.then((value) => {
if (value instanceof IDBCursor) {
cursorRequestMap.set(value, request);
}
}).catch(() => {
});
reverseTransformCache.set(promise, request);
return promise;
}
function cacheDonePromiseForTransaction(tx) {
if (transactionDoneMap.has(tx))
return;
const done = new Promise((resolve, reject) => {
const unlisten = () => {
tx.removeEventListener("complete", complete);
tx.removeEventListener("error", error);
tx.removeEventListener("abort", error);
};
const complete = () => {
resolve();
unlisten();
};
const error = () => {
reject(tx.error || new DOMException("AbortError", "AbortError"));
unlisten();
};
tx.addEventListener("complete", complete);
tx.addEventListener("error", error);
tx.addEventListener("abort", error);
});
transactionDoneMap.set(tx, done);
}
let idbProxyTraps = {
get(target, prop, receiver) {
if (target instanceof IDBTransaction) {
if (prop === "done")
return transactionDoneMap.get(target);
if (prop === "objectStoreNames") {
return target.objectStoreNames || transactionStoreNamesMap.get(target);
}
if (prop === "store") {
return receiver.objectStoreNames[1] ? void 0 : receiver.objectStore(receiver.objectStoreNames[0]);
}
}
return wrap(target[prop]);
},
set(target, prop, value) {
target[prop] = value;
return true;
},
has(target, prop) {
if (target instanceof IDBTransaction && (prop === "done" || prop === "store")) {
return true;
}
return prop in target;
}
};
function replaceTraps(callback) {
idbProxyTraps = callback(idbProxyTraps);
}
function wrapFunction(func) {
if (func === IDBDatabase.prototype.transaction && !("objectStoreNames" in IDBTransaction.prototype)) {
return function(storeNames, ...args) {
const tx = func.call(unwrap(this), storeNames, ...args);
transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);
return wrap(tx);
};
}
if (getCursorAdvanceMethods().includes(func)) {
return function(...args) {
func.apply(unwrap(this), args);
return wrap(cursorRequestMap.get(this));
};
}
return function(...args) {
return wrap(func.apply(unwrap(this), args));
};
}
function transformCachableValue(value) {
if (typeof value === "function")
return wrapFunction(value);
if (value instanceof IDBTransaction)
cacheDonePromiseForTransaction(value);
if (instanceOfAny(value, getIdbProxyableTypes()))
return new Proxy(value, idbProxyTraps);
return value;
}
function wrap(value) {
if (value instanceof IDBRequest)
return promisifyRequest(value);
if (transformCache.has(value))
return transformCache.get(value);
const newValue = transformCachableValue(value);
if (newValue !== value) {
transformCache.set(value, newValue);
reverseTransformCache.set(newValue, value);
}
return newValue;
}
const unwrap = (value) => reverseTransformCache.get(value);
function openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {
const request = indexedDB.open(name, version);
const openPromise = wrap(request);
if (upgrade) {
request.addEventListener("upgradeneeded", (event) => {
upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);
});
}
if (blocked) {
request.addEventListener("blocked", (event) => blocked(
event.oldVersion,
event.newVersion,
event
));
}
openPromise.then((db) => {
if (terminated)
db.addEventListener("close", () => terminated());
if (blocking) {
db.addEventListener("versionchange", (event) => blocking(event.oldVersion, event.newVersion, event));
}
}).catch(() => {
});
return openPromise;
}
const readMethods = ["get", "getKey", "getAll", "getAllKeys", "count"];
const writeMethods = ["put", "add", "delete", "clear"];
const cachedMethods = /* @__PURE__ */ new Map();
function getMethod(target, prop) {
if (!(target instanceof IDBDatabase && !(prop in target) && typeof prop === "string")) {
return;
}
if (cachedMethods.get(prop))
return cachedMethods.get(prop);
const targetFuncName = prop.replace(/FromIndex$/, "");
const useIndex = prop !== targetFuncName;
const isWrite = writeMethods.includes(targetFuncName);
if (!(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) || !(isWrite || readMethods.includes(targetFuncName))) {
return;
}
const method = async function(storeName, ...args) {
const tx = this.transaction(storeName, isWrite ? "readwrite" : "readonly");
let target2 = tx.store;
if (useIndex)
target2 = target2.index(args.shift());
return (await Promise.all([
target2[targetFuncName](...args),
isWrite && tx.done
]))[0];
};
cachedMethods.set(prop, method);
return method;
}
replaceTraps((oldTraps) => ({
...oldTraps,
get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),
has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop)
}));
const DB_KEY = "EMJ";
const STORE_KEY = "emojis";
const DB_VERSION = 3;
async function initialize() {
const db = await openDB(DB_KEY, DB_VERSION, {
upgrade(db2, oldVersion) {
if (!db2.objectStoreNames.contains(STORE_KEY)) {
const store = db2.createObjectStore(STORE_KEY, {
keyPath: "id",
autoIncrement: true
});
store.createIndex("id", "id", {
unique: true
});
}
}
});
db.close();
}
initialize();
const defaultOptions = {
native: false,
hideSearch: true,
hideGroupIcons: false,
hideGroupNames: false,
staticTexts: {},
disabledGroups: [],
groupNames: {},
displayRecent: false,
additionalGroups: {},
groupOrder: [],
groupIcons: {}
};
async function getRecentEmojis() {
const db = await openDB(DB_KEY, DB_VERSION);
const store = db.transaction(STORE_KEY, "readonly").objectStore(STORE_KEY);
return await store.getAll();
}
function Store() {
const state = reactive({
search: "",
emoji: DEFAULT_EMOJI,
activeGroup: "",
skinTone: SKIN_TONE_NEUTRAL,
options: defaultOptions,
additionalGroups: {},
recent: [],
get emojis() {
return {
recent: this.recent,
...this.options.additionalGroups,
...emojis
};
},
get disabled() {
let disabled = Array.isArray(this.options.disabledGroups) ? this.options.disabledGroups : [];
if (!this.options.displayRecent) {
disabled = ["recent", ...disabled];
}
return disabled;
},
get groups() {
return _groups.filter(
(group) => !this.disabled.includes(group.key)
);
},
get orderedGroupKeys() {
const keys = [
...this.options.groupOrder,
...Object.keys(this.options.additionalGroups),
..._groups.map((group) => group.key)
];
return [...new Set(keys)].filter((key) => !this.disabled.includes(key));
}
});
function initialize2() {
if (state.options.displayRecent) {
setInitialRecentEmojis();
}
}
async function getRecent() {
var _a;
let recent2 = await getRecentEmojis();
if (Array.isArray(recent2) && recent2.length) {
recent2 = JSON.parse(((_a = recent2[0]) == null ? void 0 : _a.value) || "");
} else {
recent2 = [];
}
return recent2;
}
function setInitialRecentEmojis() {
getRecent().then((recent2) => {
state.recent = recent2;
updateLocalStore();
});
}
const updateSearch = (value) => {
state.search = value;
};
const updateEmoji = (value) => {
state.emoji = value;
};
const updateActiveGroup = (group) => {
state.activeGroup = group;
};
const updateSkinTone = (tone = SKIN_TONE_NEUTRAL) => {
state.skinTone = tone;
};
const updateOptions = (options) => {
state.options = Object.assign({}, state.options, options);
initialize2();
};
async function updateLocalStore() {
const db = await openDB(DB_KEY, DB_VERSION);
const store = db.transaction(STORE_KEY, "readwrite").objectStore(STORE_KEY);
store.put({
id: 0,
value: JSON.stringify(state.recent)
});
return;
}
const updateSelect = (emoji) => {
if (state.options.displayRecent !== true)
return;
const index2 = state.recent.findIndex((item) => item.u === emoji.u);
if (index2 > 0)
state.recent.splice(index2, 1);
if (index2 === 0)
return;
const _emoji = { u: emoji.u, n: toRaw(emoji.n) };
state.recent = [_emoji, ...state.recent];
if (state.recent.length > 24)
state.recent.length = 24;
updateLocalStore();
};
return {
state: readonly(state),
updateSearch,
updateEmoji,
updateActiveGroup,
updateSkinTone,
updateOptions,
updateSelect
};
}
var top = "top";
var bottom = "bottom";
var right = "right";
var left = "left";
var auto = "auto";
var basePlacements = [top, bottom, right, left];
var start = "start";
var end = "end";
var clippingParents = "clippingParents";
var viewport = "viewport";
var popper = "popper";
var reference = "reference";
var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) {
return acc.concat([placement + "-" + start, placement + "-" + end]);
}, []);
var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) {
return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
}, []);
var beforeRead = "beforeRead";
var read = "read";
var afterRead = "afterRead";
var beforeMain = "beforeMain";
var main = "main";
var afterMain = "afterMain";
var beforeWrite = "beforeWrite";
var write = "write";
var afterWrite = "afterWrite";
var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
function getNodeName(element) {
return element ? (element.nodeName || "").toLowerCase() : null;
}
function getWindow(node) {
if (node == null) {
return window;
}
if (node.toString() !== "[object Window]") {
var ownerDocument = node.ownerDocument;
return ownerDocument ? ownerDocument.defaultView || window : window;
}
return node;
}
function isElement(node) {
var OwnElement = getWindow(node).Element;
return node instanceof OwnElement || node instanceof Element;
}
function isHTMLElement(node) {
var OwnElement = getWindow(node).HTMLElement;
return node instanceof OwnElement || node instanceof HTMLElement;
}
function isShadowRoot(node) {
if (typeof ShadowRoot === "undefined") {
return false;
}
var OwnElement = getWindow(node).ShadowRoot;
return node instanceof OwnElement || node instanceof ShadowRoot;
}
function applyStyles(_ref) {
var state = _ref.state;
Object.keys(state.elements).forEach(function(name) {
var style = state.styles[name] || {};
var attributes = state.attributes[name] || {};
var element = state.elements[name];
if (!isHTMLElement(element) || !getNodeName(element)) {
return;
}
Object.assign(element.style, style);
Object.keys(attributes).forEach(function(name2) {
var value = attributes[name2];
if (value === false) {
element.removeAttribute(name2);
} else {
element.setAttribute(name2, value === true ? "" : value);
}
});
});
}
function effect$2(_ref2) {
var state = _ref2.state;
var initialStyles = {
popper: {
position: state.options.strategy,
left: "0",
top: "0",
margin: "0"
},
arrow: {
position: "absolute"
},
reference: {}
};
Object.assign(state.elements.popper.style, initialStyles.popper);
state.styles = initialStyles;
if (state.elements.arrow) {
Object.assign(state.elements.arrow.style, initialStyles.arrow);
}
return function() {
Object.keys(state.elements).forEach(function(name) {
var element = state.elements[name];
var attributes = state.attributes[name] || {};
var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]);
var style = styleProperties.reduce(function(style2, property) {
style2[property] = "";
return style2;
}, {});
if (!isHTMLElement(element) || !getNodeName(element)) {
return;
}
Object.assign(element.style, style);
Object.keys(attributes).forEach(function(attribute) {
element.removeAttribute(attribute);
});
});
};
}
var applyStyles$1 = {
name: "applyStyles",
enabled: true,
phase: "write",
fn: applyStyles,
effect: effect$2,
requires: ["computeStyles"]
};
function getBasePlacement(placement) {
return placement.split("-")[0];
}
var max = Math.max;
var min = Math.min;
var round = Math.round;
function getBoundingClientRect(element, includeScale) {
if (includeScale === void 0) {
includeScale = false;
}
var rect = element.getBoundingClientRect();
var scaleX = 1;
var scaleY = 1;
if (isHTMLElement(element) && includeScale) {
var offsetHeight = element.offsetHeight;
var offsetWidth = element.offsetWidth;
if (offsetWidth > 0) {
scaleX = round(rect.width) / offsetWidth || 1;
}
if (offsetHeight > 0) {
scaleY = round(rect.height) / offsetHeight || 1;
}
}
return {
width: rect.width / scaleX,
height: rect.height / scaleY,
top: rect.top / scaleY,
right: rect.right / scaleX,
bottom: rect.bottom / scaleY,
left: rect.left / scaleX,
x: rect.left / scaleX,
y: rect.top / scaleY
};
}
function getLayoutRect(element) {
var clientRect = getBoundingClientRect(element);
var width = element.offsetWidth;
var height = element.offsetHeight;
if (Math.abs(clientRect.width - width) <= 1) {
width = clientRect.width;
}
if (Math.abs(clientRect.height - height) <= 1) {
height = clientRect.height;
}
return {
x: element.offsetLeft,
y: element.offsetTop,
width,
height
};
}
function contains(parent, child) {
var rootNode = child.getRootNode && child.getRootNode();
if (parent.contains(child)) {
return true;
} else if (rootNode && isShadowRoot(rootNode)) {
var next = child;
do {
if (next && parent.isSameNode(next)) {
return true;
}
next = next.parentNode || next.host;
} while (next);
}
return false;
}
function getComputedStyle(element) {
return getWindow(element).getComputedStyle(element);
}
function isTableElement(element) {
return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0;
}
function getDocumentElement(element) {
return ((isElement(element) ? element.ownerDocument : element.document) || window.document).documentElement;
}
function getParentNode(element) {
if (getNodeName(element) === "html") {
return element;
}
return element.assignedSlot || element.parentNode || (isShadowRoot(element) ? element.host : null) || getDocumentElement(element);
}
function getTrueOffsetParent(element) {
if (!isHTMLElement(element) || getComputedStyle(element).position === "fixed") {
return null;
}
return element.offsetParent;
}
function getContainingBlock(element) {
var isFirefox = navigator.userAgent.toLowerCase().indexOf("firefox") !== -1;
var isIE = navigator.userAgent.indexOf("Trident") !== -1;
if (isIE && isHTMLElement(element)) {
var elementCss = getComputedStyle(element);
if (elementCss.position === "fixed") {
return null;
}
}
var currentNode = getParentNode(element);
while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) {
var css = getComputedStyle(currentNode);
if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") {
return currentNode;
} else {
currentNode = currentNode.parentNode;
}
}
return null;
}
function getOffsetParent(element) {
var window2 = getWindow(element);
var offsetParent = getTrueOffsetParent(element);
while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === "static") {
offsetParent = getTrueOffsetParent(offsetParent);
}
if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle(offsetParent).position === "static")) {
return window2;
}
return offsetParent || getContainingBlock(element) || window2;
}
function getMainAxisFromPlacement(placement) {
return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y";
}
function within(min$1, value, max$1) {
return max(min$1, min(value, max$1));
}
function withinMaxClamp(min2, value, max2) {
var v = within(min2, value, max2);
return v > max2 ? max2 : v;
}
function getFreshSideObject() {
return {
top: 0,
right: 0,
bottom: 0,
left: 0
};
}
function mergePaddingObject(paddingObject) {
return Object.assign({}, getFreshSideObject(), paddingObject);
}
function expandToHashMap(value, keys) {
return keys.reduce(function(hashMap, key) {
hashMap[key] = value;
return hashMap;
}, {});
}
var toPaddingObject = function toPaddingObject2(padding, state) {
padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, {
placement: state.placement
})) : padding;
return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements));
};
function arrow(_ref) {
var _state$modifiersData$;
var state = _ref.state, name = _ref.name, options = _ref.options;
var arrowElement = state.elements.arrow;
var popperOffsets2 = state.modifiersData.popperOffsets;
var basePlacement = getBasePlacement(state.placement);
var axis = getMainAxisFromPlacement(basePlacement);
var isVertical = [left, right].indexOf(basePlacement) >= 0;
var len = isVertical ? "height" : "width";
if (!arrowElement || !popperOffsets2) {
return;
}
var paddingObject = toPaddingObject(options.padding, state);
var arrowRect = getLayoutRect(arrowElement);
var minProp = axis === "y" ? top : left;
var maxProp = axis === "y" ? bottom : right;
var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len];
var startDiff = popperOffsets2[axis] - state.rects.reference[axis];
var arrowOffsetParent = getOffsetParent(arrowElement);
var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
var centerToReference = endDiff / 2 - startDiff / 2;
var min2 = paddingObject[minProp];
var max2 = clientSize - arrowRect[len] - paddingObject[maxProp];
var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
var offset2 = within(min2, center, max2);
var axisProp = axis;
state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$);
}
function effect$1(_ref2) {
var state = _ref2.state, options = _ref2.options;
var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element;
if (arrowElement == null) {
return;
}
if (typeof arrowElement === "string") {
arrowElement = state.elements.popper.querySelector(arrowElement);
if (!arrowElement) {
return;
}
}
if (!contains(state.elements.popper, arrowElement)) {
return;
}
state.elements.arrow = arrowElement;
}
var arrow$1 = {
name: "arrow",
enabled: true,
phase: "main",
fn: arrow,
effect: effect$1,
requires: ["popperOffsets"],
requiresIfExists: ["preventOverflow"]
};
function getVariation(placement) {
return placement.split("-")[1];
}
var unsetSides = {
top: "auto",
right: "auto",
bottom: "auto",
left: "auto"
};
function roundOffsetsByDPR(_ref) {
var x = _ref.x, y = _ref.y;
var win = window;
var dpr = win.devicePixelRatio || 1;
return {
x: round(x * dpr) / dpr || 0,
y: round(y * dpr) / dpr || 0
};
}
function mapToStyles(_ref2) {
var _Object$assign2;
var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed;
var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === "function" ? roundOffsets(offsets) : offsets, _ref3$x = _ref3.x, x = _ref3$x === void 0 ? 0 : _ref3$x, _ref3$y = _ref3.y, y = _ref3$y === void 0 ? 0 : _ref3$y;
var hasX = offsets.hasOwnProperty("x");
var hasY = offsets.hasOwnProperty("y");
var sideX = left;
var sideY = top;
var win = window;
if (adaptive) {
var offsetParent = getOffsetParent(popper2);
var heightProp = "clientHeight";
var widthProp = "clientWidth";
if (offsetParent === getWindow(popper2)) {
offsetParent = getDocumentElement(popper2);
if (getComputedStyle(offsetParent).position !== "static" && position === "absolute") {
heightProp = "scrollHeight";
widthProp = "scrollWidth";
}
}
offsetParent = offsetParent;
if (placement === top || (placement === left || placement === right) && variation === end) {
sideY = bottom;
var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : offsetParent[heightProp];
y -= offsetY - popperRect.height;
y *= gpuAcceleration ? 1 : -1;
}
if (placement === left || (placement === top || placement === bottom) && variation === end) {
sideX = right;
var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : offsetParent[widthProp];
x -= offsetX - popperRect.width;
x *= gpuAcceleration ? 1 : -1;
}
}
var commonStyles = Object.assign({
position
}, adaptive && unsetSides);
if (gpuAcceleration) {
var _Object$assign;
return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
}
return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : "", _Object$assign2[sideX] = hasX ? x + "px" : "", _Object$assign2.transform = "", _Object$assign2));
}
function computeStyles(_ref4) {
var state = _ref4.state, options = _ref4.options;
var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
var commonStyles = {
placement: getBasePlacement(state.placement),
variation: getVariation(state.placement),
popper: state.elements.popper,
popperRect: state.rects.popper,
gpuAcceleration,
isFixed: state.options.strategy === "fixed"
};
if (state.modifiersData.popperOffsets != null) {
state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
offsets: state.modifiersData.popperOffsets,
position: state.options.strategy,
adaptive,
roundOffsets
})));
}
if (state.modifiersData.arrow != null) {
state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
offsets: state.modifiersData.arrow,
position: "absolute",
adaptive: false,
roundOffsets
})));
}
state.attributes.popper = Object.assign({}, state.attributes.popper, {
"data-popper-placement": state.placement
});
}
var computeStyles$1 = {
name: "computeStyles",
enabled: true,
phase: "beforeWrite",
fn: computeStyles,
data: {}
};
var passive = {
passive: true
};
function effect(_ref) {
var state = _ref.state, instance = _ref.instance, options = _ref.options;
var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize;
var window2 = getWindow(state.elements.popper);
var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
if (scroll) {
scrollParents.forEach(function(scrollParent) {
scrollParent.addEventListener("scroll", instance.update, passive);
});
}
if (resize) {
window2.addEventListener("resize", instance.update, passive);
}
return function() {
if (scroll) {
scrollParents.forEach(function(scrollParent) {
scrollParent.removeEventListener("scroll", instance.update, passive);
});
}
if (resize) {
window2.removeEventListener("resize", instance.update, passive);
}
};
}
var eventListeners = {
name: "eventListeners",
enabled: true,
phase: "write",
fn: function fn() {
},
effect,
data: {}
};
var hash$1 = {
left: "right",
right: "left",
bottom: "top",
top: "bottom"
};
function getOppositePlacement(placement) {
return placement.replace(/left|right|bottom|top/g, function(matched) {
return hash$1[matched];
});
}
var hash = {
start: "end",
end: "start"
};
function getOppositeVariationPlacement(placement) {
return placement.replace(/start|end/g, function(matched) {
return hash[matched];
});
}
function getWindowScroll(node) {
var win = getWindow(node);
var scrollLeft = win.pageXOffset;
var scrollTop = win.pageYOffset;
return {
scrollLeft,
scrollTop
};
}
function getWindowScrollBarX(element) {
return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
}
function getViewportRect(element) {
var win = getWindow(element);
var html = getDocumentElement(element);
var visualViewport = win.visualViewport;
var width = html.clientWidth;
var height = html.clientHeight;
var x = 0;
var y = 0;
if (visualViewport) {
width = visualViewport.width;
height = visualViewport.height;
if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
x = visualViewport.offsetLeft;
y = visualViewport.offsetTop;
}
}
return {
width,
height,
x: x + getWindowScrollBarX(element),
y
};
}
function getDocumentRect(element) {
var _element$ownerDocumen;
var html = getDocumentElement(element);
var winScroll = getWindowScroll(element);
var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
var y = -winScroll.scrollTop;
if (getComputedStyle(body || html).direction === "rtl") {
x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
}
return {
width,
height,
x,
y
};
}
function isScrollParent(element) {
var _getComputedStyle = getComputedStyle(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY;
return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
}
function getScrollParent(node) {
if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) {
return node.ownerDocument.body;
}
if (isHTMLElement(node) && isScrollParent(node)) {
return node;
}
return getScrollParent(getParentNode(node));
}
function listScrollParents(element, list) {
var _element$ownerDocumen;
if (list === void 0) {
list = [];
}
var scrollParent = getScrollParent(element);
var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
var win = getWindow(scrollParent);
var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
var updatedList = list.concat(target);
return isBody ? updatedList : updatedList.concat(listScrollParents(getParentNode(target)));
}
function rectToClientRect(rect) {
return Object.assign({}, rect, {
left: rect.x,
top: rect.y,
right: rect.x + rect.width,
bottom: rect.y + rect.height
});
}
function getInnerBoundingClientRect(element) {
var rect = getBoundingClientRect(element);
rect.top = rect.top + element.clientTop;
rect.left = rect.left + element.clientLeft;
rect.bottom = rect.top + element.clientHeight;
rect.right = rect.left + element.clientWidth;
rect.width = element.clientWidth;
rect.height = element.clientHeight;
rect.x = rect.left;
rect.y = rect.top;
return rect;
}
function getClientRectFromMixedType(element, clippingParent) {
return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
}
function getClippingParents(element) {
var clippingParents2 = listScrollParents(getParentNode(element));
var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle(element).position) >= 0;
var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
if (!isElement(clipperElement)) {
return [];
}
return clippingParents2.filter(function(clippingParent) {
return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body" && (canEscapeClipping ? getComputedStyle(clippingParent).position !== "static" : true);
});
}
function getClippingRect(element, boundary, rootBoundary) {
var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary);
var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]);
var firstClippingParent = clippingParents2[0];
var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) {
var rect = getClientRectFromMixedType(element, clippingParent);
accRect.top = max(rect.top, accRect.top);
accRect.right = min(rect.right, accRect.right);
accRect.bottom = min(rect.bottom, accRect.bottom);
accRect.left = max(rect.left, accRect.left);
return accRect;
}, getClientRectFromMixedType(element, firstClippingParent));
clippingRect.width = clippingRect.right - clippingRect.left;
clippingRect.height = clippingRect.bottom - clippingRect.top;
clippingRect.x = clippingRect.left;
clippingRect.y = clippingRect.top;
return clippingRect;
}
function computeOffsets(_ref) {
var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement;
var basePlacement = placement ? getBasePlacement(placement) : null;
var variation = placement ? getVariation(placement) : null;
var commonX = reference2.x + reference2.width / 2 - element.width / 2;
var commonY = reference2.y + reference2.height / 2 - element.height / 2;
var offsets;
switch (basePlacement) {
case top:
offsets = {
x: commonX,
y: reference2.y - element.height
};
break;
case bottom:
offsets = {
x: commonX,
y: reference2.y + reference2.height
};
break;
case right:
offsets = {
x: reference2.x + reference2.width,
y: commonY
};
break;
case left:
offsets = {
x: reference2.x - element.width,
y: commonY
};
break;
default:
offsets = {
x: reference2.x,
y: reference2.y
};
}
var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
if (mainAxis != null) {
var len = mainAxis === "y" ? "height" : "width";
switch (variation) {
case start:
offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2);
break;
case end:
offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2);
break;
}
}
return offsets;
}
function detectOverflow(state, options) {
if (options === void 0) {
options = {};
}
var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding;
var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements));
var altContext = elementContext === popper ? reference : popper;
var popperRect = state.rects.popper;
var element = state.elements[altBoundary ? altContext : elementContext];
var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
var referenceClientRect = getBoundingClientRect(state.elements.reference);
var popperOffsets2 = computeOffsets({
reference: referenceClientRect,
element: popperRect,
strategy: "absolute",
placement
});
var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2));
var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect;
var overflowOffsets = {
top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
right: elementClientRect.right - clippingClientRect.right + paddingObject.right
};
var offsetData = state.modifiersData.offset;
if (elementContext === popper && offsetData) {
var offset2 = offsetData[placement];
Object.keys(overflowOffsets).forEach(function(key) {
var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x";
overflowOffsets[key] += offset2[axis] * multiply;
});
}
return overflowOffsets;
}
function computeAutoPlacement(state, options) {
if (options === void 0) {
options = {};
}
var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
var variation = getVariation(placement);
var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) {
return getVariation(placement2) === variation;
}) : basePlacements;
var allowedPlacements = placements$1.filter(function(placement2) {
return allowedAutoPlacements.indexOf(placement2) >= 0;
});
if (allowedPlacements.length === 0) {
allowedPlacements = placements$1;
}
var overflows = allowedPlacements.reduce(function(acc, placement2) {
acc[placement2] = detectOverflow(state, {
placement: placement2,
boundary,
rootBoundary,
padding
})[getBasePlacement(placement2)];
return acc;
}, {});
return Object.keys(overflows).sort(function(a, b) {
return overflows[a] - overflows[b];
});
}
function getExpandedFallbackPlacements(placement) {
if (getBasePlacement(placement) === auto) {
return [];
}
var oppositePlacement = getOppositePlacement(placement);
return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
}
function flip(_ref) {
var state = _ref.state, options = _ref.options, name = _ref.name;
if (state.modifiersData[name]._skip) {
return;
}
var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements;
var preferredPlacement = state.options.placement;
var basePlacement = getBasePlacement(preferredPlacement);
var isBasePlacement = basePlacement === preferredPlacement;
var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) {
return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, {
placement: placement2,
boundary,
rootBoundary,
padding,
flipVariations,
allowedAutoPlacements
}) : placement2);
}, []);
var referenceRect = state.rects.reference;
var popperRect = state.rects.popper;
var checksMap = /* @__PURE__ */ new Map();
var makeFallbackChecks = true;
var firstFittingPlacement = placements2[0];
for (var i = 0; i < placements2.length; i++) {
var placement = placements2[i];
var _basePlacement = getBasePlacement(placement);
var isStartVariation = getVariation(placement) === start;
var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
var len = isVertical ? "width" : "height";
var overflow = detectOverflow(state, {
placement,
boundary,
rootBoundary,
altBoundary,
padding
});
var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
if (referenceRect[len] > popperRect[len]) {
mainVariationSide = getOppositePlacement(mainVariationSide);
}
var altVariationSide = getOppositePlacement(mainVariationSide);
var checks = [];
if (checkMainAxis) {
checks.push(overflow[_basePlacement] <= 0);
}
if (checkAltAxis) {
checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
}
if (checks.every(function(check) {
return check;
})) {
firstFittingPlacement = placement;
makeFallbackChecks = false;
break;
}
checksMap.set(placement, checks);
}
if (makeFallbackChecks) {
var numberOfChecks = flipVariations ? 3 : 1;
var _loop = function _loop2(_i2) {
var fittingPlacement = placements2.find(function(placement2) {
var checks2 = checksMap.get(placement2);
if (checks2) {
return checks2.slice(0, _i2).every(function(check) {
return check;
});
}
});
if (fittingPlacement) {
firstFittingPlacement = fittingPlacement;
return "break";
}
};
for (var _i = numberOfChecks; _i > 0; _i--) {
var _ret = _loop(_i);
if (_ret === "break")
break;
}
}
if (state.placement !== firstFittingPlacement) {
state.modifiersData[name]._skip = true;
state.placement = firstFittingPlacement;
state.reset = true;
}
}
var flip$1 = {
name: "flip",
enabled: true,
phase: "main",
fn: flip,
requiresIfExists: ["offset"],
data: {
_skip: false
}
};
function getSideOffsets(overflow, rect, preventedOffsets) {
if (preventedOffsets === void 0) {
preventedOffsets = {
x: 0,
y: 0
};
}
return {
top: overflow.top - rect.height - preventedOffsets.y,
right: overflow.right - rect.width + preventedOffsets.x,
bottom: overflow.bottom - rect.height + preventedOffsets.y,
left: overflow.left - rect.width - preventedOffsets.x
};
}
function isAnySideFullyClipped(overflow) {
return [top, right, bottom, left].some(function(side) {
return overflow[side] >= 0;
});
}
function hide(_ref) {
var state = _ref.state, name = _ref.name;
var referenceRect = state.rects.reference;
var popperRect = state.rects.popper;
var preventedOffsets = state.modifiersData.preventOverflow;
var referenceOverflow = detectOverflow(state, {
elementContext: "reference"
});
var popperAltOverflow = detectOverflow(state, {
altBoundary: true
});
var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
state.modifiersData[name] = {
referenceClippingOffsets,
popperEscapeOffsets,
isReferenceHidden,
hasPopperEscaped
};
state.attributes.popper = Object.assign({}, state.attributes.popper, {
"data-popper-reference-hidden": isReferenceHidden,
"data-popper-escaped": hasPopperEscaped
});
}
var hide$1 = {
name: "hide",
enabled: true,
phase: "main",
requiresIfExists: ["preventOverflow"],
fn: hide
};
function distanceAndSkiddingToXY(placement, rects, offset2) {
var basePlacement = getBasePlacement(placement);
var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, {
placement
})) : offset2, skidding = _ref[0], distance = _ref[1];
skidding = skidding || 0;
distance = (distance || 0) * invertDistance;
return [left, right].indexOf(basePlacement) >= 0 ? {
x: distance,
y: skidding
} : {
x: skidding,
y: distance
};
}
function offset(_ref2) {
var state = _ref2.state, options = _ref2.options, name = _ref2.name;
var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset;
var data = placements.reduce(function(acc, placement) {
acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2);
return acc;
}, {});
var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y;
if (state.modifiersData.popperOffsets != null) {
state.modifiersData.popperOffsets.x += x;
state.modifiersData.popperOffsets.y += y;
}
state.modifiersData[name] = data;
}
var offset$1 = {
name: "offset",
enabled: true,
phase: "main",
requires: ["popperOffsets"],
fn: offset
};
function popperOffsets(_ref) {
var state = _ref.state, name = _ref.name;
state.modifiersData[name] = computeOffsets({
reference: state.rects.reference,
element: state.rects.popper,
strategy: "absolute",
placement: state.placement
});
}
var popperOffsets$1 = {
name: "popperOffsets",
enabled: true,
phase: "read",
fn: popperOffsets,
data: {}
};
function getAltAxis(axis) {
return axis === "x" ? "y" : "x";
}
function preventOverflow(_ref) {
var state = _ref.state, options = _ref.options, name = _ref.name;
var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
var overflow = detectOverflow(state, {
boundary,
rootBoundary,
padding,
altBoundary
});
var basePlacement = getBasePlacement(state.placement);
var variation = getVariation(state.placement);
var isBasePlacement = !variation;
var mainAxis = getMainAxisFromPlacement(basePlacement);
var altAxis = getAltAxis(mainAxis);
var popperOffsets2 = state.modifiersData.popperOffsets;
var referenceRect = state.rects.reference;
var popperRect = state.rects.popper;
var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, {
placement: state.placement
})) : tetherOffset;
var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? {
mainAxis: tetherOffsetValue,
altAxis: tetherOffsetValue
} : Object.assign({
mainAxis: 0,
altAxis: 0
}, tetherOffsetValue);
var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
var data = {
x: 0,
y: 0
};
if (!popperOffsets2) {
return;
}
if (checkMainAxis) {
var _offsetModifierState$;
var mainSide = mainAxis === "y" ? top : left;
var altSide = mainAxis === "y" ? bottom : right;
var len = mainAxis === "y" ? "height" : "width";
var offset2 = popperOffsets2[mainAxis];
var min$1 = offset2 + overflow[mainSide];
var max$1 = offset2 - overflow[altSide];
var additive = tether ? -popperRect[len] / 2 : 0;
var minLen = variation === start ? referenceRect[len] : popperRect[len];
var maxLen = variation === start ? -popperRect[len] : -referenceRect[len];
var arrowElement = state.elements.arrow;
var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
width: 0,
height: 0
};
var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject();
var arrowPaddingMin = arrowPaddingObject[mainSide];
var arrowPaddingMax = arrowPaddingObject[altSide];
var arrowLen = within(0, referenceRect[len], arrowRect[len]);
var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset;
var tetherMax = offset2 + maxOffset - offsetModifierValue;
var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset2, tether ? max(max$1, tetherMax) : max$1);
popperOffsets2[mainAxis] = preventedOffset;
data[mainAxis] = preventedOffset - offset2;
}
if (checkAltAxis) {
var _offsetModifierState$2;
var _mainSide = mainAxis === "x" ? top : left;
var _altSide = mainAxis === "x" ? bottom : right;
var _offset = popperOffsets2[altAxis];
var _len = altAxis === "y" ? "height" : "width";
var _min = _offset + overflow[_mainSide];
var _max = _offset - overflow[_altSide];
var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
popperOffsets2[altAxis] = _preventedOffset;
data[altAxis] = _preventedOffset - _offset;
}
state.modifiersData[name] = data;
}
var preventOverflow$1 = {
name: "preventOverflow",
enabled: true,
phase: "main",
fn: preventOverflow,
requiresIfExists: ["offset"]
};
function getHTMLElementScroll(element) {
return {
scrollLeft: element.scrollLeft,
scrollTop: element.scrollTop
};
}
function getNodeScroll(node) {
if (node === getWindow(node) || !isHTMLElement(node)) {
return getWindowScroll(node);
} else {
return getHTMLElementScroll(node);
}
}
function isElementScaled(element) {
var rect = element.getBoundingClientRect();
var scaleX = round(rect.width) / element.offsetWidth || 1;
var scaleY = round(rect.height) / element.offsetHeight || 1;
return scaleX !== 1 || scaleY !== 1;
}
function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
if (isFixed === void 0) {
isFixed = false;
}
var isOffsetParentAnElement = isHTMLElement(offsetParent);
var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
var documentElement = getDocumentElement(offsetParent);
var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);
var scroll = {
scrollLeft: 0,
scrollTop: 0
};
var offsets = {
x: 0,
y: 0
};
if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
if (getNodeName(offsetParent) !== "body" || isScrollParent(documentElement)) {
scroll = getNodeScroll(offsetParent);
}
if (isHTMLElement(offsetParent)) {
offsets = getBoundingClientRect(offsetParent, true);
offsets.x += offsetParent.clientLeft;
offsets.y += offsetParent.clientTop;
} else if (documentElement) {
offsets.x = getWindowScrollBarX(documentElement);
}
}
return {
x: rect.left + scroll.scrollLeft - offsets.x,
y: rect.top + scroll.scrollTop - offsets.y,
width: rect.width,
height: rect.height
};
}
function order(modifiers) {
var map = /* @__PURE__ */ new Map();
var visited = /* @__PURE__ */ new Set();
var result = [];
modifiers.forEach(function(modifier) {
map.set(modifier.name, modifier);
});
function sort(modifier) {
visited.add(modifier.name);
var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
requires.forEach(function(dep) {
if (!visited.has(dep)) {
var depModifier = map.get(dep);
if (depModifier) {
sort(depModifier);
}
}
});
result.push(modifier);
}
modifiers.forEach(function(modifier) {
if (!visited.has(modifier.name)) {
sort(modifier);
}
});
return result;
}
function orderModifiers(modifiers) {
var orderedModifiers = order(modifiers);
return modifierPhases.reduce(function(acc, phase) {
return acc.concat(orderedModifiers.filter(function(modifier) {
return modifier.phase === phase;
}));
}, []);
}
function debounce(fn2) {
var pending;
return function() {
if (!pending) {
pending = new Promise(function(resolve) {
Promise.resolve().then(function() {
pending = void 0;
resolve(fn2());
});
});
}
return pending;
};
}
function mergeByName(modifiers) {
var merged = modifiers.reduce(function(merged2, current) {
var existing = merged2[current.name];
merged2[current.name] = existing ? Object.assign({}, existing, current, {
options: Object.assign({}, existing.options, current.options),
data: Object.assign({}, existing.data, current.data)
}) : current;
return merged2;
}, {});
return Object.keys(merged).map(function(key) {
return merged[key];
});
}
var DEFAULT_OPTIONS = {
placement: "bottom",
modifiers: [],
strategy: "absolute"
};
function areValidElements() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return !args.some(function(element) {
return !(element && typeof element.getBoundingClientRect === "function");
});
}
function popperGenerator(generatorOptions) {
if (generatorOptions === void 0) {
generatorOptions = {};
}
var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions2 = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
return function createPopper2(reference2, popper2, options) {
if (options === void 0) {
options = defaultOptions2;
}
var state = {
placement: "bottom",
orderedModifiers: [],
options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions2),
modifiersData: {},
elements: {
reference: reference2,
popper: popper2
},
attributes: {},
styles: {}
};
var effectCleanupFns = [];
var isDestroyed = false;
var instance = {
state,
setOptions: function setOptions(setOptionsAction) {
var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction;
cleanupModifierEffects();
state.options = Object.assign({}, defaultOptions2, state.options, options2);
state.scrollParents = {
reference: isElement(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [],
popper: listScrollParents(popper2)
};
var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers)));
state.orderedModifiers = orderedModifiers.filter(function(m) {
return m.enabled;
});
runModifierEffects();
return instance.update();
},
forceUpdate: function forceUpdate() {
if (isDestroyed) {
return;
}
var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper;
if (!areValidElements(reference3, popper3)) {
return;
}
state.rects = {
reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"),
popper: getLayoutRect(popper3)
};
state.reset = false;
state.placement = state.options.placement;
state.orderedModifiers.forEach(function(modifier) {
return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
});
for (var index2 = 0; index2 < state.orderedModifiers.length; index2++) {
if (state.reset === true) {
state.reset = false;
index2 = -1;
continue;
}
var _state$orderedModifie = state.orderedModifiers[index2], fn2 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name;
if (typeof fn2 === "function") {
state = fn2({
state,
options: _options,
name,
instance
}) || state;
}
}
},
update: debounce(function() {
return new Promise(function(resolve) {
instance.forceUpdate();
resolve(state);
});
}),
destroy: function destroy() {
cleanupModifierEffects();
isDestroyed = true;
}
};
if (!areValidElements(reference2, popper2)) {
return instance;
}
instance.setOptions(options).then(function(state2) {
if (!isDestroyed && options.onFirstUpdate) {
options.onFirstUpdate(state2);
}
});
function runModifierEffects() {
state.orderedModifiers.forEach(function(_ref3) {
var name = _ref3.name, _ref3$options = _ref3.options, options2 = _ref3$options === void 0 ? {} : _ref3$options, effect2 = _ref3.effect;
if (typeof effect2 === "function") {
var cleanupFn = effect2({
state,
name,
instance,
options: options2
});
var noopFn = function noopFn2() {
};
effectCleanupFns.push(cleanupFn || noopFn);
}
});
}
function cleanupModifierEffects() {
effectCleanupFns.forEach(function(fn2) {
return fn2();
});
effectCleanupFns = [];
}
return instance;
};
}
var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
var createPopper = /* @__PURE__ */ popperGenerator({
defaultModifiers
});
var smileys_people = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZD0iTSAxNiA0IEMgOS4zODI4MTMgNCA0IDkuMzgyODEzIDQgMTYgQyA0IDIyLjYxNzE4OCA5LjM4MjgxMyAyOCAxNiAyOCBDIDIyLjYxNzE4OCAyOCAyOCAyMi42MTcxODggMjggMTYgQyAyOCA5LjM4MjgxMyAyMi42MTcxODggNCAxNiA0IFogTSAxNiA2IEMgMjEuNTM1MTU2IDYgMjYgMTAuNDY0ODQ0IDI2IDE2IEMgMjYgMjEuNTM1MTU2IDIxLjUzNTE1NiAyNiAxNiAyNiBDIDEwLjQ2NDg0NCAyNiA2IDIxLjUzNTE1NiA2IDE2IEMgNiAxMC40NjQ4NDQgMTAuNDY0ODQ0IDYgMTYgNiBaIE0gMTEuNSAxMiBDIDEwLjY3MTg3NSAxMiAxMCAxMi42NzE4NzUgMTAgMTMuNSBDIDEwIDE0LjMyODEyNSAxMC42NzE4NzUgMTUgMTEuNSAxNSBDIDEyLjMyODEyNSAxNSAxMyAxNC4zMjgxMjUgMTMgMTMuNSBDIDEzIDEyLjY3MTg3NSAxMi4zMjgxMjUgMTIgMTEuNSAxMiBaIE0gMjAuNSAxMiBDIDE5LjY3MTg3NSAxMiAxOSAxMi42NzE4NzUgMTkgMTMuNSBDIDE5IDE0LjMyODEyNSAxOS42NzE4NzUgMTUgMjAuNSAxNSBDIDIxLjMyODEyNSAxNSAyMiAxNC4zMjgxMjUgMjIgMTMuNSBDIDIyIDEyLjY3MTg3NSAyMS4zMjgxMjUgMTIgMjAuNSAxMiBaIE0gMTAuODEyNSAxOSBMIDkuMDkzNzUgMjAgQyAxMC40NzY1NjMgMjIuMzg2NzE5IDEzLjA0Njg3NSAyNCAxNiAyNCBDIDE4Ljk1MzEyNSAyNCAyMS41MjM0MzggMjIuMzg2NzE5IDIyLjkwNjI1IDIwIEwgMjEuMTg3NSAxOSBDIDIwLjE0ODQzOCAyMC43OTI5NjkgMTguMjI2NTYzIDIyIDE2IDIyIEMgMTMuNzczNDM4IDIyIDExLjg1MTU2MyAyMC43OTI5NjkgMTAuODEyNSAxOSBaIi8+PC9zdmc+";
function unicodeToEmoji(unicode) {
return unicode.split("-").map((hex) => parseInt(hex, 16)).map((hex) => String.fromCodePoint(hex)).join("");
}
function filterEmojis(emojis2, keyword, skinTone, disabledGroups = []) {
const _emojiData = {};
Object.keys(emojis2).forEach((key) => {
if (disabledGroups.includes(key)) {
return;
}
const _emojis = [];
emojis2[key].forEach((emoji) => {
var _a;
if (emoji[EMOJI_NAME_KEY][0].includes(keyword.toLocaleLowerCase())) {
let result = emoji[EMOJI_UNICODE_KEY];
if (skinTone !== SKIN_TONE_NEUTRAL && Array.isArray(emoji[EMOJI_VARIATIONS_KEY])) {
const v_index = ((_a = emoji[EMOJI_VARIATIONS_KEY]) == null ? void 0 : _a.findIndex(
(v) => v.includes(skinTone)
)) || -1;
if (v_index !== -1 && emoji[EMOJI_VARIATIONS_KEY]) {
result = emoji[EMOJI_VARIATIONS_KEY][v_index];
}
}
return _emojis.push({
...emoji,
[EMOJI_RESULT_KEY]: result
});
}
});
if (_emojis.length) {
_emojiData[key] = _emojis;
}
});
return _emojiData;
}
function isMac() {
var _a;
let platform = ((_a = navigator == null ? void 0 : navigator.userAgentData) == null ? void 0 : _a.platform) || (navigator == null ? void 0 : navigator.platform) || "unknown";
return platform.toUpperCase().indexOf("MAC") !== -1;
}
function snakeToCapitalizedCase(string) {
return string.replace(
/^_*(.)|_+(.)/g,
(s, c, d) => c ? c.toUpperCase() : " " + d.toUpperCase()
);
}
var _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target[key] = val;
}
return target;
};
const _sfc_main$4 = defineComponent({
name: "Body",
emits: {
select: (emoji) => true
},
setup() {
const { state, updateEmoji, updateSelect } = inject("store");
const bodyInner = ref(null);
const emojis2 = computed(() => {
return filterEmojis(
state.emojis,
state.search,
state.skinTone,
state.options.disabledGroups
);
});
const _this = getCurrentInstance();
const hasGroupNames = computed(() => !state.options.hideGroupNames);
const isSticky = computed(() => !state.options.disableStickyGroupNames);
const groupNames = toRaw(state.options.groupNames);
const orderedKeys = state.orderedGroupKeys;
if (state.options.additionalGroups) {
Object.keys(state.options.additionalGroups).map((k) => {
if (state.options.groupNames[k]) {
groupNames[k] = state.options.groupNames[k];
} else {
groupNames[k] = snakeToCapitalizedCase(k);
}
});
}
const platform = isMac() ? "is-mac" : "";
function handleMouseEnter(emoji) {
updateEmoji(emoji);
}
function handleClick(emoji) {
updateSelect(emoji);
_this == null ? void 0 : _this.emit("select", {
...emoji,
t: state.skinTone,
i: unicodeToEmoji(emoji.r)
});
}
function handleError(event, unicode) {
var _a;
const button = (_a = event == null ? void 0 : event.target) == null ? void 0 : _a.closest("button");
if (button) {
button.innerHTML = `<span>${unicodeToEmoji(unicode)}</span>`;
}
}
watch(
() => state.activeGroup,
() => {
var _a;
const target = (_a = bodyInner.value) == null ? void 0 : _a.querySelector("#" + state.activeGroup);
if (target) {
target.parentNode.scrollTop = target.offsetTop - target.parentNode.offsetTop;
}
}
);
return {
emojis: emojis2,
bodyInner,
EMOJI_REMOTE_SRC,
GROUP_NAMES,
handleClick,
handleError,
handleMouseEnter,
native: state.options.native,
unicodeToEmoji,
EMOJI_RESULT_KEY,
EMOJI_NAME_KEY,
hasGroupNames,
isSticky,
platform,
groupNames,
orderedKeys
};
}
});
const _hoisted_1$3 = { class: "v3-body" };
const _hoisted_2$3 = ["id"];
const _hoisted_3$3 = { class: "v3-emojis" };
const _hoisted_4$3 = ["onMouseenter", "onClick"];
const _hoisted_5$3 = { key: 0 };
const _hoisted_6$2 = ["src", "alt", "onError"];
const _hoisted_7$1 = {
key: 1,
class: "v3-no-result"
};
function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", _hoisted_1$3, [
createElementVNode("div", {
ref: "bodyInner",
class: normalizeClass([_ctx.platform, "v3-body-inner"])
}, [
_ctx.orderedKeys.length ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(_ctx.orderedKeys, (key) => {
return openBlock(), createElementBlock("div", {
id: key,
key,
class: "v3-group"
}, [
_ctx.hasGroupNames ? withDirectives((openBlock(), createElementBlock("h5", {
key: 0,
class: normalizeClass(_ctx.isSticky ? `v3-sticky` : ``)
}, toDisplayString(_ctx.groupNames[key]), 3)), [
[vShow, _ctx.emojis[key]]
]) : createCommentVNode("", true),
withDirectives(createElementVNode("div", _hoisted_3$3, [
(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.emojis[key], (emoji) => {
return openBlock(), createElementBlock("button", {
key: emoji.r,
type: "button",
onMouseenter: ($event) => _ctx.handleMouseEnter(emoji),
onClick: ($event) => _ctx.handleClick(emoji)
}, [
_ctx.native ? (openBlock(), createElementBlock("span", _hoisted_5$3, toDisplayString(_ctx.unicodeToEmoji(emoji.r)), 1)) : (openBlock(), createElementBlock("img", {
key: 1,
src: _ctx.EMOJI_REMOTE_SRC + `/${emoji.r}.png`,
alt: emoji.n[0],
onError: ($event) => _ctx.handleError($event, emoji.r)
}, null, 40, _hoisted_6$2))
], 40, _hoisted_4$3);
}), 128))
], 512), [
[vShow, _ctx.emojis[key]]
])
], 8, _hoisted_2$3);
}), 128)) : (openBlock(), createElementBlock("span", _hoisted_7$1, " No emoji has been found! "))
], 2)
]);
}
var Body = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4]]);
var animals_nature = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZD0iTSAxMi41IDUgQyAxMS40Mjk2ODggNSAxMC41IDUuNjA5Mzc1IDkuOTA2MjUgNi40Mzc1IEMgOS4zMTI1IDcuMjY1NjI1IDkgOC4zMzk4NDQgOSA5LjUgQyA5IDEwLjY2MDE1NiA5LjMxMjUgMTEuNzM0Mzc1IDkuOTA2MjUgMTIuNTYyNSBDIDEwLjUgMTMuMzkwNjI1IDExLjQyOTY4OCAxNCAxMi41IDE0IEMgMTMuNTcwMzEzIDE0IDE0LjUgMTMuMzkwNjI1IDE1LjA5Mzc1IDEyLjU2MjUgQyAxNS42ODc1IDExLjczNDM3NSAxNiAxMC42NjAxNTYgMTYgOS41IEMgMTYgOC4zMzk4NDQgMTUuNjg3NSA3LjI2NTYyNSAxNS4wOTM3NSA2LjQzNzUgQyAxNC41IDUuNjA5Mzc1IDEzLjU3MDMxMyA1IDEyLjUgNSBaIE0gMTYgOS41IEMgMTYgMTAuNjYwMTU2IDE2LjMxMjUgMTEuNzM0Mzc1IDE2LjkwNjI1IDEyLjU2MjUgQyAxNy41IDEzLjM5MDYyNSAxOC40Mjk2ODggMTQgMTkuNSAxNCBDIDIwLjU3MDMxMyAxNCAyMS41IDEzLjM5MDYyNSAyMi4wOTM3NSAxMi41NjI1IEMgMjIuNjg3NSAxMS43MzQzNzUgMjMgMTAuNjYwMTU2IDIzIDkuNSBDIDIzIDguMzM5ODQ0IDIyLjY4NzUgNy4yNjU2MjUgMjIuMDkzNzUgNi40Mzc1IEMgMjEuNSA1LjYwOTM3NSAyMC41NzAzMTMgNSAxOS41IDUgQyAxOC40Mjk2ODggNSAxNy41IDUuNjA5Mzc1IDE2LjkwNjI1IDYuNDM3NSBDIDE2LjMxMjUgNy4yNjU2MjUgMTYgOC4zMzk4NDQgMTYgOS41IFogTSAxMi41IDcgQyAxMi44MTI1IDcgMTMuMTU2MjUgNy4xNTYyNSAxMy40Njg3NSA3LjU5Mzc1IEMgMTMuNzgxMjUgOC4wMzEyNSAxNCA4LjcyNjU2MyAxNCA5LjUgQyAxNCAxMC4yNzM0MzggMTMuNzgxMjUgMTAuOTY4NzUgMTMuNDY4NzUgMTEuNDA2MjUgQyAxMy4xNTYyNSAxMS44NDM3NSAxMi44MTI1IDEyIDEyLjUgMTIgQyAxMi4xODc1IDEyIDExLjg0Mzc1IDExLjg0Mzc1IDExLjUzMTI1IDExLjQwNjI1IEMgMTEuMjE4NzUgMTAuOTY4NzUgMTEgMTAuMjczNDM4IDExIDkuNSBDIDExIDguNzI2NTYzIDExLjIxODc1IDguMDMxMjUgMTEuNTMxMjUgNy41OTM3NSBDIDExLjg0Mzc1IDcuMTU2MjUgMTIuMTg3NSA3IDEyLjUgNyBaIE0gMTkuNSA3IEMgMTkuODEyNSA3IDIwLjE1NjI1IDcuMTU2MjUgMjAuNDY4NzUgNy41OTM3NSBDIDIwLjc4MTI1IDguMDMxMjUgMjEgOC43MjY1NjMgMjEgOS41IEMgMjEgMTAuMjczNDM4IDIwLjc4MTI1IDEwLjk2ODc1IDIwLjQ2ODc1IDExLjQwNjI1IEMgMjAuMTU2MjUgMTEuODQzNzUgMTkuODEyNSAxMiAxOS41IDEyIEMgMTkuMTg3NSAxMiAxOC44NDM3NSAxMS44NDM3NSAxOC41MzEyNSAxMS40MDYyNSBDIDE4LjIxODc1IDEwLjk2ODc1IDE4IDEwLjI3MzQzOCAxOCA5LjUgQyAxOCA4LjcyNjU2MyAxOC4yMTg3NSA4LjAzMTI1IDE4LjUzMTI1IDcuNTkzNzUgQyAxOC44NDM3NSA3LjE1NjI1IDE5LjE4NzUgNyAxOS41IDcgWiBNIDcuNSAxMiBDIDYuNDI5Njg4IDEyIDUuNSAxMi42MDkzNzUgNC45MDYyNSAxMy40Mzc1IEMgNC4zMTI1IDE0LjI2NTYyNSA0IDE1LjMzOTg0NCA0IDE2LjUgQyA0IDE3LjY2MDE1NiA0LjMxMjUgMTguNzM0Mzc1IDQuOTA2MjUgMTkuNTYyNSBDIDUuNSAyMC4zOTA2MjUgNi40Mjk2ODggMjEgNy41IDIxIEMgOC41NzAzMTMgMjEgOS41IDIwLjM5MDYyNSAxMC4wOTM3NSAxOS41NjI1IEMgMTAuNjg3NSAxOC43MzQzNzUgMTEgMTcuNjYwMTU2IDExIDE2LjUgQyAxMSAxNS4zMzk4NDQgMTAuNjg3NSAxNC4yNjU2MjUgMTAuMDkzNzUgMTMuNDM3NSBDIDkuNSAxMi42MDkzNzUgOC41NzAzMTMgMTIgNy41IDEyIFogTSAyNC41IDEyIEMgMjMuNDI5Njg4IDEyIDIyLjUgMTIuNjA5Mzc1IDIxLjkwNjI1IDEzLjQzNzUgQyAyMS4zMTI1IDE0LjI2NTYyNSAyMSAxNS4zMzk4NDQgMjEgMTYuNSBDIDIxIDE3LjY2MDE1NiAyMS4zMTI1IDE4LjczNDM3NSAyMS45MDYyNSAxOS41NjI1IEMgMjIuNSAyMC4zOTA2MjUgMjMuNDI5Njg4IDIxIDI0LjUgMjEgQyAyNS41NzAzMTMgMjEgMjYuNSAyMC4zOTA2MjUgMjcuMDkzNzUgMTkuNTYyNSBDIDI3LjY4NzUgMTguNzM0Mzc1IDI4IDE3LjY2MDE1NiAyOCAxNi41IEMgMjggMTUuMzM5ODQ0IDI3LjY4NzUgMTQuMjY1NjI1IDI3LjA5Mzc1IDEzLjQzNzUgQyAyNi41IDEyLjYwOTM3NSAyNS41NzAzMTMgMTIgMjQuNSAxMiBaIE0gNy41IDE0IEMgNy44MTI1IDE0IDguMTU2MjUgMTQuMTU2MjUgOC40Njg3NSAxNC41OTM3NSBDIDguNzgxMjUgMTUuMDMxMjUgOSAxNS43MjY1NjMgOSAxNi41IEMgOSAxNy4yNzM0MzggOC43ODEyNSAxNy45Njg3NSA4LjQ2ODc1IDE4LjQwNjI1IEMgOC4xNTYyNSAxOC44NDM3NSA3LjgxMjUgMTkgNy41IDE5IEMgNy4xODc1IDE5IDYuODQzNzUgMTguODQzNzUgNi41MzEyNSAxOC40MDYyNSBDIDYuMjE4NzUgMTcuOTY4NzUgNiAxNy4yNzM0MzggNiAxNi41IEMgNiAxNS43MjY1NjMgNi4yMTg3NSAxNS4wMzEyNSA2LjUzMTI1IDE0LjU5Mzc1IEMgNi44NDM3NSAxNC4xNTYyNSA3LjE4NzUgMTQgNy41IDE0IFogTSAyNC41IDE0IEMgMjQuODEyNSAxNCAyNS4xNTYyNSAxNC4xNTYyNSAyNS40Njg3NSAxNC41OTM3NSBDIDI1Ljc4MTI1IDE1LjAzMTI1IDI2IDE1LjcyNjU2MyAyNiAxNi41IEMgMjYgMTcuMjczNDM4IDI1Ljc4MTI1IDE3Ljk2ODc1IDI1LjQ2ODc1IDE4LjQwNjI1IEMgMjUuMTU2MjUgMTguODQzNzUgMjQuODEyNSAxOSAyNC41IDE5IEMgMjQuMTg3NSAxOSAyMy44NDM3NSAxOC44NDM3NSAyMy41MzEyNSAxOC40MDYyNSBDIDIzLjIxODc1IDE3Ljk2ODc1IDIzIDE3LjI3MzQzOCAyMyAxNi41IEMgMjMgMTUuNzI2NTYzIDIzLjIxODc1IDE1LjAzMTI1IDIzLjUzMTI1IDE0LjU5Mzc1IEMgMjMuODQzNzUgMTQuMTU2MjUgMjQuMTg3NSAxNCAyNC41IDE0IFogTSAxNiAxNiBDIDE0LjY2Nzk2OSAxNiAxMy43MzgyODEgMTYuODY3MTg4IDEzLjI4MTI1IDE3LjYyNSBDIDEyLjgyNDIxOSAxOC4zODI4MTMgMTIuNTQ2ODc1IDE5LjAxNTYyNSAxMi4yODEyNSAxOS4yODEyNSBDIDEyLjEyNSAxOS40Mzc1IDExLjE2MDE1NiAxOS44MDA3ODEgMTAuMTU2MjUgMjAuMzEyNSBDIDkuNjUyMzQ0IDIwLjU3MDMxMyA5LjE0NDUzMSAyMC45MTQwNjMgOC43MTg3NSAyMS40Mzc1IEMgOC4yOTI5NjkgMjEuOTYwOTM4IDggMjIuNjg3NSA4IDIzLjUgQyA4IDI1LjQyMTg3NSA5LjU3ODEyNSAyNyAxMS41IDI3IEMgMTIuMzY3MTg4IDI3IDEzLjI2OTUzMSAyNi43MjI2NTYgMTQuMTU2MjUgMjYuNDY4NzUgQyAxNS4wNDI5NjkgMjYuMjE0ODQ0IDE2IDI2IDE2IDI2IEMgMTYgMjYgMTYuOTU3MDMxIDI2LjIxNDg0NCAxNy44NDM3NSAyNi40Njg3NSBDIDE4LjczMDQ2OSAyNi43MjI2NTYgMTkuNjMyODEzIDI3IDIwLjUgMjcgQyAyMi40MjE4NzUgMjcgMjQgMjUuNDIxODc1IDI0IDIzLjUgQyAyNCAyMi43MDcwMzEgMjMuNzA3MDMxIDIxLjk4MDQ2OSAyMy4yODEyNSAyMS40Njg3NSBDIDIyLjg1NTQ2OSAyMC45NTcwMzEgMjIuMzQzNzUgMjAuNjQwNjI1IDIxLjg0Mzc1IDIwLjM3NSBDIDIwLjg0Mzc1IDE5Ljg0Mzc1IDE5Ljg1OTM3NSAxOS40MjE4NzUgMTkuNzE4NzUgMTkuMjgxMjUgQyAxOS40ODA0NjkgMTkuMDQyOTY5IDE5LjIxMDkzOCAxOC4zOTA2MjUgMTguNzUgMTcuNjI1IEMgMTguMjg5MDYzIDE2Ljg1OTM3NSAxNy4zMzk4NDQgMTYgMTYgMTYgWiBNIDE2IDE4IEMgMTYuNjYwMTU2IDE4IDE2LjczNDM3NSAxOC4xNjAxNTYgMTcuMDMxMjUgMTguNjU2MjUgQyAxNy4zMjgxMjUgMTkuMTUyMzQ0IDE3LjU1NDY4OCAxOS45OTIxODggMTguMjgxMjUgMjAuNzE4NzUgQyAxOS4xMDU0NjkgMjEuNTQyOTY5IDIwLjE0ODQzOCAyMS43MjI2NTYgMjAuOTA2MjUgMjIuMTI1IEMgMjEuMjg1MTU2IDIyLjMyODEyNSAyMS41NzgxMjUgMjIuNTQyOTY5IDIxLjc1IDIyLjc1IEMgMjEuOTIxODc1IDIyLjk1NzAzMSAyMiAyMy4xNDg0MzggMjIgMjMuNSBDIDIyIDI0LjMzOTg0NCAyMS4zMzk4NDQgMjUgMjAuNSAyNSBDIDIwLjIxMDkzOCAyNSAxOS4yNzczNDQgMjQuNzc3MzQ0IDE4LjQwNjI1IDI0LjUzMTI1IEMgMTcuNTM1MTU2IDI0LjI4NTE1NiAxNi44MTY0MDYgMjQgMTYgMjQgQyAxNS4xODM1OTQgMjQgMTQuNDY0ODQ0IDI0LjI4NTE1NiAxMy41OTM3NSAyNC41MzEyNSBDIDEyLjcyMjY1NiAyNC43NzczNDQgMTEuNzg5MDYzIDI1IDExLjUgMjUgQyAxMC42NjAxNTYgMjUgMTAgMjQuMzM5ODQ0IDEwIDIzLjUgQyAxMCAyMy4wOTc2NTYgMTAuMDgyMDMxIDIyLjg5MDYyNSAxMC4yNSAyMi42ODc1IEMgMTAuNDE3OTY5IDIyLjQ4NDM3NSAxMC43MjI2NTYgMjIuMjg1MTU2IDExLjA5Mzc1IDIyLjA5Mzc1IEMgMTEuODM5ODQ0IDIxLjcxNDg0NCAxMi44NzUgMjEuNTYyNSAxMy43MTg3NSAyMC43MTg3NSBDIDE0LjQ1MzEyNSAxOS45ODQzNzUgMTQuNjc1NzgxIDE5LjExNzE4OCAxNC45Njg3NSAxOC42MjUgQyAxNS4yNjE3MTkgMTguMTMyODEzIDE1LjMzMjAzMSAxOCAxNiAxOCBaIi8+PC9zdmc+";
var food_drink = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZD0iTSAxMSAzIEwgMTEgNyBMIDEzIDcgTCAxMyAzIFogTSAxNSA0IEwgMTUgNyBMIDE3IDcgTCAxNyA0IFogTSA0Ljg3NSA4IEwgNSA5LjA5Mzc1IEwgNi44MTI1IDI2LjMxMjUgQyA2Ljk3MjY1NiAyNy44MzIwMzEgOC4yODUxNTYgMjkgOS44MTI1IDI5IEwgMTkuMTg3NSAyOSBDIDIwLjcxNDg0NCAyOSAyMi4wMjczNDQgMjcuODMyMDMxIDIyLjE4NzUgMjYuMzEyNSBMIDIyLjY1NjI1IDIyIEwgMjUgMjIgQyAyNi42NDQ1MzEgMjIgMjggMjAuNjQ0NTMxIDI4IDE5IEwgMjggMTYgQyAyOCAxNC4zNTU0NjkgMjYuNjQ0NTMxIDEzIDI1IDEzIEwgMjMuNTkzNzUgMTMgTCAyNCA5LjA5Mzc1IEwgMjQuMTI1IDggWiBNIDcuMTI1IDEwIEwgMjEuODc1IDEwIEwgMjAuMTg3NSAyNi4wOTM3NSBDIDIwLjEzMjgxMyAyNi42MTMyODEgMTkuNzA3MDMxIDI3IDE5LjE4NzUgMjcgTCA5LjgxMjUgMjcgQyA5LjI5Mjk2OSAyNyA4Ljg2NzE4OCAyNi42MTMyODEgOC44MTI1IDI2LjA5Mzc1IFogTSAyMy4zNzUgMTUgTCAyNSAxNSBDIDI1LjU2NjQwNiAxNSAyNiAxNS40MzM1OTQgMjYgMTYgTCAyNiAxOSBDIDI2IDE5LjU2NjQwNiAyNS41NjY0MDYgMjAgMjUgMjAgTCAyMi44NDM3NSAyMCBaIi8+PC9zdmc+";
var activities = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZD0iTSAxNiAzIEMgOC44MzIwMzEgMyAzIDguODMyMDMxIDMgMTYgQyAzIDIzLjE2Nzk2OSA4LjgzMjAzMSAyOSAxNiAyOSBDIDIzLjE2Nzk2OSAyOSAyOSAyMy4xNjc5NjkgMjkgMTYgQyAyOSA4LjgzMjAzMSAyMy4xNjc5NjkgMyAxNiAzIFogTSAxNiA1IEMgMTYuNjAxNTYzIDUgMTcuMTc1NzgxIDUuMDYyNSAxNy43NSA1LjE1NjI1IEwgMTYgNi40MDYyNSBMIDE0LjI1IDUuMTU2MjUgQyAxNC44MjAzMTMgNS4wNjY0MDYgMTUuNDAyMzQ0IDUgMTYgNSBaIE0gMTEuODEyNSA1Ljg0Mzc1IEwgMTUuNDA2MjUgOC40Njg3NSBMIDE2IDguOTA2MjUgTCAxNi41OTM3NSA4LjQ2ODc1IEwgMjAuMTg3NSA1Ljg0Mzc1IEMgMjEuNzg1MTU2IDYuNTA3ODEzIDIzLjE5NTMxMyA3LjUyMzQzOCAyNC4zMTI1IDguODEyNSBMIDIyLjkzNzUgMTMuMDkzNzUgTCAyMi43MTg3NSAxMy43ODEyNSBMIDIzLjMxMjUgMTQuMTg3NSBMIDI2LjkzNzUgMTYuODQzNzUgQyAyNi44MDQ2ODggMTguNjA1NDY5IDI2LjI2NTYyNSAyMC4yNTc4MTMgMjUuNDA2MjUgMjEuNjg3NSBMIDIwLjEyNSAyMS42ODc1IEwgMTkuOTA2MjUgMjIuMzc1IEwgMTguNSAyNi43MTg3NSBDIDE3LjY5OTIxOSAyNi45MDYyNSAxNi44NTkzNzUgMjcgMTYgMjcgQyAxNS4xMDU0NjkgMjcgMTQuMjM4MjgxIDI2Ljg4NjcxOSAxMy40MDYyNSAyNi42ODc1IEwgMTIuMDMxMjUgMjIuNDA2MjUgTCAxMS44MTI1IDIxLjcxODc1IEwgNi41OTM3NSAyMS43MTg3NSBDIDUuNzE4NzUgMjAuMjgxMjUgNS4xOTkyMTkgMTguNjIxMDk0IDUuMDYyNSAxNi44NDM3NSBMIDguNjU2MjUgMTQuMjE4NzUgTCA5LjI1IDEzLjgxMjUgTCA5LjAzMTI1IDEzLjEyNSBMIDcuNjI1IDguODc1IEMgOC43NSA3LjU1NDY4OCAxMC4xODM1OTQgNi41MTU2MjUgMTEuODEyNSA1Ljg0Mzc1IFogTSAxNiAxMC4wOTM3NSBMIDE1LjQwNjI1IDEwLjUzMTI1IEwgMTAuODQzNzUgMTMuODQzNzUgTCAxMC4yODEyNSAxNC4yODEyNSBMIDEwLjUgMTQuOTY4NzUgTCAxMi4yNSAyMC4zMTI1IEwgMTIuNDY4NzUgMjEgTCAxOS41MzEyNSAyMSBMIDE5Ljc1IDIwLjMxMjUgTCAyMS41IDE0Ljk2ODc1IEwgMjEuNzE4NzUgMTQuMjgxMjUgTCAyMS4xNTYyNSAxMy44NDM3NSBMIDE2LjU5Mzc1IDEwLjUzMTI1IFogTSAyNS43NSAxMC45MDYyNSBDIDI2LjI5Njg3NSAxMS45NTMxMjUgMjYuNjU2MjUgMTMuMTAxNTYzIDI2Ljg0Mzc1IDE0LjMxMjUgTCAyNS4wNjI1IDEzLjAzMTI1IFogTSA2LjIxODc1IDEwLjk2ODc1IEwgNi45MDYyNSAxMy4wMzEyNSBMIDUuMTU2MjUgMTQuMzEyNSBDIDUuMzM5ODQ0IDEzLjEyNSA1LjY4NzUgMTIgNi4yMTg3NSAxMC45Njg3NSBaIE0gMTYgMTIuNTkzNzUgTCAxOS4zNzUgMTUuMDMxMjUgTCAxOC4wOTM3NSAxOSBMIDEzLjkwNjI1IDE5IEwgMTIuNjI1IDE1LjAzMTI1IFogTSAyMS41OTM3NSAyMy42ODc1IEwgMjMuODQzNzUgMjMuNjg3NSBDIDIyLjk5MjE4OCAyNC41NjY0MDYgMjIuMDExNzE5IDI1LjI5Mjk2OSAyMC45MDYyNSAyNS44NDM3NSBaIE0gOC4xNTYyNSAyMy43MTg3NSBMIDEwLjM0Mzc1IDIzLjcxODc1IEwgMTEuMDMxMjUgMjUuODEyNSBDIDkuOTYwOTM4IDI1LjI2OTUzMSA4Ljk4ODI4MSAyNC41NjI1IDguMTU2MjUgMjMuNzE4NzUgWiIvPjwvc3ZnPg==";
var travel_places = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZD0iTSA5LjUgNiBDIDguMTc5Njg4IDYgNy4wMDM5MDYgNi44NTkzNzUgNi42MjUgOC4xMjUgTCA1LjI1IDEyLjcxODc1IEwgMy4zMTI1IDEyLjA2MjUgTCAyLjY4NzUgMTMuOTM3NSBMIDQuNjU2MjUgMTQuNTkzNzUgTCA0LjAzMTI1IDE2LjcxODc1IEMgNC4wMDc4MTMgMTYuODA4NTk0IDMuOTk2MDk0IDE2LjkwNjI1IDQgMTcgTCA0IDI0IEMgNCAyNC4wMzEyNSA0IDI0LjA2MjUgNCAyNC4wOTM3NSBMIDQgMjUgQyA0IDI1LjU1MDc4MSA0LjQ0OTIxOSAyNiA1IDI2IEwgOCAyNiBMIDguMzQzNzUgMjUgTCAyMy42NTYyNSAyNSBMIDI0IDI2IEwgMjcgMjYgQyAyNy41NTA3ODEgMjYgMjggMjUuNTUwNzgxIDI4IDI1IEwgMjggMjQuMTU2MjUgQyAyOC4wMDM5MDYgMjQuMTA1NDY5IDI4LjAwMzkwNiAyNC4wNTA3ODEgMjggMjQgTCAyOCAxNyBDIDI4LjAwMzkwNiAxNi45MDYyNSAyNy45OTIxODggMTYuODA4NTk0IDI3Ljk2ODc1IDE2LjcxODc1IEwgMjcuMzQzNzUgMTQuNTkzNzUgTCAyOS4zMTI1IDEzLjkzNzUgTCAyOC42ODc1IDEyLjA2MjUgTCAyNi43NSAxMi43MTg3NSBMIDI1LjM3NSA4LjEyNSBDIDI0Ljk5NjA5NCA2Ljg1OTM3NSAyMy44MjAzMTMgNiAyMi41IDYgWiBNIDkuNSA4IEwgMjIuNSA4IEMgMjIuOTQ1MzEzIDggMjMuMzM5ODQ0IDguMjkyOTY5IDIzLjQ2ODc1IDguNzE4NzUgTCAyNC43NSAxMyBMIDcuMjUgMTMgTCA4LjUzMTI1IDguNzE4NzUgQyA4LjY2MDE1NiA4LjI4OTA2MyA5LjA1NDY4OCA4IDkuNSA4IFogTSA2LjY1NjI1IDE1IEwgMjUuMzQzNzUgMTUgTCAyNiAxNy4xODc1IEwgMjYgMjMgTCA2IDIzIEwgNiAxNy4xODc1IFogTSA4LjUgMTYgQyA3LjY3MTg3NSAxNiA3IDE2LjY3MTg3NSA3IDE3LjUgQyA3IDE4LjMyODEyNSA3LjY3MTg3NSAxOSA4LjUgMTkgQyA5LjMyODEyNSAxOSAxMCAxOC4zMjgxMjUgMTAgMTcuNSBDIDEwIDE2LjY3MTg3NSA5LjMyODEyNSAxNiA4LjUgMTYgWiBNIDIzLjUgMTYgQyAyMi42NzE4NzUgMTYgMjIgMTYuNjcxODc1IDIyIDE3LjUgQyAyMiAxOC4zMjgxMjUgMjIuNjcxODc1IDE5IDIzLjUgMTkgQyAyNC4zMjgxMjUgMTkgMjUgMTguMzI4MTI1IDI1IDE3LjUgQyAyNSAxNi42NzE4NzUgMjQuMzI4MTI1IDE2IDIzLjUgMTYgWiBNIDEyIDE5IEwgMTAuNzUgMjIgTCAxMi45MDYyNSAyMiBMIDEzLjM0Mzc1IDIxIEwgMTguNjU2MjUgMjEgTCAxOS4wOTM3NSAyMiBMIDIxLjI1IDIyIEwgMjAgMTkgWiIvPjwvc3ZnPg==";
var objects = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZD0iTSAxNiA0IEMgMTEuMDQyOTY5IDQgNyA4LjA0Mjk2OSA3IDEzIEMgNyAxNC45MTc5NjkgNy44NDM3NSAxNi45MDYyNSA5IDE4LjY4NzUgQyA5Ljg1OTM3NSAyMC4wMTE3MTkgMTAuODg2NzE5IDIxLjIzMDQ2OSAxMiAyMi4xNTYyNSBMIDEyIDI1IEMgMTIgMjYuMDkzNzUgMTIuOTA2MjUgMjcgMTQgMjcgTCAxNSAyOCBMIDE3IDI4IEwgMTggMjcgQyAxOS4wOTM3NSAyNyAyMCAyNi4wOTM3NSAyMCAyNSBMIDIwIDIyLjE1NjI1IEMgMjEuMTEzMjgxIDIxLjIzMDQ2OSAyMi4xNDA2MjUgMjAuMDExNzE5IDIzIDE4LjY4NzUgQyAyNC4xNTYyNSAxNi45MDYyNSAyNSAxNC45MTc5NjkgMjUgMTMgQyAyNSA4LjA0Mjk2OSAyMC45NTcwMzEgNCAxNiA0IFogTSAxNiA2IEMgMTkuODc4OTA2IDYgMjMgOS4xMjEwOTQgMjMgMTMgQyAyMyAxNC4zMDg1OTQgMjIuMzU1NDY5IDE2LjAzNTE1NiAyMS4zNDM3NSAxNy41OTM3NSBDIDIwLjQ0MTQwNiAxOC45ODQzNzUgMTkuMjUzOTA2IDIwLjIyMjY1NiAxOC4xNTYyNSAyMSBMIDEzLjg0Mzc1IDIxIEMgMTIuNzQ2MDk0IDIwLjIyMjY1NiAxMS41NTg1OTQgMTguOTg0Mzc1IDEwLjY1NjI1IDE3LjU5Mzc1IEMgOS42NDQ1MzEgMTYuMDM1MTU2IDkgMTQuMzA4NTk0IDkgMTMgQyA5IDkuMTIxMDk0IDEyLjEyMTA5NCA2IDE2IDYgWiBNIDE0LjI1IDIzIEwgMTcuNzUgMjMgQyAxNy44MjgxMjUgMjMuMDU0Njg4IDE3LjkxMDE1NiAyMy4wOTM3NSAxOCAyMy4xMjUgTCAxOCAyNSBMIDE0IDI1IEwgMTQgMjMuMTI1IEMgMTQuMDg5ODQ0IDIzLjA5Mzc1IDE0LjE3MTg3NSAyMy4wNTQ2ODggMTQuMjUgMjMgWiIvPjwvc3ZnPg==";
var symbols = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZD0iTSAxMSA1IEwgMTEgMTEgTCA1IDExIEwgNSAxMyBMIDExIDEzIEwgMTEgMTkgTCA1IDE5IEwgNSAyMSBMIDExIDIxIEwgMTEgMjcgTCAxMyAyNyBMIDEzIDIxIEwgMTkgMjEgTCAxOSAyNyBMIDIxIDI3IEwgMjEgMjEgTCAyNyAyMSBMIDI3IDE5IEwgMjEgMTkgTCAyMSAxMyBMIDI3IDEzIEwgMjcgMTEgTCAyMSAxMSBMIDIxIDUgTCAxOSA1IEwgMTkgMTEgTCAxMyAxMSBMIDEzIDUgWiBNIDEzIDEzIEwgMTkgMTMgTCAxOSAxOSBMIDEzIDE5IFoiLz48L3N2Zz4=";
var flags = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZD0iTSA5IDQgQyA3LjM0NiA0IDYgNS4zNDYgNiA3IEMgNiA4LjMwMTYwOTQgNi44Mzg3NDg2IDkuNDAyMTM5MSA4IDkuODE2NDA2MiBMIDggMTEuMzA0Njg4IEwgOCAyMy4yMDcwMzEgTCA4IDI3LjAyMzQzOCBDIDggMjcuNTYzNDM4IDguNDM2NTYyNSAyOCA4Ljk3NjU2MjUgMjggTCA5LjAyMzQzNzUgMjggQyA5LjU2MzQzNzUgMjggMTAgMjcuNTYzNDM3IDEwIDI3LjAyMzQzOCBMIDEwIDIyLjIyODUxNiBDIDEwLjMzNDcwNyAyMS44Mzk3NTYgMTEuMTM4NDIzIDIxLjA0Njg3NSAxMy40NDUzMTIgMjEuMDQ2ODc1IEMgMTQuNjY5MzEzIDIxLjA0Njg3NSAxNS42NzA0MjIgMjEuNDczNzgxIDE2LjczMjQyMiAyMS45MjU3ODEgQyAxNy43Njk0MjIgMjIuMzY3NzgxIDE4Ljg0MTg5MSAyMi44MjQyMTkgMjAuMDg3ODkxIDIyLjgyNDIxOSBDIDIyLjQ0Njg5MSAyMi44MjQyMTkgMjQuMDQ5Mzc1IDIxLjU4NDY4OCAyNC43MzQzNzUgMjEuMDU0Njg4IEwgMjQuODg2NzE5IDIwLjkzOTQ1MyBDIDI1LjQzNzcxOSAyMC41NDA0NTMgMjYgMTkuOTk2IDI2IDE5IEwgMjYgMTAuNjc1NzgxIEMgMjYgOS43Njc3ODEyIDI1LjIyMTgyOCA5IDI0LjI5ODgyOCA5IEMgMjMuODAzODI4IDkgMjMuNDQwNDA2IDkuMjg2NTkzNyAyMi45NDE0MDYgOS42ODM1OTM4IEMgMjIuMjc5NDA2IDEwLjIwNzU5NCAyMS4yODA4OTEgMTEgMjAuMDg3ODkxIDExIEMgMTkuMjcyODkxIDExIDE4LjQ3NzY4OCAxMC42MTk3MzQgMTcuNTU0Njg4IDEwLjE3NzczNCBDIDE2LjQwMzY4NyA5LjYyNTczNDQgMTUuMDk4MzU5IDkgMTMuNDQzMzU5IDkgQyAxMi4zMDgyNTcgOSAxMS40MjE2ODcgOS4xODgzMzkzIDEwLjcxMjg5MSA5LjQ1NzAzMTIgQyAxMS40ODkwNzEgOC45MTQxODI0IDEyIDguMDE2NzgwMiAxMiA3IEMgMTIgNS4zNDYgMTAuNjU0IDQgOSA0IHogTSA5IDYgQyA5LjU1MiA2IDEwIDYuNDQ5IDEwIDcgQyAxMCA3LjU1MSA5LjU1MiA4IDkgOCBDIDguNDQ4IDggOCA3LjU1MSA4IDcgQyA4IDYuNDQ5IDguNDQ4IDYgOSA2IHogTSAxMy40NDMzNTkgMTEgQyAxNC42NDUzNTkgMTEgMTUuNjM4NDA2IDExLjQ3NjQ2OSAxNi42OTE0MDYgMTEuOTgwNDY5IEMgMTcuNzM2NDA2IDEyLjQ4MjQ2OSAxOC44MTc4OTEgMTMgMjAuMDg3ODkxIDEzIEMgMjEuODQyODkxIDEzIDIzLjE1ODA0NyAxMi4wNTQ0ODQgMjMuOTk4MDQ3IDExLjM5NjQ4NCBMIDIzLjk5ODA0NyAxOS4wNjY0MDYgQyAyMy45OTcwNDcgMTkuMDcwNDA2IDIzLjk1Mjk4NCAxOS4xNDUyNjYgMjMuNzA4OTg0IDE5LjMyMjI2NiBMIDIzLjUwOTc2NiAxOS40NzQ2MDkgQyAyMi45NDI3NjYgMTkuOTEyNjA5IDIxLjc2Mjg5MSAyMC44MjQyMTkgMjAuMDg3ODkxIDIwLjgyNDIxOSBDIDE5LjI0OTg5MSAyMC44MjQyMTkgMTguNDQ2NjI1IDIwLjQ4MjkzNyAxNy41MTU2MjUgMjAuMDg1OTM4IEMgMTYuMzcyNjI1IDE5LjU5NzkzOCAxNS4wNzYzNTkgMTkuMDQ0OTIyIDEzLjQ0MzM1OSAxOS4wNDQ5MjIgQyAxMS44OTEzNTkgMTkuMDQ0OTIyIDEwLjc4NiAxOS4zNTggMTAgMTkuNzUgTCAxMCAxMi4zNjEzMjggQyAxMC4zNDUgMTEuOTA1MzI4IDExLjEzMjM1OSAxMSAxMy40NDMzNTkgMTEgeiIvPjwvc3ZnPg==";
var recent = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHBhdGggZD0iTSAxNiA0IEMgMTEuODMyMDMxIDQgOC4xNTIzNDQgNi4xMTMyODEgNiA5LjM0Mzc1IEwgNiA2IEwgNCA2IEwgNCAxMyBMIDExIDEzIEwgMTEgMTEgTCA3LjM3NSAxMSBDIDkuMTAxNTYzIDguMDE5NTMxIDEyLjI5Njg3NSA2IDE2IDYgQyAyMS41MzUxNTYgNiAyNiAxMC40NjQ4NDQgMjYgMTYgQyAyNiAyMS41MzUxNTYgMjEuNTM1MTU2IDI2IDE2IDI2IEMgMTAuNDY0ODQ0IDI2IDYgMjEuNTM1MTU2IDYgMTYgTCA0IDE2IEMgNCAyMi42MTcxODggOS4zODI4MTMgMjggMTYgMjggQyAyMi42MTcxODggMjggMjggMjIuNjE3MTg4IDI4IDE2IEMgMjggOS4zODI4MTMgMjIuNjE3MTg4IDQgMTYgNCBaIE0gMTUgOCBMIDE1IDE3IEwgMjIgMTcgTCAyMiAxNSBMIDE3IDE1IEwgMTcgOCBaIi8+PC9zdmc+DQo=";
const _sfc_main$3 = defineComponent({
name: "Header",
setup(props) {
const { state, updateSearch, updateActiveGroup } = inject("store");
const groupNames = toRaw(state.options.groupNames);
const hasSearch = computed(() => !state.options.hideSearch);
const hasGroupIcons = computed(() => !state.options.hideGroupIcons);
const orderedKeys = JSON.parse(JSON.stringify(state.orderedGroupKeys));
const placeholder = computed(
() => state.options.staticTexts.placeholder || ""
);
const searchValue = computed({
get: () => state.search,
set: (value) => updateSearch(value)
});
const groups = [
...state.groups,
...Object.keys(state.options.additionalGroups).map((g) => ({
key: g,
title: state.options.groupNames[g] ? state.options.groupNames[g] : snakeToCapitalizedCase(g)
}))
];
const orderedGroups = [];
orderedKeys.forEach((key) => {
const index2 = groups.findIndex((group) => group.key === key);
if (index2 === -1)
return;
orderedGroups.push(groups[index2]);
groups.splice(index2, 1);
});
return {
orderedGroups,
orderedKeys,
searchValue,
updateActiveGroup,
hasSearch,
hasGroupIcons,
placeholder,
groupNames,
icons: {
smileys_people,
animals_nature,
food_drink,
activities,
travel_places,
objects,
symbols,
flags,
...state.options.groupIcons,
recent
}
};
}
});
const _hoisted_1$2 = {
key: 0,
class: "v3-header"
};
const _hoisted_2$2 = {
key: 0,
class: "v3-groups"
};
const _hoisted_3$2 = ["onClick"];
const _hoisted_4$2 = ["title"];
const _hoisted_5$2 = ["src"];
const _hoisted_6$1 = {
key: 1,
class: "v3-spacing"
};
const _hoisted_7 = {
key: 2,
class: "v3-search"
};
const _hoisted_8 = ["placeholder"];
function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
return _ctx.hasGroupIcons || _ctx.hasSearch ? (openBlock(), createElementBlock("div", _hoisted_1$2, [
_ctx.hasGroupIcons ? (openBlock(), createElementBlock("div", _hoisted_2$2, [
(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.orderedGroups, (group) => {
return openBlock(), createElementBlock("button", {
key: group.key,
type: "button",
class: normalizeClass(["v3-group", {
"v3-is-hidden": !_ctx.icons[group.key]
}]),
onClick: ($event) => _ctx.updateActiveGroup(group.key)
}, [
createElementVNode("span", {
title: _ctx.groupNames[group.key] || group.title,
class: "v3-icon"
}, [
createElementVNode("img", {
src: _ctx.icons[group.key],
alt: ""
}, null, 8, _hoisted_5$2)
], 8, _hoisted_4$2)
], 10, _hoisted_3$2);
}), 128))
])) : createCommentVNode("", true),
_ctx.hasGroupIcons && _ctx.hasSearch ? (openBlock(), createElementBlock("div", _hoisted_6$1)) : createCommentVNode("", true),
_ctx.hasSearch ? (openBlock(), createElementBlock("div", _hoisted_7, [
withDirectives(createElementVNode("input", {
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.searchValue = $event),
type: "text",
placeholder: _ctx.placeholder
}, null, 8, _hoisted_8), [
[vModelText, _ctx.searchValue]
])
])) : createCommentVNode("", true)
])) : createCommentVNode("", true);
}
var Header = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$3]]);
const _sfc_main$2 = defineComponent({
name: "Header",
setup() {
const { state, updateSkinTone } = inject("store");
const skinTone = ref(false);
const hasError = ref(false);
const stateSkinTone = computed(() => state.skinTone);
const skinToneText = computed(
() => state.options.staticTexts.skinTone || "Skin tone"
);
const hasSkinTones = computed(() => !state.options.disableSkinTones);
const hasEmojiCode = computed(() => !state.options.disableEmojiCode);
const platform = isMac() ? "is-mac" : "";
const emoji = computed(() => {
return {
...state.emoji,
src: EMOJI_REMOTE_SRC + "/" + state.emoji[EMOJI_RESULT_KEY] + ".png"
};
});
function updateSkinToneState(open = true) {
skinTone.value = open;
}
function toggleSkinToneState() {
skinTone.value = !skinTone.value;
}
function selectSkinTone(tone) {
updateSkinTone(tone);
updateSkinToneState(false);
}
watch(
() => state.emoji,
() => {
hasError.value = false;
}
);
return {
emoji,
SKIN_TONES,
updateSkinToneState,
skinTone,
stateSkinTone,
selectSkinTone,
toggleSkinToneState,
EMOJI_RESULT_KEY,
EMOJI_NAME_KEY,
skinToneText,
hasSkinTones,
native: state.options.native,
unicodeToEmoji,
platform,
hasError,
hasEmojiCode
};
}
});
const _hoisted_1$1 = { class: "v3-foot-left" };
const _hoisted_2$1 = { key: 0 };
const _hoisted_3$1 = ["alt", "src"];
const _hoisted_4$1 = { class: "v3-text" };
const _hoisted_5$1 = { class: "v3-text" };
const _hoisted_6 = ["onClick"];
function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
return openBlock(), createElementBlock("div", {
class: "v3-footer",
onMouseleave: _cache[2] || (_cache[2] = ($event) => _ctx.updateSkinToneState(false))
}, [
createElementVNode("div", _hoisted_1$1, [
_ctx.hasEmojiCode ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
createElementVNode("span", {
class: normalizeClass([_ctx.platform, "v3-icon"])
}, [
_ctx.native || _ctx.hasError ? (openBlock(), createElementBlock("span", _hoisted_2$1, toDisplayString(_ctx.unicodeToEmoji(_ctx.emoji.r)), 1)) : (openBlock(), createElementBlock("img", {
key: 1,
alt: _ctx.unicodeToEmoji(_ctx.emoji.r),
src: _ctx.emoji.src,
onError: _cache[0] || (_cache[0] = ($event) => _ctx.hasError = true)
}, null, 40, _hoisted_3$1))
], 2),
createElementVNode("span", _hoisted_4$1, " :" + toDisplayString(_ctx.emoji[_ctx.EMOJI_NAME_KEY][1] || _ctx.emoji[_ctx.EMOJI_NAME_KEY][0]) + ": ", 1)
], 64)) : createCommentVNode("", true)
]),
_ctx.hasSkinTones ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
createElementVNode("button", {
type: "button",
class: "v3-tone",
onClick: _cache[1] || (_cache[1] = (...args) => _ctx.toggleSkinToneState && _ctx.toggleSkinToneState(...args))
}, [
createElementVNode("span", _hoisted_5$1, toDisplayString(_ctx.skinToneText), 1),
createElementVNode("span", {
class: normalizeClass(`v3-icon v3-tone-${_ctx.stateSkinTone}`)
}, null, 2)
]),
createElementVNode("div", {
class: normalizeClass([_ctx.skinTone ? "v3-is-open" : "", "v3-skin-tones"])
}, [
(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.SKIN_TONES, (tone) => {
return openBlock(), createElementBlock("button", {
key: tone,
type: "button",
class: normalizeClass(["v3-skin-tone-" + tone, "v3-skin-tone"]),
onClick: ($event) => _ctx.selectSkinTone(tone)
}, null, 10, _hoisted_6);
}), 128))
], 2)
], 64)) : createCommentVNode("", true)
], 32);
}
var Footer = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2]]);
const _sfc_main$1 = defineComponent({
name: "PickerRoot",
components: {
Header,
Body,
Footer
},
props: {
type: {
type: String,
default: ""
},
text: {
type: String,
default: ""
},
additionalGroups: {
type: Object,
default: () => ({})
},
groupOrder: {
type: Array,
default: () => []
},
groupIcons: {
type: Object,
default: () => ({})
},
groupNames: {
type: Object,
default: () => ({})
}
},
emits: {
select: (emoji) => true,
"update:text": (value) => true
},
setup(props, { emit }) {
const elem = ref();
const button = ref();
const picker = ref();
const open = ref(false);
const input = ref(props.text);
const isInputType = props.type === "input" || props.type === "textarea";
let cursor = -1;
const { state } = inject("store");
const colorTheme = computed(() => state.options.colorTheme);
function onSelect(emoji) {
if (isInputType) {
const mode = state.options.mode;
if (mode === "prepend") {
input.value = emoji.i + input.value;
} else if (mode === "insert" && cursor !== -1) {
input.value = `${input.value.slice(0, cursor)}${emoji.i}${input.value.slice(cursor)}`;
cursor += emoji.i.length;
} else {
input.value += emoji.i;
}
emit("update:text", input.value);
}
emit("select", emoji);
}
function updateCursor() {
var _a;
if (elem.value) {
cursor = ((_a = elem.value) == null ? void 0 : _a.selectionEnd) || -1;
}
}
function clickListener(event) {
var _a;
const isOutside = !((_a = event.target) == null ? void 0 : _a.closest(
".v3-input-picker-wrap"
));
if (isOutside && open.value) {
open.value = false;
}
}
function setupPopper() {
if (button.value && picker.value && isInputType) {
let offset2 = state.options.offset;
if (typeof offset2 !== "number") {
offset2 = 6;
}
createPopper(button.value, picker.value, {
placement: "bottom-end",
modifiers: [
{
name: "offset",
options: {
offset: [0, offset2]
}
}
]
});
document.body.addEventListener("click", clickListener);
}
}
function onChangeText(event) {
input.value = event.target.value || "";
emit("update:text", input.value);
}
onMounted(() => {
setupPopper();
});
onBeforeUnmount(() => {
document.body.removeEventListener("click", clickListener);
});
return {
face: smileys_people,
open,
onSelect,
input,
elem,
updateCursor,
button,
picker,
isInputType,
onChangeText,
colorTheme
};
}
});
const _hoisted_1 = {
key: 0,
class: "v3-input-emoji-picker"
};
const _hoisted_2 = { class: "v3-input-picker-root" };
const _hoisted_3 = ["value"];
const _hoisted_4 = ["value"];
const _hoisted_5 = ["src"];
function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
const _component_Header = resolveComponent("Header");
const _component_Body = resolveComponent("Body");
const _component_Footer = resolveComponent("Footer");
return _ctx.isInputType ? (openBlock(), createElementBlock("div", _hoisted_1, [
createElementVNode("div", _hoisted_2, [
_ctx.type === "input" ? (openBlock(), createElementBlock("input", {
key: 0,
ref: "elem",
value: _ctx.input,
type: "text",
class: "v3-emoji-picker-input",
onInput: _cache[0] || (_cache[0] = (...args) => _ctx.onChangeText && _ctx.onChangeText(...args)),
onBlur: _cache[1] || (_cache[1] = (...args) => _ctx.updateCursor && _ctx.updateCursor(...args))
}, null, 40, _hoisted_3)) : (openBlock(), createElementBlock("textarea", {
key: 1,
ref: "elem",
value: _ctx.input,
class: "v3-emoji-picker-textarea",
onInput: _cache[2] || (_cache[2] = (...args) => _ctx.onChangeText && _ctx.onChangeText(...args)),
onBlur: _cache[3] || (_cache[3] = (...args) => _ctx.updateCursor && _ctx.updateCursor(...args))
}, null, 40, _hoisted_4)),
createElementVNode("div", {
class: normalizeClass(["v3-input-picker-wrap", _ctx.open ? "v3-picker-is-open" : ""])
}, [
createElementVNode("button", {
ref: "button",
type: "button",
class: "v3-input-picker-icon",
onClick: _cache[4] || (_cache[4] = ($event) => _ctx.open = !_ctx.open)
}, [
createElementVNode("img", {
src: _ctx.face,
alt: ""
}, null, 8, _hoisted_5)
], 512),
createElementVNode("div", {
ref: "picker",
class: normalizeClass(["v3-emoji-picker", "v3-color-theme-" + _ctx.colorTheme])
}, [
createVNode(_component_Header),
createVNode(_component_Body, { onSelect: _ctx.onSelect }, null, 8, ["onSelect"]),
createVNode(_component_Footer)
], 2)
], 2)
])
])) : (openBlock(), createElementBlock("div", {
key: 1,
class: normalizeClass(["v3-emoji-picker", "v3-color-theme-" + _ctx.colorTheme])
}, [
createVNode(_component_Header),
createVNode(_component_Body, { onSelect: _ctx.onSelect }, null, 8, ["onSelect"]),
createVNode(_component_Footer)
], 2));
}
var PickerRoot = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1]]);
const _sfc_main = defineComponent({
name: "Picker",
components: {
PickerRoot
},
props: {
native: {
type: Boolean,
default: false
},
hideSearch: {
type: Boolean,
default: false
},
hideGroupIcons: {
type: Boolean,
default: false
},
hideGroupNames: {
type: Boolean,
default: false
},
staticTexts: {
type: Object,
default: () => ({})
},
disableStickyGroupNames: {
type: Boolean,
default: false
},
disabledGroups: {
type: Array,
default: () => []
},
groupNames: {
type: Object,
default: () => ({})
},
disableSkinTones: {
type: Boolean,
default: false
},
disableEmojiCode: {
type: Boolean,
default: false
},
text: {
type: String,
default: ""
},
mode: {
type: String,
default: "insert"
},
offset: {
type: Number,
default: 6
},
additionalGroups: {
type: Object,
default: () => ({})
},
groupOrder: {
type: Array,
default: () => []
},
groupIcons: {
type: Object,
default: () => ({})
},
pickerType: {
type: String,
default: ""
},
displayRecent: {
type: Boolean,
default: false
},
theme: {
type: String,
default: "light"
}
},
emits: {
"update:text": (text) => true,
select: (emoji) => true
},
setup(props, { emit }) {
const input = ref(props.text);
function onChangeText(text) {
input.value = text || "";
emit("update:text", input.value);
}
const store = Store();
store.updateOptions({
native: props.native,
hideSearch: props.hideSearch,
hideGroupIcons: props.hideGroupIcons,
hideGroupNames: props.hideGroupNames,
staticTexts: { ...STATIC_TEXTS, ...props.staticTexts },
disableStickyGroupNames: props.disableStickyGroupNames,
disabledGroups: props.disabledGroups,
groupNames: { ...GROUP_NAMES, ...props.groupNames },
disableSkinTones: props.disableSkinTones,
disableEmojiCode: props.disableEmojiCode,
displayRecent: props.displayRecent,
additionalGroups: props.additionalGroups,
mode: props.mode,
offset: props.offset,
groupOrder: props.groupOrder,
groupIcons: props.groupIcons,
colorTheme: COLOR_THEMES.includes(props.theme) ? props.theme : "light"
});
provide("store", store);
return {
type: props.pickerType,
input,
onChangeText
};
}
});
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_picker_root = resolveComponent("picker-root");
return openBlock(), createBlock(_component_picker_root, {
type: _ctx.type,
text: _ctx.input,
onSelect: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("select", $event)),
"onUpdate:text": _ctx.onChangeText
}, null, 8, ["type", "text", "onUpdate:text"]);
}
var Picker = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
var index = "";
export { Picker as default };