diff --git a/[core]/esx_multicharacter/client/main.lua b/[core]/esx_multicharacter/client/main.lua
index 0e6da55c..16a04f96 100644
--- a/[core]/esx_multicharacter/client/main.lua
+++ b/[core]/esx_multicharacter/client/main.lua
@@ -1,13 +1,3 @@
-
--- Connection Logic
-
-local function AwaitContext()
- while GetResourceState("esx_context") ~= "started" do
- Wait(100)
- end
- return true
-end
-
CreateThread(function()
while not ESX.PlayerLoaded do
@@ -16,13 +6,8 @@ CreateThread(function()
if NetworkIsPlayerActive(ESX.playerId) then
ESX.DisableSpawnManager()
DoScreenFadeOut(0)
-
- local ready = AwaitContext()
- if ready then
-
- Multicharacter:SetupCharacters()
- break
- end
+ Multicharacter:SetupCharacters()
+ break
end
end
end)
diff --git a/[core]/esx_multicharacter/client/modules/menu.lua b/[core]/esx_multicharacter/client/modules/menu.lua
index 97d2c43f..69fc5dbc 100644
--- a/[core]/esx_multicharacter/client/modules/menu.lua
+++ b/[core]/esx_multicharacter/client/modules/menu.lua
@@ -1,15 +1,4 @@
Menu = {}
-Menu._index = Menu
-Menu.currentElements = {}
-
-function Menu:OpenMenu()
- ESX.OpenContext("left", self.currentElements, self.onUse, nil, false)
-end
-
-function Menu:Close()
- self.currentElements = {}
- ESX.CloseContext()
-end
function Menu:CheckModel(character)
if not character.model and character.skin then
@@ -23,18 +12,6 @@ function Menu:CheckModel(character)
end
end
-function Menu:AddCharacters()
- for _, v in pairs(Multicharacter.Characters) do
- self:CheckModel(v)
-
- local label = ("%s %s"):format(v.firstname, v.lastname)
- self.currentElements[#self.currentElements + 1] = { title = label, icon = "fa-regular fa-user", value = v.id}
- end
- if #self.currentElements - 1 < Multicharacter.slots then
- self.currentElements[#self.currentElements + 1] = { title = TranslateCap("create_char"), icon = "fa-solid fa-plus", value = (#self.currentElements + 1), new = true }
- end
-end
-
local GetSlot = function()
for i = 1, Multicharacter.slots do
if not Multicharacter.Characters[i] then
@@ -44,7 +21,6 @@ local GetSlot = function()
end
function Menu:NewCharacter()
- self:Close()
local slot = GetSlot()
TriggerServerEvent("esx_multicharacter:CharacterChosen", slot, true)
@@ -59,7 +35,7 @@ function Menu:NewCharacter()
end
-function Menu:SelectCharacter()
+function Menu:InitCharacter()
local Characters = Multicharacter.Characters
local Character = next(Characters)
self:CheckModel(Characters[Character])
@@ -67,125 +43,35 @@ function Menu:SelectCharacter()
if not Multicharacter.spawned then
Multicharacter:SetupCharacter(Character)
end
-
- self.currentElements = {
- {
- title = TranslateCap("select_char"),
- icon = "fa-solid fa-users",
- description = TranslateCap("select_char_description"),
- unselectable = true
+ Wait(500)
+
+ SendNUIMessage({
+ action = "ToggleMulticharacter",
+ data = {
+ show = true,
+ Characters = Characters,
+ CanDelete = Config.CanDelete,
+ AllowedSlot = Multicharacter.slots,
+ Locale = Locales[Config.Locale].UI,
}
- }
+ })
- self:AddCharacters()
- self.onUse = function(_, SelectedCharacter)
- if SelectedCharacter.new then
- self:NewCharacter()
- else
- if SelectedCharacter.value ~= Multicharacter.spawned then
- Multicharacter:SetupCharacter(SelectedCharacter.value)
- local playerPed = PlayerPedId()
- SetPedAoBlobRendering(playerPed, true)
- ResetEntityAlpha(playerPed)
- end
- self:CharacterOptions()
- end
- end
-
- self:OpenMenu()
+ SetNuiFocus(true, true)
end
-
-function Menu:CharacterOptions()
- local currentCharacter = Multicharacter.Characters[Multicharacter.spawned]
- local elements = {
- {
- title = TranslateCap("character", currentCharacter.firstname .. " " .. currentCharacter.lastname),
- icon = "fa-regular fa-user",
- unselectable = true
- },
- {
- title = TranslateCap("return"),
- unselectable = false,
- icon = "fa-solid fa-arrow-left",
- description = TranslateCap("return_description"),
- action = "return"
- },
- }
-
- if not currentCharacter.disabled then
- elements[3] = {
- title = TranslateCap("char_play"),
- description = TranslateCap("char_play_description"),
- icon = "fa-solid fa-play",
- action = "play",
- }
- else
- elements[3] = {
- title = TranslateCap("char_disabled"),
- icon = "fa-solid fa-xmark",
- description = TranslateCap("char_disabled_description")
- }
- end
- if Config.CanDelete then
- elements[4] = {
- title = TranslateCap("char_delete"),
- icon = "fa-solid fa-xmark",
- description = TranslateCap("char_delete_description"),
- action = "delete",
- }
- end
-
- self.currentElements = elements
- self.onUse = function(_, Action)
- if Action.action == "play" then
- Multicharacter:CloseUI()
- self:Close()
-
- TriggerServerEvent("esx_multicharacter:CharacterChosen", Multicharacter.spawned, false)
- elseif Action.action == "delete" then
- self:ConfirmDeletion()
- elseif Action.action == "return" then
- self:SelectCharacter()
- end
- end
-
- self:OpenMenu()
+function Menu:SelectCharacter(index)
+ Multicharacter:SetupCharacter(index)
+ local playerPed = PlayerPedId()
+ SetPedAoBlobRendering(playerPed, true)
+ ResetEntityAlpha(playerPed)
end
-function Menu:ConfirmDeletion()
- self.currentElements = {
- {
- title = TranslateCap("char_delete_confirmation"),
- icon = "fa-solid fa-users",
- description = TranslateCap("char_delete_confirmation_description"),
- unselectable = true
- },
- {
- title = TranslateCap("char_delete"),
- icon = "fa-solid fa-xmark",
- description = TranslateCap("char_delete_yes_description"),
- action = "delete",
- },
- {
- title = TranslateCap("return"),
- unselectable = false,
- icon = "fa-solid fa-arrow-left",
- description = TranslateCap("char_delete_no_description"),
- action = "return"
- },
- }
+function Menu:PlayCharacter()
+ Multicharacter:CloseUI()
+ TriggerServerEvent("esx_multicharacter:CharacterChosen", Multicharacter.spawned, false)
+end
- self.onUse = function(_, Action)
- if Action.action == "delete" then
- self:Close()
-
- TriggerServerEvent("esx_multicharacter:DeleteCharacter", Multicharacter.spawned)
- Multicharacter.spawned = false
- elseif Action.action == "return" then
- self:CharacterOptions()
- end
- end
-
- self:OpenMenu()
+function Menu:DeleteCharacter()
+ TriggerServerEvent("esx_multicharacter:DeleteCharacter", Multicharacter.spawned)
+ Multicharacter.spawned = false
end
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/client/modules/multicharacter.lua b/[core]/esx_multicharacter/client/modules/multicharacter.lua
index ef099f58..1c6014fc 100644
--- a/[core]/esx_multicharacter/client/modules/multicharacter.lua
+++ b/[core]/esx_multicharacter/client/modules/multicharacter.lua
@@ -12,8 +12,8 @@ function Multicharacter:SetupCamera()
local offset = GetOffsetFromEntityInWorldCoords(self.playerPed, 0, 1.7, 0.4)
- SetCamCoord(self.cam, offset.x, offset.y, offset.z)
- PointCamAtCoord(self.cam, self.spawnCoords.x, self.spawnCoords.y, self.spawnCoords.z + 1.3)
+ SetCamCoord(self.cam, offset.x + 0.7, offset.y , offset.z)
+ PointCamAtCoord(self.cam, self.spawnCoords.x + 0.4, self.spawnCoords.y, self.spawnCoords.z + 1.3)
end
function Multicharacter:AwaitFadeIn()
@@ -116,6 +116,10 @@ function Multicharacter:ChangeExistingPed()
local newCharacter = self.Characters[self.tempIndex]
local spawnedCharacter = self.Characters[self.spawned]
+ if not newCharacter.model then
+ newCharacter.model = newCharacter.sex == TranslateCap("male") and `mp_m_freemode_01` or `mp_f_freemode_01`
+ end
+
if spawnedCharacter and spawnedCharacter.model then
local model = ESX.Streaming.RequestModel(newCharacter.model)
if model then
@@ -123,7 +127,6 @@ function Multicharacter:ChangeExistingPed()
SetModelAsNoLongerNeeded(newCharacter.model)
end
end
-
TriggerEvent("skinchanger:loadSkin", newCharacter.skin)
end
@@ -135,8 +138,12 @@ end
function Multicharacter:CloseUI()
SendNUIMessage({
- action = "closeui",
+ action = "ToggleMulticharacter",
+ data = {
+ show = false
+ }
})
+ SetNuiFocus(false, false)
end
function Multicharacter:SetupCharacter(index)
@@ -152,10 +159,6 @@ function Multicharacter:SetupCharacter(index)
self.spawned = index
self.playerPed = PlayerPedId()
self:PrepForUI()
- SendNUIMessage({
- action = "openui",
- character = character,
- })
end
function Multicharacter:SetupUI(characters, slots)
@@ -180,7 +183,7 @@ function Multicharacter:SetupUI(characters, slots)
TriggerEvent("esx_identity:showRegisterIdentity")
end)
else
- Menu:SelectCharacter()
+ Menu:InitCharacter()
end
end
diff --git a/[core]/esx_multicharacter/client/modules/nui.lua b/[core]/esx_multicharacter/client/modules/nui.lua
new file mode 100644
index 00000000..fc132b40
--- /dev/null
+++ b/[core]/esx_multicharacter/client/modules/nui.lua
@@ -0,0 +1,23 @@
+RegisterNuiCallback('SelectCharacter', function (data, cb)
+ local selectedIndex = tonumber(data.id)
+
+ if selectedIndex then
+ Menu:SelectCharacter(selectedIndex)
+ end
+ cb('ok')
+end)
+
+RegisterNuiCallback('PlayCharacter', function (data, cb)
+ Menu:PlayCharacter()
+ cb('ok')
+end)
+
+RegisterNuiCallback('DeleteCharacter', function (data, cb)
+ Menu:DeleteCharacter()
+ cb('ok')
+end)
+
+RegisterNuiCallback('CreateCharacter', function (data, cb)
+ Menu:NewCharacter()
+ cb('ok')
+end)
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/config.lua b/[core]/esx_multicharacter/config.lua
index 9c80d374..aa2aa241 100644
--- a/[core]/esx_multicharacter/config.lua
+++ b/[core]/esx_multicharacter/config.lua
@@ -7,7 +7,7 @@ Config.CanDelete = true
if IsDuplicityVersion() then
-- This is the default number of slots for EVERY player
-- If you want to manage extra slots for specific players you can do it by using '/setslots' and '/remslots' commands
- Config.Slots = 4
+ Config.Slots = 3
--------------------
-- Text to prepend to each character (char#:identifier) - keep it short
diff --git a/[core]/esx_multicharacter/fxmanifest.lua b/[core]/esx_multicharacter/fxmanifest.lua
index 81c76c37..80a7e283 100644
--- a/[core]/esx_multicharacter/fxmanifest.lua
+++ b/[core]/esx_multicharacter/fxmanifest.lua
@@ -1,5 +1,4 @@
fx_version 'cerulean'
-
game 'gta5'
author 'ESX-Framework - Linden - KASH'
description 'Allows players to have multiple characters on the same account.'
@@ -21,6 +20,6 @@ client_scripts {
'client/*.lua'
}
-ui_page { 'html/ui.html' }
+ui_page 'web/build/index.html'
-files { 'html/ui.html', 'html/css/main.css', 'html/js/app.js', 'html/locales/*.js' }
+files { 'web/build/index.html', 'web/build/**/*.*'}
diff --git a/[core]/esx_multicharacter/html/css/main.css b/[core]/esx_multicharacter/html/css/main.css
deleted file mode 100644
index b6d866d5..00000000
--- a/[core]/esx_multicharacter/html/css/main.css
+++ /dev/null
@@ -1,76 +0,0 @@
-@import url("https://fonts.googleapis.com/css2?family=Raleway:wght@300;600&display=swap");
-@import url("https://fonts.googleapis.com/css2?family=Oswald&display=swap");
-* {
- margin: 0;
- padding: 0;
- user-select: none;
- color: rgb(255, 255, 255);
- border-radius: 15px;
- font-weight: 300;
- font-size: 1.6vh;
- font-family: Calibri, "Helvetica", san-serif;
-}
-
-html {
- overflow: hidden;
-}
-
-p {
- margin: 0 !important;
-}
-
-body {
- background: transparent;
-}
-
-.main-container {
- display: none;
- position: absolute;
- top: 50%;
- right: 150;
- transform: translate(0, -50%);
- border-radius: 15px;
- background: rgba(15, 15, 15, 0.9);
-}
-
-.header {
- font-family: "Oswald", sans-serif;
- position: absolute;
- background: rgba(10, 10, 10, 0.9);
- border-radius: 15px 15px 0px 0px;
- height: 10%;
- width: 100%;
- left: 50%;
- text-align: center;
- transform: translate(-50%);
- font-weight: 700;
- padding-bottom: 5px;
- font-size: 1.6rem;
-}
-
-.footer {
- position: absolute;
- font-size: 0rem;
-}
-
-.character-box {
- display: flex;
- right: 0;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- text-align: center;
- line-height: 1.4rem;
- height: calc(30rem);
- width: 17rem;
- border: 1px rgba(10, 10, 10, 0.7) solid;
- box-shadow: 2px 1px 9px 3px rgba(10, 10, 10, 0.7);
-}
-
-h1 {
- font-family: "Oswald", sans-serif;
- font-size: 22px;
- padding-top: 1.3rem;
- display: block;
- font-weight: 0;
-}
diff --git a/[core]/esx_multicharacter/html/js/app.js b/[core]/esx_multicharacter/html/js/app.js
deleted file mode 100644
index 00cdb7f9..00000000
--- a/[core]/esx_multicharacter/html/js/app.js
+++ /dev/null
@@ -1,66 +0,0 @@
-var money = Intl.NumberFormat("en-US", {
- style: "currency",
- currency: "USD",
- minimumFractionDigits: 0,
-});
-
-(() => {
- Kashacter = {};
-
- Kashacter.ShowUI = function (data) {
- $("body").css({ display: "block" });
- $(".main-container").css({ display: "block" });
- $("[data-charid=1]")
- .html(
- '
' +
- `${translate.name} ` +
- "
" +
- data.firstname +
- " " +
- data.lastname +
- '' +
- `${translate.job} ` +
- "
" +
- data.job +
- " " +
- data.job_grade +
- '' +
- `${translate.money} ` +
- "
" +
- money.format(data.money) +
- '' +
- `${translate.bank} ` +
- "
" +
- money.format(data.bank) +
- ' ' +
- `${translate.dob} ` +
- "
" +
- data.dateofbirth +
- ' ' +
- `${translate.gender} ` +
- "
" +
- data.sex +
- " "
- )
- .attr("data-ischar", "true");
- };
-
- Kashacter.CloseUI = function () {
- $("body").css({ display: "none" });
- $(".main-container").css({ display: "none" });
- $("[data-charid=1]").html('');
- };
-
- window.onload = function (e) {
- window.addEventListener("message", function (event) {
- switch (event.data.action) {
- case "openui":
- Kashacter.ShowUI(event.data.character);
- break;
- case "closeui":
- Kashacter.CloseUI();
- break;
- }
- });
- };
-})();
diff --git a/[core]/esx_multicharacter/html/locales/cs.js b/[core]/esx_multicharacter/html/locales/cs.js
deleted file mode 100644
index cc84dedc..00000000
--- a/[core]/esx_multicharacter/html/locales/cs.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Jméno";
-translate.job = "Práce";
-translate.bank = "Banka";
-translate.money = "Peníze";
-translate.gender = "Pohlaví";
-translate.dob = "Datum narození";
diff --git a/[core]/esx_multicharacter/html/locales/de.js b/[core]/esx_multicharacter/html/locales/de.js
deleted file mode 100644
index efd17188..00000000
--- a/[core]/esx_multicharacter/html/locales/de.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Name";
-translate.job = "Beruf";
-translate.bank = "Bankguthaben";
-translate.money = "Bargeld";
-translate.gender = "Geschlecht";
-translate.dob = "Geburtsdatum";
diff --git a/[core]/esx_multicharacter/html/locales/en.js b/[core]/esx_multicharacter/html/locales/en.js
deleted file mode 100644
index 125dd3f0..00000000
--- a/[core]/esx_multicharacter/html/locales/en.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Name";
-translate.job = "Job";
-translate.bank = "Bank";
-translate.money = "Cash";
-translate.gender = "Gender";
-translate.dob = "Date of birth";
diff --git a/[core]/esx_multicharacter/html/locales/es.js b/[core]/esx_multicharacter/html/locales/es.js
deleted file mode 100644
index b0791792..00000000
--- a/[core]/esx_multicharacter/html/locales/es.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Nombre";
-translate.job = "Trabajo";
-translate.bank = "Banco";
-translate.money = "Dinero";
-translate.gender = "Género";
-translate.dob = "Fecha de nacimiento";
diff --git a/[core]/esx_multicharacter/html/locales/fi.js b/[core]/esx_multicharacter/html/locales/fi.js
deleted file mode 100644
index 2daf5ea3..00000000
--- a/[core]/esx_multicharacter/html/locales/fi.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Nimi";
-translate.job = "Työ";
-translate.bank = "Pankki";
-translate.money = "Käteinen";
-translate.gender = "Sukupuoli";
-translate.dob = "Syntymäaika";
diff --git a/[core]/esx_multicharacter/html/locales/fr.js b/[core]/esx_multicharacter/html/locales/fr.js
deleted file mode 100644
index 597a217d..00000000
--- a/[core]/esx_multicharacter/html/locales/fr.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Nom";
-translate.job = "Métier";
-translate.bank = "Banque";
-translate.money = "Argent";
-translate.gender = "Sexe";
-translate.dob = "Date de naissance";
diff --git a/[core]/esx_multicharacter/html/locales/hu.js b/[core]/esx_multicharacter/html/locales/hu.js
deleted file mode 100644
index 34091a2c..00000000
--- a/[core]/esx_multicharacter/html/locales/hu.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Név";
-translate.job = "Munka";
-translate.bank = "Bank";
-translate.money = "Készpénz";
-translate.gender = "Nem";
-translate.dob = "Születési idő";
diff --git a/[core]/esx_multicharacter/html/locales/it.js b/[core]/esx_multicharacter/html/locales/it.js
deleted file mode 100644
index 0c10c733..00000000
--- a/[core]/esx_multicharacter/html/locales/it.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Nome";
-translate.job = "Lavoro";
-translate.bank = "Banca";
-translate.money = "Contanti";
-translate.gender = "Genere";
-translate.dob = "Data di nascita";
diff --git a/[core]/esx_multicharacter/html/locales/nl.js b/[core]/esx_multicharacter/html/locales/nl.js
deleted file mode 100644
index 44c59000..00000000
--- a/[core]/esx_multicharacter/html/locales/nl.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Naam";
-translate.job = "Job";
-translate.bank = "Bank";
-translate.money = "Cash";
-translate.gender = "Gender";
-translate.dob = "Geboortedatum";
diff --git a/[core]/esx_multicharacter/html/locales/pl.js b/[core]/esx_multicharacter/html/locales/pl.js
deleted file mode 100644
index 07b27356..00000000
--- a/[core]/esx_multicharacter/html/locales/pl.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "imię";
-translate.job = "Zajęcie";
-translate.bank = "Bank";
-translate.money = "Gotówka";
-translate.gender = "Seks";
-translate.dob = "Data urodzenia";
diff --git a/[core]/esx_multicharacter/html/locales/pt.js b/[core]/esx_multicharacter/html/locales/pt.js
deleted file mode 100644
index c8eca4f8..00000000
--- a/[core]/esx_multicharacter/html/locales/pt.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Nome";
-translate.job = "Trabalho";
-translate.bank = "Banco";
-translate.money = "Dinheiro";
-translate.gender = "Género";
-translate.dob = "Data de Nascimento";
diff --git a/[core]/esx_multicharacter/html/locales/sr.js b/[core]/esx_multicharacter/html/locales/sr.js
deleted file mode 100644
index 79ecfbc2..00000000
--- a/[core]/esx_multicharacter/html/locales/sr.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Ime";
-translate.job = "Posao";
-translate.bank = "Banka";
-translate.money = "Novac";
-translate.gender = "Pol";
-translate.dob = "Datum rodjenja";
diff --git a/[core]/esx_multicharacter/html/locales/sv.js b/[core]/esx_multicharacter/html/locales/sv.js
deleted file mode 100644
index 0a116611..00000000
--- a/[core]/esx_multicharacter/html/locales/sv.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "Namn";
-translate.job = "Jobb";
-translate.bank = "Bank";
-translate.money = "Kontanter";
-translate.gender = "Kön";
-translate.dob = "Födelsedatum";
diff --git a/[core]/esx_multicharacter/html/locales/zh-cn.js b/[core]/esx_multicharacter/html/locales/zh-cn.js
deleted file mode 100644
index 8bbf9ffc..00000000
--- a/[core]/esx_multicharacter/html/locales/zh-cn.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const translate = new Object();
-
-translate.name = "我的姓名";
-translate.job = "我的职业";
-translate.bank = "银行存款";
-translate.money = "手持现金";
-translate.gender = "我的性别";
-translate.dob = "出生日期";
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/html/ui.html b/[core]/esx_multicharacter/html/ui.html
deleted file mode 100644
index 77ee78f9..00000000
--- a/[core]/esx_multicharacter/html/ui.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/[core]/esx_multicharacter/locales/cs.lua b/[core]/esx_multicharacter/locales/cs.lua
index 5421e450..083f05af 100644
--- a/[core]/esx_multicharacter/locales/cs.lua
+++ b/[core]/esx_multicharacter/locales/cs.lua
@@ -1,28 +1,22 @@
Locales["cs"] = {
["male"] = "Muž",
["female"] = "Žena",
- ["select_char"] = "Zvolit Postavu",
- ["select_char_description"] = "Zvol si postavu za kterou budeš hrát.",
- ["create_char"] = "Vytvořit Novou Postavu",
- ["char_play"] = "Hrát za postavu",
- ["char_play_description"] = "Pokračovat do města.",
- ["char_disabled"] = "Tato postava je zakázána!",
- ["char_disabled_description"] = "Tuto postavu nemůžeš používat.",
- ["char_delete"] = "Vymazat postavu",
- ["char_delete_description"] = "Na vždy smazat tuto postavu.",
- ["character"] = "Postava: %s",
- ["return"] = "Zpět",
- ["return_description"] = "Vrátit se na vybírání postav.",
- ["command_setslots"] = "Nastavit sloty pro hráče v multicharacteru",
- ["command_remslots"] = "Odebrat sloty pro hráče v multicharacteru",
- ["command_enablechar"] = "Povolit zvolený slot hráči",
- ["command_disablechar"] = "Zakázat zvolený slot pro hrače",
- ["command_charslot"] = "Číslo slotu",
- ["command_identifier"] = "Identifier hráče",
- ["command_slots"] = "# ze slotu",
- ["slotsadd"] = "Nastavil si slot %s hráči %s",
- ["slotsrem"] = "Odebral si slot %s",
- ["charenabled"] = "Povolil si postavu #%s z %s",
- ["chardisabled"] = "Zakázal si postavu #%s z %s",
- ["charnotfound"] = "Postava #%s z %s nebyla nalezena/neexistuje",
+ ["command_setslots"] = "Nastavit počet multicharakterových slotů hráče",
+ ["command_remslots"] = "Odebrat počet multicharakterových slotů hráče",
+ ["command_enablechar"] = "Povolit danou postavu hráče",
+ ["command_disablechar"] = "Zakázat danou postavu hráče",
+ ["command_charslot"] = "Číslo slotu postavy",
+ ["command_identifier"] = "Identifikátor hráče",
+ ["command_slots"] = "Počet slotů",
+ ["slotsadd"] = "Nastavil jsi %s slotů pro %s",
+ ["slotsrem"] = "Odebral jsi sloty pro %s",
+ ["charenabled"] = "Povolil jsi postavu #%s hráče %s",
+ ["chardisabled"] = "Zakázal jsi postavu #%s hráče %s",
+ ["charnotfound"] = "Postava #%s hráče %s neexistuje",
+
+ UI = {
+ ["title"] = "VÝBĚR POSTAVY",
+ ["char_info_title"] = "Informace o postavě",
+ ["play"] = "HRÁT",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/da.lua b/[core]/esx_multicharacter/locales/da.lua
index 3bec8971..4155b61c 100644
--- a/[core]/esx_multicharacter/locales/da.lua
+++ b/[core]/esx_multicharacter/locales/da.lua
@@ -1,32 +1,22 @@
Locales["da"] = {
["male"] = "Mand",
["female"] = "Kvinde",
- ["select_char"] = "Vælg karakter",
- ["select_char_description"] = "Vælg en karakter at spille som.",
- ["create_char"] = "Ny Karakter",
- ["char_play"] = "Spil",
- ["char_play_description"] = "Fortsæt ind i byen.",
- ["char_disabled"] = "Deaktiveret",
- ["char_disabled_description"] = "Denne karakter er ubrugelig.",
- ["char_delete"] = "Slet",
- ["char_delete_description"] = "Fjern denne karakter permanent.",
- ["char_delete_confirmation"] = "Slet bekræftelse",
- ["char_delete_confirmation_description"] = "Er du sikker på at fjerne det valgte karakter?",
- ["char_delete_yes_description"] = "Ja, jeg er sikker på at fjerne det valgte karakter",
- ["char_delete_no_description"] = "Nej, vend tilbage til karakter-indstillinger",
- ["character"] = "Karakter: %s",
- ["return"] = "Tilbage",
- ["return_description"] = "Vend tilbage til valg af karaktere.",
- ["command_setslots"] = "Indstil flerkarakters slotsnummer for en spiller",
- ["command_remslots"] = "Fjern flerkarakters slotsnummer for en spiller",
- ["command_enablechar"] = "Aktiver en valgt karakter af en spiller",
- ["command_disablechar"] = "Deaktiver en valgt karakter af en spiller",
- ["command_charslot"] = "Karakterens plads nummer",
- ["command_identifier"] = "Spiller identifikator",
- ["command_slots"] = "# af slots",
- ["slotsadd"] = "Du indstillerde %s slots til %s",
- ["slotsrem"] = "Du fjernede slots til %s",
- ["charenabled"] = "Du aktiverede karakter #%s af %s",
- ["chardisabled"] = "Du deaktiverede tegn #%s af %s",
- ["charnotfound"] = "Karakter #%s af %s eksisterer ikke",
+ ["command_setslots"] = "Indstil antal multikarakter-slots for en spiller",
+ ["command_remslots"] = "Fjern antal multikarakter-slots for en spiller",
+ ["command_enablechar"] = "Aktivér en given karakter for en spiller",
+ ["command_disablechar"] = "Deaktivér en given karakter for en spiller",
+ ["command_charslot"] = "Karakterens slotnummer",
+ ["command_identifier"] = "Spillerens identifikator",
+ ["command_slots"] = "Antal slots",
+ ["slotsadd"] = "Du satte %s slots til %s",
+ ["slotsrem"] = "Du fjernede slots fra %s",
+ ["charenabled"] = "Du aktiverede karakter #%s for %s",
+ ["chardisabled"] = "Du deaktiverede karakter #%s for %s",
+ ["charnotfound"] = "Karakter #%s for %s findes ikke",
+
+ UI = {
+ ["title"] = "KARAKTERVALG",
+ ["char_info_title"] = "Karakterinformation",
+ ["play"] = "SPIL",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/de.lua b/[core]/esx_multicharacter/locales/de.lua
index f33c433e..5f8e5d5d 100644
--- a/[core]/esx_multicharacter/locales/de.lua
+++ b/[core]/esx_multicharacter/locales/de.lua
@@ -1,32 +1,22 @@
Locales["de"] = {
- ["male"] = "Männlich",
- ["female"] = "Weiblich",
- ["select_char"] = "Charakter auswählen",
- ["select_char_description"] = "Wähle einen Charakter aus, mit den du spielen willst.",
- ["create_char"] = "Neuer Charakter",
- ["char_play"] = "Spielen",
- ["char_play_description"] = "Weiter in die Stadt.",
- ["char_disabled"] = "Deaktiviert",
- ["char_disabled_description"] = "Dieser Charakter ist deaktiviert.",
- ["char_delete"] = "Löschen",
- ["char_delete_description"] = "Dieser Charakter wird dauerhaft entfernt.",
- ["char_delete_confirmation"] = "Bestätigung zur Entfernung deines Charakters.",
- ["char_delete_confirmation_description"] = "Bist du sicher, dass du den ausgewählten Charakter entfernen willst?",
- ["char_delete_yes_description"] = "Ja, ich bin sicher, dass ich den ausgewählten Charakter lösche",
- ["char_delete_no_description"] = "Nein, zurück zu den Charakteroptionen",
- ["character"] = " Charakter: %s",
- ["return"] = "Zurück",
- ["return_description"] = "Zur Charakterauswahl zurückkehren.",
- ["command_setslots"] = "Anzahl der Charakter-Slots eines Spielers festlegen",
- ["command_remslots"] = "Die Anzahl der Charakter-Slots eines Spielers entfernen",
- ["command_enablechar"] = "Aktiviere einen bestimmten Charakter eines Spielers",
- ["command_disablechar"] = "Deaktiviere einen bestimmten Charakter eines Spielers",
- ["command_charslot"] = "Slotnummer des Charakters",
- ["command_identifier"] = "Spieler R* ID",
- ["command_slots"] = "Anzahl von Charakter-Slots",
- ["slotsadd"] = "Du hast %s Charakter-Slots auf %s gesetzt",
- ["slotsrem"] = "Du hast &s Charakter-Slots auf %s entfernt",
- ["charenabled"] = "Du hast den Charakter #%s von %s aktiviert",
- ["chardisabled"] = "Du hast den Charakter #%s von %s deaktiviert",
- ["charnotfound"] = "Charakter #%s von %s existiert nicht",
-}
\ No newline at end of file
+ ["male"] = "Männlich",
+ ["female"] = "Weiblich",
+ ["command_setslots"] = "Anzahl der Mehrcharakter-Slots eines Spielers festlegen",
+ ["command_remslots"] = "Anzahl der Mehrcharakter-Slots eines Spielers entfernen",
+ ["command_enablechar"] = "Einen bestimmten Charakter eines Spielers aktivieren",
+ ["command_disablechar"] = "Einen bestimmten Charakter eines Spielers deaktivieren",
+ ["command_charslot"] = "Slot-Nummer des Charakters",
+ ["command_identifier"] = "Spielerkennung",
+ ["command_slots"] = "Anzahl der Slots",
+ ["slotsadd"] = "Du hast %s Slots für %s festgelegt",
+ ["slotsrem"] = "Du hast Slots von %s entfernt",
+ ["charenabled"] = "Du hast Charakter #%s von %s aktiviert",
+ ["chardisabled"] = "Du hast Charakter #%s von %s deaktiviert",
+ ["charnotfound"] = "Charakter #%s von %s existiert nicht",
+
+ UI = {
+ ["title"] = "CHARAKTERAUSWAHL",
+ ["char_info_title"] = "Charakterinformation",
+ ["play"] = "SPIELEN",
+ }
+}
diff --git a/[core]/esx_multicharacter/locales/en.lua b/[core]/esx_multicharacter/locales/en.lua
index 5c55fd8f..8e6ff047 100644
--- a/[core]/esx_multicharacter/locales/en.lua
+++ b/[core]/esx_multicharacter/locales/en.lua
@@ -1,22 +1,6 @@
Locales["en"] = {
["male"] = "Male",
["female"] = "Female",
- ["select_char"] = "Select Character",
- ["select_char_description"] = "Select a character to play as.",
- ["create_char"] = "New Character",
- ["char_play"] = "Play",
- ["char_play_description"] = "Continue Into The City.",
- ["char_disabled"] = "Disabled",
- ["char_disabled_description"] = "This Character Is Unusable.",
- ["char_delete"] = "Delete",
- ["char_delete_description"] = "Permanently Remove This Character.",
- ["char_delete_confirmation"] = "Delete Confirmation",
- ["char_delete_confirmation_description"] = "Are you sure removing selected character?",
- ["char_delete_yes_description"] = "Yes, I am sure removing selected character",
- ["char_delete_no_description"] = "No, return to character options",
- ["character"] = "Character: %s",
- ["return"] = "Return",
- ["return_description"] = "Return To Character Selection.",
["command_setslots"] = "Set multicharacter slots number of a player",
["command_remslots"] = "Remove multicharacter slots number of a player",
["command_enablechar"] = "Enable a given character of a player",
@@ -29,4 +13,10 @@ Locales["en"] = {
["charenabled"] = "You enabled character #%s of %s",
["chardisabled"] = "You disabled character #%s of %s",
["charnotfound"] = "Character #%s of %s doesn't exist",
+
+ UI = {
+ ["title"] = "CHARACTER SELECTION",
+ ["char_info_title"] = "Character Info",
+ ["play"] = "PLAY",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/es.lua b/[core]/esx_multicharacter/locales/es.lua
index 0f3cc6bf..59c94065 100644
--- a/[core]/esx_multicharacter/locales/es.lua
+++ b/[core]/esx_multicharacter/locales/es.lua
@@ -1,28 +1,22 @@
Locales["es"] = {
- ["male"] = "Masculino",
- ["female"] = "Femenino",
- ["select_char"] = "Seleccionar personaje",
- ["select_char_description"] = "Selecciona un personaje para jugar.",
- ["create_char"] = "Crear nuevo personaje",
- ["char_play"] = "Seleccionar personaje",
- ["char_play_description"] = "Ingresar a la ciudad.",
- ["char_disabled"] = "Este personaje está deshabilitado",
- ["char_disabled_description"] = "Este personaje no se encuentra disponible.",
- ["char_delete"] = "Borrar el personaje seleccionado",
- ["char_delete_description"] = "Eliminar este personaje.",
- ["character"] = "Personaje: %s",
- ["return"] = "Volver",
- ["return_description"] = "Volver a la selección de personajes.",
- ["command_setslots"] = "Establecer el numero de slots de un jugador",
- ["command_remslots"] = "Elimina slots de un jugador.",
- ["command_enablechar"] = "Activar el personaje de un jugador",
- ["command_disablechar"] = "Deshabilitar personaje al jugador.",
- ["command_charslot"] = "Número de slot del personaje",
+ ["male"] = "Hombre",
+ ["female"] = "Mujer",
+ ["command_setslots"] = "Establecer número de ranuras multicaracter para un jugador",
+ ["command_remslots"] = "Eliminar número de ranuras multicaracter para un jugador",
+ ["command_enablechar"] = "Habilitar un personaje específico de un jugador",
+ ["command_disablechar"] = "Deshabilitar un personaje específico de un jugador",
+ ["command_charslot"] = "Número de ranura del personaje",
["command_identifier"] = "Identificador del jugador",
- ["command_slots"] = "Nº de slots",
- ["slotsadd"] = "Has establecido los slots de %s a %s",
- ["slotsrem"] = "Has eliminado un slot a %s",
- ["charenabled"] = "Has habilitado el personaje Nº%s de %s",
- ["chardisabled"] = "Has deshabilitado el personaje Nº%s de %s",
- ["charnotfound"] = "Personaje Nº%s de %s no existe",
+ ["command_slots"] = "Número de ranuras",
+ ["slotsadd"] = "Has establecido %s ranuras para %s",
+ ["slotsrem"] = "Has eliminado ranuras para %s",
+ ["charenabled"] = "Has habilitado el personaje #%s de %s",
+ ["chardisabled"] = "Has deshabilitado el personaje #%s de %s",
+ ["charnotfound"] = "El personaje #%s de %s no existe",
+
+ UI = {
+ ["title"] = "SELECCIÓN DE PERSONAJE",
+ ["char_info_title"] = "Información del personaje",
+ ["play"] = "JUGAR",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/fi.lua b/[core]/esx_multicharacter/locales/fi.lua
index 9da10652..5ac07734 100644
--- a/[core]/esx_multicharacter/locales/fi.lua
+++ b/[core]/esx_multicharacter/locales/fi.lua
@@ -1,33 +1,22 @@
Locales["fi"] = {
["male"] = "Mies",
["female"] = "Nainen",
- ["select_char"] = "Valitse hahmo",
- ["select_char_description"] = "Valitse hahmo, jolla haluat pelata.",
- ["create_char"] = "Uusi hahmo",
- ["char_play"] = "Pelaa",
- ["char_play_description"] = "Jatka kaupunkiin.",
- ["char_disabled"] = "Ei käytössä",
- ["char_disabled_description"] = "Tämä hahmo on käyttökelvoton.",
- ["char_delete"] = "Poista",
- ["char_delete_description"] = "Poista tämä hahmo pysyvästi.",
- ["char_delete_confirmation"] = "Vahvista poistaminen.",
- ["char_delete_confirmation_description"] = "Oletko varma, että poistat valitun hahmon?",
- ["char_delete_yes_description"] = "Kyllä, olen varma, että poistan valitun hahmon",
- ["char_delete_no_description"] = "Ei, Palaa hahmojen valintaan",
- ["character"] = "Hahmo: %s",
- ["return"] = "Takaisin",
- ["return_description"] = "Palaa hahmojen valintaan.",
- ["command_setslots"] = "Määritä pelaajan multicharacter paikkojen määrä",
- ["command_remslots"] = "Vähennä pelaajan multicharacter paikkojen määrää",
- ["command_enablechar"] = "Muuta pelaajan tietty hahmo käyttöön",
- ["command_disablechar"] = "Muuta pelaajan tietty hahmo pois käytöstä",
- ["command_charslot"] = "Hahmon paikan numero",
+ ["command_setslots"] = "Aseta pelaajalle monihahmoslottien määrä",
+ ["command_remslots"] = "Poista pelaajalta monihahmoslotteja",
+ ["command_enablechar"] = "Ota käyttöön pelaajan tietty hahmo",
+ ["command_disablechar"] = "Poista käytöstä pelaajan tietty hahmo",
+ ["command_charslot"] = "Hahmon slottinumero",
["command_identifier"] = "Pelaajan tunniste",
- ["command_slots"] = "# paikoista",
- ["slotsadd"] = "Lisäsit %s paikkaa kohteeseen %s",
- ["slotsedit"] = "Olet määrittänyt %s kohteeseen %s",
- ["slotsrem"] = "Poistit paikat kohteesta %s",
- ["charenabled"] = "Otit käyttöön hahmon #%s / %s",
- ["chardisabled"] = "Poistit hahmon #%s / %s käytöstä",
- ["charnotfound"] = "Hahmoa #%s / %s ei ole olemassa",
+ ["command_slots"] = "Slottien määrä",
+ ["slotsadd"] = "Asetit %s slottia pelaajalle %s",
+ ["slotsrem"] = "Poistit slottien määrän pelaajalta %s",
+ ["charenabled"] = "Otat käyttöön hahmon #%s pelaajalta %s",
+ ["chardisabled"] = "Poistit käytöstä hahmon #%s pelaajalta %s",
+ ["charnotfound"] = "Hahmo #%s pelaajalta %s ei ole olemassa",
+
+ UI = {
+ ["title"] = "HAHMON VALINTA",
+ ["char_info_title"] = "Hahmon tiedot",
+ ["play"] = "PELAA",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/fr.lua b/[core]/esx_multicharacter/locales/fr.lua
index a64e27af..78bc7e5e 100644
--- a/[core]/esx_multicharacter/locales/fr.lua
+++ b/[core]/esx_multicharacter/locales/fr.lua
@@ -1,32 +1,22 @@
Locales["fr"] = {
["male"] = "Homme",
["female"] = "Femme",
- ["select_char"] = "Sélectionnez un personnage",
- ["select_char_description"] = "Sélectionnez un personnage avec lequel jouer.",
- ["create_char"] = "Créer un nouveau personnage",
- ["char_play"] = "Jouer ce personnage",
- ["char_play_description"] = "Continuez dans la ville.",
- ["char_disabled"] = "Ce personnage est désactivé",
- ["char_disabled_description"] = "Ce personnage est inutilisable.",
- ["char_delete"] = "Supprimer ce personnage",
- ["char_delete_description"] = "Supprimer définitivement ce personnage.",
- ["char_delete_confirmation"] = "Confirmation de suppression",
- ["char_delete_confirmation_description"] = "Êtes-vous sûr de vouloir supprimer ce personnage?",
- ["char_delete_yes_description"] = "Oui, je suis sur de vouloir supprimer ce personnage",
- ["char_delete_no_description"] = "Non, retourner aux options de personnages",
- ["character"] = "Personnage: %s",
- ["return"] = "Retour",
- ["return_description"] = "Retourner à la sélection de personnage.",
- ["command_setslots"] = "Définir le numéro de créneau multi-caractères d'un joueur",
- ["command_remslots"] = "Suppression du numéro de créneau multi-caractères d'un joueur",
- ["command_enablechar"] = "Activer un personnage donné d'un joueur",
- ["command_disablechar"] = "Désactiver un personnage donné d'un joueur",
- ["command_charslot"] = "Numéro d'emplacement du caractère",
+ ["command_setslots"] = "Définir le nombre d'emplacements multicaractères d'un joueur",
+ ["command_remslots"] = "Retirer le nombre d'emplacements multicaractères d'un joueur",
+ ["command_enablechar"] = "Activer un personnage spécifique d'un joueur",
+ ["command_disablechar"] = "Désactiver un personnage spécifique d'un joueur",
+ ["command_charslot"] = "Numéro d'emplacement du personnage",
["command_identifier"] = "Identifiant du joueur",
- ["command_slots"] = "# de slots",
- ["slotsadd"] = "Vous avez défini %s slots à %s",
- ["slotsrem"] = "Vous avez suprimé les slots à %s",
+ ["command_slots"] = "Nombre d'emplacements",
+ ["slotsadd"] = "Vous avez défini %s emplacements pour %s",
+ ["slotsrem"] = "Vous avez retiré des emplacements pour %s",
["charenabled"] = "Vous avez activé le personnage #%s de %s",
["chardisabled"] = "Vous avez désactivé le personnage #%s de %s",
- ["charnotfound"] = "Le personnage #%s de %s n'éxiste",
+ ["charnotfound"] = "Le personnage #%s de %s n'existe pas",
+
+ UI = {
+ ["title"] = "SÉLECTION DE PERSONNAGE",
+ ["char_info_title"] = "Infos du personnage",
+ ["play"] = "JOUER",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/gr.lua b/[core]/esx_multicharacter/locales/gr.lua
index 49b832ca..cae6e2bc 100644
--- a/[core]/esx_multicharacter/locales/gr.lua
+++ b/[core]/esx_multicharacter/locales/gr.lua
@@ -1,32 +1,22 @@
Locales["gr"] = {
["male"] = "Άνδρας",
["female"] = "Γυναίκα",
- ["select_char"] = "Επιλογή Χαρακτήρα",
- ["select_char_description"] = "Επιλέξτε ένα χαρακτήρα για να παίξετε.",
- ["create_char"] = "Νέος Χαρακτήρας",
- ["char_play"] = "Παίξτε",
- ["char_play_description"] = "Συνέχεια στην πόλη.",
- ["char_disabled"] = "Απενεργοποιημένος",
- ["char_disabled_description"] = "Αυτός ο χαρακτήρας δεν είναι χρησιμοποιήσιμος.",
- ["char_delete"] = "Διαγραφή",
- ["char_delete_description"] = "Διαγράψτε οριστικά αυτόν τον χαρακτήρα.",
- ["char_delete_confirmation"] = "Επιβεβαίωση Διαγραφής",
- ["char_delete_confirmation_description"] = "Είστε σίγουρος ότι θέλετε να διαγράψετε τον επιλεγμένο χαρακτήρα;",
- ["char_delete_yes_description"] = "Ναι, είμαι σίγουρος ότι θέλω να διαγράψω τον επιλεγμένο χαρακτήρα",
- ["char_delete_no_description"] = "Όχι, επιστροφή στις επιλογές χαρακτήρα",
- ["character"] = "Χαρακτήρας: %s",
- ["return"] = "Επιστροφή",
- ["return_description"] = "Επιστροφή στην επιλογή χαρακτήρα.",
- ["command_setslots"] = "Ορίστε τον αριθμό των slot πολλαπλών χαρακτήρων ενός παίκτη",
- ["command_remslots"] = "Αφαιρέστε τον αριθμό των slot πολλαπλών χαρακτήρων ενός παίκτη",
- ["command_enablechar"] = "Ενεργοποιήστε έναν συγκεκριμένο χαρακτήρα ενός παίκτη",
- ["command_disablechar"] = "Απενεργοποιήστε έναν συγκεκριμένο χαρακτήρα ενός παίκτη",
- ["command_charslot"] = "Αριθμός υποδιαίρεσης του χαρακτήρα",
- ["command_identifier"] = "Ταυτότητα παίκτη",
- ["command_slots"] = "Αριθμός slot",
- ["slotsadd"] = "Ορίσατε %s slot σε %s",
- ["slotsrem"] = "Αφαιρέσατε slot από τον %s",
- ["charenabled"] = "Ενεργοποιήσατε τον χαρακτήρα #%s του %s",
- ["chardisabled"] = "Απενεργοποιήσατε τον χαρακτήρα #%s του %s",
- ["charnotfound"] = "Ο χαρακτήρας #%s του %s δεν υπάρχει",
+ ["command_setslots"] = "Ορισμός αριθμού multicharacter θέσεων για έναν παίκτη",
+ ["command_remslots"] = "Αφαίρεση αριθμού multicharacter θέσεων από έναν παίκτη",
+ ["command_enablechar"] = "Ενεργοποίηση συγκεκριμένου χαρακτήρα ενός παίκτη",
+ ["command_disablechar"] = "Απενεργοποίηση συγκεκριμένου χαρακτήρα ενός παίκτη",
+ ["command_charslot"] = "Αριθμός θέσης χαρακτήρα",
+ ["command_identifier"] = "Αναγνωριστικό παίκτη",
+ ["command_slots"] = "Αριθμός θέσεων",
+ ["slotsadd"] = "Ορίσατε %s θέσεις για τον/την %s",
+ ["slotsrem"] = "Αφαιρέσατε θέσεις από τον/την %s",
+ ["charenabled"] = "Ενεργοποιήσατε τον χαρακτήρα #%s του/της %s",
+ ["chardisabled"] = "Απενεργοποιήσατε τον χαρακτήρα #%s του/της %s",
+ ["charnotfound"] = "Ο χαρακτήρας #%s του/της %s δεν υπάρχει",
+
+ UI = {
+ ["title"] = "ΕΠΙΛΟΓΗ ΧΑΡΑΚΤΗΡΑ",
+ ["char_info_title"] = "Πληροφορίες Χαρακτήρα",
+ ["play"] = "ΠΑΙΞΕ",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/he.lua b/[core]/esx_multicharacter/locales/he.lua
index a6e8267e..e9ec999c 100644
--- a/[core]/esx_multicharacter/locales/he.lua
+++ b/[core]/esx_multicharacter/locales/he.lua
@@ -1,32 +1,22 @@
Locales["he"] = {
["male"] = "זכר",
["female"] = "נקבה",
- ["select_char"] = "בחר דמות",
- ["select_char_description"] = "בחר דמות לשחק.",
- ["create_char"] = "דמות חדשה",
- ["char_play"] = "שחק",
- ["char_play_description"] = "המשך לעיר.",
- ["char_disabled"] = "מושבת",
- ["char_disabled_description"] = "דמות זו לא ניתן לשימוש.",
- ["char_delete"] = "מחק",
- ["char_delete_description"] = "הסר את הדמות לצמיתות.",
- ["char_delete_confirmation"] = "אישור מחיקה",
- ["char_delete_confirmation_description"] = "האם אתה בטוח שאתה מסיר את הדמות שנבחרה?",
- ["char_delete_yes_description"] = "כן, אני בטוח שאני מסיר את הדמות שנבחרה",
- ["char_delete_no_description"] = "לא, חזור לאפשרויות הדמות",
- ["character"] = "דמות: %s",
- ["return"] = "חזור",
- ["return_description"] = "חזור לבחירת הדמות.",
- ["command_setslots"] = "הגדר מספר מקומות לדמות של שחקן",
- ["command_remslots"] = "הסר מספר מקומות לדמות של שחקן",
+ ["command_setslots"] = "הגדר מספר חריצי דמויות מרובות לשחקן",
+ ["command_remslots"] = "הסר מספר חריצי דמויות מרובות משחקן",
["command_enablechar"] = "אפשר דמות מסוימת של שחקן",
- ["command_disablechar"] = "השבת דמות מסוימת של שחקן",
- ["command_charslot"] = "מספר מקום של הדמות",
+ ["command_disablechar"] = "נטרל דמות מסוימת של שחקן",
+ ["command_charslot"] = "מספר חריץ הדמות",
["command_identifier"] = "מזהה שחקן",
- ["command_slots"] = "# של מקומות",
- ["slotsadd"] = "הגדרת %s מקומות ל- %s",
- ["slotsrem"] = "הסרת מקומות ל- %s",
- ["charenabled"] = "אפשרת את הדמות #%s של %s",
- ["chardisabled"] = "השבתת את הדמות #%s של %s",
+ ["command_slots"] = "מספר חריצים",
+ ["slotsadd"] = "הגדרת %s חריצים עבור %s",
+ ["slotsrem"] = "הסרת חריצים מ-%s",
+ ["charenabled"] = "איפשרת את הדמות #%s של %s",
+ ["chardisabled"] = "נטרלת את הדמות #%s של %s",
["charnotfound"] = "הדמות #%s של %s לא קיימת",
+
+ UI = {
+ ["title"] = "בחירת דמות",
+ ["char_info_title"] = "פרטי דמות",
+ ["play"] = "שחק",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/hu.lua b/[core]/esx_multicharacter/locales/hu.lua
index b4d29a7f..8693a119 100644
--- a/[core]/esx_multicharacter/locales/hu.lua
+++ b/[core]/esx_multicharacter/locales/hu.lua
@@ -1,32 +1,22 @@
Locales["hu"] = {
["male"] = "Férfi",
["female"] = "Nő",
- ["select_char"] = "Karakter kiválasztása",
- ["select_char_description"] = "Karakter kiválasztása a játékhoz.",
- ["create_char"] = "Új karakter létrehozása",
- ["char_play"] = "Karakter kiválasztása",
- ["char_play_description"] = "Visszatérés a városba.",
- ["char_disabled"] = "Karakter le van tiltva",
- ["char_disabled_description"] = "Ez a karakter nem használható.",
- ["char_delete"] = "Karakter törlése",
- ["char_delete_description"] = "Karakter végleges törlése.",
- ["char_delete_confirmation"] = "Törlés megerősítés",
- ["char_delete_confirmation_description"] = "Biztosan törölni szeretnéd a kiválasztott karaktert?",
- ["char_delete_yes_description"] = "Igen, törölni szeretném",
- ["char_delete_no_description"] = "Nem, vissza a karakter opciókhoz",
- ["character"] = "Karakter: %s",
- ["return"] = "Vissza",
- ["return_description"] = "Vissza a karakter választáshoz.",
- ["command_setslots"] = "Játékos karakter slotok számának beállítása",
- ["command_remslots"] = "Játékos karakter slotok számának eltávolítása",
- ["command_enablechar"] = "Játékos karakterének engedélyezése",
- ["command_disablechar"] = "Játékos karakterének tiltása",
- ["command_charslot"] = "Karakter slotok számának beállítása",
- ["command_identifier"] = "Játékos identifier",
- ["command_slots"] = "# slotok",
- ["slotsadd"] = "Beállítottad %s slotokat, neki %s",
- ["slotsrem"] = "Eltávolítottad a következő slotokat: %s",
- ["charenabled"] = "Karakter engedélyezve #%s-ból/ből %s",
- ["chardisabled"] = "Karakter letiltva #%s-ból/ből %s",
- ["charnotfound"] = "Karakter #%s-ból/ből %s nem létezik",
+ ["command_setslots"] = "Többszereplős slotok számának beállítása egy játékos számára",
+ ["command_remslots"] = "Többszereplős slotok számának eltávolítása egy játékostól",
+ ["command_enablechar"] = "Egy adott karakter engedélyezése egy játékosnál",
+ ["command_disablechar"] = "Egy adott karakter letiltása egy játékosnál",
+ ["command_charslot"] = "A karakter slot száma",
+ ["command_identifier"] = "Játékos azonosító",
+ ["command_slots"] = "Slotok száma",
+ ["slotsadd"] = "%s slotot állítottál be %s játékosnak",
+ ["slotsrem"] = "Eltávolítottad a slotokat %s játékostól",
+ ["charenabled"] = "Engedélyezted a(z) #%s karaktert %s játékosnál",
+ ["chardisabled"] = "Letiltottad a(z) #%s karaktert %s játékosnál",
+ ["charnotfound"] = "A(z) #%s karakter %s játékosnál nem létezik",
+
+ UI = {
+ ["title"] = "KARAKTER KIVÁLASZTÁSA",
+ ["char_info_title"] = "Karakterinformáció",
+ ["play"] = "JÁTÉK",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/it.lua b/[core]/esx_multicharacter/locales/it.lua
index f8a596bd..8a06ca46 100644
--- a/[core]/esx_multicharacter/locales/it.lua
+++ b/[core]/esx_multicharacter/locales/it.lua
@@ -1,32 +1,22 @@
Locales["it"] = {
- ["male"] = "Uomo",
- ["female"] = "Donna",
- ["select_char"] = "Seleziona personaggio",
- ["select_char_description"] = "Seleziona un personaggio con cui giocare.",
- ["create_char"] = "Nuovo personaggio",
- ["char_play"] = "Inizia",
- ["char_play_description"] = "Continua in città.",
- ["char_disabled"] = "Disabilitato",
- ["char_disabled_description"] = "Questo personaggio è inutilizzabile.",
- ["char_delete"] = "Elimina",
- ["char_delete_description"] = "Rimuovi permanentemente questo personaggio..",
- ["char_delete_confirmation"] = "Conferma eliminazione",
- ["char_delete_confirmation_description"] = "Sei sicuro di voler rimuovere il personaggio selezionato?",
- ["char_delete_yes_description"] = "Si, sono sicuro di voler rimuovere il personaggio",
- ["char_delete_no_description"] = "No, ritorna alle opzioni",
- ["character"] = "Personaggio: %s",
- ["return"] = "Ritorno",
- ["return_description"] = "Ritorna alla selezione dei personaggi.",
- ["command_setslots"] = "imposta il numero di slot per il giocatore",
- ["command_remslots"] = "Rimuovi slot per il giocatore",
+ ["male"] = "Maschio",
+ ["female"] = "Femmina",
+ ["command_setslots"] = "Imposta il numero di slot multicarattere per un giocatore",
+ ["command_remslots"] = "Rimuovi il numero di slot multicarattere da un giocatore",
["command_enablechar"] = "Abilita un determinato personaggio di un giocatore",
- ["command_disablechar"] = "Disabilita un determinato personaggio per i giocatore",
- ["command_charslot"] = "Numero di slot",
- ["command_identifier"] = "Identificativo del giocatore",
- ["command_slots"] = "# di slot",
- ["slotsadd"] = "Hai impostato %s slots a %s",
- ["slotsrem"] = "Hai rimosso gli slot in %s",
- ["charenabled"] = "Hai abilitato il personaggio #%s di %s",
- ["chardisabled"] = "hai disabilitato il personaggio #%s di %s",
+ ["command_disablechar"] = "Disabilita un determinato personaggio di un giocatore",
+ ["command_charslot"] = "Numero dello slot del personaggio",
+ ["command_identifier"] = "Identificatore del giocatore",
+ ["command_slots"] = "Numero di slot",
+ ["slotsadd"] = "Hai impostato %s slot per %s",
+ ["slotsrem"] = "Hai rimosso gli slot da %s",
+ ["charenabled"] = "Hai abilitato il personaggio #%s di %s",
+ ["chardisabled"] = "Hai disabilitato il personaggio #%s di %s",
["charnotfound"] = "Il personaggio #%s di %s non esiste",
+
+ UI = {
+ ["title"] = "SELEZIONE DEL PERSONAGGIO",
+ ["char_info_title"] = "Informazioni del personaggio",
+ ["play"] = "GIOCA",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/nl.lua b/[core]/esx_multicharacter/locales/nl.lua
index 9bf90040..6e527644 100644
--- a/[core]/esx_multicharacter/locales/nl.lua
+++ b/[core]/esx_multicharacter/locales/nl.lua
@@ -1,32 +1,22 @@
Locales["nl"] = {
["male"] = "Man",
["female"] = "Vrouw",
- ["select_char"] = "Selecteer Karakter",
- ["select_char_description"] = "Selecteer een karakter om mee te spelen.",
- ["create_char"] = "Maak karakter aan",
- ["char_play"] = "Speel",
- ["char_play_description"] = "Ga verder naar de stad.",
- ["char_disabled"] = "Uitgeschakeld",
- ["char_disabled_description"] = "Dit karakter is onbruikbaar.",
- ["char_delete"] = "Verwijder",
- ["char_delete_description"] = "Verwijder dit karakter (PERMANENT).",
- ["char_delete_confirmation"] = "Bevestig",
- ["char_delete_confirmation_description"] = "Ben je zeker dat je het geselecteerde karakter wilt verwijderen?",
- ["char_delete_yes_description"] = "Ja, ik ben zeker dat ik het karakter wil verwijderen",
- ["char_delete_no_description"] = "Nee, ga terug naar karakter opties",
- ["character"] = "Karakter: %s",
- ["return"] = "Ga terug",
- ["return_description"] = "Ga terug naar karakter selectie.",
- ["command_setslots"] = "Multicharacter hoeveelheid slots van een speler instellen",
- ["command_remslots"] = "Verwijder slotnummer van een speler",
- ["command_enablechar"] = "Een bepaald karakter van een speler inschakelen",
- ["command_disablechar"] = "Een bepaald karakter van een speler uitschakelen",
- ["command_charslot"] = "Slotnummer van het personage",
- ["command_identifier"] = "Speler identifier",
- ["command_slots"] = "# van de slots",
- ["slotsadd"] = "Je hebt %s slots gezet naar %s",
- ["slotsrem"] = "Je hebt slots verwijderd naar %s",
- ["charenabled"] = "Je hebt karakter #%s ingeschakeld van %s",
- ["chardisabled"] = "Je hebt karakter #%s uitgeschakeld van %s",
- ["charnotfound"] = "Karakter #%s van %s bestaat niet",
+ ["command_setslots"] = "Stel het aantal multi-personage slots in voor een speler",
+ ["command_remslots"] = "Verwijder het aantal multi-personage slots van een speler",
+ ["command_enablechar"] = "Schakel een specifiek personage van een speler in",
+ ["command_disablechar"] = "Schakel een specifiek personage van een speler uit",
+ ["command_charslot"] = "Personage slotnummer",
+ ["command_identifier"] = "Speleridentificatie",
+ ["command_slots"] = "Aantal slots",
+ ["slotsadd"] = "Je hebt %s slots ingesteld voor %s",
+ ["slotsrem"] = "Je hebt slots verwijderd van %s",
+ ["charenabled"] = "Je hebt personage #%s van %s ingeschakeld",
+ ["chardisabled"] = "Je hebt personage #%s van %s uitgeschakeld",
+ ["charnotfound"] = "Personage #%s van %s bestaat niet",
+
+ UI = {
+ ["title"] = "PERSONAGE SELECTIE",
+ ["char_info_title"] = "Personage Informatie",
+ ["play"] = "SPEEL",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/pl.lua b/[core]/esx_multicharacter/locales/pl.lua
index b71f35fd..8c290171 100644
--- a/[core]/esx_multicharacter/locales/pl.lua
+++ b/[core]/esx_multicharacter/locales/pl.lua
@@ -1,33 +1,22 @@
Locales["pl"] = {
- ["male"] = "Mężczyzna",
- ["female"] = "Kobieta",
- ["select_char"] = "Wybierz postać",
- ["select_char_description"] = "Wybierz postać, którą chcesz grać.",
- ["create_char"] = "Nowa postać",
- ["char_play"] = "Graj",
- ["char_play_description"] = "Przejdź do miasta.",
- ["char_disabled"] = "Wyłączona",
- ["char_disabled_description"] = "Ta postać jest niedostępna.",
- ["char_delete"] = "Usuń",
- ["char_delete_description"] = "Trwale usuń tę postać.",
- ["char_delete_confirmation"] = "Potwierdz usunięcie",
- ["char_delete_confirmation_description"] = "Czy na pewno chcesz usunąć wybraną postać?",
- ["char_delete_yes_description"] = "Tak, jestem pewien, że chcę usunąć wybraną postać",
- ["char_delete_no_description"] = "Nie, wróć do opcji postaci",
- ["character"] = "Postać: %s",
- ["return"] = "Powrót",
- ["return_description"] = "Wróć do wyboru postaci.",
- ["command_setslots"] = "Ustaw liczbę slotów dla wielu postaci",
- ["command_remslots"] = "Usuń liczbę slotów dla wielu postaci",
- ["command_enablechar"] = "Włącz określoną postać",
- ["command_disablechar"] = "Wyłącz określoną postać",
- ["command_charslot"] = "Numer slotu postaci",
- ["command_identifier"] = "Identyfikator postaci",
- ["command_slots"] = "# liczba slotów",
- ["slotsadd"] = "Ustawiłeś %s slotów dla %s",
- ["slotsrem"] = "Usunąłeś sloty dla %s",
- ["charenabled"] = "Włączyłeś postać #%s gracza %s",
- ["chardisabled"] = "Wyłączyłeś postać #%s gracza %s",
- ["charnotfound"] = "Postać #%s gracza %s nie istnieje",
+ ["male"] = "Mężczyzna",
+ ["female"] = "Kobieta",
+ ["command_setslots"] = "Ustaw liczbę slotów multi-postaci dla gracza",
+ ["command_remslots"] = "Usuń liczbę slotów multi-postaci od gracza",
+ ["command_enablechar"] = "Włącz konkretną postać gracza",
+ ["command_disablechar"] = "Wyłącz konkretną postać gracza",
+ ["command_charslot"] = "Numer slotu postaci",
+ ["command_identifier"] = "Identyfikator gracza",
+ ["command_slots"] = "Liczba slotów",
+ ["slotsadd"] = "Ustawiłeś %s slotów dla %s",
+ ["slotsrem"] = "Usunąłeś sloty od %s",
+ ["charenabled"] = "Włączyłeś postać #%s dla %s",
+ ["chardisabled"] = "Wyłączyłeś postać #%s dla %s",
+ ["charnotfound"] = "Postać #%s dla %s nie istnieje",
+ UI = {
+ ["title"] = "WYBÓR POSTACI",
+ ["char_info_title"] = "Informacje o postaci",
+ ["play"] = "GRAJ",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/pt.lua b/[core]/esx_multicharacter/locales/pt.lua
index 36df3e00..23b2c201 100644
--- a/[core]/esx_multicharacter/locales/pt.lua
+++ b/[core]/esx_multicharacter/locales/pt.lua
@@ -1,25 +1,22 @@
Locales["pt"] = {
["male"] = "Masculino",
["female"] = "Feminino",
- ["delete_label"] = "Excluir %s %s?",
- ["select_char"] = "Selecionar personagem",
- ["select_char_description"] = "Select a character to play as.",
- ["create_char"] = "Criar novo personagem",
- ["char_play"] = "Selecionar",
- ["char_disabled"] = "Este personagem está desabilitado",
- ["char_delete"] = "Excluir este personagem",
- ["cancel"] = "Cancelar",
- ["confirm"] = "Confirmar",
- ["command_setslots"] = "Definir o número de slots de vários personagens de um jogador",
- ["command_remslots"] = "Remover o número de slots de vários personagens de um jogador",
- ["command_enablechar"] = "Habilitar um determinado personagem de um jogador",
- ["command_disablechar"] = "Desabilitar um determinado personagem de um jogador",
+ ["command_setslots"] = "Defina o número de slots de múltiplos personagens para um jogador",
+ ["command_remslots"] = "Remova o número de slots de múltiplos personagens de um jogador",
+ ["command_enablechar"] = "Ative um personagem específico de um jogador",
+ ["command_disablechar"] = "Desative um personagem específico de um jogador",
["command_charslot"] = "Número do slot do personagem",
["command_identifier"] = "Identificador do jogador",
- ["command_slots"] = "# de slots",
+ ["command_slots"] = "Número de slots",
["slotsadd"] = "Você definiu %s slots para %s",
["slotsrem"] = "Você removeu slots de %s",
["charenabled"] = "Você ativou o personagem #%s de %s",
["chardisabled"] = "Você desativou o personagem #%s de %s",
- ["charnotfound"] = "Personagem #%s de %s não existe",
+ ["charnotfound"] = "O personagem #%s de %s não existe",
+
+ UI = {
+ ["title"] = "SELEÇÃO DE PERSONAGEM",
+ ["char_info_title"] = "Informações do personagem",
+ ["play"] = "JOGAR",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/sl.lua b/[core]/esx_multicharacter/locales/sl.lua
index 799a1563..1697e3b7 100644
--- a/[core]/esx_multicharacter/locales/sl.lua
+++ b/[core]/esx_multicharacter/locales/sl.lua
@@ -1,33 +1,22 @@
Locales["sl"] = {
["male"] = "Moški",
["female"] = "Ženska",
- ["select_char"] = "Izberi znak",
- ["select_char_description"] = "Izberite lik za igranje.",
- ["create_char"] = "Nov lik",
- ["char_play"] = "Predvajaj",
- ["char_play_description"] = "Nadaljujte v mesto.",
- ["char_disabled"] = "Onemogočeno",
- ["char_disabled_description"] = "Ta znak je neuporaben.",
- ["char_delete"] = "Izbriši",
- ["char_delete_description"] = "Trajno odstrani ta znak.",
- ["char_delete_confirmation"] = "Potrditev brisanja",
- ["char_delete_confirmation_description"] = "Ali ste prepicani da hocete zbrisati svoj karakter*",
- ["char_delete_yes_description"] = "Da",
- ["char_delete_no_description"] = "Ne",
- ["character"] = "Znak: %s",
- ["return"] = "Vrni se",
- ["return_description"] = "Nazaj na izbiro znakov.",
- ["command_setslots"] = "Nastavi število večznakovnih mest za igralca",
- ["command_remslots"] = "Odstrani večznakovno število rež igralca",
+ ["command_setslots"] = "Nastavi število večkarakternih slotov za igralca",
+ ["command_remslots"] = "Odstrani število večkarakternih slotov igralcu",
["command_enablechar"] = "Omogoči določen lik igralca",
["command_disablechar"] = "Onemogoči določen lik igralca",
- ["command_charslot"] = "Številka reže znaka",
+ ["command_charslot"] = "Številka slota lika",
["command_identifier"] = "Identifikator igralca",
- ["command_slots"] = "Št. rež",
- ["slotsadd"] = "Dodali ste %s rež v %s",
- ["slotsedit"] = "%s rež ste nastavili na %s",
- ["slotsrem"] = "Odstranili ste reže za %s",
- ["charenabled"] = "Omogočili ste znak #%s od %s",
- ["chardisabled"] = "Onemogočili ste znak #%s od %s",
- ["charnotfound"] = "Znak #%s od %s ne obstaja",
+ ["command_slots"] = "Število slotov",
+ ["slotsadd"] = "Nastavil si %s slotov za %s",
+ ["slotsrem"] = "Odstranil si slot(e) od %s",
+ ["charenabled"] = "Omogočil si lika #%s za %s",
+ ["chardisabled"] = "Onemogočil si lika #%s za %s",
+ ["charnotfound"] = "Lik #%s za %s ne obstaja",
+
+ UI = {
+ ["title"] = "IZBIRA LIKA",
+ ["char_info_title"] = "Informacije o liku",
+ ["play"] = "IGRAJ",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/sr.lua b/[core]/esx_multicharacter/locales/sr.lua
index 85978aca..7ace5d91 100644
--- a/[core]/esx_multicharacter/locales/sr.lua
+++ b/[core]/esx_multicharacter/locales/sr.lua
@@ -1,33 +1,22 @@
Locales["sr"] = {
- ["male"] = "Muško",
- ["female"] = "Žensko",
- ["select_char"] = "Izaberi Karakter",
- ["select_char_description"] = "Izaberi karakter kojim ćeš igrati",
- ["create_char"] = "Novi Karakter",
- ["char_play"] = "Igraj",
- ["char_play_description"] = "Nastavi u grad.",
- ["char_disabled"] = "Onemogućeno",
- ["char_disabled_description"] = "Taj karakter je onemogućen",
- ["char_delete"] = "Izbriši",
- ["char_delete_description"] = "Nepovratno obrišite karakter",
- ["char_delete_confirmation"] = "Potvrda brisanja",
- ["char_delete_confirmation_description"] = "Da li ste sigurni da želite da obrišete karakter?",
- ["char_delete_yes_description"] = "Da, siguran sam da želim obrisati karakter",
- ["char_delete_no_description"] = "Ne, vrati se nazad",
- ["character"] = "Karakter: %s",
- ["return"] = "Nazad",
- ["return_description"] = "Povratak na biranje karaktera.",
- ["command_setslots"] = "Postavi broj slotova karaktera igraču",
- ["command_remslots"] = "Izbriši slotove igraču",
- ["command_enablechar"] = "Dozvoli karakter igraču",
- ["command_disablechar"] = "Zabrani karakter igraču",
- ["command_charslot"] = "Broj slotova",
- ["command_identifier"] = "Identifikator Igrača",
- ["command_slots"] = "# slotova",
- ["slotsadd"] = "Dodali ste %s slotova %s",
- ["slotsedit"] = "Postavili ste %s slotova %s",
- ["slotsrem"] = "Oduzeli ste slotove %s",
- ["charenabled"] = "Dozvolili ste karakter #%s od %s",
- ["chardisabled"] = "Zabranili ste karakter #%s od %s",
- ["charnotfound"] = "Karakter #%s od %s ne postoji",
+ ["male"] = "Muški",
+ ["female"] = "Ženski",
+ ["command_setslots"] = "Postavi broj multi-karakternih slotova za igrača",
+ ["command_remslots"] = "Ukloni broj multi-karakternih slotova od igrača",
+ ["command_enablechar"] = "Omogući određeni lik igrača",
+ ["command_disablechar"] = "Onemogući određeni lik igrača",
+ ["command_charslot"] = "Broj slota lika",
+ ["command_identifier"] = "Identifikator igrača",
+ ["command_slots"] = "Broj slotova",
+ ["slotsadd"] = "Postavio si %s slotova za %s",
+ ["slotsrem"] = "Uklonio si slotove od %s",
+ ["charenabled"] = "Omogućio si lika #%s za %s",
+ ["chardisabled"] = "Onemogućio si lika #%s za %s",
+ ["charnotfound"] = "Lik #%s za %s ne postoji",
+
+ UI = {
+ ["title"] = "IZBOR LIKA",
+ ["char_info_title"] = "Informacije o liku",
+ ["play"] = "IGRAJ",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/sv.lua b/[core]/esx_multicharacter/locales/sv.lua
index d726459b..b7d3617e 100644
--- a/[core]/esx_multicharacter/locales/sv.lua
+++ b/[core]/esx_multicharacter/locales/sv.lua
@@ -1,32 +1,22 @@
Locales["sv"] = {
["male"] = "Man",
["female"] = "Kvinna",
- ["select_char"] = "Välj karaktär",
- ["select_char_description"] = "Välj en karaktär att spela som.",
- ["create_char"] = "Ny karaktär",
- ["char_play"] = "Spela",
- ["char_play_description"] = "Fortsätt i staden.",
- ["char_disabled"] = "Otillgänglig",
- ["char_disabled_description"] = "Denna karaktär är inte tillgänglig.",
- ["char_delete"] = "Radera",
- ["char_delete_description"] = "Permanent radera denna karaktär.",
- ["char_delete_confirmation"] = "Acceptera",
- ["char_delete_confirmation_description"] = "Säker att du vill radera den?",
- ["char_delete_yes_description"] = "Ja, jag är säker",
- ["char_delete_no_description"] = "Nej, gå tillbaka till karaktärerna",
- ["character"] = "Karaktär: %s",
- ["return"] = "Tillbaka",
- ["return_description"] = "Tillbaka till karaktärerna.",
- ["command_setslots"] = "Ge slots till en spelare",
- ["command_remslots"] = "Radera slots från en spelare",
- ["command_enablechar"] = "Aktivera vald karaktär till spelare",
- ["command_disablechar"] = "Avaktivera vald karaktär till spelare",
- ["command_charslot"] = "Slotsnummer på karaktären",
- ["command_identifier"] = "Spelare",
- ["command_slots"] = "# av slots",
- ["slotsadd"] = "Du satte %s slots till %s",
- ["slotsrem"] = "Du raderade slots till %s",
- ["charenabled"] = "Du aktiverade karaktär #%s av %s",
- ["chardisabled"] = "Du avaktiverade #%s av %s",
- ["charnotfound"] = "Karaktär #%s av %s existerar inte",
+ ["command_setslots"] = "Sätt antalet multikaraktärsplatser för en spelare",
+ ["command_remslots"] = "Ta bort antalet multikaraktärsplatser från en spelare",
+ ["command_enablechar"] = "Aktivera en specifik karaktär för en spelare",
+ ["command_disablechar"] = "Inaktivera en specifik karaktär för en spelare",
+ ["command_charslot"] = "Karaktärsplatsnummer",
+ ["command_identifier"] = "Spelaridentifierare",
+ ["command_slots"] = "Antal platser",
+ ["slotsadd"] = "Du har satt %s platser för %s",
+ ["slotsrem"] = "Du har tagit bort platser från %s",
+ ["charenabled"] = "Du har aktiverat karaktär #%s för %s",
+ ["chardisabled"] = "Du har inaktiverat karaktär #%s för %s",
+ ["charnotfound"] = "Karaktär #%s för %s finns inte",
+
+ UI = {
+ ["title"] = "KARAKTÄRSVAL",
+ ["char_info_title"] = "Karaktärsinformation",
+ ["play"] = "SPELA",
+ }
}
diff --git a/[core]/esx_multicharacter/locales/zh-cn.lua b/[core]/esx_multicharacter/locales/zh-cn.lua
index 9f45bc58..4d4e5fce 100644
--- a/[core]/esx_multicharacter/locales/zh-cn.lua
+++ b/[core]/esx_multicharacter/locales/zh-cn.lua
@@ -1,33 +1,22 @@
Locales["zh-cn"] = {
["male"] = "男性",
["female"] = "女性",
- ["select_char"] = "选择角色",
- ["select_char_description"] = "请选择已存在的游戏角色进入.",
- ["create_char"] = "创建新角色",
- ["char_play"] = "游玩",
- ["char_play_description"] = "继而进入城镇.",
- ["char_disabled"] = "不可用",
- ["char_disabled_description"] = "此角色无法使用.",
- ["char_delete"] = "移除",
- ["char_delete_description"] = "永久删除此角色.",
- ["char_delete_confirmation"] = "删除确认",
- ["char_delete_confirmation_description"] = "您确定要删除选定的角色吗?",
- ["char_delete_yes_description"] = "是的,我确定删除选定的角色",
- ["char_delete_no_description"] = "取消,并返回至角色选项",
- ["character"] = "游戏角色: %s",
- ["return"] = "返回",
- ["return_description"] = "返回至角色选择.",
- ["command_setslots"] = "设置玩家多玩家插槽数量",
- ["command_remslots"] = "移除玩家多角色位置数量",
- ["command_enablechar"] = "启用玩家游玩某个角色",
- ["command_disablechar"] = "禁用玩家游玩某个角色",
- ["command_charslot"] = "玩家的角色数量上限",
- ["command_identifier"] = "玩家标识符",
- ["command_slots"] = "# 插槽数量",
- ["slotsadd"] = "增加: %s 角色插槽至 %s",
- ["slotsedit"] = "成功配置 %s 角色插槽至 %s",
- ["slotsrem"] = "成功移除角色插槽 %s",
- ["charenabled"] = "您开启了角色: #%s使用权, 拥有人%s",
- ["chardisabled"] = "您关闭了角色: #%s使用权, 拥有人%s",
- ["charnotfound"] = "角色信息: #%s ,拥有人:%s 并不存在",
+ ["command_setslots"] = "为玩家设置多角色槽位数量",
+ ["command_remslots"] = "移除玩家的多角色槽位数量",
+ ["command_enablechar"] = "启用玩家的指定角色",
+ ["command_disablechar"] = "禁用玩家的指定角色",
+ ["command_charslot"] = "角色槽位编号",
+ ["command_identifier"] = "玩家标识",
+ ["command_slots"] = "槽位数量",
+ ["slotsadd"] = "你已为 %s 设置了 %s 个槽位",
+ ["slotsrem"] = "你已移除了 %s 的槽位",
+ ["charenabled"] = "你已启用了 %s 的角色 #%s",
+ ["chardisabled"] = "你已禁用了 %s 的角色 #%s",
+ ["charnotfound"] = "%s 的角色 #%s 不存在",
+
+ UI = {
+ ["title"] = "角色选择",
+ ["char_info_title"] = "角色信息",
+ ["play"] = "开始游戏",
+ }
}
diff --git a/[core]/esx_multicharacter/web/build/assets/esxLogo-sNwPFb_p.png b/[core]/esx_multicharacter/web/build/assets/esxLogo-sNwPFb_p.png
new file mode 100644
index 00000000..9be59f99
Binary files /dev/null and b/[core]/esx_multicharacter/web/build/assets/esxLogo-sNwPFb_p.png differ
diff --git a/[core]/esx_multicharacter/web/build/assets/index-Cy_cJ0Pf.css b/[core]/esx_multicharacter/web/build/assets/index-Cy_cJ0Pf.css
new file mode 100644
index 00000000..ce5a0342
--- /dev/null
+++ b/[core]/esx_multicharacter/web/build/assets/index-Cy_cJ0Pf.css
@@ -0,0 +1 @@
+@import"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap";*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}.col-span-2{grid-column:span 2 / span 2}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-6{margin-right:1.5rem}.flex{display:flex}.grid{display:grid}.h-16{height:4rem}.h-\[60px\]{height:60px}.h-\[65px\]{height:65px}.h-\[70px\]{height:70px}.h-full{height:100%}.h-screen{height:100vh}.w-0{width:0px}.w-\[411px\]{width:411px}.w-\[462px\]{width:462px}.w-\[527px\]{width:527px}.w-\[65px\]{width:65px}.w-full{width:100%}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-\[5px\]{border-radius:5px}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border-2{border-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-\[\#fb9b04\]{--tw-border-opacity: 1;border-color:rgb(251 155 4 / var(--tw-border-opacity))}.border-\[\#ffffff50\]{border-color:#ffffff50}.border-neutral-800{--tw-border-opacity: 1;border-color:rgb(38 38 38 / var(--tw-border-opacity))}.bg-\[\#161616F2\]{background-color:#161616f2}.bg-\[\#38383880\]{background-color:#38383880}.bg-\[\#FB9B04\]{--tw-bg-opacity: 1;background-color:rgb(251 155 4 / var(--tw-bg-opacity))}.bg-\[\#fb9b0440\]{background-color:#fb9b0440}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}.bg-neutral-800{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity))}.bg-neutral-900{--tw-bg-opacity: 1;background-color:rgb(28 28 28 / var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(255 152 0 / var(--tw-bg-opacity))}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.text-right{text-align:right}.text-\[16px\]{font-size:16px}.text-\[24px\]{font-size:24px}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tracking-wide{letter-spacing:.025em}.text-\[\#383838\]{--tw-text-opacity: 1;color:rgb(56 56 56 / var(--tw-text-opacity))}.text-\[\#fb9b04\]{--tw-text-opacity: 1;color:rgb(251 155 4 / var(--tw-text-opacity))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-100{opacity:1}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}:root{--primary: #ff9800;--primary-dark: #f57c00;--dark-bg: #1c1c1c;--card-bg: #262626}body{margin:0;font-family:Poppins,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#fff}@keyframes slideIn{0%{transform:translate(-100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes slideDown{0%{max-height:0;opacity:0;transform:translateY(-10px)}to{max-height:500px;opacity:1;transform:translateY(0)}}.animate-slideIn{animation:slideIn .5s ease-out forwards}.animate-slideDown{animation:slideDown .3s ease-out forwards;overflow:hidden}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.hover\:border-\[\#FFFFFF\]:hover{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.hover\:bg-\[\#FFA31A\]:hover{--tw-bg-opacity: 1;background-color:rgb(255 163 26 / var(--tw-bg-opacity))}.hover\:bg-orange-600:hover{--tw-bg-opacity: 1;background-color:rgb(245 124 0 / var(--tw-bg-opacity))}.hover\:bg-red-900:hover{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}.hover\:text-\[\#383838\]:hover{--tw-text-opacity: 1;color:rgb(56 56 56 / var(--tw-text-opacity))}.group:hover .group-hover\:text-\[\#FFFFFF\]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}
diff --git a/[core]/esx_multicharacter/web/build/assets/index-DGfzXZP_.js b/[core]/esx_multicharacter/web/build/assets/index-DGfzXZP_.js
new file mode 100644
index 00000000..385b8f25
--- /dev/null
+++ b/[core]/esx_multicharacter/web/build/assets/index-DGfzXZP_.js
@@ -0,0 +1,93 @@
+(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=n(l);fetch(l.href,o)}})();var Ss={exports:{}},fl={},xs={exports:{}},I={};/**
+ * @license React
+ * react.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var er=Symbol.for("react.element"),Gc=Symbol.for("react.portal"),Xc=Symbol.for("react.fragment"),Zc=Symbol.for("react.strict_mode"),Jc=Symbol.for("react.profiler"),qc=Symbol.for("react.provider"),bc=Symbol.for("react.context"),ef=Symbol.for("react.forward_ref"),tf=Symbol.for("react.suspense"),nf=Symbol.for("react.memo"),rf=Symbol.for("react.lazy"),tu=Symbol.iterator;function lf(e){return e===null||typeof e!="object"?null:(e=tu&&e[tu]||e["@@iterator"],typeof e=="function"?e:null)}var Es={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Cs=Object.assign,_s={};function on(e,t,n){this.props=e,this.context=t,this.refs=_s,this.updater=n||Es}on.prototype.isReactComponent={};on.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};on.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Ns(){}Ns.prototype=on.prototype;function ni(e,t,n){this.props=e,this.context=t,this.refs=_s,this.updater=n||Es}var ri=ni.prototype=new Ns;ri.constructor=ni;Cs(ri,on.prototype);ri.isPureReactComponent=!0;var nu=Array.isArray,Ps=Object.prototype.hasOwnProperty,li={current:null},Ts={key:!0,ref:!0,__self:!0,__source:!0};function Ls(e,t,n){var r,l={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)Ps.call(t,r)&&!Ts.hasOwnProperty(r)&&(l[r]=t[r]);var u=arguments.length-2;if(u===1)l.children=n;else if(1>>1,Z=N[W];if(0>>1;Wl(zl,j))ytl(ir,zl)?(N[W]=ir,N[yt]=j,W=yt):(N[W]=zl,N[vt]=j,W=vt);else if(ytl(ir,j))N[W]=ir,N[yt]=j,W=yt;else break e}}return z}function l(N,z){var j=N.sortIndex-z.sortIndex;return j!==0?j:N.id-z.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,u=i.now();e.unstable_now=function(){return i.now()-u}}var s=[],a=[],p=1,m=null,h=3,v=!1,w=!1,y=!1,C=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,c=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(N){for(var z=n(a);z!==null;){if(z.callback===null)r(a);else if(z.startTime<=N)r(a),z.sortIndex=z.expirationTime,t(s,z);else break;z=n(a)}}function g(N){if(y=!1,d(N),!w)if(n(s)!==null)w=!0,Tl(E);else{var z=n(a);z!==null&&Ll(g,z.startTime-N)}}function E(N,z){w=!1,y&&(y=!1,f(P),P=-1),v=!0;var j=h;try{for(d(z),m=n(s);m!==null&&(!(m.expirationTime>z)||N&&!Pe());){var W=m.callback;if(typeof W=="function"){m.callback=null,h=m.priorityLevel;var Z=W(m.expirationTime<=z);z=e.unstable_now(),typeof Z=="function"?m.callback=Z:m===n(s)&&r(s),d(z)}else r(s);m=n(s)}if(m!==null)var or=!0;else{var vt=n(a);vt!==null&&Ll(g,vt.startTime-z),or=!1}return or}finally{m=null,h=j,v=!1}}var S=!1,x=null,P=-1,O=5,L=-1;function Pe(){return!(e.unstable_now()-LN||125W?(N.sortIndex=j,t(a,N),n(s)===null&&N===n(a)&&(y?(f(P),P=-1):y=!0,Ll(g,j-W))):(N.sortIndex=Z,t(s,N),w||v||(w=!0,Tl(E))),N},e.unstable_shouldYield=Pe,e.unstable_wrapCallback=function(N){var z=h;return function(){var j=h;h=z;try{return N.apply(this,arguments)}finally{h=j}}}})(Rs);Ms.exports=Rs;var vf=Ms.exports;/**
+ * @license React
+ * react-dom.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var yf=F,ge=vf;function k(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),oo=Object.prototype.hasOwnProperty,gf=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,lu={},ou={};function wf(e){return oo.call(ou,e)?!0:oo.call(lu,e)?!1:gf.test(e)?ou[e]=!0:(lu[e]=!0,!1)}function kf(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Sf(e,t,n,r){if(t===null||typeof t>"u"||kf(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ae(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var te={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){te[e]=new ae(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];te[t]=new ae(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){te[e]=new ae(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){te[e]=new ae(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){te[e]=new ae(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){te[e]=new ae(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){te[e]=new ae(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){te[e]=new ae(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){te[e]=new ae(e,5,!1,e.toLowerCase(),null,!1,!1)});var ii=/[\-:]([a-z])/g;function ui(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(ii,ui);te[t]=new ae(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(ii,ui);te[t]=new ae(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ii,ui);te[t]=new ae(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){te[e]=new ae(e,1,!1,e.toLowerCase(),null,!1,!1)});te.xlinkHref=new ae("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){te[e]=new ae(e,1,!1,e.toLowerCase(),null,!0,!0)});function si(e,t,n,r){var l=te.hasOwnProperty(t)?te[t]:null;(l!==null?l.type!==0:r||!(2u||l[i]!==o[u]){var s=`
+`+l[i].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=u);break}}}finally{Ml=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?xn(e):""}function xf(e){switch(e.tag){case 5:return xn(e.type);case 16:return xn("Lazy");case 13:return xn("Suspense");case 19:return xn("SuspenseList");case 0:case 2:case 15:return e=Rl(e.type,!1),e;case 11:return e=Rl(e.type.render,!1),e;case 1:return e=Rl(e.type,!0),e;default:return""}}function ao(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Rt:return"Fragment";case Mt:return"Portal";case io:return"Profiler";case ai:return"StrictMode";case uo:return"Suspense";case so:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Ds:return(e.displayName||"Context")+".Consumer";case Fs:return(e._context.displayName||"Context")+".Provider";case ci:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case fi:return t=e.displayName||null,t!==null?t:ao(e.type)||"Memo";case Je:t=e._payload,e=e._init;try{return ao(e(t))}catch{}}return null}function Ef(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ao(t);case 8:return t===ai?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ft(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Us(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Cf(e){var t=Us(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function ar(e){e._valueTracker||(e._valueTracker=Cf(e))}function $s(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Us(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function $r(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function co(e,t){var n=t.checked;return H({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function uu(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ft(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Vs(e,t){t=t.checked,t!=null&&si(e,"checked",t,!1)}function fo(e,t){Vs(e,t);var n=ft(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?po(e,t.type,n):t.hasOwnProperty("defaultValue")&&po(e,t.type,ft(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function su(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function po(e,t,n){(t!=="number"||$r(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var En=Array.isArray;function Wt(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=cr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Dn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Nn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},_f=["Webkit","ms","Moz","O"];Object.keys(Nn).forEach(function(e){_f.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Nn[t]=Nn[e]})});function Ws(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Nn.hasOwnProperty(e)&&Nn[e]?(""+t).trim():t+"px"}function Ks(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=Ws(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var Nf=H({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function vo(e,t){if(t){if(Nf[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(k(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(k(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(k(61))}if(t.style!=null&&typeof t.style!="object")throw Error(k(62))}}function yo(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var go=null;function di(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var wo=null,Kt=null,Yt=null;function fu(e){if(e=rr(e)){if(typeof wo!="function")throw Error(k(280));var t=e.stateNode;t&&(t=vl(t),wo(e.stateNode,e.type,t))}}function Ys(e){Kt?Yt?Yt.push(e):Yt=[e]:Kt=e}function Gs(){if(Kt){var e=Kt,t=Yt;if(Yt=Kt=null,fu(e),t)for(e=0;e>>=0,e===0?32:31-(Df(e)/Af|0)|0}var fr=64,dr=4194304;function Cn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Qr(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var u=i&~l;u!==0?r=Cn(u):(o&=i,o!==0&&(r=Cn(o)))}else i=n&~l,i!==0?r=Cn(i):o!==0&&(r=Cn(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function tr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ie(t),e[t]=n}function Bf(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Tn),ku=" ",Su=!1;function ha(e,t){switch(e){case"keyup":return vd.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ma(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ot=!1;function gd(e,t){switch(e){case"compositionend":return ma(t);case"keypress":return t.which!==32?null:(Su=!0,ku);case"textInput":return e=t.data,e===ku&&Su?null:e;default:return null}}function wd(e,t){if(Ot)return e==="compositionend"||!ki&&ha(e,t)?(e=da(),Tr=yi=tt=null,Ot=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=_u(n)}}function wa(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?wa(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function ka(){for(var e=window,t=$r();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=$r(e.document)}return t}function Si(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Td(e){var t=ka(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&wa(n.ownerDocument.documentElement,n)){if(r!==null&&Si(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=Nu(n,o);var i=Nu(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Ft=null,_o=null,zn=null,No=!1;function Pu(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;No||Ft==null||Ft!==$r(r)||(r=Ft,"selectionStart"in r&&Si(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),zn&&Hn(zn,r)||(zn=r,r=Yr(_o,"onSelect"),0Ut||(e.current=Io[Ut],Io[Ut]=null,Ut--)}function D(e,t){Ut++,Io[Ut]=e.current,e.current=t}var dt={},oe=ht(dt),de=ht(!1),_t=dt;function qt(e,t){var n=e.type.contextTypes;if(!n)return dt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function pe(e){return e=e.childContextTypes,e!=null}function Xr(){U(de),U(oe)}function Ru(e,t,n){if(oe.current!==dt)throw Error(k(168));D(oe,t),D(de,n)}function La(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(k(108,Ef(e)||"Unknown",l));return H({},n,r)}function Zr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||dt,_t=oe.current,D(oe,e),D(de,de.current),!0}function Ou(e,t,n){var r=e.stateNode;if(!r)throw Error(k(169));n?(e=La(e,t,_t),r.__reactInternalMemoizedMergedChildContext=e,U(de),U(oe),D(oe,e)):U(de),D(de,n)}var Ve=null,yl=!1,Gl=!1;function za(e){Ve===null?Ve=[e]:Ve.push(e)}function $d(e){yl=!0,za(e)}function mt(){if(!Gl&&Ve!==null){Gl=!0;var e=0,t=R;try{var n=Ve;for(R=1;e>=i,l-=i,Be=1<<32-Ie(t)+l|n<P?(O=x,x=null):O=x.sibling;var L=h(f,x,d[P],g);if(L===null){x===null&&(x=O);break}e&&x&&L.alternate===null&&t(f,x),c=o(L,c,P),S===null?E=L:S.sibling=L,S=L,x=O}if(P===d.length)return n(f,x),$&>(f,P),E;if(x===null){for(;PP?(O=x,x=null):O=x.sibling;var Pe=h(f,x,L.value,g);if(Pe===null){x===null&&(x=O);break}e&&x&&Pe.alternate===null&&t(f,x),c=o(Pe,c,P),S===null?E=Pe:S.sibling=Pe,S=Pe,x=O}if(L.done)return n(f,x),$&>(f,P),E;if(x===null){for(;!L.done;P++,L=d.next())L=m(f,L.value,g),L!==null&&(c=o(L,c,P),S===null?E=L:S.sibling=L,S=L);return $&>(f,P),E}for(x=r(f,x);!L.done;P++,L=d.next())L=v(x,f,P,L.value,g),L!==null&&(e&&L.alternate!==null&&x.delete(L.key===null?P:L.key),c=o(L,c,P),S===null?E=L:S.sibling=L,S=L);return e&&x.forEach(function(cn){return t(f,cn)}),$&>(f,P),E}function C(f,c,d,g){if(typeof d=="object"&&d!==null&&d.type===Rt&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case sr:e:{for(var E=d.key,S=c;S!==null;){if(S.key===E){if(E=d.type,E===Rt){if(S.tag===7){n(f,S.sibling),c=l(S,d.props.children),c.return=f,f=c;break e}}else if(S.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===Je&&Au(E)===S.type){n(f,S.sibling),c=l(S,d.props),c.ref=yn(f,S,d),c.return=f,f=c;break e}n(f,S);break}else t(f,S);S=S.sibling}d.type===Rt?(c=Ct(d.props.children,f.mode,g,d.key),c.return=f,f=c):(g=Fr(d.type,d.key,d.props,null,f.mode,g),g.ref=yn(f,c,d),g.return=f,f=g)}return i(f);case Mt:e:{for(S=d.key;c!==null;){if(c.key===S)if(c.tag===4&&c.stateNode.containerInfo===d.containerInfo&&c.stateNode.implementation===d.implementation){n(f,c.sibling),c=l(c,d.children||[]),c.return=f,f=c;break e}else{n(f,c);break}else t(f,c);c=c.sibling}c=no(d,f.mode,g),c.return=f,f=c}return i(f);case Je:return S=d._init,C(f,c,S(d._payload),g)}if(En(d))return w(f,c,d,g);if(dn(d))return y(f,c,d,g);wr(f,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,c!==null&&c.tag===6?(n(f,c.sibling),c=l(c,d),c.return=f,f=c):(n(f,c),c=to(d,f.mode,g),c.return=f,f=c),i(f)):n(f,c)}return C}var en=Ra(!0),Oa=Ra(!1),br=ht(null),el=null,Bt=null,_i=null;function Ni(){_i=Bt=el=null}function Pi(e){var t=br.current;U(br),e._currentValue=t}function Oo(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Xt(e,t){el=e,_i=Bt=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(fe=!0),e.firstContext=null)}function _e(e){var t=e._currentValue;if(_i!==e)if(e={context:e,memoizedValue:t,next:null},Bt===null){if(el===null)throw Error(k(308));Bt=e,el.dependencies={lanes:0,firstContext:e}}else Bt=Bt.next=e;return t}var St=null;function Ti(e){St===null?St=[e]:St.push(e)}function Fa(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,Ti(t)):(n.next=l.next,l.next=n),t.interleaved=n,Ye(e,r)}function Ye(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var qe=!1;function Li(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Da(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Qe(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ut(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,M&2){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,Ye(e,n)}return l=r.interleaved,l===null?(t.next=t,Ti(r)):(t.next=l.next,l.next=t),r.interleaved=t,Ye(e,n)}function zr(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,hi(e,n)}}function Uu(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function tl(e,t,n,r){var l=e.updateQueue;qe=!1;var o=l.firstBaseUpdate,i=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var s=u,a=s.next;s.next=null,i===null?o=a:i.next=a,i=s;var p=e.alternate;p!==null&&(p=p.updateQueue,u=p.lastBaseUpdate,u!==i&&(u===null?p.firstBaseUpdate=a:u.next=a,p.lastBaseUpdate=s))}if(o!==null){var m=l.baseState;i=0,p=a=s=null,u=o;do{var h=u.lane,v=u.eventTime;if((r&h)===h){p!==null&&(p=p.next={eventTime:v,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var w=e,y=u;switch(h=t,v=n,y.tag){case 1:if(w=y.payload,typeof w=="function"){m=w.call(v,m,h);break e}m=w;break e;case 3:w.flags=w.flags&-65537|128;case 0:if(w=y.payload,h=typeof w=="function"?w.call(v,m,h):w,h==null)break e;m=H({},m,h);break e;case 2:qe=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,h=l.effects,h===null?l.effects=[u]:h.push(u))}else v={eventTime:v,lane:h,tag:u.tag,payload:u.payload,callback:u.callback,next:null},p===null?(a=p=v,s=m):p=p.next=v,i|=h;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;h=u,u=h.next,h.next=null,l.lastBaseUpdate=h,l.shared.pending=null}}while(!0);if(p===null&&(s=m),l.baseState=s,l.firstBaseUpdate=a,l.lastBaseUpdate=p,t=l.shared.interleaved,t!==null){l=t;do i|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);Tt|=i,e.lanes=i,e.memoizedState=m}}function $u(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Zl.transition;Zl.transition={};try{e(!1),t()}finally{R=n,Zl.transition=r}}function ec(){return Ne().memoizedState}function Qd(e,t,n){var r=at(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},tc(e))nc(t,n);else if(n=Fa(e,t,n,r),n!==null){var l=ue();Me(n,e,r,l),rc(n,t,r)}}function Wd(e,t,n){var r=at(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(tc(e))nc(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,u=o(i,n);if(l.hasEagerState=!0,l.eagerState=u,Re(u,i)){var s=t.interleaved;s===null?(l.next=l,Ti(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=Fa(e,t,l,r),n!==null&&(l=ue(),Me(n,e,r,l),rc(n,t,r))}}function tc(e){var t=e.alternate;return e===B||t!==null&&t===B}function nc(e,t){jn=rl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function rc(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,hi(e,n)}}var ll={readContext:_e,useCallback:ne,useContext:ne,useEffect:ne,useImperativeHandle:ne,useInsertionEffect:ne,useLayoutEffect:ne,useMemo:ne,useReducer:ne,useRef:ne,useState:ne,useDebugValue:ne,useDeferredValue:ne,useTransition:ne,useMutableSource:ne,useSyncExternalStore:ne,useId:ne,unstable_isNewReconciler:!1},Kd={readContext:_e,useCallback:function(e,t){return Fe().memoizedState=[e,t===void 0?null:t],e},useContext:_e,useEffect:Bu,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Ir(4194308,4,Xa.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ir(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ir(4,2,e,t)},useMemo:function(e,t){var n=Fe();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Fe();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Qd.bind(null,B,e),[r.memoizedState,e]},useRef:function(e){var t=Fe();return e={current:e},t.memoizedState=e},useState:Vu,useDebugValue:Di,useDeferredValue:function(e){return Fe().memoizedState=e},useTransition:function(){var e=Vu(!1),t=e[0];return e=Hd.bind(null,e[1]),Fe().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=B,l=Fe();if($){if(n===void 0)throw Error(k(407));n=n()}else{if(n=t(),q===null)throw Error(k(349));Pt&30||Va(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,Bu(Ha.bind(null,r,o,e),[e]),r.flags|=2048,Jn(9,Ba.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Fe(),t=q.identifierPrefix;if($){var n=He,r=Be;n=(r&~(1<<32-Ie(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Xn++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[De]=t,e[Kn]=r,pc(e,t,!1,!1),t.stateNode=e;e:{switch(i=yo(n,r),n){case"dialog":A("cancel",e),A("close",e),l=r;break;case"iframe":case"object":case"embed":A("load",e),l=r;break;case"video":case"audio":for(l=0;l<_n.length;l++)A(_n[l],e);l=r;break;case"source":A("error",e),l=r;break;case"img":case"image":case"link":A("error",e),A("load",e),l=r;break;case"details":A("toggle",e),l=r;break;case"input":uu(e,r),l=co(e,r),A("invalid",e);break;case"option":l=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},l=H({},r,{value:void 0}),A("invalid",e);break;case"textarea":au(e,r),l=ho(e,r),A("invalid",e);break;default:l=r}vo(n,l),u=l;for(o in u)if(u.hasOwnProperty(o)){var s=u[o];o==="style"?Ks(e,s):o==="dangerouslySetInnerHTML"?(s=s?s.__html:void 0,s!=null&&Qs(e,s)):o==="children"?typeof s=="string"?(n!=="textarea"||s!=="")&&Dn(e,s):typeof s=="number"&&Dn(e,""+s):o!=="suppressContentEditableWarning"&&o!=="suppressHydrationWarning"&&o!=="autoFocus"&&(Fn.hasOwnProperty(o)?s!=null&&o==="onScroll"&&A("scroll",e):s!=null&&si(e,o,s,i))}switch(n){case"input":ar(e),su(e,r,!1);break;case"textarea":ar(e),cu(e);break;case"option":r.value!=null&&e.setAttribute("value",""+ft(r.value));break;case"select":e.multiple=!!r.multiple,o=r.value,o!=null?Wt(e,!!r.multiple,o,!1):r.defaultValue!=null&&Wt(e,!!r.multiple,r.defaultValue,!0);break;default:typeof l.onClick=="function"&&(e.onclick=Gr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return re(t),null;case 6:if(e&&t.stateNode!=null)mc(e,t,e.memoizedProps,r);else{if(typeof r!="string"&&t.stateNode===null)throw Error(k(166));if(n=xt(Gn.current),xt(Ue.current),gr(t)){if(r=t.stateNode,n=t.memoizedProps,r[De]=t,(o=r.nodeValue!==n)&&(e=ye,e!==null))switch(e.tag){case 3:yr(r.nodeValue,n,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&yr(r.nodeValue,n,(e.mode&1)!==0)}o&&(t.flags|=4)}else r=(n.nodeType===9?n:n.ownerDocument).createTextNode(r),r[De]=t,t.stateNode=r}return re(t),null;case 13:if(U(V),r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if($&&ve!==null&&t.mode&1&&!(t.flags&128))Ma(),bt(),t.flags|=98560,o=!1;else if(o=gr(t),r!==null&&r.dehydrated!==null){if(e===null){if(!o)throw Error(k(318));if(o=t.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(k(317));o[De]=t}else bt(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;re(t),o=!1}else je!==null&&(Jo(je),je=null),o=!0;if(!o)return t.flags&65536?t:null}return t.flags&128?(t.lanes=n,t):(r=r!==null,r!==(e!==null&&e.memoizedState!==null)&&r&&(t.child.flags|=8192,t.mode&1&&(e===null||V.current&1?X===0&&(X=3):Qi())),t.updateQueue!==null&&(t.flags|=4),re(t),null);case 4:return tn(),Ho(e,t),e===null&&Qn(t.stateNode.containerInfo),re(t),null;case 10:return Pi(t.type._context),re(t),null;case 17:return pe(t.type)&&Xr(),re(t),null;case 19:if(U(V),o=t.memoizedState,o===null)return re(t),null;if(r=(t.flags&128)!==0,i=o.rendering,i===null)if(r)gn(o,!1);else{if(X!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(i=nl(e),i!==null){for(t.flags|=128,gn(o,!1),r=i.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;n!==null;)o=n,e=r,o.flags&=14680066,i=o.alternate,i===null?(o.childLanes=0,o.lanes=e,o.child=null,o.subtreeFlags=0,o.memoizedProps=null,o.memoizedState=null,o.updateQueue=null,o.dependencies=null,o.stateNode=null):(o.childLanes=i.childLanes,o.lanes=i.lanes,o.child=i.child,o.subtreeFlags=0,o.deletions=null,o.memoizedProps=i.memoizedProps,o.memoizedState=i.memoizedState,o.updateQueue=i.updateQueue,o.type=i.type,e=i.dependencies,o.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return D(V,V.current&1|2),t.child}e=e.sibling}o.tail!==null&&K()>rn&&(t.flags|=128,r=!0,gn(o,!1),t.lanes=4194304)}else{if(!r)if(e=nl(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),gn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!$)return re(t),null}else 2*K()-o.renderingStartTime>rn&&n!==1073741824&&(t.flags|=128,r=!0,gn(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=K(),t.sibling=null,n=V.current,D(V,r?n&1|2:n&1),t):(re(t),null);case 22:case 23:return Hi(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?me&1073741824&&(re(t),t.subtreeFlags&6&&(t.flags|=8192)):re(t),null;case 24:return null;case 25:return null}throw Error(k(156,t.tag))}function ep(e,t){switch(Ei(t),t.tag){case 1:return pe(t.type)&&Xr(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return tn(),U(de),U(oe),Ii(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return ji(t),null;case 13:if(U(V),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(k(340));bt()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return U(V),null;case 4:return tn(),null;case 10:return Pi(t.type._context),null;case 22:case 23:return Hi(),null;case 24:return null;default:return null}}var Sr=!1,le=!1,tp=typeof WeakSet=="function"?WeakSet:Set,_=null;function Ht(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Q(e,t,r)}else n.current=null}function Qo(e,t,n){try{n()}catch(r){Q(e,t,r)}}var bu=!1;function np(e,t){if(Po=Wr,e=ka(),Si(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,s=-1,a=0,p=0,m=e,h=null;t:for(;;){for(var v;m!==n||l!==0&&m.nodeType!==3||(u=i+l),m!==o||r!==0&&m.nodeType!==3||(s=i+r),m.nodeType===3&&(i+=m.nodeValue.length),(v=m.firstChild)!==null;)h=m,m=v;for(;;){if(m===e)break t;if(h===n&&++a===l&&(u=i),h===o&&++p===r&&(s=i),(v=m.nextSibling)!==null)break;m=h,h=m.parentNode}m=v}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(To={focusedElem:e,selectionRange:n},Wr=!1,_=t;_!==null;)if(t=_,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,_=e;else for(;_!==null;){t=_;try{var w=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(w!==null){var y=w.memoizedProps,C=w.memoizedState,f=t.stateNode,c=f.getSnapshotBeforeUpdate(t.elementType===t.type?y:Le(t.type,y),C);f.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(k(163))}}catch(g){Q(t,t.return,g)}if(e=t.sibling,e!==null){e.return=t.return,_=e;break}_=t.return}return w=bu,bu=!1,w}function In(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&Qo(t,n,o)}l=l.next}while(l!==r)}}function kl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Wo(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function vc(e){var t=e.alternate;t!==null&&(e.alternate=null,vc(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[De],delete t[Kn],delete t[jo],delete t[Ad],delete t[Ud])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function yc(e){return e.tag===5||e.tag===3||e.tag===4}function es(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||yc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Ko(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Gr));else if(r!==4&&(e=e.child,e!==null))for(Ko(e,t,n),e=e.sibling;e!==null;)Ko(e,t,n),e=e.sibling}function Yo(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Yo(e,t,n),e=e.sibling;e!==null;)Yo(e,t,n),e=e.sibling}var b=null,ze=!1;function Ze(e,t,n){for(n=n.child;n!==null;)gc(e,t,n),n=n.sibling}function gc(e,t,n){if(Ae&&typeof Ae.onCommitFiberUnmount=="function")try{Ae.onCommitFiberUnmount(dl,n)}catch{}switch(n.tag){case 5:le||Ht(n,t);case 6:var r=b,l=ze;b=null,Ze(e,t,n),b=r,ze=l,b!==null&&(ze?(e=b,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):b.removeChild(n.stateNode));break;case 18:b!==null&&(ze?(e=b,n=n.stateNode,e.nodeType===8?Yl(e.parentNode,n):e.nodeType===1&&Yl(e,n),Vn(e)):Yl(b,n.stateNode));break;case 4:r=b,l=ze,b=n.stateNode.containerInfo,ze=!0,Ze(e,t,n),b=r,ze=l;break;case 0:case 11:case 14:case 15:if(!le&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Qo(n,t,i),l=l.next}while(l!==r)}Ze(e,t,n);break;case 1:if(!le&&(Ht(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){Q(n,t,u)}Ze(e,t,n);break;case 21:Ze(e,t,n);break;case 22:n.mode&1?(le=(r=le)||n.memoizedState!==null,Ze(e,t,n),le=r):Ze(e,t,n);break;default:Ze(e,t,n)}}function ts(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new tp),t.forEach(function(r){var l=fp.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Te(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=K()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*lp(r/1960))-r,10e?16:e,nt===null)var r=!1;else{if(e=nt,nt=null,ul=0,M&6)throw Error(k(331));var l=M;for(M|=4,_=e.current;_!==null;){var o=_,i=o.child;if(_.flags&16){var u=o.deletions;if(u!==null){for(var s=0;sK()-Vi?Et(e,0):$i|=n),he(e,t)}function Nc(e,t){t===0&&(e.mode&1?(t=dr,dr<<=1,!(dr&130023424)&&(dr=4194304)):t=1);var n=ue();e=Ye(e,t),e!==null&&(tr(e,t,n),he(e,n))}function cp(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Nc(e,n)}function fp(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(k(314))}r!==null&&r.delete(t),Nc(e,n)}var Pc;Pc=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||de.current)fe=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return fe=!1,qd(e,t,n);fe=!!(e.flags&131072)}else fe=!1,$&&t.flags&1048576&&ja(t,qr,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Mr(e,t),e=t.pendingProps;var l=qt(t,oe.current);Xt(t,n),l=Ri(null,t,r,e,l,n);var o=Oi();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,pe(r)?(o=!0,Zr(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Li(t),l.updater=wl,t.stateNode=l,l._reactInternals=t,Do(t,r,e,n),t=$o(null,t,r,!0,o,n)):(t.tag=0,$&&o&&xi(t),ie(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Mr(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=pp(r),e=Le(r,e),l){case 0:t=Uo(null,t,r,e,n);break e;case 1:t=Zu(null,t,r,e,n);break e;case 11:t=Gu(null,t,r,e,n);break e;case 14:t=Xu(null,t,r,Le(r.type,e),n);break e}throw Error(k(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Le(r,l),Uo(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Le(r,l),Zu(e,t,r,l,n);case 3:e:{if(cc(t),e===null)throw Error(k(387));r=t.pendingProps,o=t.memoizedState,l=o.element,Da(e,t),tl(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=nn(Error(k(423)),t),t=Ju(e,t,r,n,l);break e}else if(r!==l){l=nn(Error(k(424)),t),t=Ju(e,t,r,n,l);break e}else for(ve=it(t.stateNode.containerInfo.firstChild),ye=t,$=!0,je=null,n=Oa(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(bt(),r===l){t=Ge(e,t,n);break e}ie(e,t,r,n)}t=t.child}return t;case 5:return Aa(t),e===null&&Ro(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,Lo(r,l)?i=null:o!==null&&Lo(r,o)&&(t.flags|=32),ac(e,t),ie(e,t,i,n),t.child;case 6:return e===null&&Ro(t),null;case 13:return fc(e,t,n);case 4:return zi(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=en(t,null,r,n):ie(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Le(r,l),Gu(e,t,r,l,n);case 7:return ie(e,t,t.pendingProps,n),t.child;case 8:return ie(e,t,t.pendingProps.children,n),t.child;case 12:return ie(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,D(br,r._currentValue),r._currentValue=i,o!==null)if(Re(o.value,i)){if(o.children===l.children&&!de.current){t=Ge(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=Qe(-1,n&-n),s.tag=2;var a=o.updateQueue;if(a!==null){a=a.shared;var p=a.pending;p===null?s.next=s:(s.next=p.next,p.next=s),a.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),Oo(o.return,n,t),u.lanes|=n;break}s=s.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(k(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),Oo(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}ie(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,Xt(t,n),l=_e(l),r=r(l),t.flags|=1,ie(e,t,r,n),t.child;case 14:return r=t.type,l=Le(r,t.pendingProps),l=Le(r.type,l),Xu(e,t,r,l,n);case 15:return uc(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Le(r,l),Mr(e,t),t.tag=1,pe(r)?(e=!0,Zr(t)):e=!1,Xt(t,n),lc(t,r,l),Do(t,r,l,n),$o(null,t,r,!0,e,n);case 19:return dc(e,t,n);case 22:return sc(e,t,n)}throw Error(k(156,t.tag))};function Tc(e,t){return ta(e,t)}function dp(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ee(e,t,n,r){return new dp(e,t,n,r)}function Wi(e){return e=e.prototype,!(!e||!e.isReactComponent)}function pp(e){if(typeof e=="function")return Wi(e)?1:0;if(e!=null){if(e=e.$$typeof,e===ci)return 11;if(e===fi)return 14}return 2}function ct(e,t){var n=e.alternate;return n===null?(n=Ee(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Fr(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")Wi(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Rt:return Ct(n.children,l,o,t);case ai:i=8,l|=8;break;case io:return e=Ee(12,n,t,l|2),e.elementType=io,e.lanes=o,e;case uo:return e=Ee(13,n,t,l),e.elementType=uo,e.lanes=o,e;case so:return e=Ee(19,n,t,l),e.elementType=so,e.lanes=o,e;case As:return xl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Fs:i=10;break e;case Ds:i=9;break e;case ci:i=11;break e;case fi:i=14;break e;case Je:i=16,r=null;break e}throw Error(k(130,e==null?e:typeof e,""))}return t=Ee(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function Ct(e,t,n,r){return e=Ee(7,e,r,t),e.lanes=n,e}function xl(e,t,n,r){return e=Ee(22,e,r,t),e.elementType=As,e.lanes=n,e.stateNode={isHidden:!1},e}function to(e,t,n){return e=Ee(6,e,null,t),e.lanes=n,e}function no(e,t,n){return t=Ee(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function hp(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Fl(0),this.expirationTimes=Fl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Fl(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Ki(e,t,n,r,l,o,i,u,s){return e=new hp(e,t,n,u,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Ee(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Li(o),e}function mp(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Ic)}catch(e){console.error(e)}}Ic(),Is.exports=we;var kp=Is.exports,Mc,as=kp;Mc=as.createRoot,as.hydrateRoot;/**
+ * @license lucide-react v0.344.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */var Sp={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
+ * @license lucide-react v0.344.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const xp=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().trim(),an=(e,t)=>{const n=F.forwardRef(({color:r="currentColor",size:l=24,strokeWidth:o=2,absoluteStrokeWidth:i,className:u="",children:s,...a},p)=>F.createElement("svg",{ref:p,...Sp,width:l,height:l,stroke:r,strokeWidth:i?Number(o)*24/Number(l):o,className:["lucide",`lucide-${xp(e)}`,u].join(" "),...a},[...t.map(([m,h])=>F.createElement(m,h)),...Array.isArray(s)?s:[s]]));return n.displayName=`${e}`,n};/**
+ * @license lucide-react v0.344.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Ep=an("Briefcase",[["rect",{width:"20",height:"14",x:"2",y:"7",rx:"2",ry:"2",key:"eto64e"}],["path",{d:"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16",key:"zwj3tp"}]]);/**
+ * @license lucide-react v0.344.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Cp=an("Cake",[["path",{d:"M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8",key:"1w3rig"}],["path",{d:"M4 16s.5-1 2-1 2.5 2 4 2 2.5-2 4-2 2.5 2 4 2 2-1 2-1",key:"n2jgmb"}],["path",{d:"M2 21h20",key:"1nyx9w"}],["path",{d:"M7 8v3",key:"1qtyvj"}],["path",{d:"M12 8v3",key:"hwp4zt"}],["path",{d:"M17 8v3",key:"1i6e5u"}],["path",{d:"M7 4h0.01",key:"hsw7lv"}],["path",{d:"M12 4h0.01",key:"1e3d8f"}],["path",{d:"M17 4h0.01",key:"p7cxgy"}]]);/**
+ * @license lucide-react v0.344.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const _p=an("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/**
+ * @license lucide-react v0.344.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Np=an("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/**
+ * @license lucide-react v0.344.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Pp=an("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/**
+ * @license lucide-react v0.344.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Tp=an("UserRound",[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]]),Rc=Object.freeze({left:0,top:0,width:16,height:16}),cl=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),Zi=Object.freeze({...Rc,...cl}),qo=Object.freeze({...Zi,body:"",hidden:!1});function Lp(e,t){const n={};!e.hFlip!=!t.hFlip&&(n.hFlip=!0),!e.vFlip!=!t.vFlip&&(n.vFlip=!0);const r=((e.rotate||0)+(t.rotate||0))%4;return r&&(n.rotate=r),n}function cs(e,t){const n=Lp(e,t);for(const r in qo)r in cl?r in e&&!(r in n)&&(n[r]=cl[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function zp(e,t){const n=e.icons,r=e.aliases||Object.create(null),l=Object.create(null);function o(i){if(n[i])return l[i]=[];if(!(i in l)){l[i]=null;const u=r[i]&&r[i].parent,s=u&&o(u);s&&(l[i]=[u].concat(s))}return l[i]}return Object.keys(n).concat(Object.keys(r)).forEach(o),l}function jp(e,t,n){const r=e.icons,l=e.aliases||Object.create(null);let o={};function i(u){o=cs(r[u]||l[u],o)}return i(t),n.forEach(i),cs(e,o)}function Oc(e,t){const n=[];if(typeof e!="object"||typeof e.icons!="object")return n;e.not_found instanceof Array&&e.not_found.forEach(l=>{t(l,null),n.push(l)});const r=zp(e);for(const l in r){const o=r[l];o&&(t(l,jp(e,l,o)),n.push(l))}return n}const Ip={provider:"",aliases:{},not_found:{},...Rc};function ro(e,t){for(const n in t)if(n in e&&typeof e[n]!=typeof t[n])return!1;return!0}function Fc(e){if(typeof e!="object"||e===null)return null;const t=e;if(typeof t.prefix!="string"||!e.icons||typeof e.icons!="object"||!ro(e,Ip))return null;const n=t.icons;for(const l in n){const o=n[l];if(!l||typeof o.body!="string"||!ro(o,qo))return null}const r=t.aliases||Object.create(null);for(const l in r){const o=r[l],i=o.parent;if(!l||typeof i!="string"||!n[i]&&!r[i]||!ro(o,qo))return null}return t}const Dc=/^[a-z0-9]+(-[a-z0-9]+)*$/,Pl=(e,t,n,r="")=>{const l=e.split(":");if(e.slice(0,1)==="@"){if(l.length<2||l.length>3)return null;r=l.shift().slice(1)}if(l.length>3||!l.length)return null;if(l.length>1){const u=l.pop(),s=l.pop(),a={provider:l.length>0?l[0]:r,prefix:s,name:u};return t&&!Dr(a)?null:a}const o=l[0],i=o.split("-");if(i.length>1){const u={provider:r,prefix:i.shift(),name:i.join("-")};return t&&!Dr(u)?null:u}if(n&&r===""){const u={provider:r,prefix:"",name:o};return t&&!Dr(u,n)?null:u}return null},Dr=(e,t)=>e?!!((t&&e.prefix===""||e.prefix)&&e.name):!1,fs=Object.create(null);function Mp(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function ln(e,t){const n=fs[e]||(fs[e]=Object.create(null));return n[t]||(n[t]=Mp(e,t))}function Ac(e,t){return Fc(t)?Oc(t,(n,r)=>{r?e.icons[n]=r:e.missing.add(n)}):[]}function Rp(e,t,n){try{if(typeof n.body=="string")return e.icons[t]={...n},!0}catch{}return!1}let bn=!1;function Uc(e){return typeof e=="boolean"&&(bn=e),bn}function ds(e){const t=typeof e=="string"?Pl(e,!0,bn):e;if(t){const n=ln(t.provider,t.prefix),r=t.name;return n.icons[r]||(n.missing.has(r)?null:void 0)}}function Op(e,t){const n=Pl(e,!0,bn);if(!n)return!1;const r=ln(n.provider,n.prefix);return t?Rp(r,n.name,t):(r.missing.add(n.name),!0)}function Fp(e,t){if(typeof e!="object")return!1;if(typeof t!="string"&&(t=e.provider||""),bn&&!t&&!e.prefix){let l=!1;return Fc(e)&&(e.prefix="",Oc(e,(o,i)=>{Op(o,i)&&(l=!0)})),l}const n=e.prefix;if(!Dr({prefix:n,name:"a"}))return!1;const r=ln(t,n);return!!Ac(r,e)}const $c=Object.freeze({width:null,height:null}),Vc=Object.freeze({...$c,...cl}),Dp=/(-?[0-9.]*[0-9]+[0-9.]*)/g,Ap=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function ps(e,t,n){if(t===1)return e;if(n=n||100,typeof e=="number")return Math.ceil(e*t*n)/n;if(typeof e!="string")return e;const r=e.split(Dp);if(r===null||!r.length)return e;const l=[];let o=r.shift(),i=Ap.test(o);for(;;){if(i){const u=parseFloat(o);isNaN(u)?l.push(o):l.push(Math.ceil(u*t*n)/n)}else l.push(o);if(o=r.shift(),o===void 0)return l.join("");i=!i}}function Up(e,t="defs"){let n="";const r=e.indexOf("<"+t);for(;r>=0;){const l=e.indexOf(">",r),o=e.indexOf(""+t);if(l===-1||o===-1)break;const i=e.indexOf(">",o);if(i===-1)break;n+=e.slice(l+1,o).trim(),e=e.slice(0,r).trim()+e.slice(i+1)}return{defs:n,content:e}}function $p(e,t){return e?""+e+""+t:t}function Vp(e,t,n){const r=Up(e);return $p(r.defs,t+r.content+n)}const Bp=e=>e==="unset"||e==="undefined"||e==="none";function Hp(e,t){const n={...Zi,...e},r={...Vc,...t},l={left:n.left,top:n.top,width:n.width,height:n.height};let o=n.body;[n,r].forEach(y=>{const C=[],f=y.hFlip,c=y.vFlip;let d=y.rotate;f?c?d+=2:(C.push("translate("+(l.width+l.left).toString()+" "+(0-l.top).toString()+")"),C.push("scale(-1 1)"),l.top=l.left=0):c&&(C.push("translate("+(0-l.left).toString()+" "+(l.height+l.top).toString()+")"),C.push("scale(1 -1)"),l.top=l.left=0);let g;switch(d<0&&(d-=Math.floor(d/4)*4),d=d%4,d){case 1:g=l.height/2+l.top,C.unshift("rotate(90 "+g.toString()+" "+g.toString()+")");break;case 2:C.unshift("rotate(180 "+(l.width/2+l.left).toString()+" "+(l.height/2+l.top).toString()+")");break;case 3:g=l.width/2+l.left,C.unshift("rotate(-90 "+g.toString()+" "+g.toString()+")");break}d%2===1&&(l.left!==l.top&&(g=l.left,l.left=l.top,l.top=g),l.width!==l.height&&(g=l.width,l.width=l.height,l.height=g)),C.length&&(o=Vp(o,'',""))});const i=r.width,u=r.height,s=l.width,a=l.height;let p,m;i===null?(m=u===null?"1em":u==="auto"?a:u,p=ps(m,s/a)):(p=i==="auto"?s:i,m=u===null?ps(p,a/s):u==="auto"?a:u);const h={},v=(y,C)=>{Bp(C)||(h[y]=C.toString())};v("width",p),v("height",m);const w=[l.left,l.top,s,a];return h.viewBox=w.join(" "),{attributes:h,viewBox:w,body:o}}const Qp=/\sid="(\S+)"/g,Wp="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let Kp=0;function Yp(e,t=Wp){const n=[];let r;for(;r=Qp.exec(e);)n.push(r[1]);if(!n.length)return e;const l="suffix"+(Math.random()*16777216|Date.now()).toString(16);return n.forEach(o=>{const i=typeof t=="function"?t(o):t+(Kp++).toString(),u=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+u+')([")]|\\.[a-z])',"g"),"$1"+i+l+"$3")}),e=e.replace(new RegExp(l,"g"),""),e}const bo=Object.create(null);function Gp(e,t){bo[e]=t}function ei(e){return bo[e]||bo[""]}function Ji(e){let t;if(typeof e.resources=="string")t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;return{resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:e.random===!0,index:e.index||0,dataAfterTimeout:e.dataAfterTimeout!==!1}}const qi=Object.create(null),kn=["https://api.simplesvg.com","https://api.unisvg.com"],Ar=[];for(;kn.length>0;)kn.length===1||Math.random()>.5?Ar.push(kn.shift()):Ar.push(kn.pop());qi[""]=Ji({resources:["https://api.iconify.design"].concat(Ar)});function Xp(e,t){const n=Ji(t);return n===null?!1:(qi[e]=n,!0)}function bi(e){return qi[e]}const Zp=()=>{let e;try{if(e=fetch,typeof e=="function")return e}catch{}};let hs=Zp();function Jp(e,t){const n=bi(e);if(!n)return 0;let r;if(!n.maxURL)r=0;else{let l=0;n.resources.forEach(i=>{l=Math.max(l,i.length)});const o=t+".json?icons=";r=n.maxURL-l-n.path.length-o.length}return r}function qp(e){return e===404}const bp=(e,t,n)=>{const r=[],l=Jp(e,t),o="icons";let i={type:o,provider:e,prefix:t,icons:[]},u=0;return n.forEach((s,a)=>{u+=s.length+1,u>=l&&a>0&&(r.push(i),i={type:o,provider:e,prefix:t,icons:[]},u=s.length),i.icons.push(s)}),r.push(i),r};function eh(e){if(typeof e=="string"){const t=bi(e);if(t)return t.path}return"/"}const th=(e,t,n)=>{if(!hs){n("abort",424);return}let r=eh(t.provider);switch(t.type){case"icons":{const o=t.prefix,u=t.icons.join(","),s=new URLSearchParams({icons:u});r+=o+".json?"+s.toString();break}case"custom":{const o=t.uri;r+=o.slice(0,1)==="/"?o.slice(1):o;break}default:n("abort",400);return}let l=503;hs(e+r).then(o=>{const i=o.status;if(i!==200){setTimeout(()=>{n(qp(i)?"abort":"next",i)});return}return l=501,o.json()}).then(o=>{if(typeof o!="object"||o===null){setTimeout(()=>{o===404?n("abort",o):n("next",l)});return}setTimeout(()=>{n("success",o)})}).catch(()=>{n("next",l)})},nh={prepare:bp,send:th};function rh(e){const t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort((l,o)=>l.provider!==o.provider?l.provider.localeCompare(o.provider):l.prefix!==o.prefix?l.prefix.localeCompare(o.prefix):l.name.localeCompare(o.name));let r={provider:"",prefix:"",name:""};return e.forEach(l=>{if(r.name===l.name&&r.prefix===l.prefix&&r.provider===l.provider)return;r=l;const o=l.provider,i=l.prefix,u=l.name,s=n[o]||(n[o]=Object.create(null)),a=s[i]||(s[i]=ln(o,i));let p;u in a.icons?p=t.loaded:i===""||a.missing.has(u)?p=t.missing:p=t.pending;const m={provider:o,prefix:i,name:u};p.push(m)}),t}function Bc(e,t){e.forEach(n=>{const r=n.loaderCallbacks;r&&(n.loaderCallbacks=r.filter(l=>l.id!==t))})}function lh(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;const t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1;const r=e.provider,l=e.prefix;t.forEach(o=>{const i=o.icons,u=i.pending.length;i.pending=i.pending.filter(s=>{if(s.prefix!==l)return!0;const a=s.name;if(e.icons[a])i.loaded.push({provider:r,prefix:l,name:a});else if(e.missing.has(a))i.missing.push({provider:r,prefix:l,name:a});else return n=!0,!0;return!1}),i.pending.length!==u&&(n||Bc([e],o.id),o.callback(i.loaded.slice(0),i.missing.slice(0),i.pending.slice(0),o.abort))})}))}let oh=0;function ih(e,t,n){const r=oh++,l=Bc.bind(null,n,r);if(!t.pending.length)return l;const o={id:r,icons:t,callback:e,abort:l};return n.forEach(i=>{(i.loaderCallbacks||(i.loaderCallbacks=[])).push(o)}),l}function uh(e,t=!0,n=!1){const r=[];return e.forEach(l=>{const o=typeof l=="string"?Pl(l,t,n):l;o&&r.push(o)}),r}var sh={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function ah(e,t,n,r){const l=e.resources.length,o=e.random?Math.floor(Math.random()*l):e.index;let i;if(e.random){let S=e.resources.slice(0);for(i=[];S.length>1;){const x=Math.floor(Math.random()*S.length);i.push(S[x]),S=S.slice(0,x).concat(S.slice(x+1))}i=i.concat(S)}else i=e.resources.slice(o).concat(e.resources.slice(0,o));const u=Date.now();let s="pending",a=0,p,m=null,h=[],v=[];typeof r=="function"&&v.push(r);function w(){m&&(clearTimeout(m),m=null)}function y(){s==="pending"&&(s="aborted"),w(),h.forEach(S=>{S.status==="pending"&&(S.status="aborted")}),h=[]}function C(S,x){x&&(v=[]),typeof S=="function"&&v.push(S)}function f(){return{startTime:u,payload:t,status:s,queriesSent:a,queriesPending:h.length,subscribe:C,abort:y}}function c(){s="failed",v.forEach(S=>{S(void 0,p)})}function d(){h.forEach(S=>{S.status==="pending"&&(S.status="aborted")}),h=[]}function g(S,x,P){const O=x!=="success";switch(h=h.filter(L=>L!==S),s){case"pending":break;case"failed":if(O||!e.dataAfterTimeout)return;break;default:return}if(x==="abort"){p=P,c();return}if(O){p=P,h.length||(i.length?E():c());return}if(w(),d(),!e.random){const L=e.resources.indexOf(S.resource);L!==-1&&L!==e.index&&(e.index=L)}s="completed",v.forEach(L=>{L(P)})}function E(){if(s!=="pending")return;w();const S=i.shift();if(S===void 0){if(h.length){m=setTimeout(()=>{w(),s==="pending"&&(d(),c())},e.timeout);return}c();return}const x={status:"pending",resource:S,callback:(P,O)=>{g(x,P,O)}};h.push(x),a++,m=setTimeout(E,e.rotate),n(S,t,x.callback)}return setTimeout(E),f}function Hc(e){const t={...sh,...e};let n=[];function r(){n=n.filter(u=>u().status==="pending")}function l(u,s,a){const p=ah(t,u,s,(m,h)=>{r(),a&&a(m,h)});return n.push(p),p}function o(u){return n.find(s=>u(s))||null}return{query:l,find:o,setIndex:u=>{t.index=u},getIndex:()=>t.index,cleanup:r}}function ms(){}const lo=Object.create(null);function ch(e){if(!lo[e]){const t=bi(e);if(!t)return;const n=Hc(t),r={config:t,redundancy:n};lo[e]=r}return lo[e]}function fh(e,t,n){let r,l;if(typeof e=="string"){const o=ei(e);if(!o)return n(void 0,424),ms;l=o.send;const i=ch(e);i&&(r=i.redundancy)}else{const o=Ji(e);if(o){r=Hc(o);const i=e.resources?e.resources[0]:"",u=ei(i);u&&(l=u.send)}}return!r||!l?(n(void 0,424),ms):r.query(t,l,n)().abort}function vs(){}function dh(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,lh(e)}))}function ph(e){const t=[],n=[];return e.forEach(r=>{(r.match(Dc)?t:n).push(r)}),{valid:t,invalid:n}}function Sn(e,t,n){function r(){const l=e.pendingIcons;t.forEach(o=>{l&&l.delete(o),e.icons[o]||e.missing.add(o)})}if(n&&typeof n=="object")try{if(!Ac(e,n).length){r();return}}catch(l){console.error(l)}r(),dh(e)}function ys(e,t){e instanceof Promise?e.then(n=>{t(n)}).catch(()=>{t(null)}):t(e)}function hh(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;const{provider:n,prefix:r}=e,l=e.iconsToLoad;if(delete e.iconsToLoad,!l||!l.length)return;const o=e.loadIcon;if(e.loadIcons&&(l.length>1||!o)){ys(e.loadIcons(l,r,n),p=>{Sn(e,l,p)});return}if(o){l.forEach(p=>{const m=o(p,r,n);ys(m,h=>{const v=h?{prefix:r,icons:{[p]:h}}:null;Sn(e,[p],v)})});return}const{valid:i,invalid:u}=ph(l);if(u.length&&Sn(e,u,null),!i.length)return;const s=r.match(Dc)?ei(n):null;if(!s){Sn(e,i,null);return}s.prepare(n,r,i).forEach(p=>{fh(n,p,m=>{Sn(e,p.icons,m)})})}))}const mh=(e,t)=>{const n=uh(e,!0,Uc()),r=rh(n);if(!r.pending.length){let s=!0;return t&&setTimeout(()=>{s&&t(r.loaded,r.missing,r.pending,vs)}),()=>{s=!1}}const l=Object.create(null),o=[];let i,u;return r.pending.forEach(s=>{const{provider:a,prefix:p}=s;if(p===u&&a===i)return;i=a,u=p,o.push(ln(a,p));const m=l[a]||(l[a]=Object.create(null));m[p]||(m[p]=[])}),r.pending.forEach(s=>{const{provider:a,prefix:p,name:m}=s,h=ln(a,p),v=h.pendingIcons||(h.pendingIcons=new Set);v.has(m)||(v.add(m),l[a][p].push(m))}),o.forEach(s=>{const a=l[s.provider][s.prefix];a.length&&hh(s,a)}),t?ih(t,r,o):vs};function vh(e,t){const n={...e};for(const r in t){const l=t[r],o=typeof l;r in $c?(l===null||l&&(o==="string"||o==="number"))&&(n[r]=l):o===typeof n[r]&&(n[r]=r==="rotate"?l%4:l)}return n}const yh=/[\s,]+/;function gh(e,t){t.split(yh).forEach(n=>{switch(n.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function wh(e,t=0){const n=e.replace(/^-?[0-9.]*/,"");function r(l){for(;l<0;)l+=4;return l%4}if(n===""){const l=parseInt(e);return isNaN(l)?0:r(l)}else if(n!==e){let l=0;switch(n){case"%":l=25;break;case"deg":l=90}if(l){let o=parseFloat(e.slice(0,e.length-n.length));return isNaN(o)?0:(o=o/l,o%1===0?r(o):0)}}return t}function kh(e,t){let n=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const r in t)n+=" "+r+'="'+t[r]+'"';return'"}function Sh(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}function xh(e){return"data:image/svg+xml,"+Sh(e)}function Eh(e){return'url("'+xh(e)+'")'}let On;function Ch(){try{On=window.trustedTypes.createPolicy("iconify",{createHTML:e=>e})}catch{On=null}}function _h(e){return On===void 0&&Ch(),On?On.createHTML(e):e}const Qc={...Vc,inline:!1},Nh={xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},Ph={display:"inline-block"},ti={backgroundColor:"currentColor"},Wc={backgroundColor:"transparent"},gs={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},ws={WebkitMask:ti,mask:ti,background:Wc};for(const e in ws){const t=ws[e];for(const n in gs)t[e+n]=gs[n]}const Th={...Qc,inline:!0};function ks(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}const Lh=(e,t,n)=>{const r=t.inline?Th:Qc,l=vh(r,t),o=t.mode||"svg",i={},u=t.style||{},s={...o==="svg"?Nh:{}};if(n){const C=Pl(n,!1,!0);if(C){const f=["iconify"],c=["provider","prefix"];for(const d of c)C[d]&&f.push("iconify--"+C[d]);s.className=f.join(" ")}}for(let C in t){const f=t[C];if(f!==void 0)switch(C){case"icon":case"style":case"children":case"onLoad":case"mode":case"ssr":break;case"_ref":s.ref=f;break;case"className":s[C]=(s[C]?s[C]+" ":"")+f;break;case"inline":case"hFlip":case"vFlip":l[C]=f===!0||f==="true"||f===1;break;case"flip":typeof f=="string"&&gh(l,f);break;case"color":i.color=f;break;case"rotate":typeof f=="string"?l[C]=wh(f):typeof f=="number"&&(l[C]=f);break;case"ariaHidden":case"aria-hidden":f!==!0&&f!=="true"&&delete s["aria-hidden"];break;default:r[C]===void 0&&(s[C]=f)}}const a=Hp(e,l),p=a.attributes;if(l.inline&&(i.verticalAlign="-0.125em"),o==="svg"){s.style={...i,...u},Object.assign(s,p);let C=0,f=t.id;return typeof f=="string"&&(f=f.replace(/-/g,"_")),s.dangerouslySetInnerHTML={__html:_h(Yp(a.body,f?()=>f+"ID"+C++:"iconifyReact"))},F.createElement("svg",s)}const{body:m,width:h,height:v}=e,w=o==="mask"||(o==="bg"?!1:m.indexOf("currentColor")!==-1),y=kh(m,{...p,width:h+"",height:v+""});return s.style={...i,"--svg":Eh(y),width:ks(p.width),height:ks(p.height),...Ph,...w?ti:Wc,...u},F.createElement("span",s)};Uc(!0);Gp("",nh);if(typeof document<"u"&&typeof window<"u"){const e=window;if(e.IconifyPreload!==void 0){const t=e.IconifyPreload,n="Invalid IconifyPreload syntax.";typeof t=="object"&&t!==null&&(t instanceof Array?t:[t]).forEach(r=>{try{(typeof r!="object"||r===null||r instanceof Array||typeof r.icons!="object"||typeof r.prefix!="string"||!Fp(r))&&console.error(n)}catch{console.error(n)}})}if(e.IconifyProviders!==void 0){const t=e.IconifyProviders;if(typeof t=="object"&&t!==null)for(let n in t){const r="IconifyProviders["+n+"] is invalid.";try{const l=t[n];if(typeof l!="object"||!l||l.resources===void 0)continue;Xp(n,l)||console.error(r)}catch{console.error(r)}}}}function Kc(e){const[t,n]=F.useState(!!e.ssr),[r,l]=F.useState({});function o(v){if(v){const w=e.icon;if(typeof w=="object")return{name:"",data:w};const y=ds(w);if(y)return{name:w,data:y}}return{name:""}}const[i,u]=F.useState(o(!!e.ssr));function s(){const v=r.callback;v&&(v(),l({}))}function a(v){if(JSON.stringify(i)!==JSON.stringify(v))return s(),u(v),!0}function p(){var v;const w=e.icon;if(typeof w=="object"){a({name:"",data:w});return}const y=ds(w);if(a({name:w,data:y}))if(y===void 0){const C=mh([w],p);l({callback:C})}else y&&((v=e.onLoad)===null||v===void 0||v.call(e,w))}F.useEffect(()=>(n(!0),s),[]),F.useEffect(()=>{t&&p()},[e.icon,t]);const{name:m,data:h}=i;return h?Lh({...Zi,...h},e,m):e.children?e.children:e.fallback?e.fallback:F.createElement("span",{})}const Ur=F.forwardRef((e,t)=>Kc({...e,_ref:t}));F.forwardRef((e,t)=>Kc({inline:!0,...e,_ref:t}));const zh=({character:e,onSelect:t,onInfoClick:n,showInfo:r,PlayCharacter:l})=>T.jsx(T.Fragment,{children:T.jsx("div",{className:"flex justify-center items-center mb-4",children:T.jsx("div",{className:`
+ h-[65px] w-[462px] cursor-pointer rounded-[5px] overflow-hidden group
+ ${e.isActive?"":"cursor-pointer rounded-[5px] overflow-hidden bg-[#38383880] border-2 border-[#ffffff50] hover:border-[#FFFFFF] hover:bg-[#38383840"}
+ `,onClick:()=>t(e.id),children:T.jsxs("div",{className:`
+ flex items-center gap-2 transition-all duration-300
+ ${e.isActive?"text-[#fb9b04]":"text-gray-400 group-hover:text-[#FFFFFF]"}
+ `,children:[T.jsxs("div",{className:`
+ flex items-center rounded-[5px] p-4 overflow-hidden
+ ${e.isActive?"h-[65px] bg-[#fb9b0440] border-2 border-[#fb9b04]":"h-[60px]"}
+ ${e.isActive&&r?"w-full":e.isActive?"w-[411px]":"w-full"}
+ `,children:[T.jsx(Ur,{icon:"material-symbols:person-rounded",width:"30",height:"30",className:"mr-3 flex-shrink-0"}),T.jsx("div",{className:"flex justify-center items-center w-full h-full overflow-hidden",children:T.jsx("span",{className:`font-bold text-[24px] tracking-wide whitespace-nowrap ${e.isActive?"truncate":"ml-2"}`,children:e.name})})]}),e.isActive&&T.jsxs("div",{className:"flex gap-2 flex-shrink-0",children:[T.jsx("button",{className:`
+ h-[65px] rounded-[5px] ${e.disabled?"bg-gray-500":"bg-orange-500 hover:bg-orange-600"} flex text-black items-center justify-center transition-all duration-300
+ ${r?"w-0 scale-0 opacity-0 overflow-hidden":"w-[65px] h-[65px] scale-100 opacity-100"}
+ `,onClick:o=>{o.stopPropagation(),l()},disabled:e.disabled,children:T.jsx(Ur,{icon:"si:play-fill",width:"30",height:"30",color:"#383838"})}),T.jsx("button",{className:"w-[65px] h-[65px] rounded-[5px] bg-orange-500 text-black flex items-center justify-center transition-colors hover:bg-orange-600 flex-shrink-0",onClick:o=>{o.stopPropagation(),n(e.id)},children:T.jsx(Ur,{icon:"bi:info",width:"30",height:"30",color:"#383838"})})]})]})})})}),jh=({character:e,onClose:t,isAllowedtoDelete:n,PlayCharacter:r,handleDelete:l,locale:o})=>e?T.jsx("div",{className:"flex justify-center items-center",children:T.jsxs("div",{className:"w-[462px] bg-neutral-900 rounded-b-lg p-4 animate-slideDown",children:[T.jsxs("div",{className:"mb-4",children:[T.jsxs("h3",{className:"text-gray-400 uppercase text-sm mb-3 font-semibold flex items-center",children:[T.jsx(_p,{className:"mr-2",size:16})," ",o.char_info_title]}),T.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[T.jsxs("div",{className:"bg-neutral-800 p-3 rounded flex items-center",children:[T.jsx(Cp,{className:"mr-3 text-white",size:18}),T.jsx("div",{className:"flex justify-center w-full",children:T.jsx("span",{className:"text-white mr-1",children:e.birthDate})})]}),T.jsxs("div",{className:"bg-neutral-800 p-3 rounded flex items-center",children:[T.jsx(Tp,{className:"mr-3 text-white-400",size:18}),T.jsx("div",{className:"flex justify-center w-full",children:T.jsx("span",{className:"text-white mr-6",children:e.gender})})]}),T.jsxs("div",{className:"bg-neutral-800 p-3 rounded flex items-center col-span-2",children:[T.jsx(Ep,{className:"mr-3 text-white-400",size:18}),T.jsx("div",{className:"flex justify-center w-full",children:T.jsx("span",{className:"text-white mr-6",children:e.occupation})})]})]})]}),T.jsxs("div",{className:"flex gap-2",children:[T.jsxs("button",{className:`flex-1 ${e.disabled?"bg-gray-500":"bg-neutral-800 hover:bg-[#FFA31A] hover:text-[#383838]"} text-white py-2 px-4 font-semibold text-[16px] rounded-[5px] flex items-center justify-center transition-colors`,onClick:r,disabled:e.disabled,children:[T.jsx(Ur,{icon:"flowbite:play-solid",width:23,height:23,className:"mr-2"}),o.play]}),n&&T.jsx("button",{className:"bg-neutral-800 text-white p-2 rounded hover:bg-red-900 transition-colors",onClick:l,children:T.jsx(Pp,{size:18})})]})]})}):null,Ih=""+new URL("esxLogo-sNwPFb_p.png",import.meta.url).href,Mh=()=>!window.invokeNative,Rh=()=>{};async function Cr(e,t,n){const r={method:"post",headers:{"Content-Type":"application/json; charset=UTF-8"},body:JSON.stringify(t)};if(Mh()&&n)return n;const l=window.GetParentResourceName?window.GetParentResourceName():"nui-frame-app";return await(await fetch(`https://${l}/${e}`,r)).json()}const Oh=({initialCharacters:e,Candelete:t,MaxAllowedSlot:n,locale:r})=>{const[l,o]=F.useState(e),[i,u]=F.useState(null),[s,a]=F.useState(l.find(y=>y.isActive)||null),p=y=>{if((s==null?void 0:s.id)===y)return;const C=l.map(f=>({...f,isActive:f.id===y}));o(C),a(C.find(f=>f.id===y)||null),u(null),Cr("SelectCharacter",{id:y})},m=y=>{u(i===y?null:y)},h=()=>{Cr("PlayCharacter")},v=()=>{Cr("CreateCharacter")},w=()=>{if(!s)return;const y=l.filter(C=>C.id!==s.id);if(Cr("DeleteCharacter"),y.length>0){const C=y.map((f,c)=>({...f,isActive:c===0}));o(C),a(C[0]),u(null)}else o([]),a(null),u(null),v()};return T.jsxs("div",{className:"h-screen bg-[#161616F2] text-white w-[527px] border-r border-neutral-800 overflow-hidden animate-slideIn flex flex-col",children:[T.jsxs("div",{className:"p-4 flex-1 overflow-auto",children:[T.jsxs("div",{className:"flex items-center justify-between mb-6",children:[T.jsx("img",{src:Ih,alt:"Logo",className:"h-16 ml-1"}),T.jsx("h2",{className:"text-[24px] font-bold tracking-wide text-right flex-1",children:r.title})]}),T.jsx("div",{className:"space-y-2",children:l.map(y=>T.jsxs("div",{children:[T.jsx(zh,{character:y,onSelect:p,onInfoClick:m,showInfo:i===y.id,PlayCharacter:h}),y.isActive&&i===y.id&&T.jsx(jh,{character:y,onClose:()=>u(null),isAllowedtoDelete:t,PlayCharacter:h,handleDelete:w,locale:r})]},y.id))})]}),T.jsx("div",{className:"p-4 border-t border-neutral-800",children:T.jsx("button",{className:`w-full h-[70px] ${l.length>=n?"bg-gray-500":"bg-[#FB9B04] cursor-pointer hover:bg-orange-600"} text-[#383838] p-3 rounded flex items-center justify-center transition-colors`,onClick:v,disabled:l.length>=n,children:T.jsx(Np,{size:24})})})]})},Fh=(e,t)=>{const n=F.useRef(Rh);F.useEffect(()=>{n.current=t},[t]),F.useEffect(()=>{const r=l=>{const{action:o,data:i}=l.data;n.current&&o===e&&n.current(i)};return window.addEventListener("message",r),()=>window.removeEventListener("message",r)},[e])};function Dh(){const[e,t]=F.useState(!1),[n,r]=F.useState([]),[l,o]=F.useState(!1),[i,u]=F.useState(0),[s,a]=F.useState({char_info_title:"",play:"",title:""});return Fh("ToggleMulticharacter",p=>{if(p.show){const h=p.Characters.filter(v=>v!==null).map((v,w)=>{var y;return{id:v.id.toString(),name:`${v.firstname} ${v.lastname}`,birthDate:v.dateofbirth,gender:((y=v.sex)==null?void 0:y.toUpperCase())==="MALE"?"MALE":"FEMALE",occupation:v.job,disabled:v.disabled,isActive:w===0}});t(!0),r(h),o(p.CanDelete),u(p.AllowedSlot),a(p.Locale)}else t(!1),r([])}),e&&T.jsx(Oh,{initialCharacters:n,Candelete:l,MaxAllowedSlot:i,locale:s})}Mc(document.getElementById("root")).render(T.jsx(Dh,{}));
diff --git a/[core]/esx_multicharacter/web/build/index.html b/[core]/esx_multicharacter/web/build/index.html
new file mode 100644
index 00000000..9667ca2d
--- /dev/null
+++ b/[core]/esx_multicharacter/web/build/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ ESX MULTICHARACTER
+
+
+
+
+
+
+
diff --git a/[core]/esx_multicharacter/web/eslint.config.js b/[core]/esx_multicharacter/web/eslint.config.js
new file mode 100644
index 00000000..82c2e20c
--- /dev/null
+++ b/[core]/esx_multicharacter/web/eslint.config.js
@@ -0,0 +1,28 @@
+import js from '@eslint/js';
+import globals from 'globals';
+import reactHooks from 'eslint-plugin-react-hooks';
+import reactRefresh from 'eslint-plugin-react-refresh';
+import tseslint from 'typescript-eslint';
+
+export default tseslint.config(
+ { ignores: ['dist'] },
+ {
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
+ files: ['**/*.{ts,tsx}'],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ plugins: {
+ 'react-hooks': reactHooks,
+ 'react-refresh': reactRefresh,
+ },
+ rules: {
+ ...reactHooks.configs.recommended.rules,
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+ }
+);
diff --git a/[core]/esx_multicharacter/web/index.html b/[core]/esx_multicharacter/web/index.html
new file mode 100644
index 00000000..ef5abd29
--- /dev/null
+++ b/[core]/esx_multicharacter/web/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ ESX MULTICHARACTER
+
+
+
+
+
+
diff --git a/[core]/esx_multicharacter/web/package.json b/[core]/esx_multicharacter/web/package.json
new file mode 100644
index 00000000..f2c19f58
--- /dev/null
+++ b/[core]/esx_multicharacter/web/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "vite-react-app",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "lint": "eslint .",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@iconify/react": "^6.0.0",
+ "lucide-react": "^0.344.0",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.9.1",
+ "@types/react": "^18.3.5",
+ "@types/react-dom": "^18.3.0",
+ "@vitejs/plugin-react": "^4.3.1",
+ "autoprefixer": "^10.4.18",
+ "eslint": "^9.9.1",
+ "eslint-plugin-react-hooks": "^5.1.0-rc.0",
+ "eslint-plugin-react-refresh": "^0.4.11",
+ "globals": "^15.9.0",
+ "postcss": "^8.4.35",
+ "tailwindcss": "^3.4.1",
+ "typescript": "^5.5.3",
+ "typescript-eslint": "^8.3.0",
+ "vite": "^5.4.2"
+ }
+}
diff --git a/[core]/esx_multicharacter/web/postcss.config.js b/[core]/esx_multicharacter/web/postcss.config.js
new file mode 100644
index 00000000..2aa7205d
--- /dev/null
+++ b/[core]/esx_multicharacter/web/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/[core]/esx_multicharacter/web/src/App.tsx b/[core]/esx_multicharacter/web/src/App.tsx
new file mode 100644
index 00000000..f44c47f7
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/App.tsx
@@ -0,0 +1,44 @@
+import CharacterSelection from './components/CharacterSelection';
+import { useState } from 'react';
+import { useNuiEvent } from './utils/useNuiEvent'
+import { Character, Locale } from './types/Character';
+
+function App() {
+ const [isVisible, setIsVisible] = useState(false);
+ const [characters, setCharacters] = useState([]);
+ const [Candelete, setCandelete] = useState(false);
+ const [MaxAllowedSlot, setMaxAllowedSlot] = useState(0);
+ const [locale, setLocale] = useState({ char_info_title: '', play: '', title: '' });
+
+
+ useNuiEvent('ToggleMulticharacter', (data:any) => {
+ if (data.show) {
+ const validCharacters = data.Characters.filter((char: any) => char !== null);
+ const parsedCharacters: Character[] = validCharacters.map((char: any, index: number) => ({
+ id: char.id.toString(),
+ name: `${char.firstname} ${char.lastname}`,
+ birthDate: char.dateofbirth,
+ gender: char.sex?.toUpperCase() === 'MALE' ? 'MALE' : 'FEMALE',
+ occupation: char.job,
+ disabled: char.disabled,
+ isActive: index === 0,
+ }));
+
+ setIsVisible(true);
+ setCharacters(parsedCharacters);
+ setCandelete(data.CanDelete);
+ setMaxAllowedSlot(data.AllowedSlot)
+ setLocale(data.Locale)
+ } else {
+ setIsVisible(false);
+ setCharacters([]);
+
+ }
+ })
+
+ return isVisible && (
+
+ );
+}
+
+export default App;
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/web/src/assets/esxLogo.png b/[core]/esx_multicharacter/web/src/assets/esxLogo.png
new file mode 100644
index 00000000..9be59f99
Binary files /dev/null and b/[core]/esx_multicharacter/web/src/assets/esxLogo.png differ
diff --git a/[core]/esx_multicharacter/web/src/components/CharacterCard.tsx b/[core]/esx_multicharacter/web/src/components/CharacterCard.tsx
new file mode 100644
index 00000000..a73e61f1
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/components/CharacterCard.tsx
@@ -0,0 +1,102 @@
+import React from 'react';
+import { Character } from '../types/Character';
+import { Icon } from '@iconify/react';
+
+interface CharacterCardProps {
+ character: Character;
+ onSelect: (id: string) => void;
+ onInfoClick: (id: string) => void;
+ showInfo: boolean;
+ PlayCharacter: () => void;
+}
+
+const CharacterCard: React.FC = ({
+ character,
+ onSelect,
+ onInfoClick,
+ showInfo,
+ PlayCharacter
+}) => {
+ return (
+ <>
+
+
onSelect(character.id)}
+ >
+
+
+
+
+
+ {character.name}
+
+
+
+ {character.isActive && (
+
+
+
+
+ )}
+
+
+
+ >
+ )
+};
+
+export default CharacterCard;
diff --git a/[core]/esx_multicharacter/web/src/components/CharacterInfo.tsx b/[core]/esx_multicharacter/web/src/components/CharacterInfo.tsx
new file mode 100644
index 00000000..c98727ca
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/components/CharacterInfo.tsx
@@ -0,0 +1,71 @@
+import React from 'react';
+import { Info, Cake, User2, Briefcase, Trash2 } from 'lucide-react';
+import { Character, Locale } from '../types/Character';
+import { Icon } from '@iconify/react';
+
+interface CharacterInfoProps {
+ character: Character;
+ onClose: () => void;
+ isAllowedtoDelete: boolean;
+ PlayCharacter : () => void;
+ handleDelete: () => void;
+ locale: Locale;
+}
+
+const CharacterInfo: React.FC = ({ character, onClose, isAllowedtoDelete , PlayCharacter, handleDelete, locale}) => {
+ if (!character) return null;
+
+ return (
+
+
+
+
+ {locale.char_info_title}
+
+
+
+
+
+
+ {character.birthDate}
+
+
+
+
+
+ {character.gender}
+
+
+
+
+
+ {character.occupation}
+
+
+
+
+
+
+
+ {isAllowedtoDelete && (
+
+ )}
+
+
+
+ );
+};
+
+export default CharacterInfo;
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/web/src/components/CharacterSelection.tsx b/[core]/esx_multicharacter/web/src/components/CharacterSelection.tsx
new file mode 100644
index 00000000..aaf8140c
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/components/CharacterSelection.tsx
@@ -0,0 +1,119 @@
+import React, { useState } from 'react';
+import { Plus } from 'lucide-react';
+import { Character, Locale } from '../types/Character';
+import CharacterCard from './CharacterCard';
+import CharacterInfo from './CharacterInfo';
+import Logo from '../assets/esxLogo.png';
+import { fetchNui } from '../utils/fetchNui';
+
+interface CharacterSelectionProps {
+ initialCharacters: Character[];
+ Candelete: boolean;
+ MaxAllowedSlot : number;
+ locale : Locale;
+}
+
+const CharacterSelection: React.FC = ({ initialCharacters, Candelete, MaxAllowedSlot, locale }) => {
+ const [characters, setCharacters] = useState(initialCharacters);
+ const [showInfo, setShowInfo] = useState(null);
+ const [selectedCharacter, setSelectedCharacter] = useState(
+ characters.find(char => char.isActive) || null
+ );
+
+ const handleSelectCharacter = (id: string) => {
+ if (selectedCharacter?.id === id) return;
+
+ const updatedCharacters = characters.map(char => ({
+ ...char,
+ isActive: char.id === id
+ }));
+
+ setCharacters(updatedCharacters);
+ setSelectedCharacter(updatedCharacters.find(char => char.id === id) || null);
+ setShowInfo(null);
+ fetchNui('SelectCharacter', {id : id})
+ };
+
+ const toggleInfo = (id: string) => {
+ setShowInfo(showInfo === id ? null : id);
+ };
+
+ const PlayCharacter = () => {
+ fetchNui('PlayCharacter')
+ }
+
+ const handleCreateCharacter = () => {
+ fetchNui('CreateCharacter')
+ }
+
+ const handleDeleteCharacter = () => {
+ if (!selectedCharacter) return;
+
+ const updatedCharactersRaw = characters.filter(char => char.id !== selectedCharacter.id);
+
+ fetchNui('DeleteCharacter');
+
+ if (updatedCharactersRaw.length > 0) {
+ const updatedCharacters = updatedCharactersRaw.map((char, index) => ({
+ ...char,
+ isActive: index === 0
+ }));
+
+ setCharacters(updatedCharacters);
+ setSelectedCharacter(updatedCharacters[0]);
+ setShowInfo(null);
+ } else {
+ setCharacters([]);
+ setSelectedCharacter(null);
+ setShowInfo(null);
+ handleCreateCharacter();
+ }
+ };
+
+ return (
+
+
+
+

+
{locale.title}
+
+
+
+ {characters.map(character => (
+
+
+ {character.isActive && showInfo === character.id && (
+ setShowInfo(null)}
+ isAllowedtoDelete={Candelete}
+ PlayCharacter={PlayCharacter}
+ handleDelete={handleDeleteCharacter}
+ locale={locale}
+ />
+ )}
+
+ ))}
+
+
+
+
+
+
+
+ );
+};
+
+export default CharacterSelection;
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/web/src/index.css b/[core]/esx_multicharacter/web/src/index.css
new file mode 100644
index 00000000..ab4f4b38
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/index.css
@@ -0,0 +1,58 @@
+@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+:root {
+ --primary: #ff9800;
+ --primary-dark: #f57c00;
+ --dark-bg: #1c1c1c;
+ --card-bg: #262626;
+}
+
+body {
+ margin: 0;
+ font-family: "Poppins", sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ color: white;
+}
+
+@keyframes slideIn {
+ from {
+ transform: translateX(-100%);
+ opacity: 0;
+ }
+ to {
+ transform: translateX(0);
+ opacity: 1;
+ }
+}
+
+@keyframes slideDown {
+ from {
+ max-height: 0;
+ opacity: 0;
+ transform: translateY(-10px);
+ }
+ to {
+ max-height: 500px;
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.animate-slideIn {
+ animation: slideIn 0.5s ease-out forwards;
+}
+
+.animate-slideDown {
+ animation: slideDown 0.3s ease-out forwards;
+ overflow: hidden;
+}
+
+.transition-all {
+ transition-property: all;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 300ms;
+}
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/web/src/main.tsx b/[core]/esx_multicharacter/web/src/main.tsx
new file mode 100644
index 00000000..f02e9eef
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/main.tsx
@@ -0,0 +1,7 @@
+import { createRoot } from 'react-dom/client';
+import App from './App.tsx';
+import './index.css';
+
+createRoot(document.getElementById('root')!).render(
+
+);
diff --git a/[core]/esx_multicharacter/web/src/types/Character.ts b/[core]/esx_multicharacter/web/src/types/Character.ts
new file mode 100644
index 00000000..813b4c88
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/types/Character.ts
@@ -0,0 +1,15 @@
+export interface Character {
+ id: string;
+ name: string;
+ birthDate: string;
+ gender: 'MALE' | 'FEMALE';
+ occupation: string;
+ isActive?: boolean;
+ disabled?: boolean;
+}
+
+export interface Locale {
+ char_info_title: string;
+ play : string;
+ title : string;
+}
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/web/src/utils/fetchNui.ts b/[core]/esx_multicharacter/web/src/utils/fetchNui.ts
new file mode 100644
index 00000000..67ee2276
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/utils/fetchNui.ts
@@ -0,0 +1,39 @@
+import { isEnvBrowser } from "./misc";
+
+/**
+ * Simple wrapper around fetch API tailored for CEF/NUI use. This abstraction
+ * can be extended to include AbortController if needed or if the response isn't
+ * JSON. Tailor it to your needs.
+ *
+ * @param eventName - The endpoint eventname to target
+ * @param data - Data you wish to send in the NUI Callback
+ * @param mockData - Mock data to be returned if in the browser
+ *
+ * @return returnData - A promise for the data sent back by the NuiCallbacks CB argument
+ */
+
+export async function fetchNui(
+ eventName: string,
+ data?: unknown,
+ mockData?: T,
+): Promise {
+ const options = {
+ method: "post",
+ headers: {
+ "Content-Type": "application/json; charset=UTF-8",
+ },
+ body: JSON.stringify(data),
+ };
+
+ if (isEnvBrowser() && mockData) return mockData;
+
+ const resourceName = (window as any).GetParentResourceName
+ ? (window as any).GetParentResourceName()
+ : "nui-frame-app";
+
+ const resp = await fetch(`https://${resourceName}/${eventName}`, options);
+
+ const respFormatted = await resp.json();
+
+ return respFormatted;
+}
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/web/src/utils/misc.ts b/[core]/esx_multicharacter/web/src/utils/misc.ts
new file mode 100644
index 00000000..3b4b74bc
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/utils/misc.ts
@@ -0,0 +1,6 @@
+// Will return whether the current environment is in a regular browser
+// and not CEF
+export const isEnvBrowser = (): boolean => !(window as any).invokeNative;
+
+// Basic no operation function
+export const noop = () => {};
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/web/src/utils/useNuiEvent.tsx b/[core]/esx_multicharacter/web/src/utils/useNuiEvent.tsx
new file mode 100644
index 00000000..9983da66
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/utils/useNuiEvent.tsx
@@ -0,0 +1,49 @@
+import { MutableRefObject, useEffect, useRef } from "react";
+import { noop } from "./misc";
+
+interface NuiMessageData {
+ action: string;
+ data: T;
+}
+
+type NuiHandlerSignature = (data: T) => void;
+
+/**
+ * A hook that manage events listeners for receiving data from the client scripts
+ * @param action The specific `action` that should be listened for.
+ * @param handler The callback function that will handle data relayed by this hook
+ *
+ * @example
+ * useNuiEvent<{visibility: true, wasVisible: 'something'}>('setVisible', (data) => {
+ * // whatever logic you want
+ * })
+ *
+ **/
+
+export const useNuiEvent = (
+ action: string,
+ handler: (data: T) => void,
+) => {
+ const savedHandler: MutableRefObject> = useRef(noop);
+
+ // Make sure we handle for a reactive handler
+ useEffect(() => {
+ savedHandler.current = handler;
+ }, [handler]);
+
+ useEffect(() => {
+ const eventListener = (event: MessageEvent>) => {
+ const { action: eventAction, data } = event.data;
+
+ if (savedHandler.current) {
+ if (eventAction === action) {
+ savedHandler.current(data);
+ }
+ }
+ };
+
+ window.addEventListener("message", eventListener);
+ // Remove Event Listener on component cleanup
+ return () => window.removeEventListener("message", eventListener);
+ }, [action]);
+};
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/web/src/vite-env.d.ts b/[core]/esx_multicharacter/web/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/[core]/esx_multicharacter/web/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/[core]/esx_multicharacter/web/tailwind.config.js b/[core]/esx_multicharacter/web/tailwind.config.js
new file mode 100644
index 00000000..0b6cd34a
--- /dev/null
+++ b/[core]/esx_multicharacter/web/tailwind.config.js
@@ -0,0 +1,33 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
+ theme: {
+ extend: {
+ colors: {
+ orange: {
+ 500: '#FF9800',
+ 600: '#F57C00',
+ },
+ neutral: {
+ 800: '#262626',
+ 900: '#1c1c1c',
+ }
+ },
+ animation: {
+ 'slide-in': 'slideIn 0.5s ease-out forwards',
+ 'slide-down': 'slideDown 0.3s ease-out forwards',
+ },
+ keyframes: {
+ slideIn: {
+ '0%': { transform: 'translateX(-100%)', opacity: 0 },
+ '100%': { transform: 'translateX(0)', opacity: 1 },
+ },
+ slideDown: {
+ '0%': { maxHeight: '0', opacity: 0, transform: 'translateY(-10px)' },
+ '100%': { maxHeight: '500px', opacity: 1, transform: 'translateY(0)' },
+ },
+ },
+ },
+ },
+ plugins: [],
+};
\ No newline at end of file
diff --git a/[core]/esx_multicharacter/web/tsconfig.app.json b/[core]/esx_multicharacter/web/tsconfig.app.json
new file mode 100644
index 00000000..f0a23505
--- /dev/null
+++ b/[core]/esx_multicharacter/web/tsconfig.app.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"]
+}
diff --git a/[core]/esx_multicharacter/web/tsconfig.json b/[core]/esx_multicharacter/web/tsconfig.json
new file mode 100644
index 00000000..1ffef600
--- /dev/null
+++ b/[core]/esx_multicharacter/web/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "files": [],
+ "references": [
+ { "path": "./tsconfig.app.json" },
+ { "path": "./tsconfig.node.json" }
+ ]
+}
diff --git a/[core]/esx_multicharacter/web/tsconfig.node.json b/[core]/esx_multicharacter/web/tsconfig.node.json
new file mode 100644
index 00000000..0d3d7144
--- /dev/null
+++ b/[core]/esx_multicharacter/web/tsconfig.node.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "lib": ["ES2023"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/[core]/esx_multicharacter/web/vite.config.ts b/[core]/esx_multicharacter/web/vite.config.ts
new file mode 100644
index 00000000..d3cf25a6
--- /dev/null
+++ b/[core]/esx_multicharacter/web/vite.config.ts
@@ -0,0 +1,14 @@
+import { defineConfig } from 'vite';
+import react from '@vitejs/plugin-react';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ base: './',
+ plugins: [react()],
+ optimizeDeps: {
+ exclude: ['lucide-react'],
+ },
+ build: {
+ outDir: 'build',
+ },
+});