diff --git a/resources/[tools]/ps-banking/LICENSE b/resources/[tools]/ps-banking/LICENSE new file mode 100644 index 000000000..bf55fe7d4 --- /dev/null +++ b/resources/[tools]/ps-banking/LICENSE @@ -0,0 +1,459 @@ +Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) + +https://creativecommons.org/licenses/by-nc-sa/4.0/ + +This is a human-readable summary of (and not a substitute for) the license. Disclaimer. + +You are free to: + +Share — copy and redistribute the material in any medium or format +Adapt — remix, transform, and build upon the material + +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: +Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. + +NonCommercial — You may not use the material for commercial purposes. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. + +Notices: +You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material. + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International +Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial-ShareAlike 4.0 International Public License +("Public License"). To the extent this Public License may be +interpreted as a contract, You are granted the Licensed Rights in +consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the +Licensor receives from making the Licensed Material available under +these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-NC-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution, NonCommercial, and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + l. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + m. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + n. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-NC-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/resources/[tools]/ps-banking/README.md b/resources/[tools]/ps-banking/README.md new file mode 100644 index 000000000..5cfee4c97 --- /dev/null +++ b/resources/[tools]/ps-banking/README.md @@ -0,0 +1,54 @@ +# ps-banking +Compatible with QBCore and ESX. + +# Depedency +1. [qb-core](https://github.com/qbcore-framework/qb-core) or [ESX](https://github.com/esx-framework) +2. [ox_lib](https://github.com/overextended/ox_lib) + +# Installation +* Download release files. +* Drag and drop resource into your server files. +* Start resource through server.cfg. +* Add the ps-banking sql file to your database. +* Restart your server. + +## Exports + +### Create Bill +```bash + # Creates a bill invoice in the bank + exports["ps-banking"]:createBill({ + identifier = "HVZ84591", -- citizen id + description = "Utility Bill", + type = "Expense", + amount = 150.00, + }) +``` + +# Features +### Overview Tab: +Includes all essential features such as managing your bills, withdrawing all money, depositing cash, transferring money weekly via Simmy, viewing the latest transactions, and handling unpaid invoices. +![image](https://github.com/user-attachments/assets/7f22afa7-f4d8-427a-b9eb-42ef8b660801) + +### Bills +Enables you to send and receive bills. +![image](https://github.com/user-attachments/assets/6d51ffb3-992c-4032-986c-c033c694302a) + +### History +Displays a history of all transactions with options to delete specific transactions. +![image](https://github.com/user-attachments/assets/7beabc27-304a-402b-89e4-7d338140e498) + +### Stats and Reports +Provides a summary of all transactions made, including total amounts, current balance, and transaction trends by date and amount. +![image](https://github.com/user-attachments/assets/879f0a59-818d-4a4e-a204-c1be4fc22057) + +### Accounts +Allows you to create, add, or remove accounts, rename accounts, and perform deposits or withdrawals from specific accounts. +![image](https://github.com/user-attachments/assets/3ec1d109-1346-4148-aa17-f869972f2001) + +### ATM Access +Deposit and withdraw from ATMs. +![image](https://github.com/user-attachments/assets/49c135aa-295c-40ed-aa15-962a939e36ae) + +# Credits +* [BachPB](https://github.com/BachPB) diff --git a/resources/[tools]/ps-banking/client/main.lua b/resources/[tools]/ps-banking/client/main.lua new file mode 100644 index 000000000..9c78716d8 --- /dev/null +++ b/resources/[tools]/ps-banking/client/main.lua @@ -0,0 +1,363 @@ +local framework = nil + +RegisterNUICallback("ps-banking:client:getLocales", function(_, cb) + cb(lib.getLocales()) +end) + +RegisterNUICallback("ps-banking:client:hideUI", function(_, cb) + SetNuiFocus(false, false) + cb({}) +end) + +RegisterNUICallback("ps-banking:client:phoneOption", function(_, cb) + cb(Config.LBPhone) +end) + +-- Banks +RegisterNetEvent('ps-banking:client:open:bank') +AddEventHandler('ps-banking:client:open:bank', function() + Citizen.Wait(100) + SendNUIMessage({ + action = "openBank", + }) + SetNuiFocus(true, true) +end) + +Citizen.CreateThread(function() + local zoneId = 1 + for _, location in pairs(Config.BankLocations.Coords) do + local zoneName = "bank_" .. zoneId + if Config.TargetSystem == "interact" then + exports.interact:AddInteraction({ + coords = vec3(location.x, location.y, location.z), + distance = 2.5, + interactDst = 2.5, + id = locale("openBank").."interact", + name = locale("openBank").."interact:name", + options = { + { + label = 'Access Bank', + action = function() + SendNUIMessage({ + action = "openBank", + }) + SetNuiFocus(true, true) + end, + }, + } + }) + elseif Config.TargetSystem == "ox_target" then + exports.ox_target:addBoxZone({ + name = zoneName, + coords = vector3(location.x, location.y, location.z), + size = vec3(2, 2, 2), + options = { + { + event = "ps-banking:client:open:bank", + icon = "fas fa-credit-card", + label = locale("openBank"), + }, + }, + }) + else + exports["qb-target"]:AddBoxZone(zoneName, vector3(location.x, location.y, location.z), 1.5, 1.6, { + name = zoneName, + heading = 0.0, + debugPoly = false, + minZ = location.z - 1, + maxZ = location.z + 1, + }, { + options = { + { + icon = "fas fa-credit-card", + label = locale("openBank"), + action = function() + SendNUIMessage({ + action = "openBank", + }) + SetNuiFocus(true, true) + end, + }, + }, + distance = 2.5, + }) + zoneId = zoneId + 1 + end + + for i = 1, #Config.BankLocations.Coords do + local blip = AddBlipForCoord(vector3(Config.BankLocations.Coords[i].x, Config.BankLocations.Coords[i].y, + Config.BankLocations.Coords[i].z)) + SetBlipSprite(blip, Config.BankLocations.Blips.sprite) + SetBlipDisplay(blip, 4) + SetBlipScale(blip, Config.BankLocations.Blips.scale) + SetBlipColour(blip, Config.BankLocations.Blips.color) + SetBlipAsShortRange(blip, true) + BeginTextCommandSetBlipName("STRING") + AddTextComponentSubstringPlayerName(Config.BankLocations.Blips.name) + EndTextCommandSetBlipName(blip) + end + end +end) + +-- ATMs +RegisterNetEvent('ps-banking:client:open:atm') +AddEventHandler('ps-banking:client:open:atm', function() + Citizen.Wait(100) + ATM_Animation() + SendNUIMessage({ + action = "openATM", + }) + SetNuiFocus(true, true) +end) + +function ATM_Animation() + lib.playAnim(cache.ped, Config.ATM_Animation.dict, Config.ATM_Animation.name, 8.0, -8.0, -1, Config.ATM_Animation.flag, 0, false, 0, false) + Wait(GetAnimDuration(Config.ATM_Animation.dict,Config.ATM_Animation.name) * 1000) + ClearPedTasks(cache.ped) +end + +Citizen.CreateThread(function() + if Config.TargetSystem == "interact" then + for _, ATM_Models in ipairs(Config.ATM_Models) do + exports.interact:AddModelInteraction({ + model = ATM_Models, + offset = vec3(0.0, 0.0, 1.0), + name = locale("openATM") .. "interact:name", + id = locale("openATM") .. "interact", + distance = 2.5, + interactDst = 2.5, + options = { + { + label = locale("openATM"), + event = "ps-banking:client:open:atm", + }, + } + }) + end + elseif Config.TargetSystem == "ox_target" then + for _, ATM_Models in ipairs(Config.ATM_Models) do + exports.ox_target:addModel(ATM_Models, { + icon = "fas fa-solid fa-money-bills", + label = locale("openATM"), + event = "ps-banking:client:open:atm", + canInteract = function(_, distance) + return distance < 2.5 + end, + }) + end + else + exports["qb-target"]:AddTargetModel(Config.ATM_Models, { + options = { + { + icon = "fas fa-solid fa-money-bills", + label = locale("openATM"), + action = function() + ATM_Animation() + SendNUIMessage({ + action = "openATM", + }) + SetNuiFocus(true, true) + end, + }, + }, + distance = 2.5, + }) + end +end) + +if GetResourceState("es_extended") == "started" then + framework = "ESX" + ESX = exports["es_extended"]:getSharedObject() +elseif GetResourceState("qb-core") == "started" then + framework = "QBCore" + QBCore = exports["qb-core"]:GetCoreObject() +else + return error(locale("no_framework_found")) +end + +local function getPlayerAccounts() + local accounts = {} + if framework == "ESX" then + accounts = ESX.GetPlayerData().accounts + elseif framework == "QBCore" then + accounts = QBCore.Functions.GetPlayerData().money + end + return accounts +end + +RegisterNUICallback("ps-banking:client:getBills", function(data, cb) + local success = lib.callback.await("ps-banking:server:getBills", false) + cb(success) +end) + +RegisterNUICallback("ps-banking:client:payBill", function(data, cb) + local success = lib.callback.await("ps-banking:server:payBill", false, data.id) + cb(success) +end) + +RegisterNUICallback("ps-banking:client:getHistory", function(data, cb) + local success = lib.callback.await("ps-banking:server:getHistory", false) + cb(success) +end) + +RegisterNUICallback("ps-banking:client:deleteHistory", function(data, cb) + local success = lib.callback.await("ps-banking:server:deleteHistory", false) + cb(success) +end) + +RegisterNUICallback("ps-banking:client:payAllBills", function(data, cb) + local success = lib.callback.await("ps-banking:server:payAllBills", false) + cb(success) +end) + +RegisterNUICallback("ps-banking:client:getWeeklySummary", function(data, cb) + local summary = lib.callback.await("ps-banking:server:getWeeklySummary", false) + cb(summary) +end) + +RegisterNUICallback("ps-banking:client:transferMoney", function(data, cb) + local success, message = lib.callback.await("ps-banking:server:transferMoney", false, data) + cb({ + success = success, + message = message, + }) +end) + +RegisterNUICallback("ps-banking:client:getTransactionStats", function(data, cb) + local success = lib.callback.await("ps-banking:server:getTransactionStats", false) + cb(success) +end) + +if framework == "ESX" then + RegisterNetEvent("esx:setAccountMoney", function(account) + local moneyData = {} + for k, v in pairs(getPlayerAccounts()) do + table.insert(moneyData, { + amount = v.money, + name = v.name == "money" and "cash" or v.name, + }) + end + Wait(50) + TriggerServerEvent("ps-banking:server:logClient", account, moneyData) + end) +elseif framework == "QBCore" then + RegisterNetEvent("QBCore:Client:OnMoneyChange", function(moneyType, amount) + local moneyData = {} + for k, v in pairs(getPlayerAccounts()) do + table.insert(moneyData, { + name = k, + amount = v, + }) + end + Wait(50) + TriggerServerEvent("ps-banking:server:logClient", { + name = "bank", + moneyType = moneyType, + amount = amount, + }, moneyData) + end) +end + +RegisterNUICallback("ps-banking:client:createNewAccount", function(data, cb) + local success = lib.callback.await("ps-banking:server:createNewAccount", false, data.newAccount) + cb({ + success = success, + }) +end) + +RegisterNUICallback("ps-banking:client:getUser", function(data, cb) + local success = lib.callback.await("ps-banking:server:getUser", false) + cb(success) +end) + +RegisterNUICallback("ps-banking:client:getAccounts", function(data, cb) + local success = lib.callback.await("ps-banking:server:getAccounts", false) + cb(success) +end) + +RegisterNUICallback("ps-banking:client:deleteAccount", function(data, cb) + local success = lib.callback.await("ps-banking:server:deleteAccount", false, data.accountId) + cb({ + success = success, + }) +end) + +RegisterNUICallback("ps-banking:client:withdrawFromAccount", function(data, cb) + local success = lib.callback.await("ps-banking:server:withdrawFromAccount", false, data.accountId, data.amount) + cb({ + success = success, + }) +end) + +RegisterNUICallback("ps-banking:client:depositToAccount", function(data, cb) + local success = lib.callback.await("ps-banking:server:depositToAccount", false, data.accountId, data.amount) + cb({ + success = success, + }) +end) + +RegisterNUICallback("ps-banking:client:addUserToAccount", function(data, cb) + local success = lib.callback.await("ps-banking:server:addUserToAccount", false, data.accountId, data.userId) + cb(success) +end) + +RegisterNUICallback("ps-banking:client:removeUserFromAccount", function(data, cb) + local success = lib.callback.await("ps-banking:server:removeUserFromAccount", false, data.accountId, data.user) + cb({ + success = success, + }) +end) + +RegisterNUICallback("ps-banking:client:renameAccount", function(data, cb) + local success = lib.callback.await("ps-banking:server:renameAccount", false, data.id, data.newName) + cb({ + success = success, + }) +end) + +RegisterNUICallback("ps-banking:client:copyAccountNumber", function(data, cb) + lib.setClipboard(data.accountNumber) + cb(true) +end) + +RegisterNUICallback("ps-banking:client:ATMwithdraw", function(data, cb) + local success = lib.callback.await("ps-banking:server:ATMwithdraw", false, data.amount) + cb(success) +end) + +RegisterNUICallback("ps-banking:client:ATMdeposit", function(data, cb) + local success = lib.callback.await("ps-banking:server:ATMdeposit", false, data.amount) + cb(success) +end) + +RegisterNUICallback("ps-banking:client:getMoneyTypes", function(data, cb) + local moneyData = {} + + if framework == "ESX" then + for k, v in pairs(getPlayerAccounts()) do + table.insert(moneyData, { + amount = v.money, + name = v.name == "money" and "cash" or v.name, + }) + end + elseif framework == "QBCore" then + local PlayerData = QBCore.Functions.GetPlayerData() + for k, v in pairs(PlayerData.money) do + table.insert(moneyData, { + amount = v, + name = k, + }) + end + end + + --print(json.encode(moneyData)) + cb(moneyData) +end) + +RegisterNUICallback("ps-banking:client:getAmountPresets", function(_, cb) + cb(json.encode({ + withdrawAmounts = Config.PresetATM_Amounts.Amounts, + depositAmounts = Config.PresetATM_Amounts.Amounts, + grid = Config.PresetATM_Amounts.Grid, + })) +end) diff --git a/resources/[tools]/ps-banking/config.lua b/resources/[tools]/ps-banking/config.lua new file mode 100644 index 000000000..95e0c22c2 --- /dev/null +++ b/resources/[tools]/ps-banking/config.lua @@ -0,0 +1,51 @@ +lib.locale() +Config = {} +Config.LBPhone = false -- Does your server use lb-phone? +Config.TargetSystem = "qb-target" -- Change to your target script like ox_target, qb-target, Or use devyn's interact. + +Config.Currency = { + lang = "de", -- da-DK + currency = "USD", -- DKK +} + +Config.BankLocations = { + Coords = { + vector3(149.05, -1041.3, 29.37), + vector3(313.32, -280.03, 54.17), + vector3(-351.94, -50.72, 49.04), + vector3(-1212.68, -331.83, 37.78), + vector3(-2961.67, 482.31, 15.7), + vector3(1175.64, 2707.71, 38.09), + vector3(247.65, 223.87, 106.29), + vector3(-111.98, 6470.56, 31.63), + }, + Blips = { + name = "Bank", + sprite = 108, + color = 2, + scale = 0.55, + }, +} + +-- ATM stuff +Config.PresetATM_Amounts = { -- The preset amounts + Amounts = { + 2000, + 5000, + 10000, + }, + Grid = 3, -- How many there should be on each +} + +Config.ATM_Animation = { -- Anim when opening ATM + dict = "anim@amb@prop_human_atm@interior@male@enter", + name = "enter", + flag = 49, +} + +Config.ATM_Models = { + "prop_atm_01", + "prop_atm_02", + "prop_atm_03", + "prop_fleeca_atm", +} diff --git a/resources/[tools]/ps-banking/fxmanifest.lua b/resources/[tools]/ps-banking/fxmanifest.lua new file mode 100644 index 000000000..26af9d882 --- /dev/null +++ b/resources/[tools]/ps-banking/fxmanifest.lua @@ -0,0 +1,35 @@ +fx_version 'cerulean' +game 'gta5' + +name 'ps-banking' +author 'Project Sloth' +version '1.0.4' + +ui_page 'html/index.html' +-- ui_page 'http://localhost:5173' + +shared_scripts { + '@ox_lib/init.lua', + 'config.lua', +} + +client_scripts { + 'client/**/*', +} + +server_scripts { + '@oxmysql/lib/MySQL.lua', + 'server/**/*', +} + +files { + 'html/**/*', + 'locales/**/*', +} + +dependencies { + 'ox_lib', + 'oxmysql' +} + +lua54 'yes' diff --git a/resources/[tools]/ps-banking/html/index.css b/resources/[tools]/ps-banking/html/index.css new file mode 100644 index 000000000..8e6255ea6 --- /dev/null +++ b/resources/[tools]/ps-banking/html/index.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.-bottom-48{bottom:-12rem}.bottom-24{bottom:6rem}.bottom-44{bottom:11rem}.left-0{left:0}.left-3{left:.75rem}.left-4{left:1rem}.left-\[\.5px\]{left:.5px}.left-\[130px\]{left:130px}.left-\[15\%\]{left:15%}.left-\[240px\]{left:240px}.left-\[2px\]{left:2px}.right-16{right:4rem}.right-3{right:.75rem}.right-4{right:1rem}.right-\[12\%\]{right:12%}.right-\[22\%\]{right:22%}.top-0{top:0}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-3{top:.75rem}.top-4{top:1rem}.z-50{z-index:50}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-\[70px\]{margin-top:70px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-\[100px\]{height:100px}.h-\[200px\]{height:200px}.h-\[310px\]{height:310px}.h-\[400px\]{height:400px}.h-\[90\%\]{height:90%}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.w-28{width:7rem}.w-96{width:24rem}.w-\[1000px\]{width:1000px}.w-\[250px\]{width:250px}.w-\[280px\]{width:280px}.w-\[380px\]{width:380px}.w-\[60\%\]{width:60%}.w-\[80\%\]{width:80%}.w-\[90\%\]{width:90%}.w-\[95\%\]{width:95%}.w-\[97\%\]{width:97%}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.flex-none{flex:none}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-10{row-gap:2.5rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-dashed{border-style:dashed}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity))}.border-blue-200\/10{border-color:#bfdbfe1a}.border-blue-200\/5{border-color:#bfdbfe0d}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.border-blue-500\/50{border-color:#3b82f680}.border-gray-500\/20{border-color:#6b728033}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.border-gray-600\/20{border-color:#4b556333}.border-gray-600\/40{border-color:#4b556366}.border-gray-700\/50{border-color:#37415180}.border-green-200\/10{border-color:#bbf7d01a}.border-green-400{--tw-border-opacity: 1;border-color:rgb(74 222 128 / var(--tw-border-opacity))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.border-yellow-400{--tw-border-opacity: 1;border-color:rgb(250 204 21 / var(--tw-border-opacity))}.bg-\[\#1c2333\]{--tw-bg-opacity: 1;background-color:rgb(28 35 51 / var(--tw-bg-opacity))}.bg-\[\#283040\]{--tw-bg-opacity: 1;background-color:rgb(40 48 64 / var(--tw-bg-opacity))}.bg-\[\#334155\]{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.bg-blue-600\/10{background-color:#2563eb1a}.bg-gray-500\/40{background-color:#6b728066}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.bg-gray-700\/10{background-color:#3741511a}.bg-gray-700\/20{background-color:#37415133}.bg-gray-700\/50{background-color:#37415180}.bg-gray-700\/90{background-color:#374151e6}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}.bg-gray-800\/50{background-color:#1f293780}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity))}.bg-green-600\/10{background-color:#16a34a1a}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity))}.bg-yellow-600{--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity))}.bg-opacity-50{--tw-bg-opacity: .5}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-2{padding-bottom:.5rem}.pl-10{padding-left:2.5rem}.pl-4{padding-left:1rem}.pr-10{padding-right:2.5rem}.pr-12{padding-right:3rem}.pr-4{padding-right:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.text-\[\#f1f5f9\]{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity))}.text-blue-100{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity))}.text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity))}.text-blue-200\/50{color:#bfdbfe80}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity))}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity))}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.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}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.hover\:cursor-pointer:hover{cursor:pointer}.hover\:border-blue-400:hover{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity))}.hover\:border-blue-600:hover{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity))}.hover\:bg-blue-300\/20:hover{background-color:#93c5fd33}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity))}.hover\:bg-blue-700\/10:hover{background-color:#1d4ed81a}.hover\:bg-blue-800\/50:hover{background-color:#1e40af80}.hover\:bg-gray-500\/50:hover{background-color:#6b728080}.hover\:bg-gray-800\/80:hover{background-color:#1f2937cc}.hover\:bg-green-800\/50:hover{background-color:#16653480}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity))}.hover\:text-blue-300:hover{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity))}.hover\:text-blue-500\/50:hover{color:#3b82f680}.hover\:text-gray-200:hover{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.hover\:text-green-300:hover{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}.hover\:text-yellow-300:hover{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity))}.focus\:border-blue-400\/50:focus{border-color:#60a5fa80}.focus\:border-blue-600:focus{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity))}.focus\:border-green-400\/50:focus{border-color:#4ade8080}.focus\:border-green-600:focus{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity))}.focus\:border-yellow-600:focus{--tw-border-opacity: 1;border-color:rgb(202 138 4 / var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.peer:checked~.peer-checked\:block{display:block}.peer:checked~.peer-checked\:bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.peer:checked~.peer-checked\:shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer:checked~.peer-checked\:shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (min-width: 768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}} diff --git a/resources/[tools]/ps-banking/html/index.html b/resources/[tools]/ps-banking/html/index.html new file mode 100644 index 000000000..76de2708d --- /dev/null +++ b/resources/[tools]/ps-banking/html/index.html @@ -0,0 +1,50 @@ + + + + + + + Bach Banking + + + + + + + + + + + +
+ + + + diff --git a/resources/[tools]/ps-banking/html/index.js b/resources/[tools]/ps-banking/html/index.js new file mode 100644 index 000000000..c3810f7a9 --- /dev/null +++ b/resources/[tools]/ps-banking/html/index.js @@ -0,0 +1,24 @@ +var Zc=Object.defineProperty;var Jc=(i,t,e)=>t in i?Zc(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var bo=(i,t,e)=>(Jc(i,typeof t!="symbol"?t+"":t,e),e);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const r of o.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function e(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(s){if(s.ep)return;s.ep=!0;const o=e(s);fetch(s.href,o)}})();function re(){}const Qo=i=>i;function tu(i,t){for(const e in t)i[e]=t[e];return i}function Na(i){return i()}function Er(){return Object.create(null)}function Ut(i){i.forEach(Na)}function Wn(i){return typeof i=="function"}function Ee(i,t){return i!=i?t==t:i!==t||i&&typeof i=="object"||typeof i=="function"}function eu(i){return Object.keys(i).length===0}function On(i,...t){if(i==null){for(const n of t)n(void 0);return re}const e=i.subscribe(...t);return e.unsubscribe?()=>e.unsubscribe():e}function qt(i){let t;return On(i,e=>t=e)(),t}function it(i,t,e){i.$$.on_destroy.push(On(t,e))}function iu(i,t,e,n){if(i){const s=Wa(i,t,e,n);return i[0](s)}}function Wa(i,t,e,n){return i[1]&&n?tu(e.ctx.slice(),i[1](n(t))):e.ctx}function nu(i,t,e,n){if(i[2]&&n){const s=i[2](n(e));if(t.dirty===void 0)return s;if(typeof s=="object"){const o=[],r=Math.max(t.dirty.length,s.length);for(let l=0;l32){const t=[],e=i.ctx.length/32;for(let n=0;nwindow.performance.now():()=>Date.now(),Zo=ja?i=>requestAnimationFrame(i):re;const Ji=new Set;function Va(i){Ji.forEach(t=>{t.c(i)||(Ji.delete(t),t.f())}),Ji.size!==0&&Zo(Va)}function $a(i){let t;return Ji.size===0&&Zo(Va),{promise:new Promise(e=>{Ji.add(t={c:i,f:e})}),abort(){Ji.delete(t)}}}function u(i,t){i.appendChild(t)}function Ya(i){if(!i)return document;const t=i.getRootNode?i.getRootNode():i.ownerDocument;return t&&t.host?t:i.ownerDocument}function ru(i){const t=b("style");return t.textContent="/* empty */",lu(Ya(i),t),t.sheet}function lu(i,t){return u(i.head||i,t),t.sheet}function Q(i,t,e){i.insertBefore(t,e||null)}function G(i){i.parentNode&&i.parentNode.removeChild(i)}function Ss(i,t){for(let e=0;ei.removeEventListener(t,e,n)}function h(i,t,e){e==null?i.removeAttribute(t):i.getAttribute(t)!==e&&i.setAttribute(t,e)}function Ua(i){let t;return{p(...e){t=e,t.forEach(n=>i.push(n))},r(){t.forEach(e=>i.splice(i.indexOf(e),1))}}}function ge(i){return i===""?null:+i}function au(i){return Array.from(i.childNodes)}function z(i,t){t=""+t,i.data!==t&&(i.data=t)}function Ft(i,t){i.value=t??""}function _o(i,t,e,n){e==null?i.style.removeProperty(t):i.style.setProperty(t,e,n?"important":"")}function Fr(i,t,e){for(let n=0;n>>0}function fu(i,t){const e={stylesheet:ru(t),rules:{}};return As.set(i,e),e}function Xa(i,t,e,n,s,o,r,l=0){const a=16.666/n;let c=`{ +`;for(let y=0;y<=1;y+=a){const v=t+(e-t)*o(y);c+=y*100+`%{${r(v,1-v)}} +`}const d=c+`100% {${r(e,1-e)}} +}`,f=`__svelte_${du(d)}_${l}`,p=Ya(i),{stylesheet:g,rules:m}=As.get(p)||fu(p,i);m[f]||(m[f]=!0,g.insertRule(`@keyframes ${f} ${d}`,g.cssRules.length));const _=i.style.animation||"";return i.style.animation=`${_?`${_}, `:""}${f} ${n}ms linear ${s}ms 1 both`,Ps+=1,f}function Eo(i,t){const e=(i.style.animation||"").split(", "),n=e.filter(t?o=>o.indexOf(t)<0:o=>o.indexOf("__svelte")===-1),s=e.length-n.length;s&&(i.style.animation=n.join(", "),Ps-=s,Ps||hu())}function hu(){Zo(()=>{Ps||(As.forEach(i=>{const{ownerNode:t}=i.stylesheet;t&&G(t)}),As.clear())})}let Rn;function Dn(i){Rn=i}function qa(){if(!Rn)throw new Error("Function called outside component initialization");return Rn}function Di(i){qa().$$.on_mount.push(i)}function pu(i){qa().$$.on_destroy.push(i)}const Zi=[],Fo=[];let tn=[];const Ir=[],gu=Promise.resolve();let Io=!1;function mu(){Io||(Io=!0,gu.then(Ka))}function Wt(i){tn.push(i)}const yo=new Set;let qi=0;function Ka(){if(qi!==0)return;const i=Rn;do{try{for(;qii.indexOf(n)===-1?t.push(n):e.push(n)),e.forEach(n=>n()),tn=t}let pn;function Ga(){return pn||(pn=Promise.resolve(),pn.then(()=>{pn=null})),pn}function Cs(i,t,e){i.dispatchEvent(uu(`${t?"intro":"outro"}${e}`))}const ks=new Set;let vi;function le(){vi={r:0,c:[],p:vi}}function ae(){vi.r||Ut(vi.c),vi=vi.p}function rt(i,t){i&&i.i&&(ks.delete(i),i.i(t))}function pt(i,t,e,n){if(i&&i.o){if(ks.has(i))return;ks.add(i),vi.c.push(()=>{ks.delete(i),n&&(e&&i.d(1),n())}),i.o(t)}else n&&n()}const Qa={duration:0};function ee(i,t,e){const n={direction:"in"};let s=t(i,e,n),o=!1,r,l,a=0;function c(){r&&Eo(i,r)}function d(){const{delay:p=0,duration:g=300,easing:m=Qo,tick:_=re,css:y}=s||Qa;y&&(r=Xa(i,0,1,g,p,m,y,a++)),_(0,1);const v=Ha()+p,w=v+g;l&&l.abort(),o=!0,Wt(()=>Cs(i,!0,"start")),l=$a(M=>{if(o){if(M>=w)return _(1,0),Cs(i,!0,"end"),c(),o=!1;if(M>=v){const k=m((M-v)/g);_(k,1-k)}}return o})}let f=!1;return{start(){f||(f=!0,Eo(i),Wn(s)?(s=s(n),Ga().then(d)):d())},invalidate(){f=!1},end(){o&&(c(),o=!1)}}}function be(i,t,e){const n={direction:"out"};let s=t(i,e,n),o=!0,r;const l=vi;l.r+=1;let a;function c(){const{delay:d=0,duration:f=300,easing:p=Qo,tick:g=re,css:m}=s||Qa;m&&(r=Xa(i,1,0,f,d,p,m));const _=Ha()+d,y=_+f;Wt(()=>Cs(i,!1,"start")),"inert"in i&&(a=i.inert,i.inert=!0),$a(v=>{if(o){if(v>=y)return g(0,1),Cs(i,!1,"end"),--l.r||Ut(l.c),!1;if(v>=_){const w=p((v-_)/f);g(1-w,w)}}return o})}return Wn(s)?Ga().then(()=>{s=s(n),c()}):c(),{end(d){d&&"inert"in i&&(i.inert=a),d&&s.tick&&s.tick(1,0),o&&(r&&Eo(i,r),o=!1)}}}function oe(i){return(i==null?void 0:i.length)!==void 0?i:Array.from(i)}function yu(i,t){i.d(1),t.delete(i.key)}function jn(i,t){pt(i,1,1,()=>{t.delete(i.key)})}function an(i,t,e,n,s,o,r,l,a,c,d,f){let p=i.length,g=o.length,m=p;const _={};for(;m--;)_[i[m].key]=m;const y=[],v=new Map,w=new Map,M=[];for(m=g;m--;){const C=f(s,o,m),T=e(C);let E=r.get(T);E?n&&M.push(()=>E.p(C,t)):(E=c(T,C),E.c()),v.set(T,y[m]=E),T in _&&w.set(T,Math.abs(m-_[T]))}const k=new Set,S=new Set;function L(C){rt(C,1),C.m(l,d),r.set(C.key,C),d=C.first,g--}for(;p&&g;){const C=y[g-1],T=i[p-1],E=C.key,O=T.key;C===T?(d=C.first,p--,g--):v.has(O)?!r.has(E)||k.has(E)?L(C):S.has(O)?p--:w.get(E)>w.get(O)?(S.add(E),L(C)):(k.add(O),p--):(a(T,r),p--)}for(;p--;){const C=i[p];v.has(C.key)||a(C,r)}for(;g;)L(y[g-1]);return Ut(M),y}function oi(i){i&&i.c()}function ze(i,t,e){const{fragment:n,after_update:s}=i.$$;n&&n.m(t,e),Wt(()=>{const o=i.$$.on_mount.map(Na).filter(Wn);i.$$.on_destroy?i.$$.on_destroy.push(...o):Ut(o),i.$$.on_mount=[]}),s.forEach(Wt)}function Ne(i,t){const e=i.$$;e.fragment!==null&&(_u(e.after_update),Ut(e.on_destroy),e.fragment&&e.fragment.d(t),e.on_destroy=e.fragment=null,e.ctx=[])}function vu(i,t){i.$$.dirty[0]===-1&&(Zi.push(i),mu(),i.$$.dirty.fill(0)),i.$$.dirty[t/31|0]|=1<{const m=g.length?g[0]:p;return c.ctx&&s(c.ctx[f],c.ctx[f]=m)&&(!c.skip_bound&&c.bound[f]&&c.bound[f](m),d&&vu(i,f)),p}):[],c.update(),d=!0,Ut(c.before_update),c.fragment=n?n(c.ctx):!1,t.target){if(t.hydrate){const f=au(t.target);c.fragment&&c.fragment.l(f),f.forEach(G)}else c.fragment&&c.fragment.c();t.intro&&rt(i.$$.fragment),ze(i,t.target,t.anchor),Ka()}Dn(a)}class je{constructor(){bo(this,"$$");bo(this,"$$set")}$destroy(){Ne(this,1),this.$destroy=re}$on(t,e){if(!Wn(e))return re;const n=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return n.push(e),()=>{const s=n.indexOf(e);s!==-1&&n.splice(s,1)}}$set(t){this.$$set&&!eu(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const xu="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(xu);const xn=new Map,wu=i=>{const{action:t,data:e}=i.data,n=xn.get(t);n&&n.forEach(s=>s(e))};window.addEventListener("message",wu);function vo(i,t){const e=xn.get(i)||[];e.push(t),xn.set(i,e),pu(()=>{const n=xn.get(i)||[];xn.set(i,n.filter(s=>s!==t))})}async function Dt(i,t={}){const e={method:"post",headers:{"Content-Type":"application/json; charset=UTF-8"},body:JSON.stringify(t)},n=window.GetParentResourceName?window.GetParentResourceName():"nui-frame-app";return await(await fetch(`https://${n}/${i}`,e)).json()}const Ki=[];function ku(i,t){return{subscribe:ct(i,t).subscribe}}function ct(i,t=re){let e;const n=new Set;function s(l){if(Ee(i,l)&&(i=l,e)){const a=!Ki.length;for(const c of n)c[1](),Ki.push(c,i);if(a){for(let c=0;c{n.delete(c),n.size===0&&e&&(e(),e=null)}}return{set:s,update:o,subscribe:r}}function Mu(i,t,e){const n=!Array.isArray(i),s=n?[i]:i;if(!s.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const o=t.length<2;return ku(e,(r,l)=>{let a=!1;const c=[];let d=0,f=re;const p=()=>{if(d)return;f();const m=t(n?c[0]:c,r,l);o?r(m):f=Wn(m)?m:re},g=s.map((m,_)=>On(m,y=>{c[_]=y,d&=~(1<<_),a&&p()},()=>{d|=1<<_}));return a=!0,p(),function(){Ut(g),f(),a=!1}})}const wn=ct(!1);function Za(i){const t=i-1;return t*t*t+1}function Tt(i){return--i*i*i*i*i+1}function Ws(i,{delay:t=0,duration:e=400,easing:n=Qo}={}){const s=+getComputedStyle(i).opacity;return{delay:t,duration:e,easing:n,css:o=>`opacity: ${o*s}`}}function He(i,{delay:t=0,duration:e=400,easing:n=Za,axis:s="y"}={}){const o=getComputedStyle(i),r=+o.opacity,l=s==="y"?"height":"width",a=parseFloat(o[l]),c=s==="y"?["top","bottom"]:["left","right"],d=c.map(v=>`${v[0].toUpperCase()}${v.slice(1)}`),f=parseFloat(o[`padding${d[0]}`]),p=parseFloat(o[`padding${d[1]}`]),g=parseFloat(o[`margin${d[0]}`]),m=parseFloat(o[`margin${d[1]}`]),_=parseFloat(o[`border${d[0]}Width`]),y=parseFloat(o[`border${d[1]}Width`]);return{delay:t,duration:e,easing:n,css:v=>`overflow: hidden;opacity: ${Math.min(v*20,1)*r};${l}: ${v*a}px;padding-${c[0]}: ${v*f}px;padding-${c[1]}: ${v*p}px;margin-${c[0]}: ${v*g}px;margin-${c[1]}: ${v*m}px;border-${c[0]}-width: ${v*_}px;border-${c[1]}-width: ${v*y}px;`}}function Kt(i,{delay:t=0,duration:e=400,easing:n=Za,start:s=0,opacity:o=0}={}){const r=getComputedStyle(i),l=+r.opacity,a=r.transform==="none"?"":r.transform,c=1-s,d=l*(1-o);return{delay:t,duration:e,easing:n,css:(f,p)=>` + transform: ${a} scale(${1-c*p}); + opacity: ${l-d*p} + `}}const Bo=ct([]);let Br=0;function yt(i,t,e){Br+=1;const n={id:Br,message:i,title:t,icon:e};Bo.update(s=>[...s,n]),setTimeout(()=>{Bo.update(s=>s.filter(o=>o.id!==n.id))},2e3)}const Ze=ct(!0),Je=ct(!1),ti=ct(!1),ei=ct(!1),mi=ct(!1),bi=ct(!1),_i=ct(!1),en=ct(!1),fi=ct(500),ni=ct(1e4),Ai=ct({lang:"en",currency:"USD"}),Be=ct({atm:"ATM",cash:"Cash",bank_balance:"Bank Balance",deposit_amount:"Deposit Amount",withdraw_amount:"Withdraw Amount",submit:"Submit",close:"Close",overview:"Overview",bills:"Bills",history:"History",withdraw:"Withdraw",deposit:"Deposit",stats:"Stats",transactions:"Transactions",total:"Total",search_transactions:"Search transactions...",description:"Description",type:"Type",time_ago:"Time Ago",amount:"Amount",date:"Date",pay_invoice:"Pay Invoice",payment_completed:"Payment Completed",from:"From",delete_all_transactions:"Delete All Transactions",are_you_sure:"Are you sure?",delete_confirmation:"Are you sure you want to delete all your transactions? (Only do this if the menu lags!)",cancel:"Cancel",confirm:"Confirm",history_empty:"Your history is empty",all_history_deleted:"You have deleted all your history",error:"Error",success:"Success",new_cash:"New Cash",withdraw_success:"Withdrawal Successful",withdraw_error:"Your bank account does not have enough funds",withdraw_button:"WITHDRAW",new_bank:"New Bank Balance",current_cash:"Current Cash",deposit_success:"Deposit Successful",deposit_error:"You do not have enough cash",deposit_button:"DEPOSIT",total_balance:"Total Balance",quick_actions:"Quick Actions",transfer_money:"Transfer Money",easy_transfer:"Easily transfer money to people",transfer:"Transfer",pay_bills:"Pay Bills",pay_pending_bills:"Quickly pay your pending bills",pay:"Pay",withdraw_all_money:"Withdraw All Money",withdraw_all_from_account:"Withdraw all your money from your account",deposit_cash:"Deposit Cash",deposit_all_cash:"Deposit all your cash into your account",weekly_summary:"Weekly Summary",income:"Income",expenses:"Expenses",report:"Report",latest_transactions:"Latest Transactions",see_all:"SEE ALL",unpaid_bills:"Unpaid Invoices",no_unpaid_bills:"No unpaid invoices",confirm_pay_all_bills:"Are you sure you want to pay all your bills?",pay_all_bills:"Pay All Bills",pay_all_bills_success:"You have paid all your bills!",pay_all_bills_error:"You have no bills",payment_method:"Payment Method",phone_number:"Phone Number",id:"ID",id_or_phone_number:"ID or Phone Number",no_cash_on_you:"You have no cash on you",deposit_all_success:"All your cash has been deposited",no_money_on_account:"Your account is empty",withdraw_all_success:"You have withdrawn all your money from the account",invoices:"Invoices",statistics_reports:"Statistics and Reports",balance_trend:"Balance Trend",balance:"Balance",used:"Used",month:"Month",balance_dkk:"Balance",withdrawn:"You have withdrawn",deposited:"You have deposited",no_transactions:"No recent transactions",transactions_trend:"Transactions Trend",total_transactions:"Total Transactions",accounts:"Accounts",account_number_copied:"Account number copied to clipboard",new_user_to_account:"New user to account",server_id:"Server ID",add_user:"Add User",new_account_name:"New Account Name",new_name:"New Name",rename:"Rename",create_new_account:"Create New Account",account_holder:"Account Holder",initial_balance:"Initial Balance",create:"Create",delete_account:"Delete Account",are_you_sure_you_want_to_delete_this_account:"Are you sure you want to delete this account?",delete:"Delete",remove_user_from_account:"Remove User from Account",select_user:"Select User",remove:"Remove",withdraw_from_account:"Withdraw from Account",deposit_to_account:"Deposit to Account",removed_successfully:"removed Successfully",select_account_and_user:"Please select an account and a user",account_deleted_successfully:"Account deleted successfully",new_account_created_successfully:"New account created successfully",withdrew:"Withdrew",successfully:"Successfully",select_valid_account_and_amount:"Please select a valid account and amount",openBank:"Access Bank",openATM:"Access ATM",account_deletion_failed:"Account deletion failed",withdrawal_failed:"Withdrawal failed",deposit_failed:"Deposit failed",user_added_successfully:"added successfully",user_addition_failed:"Failed to add user",new_account_creation_failed:"Failed to create new account",account_renamed_successfully:"Account renamed successfully",account_rename_failed:"Account rename failed",rename_account:"Change name"}),zo=ct([]),Ls=ct([]);function zr(i,t,e){const n=i.slice();return n[26]=t[e],n}function Nr(i,t,e){const n=i.slice();return n[26]=t[e],n}function Wr(i){let t,e,n=i[2].withdraw+"",s,o,r=i[26].toLocaleString(i[3].lang,{style:"currency",currency:i[3].currency,minimumFractionDigits:0})+"",l,a,c;function d(){return i[16](i[26])}return{c(){t=b("button"),e=b("i"),s=I(n),o=x(),l=I(r),h(e,"class","fa-duotone fa-money-bill-wave text-lg"),h(t,"class","bg-blue-600/10 border border-blue-500 hover:bg-blue-800/50 text-white font-bold py-4 px-6 rounded-xl duration-500 cursor-pointer flex items-center justify-center gap-2")},m(f,p){Q(f,t,p),u(t,e),u(t,s),u(t,o),u(t,l),a||(c=tt(t,"click",d),a=!0)},p(f,p){i=f,p&4&&n!==(n=i[2].withdraw+"")&&z(s,n),p&136&&r!==(r=i[26].toLocaleString(i[3].lang,{style:"currency",currency:i[3].currency,minimumFractionDigits:0})+"")&&z(l,r)},d(f){f&&G(t),a=!1,c()}}}function jr(i){let t,e,n=i[2].deposit+"",s,o,r=i[26].toLocaleString(i[3].lang,{style:"currency",currency:i[3].currency,minimumFractionDigits:0})+"",l,a,c,d;function f(){return i[17](i[26])}return{c(){t=b("button"),e=b("i"),s=I(n),o=x(),l=I(r),a=x(),h(e,"class","fa-duotone fa-credit-card text-lg"),h(t,"class","bg-green-600/10 border border-green-500 hover:bg-green-800/50 text-white font-bold py-4 px-6 rounded-xl duration-500 cursor-pointer flex items-center justify-center gap-2")},m(p,g){Q(p,t,g),u(t,e),u(t,s),u(t,o),u(t,l),u(t,a),c||(d=tt(t,"click",f),c=!0)},p(p,g){i=p,g&4&&n!==(n=i[2].deposit+"")&&z(s,n),g&264&&r!==(r=i[26].toLocaleString(i[3].lang,{style:"currency",currency:i[3].currency,minimumFractionDigits:0})+"")&&z(l,r)},d(p){p&&G(t),c=!1,d()}}}function Su(i){let t,e,n,s,o,r=i[2].atm+"",l,a,c,d,f,p,g,m=i[2].cash+"",_,y,v,w=i[4].toLocaleString(i[3].lang,{style:"currency",currency:i[3].currency,minimumFractionDigits:0})+"",M,k,S,L,C,T=i[2].bank_balance+"",E,O,N,V=i[5].toLocaleString(i[3].lang,{style:"currency",currency:i[3].currency,minimumFractionDigits:0})+"",R,B,F,H,P,W,$,D,A,Y,X,K,Z=i[2].deposit_amount+"",J,st,et,vt,at,ut,U,j,lt=i[2].submit+"",kt,mt,Xt,jt,Jt,Et,gt,ft=i[2].withdraw_amount+"",Mt,Qt,dt,Ht,ue,de,De,Ae,ke=i[2].submit+"",_e,me,Pe,q,bt,Ct,_t,Zt,Lt,we=oe(i[7]),Ot=[];for(let nt=0;nt',h(o,"class","fa-duotone fa-atm text-blue-200 mr-2"),h(s,"class","text-4xl font-bold text-center text-blue-200 mb-6"),h(p,"class","fa-duotone fa-money-bill-wave text-md mr-2"),h(f,"class","text-2xl font-semibold text-blue-100 mb-2"),h(v,"class","text-4xl font-bold text-blue-400"),h(d,"class","bg-gray-700 p-6 rounded-2xl shadow-lg flex flex-col items-center justify-center"),h(C,"class","fa-duotone fa-vault text-md mr-2"),h(L,"class","text-2xl font-semibold text-blue-100 mb-2"),h(N,"class","text-4xl font-bold text-blue-400"),h(S,"class","bg-gray-700 p-6 rounded-2xl shadow-lg flex flex-col items-center justify-center"),h(c,"class","grid grid-cols-2 gap-6 mb-8"),h(F,"class","grid"),h(F,"style",P=`grid-template-columns: repeat(${i[6]}, minmax(0, 1fr)); gap: 10px;`),h(Y,"class","fa-duotone fa-money-check-edit text-xl text-green-400 mr-2"),h(K,"for","Deposit"),h(K,"class","text-lg font-semibold text-white"),h(A,"class","flex items-center mb-2"),h(et,"type","number"),h(et,"id","Deposit"),h(et,"class","w-full bg-gray-800 text-white font-bold pl-4 pr-4 py-3 rounded-lg border border-green-200/10 focus:outline-none focus:border-green-400/50 transition-colors duration-500 placeholder-gray-500"),h(et,"placeholder",vt=i[2].deposit_amount),h(U,"class","fa-duotone fa-piggy-bank text-lg"),h(ut,"class","mt-2 w-full bg-green-600/10 border border-green-500 hover:bg-green-800/50 text-white font-bold py-2 px-4 rounded-xl duration-500 cursor-pointer flex items-center justify-center gap-2"),h(D,"class","bg-gray-700 p-4 rounded-xl shadow-lg"),h(Jt,"class","fa-duotone fa-money-check-edit text-xl text-blue-400 mr-2"),h(gt,"for","Withdraw"),h(gt,"class","text-lg font-semibold text-white"),h(jt,"class","flex items-center mb-2"),h(dt,"type","number"),h(dt,"id","Withdraw"),h(dt,"class","w-full bg-gray-800 font-bold text-white pl-4 pr-4 py-3 rounded-lg border border-blue-200/10 focus:outline-none focus:border-blue-400/50 transition-colors duration-500 placeholder-gray-500"),h(dt,"placeholder",Ht=i[2].withdraw_amount),h(De,"class","fa-duotone fa-money-bill-wave text-lg"),h(de,"class","mt-2 w-full bg-blue-600/10 border border-blue-500 hover:bg-blue-800/50 text-white font-bold py-2 px-4 rounded-xl duration-500 cursor-pointer flex items-center justify-center gap-2"),h(Xt,"class","bg-gray-700 p-4 rounded-xl shadow-lg"),h($,"class","grid grid-cols-2 gap-4 mt-4"),h(q,"class","text-blue-200/50 hover:text-blue-500/50 font-bold py-2 px-4 rounded-xl duration-500 cursor-pointer flex items-center justify-center gap-2 text-gray-300 py-4 transition-all duration-500 rounded-xl hover:text-blue-300 duration-500 hover:cursor-pointer hover:bg-gray-800/80"),h(Pe,"class","absolute top-4 right-4 transform -translate-x-1/2 text-white"),h(n,"class","h-auto w-[60%] bg-gray-800 rounded-3xl p-8 shadow-2xl relative border border-blue-200/10"),h(e,"class","absolute inset-0 flex items-center justify-center"),h(t,"class","absolute w-screen h-screen flex items-center justify-center")},m(nt,zt){Q(nt,t,zt),u(t,e),u(e,n),u(n,s),u(s,o),u(s,l),u(n,a),u(n,c),u(c,d),u(d,f),u(f,p),u(f,g),u(f,_),u(d,y),u(d,v),u(v,M),u(c,k),u(c,S),u(S,L),u(L,C),u(L,E),u(S,O),u(S,N),u(N,R),u(n,B),u(n,F);for(let ht=0;ht{_t&&(Ct&&Ct.end(1),bt=ee(e,Kt,{duration:1e3,easing:Tt}),bt.start())}),_t=!0)},o(nt){bt&&bt.invalidate(),nt&&(Ct=be(e,Kt,{duration:1e3,easing:Tt})),_t=!1},d(nt){nt&&G(t),Ss(Ot,nt),Ss(Vt,nt),nt&&Ct&&Ct.end(),Zt=!1,Ut(Lt)}}}function Du(i,t,e){let n,s,o,r,l,a,c,d,f=re,p=()=>(f(),f=On(v,P=>e(9,d=P)),v),g,m=re,_=()=>(m(),m=On(y,P=>e(10,g=P)),y);it(i,Be,P=>e(2,n=P)),it(i,Ai,P=>e(3,s=P)),it(i,fi,P=>e(4,o=P)),it(i,ni,P=>e(5,r=P)),i.$$.on_destroy.push(()=>f()),i.$$.on_destroy.push(()=>m());let y=ct(0);_();let v=ct(0);p();let w=ct([]);it(i,w,P=>e(7,a=P));let M=ct([]);it(i,M,P=>e(8,c=P));let k=ct(3);it(i,k,P=>e(6,l=P));async function S(){try{const P=await Dt("ps-banking:client:getAmountPresets",{}),W=JSON.parse(P);w.set(W.withdrawAmounts),M.set(W.depositAmounts),k.set(W.grid)}catch(P){console.error(P)}}async function L(){try{const P=await Dt("ps-banking:client:getMoneyTypes",{}),W=P.find(D=>D.name==="bank"),$=P.find(D=>D.name==="cash");W&&ni.set(W.amount),$&&fi.set($.amount)}catch(P){console.error(P)}}async function C(P){try{await Dt("ps-banking:client:ATMwithdraw",{amount:P})?(yt(`${n.withdrawn} ${P.toLocaleString(s.lang,{style:"currency",currency:s.currency,minimumFractionDigits:0})}`,n.payment_completed,"coins"),await L()):yt(n.no_money_on_account,n.error,"credit-card")}catch(W){console.error(W)}}async function T(P){try{await Dt("ps-banking:client:ATMdeposit",{amount:P})?(yt(`${n.deposited} ${P.toLocaleString(s.lang,{style:"currency",currency:s.currency,minimumFractionDigits:0})}`,n.payment_completed,"coins"),await L()):yt(n.no_cash_on_you,n.error,"credit-card")}catch(W){console.error(W)}}async function E(){try{const P=await Dt("ps-banking:client:getLocales",{});Be.set(P)}catch(P){console.error(P)}}Di(()=>{S(),E(),L();const P=W=>{qt(en)&&["Escape"].includes(W.code)&&(Dt("ps-banking:client:hideUI"),en.set(!1))};return window.addEventListener("keydown",P),()=>window.removeEventListener("keydown",P)});const O=P=>{C(P)},N=P=>{T(P)};function V(){d=ge(this.value),v.set(d)}const R=()=>{T(qt(v))};function B(){g=ge(this.value),y.set(g)}const F=()=>{C(qt(y))},H=()=>{en.set(!1),Dt("ps-banking:client:hideUI")};return p(e(1,v=fi)),_(e(0,y=ni)),[y,v,n,s,o,r,l,a,c,d,g,w,M,k,C,T,O,N,V,R,B,F,H]}class Au extends je{constructor(t){super(),We(this,t,Du,Su,Ee,{})}}function Hr(i){let t;const e=i[3].default,n=iu(e,i,i[2],null);return{c(){n&&n.c()},m(s,o){n&&n.m(s,o),t=!0},p(s,o){n&&n.p&&(!t||o&4)&&su(n,e,s,s[2],t?nu(e,s[2],o,null):ou(s[2]),null)},i(s){t||(rt(n,s),t=!0)},o(s){pt(n,s),t=!1},d(s){n&&n.d(s)}}}function Vr(i){let t,e;return t=new Au({}),{c(){oi(t.$$.fragment)},m(n,s){ze(t,n,s),e=!0},i(n){e||(rt(t.$$.fragment,n),e=!0)},o(n){pt(t.$$.fragment,n),e=!1},d(n){Ne(t,n)}}}function Pu(i){let t,e,n,s=i[0]&&Hr(i),o=i[1]&&Vr();return{c(){t=b("main"),s&&s.c(),e=x(),o&&o.c()},m(r,l){Q(r,t,l),s&&s.m(t,null),u(t,e),o&&o.m(t,null),n=!0},p(r,[l]){r[0]?s?(s.p(r,l),l&1&&rt(s,1)):(s=Hr(r),s.c(),rt(s,1),s.m(t,e)):s&&(le(),pt(s,1,1,()=>{s=null}),ae()),r[1]?o?l&2&&rt(o,1):(o=Vr(),o.c(),rt(o,1),o.m(t,null)):o&&(le(),pt(o,1,1,()=>{o=null}),ae())},i(r){n||(rt(s),rt(o),n=!0)},o(r){pt(s),pt(o),n=!1},d(r){r&&G(t),s&&s.d(),o&&o.d()}}}function Cu(i,t,e){let n;it(i,en,l=>e(1,n=l));let{$$slots:s={},$$scope:o}=t,r;return vo("openATM",()=>{en.set(!0)}),wn.subscribe(l=>{e(0,r=l)}),vo("openBank",()=>{wn.set(!0)}),vo("hideGarageMenu",()=>{wn.set(!1)}),Di(()=>{const l=a=>{r&&["Escape"].includes(a.code)&&(Dt("ps-banking:client:hideUI"),wn.set(!1))};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)}),i.$$set=l=>{"$$scope"in l&&e(2,o=l.$$scope)},[r,n,o,s]}class Lu extends je{constructor(t){super(),We(this,t,Cu,Pu,Ee,{})}}/*! + * Chart.js v3.9.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + */function ri(){}const Tu=function(){let i=0;return function(){return i++}}();function Rt(i){return i===null||typeof i>"u"}function Yt(i){if(Array.isArray&&Array.isArray(i))return!0;const t=Object.prototype.toString.call(i);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function At(i){return i!==null&&Object.prototype.toString.call(i)==="[object Object]"}const se=i=>(typeof i=="number"||i instanceof Number)&&isFinite(+i);function Te(i,t){return se(i)?i:t}function xt(i,t){return typeof i>"u"?t:i}const Ou=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100:i/t,Ja=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100*t:+i;function $t(i,t,e){if(i&&typeof i.call=="function")return i.apply(e,t)}function Bt(i,t,e,n){let s,o,r;if(Yt(i))if(o=i.length,n)for(s=o-1;s>=0;s--)t.call(e,i[s],s);else for(s=0;si,x:i=>i.x,y:i=>i.y};function Mi(i,t){return($r[t]||($r[t]=Fu(t)))(i)}function Fu(i){const t=Iu(i);return e=>{for(const n of t){if(n==="")break;e=e&&e[n]}return e}}function Iu(i){const t=i.split("."),e=[];let n="";for(const s of t)n+=s,n.endsWith("\\")?n=n.slice(0,-1)+".":(e.push(n),n="");return e}function Jo(i){return i.charAt(0).toUpperCase()+i.slice(1)}const Re=i=>typeof i<"u",Si=i=>typeof i=="function",Yr=(i,t)=>{if(i.size!==t.size)return!1;for(const e of i)if(!t.has(e))return!1;return!0};function Bu(i){return i.type==="mouseup"||i.type==="click"||i.type==="contextmenu"}const Gt=Math.PI,Nt=2*Gt,zu=Nt+Gt,Rs=Number.POSITIVE_INFINITY,Nu=Gt/180,te=Gt/2,gn=Gt/4,Ur=Gt*2/3,Oe=Math.log10,si=Math.sign;function Xr(i){const t=Math.round(i);i=Pn(i,t,i/1e3)?t:i;const e=Math.pow(10,Math.floor(Oe(i))),n=i/e;return(n<=1?1:n<=2?2:n<=5?5:10)*e}function Wu(i){const t=[],e=Math.sqrt(i);let n;for(n=1;ns-o).pop(),t}function sn(i){return!isNaN(parseFloat(i))&&isFinite(i)}function Pn(i,t,e){return Math.abs(i-t)=i}function ec(i,t,e){let n,s,o;for(n=0,s=i.length;na&&c=Math.min(t,e)-n&&i<=Math.max(t,e)+n}function er(i,t,e){e=e||(r=>i[r]1;)o=s+n>>1,e(o)?s=o:n=o;return{lo:s,hi:n}}const di=(i,t,e,n)=>er(i,e,n?s=>i[s][t]<=e:s=>i[s][t]er(i,e,n=>i[n][t]>=e);function Yu(i,t,e){let n=0,s=i.length;for(;nn&&i[s-1]>e;)s--;return n>0||s{const n="_onData"+Jo(e),s=i[e];Object.defineProperty(i,e,{configurable:!0,enumerable:!1,value(...o){const r=s.apply(this,o);return i._chartjs.listeners.forEach(l=>{typeof l[n]=="function"&&l[n](...o)}),r}})})}function Kr(i,t){const e=i._chartjs;if(!e)return;const n=e.listeners,s=n.indexOf(t);s!==-1&&n.splice(s,1),!(n.length>0)&&(nc.forEach(o=>{delete i[o]}),delete i._chartjs)}function sc(i){const t=new Set;let e,n;for(e=0,n=i.length;e"u"?function(i){return i()}:window.requestAnimationFrame}();function rc(i,t,e){const n=e||(r=>Array.prototype.slice.call(r));let s=!1,o=[];return function(...r){o=n(r),s||(s=!0,oc.call(window,()=>{s=!1,i.apply(t,o)}))}}function Xu(i,t){let e;return function(...n){return t?(clearTimeout(e),e=setTimeout(i,t,n)):i.apply(this,n),t}}const ir=i=>i==="start"?"left":i==="end"?"right":"center",ye=(i,t,e)=>i==="start"?t:i==="end"?e:(t+e)/2,qu=(i,t,e,n)=>i===(n?"left":"right")?e:i==="center"?(t+e)/2:t;function lc(i,t,e){const n=t.length;let s=0,o=n;if(i._sorted){const{iScale:r,_parsed:l}=i,a=r.axis,{min:c,max:d,minDefined:f,maxDefined:p}=r.getUserBounds();f&&(s=pe(Math.min(di(l,r.axis,c).lo,e?n:di(t,a,r.getPixelForValue(c)).lo),0,n-1)),p?o=pe(Math.max(di(l,r.axis,d,!0).hi+1,e?0:di(t,a,r.getPixelForValue(d),!0).hi+1),s,n)-s:o=n-s}return{start:s,count:o}}function ac(i){const{xScale:t,yScale:e,_scaleRanges:n}=i,s={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!n)return i._scaleRanges=s,!0;const o=n.xmin!==t.min||n.xmax!==t.max||n.ymin!==e.min||n.ymax!==e.max;return Object.assign(n,s),o}const ds=i=>i===0||i===1,Gr=(i,t,e)=>-(Math.pow(2,10*(i-=1))*Math.sin((i-t)*Nt/e)),Qr=(i,t,e)=>Math.pow(2,-10*i)*Math.sin((i-t)*Nt/e)+1,Cn={linear:i=>i,easeInQuad:i=>i*i,easeOutQuad:i=>-i*(i-2),easeInOutQuad:i=>(i/=.5)<1?.5*i*i:-.5*(--i*(i-2)-1),easeInCubic:i=>i*i*i,easeOutCubic:i=>(i-=1)*i*i+1,easeInOutCubic:i=>(i/=.5)<1?.5*i*i*i:.5*((i-=2)*i*i+2),easeInQuart:i=>i*i*i*i,easeOutQuart:i=>-((i-=1)*i*i*i-1),easeInOutQuart:i=>(i/=.5)<1?.5*i*i*i*i:-.5*((i-=2)*i*i*i-2),easeInQuint:i=>i*i*i*i*i,easeOutQuint:i=>(i-=1)*i*i*i*i+1,easeInOutQuint:i=>(i/=.5)<1?.5*i*i*i*i*i:.5*((i-=2)*i*i*i*i+2),easeInSine:i=>-Math.cos(i*te)+1,easeOutSine:i=>Math.sin(i*te),easeInOutSine:i=>-.5*(Math.cos(Gt*i)-1),easeInExpo:i=>i===0?0:Math.pow(2,10*(i-1)),easeOutExpo:i=>i===1?1:-Math.pow(2,-10*i)+1,easeInOutExpo:i=>ds(i)?i:i<.5?.5*Math.pow(2,10*(i*2-1)):.5*(-Math.pow(2,-10*(i*2-1))+2),easeInCirc:i=>i>=1?i:-(Math.sqrt(1-i*i)-1),easeOutCirc:i=>Math.sqrt(1-(i-=1)*i),easeInOutCirc:i=>(i/=.5)<1?-.5*(Math.sqrt(1-i*i)-1):.5*(Math.sqrt(1-(i-=2)*i)+1),easeInElastic:i=>ds(i)?i:Gr(i,.075,.3),easeOutElastic:i=>ds(i)?i:Qr(i,.075,.3),easeInOutElastic(i){return ds(i)?i:i<.5?.5*Gr(i*2,.1125,.45):.5+.5*Qr(i*2-1,.1125,.45)},easeInBack(i){return i*i*((1.70158+1)*i-1.70158)},easeOutBack(i){return(i-=1)*i*((1.70158+1)*i+1.70158)+1},easeInOutBack(i){let t=1.70158;return(i/=.5)<1?.5*(i*i*(((t*=1.525)+1)*i-t)):.5*((i-=2)*i*(((t*=1.525)+1)*i+t)+2)},easeInBounce:i=>1-Cn.easeOutBounce(1-i),easeOutBounce(i){return i<1/2.75?7.5625*i*i:i<2/2.75?7.5625*(i-=1.5/2.75)*i+.75:i<2.5/2.75?7.5625*(i-=2.25/2.75)*i+.9375:7.5625*(i-=2.625/2.75)*i+.984375},easeInOutBounce:i=>i<.5?Cn.easeInBounce(i*2)*.5:Cn.easeOutBounce(i*2-1)*.5+.5};/*! + * @kurkle/color v0.2.1 + * https://github.com/kurkle/color#readme + * (c) 2022 Jukka Kurkela + * Released under the MIT License + */function Hn(i){return i+.5|0}const xi=(i,t,e)=>Math.max(Math.min(i,e),t);function kn(i){return xi(Hn(i*2.55),0,255)}function ki(i){return xi(Hn(i*255),0,255)}function ci(i){return xi(Hn(i/2.55)/100,0,1)}function Zr(i){return xi(Hn(i*100),0,100)}const Le={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Wo=[..."0123456789ABCDEF"],Ku=i=>Wo[i&15],Gu=i=>Wo[(i&240)>>4]+Wo[i&15],fs=i=>(i&240)>>4===(i&15),Qu=i=>fs(i.r)&&fs(i.g)&&fs(i.b)&&fs(i.a);function Zu(i){var t=i.length,e;return i[0]==="#"&&(t===4||t===5?e={r:255&Le[i[1]]*17,g:255&Le[i[2]]*17,b:255&Le[i[3]]*17,a:t===5?Le[i[4]]*17:255}:(t===7||t===9)&&(e={r:Le[i[1]]<<4|Le[i[2]],g:Le[i[3]]<<4|Le[i[4]],b:Le[i[5]]<<4|Le[i[6]],a:t===9?Le[i[7]]<<4|Le[i[8]]:255})),e}const Ju=(i,t)=>i<255?t(i):"";function td(i){var t=Qu(i)?Ku:Gu;return i?"#"+t(i.r)+t(i.g)+t(i.b)+Ju(i.a,t):void 0}const ed=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function cc(i,t,e){const n=t*Math.min(e,1-e),s=(o,r=(o+i/30)%12)=>e-n*Math.max(Math.min(r-3,9-r,1),-1);return[s(0),s(8),s(4)]}function id(i,t,e){const n=(s,o=(s+i/60)%6)=>e-e*t*Math.max(Math.min(o,4-o,1),0);return[n(5),n(3),n(1)]}function nd(i,t,e){const n=cc(i,1,.5);let s;for(t+e>1&&(s=1/(t+e),t*=s,e*=s),s=0;s<3;s++)n[s]*=1-t-e,n[s]+=t;return n}function sd(i,t,e,n,s){return i===s?(t-e)/n+(t.5?d/(2-o-r):d/(o+r),a=sd(e,n,s,d,o),a=a*60+.5),[a|0,c||0,l]}function sr(i,t,e,n){return(Array.isArray(t)?i(t[0],t[1],t[2]):i(t,e,n)).map(ki)}function or(i,t,e){return sr(cc,i,t,e)}function od(i,t,e){return sr(nd,i,t,e)}function rd(i,t,e){return sr(id,i,t,e)}function uc(i){return(i%360+360)%360}function ld(i){const t=ed.exec(i);let e=255,n;if(!t)return;t[5]!==n&&(e=t[6]?kn(+t[5]):ki(+t[5]));const s=uc(+t[2]),o=+t[3]/100,r=+t[4]/100;return t[1]==="hwb"?n=od(s,o,r):t[1]==="hsv"?n=rd(s,o,r):n=or(s,o,r),{r:n[0],g:n[1],b:n[2],a:e}}function ad(i,t){var e=nr(i);e[0]=uc(e[0]+t),e=or(e),i.r=e[0],i.g=e[1],i.b=e[2]}function cd(i){if(!i)return;const t=nr(i),e=t[0],n=Zr(t[1]),s=Zr(t[2]);return i.a<255?`hsla(${e}, ${n}%, ${s}%, ${ci(i.a)})`:`hsl(${e}, ${n}%, ${s}%)`}const Jr={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},tl={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function ud(){const i={},t=Object.keys(tl),e=Object.keys(Jr);let n,s,o,r,l;for(n=0;n>16&255,o>>8&255,o&255]}return i}let hs;function dd(i){hs||(hs=ud(),hs.transparent=[0,0,0,0]);const t=hs[i.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}const fd=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function hd(i){const t=fd.exec(i);let e=255,n,s,o;if(t){if(t[7]!==n){const r=+t[7];e=t[8]?kn(r):xi(r*255,0,255)}return n=+t[1],s=+t[3],o=+t[5],n=255&(t[2]?kn(n):xi(n,0,255)),s=255&(t[4]?kn(s):xi(s,0,255)),o=255&(t[6]?kn(o):xi(o,0,255)),{r:n,g:s,b:o,a:e}}}function pd(i){return i&&(i.a<255?`rgba(${i.r}, ${i.g}, ${i.b}, ${ci(i.a)})`:`rgb(${i.r}, ${i.g}, ${i.b})`)}const xo=i=>i<=.0031308?i*12.92:Math.pow(i,1/2.4)*1.055-.055,Gi=i=>i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4);function gd(i,t,e){const n=Gi(ci(i.r)),s=Gi(ci(i.g)),o=Gi(ci(i.b));return{r:ki(xo(n+e*(Gi(ci(t.r))-n))),g:ki(xo(s+e*(Gi(ci(t.g))-s))),b:ki(xo(o+e*(Gi(ci(t.b))-o))),a:i.a+e*(t.a-i.a)}}function ps(i,t,e){if(i){let n=nr(i);n[t]=Math.max(0,Math.min(n[t]+n[t]*e,t===0?360:1)),n=or(n),i.r=n[0],i.g=n[1],i.b=n[2]}}function dc(i,t){return i&&Object.assign(t||{},i)}function el(i){var t={r:0,g:0,b:0,a:255};return Array.isArray(i)?i.length>=3&&(t={r:i[0],g:i[1],b:i[2],a:255},i.length>3&&(t.a=ki(i[3]))):(t=dc(i,{r:0,g:0,b:0,a:1}),t.a=ki(t.a)),t}function md(i){return i.charAt(0)==="r"?hd(i):ld(i)}class Es{constructor(t){if(t instanceof Es)return t;const e=typeof t;let n;e==="object"?n=el(t):e==="string"&&(n=Zu(t)||dd(t)||md(t)),this._rgb=n,this._valid=!!n}get valid(){return this._valid}get rgb(){var t=dc(this._rgb);return t&&(t.a=ci(t.a)),t}set rgb(t){this._rgb=el(t)}rgbString(){return this._valid?pd(this._rgb):void 0}hexString(){return this._valid?td(this._rgb):void 0}hslString(){return this._valid?cd(this._rgb):void 0}mix(t,e){if(t){const n=this.rgb,s=t.rgb;let o;const r=e===o?.5:e,l=2*r-1,a=n.a-s.a,c=((l*a===-1?l:(l+a)/(1+l*a))+1)/2;o=1-c,n.r=255&c*n.r+o*s.r+.5,n.g=255&c*n.g+o*s.g+.5,n.b=255&c*n.b+o*s.b+.5,n.a=r*n.a+(1-r)*s.a,this.rgb=n}return this}interpolate(t,e){return t&&(this._rgb=gd(this._rgb,t._rgb,e)),this}clone(){return new Es(this.rgb)}alpha(t){return this._rgb.a=ki(t),this}clearer(t){const e=this._rgb;return e.a*=1-t,this}greyscale(){const t=this._rgb,e=Hn(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){const e=this._rgb;return e.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return ps(this._rgb,2,t),this}darken(t){return ps(this._rgb,2,-t),this}saturate(t){return ps(this._rgb,1,t),this}desaturate(t){return ps(this._rgb,1,-t),this}rotate(t){return ad(this._rgb,t),this}}function fc(i){return new Es(i)}function hc(i){if(i&&typeof i=="object"){const t=i.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function il(i){return hc(i)?i:fc(i)}function wo(i){return hc(i)?i:fc(i).saturate(.5).darken(.1).hexString()}const Ii=Object.create(null),jo=Object.create(null);function Ln(i,t){if(!t)return i;const e=t.split(".");for(let n=0,s=e.length;ne.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,n)=>wo(n.backgroundColor),this.hoverBorderColor=(e,n)=>wo(n.borderColor),this.hoverColor=(e,n)=>wo(n.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return ko(this,t,e)}get(t){return Ln(this,t)}describe(t,e){return ko(jo,t,e)}override(t,e){return ko(Ii,t,e)}route(t,e,n,s){const o=Ln(this,t),r=Ln(this,n),l="_"+e;Object.defineProperties(o,{[l]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){const a=this[l],c=r[s];return At(a)?Object.assign({},c,a):xt(a,c)},set(a){this[l]=a}}})}}var Pt=new bd({_scriptable:i=>!i.startsWith("on"),_indexable:i=>i!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function _d(i){return!i||Rt(i.size)||Rt(i.family)?null:(i.style?i.style+" ":"")+(i.weight?i.weight+" ":"")+i.size+"px "+i.family}function Fs(i,t,e,n,s){let o=t[s];return o||(o=t[s]=i.measureText(s).width,e.push(s)),o>n&&(n=o),n}function yd(i,t,e,n){n=n||{};let s=n.data=n.data||{},o=n.garbageCollect=n.garbageCollect||[];n.font!==t&&(s=n.data={},o=n.garbageCollect=[],n.font=t),i.save(),i.font=t;let r=0;const l=e.length;let a,c,d,f,p;for(a=0;ae.length){for(a=0;a0&&i.stroke()}}function In(i,t,e){return e=e||.5,!t||i&&i.x>t.left-e&&i.xt.top-e&&i.y0&&o.strokeColor!=="";let a,c;for(i.save(),i.font=s.string,wd(i,o),a=0;a+i||0;function rr(i,t){const e={},n=At(t),s=n?Object.keys(t):t,o=At(i)?n?r=>xt(i[r],i[t[r]]):r=>i[r]:()=>i;for(const r of s)e[r]=Ad(o(r));return e}function gc(i){return rr(i,{top:"y",right:"x",bottom:"y",left:"x"})}function Ei(i){return rr(i,["topLeft","topRight","bottomLeft","bottomRight"])}function xe(i){const t=gc(i);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function ce(i,t){i=i||{},t=t||Pt.font;let e=xt(i.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let n=xt(i.style,t.style);n&&!(""+n).match(Sd)&&(console.warn('Invalid font style specified: "'+n+'"'),n="");const s={family:xt(i.family,t.family),lineHeight:Dd(xt(i.lineHeight,t.lineHeight),e),size:e,style:n,weight:xt(i.weight,t.weight),string:""};return s.string=_d(s),s}function Mn(i,t,e,n){let s=!0,o,r,l;for(o=0,r=i.length;oe&&l===0?0:l+a;return{min:r(n,-Math.abs(o)),max:r(s,o)}}function Pi(i,t){return Object.assign(Object.create(i),t)}function lr(i,t=[""],e=i,n,s=()=>i[0]){Re(n)||(n=yc("_fallback",i));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:i,_rootScopes:e,_fallback:n,_getTarget:s,override:r=>lr([r,...i],t,e,n)};return new Proxy(o,{deleteProperty(r,l){return delete r[l],delete r._keys,delete i[0][l],!0},get(r,l){return bc(r,l,()=>Id(l,t,i,r))},getOwnPropertyDescriptor(r,l){return Reflect.getOwnPropertyDescriptor(r._scopes[0],l)},getPrototypeOf(){return Reflect.getPrototypeOf(i[0])},has(r,l){return ol(r).includes(l)},ownKeys(r){return ol(r)},set(r,l,a){const c=r._storage||(r._storage=s());return r[l]=c[l]=a,delete r._keys,!0}})}function on(i,t,e,n){const s={_cacheable:!1,_proxy:i,_context:t,_subProxy:e,_stack:new Set,_descriptors:mc(i,n),setContext:o=>on(i,o,e,n),override:o=>on(i.override(o),t,e,n)};return new Proxy(s,{deleteProperty(o,r){return delete o[r],delete i[r],!0},get(o,r,l){return bc(o,r,()=>Ld(o,r,l))},getOwnPropertyDescriptor(o,r){return o._descriptors.allKeys?Reflect.has(i,r)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(i,r)},getPrototypeOf(){return Reflect.getPrototypeOf(i)},has(o,r){return Reflect.has(i,r)},ownKeys(){return Reflect.ownKeys(i)},set(o,r,l){return i[r]=l,delete o[r],!0}})}function mc(i,t={scriptable:!0,indexable:!0}){const{_scriptable:e=t.scriptable,_indexable:n=t.indexable,_allKeys:s=t.allKeys}=i;return{allKeys:s,scriptable:e,indexable:n,isScriptable:Si(e)?e:()=>e,isIndexable:Si(n)?n:()=>n}}const Cd=(i,t)=>i?i+Jo(t):t,ar=(i,t)=>At(t)&&i!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function bc(i,t,e){if(Object.prototype.hasOwnProperty.call(i,t))return i[t];const n=e();return i[t]=n,n}function Ld(i,t,e){const{_proxy:n,_context:s,_subProxy:o,_descriptors:r}=i;let l=n[t];return Si(l)&&r.isScriptable(t)&&(l=Td(t,l,i,e)),Yt(l)&&l.length&&(l=Od(t,l,i,r.isIndexable)),ar(t,l)&&(l=on(l,s,o&&o[t],r)),l}function Td(i,t,e,n){const{_proxy:s,_context:o,_subProxy:r,_stack:l}=e;if(l.has(i))throw new Error("Recursion detected: "+Array.from(l).join("->")+"->"+i);return l.add(i),t=t(o,r||n),l.delete(i),ar(i,t)&&(t=cr(s._scopes,s,i,t)),t}function Od(i,t,e,n){const{_proxy:s,_context:o,_subProxy:r,_descriptors:l}=e;if(Re(o.index)&&n(i))t=t[o.index%t.length];else if(At(t[0])){const a=t,c=s._scopes.filter(d=>d!==a);t=[];for(const d of a){const f=cr(c,s,i,d);t.push(on(f,o,r&&r[i],l))}}return t}function _c(i,t,e){return Si(i)?i(t,e):i}const Rd=(i,t)=>i===!0?t:typeof i=="string"?Mi(t,i):void 0;function Ed(i,t,e,n,s){for(const o of t){const r=Rd(e,o);if(r){i.add(r);const l=_c(r._fallback,e,s);if(Re(l)&&l!==e&&l!==n)return l}else if(r===!1&&Re(n)&&e!==n)return null}return!1}function cr(i,t,e,n){const s=t._rootScopes,o=_c(t._fallback,e,n),r=[...i,...s],l=new Set;l.add(n);let a=sl(l,r,e,o||e,n);return a===null||Re(o)&&o!==e&&(a=sl(l,r,o,a,n),a===null)?!1:lr(Array.from(l),[""],s,o,()=>Fd(t,e,n))}function sl(i,t,e,n,s){for(;e;)e=Ed(i,t,e,n,s);return e}function Fd(i,t,e){const n=i._getTarget();t in n||(n[t]={});const s=n[t];return Yt(s)&&At(e)?e:s}function Id(i,t,e,n){let s;for(const o of t)if(s=yc(Cd(o,i),e),Re(s))return ar(i,s)?cr(e,n,i,s):s}function yc(i,t){for(const e of t){if(!e)continue;const n=e[i];if(Re(n))return n}}function ol(i){let t=i._keys;return t||(t=i._keys=Bd(i._scopes)),t}function Bd(i){const t=new Set;for(const e of i)for(const n of Object.keys(e).filter(s=>!s.startsWith("_")))t.add(n);return Array.from(t)}function vc(i,t,e,n){const{iScale:s}=i,{key:o="r"}=this._parsing,r=new Array(n);let l,a,c,d;for(l=0,a=n;lti==="x"?"y":"x";function Nd(i,t,e,n){const s=i.skip?t:i,o=t,r=e.skip?t:e,l=No(o,s),a=No(r,o);let c=l/(l+a),d=a/(l+a);c=isNaN(c)?0:c,d=isNaN(d)?0:d;const f=n*c,p=n*d;return{previous:{x:o.x-f*(r.x-s.x),y:o.y-f*(r.y-s.y)},next:{x:o.x+p*(r.x-s.x),y:o.y+p*(r.y-s.y)}}}function Wd(i,t,e){const n=i.length;let s,o,r,l,a,c=rn(i,0);for(let d=0;d!c.skip)),t.cubicInterpolationMode==="monotone")Hd(i,s);else{let c=n?i[i.length-1]:i[0];for(o=0,r=i.length;owindow.getComputedStyle(i,null);function Yd(i,t){return Vs(i).getPropertyValue(t)}const Ud=["top","right","bottom","left"];function Fi(i,t,e){const n={};e=e?"-"+e:"";for(let s=0;s<4;s++){const o=Ud[s];n[o]=parseFloat(i[t+"-"+o+e])||0}return n.width=n.left+n.right,n.height=n.top+n.bottom,n}const Xd=(i,t,e)=>(i>0||t>0)&&(!e||!e.shadowRoot);function qd(i,t){const e=i.touches,n=e&&e.length?e[0]:i,{offsetX:s,offsetY:o}=n;let r=!1,l,a;if(Xd(s,o,i.target))l=s,a=o;else{const c=t.getBoundingClientRect();l=n.clientX-c.left,a=n.clientY-c.top,r=!0}return{x:l,y:a,box:r}}function Oi(i,t){if("native"in i)return i;const{canvas:e,currentDevicePixelRatio:n}=t,s=Vs(e),o=s.boxSizing==="border-box",r=Fi(s,"padding"),l=Fi(s,"border","width"),{x:a,y:c,box:d}=qd(i,e),f=r.left+(d&&l.left),p=r.top+(d&&l.top);let{width:g,height:m}=t;return o&&(g-=r.width+l.width,m-=r.height+l.height),{x:Math.round((a-f)/g*e.width/n),y:Math.round((c-p)/m*e.height/n)}}function Kd(i,t,e){let n,s;if(t===void 0||e===void 0){const o=ur(i);if(!o)t=i.clientWidth,e=i.clientHeight;else{const r=o.getBoundingClientRect(),l=Vs(o),a=Fi(l,"border","width"),c=Fi(l,"padding");t=r.width-c.width-a.width,e=r.height-c.height-a.height,n=Is(l.maxWidth,o,"clientWidth"),s=Is(l.maxHeight,o,"clientHeight")}}return{width:t,height:e,maxWidth:n||Rs,maxHeight:s||Rs}}const Mo=i=>Math.round(i*10)/10;function Gd(i,t,e,n){const s=Vs(i),o=Fi(s,"margin"),r=Is(s.maxWidth,i,"clientWidth")||Rs,l=Is(s.maxHeight,i,"clientHeight")||Rs,a=Kd(i,t,e);let{width:c,height:d}=a;if(s.boxSizing==="content-box"){const f=Fi(s,"border","width"),p=Fi(s,"padding");c-=p.width+f.width,d-=p.height+f.height}return c=Math.max(0,c-o.width),d=Math.max(0,n?Math.floor(c/n):d-o.height),c=Mo(Math.min(c,r,a.maxWidth)),d=Mo(Math.min(d,l,a.maxHeight)),c&&!d&&(d=Mo(c/2)),{width:c,height:d}}function rl(i,t,e){const n=t||1,s=Math.floor(i.height*n),o=Math.floor(i.width*n);i.height=s/n,i.width=o/n;const r=i.canvas;return r.style&&(e||!r.style.height&&!r.style.width)&&(r.style.height=`${i.height}px`,r.style.width=`${i.width}px`),i.currentDevicePixelRatio!==n||r.height!==s||r.width!==o?(i.currentDevicePixelRatio=n,r.height=s,r.width=o,i.ctx.setTransform(n,0,0,n,0,0),!0):!1}const Qd=function(){let i=!1;try{const t={get passive(){return i=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch{}return i}();function ll(i,t){const e=Yd(i,t),n=e&&e.match(/^(\d+)(\.\d+)?px$/);return n?+n[1]:void 0}function Ri(i,t,e,n){return{x:i.x+e*(t.x-i.x),y:i.y+e*(t.y-i.y)}}function Zd(i,t,e,n){return{x:i.x+e*(t.x-i.x),y:n==="middle"?e<.5?i.y:t.y:n==="after"?e<1?i.y:t.y:e>0?t.y:i.y}}function Jd(i,t,e,n){const s={x:i.cp2x,y:i.cp2y},o={x:t.cp1x,y:t.cp1y},r=Ri(i,s,e),l=Ri(s,o,e),a=Ri(o,t,e),c=Ri(r,l,e),d=Ri(l,a,e);return Ri(c,d,e)}const al=new Map;function tf(i,t){t=t||{};const e=i+JSON.stringify(t);let n=al.get(e);return n||(n=new Intl.NumberFormat(i,t),al.set(e,n)),n}function Vn(i,t,e){return tf(t,e).format(i)}const ef=function(i,t){return{x(e){return i+i+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,n){return e-n},leftForLtr(e,n){return e-n}}},nf=function(){return{x(i){return i},setWidth(i){},textAlign(i){return i},xPlus(i,t){return i+t},leftForLtr(i,t){return i}}};function nn(i,t,e){return i?ef(t,e):nf()}function kc(i,t){let e,n;(t==="ltr"||t==="rtl")&&(e=i.canvas.style,n=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),i.prevTextDirection=n)}function Mc(i,t){t!==void 0&&(delete i.prevTextDirection,i.canvas.style.setProperty("direction",t[0],t[1]))}function Sc(i){return i==="angle"?{between:Fn,compare:Hu,normalize:Ce}:{between:ui,compare:(t,e)=>t-e,normalize:t=>t}}function cl({start:i,end:t,count:e,loop:n,style:s}){return{start:i%e,end:t%e,loop:n&&(t-i+1)%e===0,style:s}}function sf(i,t,e){const{property:n,start:s,end:o}=e,{between:r,normalize:l}=Sc(n),a=t.length;let{start:c,end:d,loop:f}=i,p,g;if(f){for(c+=a,d+=a,p=0,g=a;pa(s,M,v)&&l(s,M)!==0,S=()=>l(o,v)===0||a(o,M,v),L=()=>_||k(),C=()=>!_||S();for(let T=d,E=d;T<=f;++T)w=t[T%r],!w.skip&&(v=c(w[n]),v!==M&&(_=a(v,s,o),y===null&&L()&&(y=l(v,s)===0?T:E),y!==null&&C()&&(m.push(cl({start:y,end:T,loop:p,count:r,style:g})),y=null),E=T,M=v));return y!==null&&m.push(cl({start:y,end:f,loop:p,count:r,style:g})),m}function Ac(i,t){const e=[],n=i.segments;for(let s=0;ss&&i[o%t].skip;)o--;return o%=t,{start:s,end:o}}function rf(i,t,e,n){const s=i.length,o=[];let r=t,l=i[t],a;for(a=t+1;a<=e;++a){const c=i[a%s];c.skip||c.stop?l.skip||(n=!1,o.push({start:t%s,end:(a-1)%s,loop:n}),t=r=c.stop?a:null):(r=a,l.skip&&(t=a)),l=c}return r!==null&&o.push({start:t%s,end:r%s,loop:n}),o}function lf(i,t){const e=i.points,n=i.options.spanGaps,s=e.length;if(!s)return[];const o=!!i._loop,{start:r,end:l}=of(e,s,o,n);if(n===!0)return ul(i,[{start:r,end:l,loop:o}],e,t);const a=ll({chart:t,initial:e.initial,numSteps:r,currentStep:Math.min(n-e.start,r)}))}_refresh(){this._request||(this._running=!0,this._request=oc.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((n,s)=>{if(!n.running||!n.items.length)return;const o=n.items;let r=o.length-1,l=!1,a;for(;r>=0;--r)a=o[r],a._active?(a._total>n.duration&&(n.duration=a._total),a.tick(t),l=!0):(o[r]=o[o.length-1],o.pop());l&&(s.draw(),this._notify(s,n,t,"progress")),o.length||(n.running=!1,this._notify(s,n,t,"complete"),n.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){const e=this._charts;let n=e.get(t);return n||(n={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,n)),n}listen(t,e,n){this._getAnims(t).listeners[e].push(n)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((n,s)=>Math.max(n,s._duration),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const n=e.items;let s=n.length-1;for(;s>=0;--s)n[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var li=new uf;const fl="transparent",df={boolean(i,t,e){return e>.5?t:i},color(i,t,e){const n=il(i||fl),s=n.valid&&il(t||fl);return s&&s.valid?s.mix(n,e).hexString():t},number(i,t,e){return i+(t-i)*e}};class ff{constructor(t,e,n,s){const o=e[n];s=Mn([t.to,s,o,t.from]);const r=Mn([t.from,o,s]);this._active=!0,this._fn=t.fn||df[t.type||typeof r],this._easing=Cn[t.easing]||Cn.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=n,this._from=r,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,n){if(this._active){this._notify(!1);const s=this._target[this._prop],o=n-this._start,r=this._duration-o;this._start=n,this._duration=Math.floor(Math.max(r,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=Mn([t.to,e,s,t.from]),this._from=Mn([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,n=this._duration,s=this._prop,o=this._from,r=this._loop,l=this._to;let a;if(this._active=o!==l&&(r||e1?2-a:a,a=this._easing(Math.min(1,Math.max(0,a))),this._target[s]=this._fn(o,l,a)}wait(){const t=this._promises||(this._promises=[]);return new Promise((e,n)=>{t.push({res:e,rej:n})})}_notify(t){const e=t?"res":"rej",n=this._promises||[];for(let s=0;si!=="onProgress"&&i!=="onComplete"&&i!=="fn"});Pt.set("animations",{colors:{type:"color",properties:pf},numbers:{type:"number",properties:hf}});Pt.describe("animations",{_fallback:"animation"});Pt.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:i=>i|0}}}});class Pc{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!At(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach(n=>{const s=t[n];if(!At(s))return;const o={};for(const r of gf)o[r]=s[r];(Yt(s.properties)&&s.properties||[n]).forEach(r=>{(r===n||!e.has(r))&&e.set(r,o)})})}_animateOptions(t,e){const n=e.options,s=bf(t,n);if(!s)return[];const o=this._createAnimations(s,n);return n.$shared&&mf(t.options.$animations,n).then(()=>{t.options=n},()=>{}),o}_createAnimations(t,e){const n=this._properties,s=[],o=t.$animations||(t.$animations={}),r=Object.keys(e),l=Date.now();let a;for(a=r.length-1;a>=0;--a){const c=r[a];if(c.charAt(0)==="$")continue;if(c==="options"){s.push(...this._animateOptions(t,e));continue}const d=e[c];let f=o[c];const p=n.get(c);if(f)if(p&&f.active()){f.update(p,d,l);continue}else f.cancel();if(!p||!p.duration){t[c]=d;continue}o[c]=f=new ff(p,t,c,d),s.push(f)}return s}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}const n=this._createAnimations(t,e);if(n.length)return li.add(this._chart,n),!0}}function mf(i,t){const e=[],n=Object.keys(t);for(let s=0;s0||!e&&o<0)return s.index}return null}function bl(i,t){const{chart:e,_cachedMeta:n}=i,s=e._stacks||(e._stacks={}),{iScale:o,vScale:r,index:l}=n,a=o.axis,c=r.axis,d=xf(o,r,n),f=t.length;let p;for(let g=0;ge[n].axis===t).shift()}function Mf(i,t){return Pi(i,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Sf(i,t,e){return Pi(i,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function mn(i,t){const e=i.controller.index,n=i.vScale&&i.vScale.axis;if(n){t=t||i._parsed;for(const s of t){const o=s._stacks;if(!o||o[n]===void 0||o[n][e]===void 0)return;delete o[n][e]}}}const Do=i=>i==="reset"||i==="none",_l=(i,t)=>t?i:Object.assign({},i),Df=(i,t,e)=>i&&!t.hidden&&t._stacked&&{keys:Cc(e,!0),values:null};class Ve{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=gl(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&mn(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,n=this.getDataset(),s=(f,p,g,m)=>f==="x"?p:f==="r"?m:g,o=e.xAxisID=xt(n.xAxisID,So(t,"x")),r=e.yAxisID=xt(n.yAxisID,So(t,"y")),l=e.rAxisID=xt(n.rAxisID,So(t,"r")),a=e.indexAxis,c=e.iAxisID=s(a,o,r,l),d=e.vAxisID=s(a,r,o,l);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(r),e.rScale=this.getScaleForId(l),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(d)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&Kr(this._data,this),t._stacked&&mn(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),n=this._data;if(At(e))this._data=vf(e);else if(n!==e){if(n){Kr(n,this);const s=this._cachedMeta;mn(s),s._parsed=[]}e&&Object.isExtensible(e)&&Uu(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,n=this.getDataset();let s=!1;this._dataCheck();const o=e._stacked;e._stacked=gl(e.vScale,e),e.stack!==n.stack&&(s=!0,mn(e),e.stack=n.stack),this._resyncElements(t),(s||o!==e._stacked)&&bl(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),n=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(n,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:n,_data:s}=this,{iScale:o,_stacked:r}=n,l=o.axis;let a=t===0&&e===s.length?!0:n._sorted,c=t>0&&n._parsed[t-1],d,f,p;if(this._parsing===!1)n._parsed=s,n._sorted=!0,p=s;else{Yt(s[t])?p=this.parseArrayData(n,s,t,e):At(s[t])?p=this.parseObjectData(n,s,t,e):p=this.parsePrimitiveData(n,s,t,e);const g=()=>f[l]===null||c&&f[l]_||f<_}for(p=0;p=0;--p)if(!m()){this.updateRangeFromParsed(c,t,g,a);break}}return c}getAllParsedValues(t){const e=this._cachedMeta._parsed,n=[];let s,o,r;for(s=0,o=e.length;s=0&&tthis.getContext(n,s),_=c.resolveNamedOptions(p,g,m,f);return _.$shared&&(_.$shared=a,o[r]=Object.freeze(_l(_,a))),_}_resolveAnimations(t,e,n){const s=this.chart,o=this._cachedDataOpts,r=`animation-${e}`,l=o[r];if(l)return l;let a;if(s.options.animation!==!1){const d=this.chart.config,f=d.datasetAnimationScopeKeys(this._type,e),p=d.getOptionScopes(this.getDataset(),f);a=d.createResolver(p,this.getContext(t,n,e))}const c=new Pc(s,a&&a.animations);return a&&a._cacheable&&(o[r]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Do(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const n=this.resolveDataElementOptions(t,e),s=this._sharedOptions,o=this.getSharedOptions(n),r=this.includeOptions(e,o)||o!==s;return this.updateSharedOptions(o,e,n),{sharedOptions:o,includeOptions:r}}updateElement(t,e,n,s){Do(s)?Object.assign(t,n):this._resolveAnimations(e,s).update(t,n)}updateSharedOptions(t,e,n){t&&!Do(e)&&this._resolveAnimations(void 0,e).update(t,n)}_setStyle(t,e,n,s){t.active=s;const o=this.getStyle(e,s);this._resolveAnimations(e,n,s).update(t,{options:!s&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,n){this._setStyle(t,n,"active",!1)}setHoverStyle(t,e,n){this._setStyle(t,n,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,n=this._cachedMeta.data;for(const[l,a,c]of this._syncList)this[l](a,c);this._syncList=[];const s=n.length,o=e.length,r=Math.min(o,s);r&&this.parse(0,r),o>s?this._insertElements(s,o-s,t):o{for(c.length+=e,l=c.length-1;l>=r;l--)c[l]=c[l-e]};for(a(o),l=t;ls-o))}return i._cache.$bar}function Pf(i){const t=i.iScale,e=Af(t,i.type);let n=t._length,s,o,r,l;const a=()=>{r===32767||r===-32768||(Re(l)&&(n=Math.min(n,Math.abs(r-l)||n)),l=r)};for(s=0,o=e.length;s0?s[i-1]:null,l=iMath.abs(l)&&(a=l,c=r),t[e.axis]=c,t._custom={barStart:a,barEnd:c,start:s,end:o,min:r,max:l}}function Lc(i,t,e,n){return Yt(i)?Tf(i,t,e,n):t[e.axis]=e.parse(i,n),t}function yl(i,t,e,n){const s=i.iScale,o=i.vScale,r=s.getLabels(),l=s===o,a=[];let c,d,f,p;for(c=e,d=e+n;c=e?1:-1)}function Rf(i){let t,e,n,s,o;return i.horizontal?(t=i.base>i.x,e="left",n="right"):(t=i.basea.controller.options.grouped),o=n.options.stacked,r=[],l=a=>{const c=a.controller.getParsed(e),d=c&&c[a.vScale.axis];if(Rt(d)||isNaN(d))return!0};for(const a of s)if(!(e!==void 0&&l(a))&&((o===!1||r.indexOf(a.stack)===-1||o===void 0&&a.stack===void 0)&&r.push(a.stack),a.index===t))break;return r.length||r.push(void 0),r}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,n){const s=this._getStacks(t,n),o=e!==void 0?s.indexOf(e):-1;return o===-1?s.length-1:o}_getRuler(){const t=this.options,e=this._cachedMeta,n=e.iScale,s=[];let o,r;for(o=0,r=e.data.length;o=0;--n)e=Math.max(e,t[n].size(this.resolveDataElementOptions(n))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,{xScale:n,yScale:s}=e,o=this.getParsed(t),r=n.getLabelForValue(o.x),l=s.getLabelForValue(o.y),a=o._custom;return{label:e.label,value:"("+r+", "+l+(a?", "+a:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,n,s){const o=s==="reset",{iScale:r,vScale:l}=this._cachedMeta,{sharedOptions:a,includeOptions:c}=this._getSharedOptions(e,s),d=r.axis,f=l.axis;for(let p=e;pFn(M,l,a,!0)?1:Math.max(k,k*e,S,S*e),m=(M,k,S)=>Fn(M,l,a,!0)?-1:Math.min(k,k*e,S,S*e),_=g(0,c,f),y=g(te,d,p),v=m(Gt,c,f),w=m(Gt+te,d,p);n=(_-v)/2,s=(y-w)/2,o=-(_+v)/2,r=-(y+w)/2}return{ratioX:n,ratioY:s,offsetX:o,offsetY:r}}class cn extends Ve{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const n=this.getDataset().data,s=this._cachedMeta;if(this._parsing===!1)s._parsed=n;else{let o=a=>+n[a];if(At(n[t])){const{key:a="value"}=this._parsing;o=c=>+Mi(n[c],a)}let r,l;for(r=t,l=t+e;r0&&!isNaN(t)?Nt*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,n=this.chart,s=n.data.labels||[],o=Vn(e._parsed[t],n.options.locale);return{label:s[t]||"",value:o}}getMaxBorderWidth(t){let e=0;const n=this.chart;let s,o,r,l,a;if(!t){for(s=0,o=n.data.datasets.length;si!=="spacing",_indexable:i=>i!=="spacing"};cn.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(i){const t=i.data;if(t.labels.length&&t.datasets.length){const{labels:{pointStyle:e}}=i.legend.options;return t.labels.map((n,s)=>{const r=i.getDatasetMeta(0).controller.getStyle(s);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,pointStyle:e,hidden:!i.getDataVisibility(s),index:s}})}return[]}},onClick(i,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(i){let t=i.label;const e=": "+i.formattedValue;return Yt(t)?(t=t.slice(),t[0]+=e):t+=e,t}}}}};class $n extends Ve{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:n,data:s=[],_dataset:o}=e,r=this.chart._animationsDisabled;let{start:l,count:a}=lc(e,s,r);this._drawStart=l,this._drawCount=a,ac(e)&&(l=0,a=s.length),n._chart=this.chart,n._datasetIndex=this.index,n._decimated=!!o._decimated,n.points=s;const c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(n,void 0,{animated:!r,options:c},t),this.updateElements(s,l,a,t)}updateElements(t,e,n,s){const o=s==="reset",{iScale:r,vScale:l,_stacked:a,_dataset:c}=this._cachedMeta,{sharedOptions:d,includeOptions:f}=this._getSharedOptions(e,s),p=r.axis,g=l.axis,{spanGaps:m,segment:_}=this.options,y=sn(m)?m:Number.POSITIVE_INFINITY,v=this.chart._animationsDisabled||o||s==="none";let w=e>0&&this.getParsed(e-1);for(let M=e;M0&&Math.abs(S[p]-w[p])>y,_&&(L.parsed=S,L.raw=c.data[M]),f&&(L.options=d||this.resolveDataElementOptions(M,k.active?"active":s)),v||this.updateElement(k,M,L,s),w=S}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,n=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return n;const o=s[0].size(this.resolveDataElementOptions(0)),r=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(n,o,r)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}$n.id="line";$n.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};$n.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};class Us extends Ve{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,n=this.chart,s=n.data.labels||[],o=Vn(e._parsed[t].r,n.options.locale);return{label:s[t]||"",value:o}}parseObjectData(t,e,n,s){return vc.bind(this)(t,e,n,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((n,s)=>{const o=this.getParsed(s).r;!isNaN(o)&&this.chart.getDataVisibility(s)&&(oe.max&&(e.max=o))}),e}_updateRadius(){const t=this.chart,e=t.chartArea,n=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(s/2,0),r=Math.max(n.cutoutPercentage?o/100*n.cutoutPercentage:1,0),l=(o-r)/t.getVisibleDatasetCount();this.outerRadius=o-l*this.index,this.innerRadius=this.outerRadius-l}updateElements(t,e,n,s){const o=s==="reset",r=this.chart,a=r.options.animation,c=this._cachedMeta.rScale,d=c.xCenter,f=c.yCenter,p=c.getIndexAngle(0)-.5*Gt;let g=p,m;const _=360/this.countVisibleElements();for(m=0;m{!isNaN(this.getParsed(s).r)&&this.chart.getDataVisibility(s)&&e++}),e}_computeAngle(t,e,n){return this.chart.getDataVisibility(t)?Ie(this.resolveDataElementOptions(t,e).angle||n):0}}Us.id="polarArea";Us.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};Us.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(i){const t=i.data;if(t.labels.length&&t.datasets.length){const{labels:{pointStyle:e}}=i.legend.options;return t.labels.map((n,s)=>{const r=i.getDatasetMeta(0).controller.getStyle(s);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,pointStyle:e,hidden:!i.getDataVisibility(s),index:s}})}return[]}},onClick(i,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(i){return i.chart.data.labels[i.dataIndex]+": "+i.formattedValue}}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class dr extends cn{}dr.id="pie";dr.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};class Xs extends Ve{getLabelAndValue(t){const e=this._cachedMeta.vScale,n=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(n[e.axis])}}parseObjectData(t,e,n,s){return vc.bind(this)(t,e,n,s)}update(t){const e=this._cachedMeta,n=e.dataset,s=e.data||[],o=e.iScale.getLabels();if(n.points=s,t!=="resize"){const r=this.resolveDatasetElementOptions(t);this.options.showLine||(r.borderWidth=0);const l={_loop:!0,_fullLoop:o.length===s.length,options:r};this.updateElement(n,void 0,l,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,n,s){const o=this._cachedMeta.rScale,r=s==="reset";for(let l=e;l{s[o]=n[o]&&n[o].active()?n[o]._to:this[o]}),s}}$e.defaults={};$e.defaultRoutes=void 0;const Tc={values(i){return Yt(i)?i:""+i},numeric(i,t,e){if(i===0)return"0";const n=this.chart.options.locale;let s,o=i;if(e.length>1){const c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(s="scientific"),o=zf(i,e)}const r=Oe(Math.abs(o)),l=Math.max(Math.min(-1*Math.floor(r),20),0),a={notation:s,minimumFractionDigits:l,maximumFractionDigits:l};return Object.assign(a,this.options.ticks.format),Vn(i,n,a)},logarithmic(i,t,e){if(i===0)return"0";const n=i/Math.pow(10,Math.floor(Oe(i)));return n===1||n===2||n===5?Tc.numeric.call(this,i,t,e):""}};function zf(i,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&i!==Math.floor(i)&&(e=i-Math.floor(i)),e}var qs={formatters:Tc};Pt.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(i,t)=>t.lineWidth,tickColor:(i,t)=>t.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:qs.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}});Pt.route("scale.ticks","color","","color");Pt.route("scale.grid","color","","borderColor");Pt.route("scale.grid","borderColor","","borderColor");Pt.route("scale.title","color","","color");Pt.describe("scale",{_fallback:!1,_scriptable:i=>!i.startsWith("before")&&!i.startsWith("after")&&i!=="callback"&&i!=="parser",_indexable:i=>i!=="borderDash"&&i!=="tickBorderDash"});Pt.describe("scales",{_fallback:"scale"});Pt.describe("scale.ticks",{_scriptable:i=>i!=="backdropPadding"&&i!=="callback",_indexable:i=>i!=="backdropPadding"});function Nf(i,t){const e=i.options.ticks,n=e.maxTicksLimit||Wf(i),s=e.major.enabled?Hf(t):[],o=s.length,r=s[0],l=s[o-1],a=[];if(o>n)return Vf(t,a,s,o/n),a;const c=jf(s,t,n);if(o>0){let d,f;const p=o>1?Math.round((l-r)/(o-1)):null;for(ms(t,a,c,Rt(p)?0:r-p,r),d=0,f=o-1;ds)return a}return Math.max(s,1)}function Hf(i){const t=[];let e,n;for(e=0,n=i.length;ei==="left"?"right":i==="right"?"left":i,wl=(i,t,e)=>t==="top"||t==="left"?i[t]+e:i[t]-e;function kl(i,t){const e=[],n=i.length/t,s=i.length;let o=0;for(;or+l)))return a}function Xf(i,t){Bt(i,e=>{const n=e.gc,s=n.length/2;let o;if(s>t){for(o=0;on?n:e,n=s&&e>n?e:n,{min:Te(e,Te(n,e)),max:Te(n,Te(e,n))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){$t(this.options.beforeUpdate,[this])}update(t,e,n){const{beginAtZero:s,grace:o,ticks:r}=this.options,l=r.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=n=Object.assign({left:0,right:0,top:0,bottom:0},n),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+n.left+n.right:this.height+n.top+n.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Pd(this,o,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const a=l=o||n<=1||!this.isHorizontal()){this.labelRotation=s;return}const d=this._getLabelSizes(),f=d.widest.width,p=d.highest.height,g=pe(this.chart.width-f,0,this.maxWidth);l=t.offset?this.maxWidth/n:g/(n-1),f+6>l&&(l=g/(n-(t.offset?.5:1)),a=this.maxHeight-bn(t.grid)-e.padding-Ml(t.title,this.chart.options.font),c=Math.sqrt(f*f+p*p),r=tr(Math.min(Math.asin(pe((d.highest.height+6)/l,-1,1)),Math.asin(pe(a/c,-1,1))-Math.asin(pe(p/c,-1,1)))),r=Math.max(s,Math.min(o,r))),this.labelRotation=r}afterCalculateLabelRotation(){$t(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){$t(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:n,title:s,grid:o}}=this,r=this._isVisible(),l=this.isHorizontal();if(r){const a=Ml(s,e.options.font);if(l?(t.width=this.maxWidth,t.height=bn(o)+a):(t.height=this.maxHeight,t.width=bn(o)+a),n.display&&this.ticks.length){const{first:c,last:d,widest:f,highest:p}=this._getLabelSizes(),g=n.padding*2,m=Ie(this.labelRotation),_=Math.cos(m),y=Math.sin(m);if(l){const v=n.mirror?0:y*f.width+_*p.height;t.height=Math.min(this.maxHeight,t.height+v+g)}else{const v=n.mirror?0:_*f.width+y*p.height;t.width=Math.min(this.maxWidth,t.width+v+g)}this._calculatePadding(c,d,y,_)}}this._handleMargins(),l?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,n,s){const{ticks:{align:o,padding:r},position:l}=this.options,a=this.labelRotation!==0,c=l!=="top"&&this.axis==="x";if(this.isHorizontal()){const d=this.getPixelForTick(0)-this.left,f=this.right-this.getPixelForTick(this.ticks.length-1);let p=0,g=0;a?c?(p=s*t.width,g=n*e.height):(p=n*t.height,g=s*e.width):o==="start"?g=e.width:o==="end"?p=t.width:o!=="inner"&&(p=t.width/2,g=e.width/2),this.paddingLeft=Math.max((p-d+r)*this.width/(this.width-d),0),this.paddingRight=Math.max((g-f+r)*this.width/(this.width-f),0)}else{let d=e.height/2,f=t.height/2;o==="start"?(d=0,f=t.height):o==="end"&&(d=e.height,f=0),this.paddingTop=d+r,this.paddingBottom=f+r}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){$t(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,n;for(e=0,n=t.length;e({width:o[C]||0,height:r[C]||0});return{first:L(0),last:L(e-1),widest:L(k),highest:L(S),widths:o,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Vu(this._alignToPixels?Li(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&tl*s?l/n:a/s:a*s0}_computeGridLineItems(t){const e=this.axis,n=this.chart,s=this.options,{grid:o,position:r}=s,l=o.offset,a=this.isHorizontal(),d=this.ticks.length+(l?1:0),f=bn(o),p=[],g=o.setContext(this.getContext()),m=g.drawBorder?g.borderWidth:0,_=m/2,y=function(F){return Li(n,F,m)};let v,w,M,k,S,L,C,T,E,O,N,V;if(r==="top")v=y(this.bottom),L=this.bottom-f,T=v-_,O=y(t.top)+_,V=t.bottom;else if(r==="bottom")v=y(this.top),O=t.top,V=y(t.bottom)-_,L=v+_,T=this.top+f;else if(r==="left")v=y(this.right),S=this.right-f,C=v-_,E=y(t.left)+_,N=t.right;else if(r==="right")v=y(this.left),E=t.left,N=y(t.right)-_,S=v+_,C=this.left+f;else if(e==="x"){if(r==="center")v=y((t.top+t.bottom)/2+.5);else if(At(r)){const F=Object.keys(r)[0],H=r[F];v=y(this.chart.scales[F].getPixelForValue(H))}O=t.top,V=t.bottom,L=v+_,T=L+f}else if(e==="y"){if(r==="center")v=y((t.left+t.right)/2);else if(At(r)){const F=Object.keys(r)[0],H=r[F];v=y(this.chart.scales[F].getPixelForValue(H))}S=v-_,C=S-f,E=t.left,N=t.right}const R=xt(s.ticks.maxTicksLimit,d),B=Math.max(1,Math.ceil(d/R));for(w=0;wo.value===t);return s>=0?e.setContext(this.getContext(s)).lineWidth:0}drawGrid(t){const e=this.options.grid,n=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let o,r;const l=(a,c,d)=>{!d.width||!d.color||(n.save(),n.lineWidth=d.width,n.strokeStyle=d.color,n.setLineDash(d.borderDash||[]),n.lineDashOffset=d.borderDashOffset,n.beginPath(),n.moveTo(a.x,a.y),n.lineTo(c.x,c.y),n.stroke(),n.restore())};if(e.display)for(o=0,r=s.length;o{this.draw(s)}}]:[{z:n,draw:s=>{this.drawBackground(),this.drawGrid(s),this.drawTitle()}},{z:n+1,draw:()=>{this.drawBorder()}},{z:e,draw:s=>{this.drawLabels(s)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),n=this.axis+"AxisID",s=[];let o,r;for(o=0,r=e.length;o{const n=e.split("."),s=n.pop(),o=[i].concat(n).join("."),r=t[e].split("."),l=r.pop(),a=r.join(".");Pt.route(o,s,a,l)})}function th(i){return"id"in i&&"defaults"in i}class eh{constructor(){this.controllers=new bs(Ve,"datasets",!0),this.elements=new bs($e,"elements"),this.plugins=new bs(Object,"plugins"),this.scales=new bs(zi,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,n){[...e].forEach(s=>{const o=n||this._getRegistryForType(s);n||o.isForType(s)||o===this.plugins&&s.id?this._exec(t,o,s):Bt(s,r=>{const l=n||this._getRegistryForType(r);this._exec(t,l,r)})})}_exec(t,e,n){const s=Jo(t);$t(n["before"+s],[],n),e[t](n),$t(n["after"+s],[],n)}_getRegistryForType(t){for(let e=0;e0&&this.getParsed(e-1);for(let k=e;k0&&Math.abs(L[g]-M[g])>v,y&&(C.parsed=L,C.raw=c.data[k]),p&&(C.options=f||this.resolveDataElementOptions(k,S.active?"active":s)),w||this.updateElement(S,k,C,s),M=L}this.updateSharedOptions(f,s,d)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let l=0;for(let a=e.length-1;a>=0;--a)l=Math.max(l,e[a].size(this.resolveDataElementOptions(a))/2);return l>0&&l}const n=t.dataset,s=n.options&&n.options.borderWidth||0;if(!e.length)return s;const o=e[0].size(this.resolveDataElementOptions(0)),r=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,o,r)/2}}Ks.id="scatter";Ks.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1};Ks.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title(){return""},label(i){return"("+i.label+", "+i.formattedValue+")"}}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var ih=Object.freeze({__proto__:null,BarController:$s,BubbleController:Ys,DoughnutController:cn,LineController:$n,PolarAreaController:Us,PieController:dr,RadarController:Xs,ScatterController:Ks});function Ti(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Vo{constructor(t){this.options=t||{}}init(t){}formats(){return Ti()}parse(t,e){return Ti()}format(t,e){return Ti()}add(t,e,n){return Ti()}diff(t,e,n){return Ti()}startOf(t,e,n){return Ti()}endOf(t,e){return Ti()}}Vo.override=function(i){Object.assign(Vo.prototype,i)};var nh={_date:Vo};function sh(i,t,e,n){const{controller:s,data:o,_sorted:r}=i,l=s._cachedMeta.iScale;if(l&&t===l.axis&&t!=="r"&&r&&o.length){const a=l._reversePixels?$u:di;if(n){if(s._sharedOptions){const c=o[0],d=typeof c.getRange=="function"&&c.getRange(t);if(d){const f=a(o,t,e-d),p=a(o,t,e+d);return{lo:f.lo,hi:p.hi}}}}else return a(o,t,e)}return{lo:0,hi:o.length-1}}function Yn(i,t,e,n,s){const o=i.getSortedVisibleDatasetMetas(),r=e[t];for(let l=0,a=o.length;l{a[r](t[e],s)&&(o.push({element:a,datasetIndex:c,index:d}),l=l||a.inRange(t.x,t.y,s))}),n&&!l?[]:o}var ah={evaluateInteractionItems:Yn,modes:{index(i,t,e,n){const s=Oi(t,i),o=e.axis||"x",r=e.includeInvisible||!1,l=e.intersect?Po(i,s,o,n,r):Co(i,s,o,!1,n,r),a=[];return l.length?(i.getSortedVisibleDatasetMetas().forEach(c=>{const d=l[0].index,f=c.data[d];f&&!f.skip&&a.push({element:f,datasetIndex:c.index,index:d})}),a):[]},dataset(i,t,e,n){const s=Oi(t,i),o=e.axis||"xy",r=e.includeInvisible||!1;let l=e.intersect?Po(i,s,o,n,r):Co(i,s,o,!1,n,r);if(l.length>0){const a=l[0].datasetIndex,c=i.getDatasetMeta(a).data;l=[];for(let d=0;de.pos===t)}function Dl(i,t){return i.filter(e=>Oc.indexOf(e.pos)===-1&&e.box.axis===t)}function yn(i,t){return i.sort((e,n)=>{const s=t?n:e,o=t?e:n;return s.weight===o.weight?s.index-o.index:s.weight-o.weight})}function ch(i){const t=[];let e,n,s,o,r,l;for(e=0,n=(i||[]).length;ec.box.fullSize),!0),n=yn(_n(t,"left"),!0),s=yn(_n(t,"right")),o=yn(_n(t,"top"),!0),r=yn(_n(t,"bottom")),l=Dl(t,"x"),a=Dl(t,"y");return{fullSize:e,leftAndTop:n.concat(o),rightAndBottom:s.concat(a).concat(r).concat(l),chartArea:_n(t,"chartArea"),vertical:n.concat(s).concat(a),horizontal:o.concat(r).concat(l)}}function Al(i,t,e,n){return Math.max(i[e],t[e])+Math.max(i[n],t[n])}function Rc(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function hh(i,t,e,n){const{pos:s,box:o}=e,r=i.maxPadding;if(!At(s)){e.size&&(i[s]-=e.size);const f=n[e.stack]||{size:0,count:1};f.size=Math.max(f.size,e.horizontal?o.height:o.width),e.size=f.size/f.count,i[s]+=e.size}o.getPadding&&Rc(r,o.getPadding());const l=Math.max(0,t.outerWidth-Al(r,i,"left","right")),a=Math.max(0,t.outerHeight-Al(r,i,"top","bottom")),c=l!==i.w,d=a!==i.h;return i.w=l,i.h=a,e.horizontal?{same:c,other:d}:{same:d,other:c}}function ph(i){const t=i.maxPadding;function e(n){const s=Math.max(t[n]-i[n],0);return i[n]+=s,s}i.y+=e("top"),i.x+=e("left"),e("right"),e("bottom")}function gh(i,t){const e=t.maxPadding;function n(s){const o={left:0,top:0,right:0,bottom:0};return s.forEach(r=>{o[r]=Math.max(t[r],e[r])}),o}return n(i?["left","right"]:["top","bottom"])}function Sn(i,t,e,n){const s=[];let o,r,l,a,c,d;for(o=0,r=i.length,c=0;o{typeof _.beforeLayout=="function"&&_.beforeLayout()});const d=a.reduce((_,y)=>y.box.options&&y.box.options.display===!1?_:_+1,0)||1,f=Object.freeze({outerWidth:t,outerHeight:e,padding:s,availableWidth:o,availableHeight:r,vBoxMaxWidth:o/2/d,hBoxMaxHeight:r/2}),p=Object.assign({},s);Rc(p,xe(n));const g=Object.assign({maxPadding:p,w:o,h:r,x:s.left,y:s.top},s),m=dh(a.concat(c),f);Sn(l.fullSize,g,f,m),Sn(a,g,f,m),Sn(c,g,f,m)&&Sn(a,g,f,m),ph(g),Pl(l.leftAndTop,g,f,m),g.x+=g.w,g.y+=g.h,Pl(l.rightAndBottom,g,f,m),i.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},Bt(l.chartArea,_=>{const y=_.box;Object.assign(y,i.chartArea),y.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})})}};class Ec{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,n){}removeEventListener(t,e,n){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,n,s){return e=Math.max(0,e||t.width),n=n||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):n)}}isAttached(t){return!0}updateConfig(t){}}class mh extends Ec{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const Ms="$chartjs",bh={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Cl=i=>i===null||i==="";function _h(i,t){const e=i.style,n=i.getAttribute("height"),s=i.getAttribute("width");if(i[Ms]={initial:{height:n,width:s,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",Cl(s)){const o=ll(i,"width");o!==void 0&&(i.width=o)}if(Cl(n))if(i.style.height==="")i.height=i.width/(t||2);else{const o=ll(i,"height");o!==void 0&&(i.height=o)}return i}const Fc=Qd?{passive:!0}:!1;function yh(i,t,e){i.addEventListener(t,e,Fc)}function vh(i,t,e){i.canvas.removeEventListener(t,e,Fc)}function xh(i,t){const e=bh[i.type]||i.type,{x:n,y:s}=Oi(i,t);return{type:e,chart:t,native:i,x:n!==void 0?n:null,y:s!==void 0?s:null}}function Bs(i,t){for(const e of i)if(e===t||e.contains(t))return!0}function wh(i,t,e){const n=i.canvas,s=new MutationObserver(o=>{let r=!1;for(const l of o)r=r||Bs(l.addedNodes,n),r=r&&!Bs(l.removedNodes,n);r&&e()});return s.observe(document,{childList:!0,subtree:!0}),s}function kh(i,t,e){const n=i.canvas,s=new MutationObserver(o=>{let r=!1;for(const l of o)r=r||Bs(l.removedNodes,n),r=r&&!Bs(l.addedNodes,n);r&&e()});return s.observe(document,{childList:!0,subtree:!0}),s}const zn=new Map;let Ll=0;function Ic(){const i=window.devicePixelRatio;i!==Ll&&(Ll=i,zn.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function Mh(i,t){zn.size||window.addEventListener("resize",Ic),zn.set(i,t)}function Sh(i){zn.delete(i),zn.size||window.removeEventListener("resize",Ic)}function Dh(i,t,e){const n=i.canvas,s=n&&ur(n);if(!s)return;const o=rc((l,a)=>{const c=s.clientWidth;e(l,a),c{const a=l[0],c=a.contentRect.width,d=a.contentRect.height;c===0&&d===0||o(c,d)});return r.observe(s),Mh(i,o),r}function Lo(i,t,e){e&&e.disconnect(),t==="resize"&&Sh(i)}function Ah(i,t,e){const n=i.canvas,s=rc(o=>{i.ctx!==null&&e(xh(o,i))},i,o=>{const r=o[0];return[r,r.offsetX,r.offsetY]});return yh(n,t,s),s}class Ph extends Ec{acquireContext(t,e){const n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(_h(t,e),n):null}releaseContext(t){const e=t.canvas;if(!e[Ms])return!1;const n=e[Ms].initial;["height","width"].forEach(o=>{const r=n[o];Rt(r)?e.removeAttribute(o):e.setAttribute(o,r)});const s=n.style||{};return Object.keys(s).forEach(o=>{e.style[o]=s[o]}),e.width=e.width,delete e[Ms],!0}addEventListener(t,e,n){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),r={attach:wh,detach:kh,resize:Dh}[e]||Ah;s[e]=r(t,e,n)}removeEventListener(t,e){const n=t.$proxies||(t.$proxies={}),s=n[e];if(!s)return;({attach:Lo,detach:Lo,resize:Lo}[e]||vh)(t,e,s),n[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,n,s){return Gd(t,e,n,s)}isAttached(t){const e=ur(t);return!!(e&&e.isConnected)}}function Ch(i){return!wc()||typeof OffscreenCanvas<"u"&&i instanceof OffscreenCanvas?mh:Ph}class Lh{constructor(){this._init=[]}notify(t,e,n,s){e==="beforeInit"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));const o=s?this._descriptors(t).filter(s):this._descriptors(t),r=this._notify(o,t,e,n);return e==="afterDestroy"&&(this._notify(o,t,"stop"),this._notify(this._init,t,"uninstall")),r}_notify(t,e,n,s){s=s||{};for(const o of t){const r=o.plugin,l=r[n],a=[e,s,o.options];if($t(l,a,r)===!1&&s.cancelable)return!1}return!0}invalidate(){Rt(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const n=t&&t.config,s=xt(n.options&&n.options.plugins,{}),o=Th(n);return s===!1&&!e?[]:Rh(t,o,s,e)}_notifyStateChanges(t){const e=this._oldCache||[],n=this._cache,s=(o,r)=>o.filter(l=>!r.some(a=>l.plugin.id===a.plugin.id));this._notify(s(e,n),t,"stop"),this._notify(s(n,e),t,"start")}}function Th(i){const t={},e=[],n=Object.keys(ii.plugins.items);for(let o=0;o{const a=n[l];if(!At(a))return console.error(`Invalid scale configuration for scale: ${l}`);if(a._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${l}`);const c=Yo(l,a),d=Ih(c,s),f=e.scales||{};o[c]=o[c]||l,r[l]=An(Object.create(null),[{axis:c},a,f[c],f[d]])}),i.data.datasets.forEach(l=>{const a=l.type||i.type,c=l.indexAxis||$o(a,t),f=(Ii[a]||{}).scales||{};Object.keys(f).forEach(p=>{const g=Fh(p,c),m=l[g+"AxisID"]||o[g]||g;r[m]=r[m]||Object.create(null),An(r[m],[{axis:g},n[m],f[p]])})}),Object.keys(r).forEach(l=>{const a=r[l];An(a,[Pt.scales[a.type],Pt.scale])}),r}function Bc(i){const t=i.options||(i.options={});t.plugins=xt(t.plugins,{}),t.scales=zh(i,t)}function zc(i){return i=i||{},i.datasets=i.datasets||[],i.labels=i.labels||[],i}function Nh(i){return i=i||{},i.data=zc(i.data),Bc(i),i}const Tl=new Map,Nc=new Set;function ys(i,t){let e=Tl.get(i);return e||(e=t(),Tl.set(i,e),Nc.add(e)),e}const vn=(i,t,e)=>{const n=Mi(t,e);n!==void 0&&i.add(n)};class Wh{constructor(t){this._config=Nh(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=zc(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),Bc(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return ys(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return ys(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return ys(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){const e=t.id,n=this.type;return ys(`${n}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){const n=this._scopeCache;let s=n.get(t);return(!s||e)&&(s=new Map,n.set(t,s)),s}getOptionScopes(t,e,n){const{options:s,type:o}=this,r=this._cachedScopes(t,n),l=r.get(e);if(l)return l;const a=new Set;e.forEach(d=>{t&&(a.add(t),d.forEach(f=>vn(a,t,f))),d.forEach(f=>vn(a,s,f)),d.forEach(f=>vn(a,Ii[o]||{},f)),d.forEach(f=>vn(a,Pt,f)),d.forEach(f=>vn(a,jo,f))});const c=Array.from(a);return c.length===0&&c.push(Object.create(null)),Nc.has(e)&&r.set(e,c),c}chartOptionScopes(){const{options:t,type:e}=this;return[t,Ii[e]||{},Pt.datasets[e]||{},{type:e},Pt,jo]}resolveNamedOptions(t,e,n,s=[""]){const o={$shared:!0},{resolver:r,subPrefixes:l}=Ol(this._resolverCache,t,s);let a=r;if(Hh(r,e)){o.$shared=!1,n=Si(n)?n():n;const c=this.createResolver(t,n,l);a=on(r,n,c)}for(const c of e)o[c]=a[c];return o}createResolver(t,e,n=[""],s){const{resolver:o}=Ol(this._resolverCache,t,n);return At(e)?on(o,e,void 0,s):o}}function Ol(i,t,e){let n=i.get(t);n||(n=new Map,i.set(t,n));const s=e.join();let o=n.get(s);return o||(o={resolver:lr(t,e),subPrefixes:e.filter(l=>!l.toLowerCase().includes("hover"))},n.set(s,o)),o}const jh=i=>At(i)&&Object.getOwnPropertyNames(i).reduce((t,e)=>t||Si(i[e]),!1);function Hh(i,t){const{isScriptable:e,isIndexable:n}=mc(i);for(const s of t){const o=e(s),r=n(s),l=(r||o)&&i[s];if(o&&(Si(l)||jh(l))||r&&Yt(l))return!0}return!1}var Vh="3.9.1";const $h=["top","bottom","left","right","chartArea"];function Rl(i,t){return i==="top"||i==="bottom"||$h.indexOf(i)===-1&&t==="x"}function El(i,t){return function(e,n){return e[i]===n[i]?e[t]-n[t]:e[i]-n[i]}}function Fl(i){const t=i.chart,e=t.options.animation;t.notifyPlugins("afterRender"),$t(e&&e.onComplete,[i],t)}function Yh(i){const t=i.chart,e=t.options.animation;$t(e&&e.onProgress,[i],t)}function Wc(i){return wc()&&typeof i=="string"?i=document.getElementById(i):i&&i.length&&(i=i[0]),i&&i.canvas&&(i=i.canvas),i}const zs={},jc=i=>{const t=Wc(i);return Object.values(zs).filter(e=>e.canvas===t).pop()};function Uh(i,t,e){const n=Object.keys(i);for(const s of n){const o=+s;if(o>=t){const r=i[s];delete i[s],(e>0||o>t)&&(i[o+e]=r)}}}function Xh(i,t,e,n){return!e||i.type==="mouseout"?null:n?t:i}class ln{constructor(t,e){const n=this.config=new Wh(e),s=Wc(t),o=jc(s);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const r=n.createResolver(n.chartOptionScopes(),this.getContext());this.platform=new(n.platform||Ch(s)),this.platform.updateConfig(n);const l=this.platform.acquireContext(s,r.aspectRatio),a=l&&l.canvas,c=a&&a.height,d=a&&a.width;if(this.id=Tu(),this.ctx=l,this.canvas=a,this.width=d,this.height=c,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Lh,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Xu(f=>this.update(f),r.resizeDelay||0),this._dataChanges=[],zs[this.id]=this,!l||!a){console.error("Failed to create chart: can't acquire context from the given item");return}li.listen(this,"complete",Fl),li.listen(this,"progress",Yh),this._initialize(),this.attached&&this.update()}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:n,height:s,_aspectRatio:o}=this;return Rt(t)?e&&o?o:s?n/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():rl(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return nl(this.canvas,this.ctx),this}stop(){return li.stop(this),this}resize(t,e){li.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const n=this.options,s=this.canvas,o=n.maintainAspectRatio&&this.aspectRatio,r=this.platform.getMaximumSize(s,t,e,o),l=n.devicePixelRatio||this.platform.getDevicePixelRatio(),a=this.width?"resize":"attach";this.width=r.width,this.height=r.height,this._aspectRatio=this.aspectRatio,rl(this,l,!0)&&(this.notifyPlugins("resize",{size:r}),$t(n.onResize,[this,r],this),this.attached&&this._doResize(a)&&this.render())}ensureScalesHaveIDs(){const e=this.options.scales||{};Bt(e,(n,s)=>{n.id=s})}buildOrUpdateScales(){const t=this.options,e=t.scales,n=this.scales,s=Object.keys(n).reduce((r,l)=>(r[l]=!1,r),{});let o=[];e&&(o=o.concat(Object.keys(e).map(r=>{const l=e[r],a=Yo(r,l),c=a==="r",d=a==="x";return{options:l,dposition:c?"chartArea":d?"bottom":"left",dtype:c?"radialLinear":d?"category":"linear"}}))),Bt(o,r=>{const l=r.options,a=l.id,c=Yo(a,l),d=xt(l.type,r.dtype);(l.position===void 0||Rl(l.position,c)!==Rl(r.dposition))&&(l.position=r.dposition),s[a]=!0;let f=null;if(a in n&&n[a].type===d)f=n[a];else{const p=ii.getScale(d);f=new p({id:a,type:d,ctx:this.ctx,chart:this}),n[f.id]=f}f.init(l,t)}),Bt(s,(r,l)=>{r||delete n[l]}),Bt(n,r=>{ve.configure(this,r,r.options),ve.addBox(this,r)})}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,n=t.length;if(t.sort((s,o)=>s.index-o.index),n>e){for(let s=e;se.length&&delete this._stacks,t.forEach((n,s)=>{e.filter(o=>o===n._dataset).length===0&&this._destroyDatasetMeta(s)})}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let n,s;for(this._removeUnreferencedMetasets(),n=0,s=e.length;n{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const n=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!n.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;const o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let r=0;for(let c=0,d=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(El("z","_idx"));const{_active:l,_lastEvent:a}=this;a?this._eventHandler(a,!0):l.length&&this._updateHoverStyles(l,l,!0),this.render()}_updateScales(){Bt(this.scales,t=>{ve.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),n=new Set(t.events);(!Yr(e,n)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:n,start:s,count:o}of e){const r=n==="_removeElements"?-o:o;Uh(t,s,r)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,n=o=>new Set(t.filter(r=>r[0]===o).map((r,l)=>l+","+r.splice(1).join(","))),s=n(0);for(let o=1;oo.split(",")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;ve.update(this,this.width,this.height,t);const e=this.chartArea,n=e.width<=0||e.height<=0;this._layers=[],Bt(this.boxes,s=>{n&&s.position==="chartArea"||(s.configure&&s.configure(),this._layers.push(...s._layers()))},this),this._layers.forEach((s,o)=>{s._idx=o}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,n=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,n=t._clip,s=!n.disabled,o=this.chartArea,r={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",r)!==!1&&(s&&js(e,{left:n.left===!1?0:o.left-n.left,right:n.right===!1?this.width:o.right+n.right,top:n.top===!1?0:o.top-n.top,bottom:n.bottom===!1?this.height:o.bottom+n.bottom}),t.controller.draw(),s&&Hs(e),r.cancelable=!1,this.notifyPlugins("afterDatasetDraw",r))}isPointInArea(t){return In(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,n,s){const o=ah.modes[e];return typeof o=="function"?o(this,t,n,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],n=this._metasets;let s=n.filter(o=>o&&o._dataset===e).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},n.push(s)),s}getContext(){return this.$context||(this.$context=Pi(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const n=this.getDatasetMeta(t);return typeof n.hidden=="boolean"?!n.hidden:!e.hidden}setDatasetVisibility(t,e){const n=this.getDatasetMeta(t);n.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,n){const s=n?"show":"hide",o=this.getDatasetMeta(t),r=o.controller._resolveAnimations(void 0,s);Re(e)?(o.data[e].hidden=!n,this.update()):(this.setDatasetVisibility(t,n),r.update(o,{visible:n}),this.update(l=>l.datasetIndex===t?s:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),li.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,o,r),t[o]=r},s=(o,r,l)=>{o.offsetX=r,o.offsetY=l,this._eventHandler(o)};Bt(this.options.events,o=>n(o,s))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,n=(a,c)=>{e.addEventListener(this,a,c),t[a]=c},s=(a,c)=>{t[a]&&(e.removeEventListener(this,a,c),delete t[a])},o=(a,c)=>{this.canvas&&this.resize(a,c)};let r;const l=()=>{s("attach",l),this.attached=!0,this.resize(),n("resize",o),n("detach",r)};r=()=>{this.attached=!1,s("resize",o),this._stop(),this._resize(0,0),n("attach",l)},e.isAttached(this.canvas)?l():r()}unbindEvents(){Bt(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},Bt(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,n){const s=n?"set":"remove";let o,r,l,a;for(e==="dataset"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller["_"+s+"DatasetHoverStyle"]()),l=0,a=t.length;l{const l=this.getDatasetMeta(o);if(!l)throw new Error("No dataset found at index "+o);return{datasetIndex:o,element:l.data[r],index:r}});!Ts(n,e)&&(this._active=n,this._lastEvent=null,this._updateHoverStyles(n,e))}notifyPlugins(t,e,n){return this._plugins.notify(this,t,e,n)}_updateHoverStyles(t,e,n){const s=this.options.hover,o=(a,c)=>a.filter(d=>!c.some(f=>d.datasetIndex===f.datasetIndex&&d.index===f.index)),r=o(e,t),l=n?t:o(t,e);r.length&&this.updateHoverStyle(r,s.mode,!1),l.length&&s.mode&&this.updateHoverStyle(l,s.mode,!0)}_eventHandler(t,e){const n={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=r=>(r.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",n,s)===!1)return;const o=this._handleEvent(t,e,n.inChartArea);return n.cancelable=!1,this.notifyPlugins("afterEvent",n,s),(o||n.changed)&&this.render(),this}_handleEvent(t,e,n){const{_active:s=[],options:o}=this,r=e,l=this._getActiveElements(t,s,n,r),a=Bu(t),c=Xh(t,this._lastEvent,n,a);n&&(this._lastEvent=null,$t(o.onHover,[t,l,this],this),a&&$t(o.onClick,[t,l,this],this));const d=!Ts(l,s);return(d||e)&&(this._active=l,this._updateHoverStyles(l,s,e)),this._lastEvent=c,d}_getActiveElements(t,e,n,s){if(t.type==="mouseout")return[];if(!n)return e;const o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,s)}}const Il=()=>Bt(ln.instances,i=>i._plugins.invalidate()),yi=!0;Object.defineProperties(ln,{defaults:{enumerable:yi,value:Pt},instances:{enumerable:yi,value:zs},overrides:{enumerable:yi,value:Ii},registry:{enumerable:yi,value:ii},version:{enumerable:yi,value:Vh},getChart:{enumerable:yi,value:jc},register:{enumerable:yi,value:(...i)=>{ii.add(...i),Il()}},unregister:{enumerable:yi,value:(...i)=>{ii.remove(...i),Il()}}});function Hc(i,t,e){const{startAngle:n,pixelMargin:s,x:o,y:r,outerRadius:l,innerRadius:a}=t;let c=s/l;i.beginPath(),i.arc(o,r,l,n-c,e+c),a>s?(c=s/a,i.arc(o,r,a,e+c,n-c,!0)):i.arc(o,r,s,e+te,n-te),i.closePath(),i.clip()}function qh(i){return rr(i,["outerStart","outerEnd","innerStart","innerEnd"])}function Kh(i,t,e,n){const s=qh(i.options.borderRadius),o=(e-t)/2,r=Math.min(o,n*t/2),l=a=>{const c=(e-Math.min(o,a))*n/2;return pe(a,0,Math.min(o,c))};return{outerStart:l(s.outerStart),outerEnd:l(s.outerEnd),innerStart:pe(s.innerStart,0,r),innerEnd:pe(s.innerEnd,0,r)}}function Qi(i,t,e,n){return{x:e+i*Math.cos(t),y:n+i*Math.sin(t)}}function Uo(i,t,e,n,s,o){const{x:r,y:l,startAngle:a,pixelMargin:c,innerRadius:d}=t,f=Math.max(t.outerRadius+n+e-c,0),p=d>0?d+n+e+c:0;let g=0;const m=s-a;if(n){const F=d>0?d-n:0,H=f>0?f-n:0,P=(F+H)/2,W=P!==0?m*P/(P+n):m;g=(m-W)/2}const _=Math.max(.001,m*f-e/Gt)/f,y=(m-_)/2,v=a+y+g,w=s-y-g,{outerStart:M,outerEnd:k,innerStart:S,innerEnd:L}=Kh(t,p,f,w-v),C=f-M,T=f-k,E=v+M/C,O=w-k/T,N=p+S,V=p+L,R=v+S/N,B=w-L/V;if(i.beginPath(),o){if(i.arc(r,l,f,E,O),k>0){const P=Qi(T,O,r,l);i.arc(P.x,P.y,k,O,w+te)}const F=Qi(V,w,r,l);if(i.lineTo(F.x,F.y),L>0){const P=Qi(V,B,r,l);i.arc(P.x,P.y,L,w+te,B+Math.PI)}if(i.arc(r,l,p,w-L/p,v+S/p,!0),S>0){const P=Qi(N,R,r,l);i.arc(P.x,P.y,S,R+Math.PI,v-te)}const H=Qi(C,v,r,l);if(i.lineTo(H.x,H.y),M>0){const P=Qi(C,E,r,l);i.arc(P.x,P.y,M,v-te,E)}}else{i.moveTo(r,l);const F=Math.cos(E)*f+r,H=Math.sin(E)*f+l;i.lineTo(F,H);const P=Math.cos(O)*f+r,W=Math.sin(O)*f+l;i.lineTo(P,W)}i.closePath()}function Gh(i,t,e,n,s){const{fullCircles:o,startAngle:r,circumference:l}=t;let a=t.endAngle;if(o){Uo(i,t,e,n,r+Nt,s);for(let c=0;c=Nt||Fn(o,l,a),_=ui(r,c+p,d+p);return m&&_}getCenterPoint(t){const{x:e,y:n,startAngle:s,endAngle:o,innerRadius:r,outerRadius:l}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:a,spacing:c}=this.options,d=(s+o)/2,f=(r+l+c+a)/2;return{x:e+Math.cos(d)*f,y:n+Math.sin(d)*f}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:n}=this,s=(e.offset||0)/2,o=(e.spacing||0)/2,r=e.circular;if(this.pixelMargin=e.borderAlign==="inner"?.33:0,this.fullCircles=n>Nt?Math.floor(n/Nt):0,n===0||this.innerRadius<0||this.outerRadius<0)return;t.save();let l=0;if(s){l=s/2;const c=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(c)*l,Math.sin(c)*l),this.circumference>=Gt&&(l=s)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;const a=Gh(t,this,l,o,r);Zh(t,this,l,o,a,r),t.restore()}}Gs.id="arc";Gs.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0};Gs.defaultRoutes={backgroundColor:"backgroundColor"};function Vc(i,t,e=t){i.lineCap=xt(e.borderCapStyle,t.borderCapStyle),i.setLineDash(xt(e.borderDash,t.borderDash)),i.lineDashOffset=xt(e.borderDashOffset,t.borderDashOffset),i.lineJoin=xt(e.borderJoinStyle,t.borderJoinStyle),i.lineWidth=xt(e.borderWidth,t.borderWidth),i.strokeStyle=xt(e.borderColor,t.borderColor)}function Jh(i,t,e){i.lineTo(e.x,e.y)}function tp(i){return i.stepped?vd:i.tension||i.cubicInterpolationMode==="monotone"?xd:Jh}function $c(i,t,e={}){const n=i.length,{start:s=0,end:o=n-1}=e,{start:r,end:l}=t,a=Math.max(s,r),c=Math.min(o,l),d=sl&&o>l;return{count:n,start:a,loop:t.loop,ilen:c(r+(c?l-k:k))%o,M=()=>{_!==y&&(i.lineTo(d,y),i.lineTo(d,_),i.lineTo(d,v))};for(a&&(g=s[w(0)],i.moveTo(g.x,g.y)),p=0;p<=l;++p){if(g=s[w(p)],g.skip)continue;const k=g.x,S=g.y,L=k|0;L===m?(S<_?_=S:S>y&&(y=S),d=(f*d+k)/++f):(M(),i.lineTo(k,S),m=L,f=0,_=y=S),v=S}M()}function Xo(i){const t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?ip:ep}function np(i){return i.stepped?Zd:i.tension||i.cubicInterpolationMode==="monotone"?Jd:Ri}function sp(i,t,e,n){let s=t._path;s||(s=t._path=new Path2D,t.path(s,e,n)&&s.closePath()),Vc(i,t.options),i.stroke(s)}function op(i,t,e,n){const{segments:s,options:o}=t,r=Xo(t);for(const l of s)Vc(i,o,l.style),i.beginPath(),r(i,t,l,{start:e,end:e+n-1})&&i.closePath(),i.stroke()}const rp=typeof Path2D=="function";function lp(i,t,e,n){rp&&!t.options.segment?sp(i,t,e,n):op(i,t,e,n)}class hi extends $e{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const n=this.options;if((n.tension||n.cubicInterpolationMode==="monotone")&&!n.stepped&&!this._pointsUpdated){const s=n.spanGaps?this._loop:this._fullLoop;$d(this._points,n,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=lf(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,n=t.length;return n&&e[t[n-1].end]}interpolate(t,e){const n=this.options,s=t[e],o=this.points,r=Ac(this,{property:e,start:s,end:s});if(!r.length)return;const l=[],a=np(n);let c,d;for(c=0,d=r.length;ci!=="borderDash"&&i!=="fill"};function Bl(i,t,e,n){const s=i.options,{[e]:o}=i.getProps([e],n);return Math.abs(t-o)=e)return i.slice(t,t+e);const r=[],l=(e-2)/(o-2);let a=0;const c=t+e-1;let d=t,f,p,g,m,_;for(r[a++]=i[d],f=0;fg&&(g=m,p=i[w],_=w);r[a++]=p,d=_}return r[a++]=i[c],r}function gp(i,t,e,n){let s=0,o=0,r,l,a,c,d,f,p,g,m,_;const y=[],v=t+e-1,w=i[t].x,k=i[v].x-w;for(r=t;r_&&(_=c,p=r),s=(o*s+l.x)/++o;else{const L=r-1;if(!Rt(f)&&!Rt(p)){const C=Math.min(f,p),T=Math.max(f,p);C!==g&&C!==L&&y.push({...i[C],x:s}),T!==g&&T!==L&&y.push({...i[T],x:s})}r>0&&L!==g&&y.push(i[L]),y.push(l),d=S,o=0,m=_=c,f=p=g=r}}return y}function Uc(i){if(i._decimated){const t=i._data;delete i._decimated,delete i._data,Object.defineProperty(i,"data",{value:t})}}function zl(i){i.data.datasets.forEach(t=>{Uc(t)})}function mp(i,t){const e=t.length;let n=0,s;const{iScale:o}=i,{min:r,max:l,minDefined:a,maxDefined:c}=o.getUserBounds();return a&&(n=pe(di(t,o.axis,r).lo,0,e-1)),c?s=pe(di(t,o.axis,l).hi+1,n,e)-n:s=e-n,{start:n,count:s}}var bp={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(i,t,e)=>{if(!e.enabled){zl(i);return}const n=i.width;i.data.datasets.forEach((s,o)=>{const{_data:r,indexAxis:l}=s,a=i.getDatasetMeta(o),c=r||s.data;if(Mn([l,i.options.indexAxis])==="y"||!a.controller.supportsDecimation)return;const d=i.scales[a.xAxisID];if(d.type!=="linear"&&d.type!=="time"||i.options.parsing)return;let{start:f,count:p}=mp(a,c);const g=e.threshold||4*n;if(p<=g){Uc(s);return}Rt(r)&&(s._data=c,delete s.data,Object.defineProperty(s,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(_){this._data=_}}));let m;switch(e.algorithm){case"lttb":m=pp(c,f,p,n,e);break;case"min-max":m=gp(c,f,p,n);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}s._decimated=m})},destroy(i){zl(i)}};function _p(i,t,e){const n=i.segments,s=i.points,o=t.points,r=[];for(const l of n){let{start:a,end:c}=l;c=fr(a,c,s);const d=qo(e,s[a],s[c],l.loop);if(!t.segments){r.push({source:l,target:d,start:s[a],end:s[c]});continue}const f=Ac(t,d);for(const p of f){const g=qo(e,o[p.start],o[p.end],p.loop),m=Dc(l,s,g);for(const _ of m)r.push({source:_,target:p,start:{[e]:Nl(d,g,"start",Math.max)},end:{[e]:Nl(d,g,"end",Math.min)}})}}return r}function qo(i,t,e,n){if(n)return;let s=t[i],o=e[i];return i==="angle"&&(s=Ce(s),o=Ce(o)),{property:i,start:s,end:o}}function yp(i,t){const{x:e=null,y:n=null}=i||{},s=t.points,o=[];return t.segments.forEach(({start:r,end:l})=>{l=fr(r,l,s);const a=s[r],c=s[l];n!==null?(o.push({x:a.x,y:n}),o.push({x:c.x,y:n})):e!==null&&(o.push({x:e,y:a.y}),o.push({x:e,y:c.y}))}),o}function fr(i,t,e){for(;t>i;t--){const n=e[t];if(!isNaN(n.x)&&!isNaN(n.y))break}return t}function Nl(i,t,e,n){return i&&t?n(i[e],t[e]):i?i[e]:t?t[e]:0}function Xc(i,t){let e=[],n=!1;return Yt(i)?(n=!0,e=i):e=yp(i,t),e.length?new hi({points:e,options:{tension:0},_loop:n,_fullLoop:n}):null}function Wl(i){return i&&i.fill!==!1}function vp(i,t,e){let s=i[t].fill;const o=[t];let r;if(!e)return s;for(;s!==!1&&o.indexOf(s)===-1;){if(!se(s))return s;if(r=i[s],!r)return!1;if(r.visible)return s;o.push(s),s=r.fill}return!1}function xp(i,t,e){const n=Sp(i);if(At(n))return isNaN(n.value)?!1:n;let s=parseFloat(n);return se(s)&&Math.floor(s)===s?wp(n[0],t,s,e):["origin","start","end","stack","shape"].indexOf(n)>=0&&n}function wp(i,t,e,n){return(i==="-"||i==="+")&&(e=t+e),e===t||e<0||e>=n?!1:e}function kp(i,t){let e=null;return i==="start"?e=t.bottom:i==="end"?e=t.top:At(i)?e=t.getPixelForValue(i.value):t.getBasePixel&&(e=t.getBasePixel()),e}function Mp(i,t,e){let n;return i==="start"?n=e:i==="end"?n=t.options.reverse?t.min:t.max:At(i)?n=i.value:n=t.getBaseValue(),n}function Sp(i){const t=i.options,e=t.fill;let n=xt(e&&e.target,e);return n===void 0&&(n=!!t.backgroundColor),n===!1||n===null?!1:n===!0?"origin":n}function Dp(i){const{scale:t,index:e,line:n}=i,s=[],o=n.segments,r=n.points,l=Ap(t,e);l.push(Xc({x:null,y:t.bottom},n));for(let a=0;a=0;--r){const l=s[r].$filler;l&&(l.line.updateControlPoints(o,l.axis),n&&l.fill&&Ro(i.ctx,l,o))}},beforeDatasetsDraw(i,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;const n=i.getSortedVisibleDatasetMetas();for(let s=n.length-1;s>=0;--s){const o=n[s].$filler;Wl(o)&&Ro(i.ctx,o,i.chartArea)}},beforeDatasetDraw(i,t,e){const n=t.meta.$filler;!Wl(n)||e.drawTime!=="beforeDatasetDraw"||Ro(i.ctx,n,i.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const $l=(i,t)=>{let{boxHeight:e=t,boxWidth:n=t}=i;return i.usePointStyle&&(e=Math.min(e,t),n=i.pointStyleWidth||Math.min(n,t)),{boxWidth:n,boxHeight:e,itemHeight:Math.max(t,e)}},zp=(i,t)=>i!==null&&t!==null&&i.datasetIndex===t.datasetIndex&&i.index===t.index;class Yl extends $e{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,n){this.maxWidth=t,this.maxHeight=e,this._margins=n,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=$t(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(n=>t.filter(n,this.chart.data))),t.sort&&(e=e.sort((n,s)=>t.sort(n,s,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}const n=t.labels,s=ce(n.font),o=s.size,r=this._computeTitleHeight(),{boxWidth:l,itemHeight:a}=$l(n,o);let c,d;e.font=s.string,this.isHorizontal()?(c=this.maxWidth,d=this._fitRows(r,o,l,a)+10):(d=this.maxHeight,c=this._fitCols(r,o,l,a)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(d,t.maxHeight||this.maxHeight)}_fitRows(t,e,n,s){const{ctx:o,maxWidth:r,options:{labels:{padding:l}}}=this,a=this.legendHitBoxes=[],c=this.lineWidths=[0],d=s+l;let f=t;o.textAlign="left",o.textBaseline="middle";let p=-1,g=-d;return this.legendItems.forEach((m,_)=>{const y=n+e/2+o.measureText(m.text).width;(_===0||c[c.length-1]+y+2*l>r)&&(f+=d,c[c.length-(_>0?0:1)]=0,g+=d,p++),a[_]={left:0,top:g,row:p,width:y,height:s},c[c.length-1]+=y+l}),f}_fitCols(t,e,n,s){const{ctx:o,maxHeight:r,options:{labels:{padding:l}}}=this,a=this.legendHitBoxes=[],c=this.columnSizes=[],d=r-t;let f=l,p=0,g=0,m=0,_=0;return this.legendItems.forEach((y,v)=>{const w=n+e/2+o.measureText(y.text).width;v>0&&g+s+2*l>d&&(f+=p+l,c.push({width:p,height:g}),m+=p+l,_++,p=g=0),a[v]={left:m,top:g,col:_,width:w,height:s},p=Math.max(p,w),g+=s+l}),f+=p,c.push({width:p,height:g}),f}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:n,labels:{padding:s},rtl:o}}=this,r=nn(o,this.left,this.width);if(this.isHorizontal()){let l=0,a=ye(n,this.left+s,this.right-this.lineWidths[l]);for(const c of e)l!==c.row&&(l=c.row,a=ye(n,this.left+s,this.right-this.lineWidths[l])),c.top+=this.top+t+s,c.left=r.leftForLtr(r.x(a),c.width),a+=c.width+s}else{let l=0,a=ye(n,this.top+t+s,this.bottom-this.columnSizes[l].height);for(const c of e)c.col!==l&&(l=c.col,a=ye(n,this.top+t+s,this.bottom-this.columnSizes[l].height)),c.top=a,c.left+=this.left+s,c.left=r.leftForLtr(r.x(c.left),c.width),a+=c.height+s}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){const t=this.ctx;js(t,this),this._draw(),Hs(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:n,ctx:s}=this,{align:o,labels:r}=t,l=Pt.color,a=nn(t.rtl,this.left,this.width),c=ce(r.font),{color:d,padding:f}=r,p=c.size,g=p/2;let m;this.drawTitle(),s.textAlign=a.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=c.string;const{boxWidth:_,boxHeight:y,itemHeight:v}=$l(r,p),w=function(C,T,E){if(isNaN(_)||_<=0||isNaN(y)||y<0)return;s.save();const O=xt(E.lineWidth,1);if(s.fillStyle=xt(E.fillStyle,l),s.lineCap=xt(E.lineCap,"butt"),s.lineDashOffset=xt(E.lineDashOffset,0),s.lineJoin=xt(E.lineJoin,"miter"),s.lineWidth=O,s.strokeStyle=xt(E.strokeStyle,l),s.setLineDash(xt(E.lineDash,[])),r.usePointStyle){const N={radius:y*Math.SQRT2/2,pointStyle:E.pointStyle,rotation:E.rotation,borderWidth:O},V=a.xPlus(C,_/2),R=T+g;pc(s,N,V,R,r.pointStyleWidth&&_)}else{const N=T+Math.max((p-y)/2,0),V=a.leftForLtr(C,_),R=Ei(E.borderRadius);s.beginPath(),Object.values(R).some(B=>B!==0)?Bn(s,{x:V,y:N,w:_,h:y,radius:R}):s.rect(V,N,_,y),s.fill(),O!==0&&s.stroke()}s.restore()},M=function(C,T,E){Bi(s,E.text,C,T+v/2,c,{strikethrough:E.hidden,textAlign:a.textAlign(E.textAlign)})},k=this.isHorizontal(),S=this._computeTitleHeight();k?m={x:ye(o,this.left+f,this.right-n[0]),y:this.top+f+S,line:0}:m={x:this.left+f,y:ye(o,this.top+S+f,this.bottom-e[0].height),line:0},kc(this.ctx,t.textDirection);const L=v+f;this.legendItems.forEach((C,T)=>{s.strokeStyle=C.fontColor||d,s.fillStyle=C.fontColor||d;const E=s.measureText(C.text).width,O=a.textAlign(C.textAlign||(C.textAlign=r.textAlign)),N=_+g+E;let V=m.x,R=m.y;a.setWidth(this.width),k?T>0&&V+N+f>this.right&&(R=m.y+=L,m.line++,V=m.x=ye(o,this.left+f,this.right-n[m.line])):T>0&&R+L>this.bottom&&(V=m.x=V+e[m.line].width+f,m.line++,R=m.y=ye(o,this.top+S+f,this.bottom-e[m.line].height));const B=a.x(V);w(B,R,C),V=qu(O,V+_+g,k?V+N:this.right,t.rtl),M(a.x(V),R,C),k?m.x+=N+f:m.y+=L}),Mc(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,n=ce(e.font),s=xe(e.padding);if(!e.display)return;const o=nn(t.rtl,this.left,this.width),r=this.ctx,l=e.position,a=n.size/2,c=s.top+a;let d,f=this.left,p=this.width;if(this.isHorizontal())p=Math.max(...this.lineWidths),d=this.top+c,f=ye(t.align,f,this.right-p);else{const m=this.columnSizes.reduce((_,y)=>Math.max(_,y.height),0);d=c+ye(t.align,this.top,this.bottom-m-t.labels.padding-this._computeTitleHeight())}const g=ye(l,f,f+p);r.textAlign=o.textAlign(ir(l)),r.textBaseline="middle",r.strokeStyle=e.color,r.fillStyle=e.color,r.font=n.string,Bi(r,e.text,g,d,n)}_computeTitleHeight(){const t=this.options.title,e=ce(t.font),n=xe(t.padding);return t.display?e.lineHeight+n.height:0}_getLegendItemAt(t,e){let n,s,o;if(ui(t,this.left,this.right)&&ui(e,this.top,this.bottom)){for(o=this.legendHitBoxes,n=0;ni.chart.options.color,boxWidth:40,padding:10,generateLabels(i){const t=i.data.datasets,{labels:{usePointStyle:e,pointStyle:n,textAlign:s,color:o}}=i.legend.options;return i._getSortedDatasetMetas().map(r=>{const l=r.controller.getStyle(e?0:void 0),a=xe(l.borderWidth);return{text:t[r.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!r.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(a.width+a.height)/4,strokeStyle:l.borderColor,pointStyle:n||l.pointStyle,rotation:l.rotation,textAlign:s||l.textAlign,borderRadius:0,datasetIndex:r.index}},this)}},title:{color:i=>i.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:i=>!i.startsWith("on"),labels:{_scriptable:i=>!["generateLabels","filter","sort"].includes(i)}}};class hr extends $e{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const n=this.options;if(this.left=0,this.top=0,!n.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;const s=Yt(n.text)?n.text.length:1;this._padding=xe(n.padding);const o=s*ce(n.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){const{top:e,left:n,bottom:s,right:o,options:r}=this,l=r.align;let a=0,c,d,f;return this.isHorizontal()?(d=ye(l,n,o),f=e+t,c=o-n):(r.position==="left"?(d=n+t,f=ye(l,s,e),a=Gt*-.5):(d=o-t,f=ye(l,e,s),a=Gt*.5),c=s-e),{titleX:d,titleY:f,maxWidth:c,rotation:a}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const n=ce(e.font),o=n.lineHeight/2+this._padding.top,{titleX:r,titleY:l,maxWidth:a,rotation:c}=this._drawArgs(o);Bi(t,e.text,0,0,n,{color:e.color,maxWidth:a,rotation:c,textAlign:ir(e.align),textBaseline:"middle",translation:[r,l]})}}function jp(i,t){const e=new hr({ctx:i.ctx,options:t,chart:i});ve.configure(i,e,t),ve.addBox(i,e),i.titleBlock=e}var Kc={id:"title",_element:hr,start(i,t,e){jp(i,e)},stop(i){const t=i.titleBlock;ve.removeBox(i,t),delete i.titleBlock},beforeUpdate(i,t,e){const n=i.titleBlock;ve.configure(i,n,e),n.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const vs=new WeakMap;var Hp={id:"subtitle",start(i,t,e){const n=new hr({ctx:i.ctx,options:e,chart:i});ve.configure(i,n,e),ve.addBox(i,n),vs.set(i,n)},stop(i){ve.removeBox(i,vs.get(i)),vs.delete(i)},beforeUpdate(i,t,e){const n=vs.get(i);ve.configure(i,n,e),n.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Tn={average(i){if(!i.length)return!1;let t,e,n=0,s=0,o=0;for(t=0,e=i.length;t-1?i.split(` +`):i}function Vp(i,t){const{element:e,datasetIndex:n,index:s}=t,o=i.getDatasetMeta(n).controller,{label:r,value:l}=o.getLabelAndValue(s);return{chart:i,label:r,parsed:o.getParsed(s),raw:i.data.datasets[n].data[s],formattedValue:l,dataset:o.getDataset(),dataIndex:s,datasetIndex:n,element:e}}function Ul(i,t){const e=i.chart.ctx,{body:n,footer:s,title:o}=i,{boxWidth:r,boxHeight:l}=t,a=ce(t.bodyFont),c=ce(t.titleFont),d=ce(t.footerFont),f=o.length,p=s.length,g=n.length,m=xe(t.padding);let _=m.height,y=0,v=n.reduce((k,S)=>k+S.before.length+S.lines.length+S.after.length,0);if(v+=i.beforeBody.length+i.afterBody.length,f&&(_+=f*c.lineHeight+(f-1)*t.titleSpacing+t.titleMarginBottom),v){const k=t.displayColors?Math.max(l,a.lineHeight):a.lineHeight;_+=g*k+(v-g)*a.lineHeight+(v-1)*t.bodySpacing}p&&(_+=t.footerMarginTop+p*d.lineHeight+(p-1)*t.footerSpacing);let w=0;const M=function(k){y=Math.max(y,e.measureText(k).width+w)};return e.save(),e.font=c.string,Bt(i.title,M),e.font=a.string,Bt(i.beforeBody.concat(i.afterBody),M),w=t.displayColors?r+2+t.boxPadding:0,Bt(n,k=>{Bt(k.before,M),Bt(k.lines,M),Bt(k.after,M)}),w=0,e.font=d.string,Bt(i.footer,M),e.restore(),y+=m.width,{width:y,height:_}}function $p(i,t){const{y:e,height:n}=t;return ei.height-n/2?"bottom":"center"}function Yp(i,t,e,n){const{x:s,width:o}=n,r=e.caretSize+e.caretPadding;if(i==="left"&&s+o+r>t.width||i==="right"&&s-o-r<0)return!0}function Up(i,t,e,n){const{x:s,width:o}=e,{width:r,chartArea:{left:l,right:a}}=i;let c="center";return n==="center"?c=s<=(l+a)/2?"left":"right":s<=o/2?c="left":s>=r-o/2&&(c="right"),Yp(c,i,t,e)&&(c="center"),c}function Xl(i,t,e){const n=e.yAlign||t.yAlign||$p(i,e);return{xAlign:e.xAlign||t.xAlign||Up(i,t,e,n),yAlign:n}}function Xp(i,t){let{x:e,width:n}=i;return t==="right"?e-=n:t==="center"&&(e-=n/2),e}function qp(i,t,e){let{y:n,height:s}=i;return t==="top"?n+=e:t==="bottom"?n-=s+e:n-=s/2,n}function ql(i,t,e,n){const{caretSize:s,caretPadding:o,cornerRadius:r}=i,{xAlign:l,yAlign:a}=e,c=s+o,{topLeft:d,topRight:f,bottomLeft:p,bottomRight:g}=Ei(r);let m=Xp(t,l);const _=qp(t,a,c);return a==="center"?l==="left"?m+=c:l==="right"&&(m-=c):l==="left"?m-=Math.max(d,p)+s:l==="right"&&(m+=Math.max(f,g)+s),{x:pe(m,0,n.width-t.width),y:pe(_,0,n.height-t.height)}}function xs(i,t,e){const n=xe(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-n.right:i.x+n.left}function Kl(i){return Qe([],ai(i))}function Kp(i,t,e){return Pi(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function Gl(i,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}class Ko extends $e{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,n=this.options.setContext(this.getContext()),s=n.enabled&&e.options.animation&&n.animations,o=new Pc(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=Kp(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:n}=e,s=n.beforeTitle.apply(this,[t]),o=n.title.apply(this,[t]),r=n.afterTitle.apply(this,[t]);let l=[];return l=Qe(l,ai(s)),l=Qe(l,ai(o)),l=Qe(l,ai(r)),l}getBeforeBody(t,e){return Kl(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const{callbacks:n}=e,s=[];return Bt(t,o=>{const r={before:[],lines:[],after:[]},l=Gl(n,o);Qe(r.before,ai(l.beforeLabel.call(this,o))),Qe(r.lines,l.label.call(this,o)),Qe(r.after,ai(l.afterLabel.call(this,o))),s.push(r)}),s}getAfterBody(t,e){return Kl(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const{callbacks:n}=e,s=n.beforeFooter.apply(this,[t]),o=n.footer.apply(this,[t]),r=n.afterFooter.apply(this,[t]);let l=[];return l=Qe(l,ai(s)),l=Qe(l,ai(o)),l=Qe(l,ai(r)),l}_createItems(t){const e=this._active,n=this.chart.data,s=[],o=[],r=[];let l=[],a,c;for(a=0,c=e.length;at.filter(d,f,p,n))),t.itemSort&&(l=l.sort((d,f)=>t.itemSort(d,f,n))),Bt(l,d=>{const f=Gl(t.callbacks,d);s.push(f.labelColor.call(this,d)),o.push(f.labelPointStyle.call(this,d)),r.push(f.labelTextColor.call(this,d))}),this.labelColors=s,this.labelPointStyles=o,this.labelTextColors=r,this.dataPoints=l,l}update(t,e){const n=this.options.setContext(this.getContext()),s=this._active;let o,r=[];if(!s.length)this.opacity!==0&&(o={opacity:0});else{const l=Tn[n.position].call(this,s,this._eventPosition);r=this._createItems(n),this.title=this.getTitle(r,n),this.beforeBody=this.getBeforeBody(r,n),this.body=this.getBody(r,n),this.afterBody=this.getAfterBody(r,n),this.footer=this.getFooter(r,n);const a=this._size=Ul(this,n),c=Object.assign({},l,a),d=Xl(this.chart,n,c),f=ql(n,c,d,this.chart);this.xAlign=d.xAlign,this.yAlign=d.yAlign,o={opacity:1,x:f.x,y:f.y,width:a.width,height:a.height,caretX:l.x,caretY:l.y}}this._tooltipItems=r,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&n.external&&n.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,n,s){const o=this.getCaretPosition(t,n,s);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,n){const{xAlign:s,yAlign:o}=this,{caretSize:r,cornerRadius:l}=n,{topLeft:a,topRight:c,bottomLeft:d,bottomRight:f}=Ei(l),{x:p,y:g}=t,{width:m,height:_}=e;let y,v,w,M,k,S;return o==="center"?(k=g+_/2,s==="left"?(y=p,v=y-r,M=k+r,S=k-r):(y=p+m,v=y+r,M=k-r,S=k+r),w=y):(s==="left"?v=p+Math.max(a,d)+r:s==="right"?v=p+m-Math.max(c,f)-r:v=this.caretX,o==="top"?(M=g,k=M-r,y=v-r,w=v+r):(M=g+_,k=M+r,y=v+r,w=v-r),S=M),{x1:y,x2:v,x3:w,y1:M,y2:k,y3:S}}drawTitle(t,e,n){const s=this.title,o=s.length;let r,l,a;if(o){const c=nn(n.rtl,this.x,this.width);for(t.x=xs(this,n.titleAlign,n),e.textAlign=c.textAlign(n.titleAlign),e.textBaseline="middle",r=ce(n.titleFont),l=n.titleSpacing,e.fillStyle=n.titleColor,e.font=r.string,a=0;aM!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,Bn(t,{x:y,y:_,w:c,h:a,radius:w}),t.fill(),t.stroke(),t.fillStyle=r.backgroundColor,t.beginPath(),Bn(t,{x:v,y:_+1,w:c-2,h:a-2,radius:w}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(y,_,c,a),t.strokeRect(y,_,c,a),t.fillStyle=r.backgroundColor,t.fillRect(v,_+1,c-2,a-2))}t.fillStyle=this.labelTextColors[n]}drawBody(t,e,n){const{body:s}=this,{bodySpacing:o,bodyAlign:r,displayColors:l,boxHeight:a,boxWidth:c,boxPadding:d}=n,f=ce(n.bodyFont);let p=f.lineHeight,g=0;const m=nn(n.rtl,this.x,this.width),_=function(T){e.fillText(T,m.x(t.x+g),t.y+p/2),t.y+=p+o},y=m.textAlign(r);let v,w,M,k,S,L,C;for(e.textAlign=r,e.textBaseline="middle",e.font=f.string,t.x=xs(this,y,n),e.fillStyle=n.bodyColor,Bt(this.beforeBody,_),g=l&&y!=="right"?r==="center"?c/2+d:c+2+d:0,k=0,L=s.length;k0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,n=this.$animations,s=n&&n.x,o=n&&n.y;if(s||o){const r=Tn[t.position].call(this,this._active,this._eventPosition);if(!r)return;const l=this._size=Ul(this,t),a=Object.assign({},r,this._size),c=Xl(e,t,a),d=ql(t,a,c,e);(s._to!==d.x||o._to!==d.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=l.width,this.height=l.height,this.caretX=r.x,this.caretY=r.y,this._resolveAnimations().update(this,d))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let n=this.opacity;if(!n)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},o={x:this.x,y:this.y};n=Math.abs(n)<.001?0:n;const r=xe(e.padding),l=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&l&&(t.save(),t.globalAlpha=n,this.drawBackground(o,t,s,e),kc(t,e.textDirection),o.y+=r.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),Mc(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const n=this._active,s=t.map(({datasetIndex:l,index:a})=>{const c=this.chart.getDatasetMeta(l);if(!c)throw new Error("Cannot find a dataset at index "+l);return{datasetIndex:l,element:c.data[a],index:a}}),o=!Ts(n,s),r=this._positionChanged(s,e);(o||r)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,n=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,o=this._active||[],r=this._getActiveElements(t,o,e,n),l=this._positionChanged(r,t),a=e||!Ts(r,o)||l;return a&&(this._active=r,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),a}_getActiveElements(t,e,n,s){const o=this.options;if(t.type==="mouseout")return[];if(!s)return e;const r=this.chart.getElementsAtEventForMode(t,o.mode,o,n);return o.reverse&&r.reverse(),r}_positionChanged(t,e){const{caretX:n,caretY:s,options:o}=this,r=Tn[o.position].call(this,t,e);return r!==!1&&(n!==r.x||s!==r.y)}}Ko.positioners=Tn;var Gc={id:"tooltip",_element:Ko,positioners:Tn,afterInit(i,t,e){e&&(i.tooltip=new Ko({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){const t=i.tooltip;if(t&&t._willRender()){const e={tooltip:t};if(i.notifyPlugins("beforeTooltipDraw",e)===!1)return;t.draw(i.ctx),i.notifyPlugins("afterTooltipDraw",e)}},afterEvent(i,t){if(i.tooltip){const e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:ri,title(i){if(i.length>0){const t=i[0],e=t.chart.data.labels,n=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(n>0&&t.dataIndexi!=="filter"&&i!=="itemSort"&&i!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},Gp=Object.freeze({__proto__:null,Decimation:bp,Filler:Bp,Legend:Wp,SubTitle:Hp,Title:Kc,Tooltip:Gc});const Qp=(i,t,e,n)=>(typeof t=="string"?(e=i.push(t)-1,n.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function Zp(i,t,e,n){const s=i.indexOf(t);if(s===-1)return Qp(i,t,e,n);const o=i.lastIndexOf(t);return s!==o?e:s}const Jp=(i,t)=>i===null?null:pe(Math.round(i),0,t);class Nn extends zi{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const n=this.getLabels();for(const{index:s,label:o}of e)n[s]===o&&n.splice(s,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(Rt(t))return null;const n=this.getLabels();return e=isFinite(e)&&n[e]===t?e:Zp(n,t,xt(e,t),this._addedLabels),Jp(e,n.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:n,max:s}=this.getMinMax(!0);this.options.bounds==="ticks"&&(t||(n=0),e||(s=this.getLabels().length-1)),this.min=n,this.max=s}buildTicks(){const t=this.min,e=this.max,n=this.options.offset,s=[];let o=this.getLabels();o=t===0&&e===o.length-1?o:o.slice(t,e+1),this._valueRange=Math.max(o.length-(n?0:1),1),this._startValue=this.min-(n?.5:0);for(let r=t;r<=e;r++)s.push({value:r});return s}getLabelForValue(t){const e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}Nn.id="category";Nn.defaults={ticks:{callback:Nn.prototype.getLabelForValue}};function tg(i,t){const e=[],{bounds:s,step:o,min:r,max:l,precision:a,count:c,maxTicks:d,maxDigits:f,includeBounds:p}=i,g=o||1,m=d-1,{min:_,max:y}=t,v=!Rt(r),w=!Rt(l),M=!Rt(c),k=(y-_)/(f+1);let S=Xr((y-_)/m/g)*g,L,C,T,E;if(S<1e-14&&!v&&!w)return[{value:_},{value:y}];E=Math.ceil(y/S)-Math.floor(_/S),E>m&&(S=Xr(E*S/m/g)*g),Rt(a)||(L=Math.pow(10,a),S=Math.ceil(S*L)/L),s==="ticks"?(C=Math.floor(_/S)*S,T=Math.ceil(y/S)*S):(C=_,T=y),v&&w&&o&&ju((l-r)/o,S/1e3)?(E=Math.round(Math.min((l-r)/S,d)),S=(l-r)/E,C=r,T=l):M?(C=v?r:C,T=w?l:T,E=c-1,S=(T-C)/E):(E=(T-C)/S,Pn(E,Math.round(E),S/1e3)?E=Math.round(E):E=Math.ceil(E));const O=Math.max(qr(S),qr(C));L=Math.pow(10,Rt(a)?O:a),C=Math.round(C*L)/L,T=Math.round(T*L)/L;let N=0;for(v&&(p&&C!==r?(e.push({value:r}),Cs=e?s:a,l=a=>o=n?o:a;if(t){const a=si(s),c=si(o);a<0&&c<0?l(0):a>0&&c>0&&r(0)}if(s===o){let a=1;(o>=Number.MAX_SAFE_INTEGER||s<=Number.MIN_SAFE_INTEGER)&&(a=Math.abs(o*.05)),l(o+a),t||r(s-a)}this.min=s,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:e,stepSize:n}=t,s;return n?(s=Math.ceil(this.max/n)-Math.floor(this.min/n)+1,s>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${n} would result generating up to ${s} ticks. Limiting to 1000.`),s=1e3)):(s=this.computeTickLimit(),e=e||11),e&&(s=Math.min(e,s)),s}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let n=this.getTickLimit();n=Math.max(2,n);const s={maxTicks:n,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,r=tg(s,o);return t.bounds==="ticks"&&ec(r,this,"value"),t.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){const t=this.ticks;let e=this.min,n=this.max;if(super.configure(),this.options.offset&&t.length){const s=(n-e)/Math.max(t.length-1,1)/2;e-=s,n+=s}this._startValue=e,this._endValue=n,this._valueRange=n-e}getLabelForValue(t){return Vn(t,this.chart.options.locale,this.options.ticks.format)}}class Zs extends Ns{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=se(t)?t:0,this.max=se(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,n=Ie(this.options.ticks.minRotation),s=(t?Math.sin(n):Math.cos(n))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/s))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}Zs.id="linear";Zs.defaults={ticks:{callback:qs.formatters.numeric}};function Zl(i){return i/Math.pow(10,Math.floor(Oe(i)))===1}function eg(i,t){const e=Math.floor(Oe(t.max)),n=Math.ceil(t.max/Math.pow(10,e)),s=[];let o=Te(i.min,Math.pow(10,Math.floor(Oe(t.min)))),r=Math.floor(Oe(o)),l=Math.floor(o/Math.pow(10,r)),a=r<0?Math.pow(10,Math.abs(r)):1;do s.push({value:o,major:Zl(o)}),++l,l===10&&(l=1,++r,a=r>=0?1:a),o=Math.round(l*Math.pow(10,r)*a)/a;while(r0?n:null}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=se(t)?Math.max(0,t):null,this.max=se(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let n=this.min,s=this.max;const o=a=>n=t?n:a,r=a=>s=e?s:a,l=(a,c)=>Math.pow(10,Math.floor(Oe(a))+c);n===s&&(n<=0?(o(1),r(10)):(o(l(n,-1)),r(l(s,1)))),n<=0&&o(l(s,-1)),s<=0&&r(l(n,1)),this._zero&&this.min!==this._suggestedMin&&n===l(this.min,0)&&o(l(n,-1)),this.min=n,this.max=s}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},n=eg(e,this);return t.bounds==="ticks"&&ec(n,this,"value"),t.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}getLabelForValue(t){return t===void 0?"0":Vn(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=Oe(t),this._valueRange=Oe(this.max)-Oe(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(Oe(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}pr.id="logarithmic";pr.defaults={ticks:{callback:qs.formatters.logarithmic,major:{enabled:!0}}};function Go(i){const t=i.ticks;if(t.display&&i.display){const e=xe(t.backdropPadding);return xt(t.font&&t.font.size,Pt.font.size)+e.height}return 0}function ig(i,t,e){return e=Yt(e)?e:[e],{w:yd(i,t.string,e),h:e.length*t.lineHeight}}function Jl(i,t,e,n,s){return i===n||i===s?{start:t-e/2,end:t+e/2}:is?{start:t-e,end:t}:{start:t,end:t+e}}function ng(i){const t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),n=[],s=[],o=i._pointLabels.length,r=i.options.pointLabels,l=r.centerPointLabels?Gt/o:0;for(let a=0;at.r&&(l=(n.end-t.r)/o,i.r=Math.max(i.r,t.r+l)),s.startt.b&&(a=(s.end-t.b)/r,i.b=Math.max(i.b,t.b+a))}function og(i,t,e){const n=[],s=i._pointLabels.length,o=i.options,r=Go(o)/2,l=i.drawingArea,a=o.pointLabels.centerPointLabels?Gt/s:0;for(let c=0;c270||e<90)&&(i-=t),i}function cg(i,t){const{ctx:e,options:{pointLabels:n}}=i;for(let s=t-1;s>=0;s--){const o=n.setContext(i.getPointLabelContext(s)),r=ce(o.font),{x:l,y:a,textAlign:c,left:d,top:f,right:p,bottom:g}=i._pointLabelItems[s],{backdropColor:m}=o;if(!Rt(m)){const _=Ei(o.borderRadius),y=xe(o.backdropPadding);e.fillStyle=m;const v=d-y.left,w=f-y.top,M=p-d+y.width,k=g-f+y.height;Object.values(_).some(S=>S!==0)?(e.beginPath(),Bn(e,{x:v,y:w,w:M,h:k,radius:_}),e.fill()):e.fillRect(v,w,M,k)}Bi(e,i._pointLabels[s],l,a+r.lineHeight/2,r,{color:o.color,textAlign:c,textBaseline:"middle"})}}function Qc(i,t,e,n){const{ctx:s}=i;if(e)s.arc(i.xCenter,i.yCenter,t,0,Nt);else{let o=i.getPointPosition(0,t);s.moveTo(o.x,o.y);for(let r=1;r{const s=$t(this.options.pointLabels.callback,[e,n],this);return s||s===0?s:""}).filter((e,n)=>this.chart.getDataVisibility(n))}fit(){const t=this.options;t.display&&t.pointLabels.display?ng(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,n,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((n-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,n,s))}getIndexAngle(t){const e=Nt/(this._pointLabels.length||1),n=this.options.startAngle||0;return Ce(t*e+Ie(n))}getDistanceFromCenterForValue(t){if(Rt(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(Rt(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(d!==0){l=this.getDistanceFromCenterForValue(c.value);const f=s.setContext(this.getContext(d-1));ug(this,f,l,o)}}),n.display){for(t.save(),r=o-1;r>=0;r--){const c=n.setContext(this.getPointLabelContext(r)),{color:d,lineWidth:f}=c;!f||!d||(t.lineWidth=f,t.strokeStyle=d,t.setLineDash(c.borderDash),t.lineDashOffset=c.borderDashOffset,l=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),a=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(a.x,a.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,n=e.ticks;if(!n.display)return;const s=this.getIndexAngle(0);let o,r;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((l,a)=>{if(a===0&&!e.reverse)return;const c=n.setContext(this.getContext(a)),d=ce(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[a].value),c.showLabelBackdrop){t.font=d.string,r=t.measureText(l.label).width,t.fillStyle=c.backdropColor;const f=xe(c.backdropPadding);t.fillRect(-r/2-f.left,-o-d.size/2-f.top,r+f.width,d.size+f.height)}Bi(t,l.label,0,-o,d,{color:c.color})}),t.restore()}drawTitle(){}}Xn.id="radialLinear";Xn.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:qs.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(i){return i},padding:5,centerPointLabels:!1}};Xn.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};Xn.descriptors={angleLines:{_fallback:"grid"}};const Js={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Se=Object.keys(Js);function fg(i,t){return i-t}function ta(i,t){if(Rt(t))return null;const e=i._adapter,{parser:n,round:s,isoWeekday:o}=i._parseOpts;let r=t;return typeof n=="function"&&(r=n(r)),se(r)||(r=typeof n=="string"?e.parse(r,n):e.parse(r)),r===null?null:(s&&(r=s==="week"&&(sn(o)||o===!0)?e.startOf(r,"isoWeek",o):e.startOf(r,s)),+r)}function ea(i,t,e,n){const s=Se.length;for(let o=Se.indexOf(i);o=Se.indexOf(e);o--){const r=Se[o];if(Js[r].common&&i._adapter.diff(s,n,r)>=t-1)return r}return Se[e?Se.indexOf(e):0]}function pg(i){for(let t=Se.indexOf(i)+1,e=Se.length;t=t?e[n]:e[s];i[o]=!0}}function gg(i,t,e,n){const s=i._adapter,o=+s.startOf(t[0].value,n),r=t[t.length-1].value;let l,a;for(l=o;l<=r;l=+s.add(l,1,n))a=e[l],a>=0&&(t[a].major=!0);return t}function na(i,t,e){const n=[],s={},o=t.length;let r,l;for(r=0;r+t.value))}initOffsets(t){let e=0,n=0,s,o;this.options.offset&&t.length&&(s=this.getDecimalForValue(t[0]),t.length===1?e=1-s:e=(this.getDecimalForValue(t[1])-s)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?n=o:n=(o-this.getDecimalForValue(t[t.length-2]))/2);const r=t.length<3?.5:.25;e=pe(e,0,r),n=pe(n,0,r),this._offsets={start:e,end:n,factor:1/(e+1+n)}}_generate(){const t=this._adapter,e=this.min,n=this.max,s=this.options,o=s.time,r=o.unit||ea(o.minUnit,e,n,this._getLabelCapacity(e)),l=xt(o.stepSize,1),a=r==="week"?o.isoWeekday:!1,c=sn(a)||a===!0,d={};let f=e,p,g;if(c&&(f=+t.startOf(f,"isoWeek",a)),f=+t.startOf(f,c?"day":r),t.diff(n,e,r)>1e5*l)throw new Error(e+" and "+n+" are too far apart with stepSize of "+l+" "+r);const m=s.ticks.source==="data"&&this.getDataTimestamps();for(p=f,g=0;p_-y).map(_=>+_)}getLabelForValue(t){const e=this._adapter,n=this.options.time;return n.tooltipFormat?e.format(t,n.tooltipFormat):e.format(t,n.displayFormats.datetime)}_tickFormatFunction(t,e,n,s){const o=this.options,r=o.time.displayFormats,l=this._unit,a=this._majorUnit,c=l&&r[l],d=a&&r[a],f=n[e],p=a&&d&&f&&f.major,g=this._adapter.format(t,s||(p?d:c)),m=o.ticks.callback;return m?$t(m,[g,e,n],this):g}generateTickLabels(t){let e,n,s;for(e=0,n=t.length;e0?l:1}getDataTimestamps(){let t=this._cache.data||[],e,n;if(t.length)return t;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(e=0,n=s.length;e=i[n].pos&&t<=i[s].pos&&({lo:n,hi:s}=di(i,"pos",t)),{pos:o,time:l}=i[n],{pos:r,time:a}=i[s]):(t>=i[n].time&&t<=i[s].time&&({lo:n,hi:s}=di(i,"time",t)),{time:o,pos:l}=i[n],{time:r,pos:a}=i[s]);const c=r-o;return c?l+(a-l)*(t-o)/c:l}class gr extends qn{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=ws(e,this.min),this._tableRange=ws(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:n}=this,s=[],o=[];let r,l,a,c,d;for(r=0,l=t.length;r=e&&c<=n&&s.push(c);if(s.length<2)return[{time:e,pos:0},{time:n,pos:1}];for(r=0,l=s.length;rg[46].id;for(let g=0;g',N=x(),gt&>.c(),V=x(),R=b("div"),B=b("label"),F=b("i"),P=I(H),W=x(),$=b("div"),D=b("input"),A=x(),Y=b("i"),X=x(),K=b("div"),Z=b("button"),J=b("i"),et=I(st),vt=x(),at=b("button"),ut=b("i"),j=I(U),h(s,"class","fa-duotone fa-arrow-right-arrow-left text-3xl text-blue-400 mr-3"),h(r,"class","text-2xl text-blue-200 font-bold"),h(n,"class","flex items-center mb-4"),h(f,"class","capitalize font-semibold text-blue-200 mb-2"),h(w,"type","radio"),h(w,"name","payment"),w.__value="id",Ft(w,w.__value),h(w,"class","hidden peer"),h(k,"class","fa-duotone fa-id-badge text-lg text-blue-400 mr-3"),h(L,"class","text-white font-bold"),h(O,"class","ml-auto hidden peer-checked:block"),h(v,"class","flex items-center cursor-pointer bg-gray-700/50 rounded-lg p-3 border border-gray-600/20 hover:border-blue-400 transition duration-300"),h(_,"class","flex flex-col space-y-4"),h(d,"class","mb-6"),h(F,"class","fa-duotone fa-money-bill-wave text-blue-400 mr-2"),h(B,"class","block text-gray-400 mb-2"),h(D,"type","number"),h(D,"min","1"),h(D,"class","w-full p-3 bg-gray-700/50 text-white pr-10 border border-blue-200/10 rounded-lg focus:outline-none focus:border-blue-400/50 transition-colors duration-500"),h(Y,"class","fa-duotone fa-dollar-sign absolute top-1/2 right-3 transform -translate-y-1/2 text-gray-400"),h($,"class","relative"),h(R,"class","mb-6"),h(J,"class","fa-duotone fa-times-circle mr-2"),h(Z,"class","flex items-center bg-red-600 hover:bg-red-700 text-white py-2 px-4 rounded focus:outline-none"),h(ut,"class","fa-duotone fa-check-circle mr-2"),h(at,"class","flex items-center bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded focus:outline-none"),h(K,"class","flex justify-between items-center mt-6"),h(e,"class","p-8 bg-gray-800 rounded-lg shadow-lg w-96"),h(t,"class","fixed inset-0 flex items-center justify-center bg-black bg-opacity-50"),Xt.p(w)},m(ft,Mt){Q(ft,t,Mt),u(t,e),u(e,n),u(n,s),u(n,o),u(n,r),u(r,a),u(e,c),u(e,d),u(d,f),u(f,g),u(d,m),u(d,_),Et&&Et.m(_,null),u(_,y),u(_,v),u(v,w),w.checked=w.__value===i[10].contactType,u(v,M),u(v,k),u(v,S),u(v,L),u(L,T),u(v,E),u(v,O),u(e,N),gt&>.m(e,null),u(e,V),u(e,R),u(R,B),u(B,F),u(B,P),u(R,W),u(R,$),u($,D),Ft(D,i[10].amount),u($,A),u($,Y),u(e,X),u(e,K),u(K,Z),u(Z,J),u(Z,et),u(K,vt),u(K,at),u(at,ut),u(at,j),mt=!0,jt||(Jt=[tt(w,"change",i[33]),tt(D,"input",i[35]),tt(Z,"click",i[19]),tt(at,"click",i[36])],jt=!0)},p(ft,Mt){(!mt||Mt[0]&32)&&l!==(l=ft[5].transfer_money+"")&&z(a,l),(!mt||Mt[0]&32)&&p!==(p=ft[5].payment_method+"")&&z(g,p),ft[2]?Et?Et.p(ft,Mt):(Et=ua(ft),Et.c(),Et.m(_,y)):Et&&(Et.d(1),Et=null),Mt[0]&1024&&(w.checked=w.__value===ft[10].contactType),(!mt||Mt[0]&32)&&C!==(C=ft[5].id+"")&&z(T,C),ft[10].contactType==="phone"||ft[10].contactType==="id"?gt?gt.p(ft,Mt):(gt=da(ft),gt.c(),gt.m(e,V)):gt&&(gt.d(1),gt=null),(!mt||Mt[0]&32)&&H!==(H=ft[5].amount+"")&&z(P,H),Mt[0]&1024&&ge(D.value)!==ft[10].amount&&Ft(D,ft[10].amount),(!mt||Mt[0]&32)&&st!==(st=ft[5].cancel+"")&&z(et,st),(!mt||Mt[0]&32)&&U!==(U=ft[5].confirm+"")&&z(j,U)},i(ft){mt||(ft&&Wt(()=>{mt&&(kt&&kt.end(1),lt=ee(e,Kt,{duration:250,easing:Tt}),lt.start())}),mt=!0)},o(ft){lt&<.invalidate(),ft&&(kt=be(e,Kt,{duration:250,easing:Tt})),mt=!1},d(ft){ft&&G(t),Et&&Et.d(),gt&>.d(),ft&&kt&&kt.end(),Xt.r(),jt=!1,Ut(Jt)}}}function ua(i){let t,e,n,s,o,r,l=i[5].phone_number+"",a,c,d,f,p,g;return f=Ua(i[32][0]),{c(){t=b("label"),e=b("input"),n=x(),s=b("i"),o=x(),r=b("span"),a=I(l),c=x(),d=b("div"),d.innerHTML='',h(e,"type","radio"),h(e,"name","payment"),e.__value="phone",Ft(e,e.__value),h(e,"class","hidden peer"),h(s,"class","fa-duotone fa-phone text-lg text-blue-400 mr-3"),h(r,"class","text-white font-bold"),h(d,"class","ml-auto hidden peer-checked:block"),h(t,"class","flex items-center cursor-pointer bg-gray-700/50 rounded-lg p-3 border border-gray-600/20 hover:border-blue-400 transition duration-300"),f.p(e)},m(m,_){Q(m,t,_),u(t,e),e.checked=e.__value===i[10].contactType,u(t,n),u(t,s),u(t,o),u(t,r),u(r,a),u(t,c),u(t,d),p||(g=tt(e,"change",i[31]),p=!0)},p(m,_){_[0]&1024&&(e.checked=e.__value===m[10].contactType),_[0]&32&&l!==(l=m[5].phone_number+"")&&z(a,l)},d(m){m&&G(t),f.r(),p=!1,g()}}}function da(i){let t,e,n,s,o,r,l,a,c,d,f;function p(_,y){return _[2]?Ag:Dg}let g=p(i),m=g(i);return{c(){t=b("div"),e=b("label"),n=b("i"),s=x(),m.c(),o=x(),r=b("div"),l=b("input"),a=x(),c=b("i"),h(n,"class","fa-duotone fa-id-card text-blue-400 mr-2"),h(e,"class","block text-gray-400 mb-2"),h(l,"type","number"),h(l,"min","1"),h(l,"class","w-full p-3 bg-gray-700/50 text-white pr-10 border border-blue-200/10 rounded-lg focus:outline-none focus:border-blue-400/50 transition-colors duration-500"),h(c,"class","fa-duotone fa-user absolute top-1/2 right-3 transform -translate-y-1/2 text-gray-400"),h(r,"class","relative"),h(t,"class","mb-6")},m(_,y){Q(_,t,y),u(t,e),u(e,n),u(e,s),m.m(e,null),u(t,o),u(t,r),u(r,l),Ft(l,i[10].idOrPhone),u(r,a),u(r,c),d||(f=tt(l,"input",i[34]),d=!0)},p(_,y){g===(g=p(_))&&m?m.p(_,y):(m.d(1),m=g(_),m&&(m.c(),m.m(e,null))),y[0]&1024&&ge(l.value)!==_[10].idOrPhone&&Ft(l,_[10].idOrPhone)},d(_){_&&G(t),m.d(),d=!1,f()}}}function Dg(i){let t=i[5].id+"",e;return{c(){e=I(t)},m(n,s){Q(n,e,s)},p(n,s){s[0]&32&&t!==(t=n[5].id+"")&&z(e,t)},d(n){n&&G(e)}}}function Ag(i){let t=i[5].id_or_phone_number+"",e;return{c(){e=I(t)},m(n,s){Q(n,e,s)},p(n,s){s[0]&32&&t!==(t=n[5].id_or_phone_number+"")&&z(e,t)},d(n){n&&G(e)}}}function fa(i){let t,e,n,s,o,r,l=i[5].are_you_sure+"",a,c,d,f=i[5].confirm_pay_all_bills+"",p,g,m,_,y,v=i[5].cancel+"",w,M,k,S,L=i[5].confirm+"",C,T,E,O,N,V;return{c(){t=b("div"),e=b("div"),n=b("div"),s=b("i"),o=x(),r=b("h2"),a=I(l),c=x(),d=b("p"),p=I(f),g=x(),m=b("div"),_=b("button"),y=b("i"),w=I(v),M=x(),k=b("button"),S=b("i"),C=I(L),h(s,"class","fa-duotone fa-question-circle text-3xl text-blue-400 mr-3"),h(r,"class","text-2xl text-blue-200 font-bold"),h(n,"class","flex items-center mb-4"),h(d,"class","text-gray-300 mb-6"),h(y,"class","fa-duotone fa-times-circle mr-2"),h(_,"class","flex items-center bg-red-600 hover:bg-red-700 text-white py-2 px-4 rounded focus:outline-none"),h(S,"class","fa-duotone fa-check-circle mr-2"),h(k,"class","flex items-center bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded focus:outline-none"),h(m,"class","flex justify-between items-center"),h(e,"class","bg-gray-700 p-8 rounded-lg shadow-lg w-96"),h(t,"class","fixed inset-0 flex items-center justify-center bg-black bg-opacity-50")},m(R,B){Q(R,t,B),u(t,e),u(e,n),u(n,s),u(n,o),u(n,r),u(r,a),u(e,c),u(e,d),u(d,p),u(e,g),u(e,m),u(m,_),u(_,y),u(_,w),u(m,M),u(m,k),u(k,S),u(k,C),O=!0,N||(V=[tt(_,"click",i[37]),tt(k,"click",i[38])],N=!0)},p(R,B){(!O||B[0]&32)&&l!==(l=R[5].are_you_sure+"")&&z(a,l),(!O||B[0]&32)&&f!==(f=R[5].confirm_pay_all_bills+"")&&z(p,f),(!O||B[0]&32)&&v!==(v=R[5].cancel+"")&&z(w,v),(!O||B[0]&32)&&L!==(L=R[5].confirm+"")&&z(C,L)},i(R){O||(R&&Wt(()=>{O&&(E&&E.end(1),T=ee(e,Kt,{duration:250,easing:Tt}),T.start())}),O=!0)},o(R){T&&T.invalidate(),R&&(E=be(e,Kt,{duration:250,easing:Tt})),O=!1},d(R){R&&G(t),R&&E&&E.end(),N=!1,Ut(V)}}}function Pg(i){let t,e,n,s,o=i[5].total_balance+"",r,l,a,c=i[1].toLocaleString(i[6].lang,{style:"currency",currency:i[6].currency,minimumFractionDigits:0})+"",d,f,p,g,m=i[5].quick_actions+"",_,y,v,w,M,k,S,L=i[5].transfer_money+"",C,T,E,O=i[5].easy_transfer+"",N,V,R,B=i[5].transfer+"",F,H,P,W,$,D,A=i[5].pay_bills+"",Y,X,K,Z=i[5].pay_pending_bills+"",J,st,et,vt=i[5].pay+"",at,ut,U,j,lt,kt,mt=i[5].withdraw_all_money+"",Xt,jt,Jt,Et=i[5].withdraw_all_from_account+"",gt,ft,Mt,Qt=i[5].withdraw+"",dt,Ht,ue,de,De,Ae,ke=i[5].deposit_cash+"",_e,me,Pe,q=i[5].deposit_all_cash+"",bt,Ct,_t,Zt=i[5].deposit+"",Lt,we,Ot,ie,Vt,nt,zt,ht,Me=i[5].weekly_summary+"",pi,gi,It,Ye,Ni,Ci=i[5].income+"",Fe,un,wt,ne,Ue,to,Kn=i[5].expenses+"",eo,mr,dn,br,Wi,ji,io,_r,no,Gn=i[5].report+"",so,yr,oo,ro,vr,Hi,Vi,$i,lo,xr,Qn,Zn=i[5].latest_transactions+"",ao,wr,Jn,ts,es=i[4].transactions.length+"",co,kr,fn,Mr,Yi,Ui,Xi,uo,Sr,is,ns=i[5].unpaid_bills+"",fo,Dr,ss,os,rs=i[8].length+"",ho,Ar,hn,po,Pr,go,mo,Cr;function Lr(ot,St){return ot[7].totalReceived!==void 0?yg:_g}let ls=Lr(i),Xe=ls(i);function Tr(ot,St){return ot[7].totalUsed!==void 0?xg:vg}let as=Tr(i),qe=as(i);function Or(ot,St){return ot[4].transactions.length>0?kg:wg}let cs=Or(i),Ke=cs(i);function Rr(ot,St){return ot[8].length>0?Sg:Mg}let us=Rr(i),Ge=us(i),fe=i[9]&&ca(i),he=i[11]&&fa(i);return{c(){t=b("div"),e=b("div"),n=b("div"),s=b("div"),r=I(o),l=x(),a=b("div"),d=I(c),f=x(),p=b("div"),g=b("div"),_=I(m),y=x(),v=b("div"),w=b("div"),M=b("i"),k=x(),S=b("div"),C=I(L),T=x(),E=b("div"),N=I(O),V=x(),R=b("button"),F=I(B),H=x(),P=b("div"),W=b("i"),$=x(),D=b("div"),Y=I(A),X=x(),K=b("div"),J=I(Z),st=x(),et=b("button"),at=I(vt),ut=x(),U=b("div"),j=b("i"),lt=x(),kt=b("div"),Xt=I(mt),jt=x(),Jt=b("div"),gt=I(Et),ft=x(),Mt=b("button"),dt=I(Qt),Ht=x(),ue=b("div"),de=b("i"),De=x(),Ae=b("div"),_e=I(ke),me=x(),Pe=b("div"),bt=I(q),Ct=x(),_t=b("button"),Lt=I(Zt),we=x(),Ot=b("div"),ie=b("div"),Vt=b("div"),nt=b("i"),zt=x(),ht=b("span"),pi=I(Me),gi=x(),It=b("div"),Ye=b("div"),Ni=b("span"),Fe=I(Ci),un=x(),wt=b("span"),Xe.c(),ne=x(),Ue=b("div"),to=b("span"),eo=I(Kn),mr=x(),dn=b("span"),qe.c(),br=x(),Wi=b("div"),ji=b("div"),io=b("i"),_r=x(),no=b("span"),so=I(Gn),yr=x(),oo=b("div"),ro=b("canvas"),vr=x(),Hi=b("div"),Vi=b("div"),$i=b("div"),lo=b("i"),xr=x(),Qn=b("span"),ao=I(Zn),wr=x(),Jn=b("div"),ts=b("span"),co=I(es),kr=x(),fn=b("div"),Ke.c(),Mr=x(),Yi=b("div"),Ui=b("div"),Xi=b("div"),uo=b("i"),Sr=x(),is=b("span"),fo=I(ns),Dr=x(),ss=b("div"),os=b("span"),ho=I(rs),Ar=x(),hn=b("div"),Ge.c(),Pr=x(),fe&&fe.c(),go=x(),he&&he.c(),h(s,"class","text-xl mb-4 text-blue-200"),h(a,"class","text-3xl font-bold mb-8 text-blue-300"),h(n,"class","mb-8"),h(g,"class","text-2xl mb-4 text-blue-200"),h(M,"class","fa-duotone fa-arrow-right-arrow-left text-4xl mb-2 text-blue-400"),h(S,"class","text-2xl font-bold mb-2 text-blue-200"),h(E,"class","text-sm mb-2 text-gray-400"),h(R,"class","bg-blue-600/10 border border-blue-500 hover:bg-blue-800/50 text-white font-bold py-2 px-4 mt-4 duration-500 rounded-lg cursor-pointer"),h(w,"class","flex flex-col items-center bg-gray-700 rounded-xl p-4 w-[280px]"),h(W,"class","fa-duotone fa-file-invoice-dollar text-4xl mb-2 text-blue-400"),h(D,"class","text-2xl font-bold mb-2 text-blue-200"),h(K,"class","text-sm mb-2 text-gray-400"),h(et,"class","relative -bottom-auto bg-blue-600/10 border border-blue-500 hover:bg-blue-800/50 text-white font-bold py-2 px-8 mt-4 duration-500 rounded-lg cursor-pointer"),h(P,"class","flex flex-col items-center bg-gray-700 rounded-xl p-4 w-[280px]"),h(j,"class","fa-duotone fa-credit-card text-4xl mb-2 text-blue-400"),h(kt,"class","text-2xl font-bold mb-2 text-blue-200"),h(Jt,"class","text-sm mb-2 text-gray-400"),h(Mt,"class","bg-blue-600/10 border border-blue-500 hover:bg-blue-800/50 text-white font-bold py-2 px-4 mt-4 duration-500 rounded-lg cursor-pointer"),h(U,"class","flex flex-col items-center bg-gray-700 rounded-xl p-4 w-[280px]"),h(de,"class","fa-duotone fa-piggy-bank text-4xl mb-2 text-blue-400"),h(Ae,"class","text-2xl font-bold mb-2 text-blue-200"),h(Pe,"class","text-sm mb-2 text-gray-400"),h(_t,"class","bg-blue-600/10 border border-blue-500 hover:bg-blue-800/50 text-white font-bold py-2 px-4 mt-4 duration-500 rounded-lg cursor-pointer"),h(ue,"class","flex flex-col items-center bg-gray-700 rounded-xl p-4 w-[280px]"),h(v,"class","flex space-x-4"),h(p,"class","mb-2"),h(nt,"class","fa-duotone fa-calendar-week text-2xl text-blue-400 mr-2"),h(ht,"class","text-blue-200 font-bold text-xl"),h(Vt,"class","flex items-center mb-4"),h(wt,"class","text-blue-400"),h(Ye,"class","flex justify-between border-b border-gray-600 pb-2"),h(dn,"class","text-red-400"),h(Ue,"class","flex justify-between border-b border-gray-600 pb-2"),h(io,"class","fa-duotone fa-chart-bar text-xl text-blue-400 mr-2"),h(ji,"class","flex items-center mb-2"),h(Wi,"class","mt-6"),h(It,"class","space-y-4 border border-dashed border-blue-400 rounded-lg p-4"),h(ie,"class","bg-gray-700 rounded-xl p-6 w-[380px] h-[400px] flex-none"),h(lo,"class","fa-duotone fa-file-invoice text-2xl text-blue-400 mr-2"),h(Qn,"class","text-blue-200 font-bold text-xl"),h($i,"class","flex items-center"),h(ts,"class","text-white text-sm"),h(Jn,"class","bg-gray-600 rounded-full px-2 py-1"),h(Vi,"class","flex justify-between items-center mb-4"),h(fn,"class","space-y-3 border border-dashed border-blue-400 rounded-lg p-4 h-[310px]"),h(Hi,"class","bg-gray-700 rounded-xl p-6 w-[380px] h-[400px] flex-none"),h(uo,"class","fa-duotone fa-file-exclamation text-xl text-blue-400 mr-2"),h(is,"class","text-blue-200 font-bold text-lg"),h(Xi,"class","flex items-center"),h(os,"class","text-white text-sm"),h(ss,"class","bg-gray-600 rounded-full px-2 py-1"),h(Ui,"class","flex justify-between items-center mb-2"),h(hn,"class","space-y-0 border border-dashed border-blue-400 p-1 rounded-lg overflow-auto mt-6 h-[310px]"),h(Yi,"class","bg-gray-700 rounded-xl p-4 w-[380px] h-[400px] flex-none"),h(Ot,"class","flex space-x-4 mt-4"),h(e,"class","absolute top-0 left-[240px] w-screen h-screen overflow-hidden p-6 text-white"),h(t,"class","absolute w-full h-full bg-gray-800")},m(ot,St){Q(ot,t,St),u(t,e),u(e,n),u(n,s),u(s,r),u(n,l),u(n,a),u(a,d),u(e,f),u(e,p),u(p,g),u(g,_),u(p,y),u(p,v),u(v,w),u(w,M),u(w,k),u(w,S),u(S,C),u(w,T),u(w,E),u(E,N),u(w,V),u(w,R),u(R,F),u(v,H),u(v,P),u(P,W),u(P,$),u(P,D),u(D,Y),u(P,X),u(P,K),u(K,J),u(P,st),u(P,et),u(et,at),u(v,ut),u(v,U),u(U,j),u(U,lt),u(U,kt),u(kt,Xt),u(U,jt),u(U,Jt),u(Jt,gt),u(U,ft),u(U,Mt),u(Mt,dt),u(v,Ht),u(v,ue),u(ue,de),u(ue,De),u(ue,Ae),u(Ae,_e),u(ue,me),u(ue,Pe),u(Pe,bt),u(ue,Ct),u(ue,_t),u(_t,Lt),u(e,we),u(e,Ot),u(Ot,ie),u(ie,Vt),u(Vt,nt),u(Vt,zt),u(Vt,ht),u(ht,pi),u(ie,gi),u(ie,It),u(It,Ye),u(Ye,Ni),u(Ni,Fe),u(Ye,un),u(Ye,wt),Xe.m(wt,null),u(It,ne),u(It,Ue),u(Ue,to),u(to,eo),u(Ue,mr),u(Ue,dn),qe.m(dn,null),u(It,br),u(It,Wi),u(Wi,ji),u(ji,io),u(ji,_r),u(ji,no),u(no,so),u(Wi,yr),u(Wi,oo),u(oo,ro),i[28](ro),u(Ot,vr),u(Ot,Hi),u(Hi,Vi),u(Vi,$i),u($i,lo),u($i,xr),u($i,Qn),u(Qn,ao),u(Vi,wr),u(Vi,Jn),u(Jn,ts),u(ts,co),u(Hi,kr),u(Hi,fn),Ke.m(fn,null),u(Ot,Mr),u(Ot,Yi),u(Yi,Ui),u(Ui,Xi),u(Xi,uo),u(Xi,Sr),u(Xi,is),u(is,fo),u(Ui,Dr),u(Ui,ss),u(ss,os),u(os,ho),u(Yi,Ar),u(Yi,hn),Ge.m(hn,null),u(t,Pr),fe&&fe.m(t,null),u(t,go),he&&he.m(t,null),mo||(Cr=[tt(R,"click",i[18]),tt(et,"click",i[25]),tt(Mt,"click",i[26]),tt(_t,"click",i[27])],mo=!0)},p(ot,St){St[0]&32&&o!==(o=ot[5].total_balance+"")&&z(r,o),St[0]&66&&c!==(c=ot[1].toLocaleString(ot[6].lang,{style:"currency",currency:ot[6].currency,minimumFractionDigits:0})+"")&&z(d,c),St[0]&32&&m!==(m=ot[5].quick_actions+"")&&z(_,m),St[0]&32&&L!==(L=ot[5].transfer_money+"")&&z(C,L),St[0]&32&&O!==(O=ot[5].easy_transfer+"")&&z(N,O),St[0]&32&&B!==(B=ot[5].transfer+"")&&z(F,B),St[0]&32&&A!==(A=ot[5].pay_bills+"")&&z(Y,A),St[0]&32&&Z!==(Z=ot[5].pay_pending_bills+"")&&z(J,Z),St[0]&32&&vt!==(vt=ot[5].pay+"")&&z(at,vt),St[0]&32&&mt!==(mt=ot[5].withdraw_all_money+"")&&z(Xt,mt),St[0]&32&&Et!==(Et=ot[5].withdraw_all_from_account+"")&&z(gt,Et),St[0]&32&&Qt!==(Qt=ot[5].withdraw+"")&&z(dt,Qt),St[0]&32&&ke!==(ke=ot[5].deposit_cash+"")&&z(_e,ke),St[0]&32&&q!==(q=ot[5].deposit_all_cash+"")&&z(bt,q),St[0]&32&&Zt!==(Zt=ot[5].deposit+"")&&z(Lt,Zt),St[0]&32&&Me!==(Me=ot[5].weekly_summary+"")&&z(pi,Me),St[0]&32&&Ci!==(Ci=ot[5].income+"")&&z(Fe,Ci),ls===(ls=Lr(ot))&&Xe?Xe.p(ot,St):(Xe.d(1),Xe=ls(ot),Xe&&(Xe.c(),Xe.m(wt,null))),St[0]&32&&Kn!==(Kn=ot[5].expenses+"")&&z(eo,Kn),as===(as=Tr(ot))&&qe?qe.p(ot,St):(qe.d(1),qe=as(ot),qe&&(qe.c(),qe.m(dn,null))),St[0]&32&&Gn!==(Gn=ot[5].report+"")&&z(so,Gn),St[0]&32&&Zn!==(Zn=ot[5].latest_transactions+"")&&z(ao,Zn),St[0]&16&&es!==(es=ot[4].transactions.length+"")&&z(co,es),cs===(cs=Or(ot))&&Ke?Ke.p(ot,St):(Ke.d(1),Ke=cs(ot),Ke&&(Ke.c(),Ke.m(fn,null))),St[0]&32&&ns!==(ns=ot[5].unpaid_bills+"")&&z(fo,ns),St[0]&256&&rs!==(rs=ot[8].length+"")&&z(ho,rs),us===(us=Rr(ot))&&Ge?Ge.p(ot,St):(Ge.d(1),Ge=us(ot),Ge&&(Ge.c(),Ge.m(hn,null))),ot[9]?fe?(fe.p(ot,St),St[0]&512&&rt(fe,1)):(fe=ca(ot),fe.c(),rt(fe,1),fe.m(t,go)):fe&&(le(),pt(fe,1,1,()=>{fe=null}),ae()),ot[11]?he?(he.p(ot,St),St[0]&2048&&rt(he,1)):(he=fa(ot),he.c(),rt(he,1),he.m(t,null)):he&&(le(),pt(he,1,1,()=>{he=null}),ae())},i(ot){ot&&(po||Wt(()=>{po=ee(e,He,{duration:1e3,easing:Tt}),po.start()})),rt(fe),rt(he)},o(ot){pt(fe),pt(he)},d(ot){ot&&G(t),Xe.d(),qe.d(),i[28](null),Ke.d(),Ge.d(),fe&&fe.d(),he&&he.d(),mo=!1,Ut(Cr)}}}function Cg(i,t,e){let n,s,o,r,l,a,c,d,f,p;it(i,Be,j=>e(5,n=j)),it(i,fi,j=>e(0,s=j)),it(i,ni,j=>e(1,o=j)),it(i,zo,j=>e(24,r=j)),it(i,Ai,j=>e(6,l=j));let g=Ls;it(i,g,j=>e(8,c=j));let m=!1,_=ct(!1);it(i,_,j=>e(11,p=j));let y=ct(!1);it(i,y,j=>e(9,d=j));let v=ct({idOrPhone:"",amount:0,confirm:!1,contactType:"none"});it(i,v,j=>e(10,f=j));let w=ct({totalReceived:0,totalUsed:0});it(i,w,j=>e(7,a=j));let M,k;async function S(){try{const j=await Dt("ps-banking:client:getWeeklySummary",{});j&&w.set(j)}catch(j){console.error(j)}}async function L(){try{const j=await Dt("ps-banking:client:getMoneyTypes",{}),lt=j.find(mt=>mt.name==="bank"),kt=j.find(mt=>mt.name==="cash");lt&&ni.set(lt.amount),kt&&fi.set(kt.amount)}catch(j){console.error(j)}}async function C(){await Dt("ps-banking:client:payAllBills",{})?(await O(),yt(n.pay_all_bills_success,n.payment_completed,"money-bill")):yt(n.pay_all_bills_error,n.error,"circle-exclamation")}function T(){y.set(!0)}function E(){y.set(!1),v.set({idOrPhone:"",amount:0,confirm:!1,contactType:"none"})}async function O(){try{const j=await Dt("ps-banking:client:getBills",{});Ls.set(j)}catch(j){console.error(j)}}async function N(){try{const j=await Dt("ps-banking:client:getHistory",{});zo.set(j)}catch(j){console.error(j)}}async function V(j,lt,kt){try{const mt=await Dt("ps-banking:client:transferMoney",{id:j,amount:lt,method:kt});mt.success?yt(mt.message,n.payment_completed,"user"):yt(mt.message,n.error,"user")}catch(mt){console.error(mt)}v.update(mt=>(mt.confirm=!0,mt)),y.set(!1),v.set({idOrPhone:"",amount:0,confirm:!1,contactType:"none"})}let R={balance:o,cash:s,transactions:r};async function B(){try{await Dt("ps-banking:client:ATMwithdraw",{amount:o})&&P()}catch(j){console.error(j)}}async function F(){try{await Dt("ps-banking:client:ATMdeposit",{amount:s})&&P()}catch(j){console.error(j)}}function H(){k&&e(23,M=new ln(k,{type:"bar",data:{labels:[n.income,n.expenses],datasets:[{label:n.weekly_summary,data:[0,0],backgroundColor:["#3b82f6","#ef4444"]}]},options:{responsive:!0,scales:{y:{beginAtZero:!0}}}}))}async function P(){await O(),await N(),await S(),await L()}async function W(){try{const j=await Dt("ps-banking:client:phoneOption",{});e(2,m=j)}catch(j){console.error(j)}}Di(async()=>{H(),P(),P(),W()});const $=[[]],D=()=>{_.set(!0)},A=()=>{o<=0?yt(n.no_money_on_account,n.error,"credit-card"):(yt(n.withdraw_all_success,n.success,"credit-card"),setTimeout(()=>{B()},200))},Y=()=>{s<=0?yt(n.no_cash_on_you,n.error,"coins"):(yt(n.deposit_all_success,n.success,"coins"),setTimeout(()=>{F()},200))};function X(j){Fo[j?"unshift":"push"](()=>{k=j,e(3,k)})}const K=()=>{Ze.set(!1),Je.set(!1),ti.set(!0),ei.set(!1)},Z=()=>{Ze.set(!1),Je.set(!0),ti.set(!1),ei.set(!1)};function J(){f.contactType=this.__value,v.set(f)}function st(){f.contactType=this.__value,v.set(f)}function et(){f.idOrPhone=ge(this.value),v.set(f)}function vt(){f.amount=ge(this.value),v.set(f)}const at=async()=>{V(f.idOrPhone,f.amount,f.contactType)},ut=()=>{_.set(!1)},U=async()=>{c.length>0?(await C(),_.set(!1)):(_.set(!1),yt(n.pay_all_bills_error,n.error,"circle-exclamation"))};return i.$$.update=()=>{i.$$.dirty[0]&16777219&&e(4,R={balance:o,cash:s,transactions:r}),i.$$.dirty[0]&8388608&&w.subscribe(j=>{M&&(e(23,M.data.datasets[0].data=[j.totalReceived,j.totalUsed],M),M.update())})},[s,o,m,k,R,n,l,a,c,d,f,p,g,_,y,v,w,C,T,E,V,B,F,M,r,D,A,Y,X,K,Z,J,$,st,et,vt,at,ut,U]}class Lg extends je{constructor(t){super(),We(this,t,Cg,Pg,Ee,{},null,[-1,-1])}}function ha(i,t,e){const n=i.slice();return n[10]=t[e],n}function pa(i){let t,e,n,s=i[3].pay_invoice+"",o,r,l;function a(){return i[9](i[10])}return{c(){t=b("button"),e=b("i"),n=x(),o=I(s),h(e,"class","fa-duotone fa-money-check-edit text-lg mr-2"),h(t,"class","bg-blue-600/10 border border-blue-500 hover:bg-blue-800/50 text-white font-bold py-2 px-4 rounded-lg flex items-center transition-colors duration-300")},m(c,d){Q(c,t,d),u(t,e),u(t,n),u(t,o),r||(l=tt(t,"click",a),r=!0)},p(c,d){i=c,d&8&&s!==(s=i[3].pay_invoice+"")&&z(o,s)},d(c){c&&G(t),r=!1,l()}}}function ga(i,t){let e,n,s,o,r,l,a=t[10].description+"",c,d,f=t[10].id+"",p,g,m,_,y,v,w=t[10].type+"",M,k,S,L,C,T,E=ma(t[10].date)+"",O,N,V,R,B,F,H=t[10].isIncome?"+":"-",P,W,$=t[10].amount.toLocaleString(t[4].lang,{style:"currency",currency:t[4].currency,minimumFractionDigits:0})+"",D,A,Y,X,K,Z,J=!t[10].isPaid&&pa(t);return{key:i,first:null,c(){e=b("div"),n=b("div"),s=b("div"),o=b("i"),r=x(),l=b("span"),c=I(a),d=I(" #"),p=I(f),g=x(),m=b("div"),_=b("i"),y=x(),v=b("span"),M=I(w),k=x(),S=b("div"),L=b("i"),C=x(),T=b("span"),O=I(E),N=x(),V=b("div"),R=b("span"),B=b("i"),F=x(),P=I(H),W=x(),D=I($),Y=x(),J&&J.c(),X=x(),h(o,"class","fa-duotone fa-file-invoice text-2xl text-[#f1f5f9]"),h(l,"class","font-semibold text-[#f1f5f9]"),h(s,"class","flex items-center space-x-2"),h(_,"class","fa-duotone fa-user text-sm text-gray-400"),h(v,"class","text-sm text-gray-400"),h(m,"class","flex items-center space-x-2"),h(L,"class","fa-duotone fa-clock text-xs text-gray-500"),h(T,"class","text-xs text-gray-500"),h(S,"class","flex items-center space-x-2"),h(n,"class","flex flex-col space-y-1"),h(B,"class","fa-duotone fa-coins text-lg text-gray-400 mr-2"),h(R,"class",A=`text-lg font-bold ${t[10].isIncome?"text-green-500":"text-red-500"}`),h(V,"class","text-right flex flex-col items-end space-y-1"),h(e,"class","p-4 bg-[#334155] rounded-lg flex justify-between items-center"),this.first=e},m(st,et){Q(st,e,et),u(e,n),u(n,s),u(s,o),u(s,r),u(s,l),u(l,c),u(l,d),u(l,p),u(n,g),u(n,m),u(m,_),u(m,y),u(m,v),u(v,M),u(n,k),u(n,S),u(S,L),u(S,C),u(S,T),u(T,O),u(e,N),u(e,V),u(V,R),u(R,B),u(R,F),u(R,P),u(R,W),u(R,D),u(V,Y),J&&J.m(V,null),u(e,X),Z=!0},p(st,et){t=st,(!Z||et&4)&&a!==(a=t[10].description+"")&&z(c,a),(!Z||et&4)&&f!==(f=t[10].id+"")&&z(p,f),(!Z||et&4)&&w!==(w=t[10].type+"")&&z(M,w),(!Z||et&4)&&E!==(E=ma(t[10].date)+"")&&z(O,E),(!Z||et&4)&&H!==(H=t[10].isIncome?"+":"-")&&z(P,H),(!Z||et&20)&&$!==($=t[10].amount.toLocaleString(t[4].lang,{style:"currency",currency:t[4].currency,minimumFractionDigits:0})+"")&&z(D,$),(!Z||et&4&&A!==(A=`text-lg font-bold ${t[10].isIncome?"text-green-500":"text-red-500"}`))&&h(R,"class",A),t[10].isPaid?J&&(J.d(1),J=null):J?J.p(t,et):(J=pa(t),J.c(),J.m(V,null))},i(st){Z||(K&&K.end(1),Z=!0)},o(st){st&&(K=be(e,He,{duration:1e3,easing:Tt})),Z=!1},d(st){st&&G(e),J&&J.d(),st&&K&&K.end()}}}function Tg(i){let t,e,n,s,o,r,l,a,c=i[3].bills+"",d,f,p,g,m,_,y=i[3].total+"",v,w,M,k=i[1].length+"",S,L,C,T,E,O,N,V,R,B=[],F=new Map,H,P,W,$,D=oe(i[2]);const A=Y=>Y[10].id;for(let Y=0;Y{H=ee(e,He,{duration:1e3,easing:Tt}),H.start()})),P=!0}},o(Y){for(let X=0;Xe(3,s=g)),it(i,Ai,g=>e(4,l=g));let a=Ls;it(i,a,g=>e(1,r=g));let c=ct("");it(i,c,g=>e(0,o=g));async function d(g){try{return await Dt("ps-banking:client:payBill",{id:g.id})?(yt(`${s.pay_invoice} #${g.id} ${s.from} ${g.type}`,s.payment_completed,"coins"),a.update(_=>{const y=_.findIndex(v=>g.id===v.id);return y!==-1&&_.splice(y,1),_}),!0):(yt(`${s.no_money_on_account}`,`${s.error}`,"coins"),!1)}catch(m){return console.error(m),!1}}Di(async()=>{try{const g=await Dt("ps-banking:client:getBills",{});Ls.set(g)}catch(g){console.error(g)}});function f(){o=this.value,c.set(o)}const p=g=>{d(g)};return i.$$.update=()=>{i.$$.dirty&3&&e(2,n=r.filter(g=>g.description.toLowerCase().includes(o.toLowerCase())||g.type.toLowerCase().includes(o.toLowerCase())))},[o,r,n,s,l,a,c,d,f,p]}class Rg extends je{constructor(t){super(),We(this,t,Og,Tg,Ee,{})}}function ba(i,t,e){const n=i.slice();return n[13]=t[e],n}function _a(i,t){let e,n,s,o,r,l,a,c,d,f,p,g=t[13].description+"",m,_,y=t[13].id+"",v,w,M,k,S,L,C=t[13].type+"",T,E,O,N,V,R,B=va(t[13].date)+"",F,H,P,W,$,D,A,Y=t[13].isIncome?"+":"-",X,K,Z=t[13].amount.toLocaleString(t[3].lang,{style:"currency",currency:t[3].currency,minimumFractionDigits:0})+"",J,st,et,vt,at;return{key:i,first:null,c(){e=b("div"),n=b("div"),s=b("div"),o=b("i"),l=x(),a=b("div"),c=b("div"),d=b("i"),f=x(),p=b("p"),m=I(g),_=I(" #"),v=I(y),w=x(),M=b("div"),k=b("i"),S=x(),L=b("p"),T=I(C),E=x(),O=b("div"),N=b("i"),V=x(),R=b("p"),F=I(B),H=x(),P=b("div"),W=b("div"),$=b("i"),D=x(),A=b("p"),X=I(Y),K=x(),J=I(Z),et=x(),h(o,"class",r=`fa-duotone ${t[13].isIncome?"fa-arrow-down-to-arc":"fa-arrow-up-from-arc"} text-xl mr-3 ${t[13].isIncome?"text-green-400":"text-red-400"}`),h(d,"class","fa-duotone fa-file-invoice text-lg text-gray-300 mr-2"),h(p,"class","text-lg font-bold"),h(c,"class","flex items-center"),h(k,"class","fa-duotone fa-exchange-alt text-sm text-gray-400 mr-2"),h(L,"class","text-sm text-gray-400"),h(M,"class","flex items-center"),h(N,"class","fa-duotone fa-clock text-xs text-gray-500 mr-2"),h(R,"class","text-xs text-gray-500"),h(O,"class","flex items-center"),h(s,"class","flex items-center"),h($,"class","fa-duotone fa-coins text-lg text-gray-400 mr-2"),h(A,"class",st=`text-lg font-bold ${t[13].isIncome?"text-green-500":"text-red-500"}`),h(W,"class","flex items-center"),h(P,"class","text-right"),h(n,"class","flex justify-between items-center"),h(e,"class","bg-[#334155] p-4 rounded-lg shadow-md transition duration-300 border border-blue-200/5"),this.first=e},m(ut,U){Q(ut,e,U),u(e,n),u(n,s),u(s,o),u(s,l),u(s,a),u(a,c),u(c,d),u(c,f),u(c,p),u(p,m),u(p,_),u(p,v),u(a,w),u(a,M),u(M,k),u(M,S),u(M,L),u(L,T),u(a,E),u(a,O),u(O,N),u(O,V),u(O,R),u(R,F),u(n,H),u(n,P),u(P,W),u(W,$),u(W,D),u(W,A),u(A,X),u(A,K),u(A,J),u(e,et),at=!0},p(ut,U){t=ut,(!at||U&2&&r!==(r=`fa-duotone ${t[13].isIncome?"fa-arrow-down-to-arc":"fa-arrow-up-from-arc"} text-xl mr-3 ${t[13].isIncome?"text-green-400":"text-red-400"}`))&&h(o,"class",r),(!at||U&2)&&g!==(g=t[13].description+"")&&z(m,g),(!at||U&2)&&y!==(y=t[13].id+"")&&z(v,y),(!at||U&2)&&C!==(C=t[13].type+"")&&z(T,C),(!at||U&2)&&B!==(B=va(t[13].date)+"")&&z(F,B),(!at||U&2)&&Y!==(Y=t[13].isIncome?"+":"-")&&z(X,Y),(!at||U&10)&&Z!==(Z=t[13].amount.toLocaleString(t[3].lang,{style:"currency",currency:t[3].currency,minimumFractionDigits:0})+"")&&z(J,Z),(!at||U&2&&st!==(st=`text-lg font-bold ${t[13].isIncome?"text-green-500":"text-red-500"}`))&&h(A,"class",st)},i(ut){at||(vt&&vt.end(1),at=!0)},o(ut){ut&&(vt=be(e,He,{duration:500})),at=!1},d(ut){ut&&G(e),ut&&vt&&vt.end()}}}function ya(i){let t,e,n,s,o,r,l=i[2].are_you_sure+"",a,c,d,f=i[2].delete_confirmation+"",p,g,m,_,y,v=i[2].cancel+"",w,M,k,S,L=i[2].confirm+"",C,T,E,O,N,V;return{c(){t=b("div"),e=b("div"),n=b("div"),s=b("i"),o=x(),r=b("h2"),a=I(l),c=x(),d=b("p"),p=I(f),g=x(),m=b("div"),_=b("button"),y=b("i"),w=I(v),M=x(),k=b("button"),S=b("i"),C=I(L),h(s,"class","fa-duotone fa-question-circle text-3xl text-blue-400 mr-3"),h(r,"class","text-2xl text-blue-200 font-bold"),h(n,"class","flex items-center mb-4"),h(d,"class","text-gray-300 mb-6"),h(y,"class","fa-duotone fa-times-circle mr-2"),h(_,"class","flex items-center bg-red-600 hover:bg-red-700 text-white py-2 px-4 rounded focus:outline-none"),h(S,"class","fa-duotone fa-check-circle mr-2"),h(k,"class","flex items-center bg-blue-600 hover:bg-blue-700 text-white py-2 px-4 rounded focus:outline-none"),h(m,"class","flex justify-between items-center"),h(e,"class","bg-gray-700 p-8 rounded-lg shadow-lg w-96"),h(t,"class","fixed inset-0 flex items-center justify-center bg-black bg-opacity-50")},m(R,B){Q(R,t,B),u(t,e),u(e,n),u(n,s),u(n,o),u(n,r),u(r,a),u(e,c),u(e,d),u(d,p),u(e,g),u(e,m),u(m,_),u(_,y),u(_,w),u(m,M),u(m,k),u(k,S),u(k,C),O=!0,N||(V=[tt(_,"click",i[12]),tt(k,"click",i[9])],N=!0)},p(R,B){(!O||B&4)&&l!==(l=R[2].are_you_sure+"")&&z(a,l),(!O||B&4)&&f!==(f=R[2].delete_confirmation+"")&&z(p,f),(!O||B&4)&&v!==(v=R[2].cancel+"")&&z(w,v),(!O||B&4)&&L!==(L=R[2].confirm+"")&&z(C,L)},i(R){O||(R&&Wt(()=>{O&&(E&&E.end(1),T=ee(e,Kt,{duration:250,easing:Tt}),T.start())}),O=!0)},o(R){T&&T.invalidate(),R&&(E=be(e,Kt,{duration:250,easing:Tt})),O=!1},d(R){R&&G(t),R&&E&&E.end(),N=!1,Ut(V)}}}function Eg(i){let t,e,n,s,o,r,l,a=i[2].history+"",c,d,f,p,g,m,_,y=i[2].total+"",v,w,M,k,S,L,C=i[1].length+"",T,E,O,N,V=i[2].delete_all_transactions+"",R,B,F,H,P,W,$,D,A,Y=[],X=new Map,K,Z,J,st,et,vt,at=oe(i[1]);const ut=j=>j[13].id;for(let j=0;j{U=null}),ae())},i(j){if(!st){for(let lt=0;lt{K=ee(e,He,{duration:1e3,easing:Tt}),K.start()})),rt(U),st=!0}},o(j){for(let lt=0;lte(2,s=y)),it(i,Ai,y=>e(3,l=y));let c=zo;it(i,c,y=>e(10,o=y));let d=ct("");it(i,d,y=>e(0,r=y));let f=ct(!1);it(i,f,y=>e(4,a=y));function p(){f.set(!0)}async function g(){if(o.length===0)yt(s.history_empty,s.error,"file-invoice"),f.set(!1);else{c.set([]),f.set(!1),yt(s.all_history_deleted,s.success,"file-invoice");try{const y=await Dt("ps-banking:client:deleteHistory",{});c.set([])}catch(y){console.error(y)}}}Di(async()=>{try{const y=await Dt("ps-banking:client:getHistory",{});c.set(y)}catch(y){console.error(y)}});function m(){r=this.value,d.set(r)}const _=()=>f.set(!1);return i.$$.update=()=>{i.$$.dirty&1025&&e(1,n=o.filter(y=>y.description.toLowerCase().includes(r.toLowerCase())||y.type.toLowerCase().includes(r.toLowerCase())))},[r,n,s,l,a,c,d,f,p,g,o,m,_]}class Ig extends je{constructor(t){super(),We(this,t,Fg,Eg,Ee,{})}}function Bg(i){let t,e,n,s,o=i[3].withdraw+"",r,l,a,c,d=i[3].bank_balance+"",f,p,g,m,_,y=i[1].toLocaleString(i[4].lang,{style:"currency",currency:i[4].currency,minimumFractionDigits:0})+"",v,w,M,k,S=i[3].amount+"",L,C,T,E,O,N,V,R,B,F=i[3].new_bank+"",H,P,W,$,D,A=i[2].toLocaleString(i[4].lang,{style:"currency",currency:i[4].currency,minimumFractionDigits:0})+"",Y,X,K,Z,J,st=i[3].withdraw_button+"",et,vt,at,ut;return{c(){t=b("div"),e=b("div"),n=b("div"),s=b("h2"),r=I(o),l=x(),a=b("div"),c=b("label"),f=I(d),p=x(),g=b("div"),m=b("i"),_=x(),v=I(y),w=x(),M=b("div"),k=b("label"),L=I(S),C=x(),T=b("div"),E=b("i"),O=x(),N=b("input"),V=x(),R=b("div"),B=b("label"),H=I(F),P=x(),W=b("div"),$=b("i"),D=x(),Y=I(A),X=x(),K=b("button"),Z=b("i"),J=x(),et=I(st),h(s,"class","text-3xl font-bold mb-6"),h(c,"class","block text-blue-200 mb-1"),h(m,"class","fa-duotone fa-university text-gray-400 mr-2"),h(g,"class","flex items-center text-2xl font-semibold"),h(a,"class","mb-12"),h(k,"class","block text-blue-200 mb-1"),h(E,"class","fa-duotone fa-money-bill-wave absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400"),h(N,"type","number"),h(N,"class","w-full rounded bg-gray-700/50 text-white pl-10 pr-4 py-3 border border-blue-200/10 rounded-lg focus:outline-none focus:border-blue-400/50 transition-colors duration-500"),h(T,"class","relative"),h(M,"class","mb-12"),h(B,"class","block text-blue-200 mb-1"),h($,"class","fa-duotone fa-coins text-gray-400 mr-2"),h(W,"class","flex items-center text-2xl font-semibold"),h(R,"class","mb-12"),h(Z,"class","fa-duotone fa-money-check-edit text-lg mr-2"),h(K,"class","w-full bg-blue-600/10 hover:bg-blue-700/10 text-white font-bold py-3 rounded transition duration-300 flex items-center justify-center border border-blue-500/50"),h(n,"class","bg-gray-800/50 p-8 rounded-lg shadow-lg border border-blue-200/5"),h(e,"class","absolute w-[90%] h-full p-6 overflow-auto left-[130px]"),h(t,"class","absolute w-full h-full bg-gray-800 text-white")},m(U,j){Q(U,t,j),u(t,e),u(e,n),u(n,s),u(s,r),u(n,l),u(n,a),u(a,c),u(c,f),u(a,p),u(a,g),u(g,m),u(g,_),u(g,v),u(n,w),u(n,M),u(M,k),u(k,L),u(M,C),u(M,T),u(T,E),u(T,O),u(T,N),Ft(N,i[0]),u(n,V),u(n,R),u(R,B),u(B,H),u(R,P),u(R,W),u(W,$),u(W,D),u(W,Y),u(n,X),u(n,K),u(K,Z),u(K,J),u(K,et),at||(ut=[tt(N,"input",i[7]),tt(K,"click",i[6])],at=!0)},p(U,[j]){j&8&&o!==(o=U[3].withdraw+"")&&z(r,o),j&8&&d!==(d=U[3].bank_balance+"")&&z(f,d),j&18&&y!==(y=U[1].toLocaleString(U[4].lang,{style:"currency",currency:U[4].currency,minimumFractionDigits:0})+"")&&z(v,y),j&8&&S!==(S=U[3].amount+"")&&z(L,S),j&1&&ge(N.value)!==U[0]&&Ft(N,U[0]),j&8&&F!==(F=U[3].new_bank+"")&&z(H,F),j&20&&A!==(A=U[2].toLocaleString(U[4].lang,{style:"currency",currency:U[4].currency,minimumFractionDigits:0})+"")&&z(Y,A),j&8&&st!==(st=U[3].withdraw_button+"")&&z(et,st)},i(U){U&&(vt||Wt(()=>{vt=ee(e,He,{duration:1e3,easing:Tt}),vt.start()}))},o:re,d(U){U&&G(t),at=!1,Ut(ut)}}}function zg(i,t,e){let n,s,o,r,l;it(i,Be,f=>e(3,o=f)),it(i,Ai,f=>e(4,r=f)),it(i,ni,f=>e(1,l=f));let a=ct(l);it(i,a,f=>e(0,s=f));async function c(){lf+s),ni.update(f=>f-s),a.set(0))}function d(){s=ge(this.value),a.set(s)}return i.$$.update=()=>{i.$$.dirty&3&&e(2,n=l-s)},[s,l,n,o,r,a,c,d]}class Ng extends je{constructor(t){super(),We(this,t,zg,Bg,Ee,{})}}function Wg(i){let t,e,n,s,o=i[3].deposit+"",r,l,a,c,d=i[3].current_cash+"",f,p,g,m,_,y=i[1].toLocaleString(i[4].lang,{style:"currency",currency:i[4].currency,minimumFractionDigits:0})+"",v,w,M,k,S=i[3].amount+"",L,C,T,E,O,N,V,R,B,F=i[3].new_cash+"",H,P,W,$,D,A=i[2].toLocaleString(i[4].lang,{style:"currency",currency:i[4].currency,minimumFractionDigits:0})+"",Y,X,K,Z,J,st=i[3].deposit_button+"",et,vt,at,ut;return{c(){t=b("div"),e=b("div"),n=b("div"),s=b("h2"),r=I(o),l=x(),a=b("div"),c=b("label"),f=I(d),p=x(),g=b("div"),m=b("i"),_=x(),v=I(y),w=x(),M=b("div"),k=b("label"),L=I(S),C=x(),T=b("div"),E=b("i"),O=x(),N=b("input"),V=x(),R=b("div"),B=b("label"),H=I(F),P=x(),W=b("div"),$=b("i"),D=x(),Y=I(A),X=x(),K=b("button"),Z=b("i"),J=x(),et=I(st),h(s,"class","text-3xl font-bold mb-6"),h(c,"class","block text-blue-200 mb-1"),h(m,"class","fa-duotone fa-wallet text-gray-400 mr-2"),h(g,"class","flex items-center text-2xl font-semibold"),h(a,"class","mb-12"),h(k,"class","block text-blue-200 mb-1"),h(E,"class","fa-duotone fa-money-bill-wave absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400"),h(N,"type","number"),h(N,"class","w-full rounded bg-gray-700/50 text-white pl-10 pr-4 py-3 border border-blue-200/10 rounded-lg focus:outline-none focus:border-blue-400/50 transition-colors duration-500"),h(T,"class","relative"),h(M,"class","mb-12"),h(B,"class","block text-blue-200 mb-1"),h($,"class","fa-duotone fa-coins text-gray-400 mr-2"),h(W,"class","flex items-center text-2xl font-semibold"),h(R,"class","mb-12"),h(Z,"class","fa-duotone fa-money-check-edit text-lg mr-2"),h(K,"class","w-full bg-blue-600/10 hover:bg-blue-700/10 text-white font-bold py-3 rounded transition duration-300 flex items-center justify-center border border-blue-500/50"),h(n,"class","bg-gray-800/50 p-8 rounded-lg shadow-lg border border-blue-200/5"),h(e,"class","absolute w-[90%] h-full p-6 overflow-auto left-[130px]"),h(t,"class","absolute w-full h-full bg-gray-800 text-white")},m(U,j){Q(U,t,j),u(t,e),u(e,n),u(n,s),u(s,r),u(n,l),u(n,a),u(a,c),u(c,f),u(a,p),u(a,g),u(g,m),u(g,_),u(g,v),u(n,w),u(n,M),u(M,k),u(k,L),u(M,C),u(M,T),u(T,E),u(T,O),u(T,N),Ft(N,i[0]),u(n,V),u(n,R),u(R,B),u(B,H),u(R,P),u(R,W),u(W,$),u(W,D),u(W,Y),u(n,X),u(n,K),u(K,Z),u(K,J),u(K,et),at||(ut=[tt(N,"input",i[7]),tt(K,"click",i[6])],at=!0)},p(U,[j]){j&8&&o!==(o=U[3].deposit+"")&&z(r,o),j&8&&d!==(d=U[3].current_cash+"")&&z(f,d),j&18&&y!==(y=U[1].toLocaleString(U[4].lang,{style:"currency",currency:U[4].currency,minimumFractionDigits:0})+"")&&z(v,y),j&8&&S!==(S=U[3].amount+"")&&z(L,S),j&1&&ge(N.value)!==U[0]&&Ft(N,U[0]),j&8&&F!==(F=U[3].new_cash+"")&&z(H,F),j&20&&A!==(A=U[2].toLocaleString(U[4].lang,{style:"currency",currency:U[4].currency,minimumFractionDigits:0})+"")&&z(Y,A),j&8&&st!==(st=U[3].deposit_button+"")&&z(et,st)},i(U){U&&(vt||Wt(()=>{vt=ee(e,He,{duration:1e3,easing:Tt}),vt.start()}))},o:re,d(U){U&&G(t),at=!1,Ut(ut)}}}function jg(i,t,e){let n,s,o,r,l;it(i,Be,f=>e(3,o=f)),it(i,Ai,f=>e(4,r=f)),it(i,fi,f=>e(1,l=f));let a=ct(l);it(i,a,f=>e(0,s=f));async function c(){lf-s),ni.update(f=>f+s),a.set(0))}function d(){s=ge(this.value),a.set(s)}return i.$$.update=()=>{i.$$.dirty&3&&e(2,n=l-s)},[s,l,n,o,r,a,c,d]}class Hg extends je{constructor(t){super(),We(this,t,jg,Wg,Ee,{})}}function xa(i){let t=i[1].toLocaleString(i[2].lang,{style:"currency",currency:i[2].currency,minimumFractionDigits:0})+"",e;return{c(){e=I(t)},m(n,s){Q(n,e,s)},p(n,s){s&6&&t!==(t=n[1].toLocaleString(n[2].lang,{style:"currency",currency:n[2].currency,minimumFractionDigits:0})+"")&&z(e,t)},d(n){n&&G(e)}}}function Vg(i){let t;return{c(){t=I("0")},m(e,n){Q(e,t,n)},p:re,d(e){e&&G(t)}}}function $g(i){let t=i[4].toLocaleString(i[2].lang,{style:"currency",currency:i[2].currency,minimumFractionDigits:0})+"",e;return{c(){e=I(t)},m(n,s){Q(n,e,s)},p(n,s){s&20&&t!==(t=n[4].toLocaleString(n[2].lang,{style:"currency",currency:n[2].currency,minimumFractionDigits:0})+"")&&z(e,t)},d(n){n&&G(e)}}}function Yg(i){let t,e,n,s,o=i[0].statistics_reports+"",r,l,a,c,d,f,p,g=i[0].overview+"",m,_,y,v,w,M,k=i[0].total_balance+"",S,L,C,T,E,O,N,V=i[0].total_transactions+"",R,B,F,H,P,W,$,D,A,Y,X=i[0].amount+"",K,Z,J,st,et,vt,at,ut,U,j=i[0].transactions_trend+"",lt,kt,mt,Xt,jt,Jt,Et,gt=i[1]!==void 0&&xa(i);function ft(dt,Ht){return dt[4]!==void 0?$g:Vg}let Mt=ft(i),Qt=Mt(i);return{c(){t=b("div"),e=b("div"),n=b("div"),s=b("h2"),r=I(o),l=x(),a=b("div"),c=b("div"),d=b("i"),f=x(),p=b("h3"),m=I(g),_=x(),y=b("div"),v=b("i"),w=x(),M=b("span"),S=I(k),L=I(": "),gt&>.c(),C=x(),T=b("div"),E=b("div"),O=b("div"),N=b("h4"),R=I(V),B=x(),F=b("i"),H=x(),P=b("p"),W=I(i[3]),$=x(),D=b("div"),A=b("div"),Y=b("h4"),K=I(X),Z=x(),J=b("i"),st=x(),et=b("p"),Qt.c(),vt=x(),at=b("div"),ut=b("div"),U=b("h4"),lt=I(j),kt=x(),mt=b("i"),Xt=x(),jt=b("div"),jt.innerHTML='',h(s,"class","text-3xl font-bold mb-6"),h(d,"class","fa-duotone fa-chart-line text-3xl text-blue-200 mr-3"),h(p,"class","text-2xl font-semibold text-blue-200"),h(c,"class","flex items-center"),h(v,"class","fa-duotone fa-wallet text-gray-400 mr-2"),h(M,"class","text-lg font-semibold text-white"),h(y,"class","bg-gray-500/40 rounded-xl px-3 py-1 flex items-center"),h(a,"class","flex justify-between items-center mb-6"),h(N,"class","text-xl font-semibold text-blue-200"),h(F,"class","fa-duotone fa-exchange-alt text-yellow-400 text-2xl"),h(O,"class","flex justify-between items-center mb-4"),h(P,"class","text-2xl font-bold"),h(E,"class","bg-gray-700 p-4 rounded-lg shadow"),h(Y,"class","text-xl font-semibold text-blue-200"),h(J,"class","fa-duotone fa-coins text-green-400 text-2xl"),h(A,"class","flex justify-between items-center mb-4"),h(et,"class","text-2xl font-bold"),h(D,"class","bg-gray-700 p-4 rounded-lg shadow"),h(T,"class","grid grid-cols-1 md:grid-cols-2 gap-6 mb-6"),h(U,"class","text-xl font-semibold text-blue-200"),h(mt,"class","fa-duotone fa-chart-line text-blue-400 text-2xl"),h(ut,"class","flex justify-between items-center mb-4"),h(jt,"class","relative w-[1000px] left-[15%]"),h(at,"class","bg-gray-700 p-4 rounded-lg shadow"),h(n,"class","bg-gray-700/20 rounded-lg shadow-md p-6"),h(e,"class","absolute w-[90%] h-full p-6 overflow-auto left-[130px]"),h(t,"class","absolute w-full h-full bg-gray-800 text-white")},m(dt,Ht){Q(dt,t,Ht),u(t,e),u(e,n),u(n,s),u(s,r),u(n,l),u(n,a),u(a,c),u(c,d),u(c,f),u(c,p),u(p,m),u(a,_),u(a,y),u(y,v),u(y,w),u(y,M),u(M,S),u(M,L),gt&>.m(M,null),u(n,C),u(n,T),u(T,E),u(E,O),u(O,N),u(N,R),u(O,B),u(O,F),u(E,H),u(E,P),u(P,W),u(T,$),u(T,D),u(D,A),u(A,Y),u(Y,K),u(A,Z),u(A,J),u(D,st),u(D,et),Qt.m(et,null),u(n,vt),u(n,at),u(at,ut),u(ut,U),u(U,lt),u(ut,kt),u(ut,mt),u(at,Xt),u(at,jt)},p(dt,[Ht]){Ht&1&&o!==(o=dt[0].statistics_reports+"")&&z(r,o),Ht&1&&g!==(g=dt[0].overview+"")&&z(m,g),Ht&1&&k!==(k=dt[0].total_balance+"")&&z(S,k),dt[1]!==void 0?gt?gt.p(dt,Ht):(gt=xa(dt),gt.c(),gt.m(M,null)):gt&&(gt.d(1),gt=null),Ht&1&&V!==(V=dt[0].total_transactions+"")&&z(R,V),Ht&8&&z(W,dt[3]),Ht&1&&X!==(X=dt[0].amount+"")&&z(K,X),Mt===(Mt=ft(dt))&&Qt?Qt.p(dt,Ht):(Qt.d(1),Qt=Mt(dt),Qt&&(Qt.c(),Qt.m(et,null))),Ht&1&&j!==(j=dt[0].transactions_trend+"")&&z(lt,j)},i(dt){dt&&(Jt||Wt(()=>{Jt=ee(jt,Kt,{duration:2500,easing:Tt}),Jt.start()})),dt&&(Et||Wt(()=>{Et=ee(e,He,{duration:1e3,easing:Tt}),Et.start()}))},o:re,d(dt){dt&&G(t),gt&>.d(),Qt.d()}}}function Ug(i,t,e){let n,s,o,r,l;it(i,Be,g=>e(0,n=g)),it(i,ni,g=>e(1,s=g)),it(i,Ai,g=>e(2,o=g));let a=ct(0);it(i,a,g=>e(3,r=g));let c=ct(0);it(i,c,g=>e(4,l=g));let d={Transactions:[],Dates:[]},f;async function p(){try{const g=await Dt("ps-banking:client:getTransactionStats",{});a.set(g.totalCount),c.set(g.totalAmount);const m=g.transactionData.map(y=>y.amount),_=g.transactionData.map(y=>new Date(y.date).toLocaleDateString());d.Transactions=m,d.Dates=_,f&&(f.data.labels=_,f.data.datasets[0].data=m,f.update())}catch(g){console.error("Error fetching transaction stats:",g)}}return ln.register($n,hi,Un,Zs,Kc,Nn,Gc),Di(()=>{p();const g=document.getElementById("transactionChart").getContext("2d");f=new ln(g,{type:"line",data:{labels:d.Dates,datasets:[{label:"Transactions",data:d.Transactions,borderColor:"rgba(59, 130, 246, 1)",backgroundColor:"rgba(59, 130, 246, 0.2)",fill:!0,tension:.5,pointStyle:"rectRounded",pointRadius:5,pointHoverRadius:7,borderWidth:2}]},options:{responsive:!0,plugins:{legend:{display:!0,position:"top",labels:{usePointStyle:!0,color:"white"}},tooltip:{backgroundColor:"rgba(0,0,0,0.7)",titleColor:"white",bodyColor:"white",cornerRadius:4,displayColors:!1}},scales:{x:{display:!0,title:{display:!0,text:n.date,color:"white"},ticks:{color:"white"},grid:{color:"rgba(255,255,255,0.1)"}},y:{display:!0,title:{display:!0,text:n.amount,color:"white"},ticks:{color:"white"},grid:{color:"rgba(255,255,255,0.1)"},suggestedMin:0,suggestedMax:d.Transactions.reduce((m,_)=>m+_,0)}}}})}),[n,s,o,r,l,a,c]}class Xg extends je{constructor(t){super(),We(this,t,Ug,Yg,Ee,{})}}function wa(i,t,e){const n=i.slice();return n[69]=t[e],n}function ka(i,t,e){const n=i.slice();return n[72]=t[e],n}function Ma(i){let t,e,n=i[72].owner.identifier===qt(i[16]).identifier,s,o,r,l,a,c;function d(){return i[41](i[72])}let f=n&&Sa(i);function p(){return i[45](i[72])}function g(){return i[46](i[72])}return{c(){t=b("button"),t.innerHTML='',e=x(),f&&f.c(),s=x(),o=b("button"),o.innerHTML='',r=x(),l=b("button"),l.innerHTML='',h(t,"class","text-gray-400 hover:text-blue-300 duration-500"),h(o,"class","text-green-400 hover:text-green-300 duration-500"),h(l,"class","text-yellow-400 hover:text-yellow-300 duration-500")},m(m,_){Q(m,t,_),Q(m,e,_),f&&f.m(m,_),Q(m,s,_),Q(m,o,_),Q(m,r,_),Q(m,l,_),a||(c=[tt(t,"click",d),tt(o,"click",p),tt(l,"click",g)],a=!0)},p(m,_){i=m,_[0]&2&&(n=i[72].owner.identifier===qt(i[16]).identifier),n?f?f.p(i,_):(f=Sa(i),f.c(),f.m(s.parentNode,s)):f&&(f.d(1),f=null)},d(m){m&&(G(t),G(e),G(s),G(o),G(r),G(l)),f&&f.d(m),a=!1,Ut(c)}}}function Sa(i){let t,e,n,s,o,r,l;function a(){return i[42](i[72])}function c(){return i[43](i[72])}function d(){return i[44](i[72])}return{c(){t=b("button"),t.innerHTML='',e=x(),n=b("button"),n.innerHTML='',s=x(),o=b("button"),o.innerHTML='',h(t,"class","text-gray-400 hover:text-blue-300 duration-500"),h(n,"class","text-gray-400 hover:text-blue-300 duration-500"),h(o,"class","text-red-400 hover:text-red-300 duration-500")},m(f,p){Q(f,t,p),Q(f,e,p),Q(f,n,p),Q(f,s,p),Q(f,o,p),r||(l=[tt(t,"click",a),tt(n,"click",c),tt(o,"click",d)],r=!0)},p(f,p){i=f},d(f){f&&(G(t),G(e),G(n),G(s),G(o)),r=!1,Ut(l)}}}function Da(i,t){let e,n,s,o=t[72].balance.toLocaleString(t[2].lang,{style:"currency",currency:t[2].currency,minimumFractionDigits:0})+"",r,l,a,c,d=t[72].id+"",f,p,g,m=t[72].cardNumber+"",_,y,v,w,M=t[72].owner.name+"",k,S,L=t[72].holder+"",C,T,E,O,N,V=t[72].owner.identifier===qt(t[16]).identifier||t[72].users.some(t[39]),R,B,F,H,P;function W(){return t[40](t[72])}let $=V&&Ma(t);return{key:i,first:null,c(){e=b("div"),n=b("div"),s=b("div"),r=I(o),l=x(),a=b("div"),c=I("#"),f=I(d),p=x(),g=b("div"),_=I(m),y=x(),v=b("div"),w=b("div"),k=I(M),S=I(" - "),C=I(L),T=x(),E=b("div"),O=b("button"),O.innerHTML='',N=x(),$&&$.c(),R=x(),h(s,"class","text-2xl font-bold"),h(a,"class","text-sm font-semibold"),h(n,"class","flex justify-between items-center"),h(g,"class","text-xl mt-2"),h(w,"class","text-lg"),h(O,"class","text-gray-400 hover:text-blue-300 duration-500"),h(E,"class","flex space-x-2"),h(v,"class","flex justify-between items-center mt-4"),h(e,"class","py-8 px-8 w-auto h-auto rounded-2xl shadow-lg flex flex-col justify-between bg-[#1c2333] text-blue-400 relative"),this.first=e},m(D,A){Q(D,e,A),u(e,n),u(n,s),u(s,r),u(n,l),u(n,a),u(a,c),u(a,f),u(e,p),u(e,g),u(g,_),u(e,y),u(e,v),u(v,w),u(w,k),u(w,S),u(w,C),u(v,T),u(v,E),u(E,O),u(E,N),$&&$.m(E,null),u(e,R),F=!0,H||(P=tt(O,"click",W),H=!0)},p(D,A){t=D,(!F||A[0]&6)&&o!==(o=t[72].balance.toLocaleString(t[2].lang,{style:"currency",currency:t[2].currency,minimumFractionDigits:0})+"")&&z(r,o),(!F||A[0]&2)&&d!==(d=t[72].id+"")&&z(f,d),(!F||A[0]&2)&&m!==(m=t[72].cardNumber+"")&&z(_,m),(!F||A[0]&2)&&M!==(M=t[72].owner.name+"")&&z(k,M),(!F||A[0]&2)&&L!==(L=t[72].holder+"")&&z(C,L),A[0]&2&&(V=t[72].owner.identifier===qt(t[16]).identifier||t[72].users.some(t[39])),V?$?$.p(t,A):($=Ma(t),$.c(),$.m(E,null)):$&&($.d(1),$=null)},i(D){F||(B&&B.end(1),F=!0)},o(D){D&&(B=be(e,Ws,{duration:1e3,easing:Tt})),F=!1},d(D){D&&G(e),$&&$.d(),D&&B&&B.end(),H=!1,P()}}}function Aa(i){let t,e,n,s,o,r=i[0].new_user_to_account+"",l,a,c,d,f=i[0].server_id+"",p,g,m,_,y,v,w,M,k,S,L,C=i[0].cancel+"",T,E,O,N,V,R=i[0].add_user+"",B,F,H,P,W,$;return{c(){t=b("div"),e=b("div"),n=b("h2"),s=b("i"),o=x(),l=I(r),a=x(),c=b("div"),d=b("label"),p=I(f),g=x(),m=b("div"),_=b("input"),y=x(),v=b("i"),w=x(),M=b("div"),k=b("button"),S=b("i"),L=x(),T=I(C),E=x(),O=b("button"),N=b("i"),V=x(),B=I(R),h(s,"class","fa-duotone fa-exchange-alt mr-2"),h(n,"class","text-2xl font-bold text-blue-400 mb-4 flex items-center"),h(d,"class","block text-blue-400 mb-2"),h(d,"for","ServerID"),h(_,"type","number"),h(_,"id","ServerID"),h(_,"class","w-full bg-[#283040] text-white font-bold pl-4 pr-12 py-3 rounded-lg border border-blue-400 focus:outline-none focus:border-blue-600 transition-colors duration-500 placeholder-gray-500"),h(_,"placeholder","ID"),h(v,"class","fa-duotone fa-id-card absolute top-1/2 right-4 transform -translate-y-1/2 text-blue-400"),h(m,"class","relative"),h(c,"class","mb-4"),h(S,"class","fa-duotone fa-times-circle text-lg mr-2"),h(k,"class","bg-red-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(N,"class","fa-duotone fa-check-circle text-lg mr-2"),h(O,"class","bg-blue-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(M,"class","flex justify-center space-x-4"),h(e,"class","bg-[#1c2333] p-8 rounded-lg shadow-2xl w-96 relative"),h(t,"class","fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50")},m(D,A){Q(D,t,A),u(t,e),u(e,n),u(n,s),u(n,o),u(n,l),u(e,a),u(e,c),u(c,d),u(d,p),u(c,g),u(c,m),u(m,_),Ft(_,i[4]),u(m,y),u(m,v),u(e,w),u(e,M),u(M,k),u(k,S),u(k,L),u(k,T),u(M,E),u(M,O),u(O,N),u(O,V),u(O,B),P=!0,W||($=[tt(_,"input",i[48]),tt(k,"click",i[49]),tt(O,"click",i[50])],W=!0)},p(D,A){(!P||A[0]&1)&&r!==(r=D[0].new_user_to_account+"")&&z(l,r),(!P||A[0]&1)&&f!==(f=D[0].server_id+"")&&z(p,f),A[0]&16&&ge(_.value)!==D[4]&&Ft(_,D[4]),(!P||A[0]&1)&&C!==(C=D[0].cancel+"")&&z(T,C),(!P||A[0]&1)&&R!==(R=D[0].add_user+"")&&z(B,R)},i(D){P||(D&&Wt(()=>{P&&(H&&H.end(1),F=ee(e,Kt,{duration:250,easing:Tt}),F.start())}),P=!0)},o(D){F&&F.invalidate(),D&&(H=be(e,Kt,{duration:250,easing:Tt})),P=!1},d(D){D&&G(t),D&&H&&H.end(),W=!1,Ut($)}}}function Pa(i){let t,e,n,s,o,r=i[0].rename_account+"",l,a,c,d,f=i[0].new_account_name+"",p,g,m,_,y,v,w,M,k,S,L,C,T=i[0].cancel+"",E,O,N,V,R,B=i[0].rename+"",F,H,P,W,$,D;return{c(){t=b("div"),e=b("div"),n=b("h2"),s=b("i"),o=x(),l=I(r),a=x(),c=b("div"),d=b("label"),p=I(f),g=x(),m=b("div"),_=b("input"),v=x(),w=b("i"),M=x(),k=b("div"),S=b("button"),L=b("i"),C=x(),E=I(T),O=x(),N=b("button"),V=b("i"),R=x(),F=I(B),h(s,"class","fa-duotone fa-edit mr-2"),h(n,"class","text-2xl font-bold text-blue-400 mb-4 flex items-center"),h(d,"class","block text-blue-400 mb-2"),h(d,"for","AccountName"),h(_,"type","text"),h(_,"id","AccountName"),h(_,"class","w-full bg-[#283040] text-white font-bold pl-4 pr-12 py-3 rounded-lg border border-blue-400 focus:outline-none focus:border-blue-600 transition-colors duration-500 placeholder-gray-500"),h(_,"placeholder",y=i[0].new_name),h(w,"class","fa-duotone fa-pen-nib absolute top-1/2 right-4 transform -translate-y-1/2 text-blue-400"),h(m,"class","relative"),h(c,"class","mb-4"),h(L,"class","fa-duotone fa-times-circle text-lg mr-2"),h(S,"class","bg-red-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(V,"class","fa-duotone fa-check-circle text-lg mr-2"),h(N,"class","bg-blue-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(k,"class","flex justify-center space-x-4"),h(e,"class","bg-[#1c2333] p-8 rounded-lg shadow-2xl w-96 relative"),h(t,"class","fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50")},m(A,Y){Q(A,t,Y),u(t,e),u(e,n),u(n,s),u(n,o),u(n,l),u(e,a),u(e,c),u(c,d),u(d,p),u(c,g),u(c,m),u(m,_),Ft(_,i[6]),u(m,v),u(m,w),u(e,M),u(e,k),u(k,S),u(S,L),u(S,C),u(S,E),u(k,O),u(k,N),u(N,V),u(N,R),u(N,F),W=!0,$||(D=[tt(_,"input",i[51]),tt(S,"click",i[52]),tt(N,"click",i[53])],$=!0)},p(A,Y){(!W||Y[0]&1)&&r!==(r=A[0].rename_account+"")&&z(l,r),(!W||Y[0]&1)&&f!==(f=A[0].new_account_name+"")&&z(p,f),(!W||Y[0]&1&&y!==(y=A[0].new_name))&&h(_,"placeholder",y),Y[0]&64&&_.value!==A[6]&&Ft(_,A[6]),(!W||Y[0]&1)&&T!==(T=A[0].cancel+"")&&z(E,T),(!W||Y[0]&1)&&B!==(B=A[0].rename+"")&&z(F,B)},i(A){W||(A&&Wt(()=>{W&&(P&&P.end(1),H=ee(e,Kt,{duration:250,easing:Tt}),H.start())}),W=!0)},o(A){H&&H.invalidate(),A&&(P=be(e,Kt,{duration:250,easing:Tt})),W=!1},d(A){A&&G(t),A&&P&&P.end(),$=!1,Ut(D)}}}function Ca(i){let t,e,n,s,o,r=i[0].create_new_account+"",l,a,c,d,f=i[0].account_holder+"",p,g,m,_,y,v,w,M,k,S,L,C,T=i[0].cancel+"",E,O,N,V,R,B=i[0].create+"",F,H,P,W,$,D;return{c(){t=b("div"),e=b("div"),n=b("h2"),s=b("i"),o=x(),l=I(r),a=x(),c=b("div"),d=b("label"),p=I(f),g=x(),m=b("div"),_=b("input"),v=x(),w=b("i"),M=x(),k=b("div"),S=b("button"),L=b("i"),C=x(),E=I(T),O=x(),N=b("button"),V=b("i"),R=x(),F=I(B),h(s,"class","fa-duotone fa-plus mr-2"),h(n,"class","text-2xl font-bold text-blue-400 mb-4 flex items-center"),h(d,"class","block text-blue-400 mb-2"),h(d,"for","AccountHolder"),h(_,"type","text"),h(_,"id","AccountHolder"),h(_,"class","w-full bg-[#283040] text-white font-bold pl-4 pr-12 py-3 rounded-lg border border-blue-400 focus:outline-none focus:border-blue-600 transition-colors duration-500 placeholder-gray-500"),h(_,"placeholder",y=i[0].account_holder),h(w,"class","fa-duotone fa-user absolute top-1/2 right-4 transform -translate-y-1/2 text-blue-400"),h(m,"class","relative"),h(c,"class","mb-4"),h(L,"class","fa-duotone fa-times-circle text-lg mr-2"),h(S,"class","bg-red-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(V,"class","fa-duotone fa-check-circle text-lg mr-2"),h(N,"class","bg-blue-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(k,"class","flex justify-center space-x-4"),h(e,"class","bg-[#1c2333] p-8 rounded-lg shadow-2xl w-96 relative"),h(t,"class","fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50")},m(A,Y){Q(A,t,Y),u(t,e),u(e,n),u(n,s),u(n,o),u(n,l),u(e,a),u(e,c),u(c,d),u(d,p),u(c,g),u(c,m),u(m,_),Ft(_,i[8]),u(m,v),u(m,w),u(e,M),u(e,k),u(k,S),u(S,L),u(S,C),u(S,E),u(k,O),u(k,N),u(N,V),u(N,R),u(N,F),W=!0,$||(D=[tt(_,"input",i[54]),tt(S,"click",i[55]),tt(N,"click",i[36])],$=!0)},p(A,Y){(!W||Y[0]&1)&&r!==(r=A[0].create_new_account+"")&&z(l,r),(!W||Y[0]&1)&&f!==(f=A[0].account_holder+"")&&z(p,f),(!W||Y[0]&1&&y!==(y=A[0].account_holder))&&h(_,"placeholder",y),Y[0]&256&&_.value!==A[8]&&Ft(_,A[8]),(!W||Y[0]&1)&&T!==(T=A[0].cancel+"")&&z(E,T),(!W||Y[0]&1)&&B!==(B=A[0].create+"")&&z(F,B)},i(A){W||(A&&Wt(()=>{W&&(P&&P.end(1),H=ee(e,Kt,{duration:250,easing:Tt}),H.start())}),W=!0)},o(A){H&&H.invalidate(),A&&(P=be(e,Kt,{duration:250,easing:Tt})),W=!1},d(A){A&&G(t),A&&P&&P.end(),$=!1,Ut(D)}}}function La(i){let t,e,n,s,o,r=i[0].delete_account+"",l,a,c,d=i[0].are_you_sure_you_want_to_delete_this_account+"",f,p,g,m,_,y,v=i[0].cancel+"",w,M,k,S,L,C=i[0].delete+"",T,E,O,N,V,R;return{c(){t=b("div"),e=b("div"),n=b("h2"),s=b("i"),o=x(),l=I(r),a=x(),c=b("p"),f=I(d),p=x(),g=b("div"),m=b("button"),_=b("i"),y=x(),w=I(v),M=x(),k=b("button"),S=b("i"),L=x(),T=I(C),h(s,"class","fa-duotone fa-exclamation-triangle mr-2"),h(n,"class","text-2xl font-bold text-red-400 mb-4 flex items-center"),h(c,"class","text-blue-400 mb-4"),h(_,"class","fa-duotone fa-times-circle text-lg mr-2"),h(m,"class","bg-gray-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(S,"class","fa-duotone fa-check-circle text-lg mr-2"),h(k,"class","bg-red-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(g,"class","flex justify-center space-x-4"),h(e,"class","bg-[#1c2333] p-8 rounded-lg shadow-2xl w-96 relative"),h(t,"class","fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50")},m(B,F){Q(B,t,F),u(t,e),u(e,n),u(n,s),u(n,o),u(n,l),u(e,a),u(e,c),u(c,f),u(e,p),u(e,g),u(g,m),u(m,_),u(m,y),u(m,w),u(g,M),u(g,k),u(k,S),u(k,L),u(k,T),N=!0,V||(R=[tt(m,"click",i[56]),tt(k,"click",i[57])],V=!0)},p(B,F){(!N||F[0]&1)&&r!==(r=B[0].delete_account+"")&&z(l,r),(!N||F[0]&1)&&d!==(d=B[0].are_you_sure_you_want_to_delete_this_account+"")&&z(f,d),(!N||F[0]&1)&&v!==(v=B[0].cancel+"")&&z(w,v),(!N||F[0]&1)&&C!==(C=B[0].delete+"")&&z(T,C)},i(B){N||(B&&Wt(()=>{N&&(O&&O.end(1),E=ee(e,Kt,{duration:250,easing:Tt}),E.start())}),N=!0)},o(B){E&&E.invalidate(),B&&(O=be(e,Kt,{duration:250,easing:Tt})),N=!1},d(B){B&&G(t),B&&O&&O.end(),V=!1,Ut(R)}}}function Ta(i){var Y;let t,e,n,s,o,r=i[0].remove_user_from_account+"",l,a,c,d,f=i[0].select_user+"",p,g,m,_,y,v,w,M,k,S,L,C=i[0].cancel+"",T,E,O,N,V,R=i[0].remove+"",B,F,H,P,W,$,D=oe((Y=i[1].find(i[58]))==null?void 0:Y.users),A=[];for(let X=0;Xi[59].call(_)),h(v,"class","fa-duotone fa-user absolute top-1/2 right-4 transform -translate-y-1/2 text-blue-400"),h(m,"class","relative"),h(c,"class","mb-4"),h(S,"class","fa-duotone fa-times-circle text-lg mr-2"),h(k,"class","bg-gray-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(N,"class","fa-duotone fa-check-circle text-lg mr-2"),h(O,"class","bg-red-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(M,"class","flex justify-center space-x-4"),h(e,"class","bg-[#1c2333] p-8 rounded-lg shadow-2xl w-96 relative"),h(t,"class","fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50")},m(X,K){Q(X,t,K),u(t,e),u(e,n),u(n,s),u(n,o),u(n,l),u(e,a),u(e,c),u(c,d),u(d,p),u(c,g),u(c,m),u(m,_);for(let Z=0;Z{P&&(H&&H.end(1),F=ee(e,Kt,{duration:250,easing:Tt}),F.start())}),P=!0)},o(X){F&&F.invalidate(),X&&(H=be(e,Kt,{duration:250,easing:Tt})),P=!1},d(X){X&&G(t),Ss(A,X),X&&H&&H.end(),W=!1,Ut($)}}}function Oa(i){let t,e=i[69].name+"",n,s,o;return{c(){t=b("option"),n=I(e),s=x(),t.__value=o=i[69].identifier,Ft(t,t.__value),h(t,"class","bg-[#283040] text-white rounded-xl font-bold pl-4 pr-12 py-4 rounded-lg transition-colors duration-500 hover:bg-blue-300/20 hover:text-gray-200 border-b border-blue-200")},m(r,l){Q(r,t,l),u(t,n),u(t,s)},p(r,l){l[0]&4098&&e!==(e=r[69].name+"")&&z(n,e),l[0]&4098&&o!==(o=r[69].identifier)&&(t.__value=o,Ft(t,t.__value))},d(r){r&&G(t)}}}function Ra(i){let t,e,n,s,o,r=i[0].withdraw_from_account+"",l,a,c,d,f=i[0].withdraw_amount+"",p,g,m,_,y,v,w,M,k,S,L,C=i[0].cancel+"",T,E,O,N,V,R=i[0].withdraw+"",B,F,H,P,W,$;return{c(){t=b("div"),e=b("div"),n=b("h2"),s=b("i"),o=x(),l=I(r),a=x(),c=b("div"),d=b("label"),p=I(f),g=x(),m=b("div"),_=b("input"),y=x(),v=b("i"),w=x(),M=b("div"),k=b("button"),S=b("i"),L=x(),T=I(C),E=x(),O=b("button"),N=b("i"),V=x(),B=I(R),h(s,"class","fa-duotone fa-arrow-down mr-2"),h(n,"class","text-2xl font-bold text-yellow-400 mb-4 flex items-center"),h(d,"class","block text-yellow-400 mb-2"),h(d,"for","WithdrawAmount"),h(_,"type","number"),h(_,"id","WithdrawAmount"),h(_,"class","w-full bg-[#283040] text-white font-bold pl-4 pr-12 py-3 rounded-lg border border-yellow-400 focus:outline-none focus:border-yellow-600 transition-colors duration-500 placeholder-gray-500"),h(_,"placeholder","0"),h(v,"class","fa-duotone fa-dollar-sign absolute top-1/2 right-4 transform -translate-y-1/2 text-yellow-400"),h(m,"class","relative"),h(c,"class","mb-4"),h(S,"class","fa-duotone fa-times-circle text-lg mr-2"),h(k,"class","bg-gray-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(N,"class","fa-duotone fa-check-circle text-lg mr-2"),h(O,"class","bg-yellow-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(M,"class","flex justify-center space-x-4"),h(e,"class","bg-[#1c2333] p-8 rounded-lg shadow-2xl w-96 relative"),h(t,"class","fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50")},m(D,A){Q(D,t,A),u(t,e),u(e,n),u(n,s),u(n,o),u(n,l),u(e,a),u(e,c),u(c,d),u(d,p),u(c,g),u(c,m),u(m,_),Ft(_,i[14]),u(m,y),u(m,v),u(e,w),u(e,M),u(M,k),u(k,S),u(k,L),u(k,T),u(M,E),u(M,O),u(O,N),u(O,V),u(O,B),P=!0,W||($=[tt(_,"input",i[61]),tt(k,"click",i[62]),tt(O,"click",i[37])],W=!0)},p(D,A){(!P||A[0]&1)&&r!==(r=D[0].withdraw_from_account+"")&&z(l,r),(!P||A[0]&1)&&f!==(f=D[0].withdraw_amount+"")&&z(p,f),A[0]&16384&&ge(_.value)!==D[14]&&Ft(_,D[14]),(!P||A[0]&1)&&C!==(C=D[0].cancel+"")&&z(T,C),(!P||A[0]&1)&&R!==(R=D[0].withdraw+"")&&z(B,R)},i(D){P||(D&&Wt(()=>{P&&(H&&H.end(1),F=ee(e,Kt,{duration:250,easing:Tt}),F.start())}),P=!0)},o(D){F&&F.invalidate(),D&&(H=be(e,Kt,{duration:250,easing:Tt})),P=!1},d(D){D&&G(t),D&&H&&H.end(),W=!1,Ut($)}}}function Ea(i){let t,e,n,s,o,r=i[0].deposit_to_account+"",l,a,c,d,f=i[0].deposit_amount+"",p,g,m,_,y,v,w,M,k,S,L,C=i[0].cancel+"",T,E,O,N,V,R=i[0].deposit+"",B,F,H,P,W,$;return{c(){t=b("div"),e=b("div"),n=b("h2"),s=b("i"),o=x(),l=I(r),a=x(),c=b("div"),d=b("label"),p=I(f),g=x(),m=b("div"),_=b("input"),y=x(),v=b("i"),w=x(),M=b("div"),k=b("button"),S=b("i"),L=x(),T=I(C),E=x(),O=b("button"),N=b("i"),V=x(),B=I(R),h(s,"class","fa-duotone fa-arrow-up mr-2"),h(n,"class","text-2xl font-bold text-green-400 mb-4 flex items-center"),h(d,"class","block text-green-400 mb-2"),h(d,"for","DepositAmount"),h(_,"type","number"),h(_,"id","DepositAmount"),h(_,"class","w-full bg-[#283040] text-white font-bold pl-4 pr-12 py-3 rounded-lg border border-green-400 focus:outline-none focus:border-green-600 transition-colors duration-500 placeholder-gray-500"),h(_,"placeholder","0"),h(v,"class","fa-duotone fa-dollar-sign absolute top-1/2 right-4 transform -translate-y-1/2 text-green-400"),h(m,"class","relative"),h(c,"class","mb-4"),h(S,"class","fa-duotone fa-times-circle text-lg mr-2"),h(k,"class","bg-gray-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(N,"class","fa-duotone fa-check-circle text-lg mr-2"),h(O,"class","bg-green-600 text-white py-2 px-4 rounded-lg flex items-center transition-colors duration-300"),h(M,"class","flex justify-center space-x-4"),h(e,"class","bg-[#1c2333] p-8 rounded-lg shadow-2xl w-96 relative"),h(t,"class","fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50")},m(D,A){Q(D,t,A),u(t,e),u(e,n),u(n,s),u(n,o),u(n,l),u(e,a),u(e,c),u(c,d),u(d,p),u(c,g),u(c,m),u(m,_),Ft(_,i[14]),u(m,y),u(m,v),u(e,w),u(e,M),u(M,k),u(k,S),u(k,L),u(k,T),u(M,E),u(M,O),u(O,N),u(O,V),u(O,B),P=!0,W||($=[tt(_,"input",i[63]),tt(k,"click",i[64]),tt(O,"click",i[38])],W=!0)},p(D,A){(!P||A[0]&1)&&r!==(r=D[0].deposit_to_account+"")&&z(l,r),(!P||A[0]&1)&&f!==(f=D[0].deposit_amount+"")&&z(p,f),A[0]&16384&&ge(_.value)!==D[14]&&Ft(_,D[14]),(!P||A[0]&1)&&C!==(C=D[0].cancel+"")&&z(T,C),(!P||A[0]&1)&&R!==(R=D[0].deposit+"")&&z(B,R)},i(D){P||(D&&Wt(()=>{P&&(H&&H.end(1),F=ee(e,Kt,{duration:250,easing:Tt}),F.start())}),P=!0)},o(D){F&&F.invalidate(),D&&(H=be(e,Kt,{duration:250,easing:Tt})),P=!1},d(D){D&&G(t),D&&H&&H.end(),W=!1,Ut($)}}}function qg(i){let t,e,n,s,o,r,l=i[0].accounts+"",a,c,d,f=[],p=new Map,g,m,_,y,v,w,M,k,S,L,C,T,E,O,N=oe(i[1]);const V=D=>D[72].id;for(let D=0;D',y=x(),R&&R.c(),v=x(),B&&B.c(),w=x(),F&&F.c(),M=x(),H&&H.c(),k=x(),P&&P.c(),S=x(),W&&W.c(),L=x(),$&&$.c(),C=Ds(),h(o,"class","fa-duotone fa-users text-3xl text-blue-200 mr-3"),h(s,"class","text-5xl font-extrabold text-left text-blue-400 mb-10"),h(d,"class","relative grid grid-cols-3 gap-y-10 gap-x-4 w-[90%]"),h(m,"class","bg-[#1c2333] mt-6 py-8 px-8 w-[250px] h-[200px] rounded-2xl shadow-lg flex items-center justify-center cursor-pointer border border-dashed border-blue-400 hover:border-blue-600 transition-all duration-500"),h(n,"class","bg-gray-700/10 p-8 rounded-xl shadow-lg border border-blue-200/5"),h(e,"class","absolute w-[90%] h-full p-6 overflow-auto left-[130px]"),h(t,"class","absolute w-full h-full bg-gray-800 text-white")},m(D,A){Q(D,t,A),u(t,e),u(e,n),u(n,s),u(s,o),u(s,r),u(s,a),u(n,c),u(n,d);for(let Y=0;Y{R=null}),ae()),D[5]?B?(B.p(D,A),A[0]&32&&rt(B,1)):(B=Pa(D),B.c(),rt(B,1),B.m(w.parentNode,w)):B&&(le(),pt(B,1,1,()=>{B=null}),ae()),D[7]?F?(F.p(D,A),A[0]&128&&rt(F,1)):(F=Ca(D),F.c(),rt(F,1),F.m(M.parentNode,M)):F&&(le(),pt(F,1,1,()=>{F=null}),ae()),D[9]?H?(H.p(D,A),A[0]&512&&rt(H,1)):(H=La(D),H.c(),rt(H,1),H.m(k.parentNode,k)):H&&(le(),pt(H,1,1,()=>{H=null}),ae()),D[10]?P?(P.p(D,A),A[0]&1024&&rt(P,1)):(P=Ta(D),P.c(),rt(P,1),P.m(S.parentNode,S)):P&&(le(),pt(P,1,1,()=>{P=null}),ae()),D[13]?W?(W.p(D,A),A[0]&8192&&rt(W,1)):(W=Ra(D),W.c(),rt(W,1),W.m(L.parentNode,L)):W&&(le(),pt(W,1,1,()=>{W=null}),ae()),D[15]?$?($.p(D,A),A[0]&32768&&rt($,1)):($=Ea(D),$.c(),rt($,1),$.m(C.parentNode,C)):$&&(le(),pt($,1,1,()=>{$=null}),ae())},i(D){if(!T){for(let A=0;A{_=ee(e,He,{duration:1e3,easing:Tt}),_.start()})),rt(R),rt(B),rt(F),rt(H),rt(P),rt(W),rt($),T=!0}},o(D){for(let A=0;Ae(0,n=q)),it(i,Ai,q=>e(2,o=q));let M=ct({}),k=ct([]);it(i,k,q=>e(1,s=q)),Mu(k,q=>q.reduce((bt,Ct)=>bt+Ct.balance,0));let S=ct(!1);it(i,S,q=>e(3,r=q));let L=ct(!1);it(i,L,q=>e(5,a=q));let C=ct(!1);it(i,C,q=>e(7,d=q));let T=ct(!1);it(i,T,q=>e(9,p=q));let E=ct(!1);it(i,E,q=>e(10,g=q));let O=ct(!1);it(i,O,q=>e(13,y=q));let N=ct(!1);it(i,N,q=>e(15,w=q));let V=ct("");it(i,V,q=>e(4,l=q));let R=ct("");it(i,R,q=>e(6,c=q));let B=ct("");it(i,B,q=>e(8,f=q));let F=ct(0),H=ct(null);it(i,H,q=>e(12,_=q));let P=ct("");it(i,P,q=>e(11,m=q));let W=ct(0);it(i,W,q=>e(14,v=q));async function $(q){const bt=qt(R);if(bt)try{(await Dt("ps-banking:client:renameAccount",{id:q,newName:bt})).success?(k.update(_t=>_t.map(Zt=>Zt.id===q?{...Zt,holder:bt}:Zt)),R.set(""),L.set(!1),et(),yt(n.account_renamed_successfully,n.success,"check-circle")):yt(n.account_rename_failed,n.error,"exclamation-circle")}catch(Ct){console.error(Ct),yt(n.account_rename_failed,n.error,"exclamation-circle")}}async function D(q){const bt=qt(k).find(Ct=>Ct.id===q);bt&&(await Dt("ps-banking:client:copyAccountNumber",{accountNumber:bt.cardNumber}),yt(n.account_number_copied,n.success,"clipboard"))}async function A(q,bt){try{const Ct=await Dt("ps-banking:client:addUserToAccount",{accountId:q,userId:bt});Ct.success?(k.update(_t=>_t.map(Lt=>Lt.id===q?{...Lt,users:[...Lt.users,{name:Ct.userName,identifier:bt}]}:Lt)),yt(`${Ct.userName} ${n.user_added_successfully}`,n.success,"check-circle"),S.set(!1),V.set("0"),et()):yt(Ct.message,n.error,"exclamation-circle")}catch(Ct){console.error(Ct),yt(n.user_addition_failed,n.error,"exclamation-circle")}}async function Y(){const q=qt(H),bt=qt(P);if(q!==null&&bt)try{(await Dt("ps-banking:client:removeUserFromAccount",{accountId:q,user:bt})).success?(k.update(_t=>_t.map(Lt=>Lt.id===q?{...Lt,users:Lt.users.filter(we=>we.identifier!==bt)}:Lt)),yt(`${n.removed_successfully}`,n.success,"check-circle"),P.set(""),E.set(!1),et()):yt(n.user_removal_failed,n.error,"exclamation-circle")}catch(Ct){console.error(Ct),yt(n.user_removal_failed,n.error,"exclamation-circle")}else yt(n.select_account_and_user,n.error,"exclamation-circle")}async function X(q){(await Dt("ps-banking:client:deleteAccount",{accountId:q})).success?(k.update(Ct=>Ct.filter(_t=>_t.id!==q)),yt(n.account_deleted_successfully,n.success,"check-circle"),T.set(!1)):yt(n.account_deletion_failed,n.error,"exclamation-circle")}async function K(){const q=qt(B),bt=qt(F),Ct=Math.max(...qt(k).map(Ot=>Ot.id))+1,_t=Math.random().toString().slice(2,18),Zt=Kg(_t),Lt={id:Ct,balance:bt,holder:q,cardNumber:Zt,users:[],owner:{state:!0,name:qt(M).name,identifier:qt(M).identifier}};(await Dt("ps-banking:client:createNewAccount",{newAccount:Lt})).success?(k.update(Ot=>[...Ot,Lt]),B.set(""),F.set(0),C.set(!1),et(),yt(n.new_account_created_successfully,n.success,"check-circle")):yt(n.new_account_creation_failed,n.error,"exclamation-circle")}async function Z(){const q=qt(H),bt=qt(W);q!==null&&bt>0?(await Dt("ps-banking:client:withdrawFromAccount",{accountId:q,amount:bt})).success?(k.update(_t=>_t.map(Lt=>Lt.id===q&&Lt.balance>=bt?{...Lt,balance:Lt.balance-bt}:Lt)),yt(`${n.withdrew} ${bt} ${n.successfully}`,n.success,"check-circle"),W.set(0),O.set(!1)):yt(n.withdrawal_failed,n.error,"exclamation-circle"):yt(n.select_valid_account_and_amount,n.error,"exclamation-circle")}async function J(){const q=qt(H),bt=qt(W);q!==null&&bt>0?(await Dt("ps-banking:client:depositToAccount",{accountId:q,amount:bt})).success?(k.update(_t=>_t.map(Lt=>Lt.id===q?{...Lt,balance:Lt.balance+bt}:Lt)),yt(`${n.deposited} ${bt} ${n.successfully}`,n.success,"check-circle"),W.set(0),N.set(!1)):yt(n.deposit_failed,n.error,"exclamation-circle"):yt(n.select_valid_account_and_amount,n.error,"exclamation-circle")}async function st(){try{const q=await Dt("ps-banking:client:getUser",{});M.set(q)}catch(q){console.error(q)}}async function et(){try{const q=await Dt("ps-banking:client:getAccounts",{});k.set(q)}catch(q){console.error(q)}}Di(()=>{st(),et()});const vt=q=>q.identifier===qt(M).identifier,at=q=>D(q.id),ut=q=>L.set(q.id),U=q=>S.set(q.id),j=q=>{H.set(q.id),P.set(""),E.set(!0)},lt=q=>{H.set(q.id),T.set(!0)},kt=q=>{H.set(q.id),N.set(!0)},mt=q=>{H.set(q.id),O.set(!0)},Xt=()=>C.set(!0);function jt(){l=ge(this.value),V.set(l)}const Jt=()=>{S.set(!1),V.set(0)},Et=()=>A(qt(S),l);function gt(){c=this.value,R.set(c)}const ft=()=>L.set(!1),Mt=()=>$(qt(L));function Qt(){f=this.value,B.set(f)}const dt=()=>C.set(!1),Ht=()=>T.set(!1),ue=()=>X(qt(H)),de=q=>q.id===_;function De(){m=cu(this),P.set(m)}const Ae=()=>{E.set(!1),P.set("")};function ke(){v=ge(this.value),W.set(v)}const _e=()=>{O.set(!1),W.set(0)};function me(){v=ge(this.value),W.set(v)}return[n,s,o,r,l,a,c,d,f,p,g,m,_,y,v,w,M,k,S,L,C,T,E,O,N,V,R,B,H,P,W,$,D,A,Y,X,K,Z,J,vt,at,ut,U,j,lt,kt,mt,Xt,jt,Jt,Et,gt,ft,Mt,Qt,dt,Ht,ue,de,De,Ae,ke,_e,me,()=>{N.set(!1),W.set(0)}]}class Qg extends je{constructor(t){super(),We(this,t,Gg,qg,Ee,{},null,[-1,-1,-1])}}function Zg(i){let t,e;return t=new Qg({}),{c(){oi(t.$$.fragment)},m(n,s){ze(t,n,s),e=!0},i(n){e||(rt(t.$$.fragment,n),e=!0)},o(n){pt(t.$$.fragment,n),e=!1},d(n){Ne(t,n)}}}function Jg(i){let t,e;return t=new Xg({}),{c(){oi(t.$$.fragment)},m(n,s){ze(t,n,s),e=!0},i(n){e||(rt(t.$$.fragment,n),e=!0)},o(n){pt(t.$$.fragment,n),e=!1},d(n){Ne(t,n)}}}function tm(i){let t,e;return t=new Hg({}),{c(){oi(t.$$.fragment)},m(n,s){ze(t,n,s),e=!0},i(n){e||(rt(t.$$.fragment,n),e=!0)},o(n){pt(t.$$.fragment,n),e=!1},d(n){Ne(t,n)}}}function em(i){let t,e;return t=new Ng({}),{c(){oi(t.$$.fragment)},m(n,s){ze(t,n,s),e=!0},i(n){e||(rt(t.$$.fragment,n),e=!0)},o(n){pt(t.$$.fragment,n),e=!1},d(n){Ne(t,n)}}}function im(i){let t,e;return t=new Ig({}),{c(){oi(t.$$.fragment)},m(n,s){ze(t,n,s),e=!0},i(n){e||(rt(t.$$.fragment,n),e=!0)},o(n){pt(t.$$.fragment,n),e=!1},d(n){Ne(t,n)}}}function nm(i){let t,e;return t=new Rg({}),{c(){oi(t.$$.fragment)},m(n,s){ze(t,n,s),e=!0},i(n){e||(rt(t.$$.fragment,n),e=!0)},o(n){pt(t.$$.fragment,n),e=!1},d(n){Ne(t,n)}}}function sm(i){let t,e;return t=new Lg({}),{c(){oi(t.$$.fragment)},m(n,s){ze(t,n,s),e=!0},i(n){e||(rt(t.$$.fragment,n),e=!0)},o(n){pt(t.$$.fragment,n),e=!1},d(n){Ne(t,n)}}}function om(i){let t,e,n,s,o,r,l,a,c,d,f,p,g,m,_=i[7].overview+"",y,v,w,M,k,S,L,C,T,E=i[7].bills+"",O,N,V,R,B,F,H,P,W,$=i[7].history+"",D,A,Y,X,K,Z,J,st,et,vt=i[7].withdraw+"",at,ut,U,j,lt,kt,mt,Xt,jt,Jt=i[7].deposit+"",Et,gt,ft,Mt,Qt,dt,Ht,ue,de,De=i[7].stats+"",Ae,ke,_e,me,Pe,q,bt,Ct,_t,Zt=i[7].accounts+"",Lt,we,Ot,ie,Vt,nt,zt,ht=i[7].close+"",Me,pi,gi,It,Ye,Ni;const Ci=[sm,nm,im,em,tm,Jg,Zg],Fe=[];function un(wt,ne){return wt[0]?0:wt[1]?1:wt[2]?2:wt[3]?3:wt[4]?4:wt[5]?5:wt[6]?6:-1}return~(n=un(i))&&(s=Fe[n]=Ci[n](i)),{c(){t=b("div"),e=b("div"),s&&s.c(),o=x(),r=b("div"),l=b("div"),a=b("label"),c=b("input"),d=x(),f=b("span"),p=b("i"),g=x(),m=b("span"),y=I(_),v=x(),w=b("label"),M=b("input"),k=x(),S=b("span"),L=b("i"),C=x(),T=b("span"),O=I(E),N=x(),V=b("label"),R=b("input"),B=x(),F=b("span"),H=b("i"),P=x(),W=b("span"),D=I($),A=x(),Y=b("label"),X=b("input"),K=x(),Z=b("span"),J=b("i"),st=x(),et=b("span"),at=I(vt),ut=x(),U=b("label"),j=b("input"),lt=x(),kt=b("span"),mt=b("i"),Xt=x(),jt=b("span"),Et=I(Jt),gt=x(),ft=b("label"),Mt=b("input"),Qt=x(),dt=b("span"),Ht=b("i"),ue=x(),de=b("span"),Ae=I(De),ke=x(),_e=b("label"),me=b("input"),Pe=x(),q=b("span"),bt=b("i"),Ct=x(),_t=b("span"),Lt=I(Zt),we=x(),Ot=b("div"),ie=b("button"),Vt=b("i"),nt=x(),zt=b("span"),Me=I(ht),h(c,"type","radio"),h(c,"name","radio"),c.value="overview",h(c,"class","hidden peer"),c.checked=i[0],h(p,"class","fa-duotone fa-house text-3xl text-blue-300 mb-2"),h(m,"class","relative"),h(f,"class","w-[97%] relative flex flex-col items-center text-gray-300 py-4 peer-checked:shadow-md transition-all duration-500 rounded-xl peer-checked:text-blue-400 peer-checked:shadow-lg hover:text-blue-300 duration-500 peer-checked:bg-gray-600 hover:cursor-pointer hover:bg-gray-800/80"),h(a,"class","text-white font-bold p-0 rounded flex flex-col items-center uppercase w-[97%]"),h(M,"type","radio"),h(M,"name","radio"),M.value="send",h(M,"class","hidden peer"),M.checked=i[1],h(L,"class","fa-duotone fa-file-invoice text-3xl text-blue-300 mb-2"),h(T,"class","relative"),h(S,"class","w-[97%] relative flex flex-col items-center text-gray-300 py-4 peer-checked:shadow-md transition-all duration-500 rounded-xl peer-checked:text-blue-400 peer-checked:shadow-lg hover:text-blue-300 duration-500 peer-checked:bg-gray-600 hover:cursor-pointer hover:bg-gray-800/80"),h(w,"class","text-white font-bold p-0 rounded flex flex-col items-center uppercase w-[97%]"),h(R,"type","radio"),h(R,"name","radio"),R.value="history",h(R,"class","hidden peer"),R.checked=i[2],h(H,"class","fa-duotone fa-circle-dollar text-3xl text-blue-300 mb-2"),h(W,"class","relative"),h(F,"class","w-[97%] relative flex flex-col items-center text-gray-300 py-4 peer-checked:shadow-md transition-all duration-500 rounded-xl peer-checked:text-blue-400 peer-checked:shadow-lg hover:text-blue-300 duration-500 peer-checked:bg-gray-600 hover:cursor-pointer hover:bg-gray-800/80"),h(V,"class","text-white font-bold p-0 rounded flex flex-col items-center uppercase w-[97%]"),h(X,"type","radio"),h(X,"name","radio"),X.value="control",h(X,"class","hidden peer"),X.checked=i[3],h(J,"class","fa-duotone fa-minus text-3xl text-blue-300 mb-2"),h(et,"class","relative"),h(Z,"class","w-[97%] relative flex flex-col items-center text-gray-300 py-4 peer-checked:shadow-md transition-all duration-500 rounded-xl peer-checked:text-blue-400 peer-checked:shadow-lg hover:text-blue-300 duration-500 peer-checked:bg-gray-600 hover:cursor-pointer hover:bg-gray-800/80"),h(Y,"class","text-white font-bold p-0 rounded flex flex-col items-center uppercase w-[97%]"),h(j,"type","radio"),h(j,"name","radio"),j.value="control",h(j,"class","hidden peer"),j.checked=i[4],h(mt,"class","fa-duotone fa-plus text-3xl text-blue-300 mb-2"),h(jt,"class","relative"),h(kt,"class","w-[97%] relative flex flex-col items-center text-gray-300 py-4 peer-checked:shadow-md transition-all duration-500 rounded-xl peer-checked:text-blue-400 peer-checked:shadow-lg hover:text-blue-300 duration-500 peer-checked:bg-gray-600 hover:cursor-pointer hover:bg-gray-800/80"),h(U,"class","text-white font-bold p-0 rounded flex flex-col items-center uppercase w-[97%]"),h(Mt,"type","radio"),h(Mt,"name","radio"),Mt.value="control",h(Mt,"class","hidden peer"),Mt.checked=i[5],h(Ht,"class","fa-duotone fa-chart-simple text-3xl text-blue-300 mb-2"),h(de,"class","relative"),h(dt,"class","w-[97%] relative flex flex-col items-center text-gray-300 py-4 peer-checked:shadow-md transition-all duration-500 rounded-xl peer-checked:text-blue-400 peer-checked:shadow-lg hover:text-blue-300 duration-500 peer-checked:bg-gray-600 hover:cursor-pointer hover:bg-gray-800/80"),h(ft,"class","text-white font-bold p-0 rounded flex flex-col items-center uppercase w-[97%]"),h(me,"type","radio"),h(me,"name","radio"),me.value="control",h(me,"class","hidden peer"),me.checked=i[6],h(bt,"class","fa-duotone fa-users text-3xl text-blue-300 mb-2"),h(_t,"class","relative"),h(q,"class","w-[97%] relative flex flex-col items-center text-gray-300 py-4 peer-checked:shadow-md transition-all duration-500 rounded-xl peer-checked:text-blue-400 peer-checked:shadow-lg hover:text-blue-300 duration-500 peer-checked:bg-gray-600 hover:cursor-pointer hover:bg-gray-800/80"),h(_e,"class","text-white font-bold p-0 rounded flex flex-col items-center uppercase w-[97%]"),h(Vt,"class","fa-duotone fa-circle-xmark text-3xl text-blue-300 mb-2"),h(zt,"class","relative"),h(ie,"class","w-[95%] text-blue-200 font-bold uppercase p-5 rounded-lg hover:bg-gray-800/80 duration-500 h-[100px] flex flex-col items-center"),h(Ot,"class","relative -bottom-48 left-[.5px]"),h(l,"class","relative h-full w-full top-3 left-[2px] space-y-2"),h(r,"class","relative bg-gray-700/90 left-0 border border-gray-600/40 h-full w-28 flex flex-col items-center rounded-l-xl overflow-hidden"),h(e,"class","absolute w-[80%] h-[90%] rounded-xl overflow-hidden"),h(t,"class","h-screen w-screen flex flex-col items-center justify-center select-none overflow-hidden")},m(wt,ne){Q(wt,t,ne),u(t,e),~n&&Fe[n].m(e,null),u(e,o),u(e,r),u(r,l),u(l,a),u(a,c),u(a,d),u(a,f),u(f,p),u(f,g),u(f,m),u(m,y),u(l,v),u(l,w),u(w,M),u(w,k),u(w,S),u(S,L),u(S,C),u(S,T),u(T,O),u(l,N),u(l,V),u(V,R),u(V,B),u(V,F),u(F,H),u(F,P),u(F,W),u(W,D),u(l,A),u(l,Y),u(Y,X),u(Y,K),u(Y,Z),u(Z,J),u(Z,st),u(Z,et),u(et,at),u(l,ut),u(l,U),u(U,j),u(U,lt),u(U,kt),u(kt,mt),u(kt,Xt),u(kt,jt),u(jt,Et),u(l,gt),u(l,ft),u(ft,Mt),u(ft,Qt),u(ft,dt),u(dt,Ht),u(dt,ue),u(dt,de),u(de,Ae),u(l,ke),u(l,_e),u(_e,me),u(_e,Pe),u(_e,q),u(q,bt),u(q,Ct),u(q,_t),u(_t,Lt),u(l,we),u(l,Ot),u(Ot,ie),u(ie,Vt),u(ie,nt),u(ie,zt),u(zt,Me),It=!0,Ye||(Ni=[tt(c,"change",i[8]),tt(M,"change",i[9]),tt(R,"change",i[10]),tt(X,"change",i[11]),tt(j,"change",i[12]),tt(Mt,"change",i[13]),tt(me,"change",i[14]),tt(ie,"click",i[15])],Ye=!0)},p(wt,[ne]){let Ue=n;n=un(wt),n!==Ue&&(s&&(le(),pt(Fe[Ue],1,1,()=>{Fe[Ue]=null}),ae()),~n?(s=Fe[n],s||(s=Fe[n]=Ci[n](wt),s.c()),rt(s,1),s.m(e,o)):s=null),(!It||ne&1)&&(c.checked=wt[0]),(!It||ne&128)&&_!==(_=wt[7].overview+"")&&z(y,_),(!It||ne&2)&&(M.checked=wt[1]),(!It||ne&128)&&E!==(E=wt[7].bills+"")&&z(O,E),(!It||ne&4)&&(R.checked=wt[2]),(!It||ne&128)&&$!==($=wt[7].history+"")&&z(D,$),(!It||ne&8)&&(X.checked=wt[3]),(!It||ne&128)&&vt!==(vt=wt[7].withdraw+"")&&z(at,vt),(!It||ne&16)&&(j.checked=wt[4]),(!It||ne&128)&&Jt!==(Jt=wt[7].deposit+"")&&z(Et,Jt),(!It||ne&32)&&(Mt.checked=wt[5]),(!It||ne&128)&&De!==(De=wt[7].stats+"")&&z(Ae,De),(!It||ne&64)&&(me.checked=wt[6]),(!It||ne&128)&&Zt!==(Zt=wt[7].accounts+"")&&z(Lt,Zt),(!It||ne&128)&&ht!==(ht=wt[7].close+"")&&z(Me,ht)},i(wt){It||(rt(s),wt&&Wt(()=>{It&&(gi&&gi.end(1),pi=ee(e,Kt,{duration:1e3,easing:Tt}),pi.start())}),It=!0)},o(wt){pt(s),pi&&pi.invalidate(),wt&&(gi=be(e,Ws,{duration:1e3,easing:Tt})),It=!1},d(wt){wt&&G(t),~n&&Fe[n].d(),wt&&gi&&gi.end(),Ye=!1,Ut(Ni)}}}function rm(i,t,e){let n,s,o,r,l,a,c,d;it(i,Ze,k=>e(0,n=k)),it(i,Je,k=>e(1,s=k)),it(i,ti,k=>e(2,o=k)),it(i,ei,k=>e(3,r=k)),it(i,mi,k=>e(4,l=k)),it(i,bi,k=>e(5,a=k)),it(i,_i,k=>e(6,c=k)),it(i,Be,k=>e(7,d=k));async function f(){try{const k=await Dt("ps-banking:client:getMoneyTypes",{}),S=k.find(C=>C.name==="bank"),L=k.find(C=>C.name==="cash");S&&ni.set(S.amount),L&&fi.set(L.amount)}catch(k){console.error(k)}}return Di(async()=>{f();try{const k=await Dt("ps-banking:client:getLocales",{});Be.set(k)}catch(k){console.error(k)}}),[n,s,o,r,l,a,c,d,()=>{Ze.set(!0),Je.set(!1),ti.set(!1),ei.set(!1),mi.set(!1),bi.set(!1),_i.set(!1)},()=>{Ze.set(!1),Je.set(!0),ti.set(!1),ei.set(!1),mi.set(!1),bi.set(!1),_i.set(!1)},()=>{Ze.set(!1),Je.set(!1),ti.set(!0),ei.set(!1),mi.set(!1),bi.set(!1),_i.set(!1)},()=>{Ze.set(!1),Je.set(!1),ti.set(!1),ei.set(!0),mi.set(!1),bi.set(!1),_i.set(!1)},()=>{Ze.set(!1),Je.set(!1),ti.set(!1),ei.set(!1),mi.set(!0),bi.set(!1),_i.set(!1)},()=>{Ze.set(!1),Je.set(!1),ti.set(!1),ei.set(!1),mi.set(!1),bi.set(!0),_i.set(!1)},()=>{Ze.set(!1),Je.set(!1),ti.set(!1),ei.set(!1),mi.set(!1),bi.set(!1),_i.set(!0)},()=>{Dt("ps-banking:client:hideUI"),wn.set(!1)}]}class lm extends je{constructor(t){super(),We(this,t,rm,om,Ee,{})}}const am=()=>!window.invokeNative,cm=(i,t=1e3)=>{if(am())for(const e of i)setTimeout(()=>{window.dispatchEvent(new MessageEvent("message",{data:{action:e.action,data:e.data}}))},t)};function Fa(i,t,e){const n=i.slice();return n[2]=t[e],n}function Ia(i,t,e){const n=i.slice();return n[2]=t[e],n}function um(i){let t,e;return t=new lm({}),{c(){oi(t.$$.fragment)},m(n,s){ze(t,n,s),e=!0},i(n){e||(rt(t.$$.fragment,n),e=!0)},o(n){pt(t.$$.fragment,n),e=!1},d(n){Ne(t,n)}}}function dm(i){let t,e=[],n=new Map,s,o=oe(i[1]);const r=l=>l[2].id;for(let l=0;ll[2].id;for(let l=0;l{v&&(y&&y.end(1),_=ee(e,He,{duration:300}),_.start())}),v=!0)},o(w){_&&_.invalidate(),w&&(y=be(e,Ws,{duration:300})),v=!1},d(w){w&&G(e),w&&y&&y.end()}}}function za(i,t){let e,n,s,o,r,l,a=t[2].title+"",c,d,f,p=t[2].message+"",g,m,_,y,v;return{key:i,first:null,c(){e=b("div"),n=b("i"),o=x(),r=b("div"),l=b("p"),c=I(a),d=x(),f=b("p"),g=I(p),m=x(),h(n,"class",s="fa-duotone fa-"+t[2].icon+" text-2xl"),h(l,"class","font-bold"),h(e,"class","bg-gray-900 text-blue-200 py-3 px-6 rounded-lg shadow-xl flex items-center space-x-3 transform transition-transform duration-500 border border-gray-700/50"),this.first=e},m(w,M){Q(w,e,M),u(e,n),u(e,o),u(e,r),u(r,l),u(l,c),u(r,d),u(r,f),u(f,g),u(e,m),v=!0},p(w,M){t=w,(!v||M&2&&s!==(s="fa-duotone fa-"+t[2].icon+" text-2xl"))&&h(n,"class",s),(!v||M&2)&&a!==(a=t[2].title+"")&&z(c,a),(!v||M&2)&&p!==(p=t[2].message+"")&&z(g,p)},i(w){v||(w&&Wt(()=>{v&&(y&&y.end(1),_=ee(e,He,{duration:300}),_.start())}),v=!0)},o(w){_&&_.invalidate(),w&&(y=be(e,Ws,{duration:300})),v=!1},d(w){w&&G(e),w&&y&&y.end()}}}function hm(i){let t,e,n,s,o,r;e=new Lu({props:{$$slots:{default:[um]},$$scope:{ctx:i}}});const l=[fm,dm],a=[];function c(d,f){return d[0]?0:1}return s=c(i),o=a[s]=l[s](i),{c(){t=b("main"),oi(e.$$.fragment),n=x(),o.c()},m(d,f){Q(d,t,f),ze(e,t,null),u(t,n),a[s].m(t,null),r=!0},p(d,[f]){const p={};f&128&&(p.$$scope={dirty:f,ctx:d}),e.$set(p);let g=s;s=c(d),s===g?a[s].p(d,f):(le(),pt(a[g],1,1,()=>{a[g]=null}),ae(),o=a[s],o?o.p(d,f):(o=a[s]=l[s](d),o.c()),rt(o,1),o.m(t,null))},i(d){r||(rt(e.$$.fragment,d),rt(o),r=!0)},o(d){pt(e.$$.fragment,d),pt(o),r=!1},d(d){d&&G(t),Ne(e),a[s].d()}}}function pm(i,t,e){let n,s;return it(i,en,o=>e(0,n=o)),it(i,Bo,o=>e(1,s=o)),cm([{action:"openBank",data:!0}]),[n,s]}class gm extends je{constructor(t){super(),We(this,t,pm,hm,Ee,{})}}new gm({target:document.getElementById("app")}); diff --git a/resources/[tools]/ps-banking/locales/cs.json b/resources/[tools]/ps-banking/locales/cs.json new file mode 100644 index 000000000..ef9d2ac12 --- /dev/null +++ b/resources/[tools]/ps-banking/locales/cs.json @@ -0,0 +1,139 @@ +{ + "atm": "Bankomat", + "cash": "Hotovost", + "bank_balance": "Stav na účtu", + "deposit_amount": "Částka k vkladu", + "withdraw_amount": "Částka k výběru", + "submit": "Odeslat", + "close": "Zavřít", + "overview": "Přehled", + "bills": "Faktury", + "history": "Historie", + "withdraw": "Vybrat", + "deposit": "Vložit", + "stats": "Statistiky", + "transactions": "Transakce", + "transaction": "Transakce", + "total": "Celkem", + "search_transactions": "Hledat transakce...", + "description": "Popis", + "type": "Typ", + "time_ago": "Před", + "amount": "Částka", + "date": "Datum", + "pay_invoice": "Zaplatit fakturu", + "payment_completed": "Platba dokončena", + "from": "Od", + "delete_all_transactions": "Smazat všechny transakce", + "are_you_sure": "Jsi si jistý?", + "delete_confirmation": "Opravdu chceš smazat všechny své transakce? (Udělěj to pouze, pokud se menu zpomaluje!)", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "history_empty": "Tvoje historie je prázdná", + "all_history_deleted": "Všechny tvé historie byly smazány", + "error": "Chyba", + "success": "Úspěch", + "new_cash": "Nová hotovost", + "withdraw_success": "Výběr úspěšný", + "withdraw_error": "Na tvém účtu není dostatek peněz", + "withdraw_button": "VYBRAT", + "new_bank": "Nový stav účtu", + "current_cash": "Aktuální hotovost", + "deposit_success": "Vklad úspěšný", + "deposit_error": "Nemáš dostatek hotovosti", + "deposit_button": "VLOŽIT", + "total_balance": "Celkový zůstatek", + "quick_actions": "Rychlé akce", + "transfer_money": "Převést peníze", + "easy_transfer": "Snadno převést peníze lidem", + "transfer": "Převést", + "pay_bills": "Zaplatit faktury", + "pay_pending_bills": "Rychle zaplatit své neuhrazené faktury", + "pay": "Zaplatit", + "withdraw_all_money": "Vybrat všechny peníze", + "withdraw_all_from_account": "Vybrat všechny peníze z účtu", + "deposit_cash": "Vložit hotovost", + "deposit_all_cash": "Vložit všechnu hotovost na účet", + "weekly_summary": "Týdenní přehled", + "income": "Příjem", + "expenses": "Výdaje", + "report": "Zpráva", + "latest_transactions": "Poslední transakce", + "see_all": "ZOBRAZIT VŠE", + "unpaid_bills": "Nezaplacené faktury", + "no_unpaid_bills": "Žádné nezaplacené faktury", + "confirm_pay_all_bills": "Opravdu chceš zaplatit všechny své faktury?", + "pay_all_bills": "Zaplatit všechny faktury", + "pay_all_bills_success": "Všechny tvoje faktury byly zaplaceny!", + "pay_all_bills_error": "Nemáš žádné faktury", + "payment_method": "Způsob platby", + "phone_number": "Telefonní číslo", + "id": "ID", + "id_or_phone_number": "ID nebo telefonní číslo", + "no_cash_on_you": "Nemáš u sebe žádnou hotovost", + "deposit_all_success": "Všechny tvoje peníze byly vloženy", + "no_money_on_account": "Tvůj účet je prázdný", + "withdraw_all_success": "Vybral jsi všechny peníze z účtu", + "invoices": "Faktury", + "statistics_reports": "Statistiky a zprávy", + "balance_trend": "Trendy zůstatku", + "balance": "Zůstatek", + "used": "Použito", + "month": "Měsíc", + "balance_dkk": "Zůstatek", + "withdrawn": "Vybral jsi", + "deposited": "Vložil jsi", + "no_transactions": "Žádné nedávné transakce", + "transactions_trend": "Trendy transakcí", + "total_transactions": "Celkem transakcí", + "accounts": "Účty", + "account_number_copied": "Číslo účtu zkopírováno do schránky", + "new_user_to_account": "Nový uživatel na účet", + "server_id": "ID serveru", + "add_user": "Přidat uživatele", + "new_account_name": "Nový název účtu", + "new_name": "Nový název", + "rename": "Přejmenovat", + "create_new_account": "Vytvořit nový účet", + "account_holder": "Majitel účtu", + "initial_balance": "Počáteční zůstatek", + "create": "Vytvořit", + "delete_account": "Smazat účet", + "are_you_sure_you_want_to_delete_this_account": "Opravdu chceš smazat tento účet?", + "delete": "Smazat", + "remove_user_from_account": "Odebrat uživatele z účtu", + "select_user": "Vyber uživatele", + "remove": "Odebrat", + "withdraw_from_account": "Vybrat z účtu", + "deposit_to_account": "Vložit na účet", + "removed_successfully": "úspěšně odstraněn", + "select_account_and_user": "Prosím vyber účet a uživatele", + "account_deleted_successfully": "Účet úspěšně smazán", + "new_account_created_successfully": "Nový účet úspěšně vytvořen", + "withdrew": "Vybral jsi", + "successfully": "úspěšně", + "select_valid_account_and_amount": "Prosím vyber platný účet a částku", + "openBank": "Přístup do banky", + "openATM": "Přístup k bankomatu", + "account_deletion_failed": "Smazání účtu selhalo", + "withdrawal_failed": "Výběr selhal", + "deposit_failed": "Vklad selhal", + "user_added_successfully": "úspěšně přidán", + "user_addition_failed": "Přidání uživatele selhalo", + "new_account_creation_failed": "Vytvoření nového účtu selhalo", + "account_renamed_successfully": "Účet úspěšně přejmenován", + "account_rename_failed": "Přejmenování účtu selhalo", + "rename_account": "Změnit název", + "no_framework_found": "Nebyl nalezen žádný framework", + "cannot_send_self_money": "Nemůžeš poslat peníze sám sobě", + "money_sent": "Poslal jsi %s %s", + "received_money": "Obdržel jsi %s od %s", + "no_money": "Nemáš dostatek peněz", + "user_not_in_city": "Uživatel není ve městě", + "transaction_description": "Transakce", + "cannot_add_self": "Nemůžeš přidat sám sebe", + "player_not_found": "Hráč nenalezen", + "target_player_not_found": "Cílový hráč nenalezen", + "user_already_in_account": "Uživatel je již na účtu", + "account_not_found": "Účet nenalezen" +} \ No newline at end of file diff --git a/resources/[tools]/ps-banking/locales/da.json b/resources/[tools]/ps-banking/locales/da.json new file mode 100644 index 000000000..4a034b428 --- /dev/null +++ b/resources/[tools]/ps-banking/locales/da.json @@ -0,0 +1,112 @@ +{ + "atm": "Hæveautomat", + "cash": "Kontanter", + "bank_balance": "Kontooversigt", + "deposit_amount": "Indbetalingsbeløb", + "withdraw_amount": "Hævningsbeløb", + "submit": "Tilføj", + "close": "Luk", + "overview": "Oversigt", + "bills": "Regninger", + "history": "Historik", + "withdraw": "Hæv", + "deposit": "Indsæt", + "stats": "Statistik", + "transactions": "Transaktioner", + "transaction": "Transaktion", + "total": "Total", + "search_transactions": "Søg i transaktioner...", + "description": "Beskrivelse", + "type": "Type", + "time_ago": "Tid siden", + "amount": "Beløb", + "date": "Dato", + "pay_invoice": "Betal faktura", + "payment_completed": "Betaling fuldført", + "from": "Fra", + "delete_all_transactions": "Slet alle transaktioner", + "are_you_sure": "Er du sikker?", + "delete_confirmation": "Er du sikker på, at du vil slette alle dine transaktioner? (Gør kun dette, hvis menuen er langsom!)", + "cancel": "Annullér", + "confirm": "Bekræft", + "history_empty": "Din historik er tom", + "all_history_deleted": "Du har slettet din historik", + "error": "Fejl", + "success": "Succés", + "new_cash": "Friske Kontanter", + "withdraw_success": "Hævning gennemført", + "withdraw_error": "Din bankbeholdning er for lav", + "withdraw_button": "HÆV", + "new_bank": "Ny Bank konto", + "current_cash": "Nuværende Kontanter", + "deposit_success": "Indbetaling Lykkedes", + "deposit_error": "Du mangler kontanter", + "deposit_button": "INDSÆT", + "total_balance": "Total balance", + "quick_actions": "Hurtige handlinger", + "transfer_money": "Overfør Penge", + "easy_transfer": "Nem-overførsel til personer", + "transfer": "Overfør", + "pay_bills": "Betal Regninger", + "pay_pending_bills": "Betal hurtigt dine udestående regninger", + "pay": "Betal", + "withdraw_all_money": "Tøm kontoen", + "withdraw_all_from_account": "Hæv alle dine penge fra din konto", + "deposit_cash": "Indsæt Kontanter", + "deposit_all_cash": "Indsæt alle dine kontanter på din konto", + "weekly_summary": "Uge Oversigt", + "income": "Indkomst", + "expenses": "Udgifter", + "report": "Rapport", + "latest_transactions": "Seneste Transaktioner", + "see_all": "SE ALLE", + "unpaid_bills": "Ubetalte Fakturaer", + "no_unpaid_bills": "Ingen ubetalte fakturaer", + "confirm_pay_all_bills": "Er du sikker på, at du vil betale alle dine regninger?", + "pay_all_bills": "Betal Alle Regninger", + "pay_all_bills_success": "Du har betalt alle dine regninger!", + "pay_all_bills_error": "Du har ingen regninger", + "payment_method": "Betalingsmetode", + "phone_number": "Telefonnummer", + "id": "ID", + "id_or_phone_number": "ID eller Telefonnummer", + "no_cash_on_you": "Du har ingen kontanter på dig", + "deposit_all_success": "Alle dine kontanter er indsat", + "no_money_on_account": "Din konto er tom", + "withdraw_all_success": "Du har hævet alle dine penge fra kontoen", + "invoices": "Fakturaer", + "statistics_reports": "Statistik og Rapportering", + "balance_trend": "Balance oversigt", + "balance": "Balance", + "used": "Brugt", + "month": "Måned", + "balance_dkk": "Balance DKK", + "withdrawn": "Du har hævet", + "deposited": "Du har indsat", + "no_transactions": "Ingen nylige transaktioner", + "transactions_trend": "Transaktions Udvikling", + "total_transactions": "Total Transaktioner", + "accounts": "Konti", + "account_number_copied": "Kontonummer kopieret til udklipsholder", + "new_user_to_account": "Ny bruger til konto", + "server_id": "Server ID", + "add_user": "Tilføj Bruger", + "new_account_name": "Nyt Kontonavn", + "new_name": "Nyt Navn", + "rename": "Omdøb", + "create_new_account": "Opret Ny Konto", + "account_holder": "Kontoholder", + "initial_balance": "Startbeholdning", + "create": "Opret", + "delete_account": "Slet Konto", + "are_you_sure_you_want_to_delete_this_account": "Er du sikker på, at du vil slette denne konto?", + "delete": "Slet", + "remove_user_from_account": "Fjern Bruger fra Konto", + "select_user": "Vælg Bruger", + "remove": "Fjern", + "withdraw_from_account": "Hæv fra Konto", + "deposit_to_account": "Indsæt på Konto", + "removed_successfully": "Fjernet Succesfuldt", + "select_account_and_user": "Vælg venligst en konto og en bruger", + "account_deleted_successfully": "Konto sletning, gennemført!" +} diff --git a/resources/[tools]/ps-banking/locales/de.json b/resources/[tools]/ps-banking/locales/de.json new file mode 100644 index 000000000..0487552e1 --- /dev/null +++ b/resources/[tools]/ps-banking/locales/de.json @@ -0,0 +1,139 @@ +{ + "atm": "Geldautomat", + "cash": "Bargeld", + "bank_balance": "Kontostand", + "deposit_amount": "Einzahlungsbetrag", + "withdraw_amount": "Abhebungsbetrag", + "submit": "Bestätigen", + "close": "Schließen", + "overview": "Überblick", + "bills": "Rechnungen", + "history": "Verlauf", + "withdraw": "Abheben", + "deposit": "Einzahlen", + "stats": "Statistiken", + "transactions": "Transaktionen", + "transaction": "Transaktion", + "total": "Gesamt", + "search_transactions": "Transaktionen suchen...", + "description": "Beschreibung", + "type": "Typ", + "time_ago": "Vor", + "amount": "Betrag", + "date": "Datum", + "pay_invoice": "Rechnung bezahlen", + "payment_completed": "Zahlung abgeschlossen", + "from": "Von", + "delete_all_transactions": "Alle Transaktionen löschen", + "are_you_sure": "Bist du sicher?", + "delete_confirmation": "Möchtest du wirklich alle deine Transaktionen löschen? (Nur tun, wenn das Menü hängt!)", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "history_empty": "Dein Verlauf ist leer", + "all_history_deleted": "Du hast deinen gesamten Verlauf gelöscht", + "error": "Fehler", + "success": "Erfolg", + "new_cash": "Neues Bargeld", + "withdraw_success": "Abhebung erfolgreich", + "withdraw_error": "Dein Bankkonto hat nicht genügend Guthaben", + "withdraw_button": "ABHEBEN", + "new_bank": "Neuer Kontostand", + "current_cash": "Aktuelles Bargeld", + "deposit_success": "Einzahlung erfolgreich", + "deposit_error": "Du hast nicht genügend Bargeld", + "deposit_button": "EINZAHLEN", + "total_balance": "Gesamtguthaben", + "quick_actions": "Schnellaktionen", + "transfer_money": "Geld überweisen", + "easy_transfer": "Einfach Geld an Personen überweisen", + "transfer": "Überweisen", + "pay_bills": "Rechnungen bezahlen", + "pay_pending_bills": "Schnell deine ausstehenden Rechnungen bezahlen", + "pay": "Bezahlen", + "withdraw_all_money": "Alles Geld abheben", + "withdraw_all_from_account": "Hebe dein gesamtes Geld von deinem Konto ab", + "deposit_cash": "Bargeld einzahlen", + "deposit_all_cash": "Zahle dein gesamtes Bargeld auf dein Konto ein", + "weekly_summary": "Wöchentliche Zusammenfassung", + "income": "Einkommen", + "expenses": "Ausgaben", + "report": "Bericht", + "latest_transactions": "Neueste Transaktionen", + "see_all": "ALLE ANSEHEN", + "unpaid_bills": "Unbezahlte Rechnungen", + "no_unpaid_bills": "Keine unbezahlten Rechnungen", + "confirm_pay_all_bills": "Möchtest du wirklich alle deine Rechnungen bezahlen?", + "pay_all_bills": "Alle Rechnungen bezahlen", + "pay_all_bills_success": "Du hast alle deine Rechnungen bezahlt!", + "pay_all_bills_error": "Du hast keine Rechnungen", + "payment_method": "Zahlungsmethode", + "phone_number": "Telefonnummer", + "id": "ID", + "id_or_phone_number": "ID oder Telefonnummer", + "no_cash_on_you": "Du hast kein Bargeld bei dir", + "deposit_all_success": "Dein gesamtes Bargeld wurde eingezahlt", + "no_money_on_account": "Dein Konto ist leer", + "withdraw_all_success": "Du hast dein gesamtes Geld vom Konto abgehoben", + "invoices": "Rechnungen", + "statistics_reports": "Statistiken und Berichte", + "balance_trend": "Kontostand-Trend", + "balance": "Kontostand", + "used": "Verwendet", + "month": "Monat", + "balance_dkk": "Kontostand", + "withdrawn": "Du hast abgehoben", + "deposited": "Du hast eingezahlt", + "no_transactions": "Keine aktuellen Transaktionen", + "transactions_trend": "Transaktions-Trend", + "total_transactions": "Gesamttransaktionen", + "accounts": "Konten", + "account_number_copied": "Kontonummer in die Zwischenablage kopiert", + "new_user_to_account": "Neuer Benutzer zum Konto hinzufügen", + "server_id": "Server-ID", + "add_user": "Benutzer hinzufügen", + "new_account_name": "Neuer Kontoname", + "new_name": "Neuer Name", + "rename": "Umbenennen", + "create_new_account": "Neues Konto erstellen", + "account_holder": "Kontoinhaber", + "initial_balance": "Anfangsguthaben", + "create": "Erstellen", + "delete_account": "Konto löschen", + "are_you_sure_you_want_to_delete_this_account": "Möchtest du dieses Konto wirklich löschen?", + "delete": "Löschen", + "remove_user_from_account": "Benutzer vom Konto entfernen", + "select_user": "Benutzer auswählen", + "remove": "Entfernen", + "withdraw_from_account": "Vom Konto abheben", + "deposit_to_account": "Auf Konto einzahlen", + "removed_successfully": "Erfolgreich entfernt", + "select_account_and_user": "Bitte wähle ein Konto und einen Benutzer aus", + "account_deleted_successfully": "Konto erfolgreich gelöscht", + "new_account_created_successfully": "Neues Konto erfolgreich erstellt", + "withdrew": "Abgehoben", + "successfully": "Erfolgreich", + "select_valid_account_and_amount": "Bitte wähle ein gültiges Konto und einen Betrag aus", + "openBank": "Bankzugang", + "openATM": "Geldautomatenzugang", + "account_deletion_failed": "Kontolöschung fehlgeschlagen", + "withdrawal_failed": "Abhebung fehlgeschlagen", + "deposit_failed": "Einzahlung fehlgeschlagen", + "user_added_successfully": "Erfolgreich hinzugefügt", + "user_addition_failed": "Benutzer konnte nicht hinzugefügt werden", + "new_account_creation_failed": "Erstellung eines neuen Kontos fehlgeschlagen", + "account_renamed_successfully": "Konto erfolgreich umbenannt", + "account_rename_failed": "Umbenennung des Kontos fehlgeschlagen", + "rename_account": "Namen ändern", + "no_framework_found": "Kein Framework gefunden", + "cannot_send_self_money": "Du kannst dir selbst kein Geld senden", + "money_sent": "Du hast %s an %s gesendet", + "received_money": "Du hast %s von %s erhalten", + "no_money": "Du hast nicht genug Geld", + "user_not_in_city": "Benutzer ist nicht in der Stadt", + "transaction_description": "Transaktion", + "cannot_add_self": "Du kannst dich nicht selbst hinzufügen", + "player_not_found": "Spieler nicht gefunden", + "target_player_not_found": "Zielspieler nicht gefunden", + "user_already_in_account": "Benutzer ist bereits im Konto", + "account_not_found": "Konto nicht gefunden" +} diff --git a/resources/[tools]/ps-banking/locales/en.json b/resources/[tools]/ps-banking/locales/en.json new file mode 100644 index 000000000..a10429d6a --- /dev/null +++ b/resources/[tools]/ps-banking/locales/en.json @@ -0,0 +1,139 @@ +{ + "atm": "ATM", + "cash": "Cash", + "bank_balance": "Bank Balance", + "deposit_amount": "Deposit Amount", + "withdraw_amount": "Withdraw Amount", + "submit": "Submit", + "close": "Close", + "overview": "Overview", + "bills": "Bills", + "history": "History", + "withdraw": "Withdraw", + "deposit": "Deposit", + "stats": "Stats", + "transactions": "Transactions", + "transaction": "Transaction", + "total": "Total", + "search_transactions": "Search transactions...", + "description": "Description", + "type": "Type", + "time_ago": "Time Ago", + "amount": "Amount", + "date": "Date", + "pay_invoice": "Pay Invoice", + "payment_completed": "Payment Completed", + "from": "From", + "delete_all_transactions": "Delete All Transactions", + "are_you_sure": "Are you sure?", + "delete_confirmation": "Are you sure you want to delete all your transactions? (Only do this if the menu lags!)", + "cancel": "Cancel", + "confirm": "Confirm", + "history_empty": "Your history is empty", + "all_history_deleted": "You have deleted all your history", + "error": "Error", + "success": "Success", + "new_cash": "New Cash", + "withdraw_success": "Withdrawal Successful", + "withdraw_error": "Your bank account does not have enough funds", + "withdraw_button": "WITHDRAW", + "new_bank": "New Bank Balance", + "current_cash": "Current Cash", + "deposit_success": "Deposit Successful", + "deposit_error": "You do not have enough cash", + "deposit_button": "DEPOSIT", + "total_balance": "Total Balance", + "quick_actions": "Quick Actions", + "transfer_money": "Transfer Money", + "easy_transfer": "Easily transfer money to people", + "transfer": "Transfer", + "pay_bills": "Pay Bills", + "pay_pending_bills": "Quickly pay your pending bills", + "pay": "Pay", + "withdraw_all_money": "Withdraw All Money", + "withdraw_all_from_account": "Withdraw all your money from your account", + "deposit_cash": "Deposit Cash", + "deposit_all_cash": "Deposit all your cash into your account", + "weekly_summary": "Weekly Summary", + "income": "Income", + "expenses": "Expenses", + "report": "Report", + "latest_transactions": "Latest Transactions", + "see_all": "SEE ALL", + "unpaid_bills": "Unpaid Invoices", + "no_unpaid_bills": "No unpaid invoices", + "confirm_pay_all_bills": "Are you sure you want to pay all your bills?", + "pay_all_bills": "Pay All Bills", + "pay_all_bills_success": "You have paid all your bills!", + "pay_all_bills_error": "You have no bills", + "payment_method": "Payment Method", + "phone_number": "Phone Number", + "id": "ID", + "id_or_phone_number": "ID or Phone Number", + "no_cash_on_you": "You have no cash on you", + "deposit_all_success": "All your cash has been deposited", + "no_money_on_account": "Your account is empty", + "withdraw_all_success": "You have withdrawn all your money from the account", + "invoices": "Invoices", + "statistics_reports": "Statistics and Reports", + "balance_trend": "Balance Trend", + "balance": "Balance", + "used": "Used", + "month": "Month", + "balance_dkk": "Balance", + "withdrawn": "You have withdrawn", + "deposited": "You have deposited", + "no_transactions": "No recent transactions", + "transactions_trend": "Transactions Trend", + "total_transactions": "Total Transactions", + "accounts": "Accounts", + "account_number_copied": "Account number copied to clipboard", + "new_user_to_account": "New user to account", + "server_id": "Server ID", + "add_user": "Add User", + "new_account_name": "New Account Name", + "new_name": "New Name", + "rename": "Rename", + "create_new_account": "Create New Account", + "account_holder": "Account Holder", + "initial_balance": "Initial Balance", + "create": "Create", + "delete_account": "Delete Account", + "are_you_sure_you_want_to_delete_this_account": "Are you sure you want to delete this account?", + "delete": "Delete", + "remove_user_from_account": "Remove User from Account", + "select_user": "Select User", + "remove": "Remove", + "withdraw_from_account": "Withdraw from Account", + "deposit_to_account": "Deposit to Account", + "removed_successfully": "Removed Successfully", + "select_account_and_user": "Please select an account and a user", + "account_deleted_successfully": "Account deleted successfully", + "new_account_created_successfully": "New account created successfully", + "withdrew": "Withdrew", + "successfully": "Successfully", + "select_valid_account_and_amount": "Please select a valid account and amount", + "openBank": "Access Bank", + "openATM": "Access ATM", + "account_deletion_failed": "Account deletion failed", + "withdrawal_failed": "Withdrawal failed", + "deposit_failed": "Deposit failed", + "user_added_successfully": "User added successfully", + "user_addition_failed": "Failed to add user", + "new_account_creation_failed": "Failed to create new account", + "account_renamed_successfully": "Account renamed successfully", + "account_rename_failed": "Account rename failed", + "rename_account": "Change name", + "no_framework_found": "No framework found", + "cannot_send_self_money": "You cannot send money to yourself", + "money_sent": "You have sent %s to %s", + "received_money": "You have received %s from %s", + "no_money": "You do not have enough money", + "user_not_in_city": "User is not in the city", + "transaction_description": "Transaction", + "cannot_add_self": "You cannot add yourself", + "player_not_found": "Player not found", + "target_player_not_found": "Target player not found", + "user_already_in_account": "User is already in the account", + "account_not_found": "Account not found" +} diff --git a/resources/[tools]/ps-banking/locales/es.json b/resources/[tools]/ps-banking/locales/es.json new file mode 100644 index 000000000..f0284f18f --- /dev/null +++ b/resources/[tools]/ps-banking/locales/es.json @@ -0,0 +1,140 @@ +{ + "atm": "Cajero Automático", + "cash": "Efectivo", + "bank_balance": "Saldo Bancario", + "deposit_amount": "Monto a Depositar", + "withdraw_amount": "Monto a Retirar", + "submit": "Enviar", + "close": "Cerrar", + "overview": "Resumen", + "bills": "Facturas", + "history": "Historial", + "withdraw": "Retirar", + "deposit": "Depositar", + "stats": "Estadísticas", + "transactions": "Transacciones", + "transaction": "Transacción", + "total": "Total", + "search_transactions": "Buscar transacciones...", + "description": "Descripción", + "type": "Tipo", + "time_ago": "Hace Tiempo", + "amount": "Cantidad", + "date": "Fecha", + "pay_invoice": "Pagar Factura", + "payment_completed": "Pago Completado", + "from": "De", + "delete_all_transactions": "Eliminar Todas las Transacciones", + "are_you_sure": "¿Estás seguro?", + "delete_confirmation": "¿Estás seguro de que deseas eliminar todas tus transacciones? (¡Haz esto solo si el menú se retrasa!)", + "cancel": "Cancelar", + "confirm": "Confirmar", + "history_empty": "Tu historial está vacío", + "all_history_deleted": "Has eliminado todo tu historial", + "error": "Error", + "success": "Éxito", + "new_cash": "Nuevo Efectivo", + "withdraw_success": "Retiro Exitoso", + "withdraw_error": "Tu cuenta bancaria no tiene suficientes fondos", + "withdraw_button": "RETIRAR", + "new_bank": "Nuevo Saldo Bancario", + "current_cash": "Efectivo Actual", + "deposit_success": "Depósito Exitoso", + "deposit_error": "No tienes suficiente efectivo", + "deposit_button": "DEPOSITAR", + "total_balance": "Saldo Total", + "quick_actions": "Acciones Rápidas", + "transfer_money": "Transferir Dinero", + "easy_transfer": "Transfiere dinero fácilmente a personas", + "transfer": "Transferir", + "pay_bills": "Pagar Facturas", + "pay_pending_bills": "Paga rápidamente tus facturas pendientes", + "pay": "Pagar", + "withdraw_all_money": "Retirar Todo el Dinero", + "withdraw_all_from_account": "Retirar todo tu dinero de tu cuenta", + "deposit_cash": "Depositar Efectivo", + "deposit_all_cash": "Depositar todo tu efectivo en tu cuenta", + "weekly_summary": "Resumen Semanal", + "income": "Ingresos", + "expenses": "Gastos", + "report": "Informe", + "latest_transactions": "Últimas Transacciones", + "see_all": "VER TODO", + "unpaid_bills": "Facturas No Pagadas", + "no_unpaid_bills": "No hay facturas no pagadas", + "confirm_pay_all_bills": "¿Estás seguro de que deseas pagar todas tus facturas?", + "pay_all_bills": "Pagar Todas las Facturas", + "pay_all_bills_success": "¡Has pagado todas tus facturas!", + "pay_all_bills_error": "No tienes facturas", + "payment_method": "Método de Pago", + "phone_number": "Número de Teléfono", + "id": "ID", + "id_or_phone_number": "ID o Número de Teléfono", + "no_cash_on_you": "No tienes efectivo contigo", + "deposit_all_success": "Todo tu efectivo ha sido depositado", + "no_money_on_account": "Tu cuenta está vacía", + "withdraw_all_success": "Has retirado todo tu dinero de la cuenta", + "invoices": "Facturas", + "statistics_reports": "Estadísticas e Informes", + "balance_trend": "Tendencia de Saldo", + "balance": "Saldo", + "used": "Usado", + "month": "Mes", + "balance_dkk": "Saldo", + "withdrawn": "Has retirado", + "deposited": "Has depositado", + "no_transactions": "No hay transacciones recientes", + "transactions_trend": "Tendencia de Transacciones", + "total_transactions": "Total de Transacciones", + "accounts": "Cuentas", + "account_number_copied": "Número de cuenta copiado al portapapeles", + "new_user_to_account": "Nuevo usuario en la cuenta", + "server_id": "ID del Servidor", + "add_user": "Añadir Usuario", + "new_account_name": "Nuevo Nombre de Cuenta", + "new_name": "Nuevo Nombre", + "rename": "Renombrar", + "create_new_account": "Crear Nueva Cuenta", + "account_holder": "Titular de la Cuenta", + "initial_balance": "Saldo Inicial", + "create": "Crear", + "delete_account": "Eliminar Cuenta", + "are_you_sure_you_want_to_delete_this_account": "¿Estás seguro de que deseas eliminar esta cuenta?", + "delete": "Eliminar", + "remove_user_from_account": "Eliminar Usuario de la Cuenta", + "select_user": "Seleccionar Usuario", + "remove": "Eliminar", + "withdraw_from_account": "Retirar de la Cuenta", + "deposit_to_account": "Depositar en la Cuenta", + "removed_successfully": "Eliminado Exitosamente", + "select_account_and_user": "Por favor, selecciona una cuenta y un usuario", + "account_deleted_successfully": "Cuenta eliminada exitosamente", + "new_account_created_successfully": "Nueva cuenta creada exitosamente", + "withdrew": "Retiró", + "successfully": "Exitosamente", + "select_valid_account_and_amount": "Por favor, selecciona una cuenta válida y una cantidad", + "openBank": "Acceder al Banco", + "openATM": "Acceder al Cajero Automático", + "account_deletion_failed": "Fallo al eliminar la cuenta", + "withdrawal_failed": "Fallo en el retiro", + "deposit_failed": "Fallo en el depósito", + "user_added_successfully": "Usuario añadido exitosamente", + "user_addition_failed": "Fallo al añadir usuario", + "new_account_creation_failed": "Fallo al crear nueva cuenta", + "account_renamed_successfully": "Cuenta renombrada exitosamente", + "account_rename_failed": "Fallo al renombrar la cuenta", + "rename_account": "Cambiar nombre", + "no_framework_found": "No se encontró el framework", + "cannot_send_self_money": "No puedes enviarte dinero a ti mismo", + "money_sent": "Has enviado %s a %s", + "received_money": "Has recibido %s de %s", + "no_money": "No tienes suficiente dinero", + "user_not_in_city": "El usuario no está en la ciudad", + "transaction_description": "Transacción", + "cannot_add_self": "No puedes añadirte a ti mismo", + "player_not_found": "Jugador no encontrado", + "target_player_not_found": "Jugador objetivo no encontrado", + "user_already_in_account": "El usuario ya está en la cuenta", + "account_not_found": "Cuenta no encontrada" +} + diff --git a/resources/[tools]/ps-banking/locales/fr.json b/resources/[tools]/ps-banking/locales/fr.json new file mode 100644 index 000000000..39965e9ce --- /dev/null +++ b/resources/[tools]/ps-banking/locales/fr.json @@ -0,0 +1,139 @@ +{ + "atm": "ATM", + "cash": "Argent liquide", + "bank_balance": "Solde bancaire", + "deposit_amount": "Montant du dépôt", + "withdraw_amount": "Montant du retrait", + "submit": "Soumettre", + "close": "Fermer", + "overview": "Aperçu", + "bills": "Factures", + "history": "Historique", + "withdraw": "Retirer", + "deposit": "Déposer", + "stats": "Statistiques", + "transactions": "Transactions", + "transaction": "Transaction", + "total": "Total", + "search_transactions": "Rechercher des transactions...", + "description": "Description", + "type": "Type", + "time_ago": "Il y a", + "amount": "Montant", + "date": "Date", + "pay_invoice": "Payer la facture", + "payment_completed": "Paiement effectué", + "from": "De", + "delete_all_transactions": "Supprimer toutes les transactions", + "are_you_sure": "Êtes-vous sûr?", + "delete_confirmation": "Êtes-vous sûr de vouloir supprimer toutes vos transactions ? (Faites cela uniquement si le menu est lent !)", + "cancel": "Annuler", + "confirm": "Confirmer", + "history_empty": "Votre historique est vide", + "all_history_deleted": "Vous avez supprimé tout votre historique", + "error": "Erreur", + "success": "Succès", + "new_cash": "Nouvel argent liquide", + "withdraw_success": "Retrait réussi", + "withdraw_error": "Votre compte bancaire n'a pas assez de fonds", + "withdraw_button": "RETIRER", + "new_bank": "Nouveau solde bancaire", + "current_cash": "Argent liquide actuel", + "deposit_success": "Dépôt réussi", + "deposit_error": "Vous n'avez pas assez d'argent liquide", + "deposit_button": "DÉPOSER", + "total_balance": "Solde total", + "quick_actions": "Actions rapides", + "transfer_money": "Transférer de l'argent", + "easy_transfer": "Transférer facilement de l'argent aux personnes", + "transfer": "Transférer", + "pay_bills": "Payer les factures", + "pay_pending_bills": "Payer rapidement vos factures en attente", + "pay": "Payer", + "withdraw_all_money": "Retirer tout l'argent", + "withdraw_all_from_account": "Retirer tout votre argent de votre compte", + "deposit_cash": "Déposer de l'argent liquide", + "deposit_all_cash": "Déposer tout votre argent liquide sur votre compte", + "weekly_summary": "Résumé hebdomadaire", + "income": "Revenus", + "expenses": "Dépenses", + "report": "Rapport", + "latest_transactions": "Dernières transactions", + "see_all": "VOIR TOUT", + "unpaid_bills": "Factures impayées", + "no_unpaid_bills": "Aucune facture impayée", + "confirm_pay_all_bills": "Êtes-vous sûr de vouloir payer toutes vos factures ?", + "pay_all_bills": "Payer toutes les factures", + "pay_all_bills_success": "Vous avez payé toutes vos factures !", + "pay_all_bills_error": "Vous n'avez aucune facture", + "payment_method": "Méthode de paiement", + "phone_number": "Numéro de téléphone", + "id": "ID", + "id_or_phone_number": "ID ou numéro de téléphone", + "no_cash_on_you": "Vous n'avez pas d'argent liquide sur vous", + "deposit_all_success": "Tout votre argent liquide a été déposé", + "no_money_on_account": "Votre compte est vide", + "withdraw_all_success": "Vous avez retiré tout votre argent du compte", + "invoices": "Factures", + "statistics_reports": "Statistiques et rapports", + "balance_trend": "Tendance du solde", + "balance": "Solde", + "used": "Utilisé", + "month": "Mois", + "balance_dkk": "Solde", + "withdrawn": "Vous avez retiré", + "deposited": "Vous avez déposé", + "no_transactions": "Aucune transaction récente", + "transactions_trend": "Tendance des transactions", + "total_transactions": "Total des transactions", + "accounts": "Comptes", + "account_number_copied": "Numéro de compte copié dans le presse-papiers", + "new_user_to_account": "Nouvel utilisateur sur le compte", + "server_id": "ID serveur", + "add_user": "Ajouter un utilisateur", + "new_account_name": "Nouveau nom de compte", + "new_name": "Nouveau nom", + "rename": "Renommer", + "create_new_account": "Créer un nouveau compte", + "account_holder": "Titulaire du compte", + "initial_balance": "Solde initial", + "create": "Créer", + "delete_account": "Supprimer le compte", + "are_you_sure_you_want_to_delete_this_account": "Êtes-vous sûr de vouloir supprimer ce compte ?", + "delete": "Supprimer", + "remove_user_from_account": "Supprimer l'utilisateur du compte", + "select_user": "Sélectionner l'utilisateur", + "remove": "Supprimer", + "withdraw_from_account": "Retirer du compte", + "deposit_to_account": "Déposer sur le compte", + "removed_successfully": "Supprimé avec succès", + "select_account_and_user": "Veuillez sélectionner un compte et un utilisateur", + "account_deleted_successfully": "Compte supprimé avec succès", + "new_account_created_successfully": "Nouveau compte créé avec succès", + "withdrew": "Retiré", + "successfully": "Avec succès", + "select_valid_account_and_amount": "Veuillez sélectionner un compte valide et un montant", + "openBank": "Accéder à la banque", + "openATM": "Accéder au ATM", + "account_deletion_failed": "Échec de la suppression du compte", + "withdrawal_failed": "Échec du retrait", + "deposit_failed": "Échec du dépôt", + "user_added_successfully": "Ajouté avec succès", + "user_addition_failed": "Échec de l'ajout de l'utilisateur", + "new_account_creation_failed": "Échec de la création du nouveau compte", + "account_renamed_successfully": "Compte renommé avec succès", + "account_rename_failed": "Échec du renommage du compte", + "rename_account": "Changer le nom", + "no_framework_found": "Aucun framework trouvé", + "cannot_send_self_money": "Vous ne pouvez pas vous envoyer de l'argent", + "money_sent": "Vous avez envoyé %s à %s", + "received_money": "Vous avez reçu %s de %s", + "no_money": "Vous n'avez pas assez d'argent", + "user_not_in_city": "L'utilisateur n'est pas en ville", + "transaction_description": "Transaction", + "cannot_add_self": "Vous ne pouvez pas vous ajouter", + "player_not_found": "Joueur non trouvé", + "target_player_not_found": "Joueur cible non trouvé", + "user_already_in_account": "L'utilisateur est déjà dans le compte", + "account_not_found": "Compte non trouvé" +} diff --git a/resources/[tools]/ps-banking/locales/nl.json b/resources/[tools]/ps-banking/locales/nl.json new file mode 100644 index 000000000..e10daba22 --- /dev/null +++ b/resources/[tools]/ps-banking/locales/nl.json @@ -0,0 +1,140 @@ +{ + "atm": "Geldautomaat", + "cash": "Contant", + "bank_balance": "Banksaldo", + "deposit_amount": "Stortingsbedrag", + "withdraw_amount": "Opnamembedrag", + "submit": "Verzenden", + "close": "Sluiten", + "overview": "Overzicht", + "bills": "Rekeningen", + "history": "Geschiedenis", + "withdraw": "Opnemen", + "deposit": "Storten", + "stats": "Statistieken", + "transactions": "Transacties", + "transaction": "Transactie", + "total": "Totaal", + "search_transactions": "Zoek transacties...", + "description": "Omschrijving", + "type": "Type", + "time_ago": "Tijd geleden", + "amount": "Bedrag", + "date": "Datum", + "pay_invoice": "Factuur betalen", + "payment_completed": "Betaling voltooid", + "from": "Van", + "delete_all_transactions": "Verwijder alle transacties", + "are_you_sure": "Weet je het zeker?", + "delete_confirmation": "Weet je zeker dat je al je transacties wilt verwijderen? (Doe dit alleen wanneer je lag ervaart!)", + "cancel": "Annuleren", + "confirm": "Bevestigen", + "history_empty": "Je geschiedenis is leeg", + "all_history_deleted": "Je hebt al je geschiedenis verwijderd", + "error": "Fout", + "success": "Succes", + "new_cash": "Nieuw Contant", + "withdraw_success": "Opname geslaagd", + "withdraw_error": "Je bankrekening heeft niet genoeg saldo", + "withdraw_button": "OPNEMEN", + "new_bank": "Nieuw Banksaldo", + "current_cash": "Huidig Contant", + "deposit_success": "Storting geslaagd", + "deposit_error": "Je hebt niet genoeg contant geld", + "deposit_button": "STORTEN", + "total_balance": "Totaal Saldo", + "quick_actions": "Snelle Acties", + "transfer_money": "Geld Overmaken", + "easy_transfer": "Eenvoudig geld overmaken naar mensen", + "transfer": "Overmaken", + "pay_bills": "Rekeningen Betalen", + "pay_pending_bills": "Snel je openstaande rekeningen betalen", + "pay": "Betalen", + "withdraw_all_money": "Trek al het geld op", + "withdraw_all_from_account": "Trek al je geld van je rekening op", + "deposit_cash": "Contant Geld Storten", + "deposit_all_cash": "Stort al je contant geld op je rekening", + "weekly_summary": "Wekelijks Overzicht", + "income": "Inkomen", + "expenses": "Uitgaven", + "report": "Rapport", + "latest_transactions": "Laatste Transacties", + "see_all": "TOON ALLE", + "unpaid_bills": "Onbetaalde Facturen", + "no_unpaid_bills": "Geen onbetaalde facturen", + "confirm_pay_all_bills": "Weet je zeker dat je al je rekeningen wilt betalen?", + "pay_all_bills": "Betaal Alle Rekeningen", + "pay_all_bills_success": "Je hebt al je rekeningen betaald!", + "pay_all_bills_error": "Je hebt geen rekeningen", + "payment_method": "Betaalmethode", + "phone_number": "Telefoonnummer", + "id": "ID", + "id_or_phone_number": "ID of Telefoonnummer", + "no_cash_on_you": "Je hebt geen contant geld bij je", + "deposit_all_success": "Al je contant geld is gestort", + "no_money_on_account": "Je rekening is leeg", + "withdraw_all_success": "Je hebt al je geld van de rekening opgenomen", + "invoices": "Facturen", + "statistics_reports": "Statistieken en Rapporten", + "balance_trend": "Saldo Trend", + "balance": "Saldo", + "used": "Gebruikt", + "month": "Maand", + "balance_dkk": "Saldo", + "withdrawn": "Je hebt opgenomen", + "deposited": "Je hebt gestort", + "no_transactions": "Geen recente transacties", + "transactions_trend": "Transacties Trend", + "total_transactions": "Totaal Aantal Transacties", + "accounts": "Rekeningen", + "account_number_copied": "Rekeningnummer gekopieerd naar klembord", + "new_user_to_account": "Nieuwe gebruiker aan rekening", + "server_id": "Server ID", + "add_user": "Voeg Gebruiker Toe", + "new_account_name": "Nieuwe Rekeningnaam", + "new_name": "Nieuwe Naam", + "rename": "Hernoemen", + "create_new_account": "Nieuwe Rekening Aanmaken", + "account_holder": "Rekeninghouder", + "initial_balance": "Aanvankelijk Saldo", + "create": "Aanmaken", + "delete_account": "Verwijder Rekening", + "are_you_sure_you_want_to_delete_this_account": "Weet je zeker dat je deze rekening wilt verwijderen?", + "delete": "Verwijderen", + "remove_user_from_account": "Verwijder Gebruiker van Rekening", + "select_user": "Selecteer Gebruiker", + "remove": "Verwijderen", + "withdraw_from_account": "Opnemen van Rekening", + "deposit_to_account": "Storten op Rekening", + "removed_successfully": "Succesvol verwijderd", + "select_account_and_user": "Selecteer een rekening en een gebruiker", + "account_deleted_successfully": "Rekening succesvol verwijderd", + "new_account_created_successfully": "Nieuwe rekening succesvol aangemaakt", + "withdrew": "Opgenomen", + "successfully": "Succesvol", + "select_valid_account_and_amount": "Selecteer een geldige rekening en bedrag", + "openBank": "Toegang tot Bank", + "openATM": "Toegang tot Geldautomaat", + "account_deletion_failed": "Verwijderen van rekening mislukt", + "withdrawal_failed": "Opname mislukt", + "deposit_failed": "Storting mislukt", + "user_added_successfully": "Succesvol toegevoegd", + "user_addition_failed": "Toevoegen van gebruiker mislukt", + "new_account_creation_failed": "Aanmaken van nieuwe rekening mislukt", + "account_renamed_successfully": "Rekening succesvol hernoemd", + "account_rename_failed": "Hernoemen van rekening mislukt", + "rename_account": "Naam wijzigen", + "no_framework_found": "Geen framework gevonden", + "cannot_send_self_money": "Je kunt geen geld naar jezelf sturen", + "money_sent": "Je hebt %s naar %s gestuurd", + "received_money": "Je hebt %s ontvangen van %s", + "no_money": "Je hebt niet genoeg geld", + "user_not_in_city": "Gebruiker is niet in de stad", + "transaction_description": "Transactie", + "cannot_add_self": "Je kunt jezelf niet toevoegen", + "player_not_found": "Speler niet gevonden", + "target_player_not_found": "Doelspeler niet gevonden", + "user_already_in_account": "Gebruiker is reeds toegevoegd", + "account_not_found": "Rekening niet gevonden" + } + \ No newline at end of file diff --git a/resources/[tools]/ps-banking/locales/pt-br.json b/resources/[tools]/ps-banking/locales/pt-br.json new file mode 100644 index 000000000..cd8bdf554 --- /dev/null +++ b/resources/[tools]/ps-banking/locales/pt-br.json @@ -0,0 +1,139 @@ +{ + "atm": "Caixa Eletrônico", + "cash": "Dinheiro", + "bank_balance": "Saldo Bancário", + "deposit_amount": "Valor do Depósito", + "withdraw_amount": "Valor do Saque", + "submit": "Enviar", + "close": "Fechar", + "overview": "Visão Geral", + "bills": "Contas", + "history": "Histórico", + "withdraw": "Sacar", + "deposit": "Depositar", + "stats": "Estatísticas", + "transactions": "Transações", + "transaction": "Transação", + "total": "Total", + "search_transactions": "Buscar transações...", + "description": "Descrição", + "type": "Tipo", + "time_ago": "Tempo Atrás", + "amount": "Valor", + "date": "Data", + "pay_invoice": "Pagar Fatura", + "payment_completed": "Pagamento Concluído", + "from": "De", + "delete_all_transactions": "Excluir Todas as Transações", + "are_you_sure": "Você tem certeza?", + "delete_confirmation": "Você tem certeza que deseja excluir todas as suas transações? (Faça isso apenas se o menu estiver lento!)", + "cancel": "Cancelar", + "confirm": "Confirmar", + "history_empty": "Seu histórico está vazio", + "all_history_deleted": "Você excluiu todo o seu histórico", + "error": "Erro", + "success": "Sucesso", + "new_cash": "Novo Dinheiro", + "withdraw_success": "Saque Bem-Sucedido", + "withdraw_error": "Sua conta bancária não tem fundos suficientes", + "withdraw_button": "SACAR", + "new_bank": "Novo Saldo Bancário", + "current_cash": "Dinheiro Atual", + "deposit_success": "Depósito Bem-Sucedido", + "deposit_error": "Você não tem dinheiro suficiente", + "deposit_button": "DEPOSITAR", + "total_balance": "Saldo Total", + "quick_actions": "Ações Rápidas", + "transfer_money": "Transferir Dinheiro", + "easy_transfer": "Transfira dinheiro facilmente para pessoas", + "transfer": "Transferir", + "pay_bills": "Pagar Contas", + "pay_pending_bills": "Pague rapidamente suas contas pendentes", + "pay": "Pagar", + "withdraw_all_money": "Sacar Todo o Dinheiro", + "withdraw_all_from_account": "Sacar todo o dinheiro da sua conta", + "deposit_cash": "Depositar Dinheiro", + "deposit_all_cash": "Depositar todo o seu dinheiro na sua conta", + "weekly_summary": "Resumo Semanal", + "income": "Renda", + "expenses": "Despesas", + "report": "Relatório", + "latest_transactions": "Últimas Transações", + "see_all": "VER TUDO", + "unpaid_bills": "Faturas Não Pagas", + "no_unpaid_bills": "Nenhuma fatura não paga", + "confirm_pay_all_bills": "Você tem certeza que deseja pagar todas as suas contas?", + "pay_all_bills": "Pagar Todas as Contas", + "pay_all_bills_success": "Você pagou todas as suas contas!", + "pay_all_bills_error": "Você não tem contas", + "payment_method": "Método de Pagamento", + "phone_number": "Número de Telefone", + "id": "ID", + "id_or_phone_number": "ID ou Número de Telefone", + "no_cash_on_you": "Você não tem dinheiro com você", + "deposit_all_success": "Todo o seu dinheiro foi depositado", + "no_money_on_account": "Sua conta está vazia", + "withdraw_all_success": "Você sacou todo o dinheiro da conta", + "invoices": "Faturas", + "statistics_reports": "Estatísticas e Relatórios", + "balance_trend": "Tendência do Saldo", + "balance": "Saldo", + "used": "Usado", + "month": "Mês", + "balance_dkk": "Saldo", + "withdrawn": "Você sacou", + "deposited": "Você depositou", + "no_transactions": "Nenhuma transação recente", + "transactions_trend": "Tendência das Transações", + "total_transactions": "Total de Transações", + "accounts": "Contas", + "account_number_copied": "Número da conta copiado para a área de transferência", + "new_user_to_account": "Novo usuário na conta", + "server_id": "ID do Servidor", + "add_user": "Adicionar Usuário", + "new_account_name": "Novo Nome da Conta", + "new_name": "Novo Nome", + "rename": "Renomear", + "create_new_account": "Criar Nova Conta", + "account_holder": "Titular da Conta", + "initial_balance": "Saldo Inicial", + "create": "Criar", + "delete_account": "Excluir Conta", + "are_you_sure_you_want_to_delete_this_account": "Você tem certeza que deseja excluir esta conta?", + "delete": "Excluir", + "remove_user_from_account": "Remover Usuário da Conta", + "select_user": "Selecionar Usuário", + "remove": "Remover", + "withdraw_from_account": "Sacar da Conta", + "deposit_to_account": "Depositar na Conta", + "removed_successfully": "Removido com Sucesso", + "select_account_and_user": "Por favor, selecione uma conta e um usuário", + "account_deleted_successfully": "Conta excluída com sucesso", + "new_account_created_successfully": "Nova conta criada com sucesso", + "withdrew": "Sacou", + "successfully": "Com Sucesso", + "select_valid_account_and_amount": "Por favor, selecione uma conta e um valor válidos", + "openBank": "Acessar Banco", + "openATM": "Acessar Caixa Eletrônico", + "account_deletion_failed": "Falha na exclusão da conta", + "withdrawal_failed": "Falha no saque", + "deposit_failed": "Falha no depósito", + "user_added_successfully": "adicionado com sucesso", + "user_addition_failed": "Falha ao adicionar usuário", + "new_account_creation_failed": "Falha ao criar nova conta", + "account_renamed_successfully": "Conta renomeada com sucesso", + "account_rename_failed": "Falha ao renomear a conta", + "rename_account": "Alterar nome", + "no_framework_found": "Nenhum framework encontrado", + "cannot_send_self_money": "Você não pode enviar dinheiro para si mesmo", + "money_sent": "Você enviou %s para %s", + "received_money": "Você recebeu %s de %s", + "no_money": "Você não tem dinheiro suficiente", + "user_not_in_city": "Usuário não está na cidade", + "transaction_description": "Transação", + "cannot_add_self": "Você não pode adicionar a si mesmo", + "player_not_found": "Jogador não encontrado", + "target_player_not_found": "Jogador alvo não encontrado", + "user_already_in_account": "Usuário já está na conta", + "account_not_found": "Conta não encontrada" +} diff --git a/resources/[tools]/ps-banking/locales/pt.json b/resources/[tools]/ps-banking/locales/pt.json new file mode 100644 index 000000000..ca81e8b47 --- /dev/null +++ b/resources/[tools]/ps-banking/locales/pt.json @@ -0,0 +1,139 @@ +{ + "atm": "Multibanco", + "cash": "Dinheiro", + "bank_balance": "Saldo Bancário", + "deposit_amount": "Valor do Depósito", + "withdraw_amount": "Valor do Levantamento", + "submit": "Submeter", + "close": "Fechar", + "overview": "Visão Geral", + "bills": "Faturas", + "history": "Histórico", + "withdraw": "Levantar", + "deposit": "Depositar", + "stats": "Estatísticas", + "transactions": "Transações", + "transaction": "Transação", + "total": "Total", + "search_transactions": "Pesquisar transações...", + "description": "Descrição", + "type": "Tipo", + "time_ago": "Tempo Decorrido", + "amount": "Montante", + "date": "Data", + "pay_invoice": "Pagar Fatura", + "payment_completed": "Pagamento Concluído", + "from": "De", + "delete_all_transactions": "Eliminar Todas as Transações", + "are_you_sure": "Tem a certeza?", + "delete_confirmation": "Tem a certeza de que deseja eliminar todas as suas transações? (Faça-o apenas se o menu estiver lento!)", + "cancel": "Cancelar", + "confirm": "Confirmar", + "history_empty": "O seu histórico está vazio", + "all_history_deleted": "Eliminou todo o seu histórico", + "error": "Erro", + "success": "Sucesso", + "new_cash": "Novo Dinheiro", + "withdraw_success": "Levantamento Bem-Sucedido", + "withdraw_error": "A sua conta bancária não tem fundos suficientes", + "withdraw_button": "LEVANTAR", + "new_bank": "Novo Saldo Bancário", + "current_cash": "Dinheiro Atual", + "deposit_success": "Depósito Bem-Sucedido", + "deposit_error": "Não tem dinheiro suficiente", + "deposit_button": "DEPOSITAR", + "total_balance": "Saldo Total", + "quick_actions": "Ações Rápidas", + "transfer_money": "Transferir Dinheiro", + "easy_transfer": "Transfira dinheiro facilmente para outras pessoas", + "transfer": "Transferir", + "pay_bills": "Pagar Faturas", + "pay_pending_bills": "Pague rapidamente as suas faturas pendentes", + "pay": "Pagar", + "withdraw_all_money": "Levantar Todo o Dinheiro", + "withdraw_all_from_account": "Levantar todo o dinheiro da sua conta", + "deposit_cash": "Depositar Dinheiro", + "deposit_all_cash": "Depositar todo o seu dinheiro na sua conta", + "weekly_summary": "Resumo Semanal", + "income": "Rendimento", + "expenses": "Despesas", + "report": "Relatório", + "latest_transactions": "Últimas Transações", + "see_all": "VER TODAS", + "unpaid_bills": "Faturas Não Pagas", + "no_unpaid_bills": "Não tem faturas não pagas", + "confirm_pay_all_bills": "Tem a certeza de que deseja pagar todas as suas faturas?", + "pay_all_bills": "Pagar Todas as Faturas", + "pay_all_bills_success": "Pagou todas as suas faturas!", + "pay_all_bills_error": "Não tem faturas", + "payment_method": "Método de Pagamento", + "phone_number": "Número de Telefone", + "id": "ID", + "id_or_phone_number": "ID ou Número de Telefone", + "no_cash_on_you": "Não tem dinheiro consigo", + "deposit_all_success": "Todo o seu dinheiro foi depositado", + "no_money_on_account": "A sua conta está vazia", + "withdraw_all_success": "Levantou todo o dinheiro da conta", + "invoices": "Faturas", + "statistics_reports": "Estatísticas e Relatórios", + "balance_trend": "Tendência do Saldo", + "balance": "Saldo", + "used": "Utilizado", + "month": "Mês", + "balance_dkk": "Saldo", + "withdrawn": "Levantou", + "deposited": "Depositou", + "no_transactions": "Nenhuma transação recente", + "transactions_trend": "Tendência das Transações", + "total_transactions": "Total de Transações", + "accounts": "Contas", + "account_number_copied": "Número da conta copiado para a área de transferência", + "new_user_to_account": "Novo utilizador na conta", + "server_id": "ID do Servidor", + "add_user": "Adicionar Utilizador", + "new_account_name": "Novo Nome da Conta", + "new_name": "Novo Nome", + "rename": "Renomear", + "create_new_account": "Criar Nova Conta", + "account_holder": "Titular da Conta", + "initial_balance": "Saldo Inicial", + "create": "Criar", + "delete_account": "Eliminar Conta", + "are_you_sure_you_want_to_delete_this_account": "Tem a certeza de que deseja eliminar esta conta?", + "delete": "Eliminar", + "remove_user_from_account": "Remover Utilizador da Conta", + "select_user": "Selecionar Utilizador", + "remove": "Remover", + "withdraw_from_account": "Levantar da Conta", + "deposit_to_account": "Depositar na Conta", + "removed_successfully": "Removido com Sucesso", + "select_account_and_user": "Por favor, selecione uma conta e um utilizador", + "account_deleted_successfully": "Conta eliminada com sucesso", + "new_account_created_successfully": "Nova conta criada com sucesso", + "withdrew": "Levantou", + "successfully": "com sucesso", + "select_valid_account_and_amount": "Por favor, selecione uma conta e um montante válido", + "openBank": "Aceder ao Banco", + "openATM": "Aceder ao Multibanco", + "account_deletion_failed": "Falha na eliminação da conta", + "withdrawal_failed": "Falha no levantamento", + "deposit_failed": "Falha no depósito", + "user_added_successfully": "adicionado com sucesso", + "user_addition_failed": "Falha ao adicionar utilizador", + "new_account_creation_failed": "Falha ao criar nova conta", + "account_renamed_successfully": "Conta renomeada com sucesso", + "account_rename_failed": "Falha ao renomear a conta", + "rename_account": "Alterar nome", + "no_framework_found": "Nenhum framework encontrado", + "cannot_send_self_money": "Não pode enviar dinheiro para si mesmo", + "money_sent": "Enviou %s para %s", + "received_money": "Recebeu %s de %s", + "no_money": "Não tem dinheiro suficiente", + "user_not_in_city": "Utilizador não está na cidade", + "transaction_description": "Transação", + "cannot_add_self": "Não pode adicionar a si mesmo", + "player_not_found": "Jogador não encontrado", + "target_player_not_found": "Jogador alvo não encontrado", + "user_already_in_account": "Utilizador já está na conta", + "account_not_found": "Conta não encontrada" +} diff --git a/resources/[tools]/ps-banking/locales/tr.json b/resources/[tools]/ps-banking/locales/tr.json new file mode 100644 index 000000000..6b6773ab7 --- /dev/null +++ b/resources/[tools]/ps-banking/locales/tr.json @@ -0,0 +1,140 @@ +{ + "atm": "ATM", + "cash": "Nakit", + "bank_balance": "Banka Bakiyesi", + "deposit_amount": "Para Yatırma Miktarı", + "withdraw_amount": "Para Çekme Miktarı", + "submit": "Gönder", + "close": "Kapat", + "overview": "Görünüm", + "bills": "Faturalar", + "history": "Geçmiş", + "withdraw": "Para Çekme", + "deposit": "Para Yatırma", + "stats": "İstatistikler", + "transactions": "İşlemler", + "transaction": "İşlem", + "total": "Toplam", + "search_transactions": "İşlemleri ara...", + "description": "Açıklama", + "type": "Tip", + "time_ago": "Zaman Önce", + "amount": "Miktar", + "date": "Tarih", + "pay_invoice": "Fatura Öde", + "payment_completed": "Ödeme Tamamlandı", + "from": "Tarafından", + "delete_all_transactions": "Tüm Ödemeleri Sil", + "are_you_sure": "Emin misiniz?", + "delete_confirmation": "Tüm ödemeleri silmek istediğinizden emin misiniz? (Lütfen bunu sadece menü gecikmeleri oluyorsa yapın!)", + "cancel": "İptal", + "confirm": "Onayla", + "history_empty": "Geçmişiniz boş", + "all_history_deleted": "Tüm geçmişinizi sildiniz", + "error": "Hata", + "success": "Başarılı", + "new_cash": "Yeni Nakit", + "withdraw_success": "Para Çekme Başarılı", + "withdraw_error": "Banka hesabınızda yeterli bakiye yok", + "withdraw_button": "PARA ÇEK", + "new_bank": "Yeni Banka Bakiyesi", + "current_cash": "Mevcut Nakit", + "deposit_success": "Para Yatırma Başarılı", + "deposit_error": "Yeterli nakitiniz yok", + "deposit_button": "PARA YATIR", + "total_balance": "Toplam Bakiye", + "quick_actions": "Hızlı İşlemler", + "transfer_money": "Para Transferi", + "easy_transfer": "İnsanlara kolayca para aktarın", + "transfer": "Transfer", + "pay_bills": "Faturaları Öde", + "pay_pending_bills": "Bekleyen faturalarınızı hızlıca ödeyin", + "pay": "Öde", + "withdraw_all_money": "Tüm Paranızı Çekin", + "withdraw_all_from_account": "Hesabınızda bulunan tüm parayı çekin", + "deposit_cash": "Nakit Yatır", + "deposit_all_cash": "Tüm paranızı hesabınıza yatırın", + "weekly_summary": "Haftalık Özet", + "income": "Gelir", + "expenses": "Masraflar", + "report": "Rapor", + "latest_transactions": "Son İşlemler", + "see_all": "TÜMÜNÜ GÖSTER", + "unpaid_bills": "Ödenmemiş Faturalar", + "no_unpaid_bills": "Ödenmemiş faturanız yok", + "confirm_pay_all_bills": "Tüm faturalarınızı ödemek istediğinizden emin misiniz?", + "pay_all_bills": "Tüm Faturaları Öde", + "pay_all_bills_success": "Tüm faturalarınızı ödediniz!", + "pay_all_bills_error": "Size kesilen bir fatura yok", + "payment_method": "Ödeme Yöntemi", + "phone_number": "Telefon Numarası", + "id": "ID", + "id_or_phone_number": "ID veya Telefon Numarası", + "no_cash_on_you": "Üzerinizde nakit yok", + "deposit_all_success": "Tüm paranız yatırıldı", + "no_money_on_account": "Hesabınızda para yok", + "withdraw_all_success": "Hesabınızdaki tüm parayı çektiniz", + "invoices": "Faturalar", + "statistics_reports": "İstatistikler ve Raporlar", + "balance_trend": "Denge Trendi", + "balance": "Denge", + "used": "Kullanıldı", + "month": "Ay", + "balance_dkk": "Balance", + "withdrawn": "Para çektiniz", + "deposited": "Para yatırdınız", + "no_transactions": "Son işlemler yok", + "transactions_trend": "Transactions Trend", + "total_transactions": "Toplam İşlemler", + "accounts": "Hesaplar", + "account_number_copied": "Hesap numarası panonuza kopyalandı", + "new_user_to_account": "Hesabınıza yeni kullanıcı", + "server_id": "Sunucu ID", + "add_user": "Kullanıcı Ekle", + "new_account_name": "Yeni Hesap İsmi", + "new_name": "Yeni İsim", + "rename": "Yeniden Adlandır", + "create_new_account": "Yeni Hesap Oluştur", + "account_holder": "Hesap Sahibi", + "initial_balance": "Başlangıç Bakiyesi", + "create": "Oluştur", + "delete_account": "Hesabı Sil", + "are_you_sure_you_want_to_delete_this_account": "Bu hesabı silmek istediğinizden emin misiniz?", + "delete": "Sil", + "remove_user_from_account": "Hesaptan Kullanıcı Kaldır", + "select_user": "Kullanıcı Seç", + "remove": "Kaldır", + "withdraw_from_account": "Hesaptan Para Çekme", + "deposit_to_account": "Hesaba Para Yatırmak", + "removed_successfully": "Başarıyla Kaldırıldı", + "select_account_and_user": "Lütfen hesap ve kullanıcı seçin", + "account_deleted_successfully": "Hesap başarıyla kaldırıldı", + "new_account_created_successfully": "Yeni hesap başarıyla oluşturuldu", + "withdrew": "Çekildi", + "successfully": "Başarılı", + "select_valid_account_and_amount": "Lütfen geçerli bir hesap ve tutar seçin", + "openBank": "Bankaya Eriş", + "openATM": "ATM'e Eriş", + "account_deletion_failed": "Hesap silme işlemi başarısız oldu", + "withdrawal_failed": "Para çekme işlemi başarısız oldu", + "deposit_failed": "Para yatırma işlemi başarısız oldu", + "user_added_successfully": "Kullanıcı başarıyla eklendi", + "user_addition_failed": "Kullanıcı ekleme başarısız oldu", + "new_account_creation_failed": "Yeni hesap oluşturma işlemi başarısız oldu", + "account_renamed_successfully": "Hesap başarıyla yeniden adlandırıldı", + "account_rename_failed": "Hesap yeniden adlandırma işlemi başarısız oldu", + "rename_account": "İsmi değiştir", + "no_framework_found": "Geçerli bir framework bulunamadı", + "cannot_send_self_money": "Kendinize para gönderemezsiniz", + "money_sent": "%s kişisine %s tutar gönderildi", + "received_money": "%s miktar parayı %s kişisinden aldınız", + "no_money": "Yeterli miktarda paranız bulunmuyor", + "user_not_in_city": "Kullanıcı şehirde değil", + "transaction_description": "İşlem", + "cannot_add_self": "Kendinize ekleyemezsiniz", + "player_not_found": "Oyuncu bulunamadı", + "target_player_not_found": "Hedef oyuncu bulunamadı", + "user_already_in_account": "Kullanıcı zaten hesapta bulunuyor", + "account_not_found": "Hesap bulunamadı" + } + \ No newline at end of file diff --git a/resources/[tools]/ps-banking/ps-banking.sql b/resources/[tools]/ps-banking/ps-banking.sql new file mode 100644 index 000000000..2f79fbb54 --- /dev/null +++ b/resources/[tools]/ps-banking/ps-banking.sql @@ -0,0 +1,54 @@ +CREATE TABLE + `ps_banking_transactions` ( + `id` INT NOT NULL AUTO_INCREMENT, + `identifier` VARCHAR(50) NOT NULL, + `description` VARCHAR(255) NOT NULL, + `type` VARCHAR(50) NOT NULL, + `amount` DECIMAL(10, 2) NOT NULL, + `date` DATE NOT NULL, + `isIncome` BOOLEAN NOT NULL, + PRIMARY KEY (`id`) + ) ENGINE = InnoDB; + +CREATE TABLE + `ps_banking_bills` ( + `id` INT NOT NULL AUTO_INCREMENT, + `identifier` VARCHAR(50) NOT NULL, + `description` VARCHAR(255) NOT NULL, + `type` VARCHAR(50) NOT NULL, + `amount` DECIMAL(10, 2) NOT NULL, + `date` DATE NOT NULL, + `isPaid` BOOLEAN NOT NULL, + PRIMARY KEY (`id`) + ) ENGINE = InnoDB; + +CREATE TABLE + `ps_banking_accounts` ( + `id` INT NOT NULL AUTO_INCREMENT, + `balance` BIGINT NOT NULL, + `holder` VARCHAR(255) NOT NULL, + `cardNumber` VARCHAR(255) NOT NULL, + `users` JSON NOT NULL, + `owner` JSON NOT NULL, + PRIMARY KEY (`id`) + ) ENGINE = InnoDB; + + + +/* Dummy data (Ignore) +INSERT INTO `ps_banking_bills` (`identifier`, `description`, `type`, `amount`, `date`, `isPaid`) VALUES +('char1:df6c12c50e2712c57b1386e7103d5a372fb960a0', 'Utility Bill', 'Expense', 150.00, '2024-07-20', 0); + +INSERT INTO `ps_banking_transactions` (`identifier`, `description`, `type`, `amount`, `date`, `isIncome`) VALUES +('char1:df6c12c50e2712c57b1386e7103d5a372fb960a0', 'Opened a new account', 'From account', 1000.00, '2022-08-13', 0), +('char1:df6c12c50e2712c57b1386e7103d5a372fb960a0', 'Deposited 500 DKK to account', 'To account', 500.00, '2022-08-13', 1), +('char1:df6c12c50e2712c57b1386e7103d5a372fb960a0', 'Deposited 500 DKK to account', 'To account', 500.00, '2022-08-13', 1), +('char1:df6c12c50e2712c57b1386e7103d5a372fb960a0', 'Withdrew 500 DKK from ATM', 'From account', -500.00, '2022-08-13', 0), +('char1:df6c12c50e2712c57b1386e7103d5a372fb960a0', 'Deposited 500 DKK to account', 'To account', 500.00, '2022-08-13', 1), +('char2:ab12c34d5e67f89g01234h56789i012j34kl567m8', 'Opened a new account', 'From account', 2000.00, '2022-08-14', 0), +('char2:ab12c34d5e67f89g01234h56789i012j34kl567m8', 'Deposited 1000 DKK to account', 'To account', 1000.00, '2022-08-14', 1), +('char2:ab12c34d5e67f89g01234h56789i012j34kl567m8', 'Withdrew 300 DKK from ATM', 'From account', -300.00, '2022-08-14', 0), +('char2:ab12c34d5e67f89g01234h56789i012j34kl567m8', 'Deposited 400 DKK to account', 'To account', 400.00, '2022-08-14', 1), +('char2:ab12c34d5e67f89g01234h56789i012j34kl567m8', 'Withdrew 200 DKK from ATM', 'From account', -200.00, '2022-08-14', 0); + + */ diff --git a/resources/[tools]/ps-banking/server/main.lua b/resources/[tools]/ps-banking/server/main.lua new file mode 100644 index 000000000..faea5b7ae --- /dev/null +++ b/resources/[tools]/ps-banking/server/main.lua @@ -0,0 +1,458 @@ +lib.versionCheck('Project-Sloth/ps-banking') +assert(lib.checkDependency('ox_lib', '3.20.0', true)) + +local framework = nil + +if GetResourceState("es_extended") == "started" then + framework = "ESX" + ESX = exports["es_extended"]:getSharedObject() +elseif GetResourceState("qb-core") == "started" then + framework = "QBCore" + QBCore = exports["qb-core"]:GetCoreObject() +else + return error(locale("no_framework_found")) +end + +local function getPlayerIdentifier(player) + if framework == "ESX" then + return player.getIdentifier() + elseif framework == "QBCore" then + return player.PlayerData.citizenid + end +end + +local function getPlayerFromId(source) + if framework == "ESX" then + return ESX.GetPlayerFromId(source) + elseif framework == "QBCore" then + return QBCore.Functions.GetPlayer(source) + end +end + +local function getPlayerAccounts(player) + if framework == "ESX" then + return player.getAccount("bank").money + elseif framework == "QBCore" then + return player.PlayerData.money["bank"] + end +end + +local function getName(player) + if framework == "ESX" then + return player.getName() + elseif framework == "QBCore" then + return player.PlayerData.charinfo.firstname .. " " .. player.PlayerData.charinfo.lastname + end +end + +lib.callback.register("ps-banking:server:getHistory", function(source) + local xPlayer = getPlayerFromId(source) + local identifier = getPlayerIdentifier(xPlayer) + local result = MySQL.query.await('SELECT * FROM ps_banking_transactions WHERE identifier = ?', { identifier }) + return result +end) + +lib.callback.register("ps-banking:server:deleteHistory", function(source) + local xPlayer = getPlayerFromId(source) + local identifier = getPlayerIdentifier(xPlayer) + MySQL.query.await('DELETE FROM ps_banking_transactions WHERE identifier = ?', { identifier }) + return true +end) + +lib.callback.register("ps-banking:server:payAllBills", function(source) + local xPlayer = getPlayerFromId(source) + local identifier = getPlayerIdentifier(xPlayer) + local result = MySQL.query.await('SELECT SUM(amount) as total FROM ps_banking_bills WHERE identifier = ? AND isPaid = 0', { identifier }) + local totalAmount = result[1].total or 0 + local bankBalance = getPlayerAccounts(xPlayer) + if tonumber(bankBalance) >= tonumber(totalAmount) then + if framework == "ESX" then + xPlayer.removeAccountMoney("bank", tonumber(totalAmount)) + elseif framework == "QBCore" then + xPlayer.Functions.RemoveMoney("bank", tonumber(totalAmount)) + end + MySQL.query.await('DELETE FROM ps_banking_bills WHERE identifier = ?', { identifier }) + return true + else + return false + end +end) + +lib.callback.register("ps-banking:server:getWeeklySummary", function(source) + local xPlayer = getPlayerFromId(source) + local identifier = getPlayerIdentifier(xPlayer) + local receivedResult = MySQL.query.await('SELECT SUM(amount) as totalReceived FROM ps_banking_transactions WHERE identifier = ? AND isIncome = ? AND DATE(date) >= DATE(NOW() - INTERVAL 7 DAY)', { identifier, true }) + local totalReceived = receivedResult[1].totalReceived or 0 + local usedResult = MySQL.query.await('SELECT SUM(amount) as totalUsed FROM ps_banking_transactions WHERE identifier = ? AND isIncome = ? AND DATE(date) >= DATE(NOW() - INTERVAL 7 DAY)', { identifier, false }) + local totalUsed = usedResult[1].totalUsed or 0 + return { + totalReceived = totalReceived, + totalUsed = totalUsed, + } +end) + +lib.callback.register("ps-banking:server:transferMoney", function(source, data) + local xPlayer = getPlayerFromId(source) + local targetPlayer = getPlayerFromId(data.id) + local amount = tonumber(data.amount) + + if data.id == source and data.method == "id" then + return false, locale("cannot_send_self_money") + end + + if xPlayer and targetPlayer and amount > 0 then + local xPlayerBalance = getPlayerAccounts(xPlayer) + if xPlayerBalance >= amount then + if data.method == "id" then + if framework == "ESX" then + xPlayer.removeAccountMoney("bank", amount) + targetPlayer.addAccountMoney("bank", amount) + elseif framework == "QBCore" then + xPlayer.Functions.RemoveMoney("bank", amount) + targetPlayer.Functions.AddMoney("bank", amount) + end + return true, locale("money_sent", amount, getName(targetPlayer)) + elseif data.method == "phone" then + exports["lb-phone"]:AddTransaction(targetPlayer.identifier, amount, + locale("received_money", getName(xPlayer), amount)) + return true, locale("money_sent", amount, getName(targetPlayer)) + end + else + return false, locale("no_money") + end + else + return false, locale("user_not_in_city") + end +end) + +local function logTransaction(identifier, description, accountName, amount, isIncome) + MySQL.insert.await('INSERT INTO ps_banking_transactions (identifier, description, type, amount, date, isIncome) VALUES (?, ?, ?, ?, NOW(), ?)', { identifier, description, accountName, amount, isIncome }) +end + +RegisterNetEvent("ps-banking:server:logClient", function(account, moneyData) + if account.name ~= "bank" then + return + end + + local src = source + local xPlayer = getPlayerFromId(src) + local identifier = getPlayerIdentifier(xPlayer) + + local previousBankBalance = 0 + if moneyData then + for _, data in ipairs(moneyData) do + if data.name == "bank" then + previousBankBalance = data.amount + break + end + end + end + + local currentBankBalance = getPlayerAccounts(xPlayer) + local amountChange = currentBankBalance - previousBankBalance + + if amountChange ~= 0 then + local isIncome = currentBankBalance >= previousBankBalance and true or false + local description = locale("transaction_description") + logTransaction(identifier, description, account.name, math.abs(amountChange), isIncome) + end +end) + + +lib.callback.register("ps-banking:server:getTransactionStats", function(source) + local xPlayer = getPlayerFromId(source) + local identifier = getPlayerIdentifier(xPlayer) + + local result = MySQL.query.await('SELECT COUNT(*) as totalCount, SUM(amount) as totalAmount FROM ps_banking_transactions WHERE identifier = ?', { identifier }) + local transactionData = MySQL.query.await('SELECT amount, date FROM ps_banking_transactions WHERE identifier = ? ORDER BY date DESC LIMIT 50', { identifier }) + + return { + totalCount = result[1].totalCount, + totalAmount = result[1].totalAmount, + transactionData = transactionData, + } +end) + +lib.callback.register("ps-banking:server:createNewAccount", function(source, newAccount) + local xPlayer = getPlayerFromId(source) + if not xPlayer then + return false + end + MySQL.insert.await('INSERT INTO ps_banking_accounts (balance, holder, cardNumber, users, owner) VALUES (?, ?, ?, ?, ?)', { newAccount.balance, newAccount.holder, newAccount.cardNumber, json.encode(newAccount.users), json.encode(newAccount.owner) }) + return true +end) + +lib.callback.register("ps-banking:server:getUser", function(source) + local xPlayer = getPlayerFromId(source) + if not xPlayer then + return false + end + return { + name = getName(xPlayer), + identifier = getPlayerIdentifier(xPlayer), + } +end) + +lib.callback.register("ps-banking:server:getAccounts", function(source) + local xPlayer = getPlayerFromId(source) + if not xPlayer then + return false + end + local playerIdentifier = getPlayerIdentifier(xPlayer) + local accounts = MySQL.query.await('SELECT * FROM ps_banking_accounts') + local result = {} + for _, account in ipairs(accounts) do + local accountData = { + id = account.id, + balance = account.balance, + holder = account.holder, + cardNumber = account.cardNumber, + users = json.decode(account.users), + owner = json.decode(account.owner), + } + if accountData.owner.identifier == playerIdentifier then + accountData.owner.state = true + table.insert(result, accountData) + else + for _, user in ipairs(accountData.users) do + if user.identifier == playerIdentifier then + accountData.owner.state = false + table.insert(result, accountData) + break + end + end + end + end + return result +end) + +lib.callback.register("ps-banking:server:deleteAccount", function(source, accountId) + local xPlayer = getPlayerFromId(source) + if not xPlayer then + return false + end + + MySQL.query.await('DELETE FROM ps_banking_accounts WHERE id = ?', { accountId }) + return true +end) + +lib.callback.register("ps-banking:server:withdrawFromAccount", function(source, accountId, amount) + local xPlayer = getPlayerFromId(source) + if not xPlayer then + return false + end + local account = MySQL.query.await('SELECT * FROM ps_banking_accounts WHERE id = ?', { accountId }) + if #account > 0 then + local balance = account[1].balance + if balance >= amount then + local affectedRows = MySQL.update.await('UPDATE ps_banking_accounts SET balance = balance - ? WHERE id = ?', { amount, accountId }) + if affectedRows > 0 then + if framework == "ESX" then + xPlayer.addAccountMoney("bank", amount) + elseif framework == "QBCore" then + xPlayer.Functions.AddMoney("bank", amount) + end + return true + else + return false + end + else + return false + end + else + return false + end +end) + +lib.callback.register("ps-banking:server:depositToAccount", function(source, accountId, amount) + local xPlayer = getPlayerFromId(source) + if not xPlayer then + return false + end + if getPlayerAccounts(xPlayer) >= amount then + local affectedRows = MySQL.update.await('UPDATE ps_banking_accounts SET balance = balance + ? WHERE id = ?', { amount, accountId }) + if affectedRows > 0 then + if framework == "ESX" then + xPlayer.removeAccountMoney("bank", amount) + elseif framework == "QBCore" then + xPlayer.Functions.RemoveMoney("bank", amount) + end + return true + else + return false + end + else + return false + end +end) + +lib.callback.register("ps-banking:server:addUserToAccount", function(source, accountId, userId) + local xPlayer = getPlayerFromId(source) + local targetPlayer = getPlayerFromId(userId) + local promise = promise.new() + if source == userId then + return { + success = false, + message = locale("cannot_add_self"), + } + end + if not xPlayer then + return { + success = false, + message = locale("player_not_found"), + } + end + if not targetPlayer then + return { + success = false, + message = locale("target_player_not_found"), + } + end + local accounts = MySQL.query.await('SELECT * FROM ps_banking_accounts WHERE id = ?', { accountId }) + if #accounts > 0 then + local account = accounts[1] + local users = json.decode(account.users) + for _, user in ipairs(users) do + if user.identifier == userId then + return { + success = false, + message = locale("user_already_in_account"), + } + end + end + table.insert(users, { + name = getName(targetPlayer), + identifier = getPlayerIdentifier(targetPlayer), + }) + local affectedRows = MySQL.update.await('UPDATE ps_banking_accounts SET users = ? WHERE id = ?', { json.encode(users), accountId }) + return { + success = affectedRows > 0, + userName = getName(targetPlayer), + } + else + return { + success = false, + message = locale("account_not_found"), + } + end +end) + +lib.callback.register("ps-banking:server:removeUserFromAccount", function(source, accountId, userId) + local xPlayer = getPlayerFromId(source) + if not xPlayer then + return false + end + local accounts = MySQL.query.await('SELECT * FROM ps_banking_accounts WHERE id = ?', { accountId }) + if #accounts > 0 then + local account = accounts[1] + local users = json.decode(account.users) + local updatedUsers = {} + for _, user in ipairs(users) do + if user.identifier ~= userId then + table.insert(updatedUsers, user) + end + end + local affectedRows = MySQL.update.await('UPDATE ps_banking_accounts SET users = ? WHERE id = ?', { json.encode(updatedUsers), accountId }) + return affectedRows > 0 + else + return false + end +end) + +lib.callback.register("ps-banking:server:renameAccount", function(source, id, newName) + local xPlayer = getPlayerFromId(source) + if not xPlayer then + return false + end + local affectedRows = MySQL.update.await('UPDATE ps_banking_accounts SET holder = ? WHERE id = ?', { newName, id }) + return affectedRows > 0 +end) + +lib.callback.register("ps-banking:server:ATMwithdraw", function(source, amount) + local xPlayer = getPlayerFromId(source) + local bankBalance = getPlayerAccounts(xPlayer) + + if bankBalance >= amount then + if framework == "ESX" then + xPlayer.removeAccountMoney("bank", amount) + xPlayer.addMoney(amount) + elseif framework == "QBCore" then + xPlayer.Functions.RemoveMoney("bank", amount) + xPlayer.Functions.AddMoney("cash", amount) + end + return true + else + return false + end +end) + +lib.callback.register("ps-banking:server:ATMdeposit", function(source, amount) + local xPlayer = getPlayerFromId(source) + local cashBalance = nil + if framework == "ESX" then + cashBalance = xPlayer.getMoney() + elseif framework == "QBCore" then + cashBalance = xPlayer.PlayerData.money["cash"] + end + + if cashBalance >= amount then + if framework == "ESX" then + xPlayer.removeMoney(amount) + xPlayer.addAccountMoney("bank", amount) + elseif framework == "QBCore" then + xPlayer.Functions.RemoveMoney("cash", amount) + xPlayer.Functions.AddMoney("bank", amount) + end + return true + else + return false + end +end) + +lib.callback.register("ps-banking:server:getBills", function(source) + local xPlayer = getPlayerFromId(source) + local identifier = getPlayerIdentifier(xPlayer) + local result = MySQL.query.await('SELECT * FROM ps_banking_bills WHERE identifier = ?', { identifier }) + return result +end) + +lib.callback.register("ps-banking:server:payBill", function(source, billId) + local xPlayer = getPlayerFromId(source) + local identifier = getPlayerIdentifier(xPlayer) + local result = MySQL.query.await('SELECT * FROM ps_banking_bills WHERE id = ? AND identifier = ? AND isPaid = 0', { billId, identifier }) + if #result == 0 then + return false + end + local bill = result[1] + local amount = bill.amount + if tonumber(getPlayerAccounts(xPlayer)) >= tonumber(amount) then + if framework == "ESX" then + xPlayer.removeAccountMoney("bank", tonumber(amount)) + elseif framework == "QBCore" then + xPlayer.Functions.RemoveMoney("bank", tonumber(amount)) + end + MySQL.query.await('DELETE FROM ps_banking_bills WHERE id = ?', { billId }) + return true + else + return false + end +end) + +function createBill(data) + local identifier = data.identifier + local description = data.description + local type = data.type + local amount = data.amount + + MySQL.insert.await('INSERT INTO ps_banking_bills (identifier, description, type, amount, date, isPaid) VALUES (?, ?, ?, ?, NOW(), ?)', { identifier, description, type, amount, false }) +end +exports("createBill", createBill) + +--[[ EXAMPLE + exports["ps-banking"]:createBill({ + identifier = "char1:df6c12c50e2712c57b1386e7103d5a372fb960a0", + description = "Utility Bill", + type = "Expense", + amount = 150.00, + }) +]] diff --git a/resources/[tools]/ps-banking/web/.gitignore b/resources/[tools]/ps-banking/web/.gitignore new file mode 100644 index 000000000..a62e535ec --- /dev/null +++ b/resources/[tools]/ps-banking/web/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +build +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/resources/[tools]/ps-banking/web/index.html b/resources/[tools]/ps-banking/web/index.html new file mode 100644 index 000000000..13be85476 --- /dev/null +++ b/resources/[tools]/ps-banking/web/index.html @@ -0,0 +1,48 @@ + + + + + + + Bach Banking + + + + + + + + + +
+ + + + diff --git a/resources/[tools]/ps-banking/web/package-lock.json b/resources/[tools]/ps-banking/web/package-lock.json new file mode 100644 index 000000000..9589cef84 --- /dev/null +++ b/resources/[tools]/ps-banking/web/package-lock.json @@ -0,0 +1,3613 @@ +{ + "name": "web", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web", + "version": "0.0.0", + "dependencies": { + "@fortawesome/fontawesome-free": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@rollup/plugin-dsv": "^3.0.4", + "apexcharts": "^3.48.0", + "bits-ui": "^0.21.10", + "chart.js": "^3.9.1", + "d3": "^7.9.0", + "d3-scale": "^4.0.2", + "layercake": "^8.1.1", + "lucide-svelte": "^0.368.0", + "svelte-apexcharts": "^1.0.2", + "svelte-chartjs": "^3.1.5", + "svelte-fa": "^4.0.2", + "svelte-radix": "^1.1.0" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.2", + "@tsconfig/svelte": "^5.0.4", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-scale": "^4.0.8", + "@types/d3-selection": "^3.0.10", + "@types/d3-shape": "^3.1.6", + "@types/d3-transition": "^3.0.8", + "autoprefixer": "^10.4.19", + "postcss": "^8.4.38", + "postcss-load-config": "^5.0.3", + "svelte": "^4.2.12", + "svelte-check": "^3.6.9", + "svelte-preprocess": "^5.1.3", + "tailwindcss": "^3.4.3", + "tslib": "^2.6.2", + "typescript": "^5.4.3", + "vite": "^4.5.3" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", + "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", + "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==", + "license": "MIT" + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz", + "integrity": "sha512-gBxPg3aVO6J0kpfHNILc+NMhXnqHumFxOmjYCFfOiLZfwhnnfhtsdA2hfJlDnj+8PjAs6kKQPenOTKj3Rf7zHw==", + "hasInstallScript": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.2.tgz", + "integrity": "sha512-hRILoInAx8GNT5IMkrtIt9blOdrqHOnPBH+k70aWUAqPZPgopb9G5EQJFpaBx/S8zp2fC+mPW349Bziuk1o28Q==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.2.tgz", + "integrity": "sha512-QWFZYXFE7O1Gr1dTIp+D6UcFUF0qElOnZptpi7PBUMylJh+vFmIedVe1Ir6RM1t2tEQLLSV1k7bR4o92M+uqlw==", + "hasInstallScript": true, + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@internationalized/date": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.4.tgz", + "integrity": "sha512-qoVJVro+O0rBaw+8HPjUB1iH8Ihf8oziEnqMnvhJUSuVIrHOuZ6eNLHNvzXJKUvAtaDiqMnRlg8Z2mgh09BlUw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@melt-ui/svelte": { + "version": "0.76.2", + "resolved": "https://registry.npmjs.org/@melt-ui/svelte/-/svelte-0.76.2.tgz", + "integrity": "sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.3.1", + "@floating-ui/dom": "^1.4.5", + "@internationalized/date": "^3.5.0", + "dequal": "^2.0.3", + "focus-trap": "^7.5.2", + "nanoid": "^5.0.4" + }, + "peerDependencies": { + "svelte": ">=3 <5" + } + }, + "node_modules/@melt-ui/svelte/node_modules/nanoid": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.7.tgz", + "integrity": "sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-dsv": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-dsv/-/plugin-dsv-3.0.4.tgz", + "integrity": "sha512-F7XgBf/kAFvdiheh5EE8uPzn8hxYpAy+688tTy5eUAbJMJraS5ftPjRFPlZuzsrhN3YAeRnC8Fnd2WYbg3Bvvw==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/d3-dsv": "^3.0.0", + "d3-dsv": "2.0.0", + "tosource": "^2.0.0-alpha.3" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.2.tgz", + "integrity": "sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==", + "dev": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "svelte-hmr": "^0.15.3", + "vitefu": "^0.2.5" + }, + "engines": { + "node": "^18.0.0 || >=20" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte/node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz", + "integrity": "sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.0.0 || >=20" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.11.tgz", + "integrity": "sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tsconfig/svelte": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.4.tgz", + "integrity": "sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==", + "dev": true + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "dev": true + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dev": true, + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==", + "dev": true + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "dev": true, + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-selection": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", + "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==", + "dev": true + }, + "node_modules/@types/d3-shape": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "dev": true, + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==", + "dev": true + }, + "node_modules/@types/d3-transition": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", + "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", + "dev": true, + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/pug": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", + "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", + "dev": true + }, + "node_modules/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==" + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apexcharts": { + "version": "3.49.1", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.49.1.tgz", + "integrity": "sha512-MqGtlq/KQuO8j0BBsUJYlRG8VBctKwYdwuBtajHgHTmSgUU3Oai+8oYN/rKCXwXzrUlYA+GiMgotAIbXY2BCGw==", + "license": "MIT", + "dependencies": { + "@yr/monotone-cubic-spline": "^1.0.3", + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bits-ui": { + "version": "0.21.10", + "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-0.21.10.tgz", + "integrity": "sha512-KuweEOKO0Rr8XX87dQh46G9mG0bZSmTqNxj5qBazz4OTQC+oPKui04/wP/ISsCOSGFomaRydTULqh4p+nsyc2g==", + "license": "MIT", + "dependencies": { + "@internationalized/date": "^3.5.1", + "@melt-ui/svelte": "0.76.2", + "nanoid": "^5.0.5" + }, + "funding": { + "url": "https://github.com/sponsors/huntabyte" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.118" + } + }, + "node_modules/bits-ui/node_modules/nanoid": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.7.tgz", + "integrity": "sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chart.js": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", + "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-2.0.0.tgz", + "integrity": "sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==", + "dependencies": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json", + "csv2tsv": "bin/dsv2dsv", + "dsv2dsv": "bin/dsv2dsv", + "dsv2json": "bin/dsv2json", + "json2csv": "bin/json2dsv", + "json2dsv": "bin/json2dsv", + "json2tsv": "bin/json2dsv", + "tsv2csv": "bin/dsv2dsv", + "tsv2json": "bin/dsv2json" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3/node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.715", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", + "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/focus-trap": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "license": "MIT", + "dependencies": { + "tabbable": "^6.2.0" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/layercake": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/layercake/-/layercake-8.1.1.tgz", + "integrity": "sha512-RszgGluHwNhBx+seQM/wyWwWGUWli4D5mIGigIQcXKsHyHnVYkd57QjTdGwjUrj7b7lgckje958wOmvP+9mYyQ==", + "dependencies": { + "d3-array": "^3.2.4", + "d3-color": "^3.1.0", + "d3-scale": "^4.0.2", + "d3-shape": "^3.2.0" + }, + "peerDependencies": { + "svelte": "3 - 4", + "typescript": "^5.0.2" + } + }, + "node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + }, + "node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/lucide-svelte": { + "version": "0.368.0", + "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.368.0.tgz", + "integrity": "sha512-/uSazMXmY0cZzehGaE1SHQDtQrQBvAVR8UCEpNEjRKSy3yluSqtlGj7T5KvewJpP9kBDCKPgKVcKgdJgEzpRlw==", + "peerDependencies": { + "svelte": "^3 || ^4 || ^5.0.0-next.42" + } + }, + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.0.3.tgz", + "integrity": "sha512-90pBBI5apUVruIEdCxZic93Wm+i9fTrp7TXbgdUCH+/L+2WnfpITSpq5dFU/IPvbv7aNiMlQISpUkAm3fEcvgQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "devOptional": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "dev": true, + "dependencies": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sorcery": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.14", + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0" + }, + "bin": { + "sorcery": "bin/sorcery" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.12.tgz", + "integrity": "sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/svelte-apexcharts": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/svelte-apexcharts/-/svelte-apexcharts-1.0.2.tgz", + "integrity": "sha512-6qlx4rE+XsonZ0FZudfwqOQ34Pq+3wpxgAD75zgEmGoYhYBJcwmikTuTf3o8ZBsZue9U/pAwhNy3ed1Bkq1gmA==", + "license": "MIT", + "dependencies": { + "apexcharts": "^3.19.2" + }, + "peerDependencies": { + "apexcharts": "^3.19.2" + } + }, + "node_modules/svelte-chartjs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/svelte-chartjs/-/svelte-chartjs-3.1.5.tgz", + "integrity": "sha512-ka2zh7v5FiwfAX1oMflZ0HkNkgjHjFqANgRyC+vNYXfxtx2ku68Zo+2KgbKeBH2nS1ThDqkIACPzGxy4T0UaoA==", + "peerDependencies": { + "chart.js": "^3.5.0 || ^4.0.0", + "svelte": "^4.0.0" + } + }, + "node_modules/svelte-check": { + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.9.tgz", + "integrity": "sha512-hDQrk3L0osX07djQyMiXocKysTLfusqi8AriNcCiQxhQR49/LonYolcUGMtZ0fbUR8HTR198Prrgf52WWU9wEg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "chokidar": "^3.4.1", + "fast-glob": "^3.2.7", + "import-fresh": "^3.2.1", + "picocolors": "^1.0.0", + "sade": "^1.7.4", + "svelte-preprocess": "^5.1.3", + "typescript": "^5.0.3" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "peerDependencies": { + "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0" + } + }, + "node_modules/svelte-fa": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/svelte-fa/-/svelte-fa-4.0.2.tgz", + "integrity": "sha512-lza8Jfii6jcpMQB73mBStONxaLfZsUS+rKJ/hH6WxsHUd+g68+oHIL9yQTk4a0uY9HQk78T/CPvQnED0msqJfg==", + "license": "MIT", + "peerDependencies": { + "svelte": "^4.0.0" + } + }, + "node_modules/svelte-hmr": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, + "node_modules/svelte-preprocess": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz", + "integrity": "sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/pug": "^2.0.6", + "detect-indent": "^6.1.0", + "magic-string": "^0.30.5", + "sorcery": "^0.11.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">= 16.0.0", + "pnpm": "^8.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/svelte-radix": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/svelte-radix/-/svelte-radix-1.1.0.tgz", + "integrity": "sha512-kyE9wZiJV937INGb+wiBkAjmGtQUUYRPkVL2Q+/gj+9Vog1Ewd2wNvNmpNMUd+c+euxoc5u5YZMuCUgky9EUPw==", + "license": "MIT", + "peerDependencies": { + "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "dependencies": { + "svg.js": "^2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", + "dependencies": { + "svg.js": ">=2.3.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "node_modules/svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "dependencies": { + "svg.js": "^2.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "dependencies": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js/node_modules/svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "dependencies": { + "svg.js": "^2.6.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/tailwindcss/node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tosource": { + "version": "2.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/tosource/-/tosource-2.0.0-alpha.3.tgz", + "integrity": "sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/typescript": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", + "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/resources/[tools]/ps-banking/web/package.json b/resources/[tools]/ps-banking/web/package.json new file mode 100644 index 000000000..e4df1635e --- /dev/null +++ b/resources/[tools]/ps-banking/web/package.json @@ -0,0 +1,48 @@ +{ + "name": "web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "dev:game": "vite build --watch", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-check --tsconfig ./tsconfig.json" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.2", + "@tsconfig/svelte": "^5.0.4", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-scale": "^4.0.8", + "@types/d3-selection": "^3.0.10", + "@types/d3-shape": "^3.1.6", + "@types/d3-transition": "^3.0.8", + "autoprefixer": "^10.4.19", + "postcss": "^8.4.38", + "postcss-load-config": "^5.0.3", + "svelte": "^4.2.12", + "svelte-check": "^3.6.9", + "svelte-preprocess": "^5.1.3", + "tailwindcss": "^3.4.3", + "tslib": "^2.6.2", + "typescript": "^5.4.3", + "vite": "^4.5.3" + }, + "dependencies": { + "@fortawesome/fontawesome-free": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@rollup/plugin-dsv": "^3.0.4", + "apexcharts": "^3.48.0", + "bits-ui": "^0.21.10", + "chart.js": "^3.9.1", + "d3": "^7.9.0", + "d3-scale": "^4.0.2", + "layercake": "^8.1.1", + "lucide-svelte": "^0.368.0", + "svelte-apexcharts": "^1.0.2", + "svelte-chartjs": "^3.1.5", + "svelte-fa": "^4.0.2", + "svelte-radix": "^1.1.0" + } +} diff --git a/resources/[tools]/ps-banking/web/pnpm-lock.yaml b/resources/[tools]/ps-banking/web/pnpm-lock.yaml new file mode 100644 index 000000000..44129cb4c --- /dev/null +++ b/resources/[tools]/ps-banking/web/pnpm-lock.yaml @@ -0,0 +1,1805 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@fortawesome/fontawesome-free': + specifier: ^6.5.2 + version: 6.5.2 + '@rollup/plugin-dsv': + specifier: ^3.0.4 + version: 3.0.4 + apexcharts: + specifier: ^3.48.0 + version: 3.48.0 + chart.js: + specifier: ^3.9.1 + version: 3.9.1 + layercake: + specifier: ^8.1.1 + version: 8.1.1(svelte@4.2.12)(typescript@5.4.3) + svelte-apexcharts: + specifier: ^1.0.2 + version: 1.0.2(apexcharts@3.48.0) + svelte-chartjs: + specifier: ^3.1.5 + version: 3.1.5(chart.js@3.9.1)(svelte@4.2.12) + +devDependencies: + '@sveltejs/vite-plugin-svelte': + specifier: ^3.0.2 + version: 3.0.2(svelte@4.2.12)(vite@4.5.3) + '@tsconfig/svelte': + specifier: ^5.0.4 + version: 5.0.4 + autoprefixer: + specifier: ^10.4.19 + version: 10.4.19(postcss@8.4.38) + postcss: + specifier: ^8.4.38 + version: 8.4.38 + postcss-load-config: + specifier: ^5.0.3 + version: 5.0.3(postcss@8.4.38) + svelte: + specifier: ^4.2.12 + version: 4.2.12 + svelte-check: + specifier: ^3.6.9 + version: 3.6.9(postcss-load-config@5.0.3)(postcss@8.4.38)(svelte@4.2.12) + svelte-preprocess: + specifier: ^5.1.3 + version: 5.1.3(postcss-load-config@5.0.3)(postcss@8.4.38)(svelte@4.2.12)(typescript@5.4.3) + tailwindcss: + specifier: ^3.4.3 + version: 3.4.3 + tslib: + specifier: ^2.6.2 + version: 2.6.2 + typescript: + specifier: ^5.4.3 + version: 5.4.3 + vite: + specifier: ^4.5.3 + version: 4.5.3 + +packages: + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@fortawesome/fontawesome-free@6.5.2: + resolution: {integrity: sha512-hRILoInAx8GNT5IMkrtIt9blOdrqHOnPBH+k70aWUAqPZPgopb9G5EQJFpaBx/S8zp2fC+mPW349Bziuk1o28Q==} + engines: {node: '>=6'} + requiresBuild: true + dev: false + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + dev: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + + /@rollup/plugin-dsv@3.0.4: + resolution: {integrity: sha512-F7XgBf/kAFvdiheh5EE8uPzn8hxYpAy+688tTy5eUAbJMJraS5ftPjRFPlZuzsrhN3YAeRnC8Fnd2WYbg3Bvvw==} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0 + '@types/d3-dsv': 3.0.7 + d3-dsv: 2.0.0 + tosource: 2.0.0-alpha.3 + dev: false + + /@rollup/pluginutils@5.1.0: + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: false + + /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@4.5.3): + resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==} + engines: {node: ^18.0.0 || >=20} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^3.0.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.12)(vite@4.5.3) + debug: 4.3.4 + svelte: 4.2.12 + vite: 4.5.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@4.5.3): + resolution: {integrity: sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==} + engines: {node: ^18.0.0 || >=20} + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@4.5.3) + debug: 4.3.4 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.8 + svelte: 4.2.12 + svelte-hmr: 0.15.3(svelte@4.2.12) + vite: 4.5.3 + vitefu: 0.2.5(vite@4.5.3) + transitivePeerDependencies: + - supports-color + dev: true + + /@tsconfig/svelte@5.0.4: + resolution: {integrity: sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==} + dev: true + + /@types/d3-dsv@3.0.7: + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + dev: false + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + /@types/pug@2.0.10: + resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} + dev: true + + /@yr/monotone-cubic-spline@1.0.3: + resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} + dev: false + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /apexcharts@3.48.0: + resolution: {integrity: sha512-Lhpj1Ij6lKlrUke8gf+P+SE6uGUn+Pe1TnCJ+zqrY0YMvbqM3LMb1lY+eybbTczUyk0RmMZomlTa2NgX2EUs4Q==} + dependencies: + '@yr/monotone-cubic-spline': 1.0.3 + svg.draggable.js: 2.2.2 + svg.easing.js: 2.0.0 + svg.filter.js: 2.0.2 + svg.pathmorphing.js: 0.1.3 + svg.resize.js: 1.4.3 + svg.select.js: 3.0.1 + dev: false + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + + /autoprefixer@10.4.19(postcss@8.4.38): + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.23.0 + caniuse-lite: 1.0.30001605 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /axobject-query@4.0.0: + resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} + dependencies: + dequal: 2.0.3 + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001605 + electron-to-chromium: 1.4.726 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true + + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /caniuse-lite@1.0.30001605: + resolution: {integrity: sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==} + dev: true + + /chart.js@3.9.1: + resolution: {integrity: sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==} + dev: false + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /code-red@1.0.4: + resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + '@types/estree': 1.0.5 + acorn: 8.11.3 + estree-walker: 3.0.3 + periscopic: 3.1.0 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.0 + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + dependencies: + internmap: 2.0.3 + dev: false + + /d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + dev: false + + /d3-dsv@2.0.0: + resolution: {integrity: sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==} + hasBin: true + dependencies: + commander: 2.20.3 + iconv-lite: 0.4.24 + rw: 1.3.3 + dev: false + + /d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + dev: false + + /d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + dev: false + + /d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + dev: false + + /d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + dev: false + + /d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: false + + /d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + dependencies: + d3-time: 3.1.0 + dev: false + + /d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: false + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /electron-to-chromium@1.4.726: + resolution: {integrity: sha512-xtjfBXn53RORwkbyKvDfTajtnTp0OJoPOIBzXvkNbb7+YYvCHJflba3L7Txyx/6Fov3ov2bGPr/n5MTixmPhdQ==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /es6-promise@3.3.1: + resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} + dev: true + + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: false + + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@10.3.12: + resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.4 + minipass: 7.0.4 + path-scurry: 1.10.2 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + dev: false + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.2 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + dependencies: + '@types/estree': 1.0.5 + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + + /layercake@8.1.1(svelte@4.2.12)(typescript@5.4.3): + resolution: {integrity: sha512-RszgGluHwNhBx+seQM/wyWwWGUWli4D5mIGigIQcXKsHyHnVYkd57QjTdGwjUrj7b7lgckje958wOmvP+9mYyQ==} + peerDependencies: + svelte: 3 - 4 + typescript: ^5.0.2 + dependencies: + d3-array: 3.2.4 + d3-color: 3.1.0 + d3-scale: 4.0.2 + d3-shape: 3.2.0 + svelte: 4.2.12 + typescript: 5.4.3 + dev: false + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + dev: true + + /magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-scurry@1.10.2: + resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 + dev: true + + /periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + dependencies: + '@types/estree': 1.0.5 + estree-walker: 3.0.3 + is-reference: 3.0.2 + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /postcss-import@15.1.0(postcss@8.4.38): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: true + + /postcss-js@4.0.1(postcss@8.4.38): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.38 + dev: true + + /postcss-load-config@4.0.2(postcss@8.4.38): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.1.1 + postcss: 8.4.38 + yaml: 2.4.1 + dev: true + + /postcss-load-config@5.0.3(postcss@8.4.38): + resolution: {integrity: sha512-90pBBI5apUVruIEdCxZic93Wm+i9fTrp7TXbgdUCH+/L+2WnfpITSpq5dFU/IPvbv7aNiMlQISpUkAm3fEcvgQ==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + dependencies: + lilconfig: 3.1.1 + postcss: 8.4.38 + yaml: 2.4.1 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.38): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + dev: false + + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /sander@0.5.1: + resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} + dependencies: + es6-promise: 3.3.1 + graceful-fs: 4.2.11 + mkdirp: 0.5.6 + rimraf: 2.7.1 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /sorcery@0.11.0: + resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} + hasBin: true + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + buffer-crc32: 0.2.13 + minimist: 1.2.8 + sander: 0.5.1 + dev: true + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.3.12 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /svelte-apexcharts@1.0.2(apexcharts@3.48.0): + resolution: {integrity: sha512-6qlx4rE+XsonZ0FZudfwqOQ34Pq+3wpxgAD75zgEmGoYhYBJcwmikTuTf3o8ZBsZue9U/pAwhNy3ed1Bkq1gmA==} + peerDependencies: + apexcharts: ^3.19.2 + dependencies: + apexcharts: 3.48.0 + dev: false + + /svelte-chartjs@3.1.5(chart.js@3.9.1)(svelte@4.2.12): + resolution: {integrity: sha512-ka2zh7v5FiwfAX1oMflZ0HkNkgjHjFqANgRyC+vNYXfxtx2ku68Zo+2KgbKeBH2nS1ThDqkIACPzGxy4T0UaoA==} + peerDependencies: + chart.js: ^3.5.0 || ^4.0.0 + svelte: ^4.0.0 + dependencies: + chart.js: 3.9.1 + svelte: 4.2.12 + dev: false + + /svelte-check@3.6.9(postcss-load-config@5.0.3)(postcss@8.4.38)(svelte@4.2.12): + resolution: {integrity: sha512-hDQrk3L0osX07djQyMiXocKysTLfusqi8AriNcCiQxhQR49/LonYolcUGMtZ0fbUR8HTR198Prrgf52WWU9wEg==} + hasBin: true + peerDependencies: + svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + chokidar: 3.6.0 + fast-glob: 3.3.2 + import-fresh: 3.3.0 + picocolors: 1.0.0 + sade: 1.8.1 + svelte: 4.2.12 + svelte-preprocess: 5.1.3(postcss-load-config@5.0.3)(postcss@8.4.38)(svelte@4.2.12)(typescript@5.4.3) + typescript: 5.4.3 + transitivePeerDependencies: + - '@babel/core' + - coffeescript + - less + - postcss + - postcss-load-config + - pug + - sass + - stylus + - sugarss + dev: true + + /svelte-hmr@0.15.3(svelte@4.2.12): + resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} + peerDependencies: + svelte: ^3.19.0 || ^4.0.0 + dependencies: + svelte: 4.2.12 + dev: true + + /svelte-preprocess@5.1.3(postcss-load-config@5.0.3)(postcss@8.4.38)(svelte@4.2.12)(typescript@5.4.3): + resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} + engines: {node: '>= 16.0.0', pnpm: ^8.0.0} + requiresBuild: true + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 || ^4.0.0 + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.55.0 + sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 + svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 + typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + dependencies: + '@types/pug': 2.0.10 + detect-indent: 6.1.0 + magic-string: 0.30.8 + postcss: 8.4.38 + postcss-load-config: 5.0.3(postcss@8.4.38) + sorcery: 0.11.0 + strip-indent: 3.0.0 + svelte: 4.2.12 + typescript: 5.4.3 + dev: true + + /svelte@4.2.12: + resolution: {integrity: sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==} + engines: {node: '>=16'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + '@types/estree': 1.0.5 + acorn: 8.11.3 + aria-query: 5.3.0 + axobject-query: 4.0.0 + code-red: 1.0.4 + css-tree: 2.3.1 + estree-walker: 3.0.3 + is-reference: 3.0.2 + locate-character: 3.0.0 + magic-string: 0.30.8 + periscopic: 3.1.0 + + /svg.draggable.js@2.2.2: + resolution: {integrity: sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.easing.js@2.0.0: + resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.filter.js@2.0.2: + resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.js@2.7.1: + resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} + dev: false + + /svg.pathmorphing.js@0.1.3: + resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.resize.js@1.4.3: + resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + svg.select.js: 2.1.2 + dev: false + + /svg.select.js@2.1.2: + resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.select.js@3.0.1: + resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /tailwindcss@3.4.3: + resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.38 + postcss-import: 15.1.0(postcss@8.4.38) + postcss-js: 4.0.1(postcss@8.4.38) + postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-nested: 6.0.1(postcss@8.4.38) + postcss-selector-parser: 6.0.16 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /tosource@2.0.0-alpha.3: + resolution: {integrity: sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==} + engines: {node: '>=10'} + dev: false + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + + /typescript@5.4.3: + resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} + engines: {node: '>=14.17'} + hasBin: true + + /update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.0 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /vite@4.5.3: + resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.18.20 + postcss: 8.4.38 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitefu@0.2.5(vite@4.5.3): + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 4.5.3 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /yaml@2.4.1: + resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} + engines: {node: '>= 14'} + hasBin: true + dev: true diff --git a/resources/[tools]/ps-banking/web/postcss.config.cjs b/resources/[tools]/ps-banking/web/postcss.config.cjs new file mode 100644 index 000000000..e48cff588 --- /dev/null +++ b/resources/[tools]/ps-banking/web/postcss.config.cjs @@ -0,0 +1,13 @@ +const tailwindcss = require("tailwindcss"); +const autoprefixer = require("autoprefixer"); + +const config = { + plugins: [ + //Some plugins, like tailwindcss/nesting, need to run before Tailwind, + tailwindcss(), + //But others, like autoprefixer, need to run after, + autoprefixer, + ], +}; + +module.exports = config; diff --git a/resources/[tools]/ps-banking/web/src/App.svelte b/resources/[tools]/ps-banking/web/src/App.svelte new file mode 100644 index 000000000..7a63574ba --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/App.svelte @@ -0,0 +1,58 @@ + + +
+ +
+ + {#if $showATM} +
+ {#each $notifications as notification (notification.id)} +
+ +
+

{notification.title}

+

{notification.message}

+
+
+ {/each} +
+ {:else} +
+ {#each $notifications as notification (notification.id)} +
+ +
+

{notification.title}

+

{notification.message}

+
+
+ {/each} +
+ {/if} +
diff --git a/resources/[tools]/ps-banking/web/src/app.pcss b/resources/[tools]/ps-banking/web/src/app.pcss new file mode 100644 index 000000000..b5c61c956 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/app.pcss @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/resources/[tools]/ps-banking/web/src/components/ATM.svelte b/resources/[tools]/ps-banking/web/src/components/ATM.svelte new file mode 100644 index 000000000..55725038d --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/components/ATM.svelte @@ -0,0 +1,272 @@ + + +
+
+
+
+ {$Locales.atm} +
+
+
+
+ + {$Locales.cash} +
+
+ {$currentCash.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} +
+
+
+
+ {$Locales.bank_balance} +
+
+ {$bankBalance.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} +
+
+
+
+ {#each $withdrawAmounts as amount} + + {/each} + {#each $depositAmounts as amount} + + {/each} +
+
+
+
+ + +
+ + +
+
+
+ + +
+ + +
+
+
+ +
+
+
+
diff --git a/resources/[tools]/ps-banking/web/src/components/Accounts.svelte b/resources/[tools]/ps-banking/web/src/components/Accounts.svelte new file mode 100644 index 000000000..e217397c2 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/components/Accounts.svelte @@ -0,0 +1,801 @@ + + +
+
+
+
+ + {$Locales.accounts} +
+
+ {#each $accounts as account (account.id)} +
+
+
+ {account.balance.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} +
+
#{account.id}
+
+
{account.cardNumber}
+
+
{account.owner.name} - {account.holder}
+
+ + {#if account.owner.identifier === get(userData).identifier || account.users.some(user => user.identifier === get(userData).identifier)} + + {#if account.owner.identifier === get(userData).identifier} + + + + + {/if} + + + {/if} +
+
+
+ {/each} +
+ +
+
+
+ +{#if $showModal} +
+
+

+ + {$Locales.new_user_to_account} +

+
+ +
+ + +
+
+
+ + +
+
+
+{/if} + +{#if $showRenameModal} +
+
+

+ + {$Locales.rename_account} +

+
+ +
+ + +
+
+
+ + +
+
+
+{/if} + +{#if $showCreateAccountModal} +
+
+

+ + {$Locales.create_new_account} +

+
+ +
+ + +
+
+
+ + +
+
+
+{/if} + +{#if $showDeleteModal} +
+
+

+ + {$Locales.delete_account} +

+

+ {$Locales.are_you_sure_you_want_to_delete_this_account} +

+
+ + +
+
+
+{/if} + +{#if $showRemoveUserModal} +
+
+

+ + {$Locales.remove_user_from_account} +

+
+ +
+ + +
+
+
+ + +
+
+
+{/if} + +{#if $showWithdrawModal} +
+
+

+ + {$Locales.withdraw_from_account} +

+
+ +
+ + +
+
+
+ + +
+
+
+{/if} + +{#if $showDepositModal} +
+
+

+ + {$Locales.deposit_to_account} +

+
+ +
+ + +
+
+
+ + +
+
+
+{/if} diff --git a/resources/[tools]/ps-banking/web/src/components/Bills.svelte b/resources/[tools]/ps-banking/web/src/components/Bills.svelte new file mode 100644 index 000000000..5c13221bc --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/components/Bills.svelte @@ -0,0 +1,153 @@ + + +
+
+
+
+
+ +

{$Locales.bills}

+
+
+ + {$Locales.total} + + {$transactions.length} + +
+
+
+ + +
+
+ {#each filteredTransactions as transaction (transaction.id)} +
+
+
+ + {transaction.description} #{transaction.id} +
+
+ + {transaction.type} +
+
+ + {formatDate(transaction.date)} +
+
+
+ + + {transaction.isIncome ? "+" : "-"} + {transaction.amount.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} + + {#if !transaction.isPaid} + + {/if} +
+
+ {/each} +
+
+
+
diff --git a/resources/[tools]/ps-banking/web/src/components/Heav.svelte b/resources/[tools]/ps-banking/web/src/components/Heav.svelte new file mode 100644 index 000000000..948df2843 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/components/Heav.svelte @@ -0,0 +1,113 @@ + + + +
+
+
+

{$Locales.withdraw}

+ +
+ +
+ + {$bankBalance.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} +
+
+ +
+ +
+ + +
+
+ +
+ +
+ + {newBank.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} +
+
+ + +
+
+
diff --git a/resources/[tools]/ps-banking/web/src/components/History.svelte b/resources/[tools]/ps-banking/web/src/components/History.svelte new file mode 100644 index 000000000..d8abe21ec --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/components/History.svelte @@ -0,0 +1,206 @@ + + +
+
+
+
+ +

{$Locales.history}

+
+
+
+ + {$Locales.total} +
+
+ + + {filteredTransactions.length} + +
+ +
+
+ + +
+
+ {#each filteredTransactions as transaction (transaction.id)} +
+
+
+ +
+
+ +

+ {transaction.description} #{transaction.id} +

+
+
+ +

{transaction.type}

+
+
+ +

+ {formatDate(transaction.date)} +

+
+
+
+
+
+ +

+ {transaction.isIncome ? "+" : "-"} + {transaction.amount.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} +

+
+
+
+
+ {/each} +
+
+
+
+{#if $showDeleteAllModal} +
+
+
+ +

+ {$Locales.are_you_sure} +

+
+

+ {$Locales.delete_confirmation} +

+
+ + +
+
+
+{/if} diff --git a/resources/[tools]/ps-banking/web/src/components/Indseat.svelte b/resources/[tools]/ps-banking/web/src/components/Indseat.svelte new file mode 100644 index 000000000..1e8b521c3 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/components/Indseat.svelte @@ -0,0 +1,115 @@ + + + +
+
+
+

{$Locales.deposit}

+ +
+ +
+ + {$currentCash.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} +
+
+ +
+ +
+ + +
+
+ +
+ +
+ + {newCash.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} +
+
+ + +
+
+
diff --git a/resources/[tools]/ps-banking/web/src/components/Main.svelte b/resources/[tools]/ps-banking/web/src/components/Main.svelte new file mode 100644 index 000000000..8ebd8d818 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/components/Main.svelte @@ -0,0 +1,297 @@ + + +
+
+ {#if $showOverview} + + {:else if $showBills} + + {:else if $showHistory} + + {:else if $showHeav} + + {:else if $showIndseat} + + {:else if $showStats} + + {:else if $showAccounts} + + {/if} + +
+
+ + + + + + + + +
+ +
+
+
+
+
diff --git a/resources/[tools]/ps-banking/web/src/components/Overview.svelte b/resources/[tools]/ps-banking/web/src/components/Overview.svelte new file mode 100644 index 000000000..5060ea110 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/components/Overview.svelte @@ -0,0 +1,755 @@ + + +
+
+ +
+
{$Locales.total_balance}
+
+ {$bankBalance.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} +
+
+
+
{$Locales.quick_actions}
+
+
+ +
+ {$Locales.transfer_money} +
+
+ {$Locales.easy_transfer} +
+ +
+
+ +
+ {$Locales.pay_bills} +
+
+ {$Locales.pay_pending_bills} +
+ +
+
+ +
+ {$Locales.withdraw_all_money} +
+
+ {$Locales.withdraw_all_from_account} +
+ +
+
+ +
+ {$Locales.deposit_cash} +
+
+ {$Locales.deposit_all_cash} +
+ +
+
+
+ + +
+ +
+
+ + {$Locales.weekly_summary} +
+
+
+ {$Locales.income} + + {#if $weeklyData.totalReceived !== undefined} + {$weeklyData.totalReceived.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} + {:else} + 0 + {/if} + +
+
+ {$Locales.expenses} + + {#if $weeklyData.totalUsed !== undefined} + {$weeklyData.totalUsed.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} + {:else} + 0 + {/if} + +
+
+
+ + {$Locales.report} +
+
+ +
+
+
+
+ + +
+
+
+ + {$Locales.latest_transactions} +
+
+ {bankData.transactions.length} +
+
+
+ {#if bankData.transactions.length > 0} + {#each bankData.transactions.slice(0, 5) as transaction} +
+
+ {transaction.description} +

+ {transaction.isIncome ? "+" : "-"} + {transaction.amount.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} +

+
+
+
+ {/each} + +
+ +
+ {:else} +
+ +

{$Locales.no_transactions}

+
+ {/if} +
+
+ +
+
+
+ + {$Locales.unpaid_bills} +
+
+ {$transactions.length} +
+
+
+ {#if $transactions.length > 0} + {#each $transactions.slice(0, 2) as transaction (transaction.id)} + {#if !transaction.isPaid} +
+
+
+ {transaction.description} #{transaction.id} +
+
+ {transaction.type} +
+
+ {transaction.timeAgo} +
+
+
+ + {transaction.isIncome ? "+" : "-"} + {transaction.amount.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} + +
+
+ {transaction.date} +
+
+
+
+
+ {/if} + {/each} +
+
+ +
+
+ {:else} +
+ +

{$Locales.no_unpaid_bills}

+
+ {/if} +
+
+
+
+ + {#if $showTransferModal} + +
+
+
+ +

+ {$Locales.transfer_money} +

+
+ + +
+

+ {$Locales.payment_method} +

+
+ {#if phone} + + {/if} + +
+
+ + + {#if $transferData.contactType === "phone" || $transferData.contactType === "id"} +
+ +
+ + +
+
+ {/if} + + +
+ +
+ + +
+
+ + +
+ + +
+
+
+ {/if} + {#if $showSureModalBills} +
+
+
+ +

+ {$Locales.are_you_sure} +

+
+

+ {$Locales.confirm_pay_all_bills} +

+
+ + +
+
+
+ {/if} +
diff --git a/resources/[tools]/ps-banking/web/src/components/Stats.svelte b/resources/[tools]/ps-banking/web/src/components/Stats.svelte new file mode 100644 index 000000000..cff7663e2 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/components/Stats.svelte @@ -0,0 +1,228 @@ + + + +
+
+
+

{$Locales.statistics_reports}

+
+
+ +

+ {$Locales.overview} +

+
+
+ + + {$Locales.total_balance}: {#if $bankBalance !== undefined} + {$bankBalance.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} + {/if} + +
+
+
+
+
+

+ {$Locales.total_transactions} +

+ +
+

{$totalTransactions}

+
+
+
+

+ {$Locales.amount} +

+ +
+

+ {#if $totalAmount !== undefined} + {$totalAmount.toLocaleString($Currency.lang, { + style: "currency", + currency: $Currency.currency, + minimumFractionDigits: 0, + })} + {:else} + 0 + {/if} +

+
+
+
+
+

+ {$Locales.transactions_trend} +

+ +
+
+ +
+
+
+
+
diff --git a/resources/[tools]/ps-banking/web/src/global.d.ts b/resources/[tools]/ps-banking/web/src/global.d.ts new file mode 100644 index 000000000..7c46b1eb6 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/global.d.ts @@ -0,0 +1,3 @@ +/// + +declare module '*.csv'; diff --git a/resources/[tools]/ps-banking/web/src/main.ts b/resources/[tools]/ps-banking/web/src/main.ts new file mode 100644 index 000000000..8a0135638 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/main.ts @@ -0,0 +1,8 @@ +import "./app.pcss"; +import App from "./App.svelte"; + +const app = new App({ + target: document.getElementById("app")!, +}); + +export default app; diff --git a/resources/[tools]/ps-banking/web/src/providers/VisibilityProvider.svelte b/resources/[tools]/ps-banking/web/src/providers/VisibilityProvider.svelte new file mode 100644 index 000000000..489438b53 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/providers/VisibilityProvider.svelte @@ -0,0 +1,46 @@ + + +
+ {#if isVisible} + + {/if} + {#if $showATM} + + {/if} +
diff --git a/resources/[tools]/ps-banking/web/src/store/data.ts b/resources/[tools]/ps-banking/web/src/store/data.ts new file mode 100644 index 000000000..25c94f59d --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/store/data.ts @@ -0,0 +1,250 @@ +import { writable, type Writable } from "svelte/store"; + +export interface Notification { + id: number; + message: string; + title: string; + icon: string; +} + +export const notifications = writable([]); +let notificationId = 0; + +export function Notify(message: string, title: string, icon: string) { + notificationId += 1; + const newNotification: Notification = { + id: notificationId, + message, + title, + icon, + }; + notifications.update((n) => [...n, newNotification]); + setTimeout(() => { + notifications.update((n) => + n.filter((notification) => notification.id !== newNotification.id) + ); + }, 2000); +} + +export const showOverview = writable(true); +export const showBills = writable(false); +export const showHistory = writable(false); +export const showHeav = writable(false); +export const showIndseat = writable(false); +export const showStats = writable(false); +export const showAccounts = writable(false); +export const showATM = writable(false); +export const currentCash = writable(500); +export const bankBalance = writable(10000); + +export const Currency = writable({ + lang: "en", // da-DK + currency: "USD", // DKK +}); + +export const Locales = writable({ + atm: "ATM", + cash: "Cash", + bank_balance: "Bank Balance", + deposit_amount: "Deposit Amount", + withdraw_amount: "Withdraw Amount", + submit: "Submit", + close: "Close", + overview: "Overview", + bills: "Bills", + history: "History", + withdraw: "Withdraw", + deposit: "Deposit", + stats: "Stats", + transactions: "Transactions", + total: "Total", + search_transactions: "Search transactions...", + description: "Description", + type: "Type", + time_ago: "Time Ago", + amount: "Amount", + date: "Date", + pay_invoice: "Pay Invoice", + payment_completed: "Payment Completed", + from: "From", + delete_all_transactions: "Delete All Transactions", + are_you_sure: "Are you sure?", + delete_confirmation: + "Are you sure you want to delete all your transactions? (Only do this if the menu lags!)", + cancel: "Cancel", + confirm: "Confirm", + history_empty: "Your history is empty", + all_history_deleted: "You have deleted all your history", + error: "Error", + success: "Success", + new_cash: "New Cash", + withdraw_success: "Withdrawal Successful", + withdraw_error: "Your bank account does not have enough funds", + withdraw_button: "WITHDRAW", + new_bank: "New Bank Balance", + current_cash: "Current Cash", + deposit_success: "Deposit Successful", + deposit_error: "You do not have enough cash", + deposit_button: "DEPOSIT", + total_balance: "Total Balance", + quick_actions: "Quick Actions", + transfer_money: "Transfer Money", + easy_transfer: "Easily transfer money to people", + transfer: "Transfer", + pay_bills: "Pay Bills", + pay_pending_bills: "Quickly pay your pending bills", + pay: "Pay", + withdraw_all_money: "Withdraw All Money", + withdraw_all_from_account: "Withdraw all your money from your account", + deposit_cash: "Deposit Cash", + deposit_all_cash: "Deposit all your cash into your account", + weekly_summary: "Weekly Summary", + income: "Income", + expenses: "Expenses", + report: "Report", + latest_transactions: "Latest Transactions", + see_all: "SEE ALL", + unpaid_bills: "Unpaid Invoices", + no_unpaid_bills: "No unpaid invoices", + confirm_pay_all_bills: "Are you sure you want to pay all your bills?", + pay_all_bills: "Pay All Bills", + pay_all_bills_success: "You have paid all your bills!", + pay_all_bills_error: "You have no bills", + payment_method: "Payment Method", + phone_number: "Phone Number", + id: "ID", + id_or_phone_number: "ID or Phone Number", + no_cash_on_you: "You have no cash on you", + deposit_all_success: "All your cash has been deposited", + no_money_on_account: "Your account is empty", + withdraw_all_success: "You have withdrawn all your money from the account", + invoices: "Invoices", + statistics_reports: "Statistics and Reports", + balance_trend: "Balance Trend", + balance: "Balance", + used: "Used", + month: "Month", + balance_dkk: "Balance", + withdrawn: "You have withdrawn", + deposited: "You have deposited", + no_transactions: "No recent transactions", + transactions_trend: "Transactions Trend", + total_transactions: "Total Transactions", + accounts: "Accounts", + account_number_copied: "Account number copied to clipboard", + new_user_to_account: "New user to account", + server_id: "Server ID", + add_user: "Add User", + new_account_name: "New Account Name", + new_name: "New Name", + rename: "Rename", + create_new_account: "Create New Account", + account_holder: "Account Holder", + initial_balance: "Initial Balance", + create: "Create", + delete_account: "Delete Account", + are_you_sure_you_want_to_delete_this_account: + "Are you sure you want to delete this account?", + delete: "Delete", + remove_user_from_account: "Remove User from Account", + select_user: "Select User", + remove: "Remove", + withdraw_from_account: "Withdraw from Account", + deposit_to_account: "Deposit to Account", + removed_successfully: "removed Successfully", + select_account_and_user: "Please select an account and a user", + account_deleted_successfully: "Account deleted successfully", + new_account_created_successfully: "New account created successfully", + withdrew: "Withdrew", + successfully: "Successfully", + select_valid_account_and_amount: "Please select a valid account and amount", + openBank: "Access Bank", + openATM: "Access ATM", + account_deletion_failed: "Account deletion failed", + withdrawal_failed: "Withdrawal failed", + deposit_failed: "Deposit failed", + user_added_successfully: "added successfully", + user_addition_failed: "Failed to add user", + new_account_creation_failed: "Failed to create new account", + account_renamed_successfully: "Account renamed successfully", + account_rename_failed: "Account rename failed", + rename_account: "Change name", +}); + +export const Transactions: Writable> = writable([ + // { + // id: 8, + // description: "Åbnede en ny konto", + // type: "Fra konto", + // amount: 1000, + // date: "2022/08/13", + // timeAgo: "For 18 timer siden", + // isIncome: false, + // }, + // { + // id: 7, + // description: "Indsatte 500 DKK på konto", + // type: "Til konto", + // amount: 500, + // date: "2022/08/13", + // timeAgo: "For 18 timer siden", + // isIncome: true, + // }, + // { + // id: 6, + // description: "Indsatte 500 DKK på konto", + // type: "Til konto", + // amount: 500, + // date: "2022/08/13", + // timeAgo: "For 18 timer siden", + // isIncome: true, + // }, + // { + // id: 5, + // description: "Hævede 500 DKK fra en hæveautomat", + // type: "Fra konto", + // amount: -500, + // date: "2022/08/13", + // timeAgo: "For 18 timer siden", + // isIncome: false, + // }, + // { + // id: 4, + // description: "Indsatte 500 DKK på konto", + // type: "Til konto", + // amount: 500, + // date: "2022/08/13", + // timeAgo: "For 18 timer siden", + // isIncome: true, + // }, +]); + +export const Bills: Writable> = writable([ + // { + // id: 1, + // description: "Mekaniker Regning", + // type: "Auto Exotic", + // amount: 1000, + // date: "2022/08/13", + // timeAgo: "For 18 timer siden", + // isPaid: false, + // }, + // { + // id: 2, + // description: "Mekaniker Regning", + // type: "Auto Exotic", + // amount: 1000, + // date: "2022/08/13", + // timeAgo: "For 18 timer siden", + // isPaid: false, + // }, + // { + // id: 3, + // description: "Mekaniker Regning", + // type: "Auto Exotic", + // amount: 1000, + // date: "2022/08/13", + // timeAgo: "For 18 timer siden", + // isPaid: false, + // }, +]); diff --git a/resources/[tools]/ps-banking/web/src/store/stores.ts b/resources/[tools]/ps-banking/web/src/store/stores.ts new file mode 100644 index 000000000..7fefb136d --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/store/stores.ts @@ -0,0 +1,3 @@ +import { writable } from "svelte/store"; + +export const visibility = writable(false); diff --git a/resources/[tools]/ps-banking/web/src/utils/debugData.ts b/resources/[tools]/ps-banking/web/src/utils/debugData.ts new file mode 100644 index 000000000..aea5370bd --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/utils/debugData.ts @@ -0,0 +1,30 @@ +import {isEnvBrowser} from "./misc"; + +interface DebugEvent { + action: string; + data: T; +} + +/** + * Emulates dispatching an event using SendNuiMessage in the lua scripts. + * This is used when developing in browser + * + * @param events - The event you want to cover + * @param timer - How long until it should trigger (ms) + */ +export const debugData =

(events: DebugEvent

[], timer = 1000): void => { + if (isEnvBrowser()) { + for (const event of events) { + setTimeout(() => { + window.dispatchEvent( + new MessageEvent("message", { + data: { + action: event.action, + data: event.data, + }, + }) + ); + }, timer); + } + } +}; \ No newline at end of file diff --git a/resources/[tools]/ps-banking/web/src/utils/fetchNui.ts b/resources/[tools]/ps-banking/web/src/utils/fetchNui.ts new file mode 100644 index 000000000..95c2794a9 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/utils/fetchNui.ts @@ -0,0 +1,27 @@ +/** +* @param eventName - The endpoint eventname to target +* @param data - Data you wish to send in the NUI Callback +* +* @return returnData - A promise for the data sent back by the NuiCallbacks CB argument +*/ + +export async function fetchNui( + eventName: string, + data: unknown = {} +): Promise { + const options = { + method: "post", + headers: { + "Content-Type": "application/json; charset=UTF-8", + }, + body: JSON.stringify(data), + }; + + const resourceName = (window as any).GetParentResourceName + ? (window as any).GetParentResourceName() + : "nui-frame-app"; + + const resp = await fetch(`https://${resourceName}/${eventName}`, options); + + return await resp.json(); +} diff --git a/resources/[tools]/ps-banking/web/src/utils/misc.ts b/resources/[tools]/ps-banking/web/src/utils/misc.ts new file mode 100644 index 000000000..32eae3532 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/utils/misc.ts @@ -0,0 +1 @@ +export const isEnvBrowser = (): boolean => !(window as any).invokeNative; diff --git a/resources/[tools]/ps-banking/web/src/utils/useNuiEvent.ts b/resources/[tools]/ps-banking/web/src/utils/useNuiEvent.ts new file mode 100644 index 000000000..082ed842f --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/utils/useNuiEvent.ts @@ -0,0 +1,51 @@ +import { onDestroy } from "svelte"; + +interface NuiMessage { + action: string; + data: T; +} + +/** + * A function 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 function + * + * @example + * useNuiEvent<{visibility: true, wasVisible: 'something'}>('setVisible', (data) => { + * // whatever logic you want + * }) + * + **/ + +type NuiEventHandler = (data: T) => void; + +const eventListeners = new Map(); + +const eventListener = (event: MessageEvent) => { + const { action, data } = event.data; + const handlers = eventListeners.get(action); + + if (handlers) { + handlers.forEach((handler) => handler(data)); + } +}; + +window.addEventListener("message", eventListener); + +export function useNuiEvent( + action: string, + handler: NuiEventHandler +) { + const handlers = eventListeners.get(action) || []; + handlers.push(handler); + eventListeners.set(action, handlers); + + onDestroy(() => { + const handlers = eventListeners.get(action) || []; + + eventListeners.set( + action, + handlers.filter((h) => h !== handler) + ); + }); +} diff --git a/resources/[tools]/ps-banking/web/src/vite-env.d.ts b/resources/[tools]/ps-banking/web/src/vite-env.d.ts new file mode 100644 index 000000000..4078e7476 --- /dev/null +++ b/resources/[tools]/ps-banking/web/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/resources/[tools]/ps-banking/web/svelte.config.js b/resources/[tools]/ps-banking/web/svelte.config.js new file mode 100644 index 000000000..5f7f14de8 --- /dev/null +++ b/resources/[tools]/ps-banking/web/svelte.config.js @@ -0,0 +1,8 @@ +import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; +import sveltePreprocess from "svelte-preprocess"; + +export default { + // Consult https://github.com/sveltejs/svelte-preprocess + // for more information about preprocessors + preprocess: [sveltePreprocess(), vitePreprocess({})], +}; diff --git a/resources/[tools]/ps-banking/web/tailwind.config.cjs b/resources/[tools]/ps-banking/web/tailwind.config.cjs new file mode 100644 index 000000000..75fd684f9 --- /dev/null +++ b/resources/[tools]/ps-banking/web/tailwind.config.cjs @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config}*/ +const config = { + content: ["./src/**/*.{html,js,svelte,ts}"], + + theme: { + extend: {}, + }, + + plugins: [], +}; + +module.exports = config; diff --git a/resources/[tools]/ps-banking/web/tsconfig.json b/resources/[tools]/ps-banking/web/tsconfig.json new file mode 100644 index 000000000..e488c0110 --- /dev/null +++ b/resources/[tools]/ps-banking/web/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "strict": true, + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "noFallthroughCasesInSwitch": true, + "baseUrl": ".", + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable checkJs if you'd like to use dynamic types in JS. + * Note that setting allowJs false does not prevent the use + * of JS in `.svelte` files. + */ + "allowJs": true, + "checkJs": true, + "isolatedModules": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules/*", "public/*"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/resources/[tools]/ps-banking/web/tsconfig.node.json b/resources/[tools]/ps-banking/web/tsconfig.node.json new file mode 100644 index 000000000..65dbdb96a --- /dev/null +++ b/resources/[tools]/ps-banking/web/tsconfig.node.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node" + }, + "include": ["vite.config.ts"] +} diff --git a/resources/[tools]/ps-banking/web/vite.config.ts b/resources/[tools]/ps-banking/web/vite.config.ts new file mode 100644 index 000000000..baceabba3 --- /dev/null +++ b/resources/[tools]/ps-banking/web/vite.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vite'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; + +export default defineConfig({ + plugins: [svelte()], + base: './', + build: { + minify: true, + outDir: '../html', + rollupOptions: { + output: { + entryFileNames: '[name].js', + chunkFileNames: '[name].js', + assetFileNames: '[name].[ext]', + }, + }, + }, +});