From 0b0fd234447aff2262712e7bde8687c5d78963a4 Mon Sep 17 00:00:00 2001 From: Muhammed Yaseen Date: Thu, 22 May 2025 12:44:39 +0530 Subject: [PATCH 1/2] ESX_MULTICHARACTER --- [core]/esx_multicharacter/client/main.lua | 19 +- .../client/modules/menu.lua | 164 +++--------------- .../client/modules/multicharacter.lua | 21 ++- .../esx_multicharacter/client/modules/nui.lua | 23 +++ [core]/esx_multicharacter/config.lua | 2 +- [core]/esx_multicharacter/fxmanifest.lua | 5 +- [core]/esx_multicharacter/html/css/main.css | 76 -------- [core]/esx_multicharacter/html/js/app.js | 66 ------- [core]/esx_multicharacter/html/locales/cs.js | 8 - [core]/esx_multicharacter/html/locales/de.js | 8 - [core]/esx_multicharacter/html/locales/en.js | 8 - [core]/esx_multicharacter/html/locales/es.js | 8 - [core]/esx_multicharacter/html/locales/fi.js | 8 - [core]/esx_multicharacter/html/locales/fr.js | 8 - [core]/esx_multicharacter/html/locales/hu.js | 8 - [core]/esx_multicharacter/html/locales/it.js | 8 - [core]/esx_multicharacter/html/locales/nl.js | 8 - [core]/esx_multicharacter/html/locales/pl.js | 8 - [core]/esx_multicharacter/html/locales/pt.js | 8 - [core]/esx_multicharacter/html/locales/sr.js | 8 - [core]/esx_multicharacter/html/locales/sv.js | 8 - .../esx_multicharacter/html/locales/zh-cn.js | 8 - [core]/esx_multicharacter/html/ui.html | 22 --- [core]/esx_multicharacter/locales/cs.lua | 28 --- [core]/esx_multicharacter/locales/da.lua | 32 ---- [core]/esx_multicharacter/locales/de.lua | 32 ---- [core]/esx_multicharacter/locales/en.lua | 22 +-- [core]/esx_multicharacter/locales/es.lua | 28 --- [core]/esx_multicharacter/locales/fi.lua | 33 ---- [core]/esx_multicharacter/locales/fr.lua | 32 ---- [core]/esx_multicharacter/locales/gr.lua | 32 ---- [core]/esx_multicharacter/locales/he.lua | 32 ---- [core]/esx_multicharacter/locales/hu.lua | 32 ---- [core]/esx_multicharacter/locales/it.lua | 32 ---- [core]/esx_multicharacter/locales/nl.lua | 32 ---- [core]/esx_multicharacter/locales/pl.lua | 33 ---- [core]/esx_multicharacter/locales/pt.lua | 25 --- [core]/esx_multicharacter/locales/sl.lua | 33 ---- [core]/esx_multicharacter/locales/sr.lua | 33 ---- [core]/esx_multicharacter/locales/sv.lua | 32 ---- [core]/esx_multicharacter/locales/zh-cn.lua | 33 ---- .../web/build/assets/esxLogo-sNwPFb_p.png | Bin 0 -> 19788 bytes .../web/build/assets/index-Cy_cJ0Pf.css | 1 + .../web/build/assets/index-DGfzXZP_.js | 93 ++++++++++ .../esx_multicharacter/web/build/index.html | 14 ++ .../esx_multicharacter/web/eslint.config.js | 28 +++ [core]/esx_multicharacter/web/index.html | 13 ++ [core]/esx_multicharacter/web/package.json | 34 ++++ .../esx_multicharacter/web/postcss.config.js | 6 + [core]/esx_multicharacter/web/src/App.tsx | 44 +++++ .../web/src/assets/esxLogo.png | Bin 0 -> 19788 bytes .../web/src/components/CharacterCard.tsx | 102 +++++++++++ .../web/src/components/CharacterInfo.tsx | 71 ++++++++ .../web/src/components/CharacterSelection.tsx | 119 +++++++++++++ [core]/esx_multicharacter/web/src/index.css | 58 +++++++ [core]/esx_multicharacter/web/src/main.tsx | 7 + .../web/src/types/Character.ts | 15 ++ .../web/src/utils/fetchNui.ts | 39 +++++ .../esx_multicharacter/web/src/utils/misc.ts | 6 + .../web/src/utils/useNuiEvent.tsx | 49 ++++++ .../esx_multicharacter/web/src/vite-env.d.ts | 1 + .../esx_multicharacter/web/tailwind.config.js | 33 ++++ .../esx_multicharacter/web/tsconfig.app.json | 24 +++ [core]/esx_multicharacter/web/tsconfig.json | 7 + .../esx_multicharacter/web/tsconfig.node.json | 22 +++ [core]/esx_multicharacter/web/vite.config.ts | 14 ++ 66 files changed, 871 insertions(+), 995 deletions(-) create mode 100644 [core]/esx_multicharacter/client/modules/nui.lua delete mode 100644 [core]/esx_multicharacter/html/css/main.css delete mode 100644 [core]/esx_multicharacter/html/js/app.js delete mode 100644 [core]/esx_multicharacter/html/locales/cs.js delete mode 100644 [core]/esx_multicharacter/html/locales/de.js delete mode 100644 [core]/esx_multicharacter/html/locales/en.js delete mode 100644 [core]/esx_multicharacter/html/locales/es.js delete mode 100644 [core]/esx_multicharacter/html/locales/fi.js delete mode 100644 [core]/esx_multicharacter/html/locales/fr.js delete mode 100644 [core]/esx_multicharacter/html/locales/hu.js delete mode 100644 [core]/esx_multicharacter/html/locales/it.js delete mode 100644 [core]/esx_multicharacter/html/locales/nl.js delete mode 100644 [core]/esx_multicharacter/html/locales/pl.js delete mode 100644 [core]/esx_multicharacter/html/locales/pt.js delete mode 100644 [core]/esx_multicharacter/html/locales/sr.js delete mode 100644 [core]/esx_multicharacter/html/locales/sv.js delete mode 100644 [core]/esx_multicharacter/html/locales/zh-cn.js delete mode 100644 [core]/esx_multicharacter/html/ui.html delete mode 100644 [core]/esx_multicharacter/locales/cs.lua delete mode 100644 [core]/esx_multicharacter/locales/da.lua delete mode 100644 [core]/esx_multicharacter/locales/de.lua delete mode 100644 [core]/esx_multicharacter/locales/es.lua delete mode 100644 [core]/esx_multicharacter/locales/fi.lua delete mode 100644 [core]/esx_multicharacter/locales/fr.lua delete mode 100644 [core]/esx_multicharacter/locales/gr.lua delete mode 100644 [core]/esx_multicharacter/locales/he.lua delete mode 100644 [core]/esx_multicharacter/locales/hu.lua delete mode 100644 [core]/esx_multicharacter/locales/it.lua delete mode 100644 [core]/esx_multicharacter/locales/nl.lua delete mode 100644 [core]/esx_multicharacter/locales/pl.lua delete mode 100644 [core]/esx_multicharacter/locales/pt.lua delete mode 100644 [core]/esx_multicharacter/locales/sl.lua delete mode 100644 [core]/esx_multicharacter/locales/sr.lua delete mode 100644 [core]/esx_multicharacter/locales/sv.lua delete mode 100644 [core]/esx_multicharacter/locales/zh-cn.lua create mode 100644 [core]/esx_multicharacter/web/build/assets/esxLogo-sNwPFb_p.png create mode 100644 [core]/esx_multicharacter/web/build/assets/index-Cy_cJ0Pf.css create mode 100644 [core]/esx_multicharacter/web/build/assets/index-DGfzXZP_.js create mode 100644 [core]/esx_multicharacter/web/build/index.html create mode 100644 [core]/esx_multicharacter/web/eslint.config.js create mode 100644 [core]/esx_multicharacter/web/index.html create mode 100644 [core]/esx_multicharacter/web/package.json create mode 100644 [core]/esx_multicharacter/web/postcss.config.js create mode 100644 [core]/esx_multicharacter/web/src/App.tsx create mode 100644 [core]/esx_multicharacter/web/src/assets/esxLogo.png create mode 100644 [core]/esx_multicharacter/web/src/components/CharacterCard.tsx create mode 100644 [core]/esx_multicharacter/web/src/components/CharacterInfo.tsx create mode 100644 [core]/esx_multicharacter/web/src/components/CharacterSelection.tsx create mode 100644 [core]/esx_multicharacter/web/src/index.css create mode 100644 [core]/esx_multicharacter/web/src/main.tsx create mode 100644 [core]/esx_multicharacter/web/src/types/Character.ts create mode 100644 [core]/esx_multicharacter/web/src/utils/fetchNui.ts create mode 100644 [core]/esx_multicharacter/web/src/utils/misc.ts create mode 100644 [core]/esx_multicharacter/web/src/utils/useNuiEvent.tsx create mode 100644 [core]/esx_multicharacter/web/src/vite-env.d.ts create mode 100644 [core]/esx_multicharacter/web/tailwind.config.js create mode 100644 [core]/esx_multicharacter/web/tsconfig.app.json create mode 100644 [core]/esx_multicharacter/web/tsconfig.json create mode 100644 [core]/esx_multicharacter/web/tsconfig.node.json create mode 100644 [core]/esx_multicharacter/web/vite.config.ts 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 3f0e7c09..ee9248a7 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 @@ - - - - - - - - - - -
-
Character Info
-
-

-
-
- -
- - - - diff --git a/[core]/esx_multicharacter/locales/cs.lua b/[core]/esx_multicharacter/locales/cs.lua deleted file mode 100644 index 5421e450..00000000 --- a/[core]/esx_multicharacter/locales/cs.lua +++ /dev/null @@ -1,28 +0,0 @@ -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", -} diff --git a/[core]/esx_multicharacter/locales/da.lua b/[core]/esx_multicharacter/locales/da.lua deleted file mode 100644 index 3bec8971..00000000 --- a/[core]/esx_multicharacter/locales/da.lua +++ /dev/null @@ -1,32 +0,0 @@ -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", -} diff --git a/[core]/esx_multicharacter/locales/de.lua b/[core]/esx_multicharacter/locales/de.lua deleted file mode 100644 index f33c433e..00000000 --- a/[core]/esx_multicharacter/locales/de.lua +++ /dev/null @@ -1,32 +0,0 @@ -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 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 deleted file mode 100644 index 0f3cc6bf..00000000 --- a/[core]/esx_multicharacter/locales/es.lua +++ /dev/null @@ -1,28 +0,0 @@ -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", - ["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", -} diff --git a/[core]/esx_multicharacter/locales/fi.lua b/[core]/esx_multicharacter/locales/fi.lua deleted file mode 100644 index 9da10652..00000000 --- a/[core]/esx_multicharacter/locales/fi.lua +++ /dev/null @@ -1,33 +0,0 @@ -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_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", -} diff --git a/[core]/esx_multicharacter/locales/fr.lua b/[core]/esx_multicharacter/locales/fr.lua deleted file mode 100644 index a64e27af..00000000 --- a/[core]/esx_multicharacter/locales/fr.lua +++ /dev/null @@ -1,32 +0,0 @@ -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_identifier"] = "Identifiant du joueur", - ["command_slots"] = "# de slots", - ["slotsadd"] = "Vous avez défini %s slots à %s", - ["slotsrem"] = "Vous avez suprimé les slots à %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", -} diff --git a/[core]/esx_multicharacter/locales/gr.lua b/[core]/esx_multicharacter/locales/gr.lua deleted file mode 100644 index 49b832ca..00000000 --- a/[core]/esx_multicharacter/locales/gr.lua +++ /dev/null @@ -1,32 +0,0 @@ -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 δεν υπάρχει", -} diff --git a/[core]/esx_multicharacter/locales/he.lua b/[core]/esx_multicharacter/locales/he.lua deleted file mode 100644 index a6e8267e..00000000 --- a/[core]/esx_multicharacter/locales/he.lua +++ /dev/null @@ -1,32 +0,0 @@ -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_enablechar"] = "אפשר דמות מסוימת של שחקן", - ["command_disablechar"] = "השבת דמות מסוימת של שחקן", - ["command_charslot"] = "מספר מקום של הדמות", - ["command_identifier"] = "מזהה שחקן", - ["command_slots"] = "# של מקומות", - ["slotsadd"] = "הגדרת %s מקומות ל- %s", - ["slotsrem"] = "הסרת מקומות ל- %s", - ["charenabled"] = "אפשרת את הדמות #%s של %s", - ["chardisabled"] = "השבתת את הדמות #%s של %s", - ["charnotfound"] = "הדמות #%s של %s לא קיימת", -} diff --git a/[core]/esx_multicharacter/locales/hu.lua b/[core]/esx_multicharacter/locales/hu.lua deleted file mode 100644 index b4d29a7f..00000000 --- a/[core]/esx_multicharacter/locales/hu.lua +++ /dev/null @@ -1,32 +0,0 @@ -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", -} diff --git a/[core]/esx_multicharacter/locales/it.lua b/[core]/esx_multicharacter/locales/it.lua deleted file mode 100644 index f8a596bd..00000000 --- a/[core]/esx_multicharacter/locales/it.lua +++ /dev/null @@ -1,32 +0,0 @@ -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", - ["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", - ["charnotfound"] = "Il personaggio #%s di %s non esiste", -} diff --git a/[core]/esx_multicharacter/locales/nl.lua b/[core]/esx_multicharacter/locales/nl.lua deleted file mode 100644 index 9bf90040..00000000 --- a/[core]/esx_multicharacter/locales/nl.lua +++ /dev/null @@ -1,32 +0,0 @@ -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", -} diff --git a/[core]/esx_multicharacter/locales/pl.lua b/[core]/esx_multicharacter/locales/pl.lua deleted file mode 100644 index b71f35fd..00000000 --- a/[core]/esx_multicharacter/locales/pl.lua +++ /dev/null @@ -1,33 +0,0 @@ -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", - -} diff --git a/[core]/esx_multicharacter/locales/pt.lua b/[core]/esx_multicharacter/locales/pt.lua deleted file mode 100644 index 36df3e00..00000000 --- a/[core]/esx_multicharacter/locales/pt.lua +++ /dev/null @@ -1,25 +0,0 @@ -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_charslot"] = "Número do slot do personagem", - ["command_identifier"] = "Identificador do jogador", - ["command_slots"] = "# 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", -} diff --git a/[core]/esx_multicharacter/locales/sl.lua b/[core]/esx_multicharacter/locales/sl.lua deleted file mode 100644 index 799a1563..00000000 --- a/[core]/esx_multicharacter/locales/sl.lua +++ /dev/null @@ -1,33 +0,0 @@ -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_enablechar"] = "Omogoči določen lik igralca", - ["command_disablechar"] = "Onemogoči določen lik igralca", - ["command_charslot"] = "Številka reže znaka", - ["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", -} diff --git a/[core]/esx_multicharacter/locales/sr.lua b/[core]/esx_multicharacter/locales/sr.lua deleted file mode 100644 index 85978aca..00000000 --- a/[core]/esx_multicharacter/locales/sr.lua +++ /dev/null @@ -1,33 +0,0 @@ -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", -} diff --git a/[core]/esx_multicharacter/locales/sv.lua b/[core]/esx_multicharacter/locales/sv.lua deleted file mode 100644 index d726459b..00000000 --- a/[core]/esx_multicharacter/locales/sv.lua +++ /dev/null @@ -1,32 +0,0 @@ -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", -} diff --git a/[core]/esx_multicharacter/locales/zh-cn.lua b/[core]/esx_multicharacter/locales/zh-cn.lua deleted file mode 100644 index 9f45bc58..00000000 --- a/[core]/esx_multicharacter/locales/zh-cn.lua +++ /dev/null @@ -1,33 +0,0 @@ -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 并不存在", -} 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 0000000000000000000000000000000000000000..9be59f9992b9df8e2b5f20c858d19a323f402984 GIT binary patch literal 19788 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%0A^;iF4Hueoa%Y*JK1V&F^$J%$E4xJ@W&e9r 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: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("",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'"+e+""}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 0000000000000000000000000000000000000000..9be59f9992b9df8e2b5f20c858d19a323f402984 GIT binary patch literal 19788 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%0A^;iF4Hueoa%Y*JK1V&F^$J%$E4xJ@W&e9r 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 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 ( +
+
+
+ Logo +

{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', + }, +}); From 87e13f38351d7393ac5f61cd904ff877a2534b43 Mon Sep 17 00:00:00 2001 From: Muhammed Yaseen Date: Fri, 23 May 2025 08:47:56 +0530 Subject: [PATCH 2/2] Locales --- [core]/esx_multicharacter/locales/cs.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/da.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/de.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/es.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/fi.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/fr.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/gr.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/he.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/hu.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/it.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/nl.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/pl.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/pt.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/sl.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/sr.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/sv.lua | 22 +++++++++++++++++++++ [core]/esx_multicharacter/locales/zh-cn.lua | 22 +++++++++++++++++++++ 17 files changed, 374 insertions(+) create mode 100644 [core]/esx_multicharacter/locales/cs.lua create mode 100644 [core]/esx_multicharacter/locales/da.lua create mode 100644 [core]/esx_multicharacter/locales/de.lua create mode 100644 [core]/esx_multicharacter/locales/es.lua create mode 100644 [core]/esx_multicharacter/locales/fi.lua create mode 100644 [core]/esx_multicharacter/locales/fr.lua create mode 100644 [core]/esx_multicharacter/locales/gr.lua create mode 100644 [core]/esx_multicharacter/locales/he.lua create mode 100644 [core]/esx_multicharacter/locales/hu.lua create mode 100644 [core]/esx_multicharacter/locales/it.lua create mode 100644 [core]/esx_multicharacter/locales/nl.lua create mode 100644 [core]/esx_multicharacter/locales/pl.lua create mode 100644 [core]/esx_multicharacter/locales/pt.lua create mode 100644 [core]/esx_multicharacter/locales/sl.lua create mode 100644 [core]/esx_multicharacter/locales/sr.lua create mode 100644 [core]/esx_multicharacter/locales/sv.lua create mode 100644 [core]/esx_multicharacter/locales/zh-cn.lua diff --git a/[core]/esx_multicharacter/locales/cs.lua b/[core]/esx_multicharacter/locales/cs.lua new file mode 100644 index 00000000..083f05af --- /dev/null +++ b/[core]/esx_multicharacter/locales/cs.lua @@ -0,0 +1,22 @@ +Locales["cs"] = { + ["male"] = "Muž", + ["female"] = "Žena", + ["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 new file mode 100644 index 00000000..4155b61c --- /dev/null +++ b/[core]/esx_multicharacter/locales/da.lua @@ -0,0 +1,22 @@ +Locales["da"] = { + ["male"] = "Mand", + ["female"] = "Kvinde", + ["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 new file mode 100644 index 00000000..5f8e5d5d --- /dev/null +++ b/[core]/esx_multicharacter/locales/de.lua @@ -0,0 +1,22 @@ +Locales["de"] = { + ["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/es.lua b/[core]/esx_multicharacter/locales/es.lua new file mode 100644 index 00000000..59c94065 --- /dev/null +++ b/[core]/esx_multicharacter/locales/es.lua @@ -0,0 +1,22 @@ +Locales["es"] = { + ["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ú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 new file mode 100644 index 00000000..5ac07734 --- /dev/null +++ b/[core]/esx_multicharacter/locales/fi.lua @@ -0,0 +1,22 @@ +Locales["fi"] = { + ["male"] = "Mies", + ["female"] = "Nainen", + ["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"] = "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 new file mode 100644 index 00000000..78bc7e5e --- /dev/null +++ b/[core]/esx_multicharacter/locales/fr.lua @@ -0,0 +1,22 @@ +Locales["fr"] = { + ["male"] = "Homme", + ["female"] = "Femme", + ["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"] = "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'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 new file mode 100644 index 00000000..cae6e2bc --- /dev/null +++ b/[core]/esx_multicharacter/locales/gr.lua @@ -0,0 +1,22 @@ +Locales["gr"] = { + ["male"] = "Άνδρας", + ["female"] = "Γυναίκα", + ["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 new file mode 100644 index 00000000..e9ec999c --- /dev/null +++ b/[core]/esx_multicharacter/locales/he.lua @@ -0,0 +1,22 @@ +Locales["he"] = { + ["male"] = "זכר", + ["female"] = "נקבה", + ["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/locales/hu.lua b/[core]/esx_multicharacter/locales/hu.lua new file mode 100644 index 00000000..8693a119 --- /dev/null +++ b/[core]/esx_multicharacter/locales/hu.lua @@ -0,0 +1,22 @@ +Locales["hu"] = { + ["male"] = "Férfi", + ["female"] = "Nő", + ["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 new file mode 100644 index 00000000..8a06ca46 --- /dev/null +++ b/[core]/esx_multicharacter/locales/it.lua @@ -0,0 +1,22 @@ +Locales["it"] = { + ["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 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 new file mode 100644 index 00000000..6e527644 --- /dev/null +++ b/[core]/esx_multicharacter/locales/nl.lua @@ -0,0 +1,22 @@ +Locales["nl"] = { + ["male"] = "Man", + ["female"] = "Vrouw", + ["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 new file mode 100644 index 00000000..8c290171 --- /dev/null +++ b/[core]/esx_multicharacter/locales/pl.lua @@ -0,0 +1,22 @@ +Locales["pl"] = { + ["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 new file mode 100644 index 00000000..23b2c201 --- /dev/null +++ b/[core]/esx_multicharacter/locales/pt.lua @@ -0,0 +1,22 @@ +Locales["pt"] = { + ["male"] = "Masculino", + ["female"] = "Feminino", + ["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"] = "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"] = "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 new file mode 100644 index 00000000..1697e3b7 --- /dev/null +++ b/[core]/esx_multicharacter/locales/sl.lua @@ -0,0 +1,22 @@ +Locales["sl"] = { + ["male"] = "Moški", + ["female"] = "Ženska", + ["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 slota lika", + ["command_identifier"] = "Identifikator igralca", + ["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 new file mode 100644 index 00000000..7ace5d91 --- /dev/null +++ b/[core]/esx_multicharacter/locales/sr.lua @@ -0,0 +1,22 @@ +Locales["sr"] = { + ["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 new file mode 100644 index 00000000..b7d3617e --- /dev/null +++ b/[core]/esx_multicharacter/locales/sv.lua @@ -0,0 +1,22 @@ +Locales["sv"] = { + ["male"] = "Man", + ["female"] = "Kvinna", + ["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 new file mode 100644 index 00000000..4d4e5fce --- /dev/null +++ b/[core]/esx_multicharacter/locales/zh-cn.lua @@ -0,0 +1,22 @@ +Locales["zh-cn"] = { + ["male"] = "男性", + ["female"] = "女性", + ["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"] = "开始游戏", + } +}