mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-28 20:24:19 +00:00
Started working on flags.
This commit is contained in:
+148
-129
@@ -1,158 +1,177 @@
|
||||
import { ClientGameRunner, joinLobby } from "./ClientGameRunner";
|
||||
import backgroundImage from "../../resources/images/EuropeBackground.svg";
|
||||
import favicon from "../../resources/images/Favicon.svg";
|
||||
import { ClientGameRunner, joinLobby } from './ClientGameRunner';
|
||||
import backgroundImage from '../../resources/images/EuropeBackground.svg';
|
||||
import favicon from '../../resources/images/Favicon.svg';
|
||||
|
||||
import "./PublicLobby";
|
||||
import "./UsernameInput";
|
||||
import "./styles.css";
|
||||
import { UsernameInput } from "./UsernameInput";
|
||||
import { SinglePlayerModal } from "./SinglePlayerModal";
|
||||
import { HostLobbyModal as HostPrivateLobbyModal } from "./HostLobbyModal";
|
||||
import { JoinPrivateLobbyModal } from "./JoinPrivateLobbyModal";
|
||||
import { generateID } from "../core/Util";
|
||||
import { generateCryptoRandomUUID } from "./Utils";
|
||||
import { consolex } from "../core/Consolex";
|
||||
import './PublicLobby';
|
||||
import './UsernameInput';
|
||||
import './styles.css';
|
||||
import { UsernameInput } from './UsernameInput';
|
||||
import { SinglePlayerModal } from './SinglePlayerModal';
|
||||
import { HostLobbyModal as HostPrivateLobbyModal } from './HostLobbyModal';
|
||||
import { JoinPrivateLobbyModal } from './JoinPrivateLobbyModal';
|
||||
import { generateID } from '../core/Util';
|
||||
import { generateCryptoRandomUUID } from './Utils';
|
||||
import { consolex } from '../core/Consolex';
|
||||
import './components/FlagInput';
|
||||
import { FlagInput } from './components/FlagInput';
|
||||
|
||||
class Client {
|
||||
private gameStop: () => void;
|
||||
private gameStop: () => void;
|
||||
|
||||
private usernameInput: UsernameInput | null = null;
|
||||
private usernameInput: UsernameInput | null = null;
|
||||
private flagInput: FlagInput | null = null;
|
||||
|
||||
private joinModal: JoinPrivateLobbyModal;
|
||||
constructor() {}
|
||||
private joinModal: JoinPrivateLobbyModal;
|
||||
constructor() {}
|
||||
|
||||
initialize(): void {
|
||||
this.usernameInput = document.querySelector(
|
||||
"username-input"
|
||||
) as UsernameInput;
|
||||
if (!this.usernameInput) {
|
||||
consolex.warn("Username input element not found");
|
||||
}
|
||||
window.addEventListener("beforeunload", (event) => {
|
||||
consolex.log("Browser is closing");
|
||||
if (this.gameStop != null) {
|
||||
this.gameStop();
|
||||
}
|
||||
});
|
||||
initialize(): void {
|
||||
this.flagInput = document.querySelector('flag-input') as FlagInput;
|
||||
if (!this.flagInput) {
|
||||
consolex.warn('Flag input element not found');
|
||||
}
|
||||
|
||||
setFavicon();
|
||||
document.addEventListener("join-lobby", this.handleJoinLobby.bind(this));
|
||||
document.addEventListener("leave-lobby", this.handleLeaveLobby.bind(this));
|
||||
document.addEventListener(
|
||||
"single-player",
|
||||
this.handleSinglePlayer.bind(this)
|
||||
);
|
||||
this.usernameInput = document.querySelector(
|
||||
'username-input'
|
||||
) as UsernameInput;
|
||||
if (!this.usernameInput) {
|
||||
consolex.warn('Username input element not found');
|
||||
}
|
||||
window.addEventListener('beforeunload', (event) => {
|
||||
consolex.log('Browser is closing');
|
||||
if (this.gameStop != null) {
|
||||
this.gameStop();
|
||||
}
|
||||
});
|
||||
|
||||
const spModal = document.querySelector(
|
||||
"single-player-modal"
|
||||
) as SinglePlayerModal;
|
||||
spModal instanceof SinglePlayerModal;
|
||||
document.getElementById("single-player").addEventListener("click", () => {
|
||||
if (this.usernameInput.isValid()) {
|
||||
spModal.open();
|
||||
}
|
||||
});
|
||||
setFavicon();
|
||||
document.addEventListener(
|
||||
'join-lobby',
|
||||
this.handleJoinLobby.bind(this)
|
||||
);
|
||||
document.addEventListener(
|
||||
'leave-lobby',
|
||||
this.handleLeaveLobby.bind(this)
|
||||
);
|
||||
document.addEventListener(
|
||||
'single-player',
|
||||
this.handleSinglePlayer.bind(this)
|
||||
);
|
||||
|
||||
const hostModal = document.querySelector(
|
||||
"host-lobby-modal"
|
||||
) as HostPrivateLobbyModal;
|
||||
hostModal instanceof HostPrivateLobbyModal;
|
||||
document
|
||||
.getElementById("host-lobby-button")
|
||||
.addEventListener("click", () => {
|
||||
if (this.usernameInput.isValid()) {
|
||||
hostModal.open();
|
||||
}
|
||||
});
|
||||
const spModal = document.querySelector(
|
||||
'single-player-modal'
|
||||
) as SinglePlayerModal;
|
||||
spModal instanceof SinglePlayerModal;
|
||||
document
|
||||
.getElementById('single-player')
|
||||
.addEventListener('click', () => {
|
||||
if (this.usernameInput.isValid()) {
|
||||
spModal.open();
|
||||
}
|
||||
});
|
||||
|
||||
this.joinModal = document.querySelector(
|
||||
"join-private-lobby-modal"
|
||||
) as JoinPrivateLobbyModal;
|
||||
this.joinModal instanceof JoinPrivateLobbyModal;
|
||||
document
|
||||
.getElementById("join-private-lobby-button")
|
||||
.addEventListener("click", () => {
|
||||
if (this.usernameInput.isValid()) {
|
||||
this.joinModal.open();
|
||||
}
|
||||
});
|
||||
}
|
||||
const hostModal = document.querySelector(
|
||||
'host-lobby-modal'
|
||||
) as HostPrivateLobbyModal;
|
||||
hostModal instanceof HostPrivateLobbyModal;
|
||||
document
|
||||
.getElementById('host-lobby-button')
|
||||
.addEventListener('click', () => {
|
||||
if (this.usernameInput.isValid()) {
|
||||
hostModal.open();
|
||||
}
|
||||
});
|
||||
|
||||
private async handleJoinLobby(event: CustomEvent) {
|
||||
const lobby = event.detail.lobby;
|
||||
consolex.log(`joining lobby ${lobby.id}`);
|
||||
if (this.gameStop != null) {
|
||||
consolex.log("joining lobby, stopping existing game");
|
||||
this.gameStop();
|
||||
}
|
||||
this.gameStop = joinLobby(
|
||||
{
|
||||
gameType: event.detail.gameType,
|
||||
playerName: (): string => this.usernameInput.getCurrentUsername(),
|
||||
gameID: lobby.id,
|
||||
persistentID: getPersistentIDFromCookie(),
|
||||
playerID: generateID(),
|
||||
clientID: generateID(),
|
||||
map: event.detail.map,
|
||||
difficulty: event.detail.difficulty,
|
||||
disableBots: event.detail.disableBots,
|
||||
disableNPCs: event.detail.disableNPCs,
|
||||
},
|
||||
() => this.joinModal.close()
|
||||
);
|
||||
}
|
||||
this.joinModal = document.querySelector(
|
||||
'join-private-lobby-modal'
|
||||
) as JoinPrivateLobbyModal;
|
||||
this.joinModal instanceof JoinPrivateLobbyModal;
|
||||
document
|
||||
.getElementById('join-private-lobby-button')
|
||||
.addEventListener('click', () => {
|
||||
if (this.usernameInput.isValid()) {
|
||||
this.joinModal.open();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private async handleLeaveLobby(event: CustomEvent) {
|
||||
if (this.gameStop == null) {
|
||||
return;
|
||||
}
|
||||
consolex.log("leaving lobby, cancelling game");
|
||||
this.gameStop();
|
||||
this.gameStop = null;
|
||||
}
|
||||
private async handleJoinLobby(event: CustomEvent) {
|
||||
const lobby = event.detail.lobby;
|
||||
consolex.log(`joining lobby ${lobby.id}`);
|
||||
if (this.gameStop != null) {
|
||||
consolex.log('joining lobby, stopping existing game');
|
||||
this.gameStop();
|
||||
}
|
||||
this.gameStop = joinLobby(
|
||||
{
|
||||
gameType: event.detail.gameType,
|
||||
playerName: (): string =>
|
||||
this.usernameInput.getCurrentUsername(),
|
||||
gameID: lobby.id,
|
||||
persistentID: getPersistentIDFromCookie(),
|
||||
playerID: generateID(),
|
||||
clientID: generateID(),
|
||||
map: event.detail.map,
|
||||
difficulty: event.detail.difficulty,
|
||||
disableBots: event.detail.disableBots,
|
||||
disableNPCs: event.detail.disableNPCs,
|
||||
},
|
||||
() => this.joinModal.close()
|
||||
);
|
||||
}
|
||||
|
||||
private async handleSinglePlayer(event: CustomEvent) {
|
||||
alert("coming soon");
|
||||
}
|
||||
private async handleLeaveLobby(event: CustomEvent) {
|
||||
if (this.gameStop == null) {
|
||||
return;
|
||||
}
|
||||
consolex.log('leaving lobby, cancelling game');
|
||||
this.gameStop();
|
||||
this.gameStop = null;
|
||||
}
|
||||
|
||||
private async handleSinglePlayer(event: CustomEvent) {
|
||||
alert('coming soon');
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize the client when the DOM is loaded
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
new Client().initialize();
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
new Client().initialize();
|
||||
});
|
||||
|
||||
document.body.style.backgroundImage = `url(${backgroundImage})`;
|
||||
|
||||
function setFavicon(): void {
|
||||
const link = document.createElement("link");
|
||||
link.type = "image/x-icon";
|
||||
link.rel = "shortcut icon";
|
||||
link.href = favicon;
|
||||
document.head.appendChild(link);
|
||||
const link = document.createElement('link');
|
||||
link.type = 'image/x-icon';
|
||||
link.rel = 'shortcut icon';
|
||||
link.href = favicon;
|
||||
document.head.appendChild(link);
|
||||
}
|
||||
|
||||
// WARNING: DO NOT EXPOSE THIS ID
|
||||
export function getPersistentIDFromCookie(): string {
|
||||
const COOKIE_NAME = "player_persistent_id";
|
||||
const COOKIE_NAME = 'player_persistent_id';
|
||||
|
||||
// Try to get existing cookie
|
||||
const cookies = document.cookie.split(";");
|
||||
for (let cookie of cookies) {
|
||||
const [cookieName, cookieValue] = cookie.split("=").map((c) => c.trim());
|
||||
if (cookieName === COOKIE_NAME) {
|
||||
return cookieValue;
|
||||
}
|
||||
}
|
||||
// Try to get existing cookie
|
||||
const cookies = document.cookie.split(';');
|
||||
for (let cookie of cookies) {
|
||||
const [cookieName, cookieValue] = cookie
|
||||
.split('=')
|
||||
.map((c) => c.trim());
|
||||
if (cookieName === COOKIE_NAME) {
|
||||
return cookieValue;
|
||||
}
|
||||
}
|
||||
|
||||
// If no cookie exists, create new ID and set cookie
|
||||
const newID = generateCryptoRandomUUID();
|
||||
document.cookie = [
|
||||
`${COOKIE_NAME}=${newID}`,
|
||||
`max-age=${5 * 365 * 24 * 60 * 60}`, // 5 years
|
||||
"path=/",
|
||||
"SameSite=Strict",
|
||||
"Secure",
|
||||
].join(";");
|
||||
// If no cookie exists, create new ID and set cookie
|
||||
const newID = generateCryptoRandomUUID();
|
||||
document.cookie = [
|
||||
`${COOKIE_NAME}=${newID}`,
|
||||
`max-age=${5 * 365 * 24 * 60 * 60}`, // 5 years
|
||||
'path=/',
|
||||
'SameSite=Strict',
|
||||
'Secure',
|
||||
].join(';');
|
||||
|
||||
return newID;
|
||||
return newID;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
import { LitElement, html, css } from 'lit';
|
||||
import { customElement, property, state } from 'lit/decorators.js';
|
||||
import Countries from '../data/countries.json';
|
||||
|
||||
@customElement('flag-input')
|
||||
export class FlagInput extends LitElement {
|
||||
@state() private flag: string = '';
|
||||
|
||||
static styles = css``;
|
||||
|
||||
render() {
|
||||
return html`
|
||||
<div>
|
||||
<div class="selectIcon"></div>
|
||||
<div class="dropdown">
|
||||
<!-- Show each flag as button -->
|
||||
<div>
|
||||
<img class="flag" src=${'asd'} />
|
||||
<span>test</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,245 @@
|
||||
[
|
||||
{ "name": "Afghanistan", "code": "AF" },
|
||||
{ "name": "Åland Islands", "code": "AX" },
|
||||
{ "name": "Albania", "code": "AL" },
|
||||
{ "name": "Algeria", "code": "DZ" },
|
||||
{ "name": "American Samoa", "code": "AS" },
|
||||
{ "name": "AndorrA", "code": "AD" },
|
||||
{ "name": "Angola", "code": "AO" },
|
||||
{ "name": "Anguilla", "code": "AI" },
|
||||
{ "name": "Antarctica", "code": "AQ" },
|
||||
{ "name": "Antigua and Barbuda", "code": "AG" },
|
||||
{ "name": "Argentina", "code": "AR" },
|
||||
{ "name": "Armenia", "code": "AM" },
|
||||
{ "name": "Aruba", "code": "AW" },
|
||||
{ "name": "Australia", "code": "AU" },
|
||||
{ "name": "Austria", "code": "AT" },
|
||||
{ "name": "Azerbaijan", "code": "AZ" },
|
||||
{ "name": "Bahamas", "code": "BS" },
|
||||
{ "name": "Bahrain", "code": "BH" },
|
||||
{ "name": "Bangladesh", "code": "BD" },
|
||||
{ "name": "Barbados", "code": "BB" },
|
||||
{ "name": "Belarus", "code": "BY" },
|
||||
{ "name": "Belgium", "code": "BE" },
|
||||
{ "name": "Belize", "code": "BZ" },
|
||||
{ "name": "Benin", "code": "BJ" },
|
||||
{ "name": "Bermuda", "code": "BM" },
|
||||
{ "name": "Bhutan", "code": "BT" },
|
||||
{ "name": "Bolivia", "code": "BO" },
|
||||
{ "name": "Bosnia and Herzegovina", "code": "BA" },
|
||||
{ "name": "Botswana", "code": "BW" },
|
||||
{ "name": "Bouvet Island", "code": "BV" },
|
||||
{ "name": "Brazil", "code": "BR" },
|
||||
{ "name": "British Indian Ocean Territory", "code": "IO" },
|
||||
{ "name": "Brunei Darussalam", "code": "BN" },
|
||||
{ "name": "Bulgaria", "code": "BG" },
|
||||
{ "name": "Burkina Faso", "code": "BF" },
|
||||
{ "name": "Burundi", "code": "BI" },
|
||||
{ "name": "Cambodia", "code": "KH" },
|
||||
{ "name": "Cameroon", "code": "CM" },
|
||||
{ "name": "Canada", "code": "CA" },
|
||||
{ "name": "Cape Verde", "code": "CV" },
|
||||
{ "name": "Cayman Islands", "code": "KY" },
|
||||
{ "name": "Central African Republic", "code": "CF" },
|
||||
{ "name": "Chad", "code": "TD" },
|
||||
{ "name": "Chile", "code": "CL" },
|
||||
{ "name": "China", "code": "CN" },
|
||||
{ "name": "Christmas Island", "code": "CX" },
|
||||
{ "name": "Cocos (Keeling) Islands", "code": "CC" },
|
||||
{ "name": "Colombia", "code": "CO" },
|
||||
{ "name": "Comoros", "code": "KM" },
|
||||
{ "name": "Congo", "code": "CG" },
|
||||
{ "name": "Congo, The Democratic Republic of the", "code": "CD" },
|
||||
{ "name": "Cook Islands", "code": "CK" },
|
||||
{ "name": "Costa Rica", "code": "CR" },
|
||||
{ "name": "Cote D'Ivoire", "code": "CI" },
|
||||
{ "name": "Croatia", "code": "HR" },
|
||||
{ "name": "Cuba", "code": "CU" },
|
||||
{ "name": "Cyprus", "code": "CY" },
|
||||
{ "name": "Czech Republic", "code": "CZ" },
|
||||
{ "name": "Denmark", "code": "DK" },
|
||||
{ "name": "Djibouti", "code": "DJ" },
|
||||
{ "name": "Dominica", "code": "DM" },
|
||||
{ "name": "Dominican Republic", "code": "DO" },
|
||||
{ "name": "Ecuador", "code": "EC" },
|
||||
{ "name": "Egypt", "code": "EG" },
|
||||
{ "name": "El Salvador", "code": "SV" },
|
||||
{ "name": "Equatorial Guinea", "code": "GQ" },
|
||||
{ "name": "Eritrea", "code": "ER" },
|
||||
{ "name": "Estonia", "code": "EE" },
|
||||
{ "name": "Ethiopia", "code": "ET" },
|
||||
{ "name": "Falkland Islands (Malvinas)", "code": "FK" },
|
||||
{ "name": "Faroe Islands", "code": "FO" },
|
||||
{ "name": "Fiji", "code": "FJ" },
|
||||
{ "name": "Finland", "code": "FI" },
|
||||
{ "name": "France", "code": "FR" },
|
||||
{ "name": "French Guiana", "code": "GF" },
|
||||
{ "name": "French Polynesia", "code": "PF" },
|
||||
{ "name": "French Southern Territories", "code": "TF" },
|
||||
{ "name": "Gabon", "code": "GA" },
|
||||
{ "name": "Gambia", "code": "GM" },
|
||||
{ "name": "Georgia", "code": "GE" },
|
||||
{ "name": "Germany", "code": "DE" },
|
||||
{ "name": "Ghana", "code": "GH" },
|
||||
{ "name": "Gibraltar", "code": "GI" },
|
||||
{ "name": "Greece", "code": "GR" },
|
||||
{ "name": "Greenland", "code": "GL" },
|
||||
{ "name": "Grenada", "code": "GD" },
|
||||
{ "name": "Guadeloupe", "code": "GP" },
|
||||
{ "name": "Guam", "code": "GU" },
|
||||
{ "name": "Guatemala", "code": "GT" },
|
||||
{ "name": "Guernsey", "code": "GG" },
|
||||
{ "name": "Guinea", "code": "GN" },
|
||||
{ "name": "Guinea-Bissau", "code": "GW" },
|
||||
{ "name": "Guyana", "code": "GY" },
|
||||
{ "name": "Haiti", "code": "HT" },
|
||||
{ "name": "Heard Island and Mcdonald Islands", "code": "HM" },
|
||||
{ "name": "Holy See (Vatican City State)", "code": "VA" },
|
||||
{ "name": "Honduras", "code": "HN" },
|
||||
{ "name": "Hong Kong", "code": "HK" },
|
||||
{ "name": "Hungary", "code": "HU" },
|
||||
{ "name": "Iceland", "code": "IS" },
|
||||
{ "name": "India", "code": "IN" },
|
||||
{ "name": "Indonesia", "code": "ID" },
|
||||
{ "name": "Iran, Islamic Republic Of", "code": "IR" },
|
||||
{ "name": "Iraq", "code": "IQ" },
|
||||
{ "name": "Ireland", "code": "IE" },
|
||||
{ "name": "Isle of Man", "code": "IM" },
|
||||
{ "name": "Israel", "code": "IL" },
|
||||
{ "name": "Italy", "code": "IT" },
|
||||
{ "name": "Jamaica", "code": "JM" },
|
||||
{ "name": "Japan", "code": "JP" },
|
||||
{ "name": "Jersey", "code": "JE" },
|
||||
{ "name": "Jordan", "code": "JO" },
|
||||
{ "name": "Kazakhstan", "code": "KZ" },
|
||||
{ "name": "Kenya", "code": "KE" },
|
||||
{ "name": "Kiribati", "code": "KI" },
|
||||
{ "name": "Korea, Democratic People'S Republic of", "code": "KP" },
|
||||
{ "name": "Korea, Republic of", "code": "KR" },
|
||||
{ "name": "Kuwait", "code": "KW" },
|
||||
{ "name": "Kyrgyzstan", "code": "KG" },
|
||||
{ "name": "Lao People'S Democratic Republic", "code": "LA" },
|
||||
{ "name": "Latvia", "code": "LV" },
|
||||
{ "name": "Lebanon", "code": "LB" },
|
||||
{ "name": "Lesotho", "code": "LS" },
|
||||
{ "name": "Liberia", "code": "LR" },
|
||||
{ "name": "Libyan Arab Jamahiriya", "code": "LY" },
|
||||
{ "name": "Liechtenstein", "code": "LI" },
|
||||
{ "name": "Lithuania", "code": "LT" },
|
||||
{ "name": "Luxembourg", "code": "LU" },
|
||||
{ "name": "Macao", "code": "MO" },
|
||||
{ "name": "Macedonia, The Former Yugoslav Republic of", "code": "MK" },
|
||||
{ "name": "Madagascar", "code": "MG" },
|
||||
{ "name": "Malawi", "code": "MW" },
|
||||
{ "name": "Malaysia", "code": "MY" },
|
||||
{ "name": "Maldives", "code": "MV" },
|
||||
{ "name": "Mali", "code": "ML" },
|
||||
{ "name": "Malta", "code": "MT" },
|
||||
{ "name": "Marshall Islands", "code": "MH" },
|
||||
{ "name": "Martinique", "code": "MQ" },
|
||||
{ "name": "Mauritania", "code": "MR" },
|
||||
{ "name": "Mauritius", "code": "MU" },
|
||||
{ "name": "Mayotte", "code": "YT" },
|
||||
{ "name": "Mexico", "code": "MX" },
|
||||
{ "name": "Micronesia, Federated States of", "code": "FM" },
|
||||
{ "name": "Moldova, Republic of", "code": "MD" },
|
||||
{ "name": "Monaco", "code": "MC" },
|
||||
{ "name": "Mongolia", "code": "MN" },
|
||||
{ "name": "Montserrat", "code": "MS" },
|
||||
{ "name": "Morocco", "code": "MA" },
|
||||
{ "name": "Mozambique", "code": "MZ" },
|
||||
{ "name": "Myanmar", "code": "MM" },
|
||||
{ "name": "Namibia", "code": "NA" },
|
||||
{ "name": "Nauru", "code": "NR" },
|
||||
{ "name": "Nepal", "code": "NP" },
|
||||
{ "name": "Netherlands", "code": "NL" },
|
||||
{ "name": "Netherlands Antilles", "code": "AN" },
|
||||
{ "name": "New Caledonia", "code": "NC" },
|
||||
{ "name": "New Zealand", "code": "NZ" },
|
||||
{ "name": "Nicaragua", "code": "NI" },
|
||||
{ "name": "Niger", "code": "NE" },
|
||||
{ "name": "Nigeria", "code": "NG" },
|
||||
{ "name": "Niue", "code": "NU" },
|
||||
{ "name": "Norfolk Island", "code": "NF" },
|
||||
{ "name": "Northern Mariana Islands", "code": "MP" },
|
||||
{ "name": "Norway", "code": "NO" },
|
||||
{ "name": "Oman", "code": "OM" },
|
||||
{ "name": "Pakistan", "code": "PK" },
|
||||
{ "name": "Palau", "code": "PW" },
|
||||
{ "name": "Palestinian Territory, Occupied", "code": "PS" },
|
||||
{ "name": "Panama", "code": "PA" },
|
||||
{ "name": "Papua New Guinea", "code": "PG" },
|
||||
{ "name": "Paraguay", "code": "PY" },
|
||||
{ "name": "Peru", "code": "PE" },
|
||||
{ "name": "Philippines", "code": "PH" },
|
||||
{ "name": "Pitcairn", "code": "PN" },
|
||||
{ "name": "Poland", "code": "PL" },
|
||||
{ "name": "Portugal", "code": "PT" },
|
||||
{ "name": "Puerto Rico", "code": "PR" },
|
||||
{ "name": "Qatar", "code": "QA" },
|
||||
{ "name": "Reunion", "code": "RE" },
|
||||
{ "name": "Romania", "code": "RO" },
|
||||
{ "name": "Russian Federation", "code": "RU" },
|
||||
{ "name": "RWANDA", "code": "RW" },
|
||||
{ "name": "Saint Helena", "code": "SH" },
|
||||
{ "name": "Saint Kitts and Nevis", "code": "KN" },
|
||||
{ "name": "Saint Lucia", "code": "LC" },
|
||||
{ "name": "Saint Pierre and Miquelon", "code": "PM" },
|
||||
{ "name": "Saint Vincent and the Grenadines", "code": "VC" },
|
||||
{ "name": "Samoa", "code": "WS" },
|
||||
{ "name": "San Marino", "code": "SM" },
|
||||
{ "name": "Sao Tome and Principe", "code": "ST" },
|
||||
{ "name": "Saudi Arabia", "code": "SA" },
|
||||
{ "name": "Senegal", "code": "SN" },
|
||||
{ "name": "Serbia and Montenegro", "code": "CS" },
|
||||
{ "name": "Seychelles", "code": "SC" },
|
||||
{ "name": "Sierra Leone", "code": "SL" },
|
||||
{ "name": "Singapore", "code": "SG" },
|
||||
{ "name": "Slovakia", "code": "SK" },
|
||||
{ "name": "Slovenia", "code": "SI" },
|
||||
{ "name": "Solomon Islands", "code": "SB" },
|
||||
{ "name": "Somalia", "code": "SO" },
|
||||
{ "name": "South Africa", "code": "ZA" },
|
||||
{ "name": "South Georgia and the South Sandwich Islands", "code": "GS" },
|
||||
{ "name": "Spain", "code": "ES" },
|
||||
{ "name": "Sri Lanka", "code": "LK" },
|
||||
{ "name": "Sudan", "code": "SD" },
|
||||
{ "name": "Suriname", "code": "SR" },
|
||||
{ "name": "Svalbard and Jan Mayen", "code": "SJ" },
|
||||
{ "name": "Swaziland", "code": "SZ" },
|
||||
{ "name": "Sweden", "code": "SE" },
|
||||
{ "name": "Switzerland", "code": "CH" },
|
||||
{ "name": "Syrian Arab Republic", "code": "SY" },
|
||||
{ "name": "Taiwan, Province of China", "code": "TW" },
|
||||
{ "name": "Tajikistan", "code": "TJ" },
|
||||
{ "name": "Tanzania, United Republic of", "code": "TZ" },
|
||||
{ "name": "Thailand", "code": "TH" },
|
||||
{ "name": "Timor-Leste", "code": "TL" },
|
||||
{ "name": "Togo", "code": "TG" },
|
||||
{ "name": "Tokelau", "code": "TK" },
|
||||
{ "name": "Tonga", "code": "TO" },
|
||||
{ "name": "Trinidad and Tobago", "code": "TT" },
|
||||
{ "name": "Tunisia", "code": "TN" },
|
||||
{ "name": "Turkey", "code": "TR" },
|
||||
{ "name": "Turkmenistan", "code": "TM" },
|
||||
{ "name": "Turks and Caicos Islands", "code": "TC" },
|
||||
{ "name": "Tuvalu", "code": "TV" },
|
||||
{ "name": "Uganda", "code": "UG" },
|
||||
{ "name": "Ukraine", "code": "UA" },
|
||||
{ "name": "United Arab Emirates", "code": "AE" },
|
||||
{ "name": "United Kingdom", "code": "GB" },
|
||||
{ "name": "United States", "code": "US" },
|
||||
{ "name": "United States Minor Outlying Islands", "code": "UM" },
|
||||
{ "name": "Uruguay", "code": "UY" },
|
||||
{ "name": "Uzbekistan", "code": "UZ" },
|
||||
{ "name": "Vanuatu", "code": "VU" },
|
||||
{ "name": "Venezuela", "code": "VE" },
|
||||
{ "name": "Viet Nam", "code": "VN" },
|
||||
{ "name": "Virgin Islands, British", "code": "VG" },
|
||||
{ "name": "Virgin Islands, U.S.", "code": "VI" },
|
||||
{ "name": "Wallis and Futuna", "code": "WF" },
|
||||
{ "name": "Western Sahara", "code": "EH" },
|
||||
{ "name": "Yemen", "code": "YE" },
|
||||
{ "name": "Zambia", "code": "ZM" },
|
||||
{ "name": "Zimbabwe", "code": "ZW" }
|
||||
]
|
||||
@@ -80,7 +80,8 @@
|
||||
v0.15.0
|
||||
</div>
|
||||
|
||||
<div class="max-w-sm sm:max-w-md lg:max-w-lg xl:max-w-xl mx-auto p-2 pb-4">
|
||||
<div class="flex items-center max-w-sm sm:max-w-md lg:max-w-lg xl:max-w-xl mx-auto p-2 pb-4">
|
||||
<flag-input></flag-input>
|
||||
<username-input class="w-full"></username-input>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user