From 0b6e0f9708f014c54277ca3f09728aa8454e8ed8 Mon Sep 17 00:00:00 2001 From: Nordi98 Date: Wed, 18 Jun 2025 00:53:24 +0200 Subject: [PATCH] multijob --- resources/[jobs]/ps-multijob/.gitignore | 26 + resources/[jobs]/ps-multijob/README.md | 84 + .../[jobs]/ps-multijob/client/cl_main.lua | 74 + resources/[jobs]/ps-multijob/config.lua | 60 + resources/[jobs]/ps-multijob/database.sql | 5 + resources/[jobs]/ps-multijob/fxmanifest.lua | 19 + resources/[jobs]/ps-multijob/html/index.css | 1 + resources/[jobs]/ps-multijob/html/index.html | 1 + resources/[jobs]/ps-multijob/html/index.js | 44 + .../[jobs]/ps-multijob/server/sv_main.lua | 280 +++ .../ps-multijob/svelte-source/.gitignore | 24 + .../svelte-source/.vscode/extensions.json | 3 + .../ps-multijob/svelte-source/global.css | 34 + .../ps-multijob/svelte-source/index.html | 26 + .../ps-multijob/svelte-source/package.json | 34 + .../ps-multijob/svelte-source/pnpm-lock.yaml | 2180 +++++++++++++++++ .../ps-multijob/svelte-source/src/App.svelte | 44 + .../src/components/CategoryMenu.svelte | 41 + .../src/components/JobCard.svelte | 163 ++ .../src/components/NavBar.svelte | 23 + .../src/components/atoms/JobDetail.svelte | 22 + .../src/components/atoms/NavItem.svelte | 38 + .../components/atoms/svgs/ActiveSVG.svelte | 5 + .../components/atoms/svgs/CivilianSVG.svelte | 7 + .../src/components/atoms/svgs/ClockSVG.svelte | 6 + .../components/atoms/svgs/CrossMarkSVG.svelte | 5 + .../components/atoms/svgs/DeleteSVG.svelte | 4 + .../components/atoms/svgs/PoliceSVG.svelte | 14 + .../src/components/atoms/svgs/RankSVG.svelte | 10 + .../components/atoms/svgs/SalarySVG.svelte | 13 + .../components/atoms/svgs/SelectSVG.svelte | 7 + .../src/components/atoms/svgs/TaxiSVG.svelte | 10 + .../components/atoms/svgs/WhitelistSVG.svelte | 16 + .../ps-multijob/svelte-source/src/main.ts | 9 + .../svelte-source/src/stores/JobStore.ts | 120 + .../svelte-source/src/stores/PanelStore.ts | 62 + .../svelte-source/src/stores/debugStore.ts | 2 + .../svelte-source/src/tests/example.test.ts | 7 + .../svelte-source/src/types/types.ts | 22 + .../svelte-source/src/utils/eventHandler.ts | 33 + .../svelte-source/src/utils/fetch.ts | 26 + .../svelte-source/src/utils/mockEvent.ts | 132 + .../svelte-source/src/vite-env.d.ts | 2 + .../svelte-source/svelte.config.js | 7 + .../ps-multijob/svelte-source/tsconfig.json | 21 + .../svelte-source/tsconfig.node.json | 8 + .../ps-multijob/svelte-source/vite.config.ts | 50 + 47 files changed, 3824 insertions(+) create mode 100644 resources/[jobs]/ps-multijob/.gitignore create mode 100644 resources/[jobs]/ps-multijob/README.md create mode 100644 resources/[jobs]/ps-multijob/client/cl_main.lua create mode 100644 resources/[jobs]/ps-multijob/config.lua create mode 100644 resources/[jobs]/ps-multijob/database.sql create mode 100644 resources/[jobs]/ps-multijob/fxmanifest.lua create mode 100644 resources/[jobs]/ps-multijob/html/index.css create mode 100644 resources/[jobs]/ps-multijob/html/index.html create mode 100644 resources/[jobs]/ps-multijob/html/index.js create mode 100644 resources/[jobs]/ps-multijob/server/sv_main.lua create mode 100644 resources/[jobs]/ps-multijob/svelte-source/.gitignore create mode 100644 resources/[jobs]/ps-multijob/svelte-source/.vscode/extensions.json create mode 100644 resources/[jobs]/ps-multijob/svelte-source/global.css create mode 100644 resources/[jobs]/ps-multijob/svelte-source/index.html create mode 100644 resources/[jobs]/ps-multijob/svelte-source/package.json create mode 100644 resources/[jobs]/ps-multijob/svelte-source/pnpm-lock.yaml create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/App.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/CategoryMenu.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/JobCard.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/NavBar.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/JobDetail.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/NavItem.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/ActiveSVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/CivilianSVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/ClockSVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/CrossMarkSVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/DeleteSVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/PoliceSVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/RankSVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/SalarySVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/SelectSVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/TaxiSVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/WhitelistSVG.svelte create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/main.ts create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/stores/JobStore.ts create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/stores/PanelStore.ts create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/stores/debugStore.ts create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/tests/example.test.ts create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/types/types.ts create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/utils/eventHandler.ts create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/utils/fetch.ts create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/utils/mockEvent.ts create mode 100644 resources/[jobs]/ps-multijob/svelte-source/src/vite-env.d.ts create mode 100644 resources/[jobs]/ps-multijob/svelte-source/svelte.config.js create mode 100644 resources/[jobs]/ps-multijob/svelte-source/tsconfig.json create mode 100644 resources/[jobs]/ps-multijob/svelte-source/tsconfig.node.json create mode 100644 resources/[jobs]/ps-multijob/svelte-source/vite.config.ts diff --git a/resources/[jobs]/ps-multijob/.gitignore b/resources/[jobs]/ps-multijob/.gitignore new file mode 100644 index 000000000..37fb7cf16 --- /dev/null +++ b/resources/[jobs]/ps-multijob/.gitignore @@ -0,0 +1,26 @@ + +gs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +./svelte-source/node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + diff --git a/resources/[jobs]/ps-multijob/README.md b/resources/[jobs]/ps-multijob/README.md new file mode 100644 index 000000000..3a609dd09 --- /dev/null +++ b/resources/[jobs]/ps-multijob/README.md @@ -0,0 +1,84 @@ +# ps-multijob + +![image](https://user-images.githubusercontent.com/82112471/205506429-6e86cadc-985c-488a-9dce-78a6b5aec1bb.png) + +A script designed with a sleek and modern design for being able to display your current jobs as well as switching between them. + +## Features + +* Configurable ignore certain jobs. +* Configurable keybind to open the job menu - J by default. +* Configurable max jobs per citizen ID. Unlimited jobs for players with the 'admin' permission. +* Configurable white list jobs. +* Configurable descriptions per job. +* Configurable side (left or right) of the screen you want the ui to show on. Right side by default. (see Config) +* Configurable job icon via font awesome icons. Change these icons in the config +* Remove someone's job by doing /removejob - Admin only. +* Coming later: Admin Tab for job handling. + +## Preview + +![image](https://user-images.githubusercontent.com/82112471/206809426-155ad6fd-50d0-4ff9-add0-d72ae00f2304.png) + +## Installation + +* Rename to ps-multijob. Do not change the name or it will not work. +* Import [SQL](https://github.com/Project-Sloth/ps-multijob/blob/main/database.sql) into your database +* Ensure to server.cfg + +### Linking to qb-management | Auto Firing + +1. Find the following event + + ```txt + qb-bossmenu:server:FireEmployee + ``` + +2. Insert the TriggerEvent right under the notification for 'Employee Fired!'. The TriggerEvent should be added twice, once near line 174 and once near line 199. + + ```lua + TriggerClientEvent('QBCore:Notify', src, "Employee fired!", "success") + TriggerEvent('ps-multijob:server:removeJob', target) + ``` + +## Usage + +### Serversided Exports + +* GetJobs(citizenid) + + Example usage: + + ```lua + local jobs = exports["ps-multijob"]:GetJobs("citizenid here") + ``` + +* AddJob(citizenid, job, grade) + + Example usage: + + ```lua + exports["ps-multijob"]:AddJob("citizenid here", "police", 0) + ``` + +* UpdateJobRank(citizenid, job, grade) + Example usage: + + ```lua + exports["ps-multijob"]:UpdateJobRank("citizenid here", "police", 3) + ``` + +* RemoveJob(citizenid, job) + + Example usage: + + ```lua + exports["ps-multijob"]:RemoveJob("citizenid here", "police") + ``` + +## Credits + +* [xFutte](https://github.com/xFutte) +* [Silent](https://github.com/S1lentcodes) +* [Jay](https://github.com/jay-fivem) +* [Snipe](https://github.com/pushkart2) diff --git a/resources/[jobs]/ps-multijob/client/cl_main.lua b/resources/[jobs]/ps-multijob/client/cl_main.lua new file mode 100644 index 000000000..8974a48c6 --- /dev/null +++ b/resources/[jobs]/ps-multijob/client/cl_main.lua @@ -0,0 +1,74 @@ +local QBCore = exports['qb-core']:GetCoreObject() + +local function GetJobs() + local p = promise.new() + QBCore.Functions.TriggerCallback('ps-multijob:getJobs', function(result) + p:resolve(result) + end) + return Citizen.Await(p) +end + +local function OpenUI() + local job = QBCore.Functions.GetPlayerData().job + SetNuiFocus(true,true) + SendNUIMessage({ + action = 'sendjobs', + activeJob = job["name"], + onDuty = job["onduty"], + jobs = GetJobs(), + side = Config.Side, + }) +end + +RegisterNUICallback('selectjob', function(data, cb) + TriggerServerEvent("ps-multijob:changeJob", data["name"], data["grade"]) + local onDuty = false + if data["name"] ~= "police" then onDuty = QBCore.Shared.Jobs[data["name"]].defaultDuty end + cb({onDuty = onDuty}) +end) + +RegisterNUICallback('closemenu', function(data, cb) + cb({}) + SetNuiFocus(false,false) +end) + +RegisterNUICallback('removejob', function(data, cb) + TriggerServerEvent("ps-multijob:removeJob", data["name"], data["grade"]) + local jobs = GetJobs() + jobs[data["name"]] = nil + cb(jobs) +end) + +RegisterNUICallback('toggleduty', function(data, cb) + cb({}) + + local job = QBCore.Functions.GetPlayerData().job.name + + if Config.DenyDuty[job] then + TriggerEvent("QBCore:Notify", 'Not allowed to use this station for clock-in.', 'error') + return + end + + TriggerServerEvent("QBCore:ToggleDuty") +end) + +RegisterNetEvent('QBCore:Client:OnJobUpdate', function(JobInfo) + SendNUIMessage({ + action = 'updatejob', + name = JobInfo["name"], + label = JobInfo["label"], + onDuty = JobInfo["onduty"], + gradeLabel = JobInfo["grade"].name, + grade = JobInfo["grade"].level, + salary = JobInfo["payment"], + isWhitelist = Config.WhitelistJobs[JobInfo["name"]] or false, + description = Config.Descriptions[JobInfo["name"]] or "", + icon = Config.FontAwesomeIcons[JobInfo["name"]] or "", + }) +end) + +RegisterCommand("jobmenu", OpenUI, false) + +RegisterKeyMapping('jobmenu', "Show Job Management", "keyboard", "J") + +TriggerEvent('chat:removeSuggestion', '/jobmenu') \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/config.lua b/resources/[jobs]/ps-multijob/config.lua new file mode 100644 index 000000000..41468e4b7 --- /dev/null +++ b/resources/[jobs]/ps-multijob/config.lua @@ -0,0 +1,60 @@ +Config = Config or {} + +-- Side of the screen where you want the ui to be on. Can either be "left" or "right" +Config.Side = "right" + +Config.MaxJobs = 3 +Config.IgnoredJobs = { + ["unemployed"] = true, +} + +Config.DenyDuty = { + ["ambulance"] = true, + ["police"] = true, +} + +Config.WhitelistJobs = { + ["police"] = true, + ["ambulance"] = true, + ["mechanic"] = true, + ["judge"] = true, + ["lawyer"] = true, +} + +Config.Descriptions = { + ["police"] = "Shoot some criminals or maybe be a good cop and arrest them", + ["ambulance"] = "Fix the bullet holes", + ["mechanic"] = "Fix the bullet holes", + ["tow"] = "Pickup the tow truck and steal some vehicles", + ["taxi"] = "Pickup people around the city and drive them to their destination", + ["bus"] = "Pickup multiple people around the city and drive them to their destination", + ["realestate"] = "Sell houses or something", + ["cardealer"] = "Sell cars or something", + ["judge"] = "Decide if people are guilty", + ["lawyer"] = "Help the good or the bad", + ["reporter"] = "Lowkey useless", + ["trucker"] = "Drive a truck", + ["garbage"] = "Drive a garbage truck", + ["vineyard"] = "Get them vines", + ["admin"] = "Sell them glizzys", +} + +-- Change the icons to any free font awesome icon, also add other jobs your server might have to the list +-- List: https://fontawesome.com/search?o=r&s=solid +Config.FontAwesomeIcons = { + ["police"] = "fa-solid fa-handcuffs", + ["ambulance"] = "fa-solid fa-user-doctor", + ["mechanic"] = "fa-solid fa-wrench", + ["tow"] = "fa-solid fa-truck-tow", + ["taxi"] = "fa-solid fa-taxi", + ["bus"] = "fa-solid fa-bus", + ["realestate"] = "fa-solid fa-sign-hanging", + ["cardealer"] = "fa-solid fa-cards", + ["judge"] = "fa-solid fa-gave", + ["lawyer"] = "fa-solid fa-gavel", + ["reporter"] = "fa-solid fa-microphone", + ["trucker"] = "fa-solid fa-truck-front", + ["garbage"] = "fa-solid fa-trash-can", + ["vineyard"] = "fa-solid fa-wine-bottle", + ["hotdog"] = "fa-solid fa-hotdog", +} diff --git a/resources/[jobs]/ps-multijob/database.sql b/resources/[jobs]/ps-multijob/database.sql new file mode 100644 index 000000000..5aa84017b --- /dev/null +++ b/resources/[jobs]/ps-multijob/database.sql @@ -0,0 +1,5 @@ +CREATE TABLE IF NOT EXISTS `multijobs` ( + `citizenid` varchar(100) NOT NULL, + `jobdata` text DEFAULT NULL, + PRIMARY KEY (`citizenid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/[jobs]/ps-multijob/fxmanifest.lua b/resources/[jobs]/ps-multijob/fxmanifest.lua new file mode 100644 index 000000000..4dda5a350 --- /dev/null +++ b/resources/[jobs]/ps-multijob/fxmanifest.lua @@ -0,0 +1,19 @@ + +fx_version 'cerulean' + +game 'gta5' + +version '1.1.4' + +shared_script 'config.lua' +client_script 'client/cl_*.lua' +server_scripts{ + '@oxmysql/lib/MySQL.lua', + 'server/sv_*.lua', +} + +ui_page 'html/index.html' + +files { + 'html/*', +} diff --git a/resources/[jobs]/ps-multijob/html/index.css b/resources/[jobs]/ps-multijob/html/index.css new file mode 100644 index 000000000..9be6c5986 --- /dev/null +++ b/resources/[jobs]/ps-multijob/html/index.css @@ -0,0 +1 @@ +*{margin:0;padding:0}html,body{height:100%;width:100%;font-family:Roboto,sans-serif;overflow:hidden}:root{--color-green: #02f1b5;--color-orange: #ff4545;--color-darkestblue: #131121;--color-darkerblue: #222033;--color-darkblue: #424057;--color-white: #ffffff;--color-black: #000000;--color-lightestgrey: #dadada;--color-lightgrey: #cacaca;--color-grey: #797979;--font-color: rgba(var(--theme-white), .87)}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-thumb{border-radius:2px;background-color:#3c3c3c}main.svelte-164hciw{background:var(--color-darkestblue);color:#fff}.category.svelte-164hciw{font-size:10pt;color:var(--color-lightestgrey)}.category-name.svelte-164hciw{font-size:15pt;letter-spacing:1px}.icon.svelte-1jmblc8{width:40%;color:var(--color-lightestgrey)}.navitem.svelte-1jmblc8:hover{background-color:var(--color-darkestblue)}.nav.svelte-zpuozb{background:var(--color-darkerblue);border-left:1px solid var(--color-darkblue)}*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgba(0,0,0,0);--un-ring-shadow:0 0 rgba(0,0,0,0);--un-shadow-inset: ;--un-shadow:0 0 rgba(0,0,0,0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgba(0,0,0,0);--un-ring-shadow:0 0 rgba(0,0,0,0);--un-shadow-inset: ;--un-shadow:0 0 rgba(0,0,0,0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}.relative{position:relative;}.z-10{z-index:10;}.mb-\[30px\]{margin-bottom:30px;}.ml-\[5px\]{margin-left:5px;}.ml-auto{margin-left:auto;}.mt-\[-5px\]{margin-top:-5px;}.mt-2{margin-top:0.5rem;}.block{display:block;}.h-\[60px\]{height:60px;}.h-\[80px\]{height:80px;}.h-11{height:2.75rem;}.max-h-screen{max-height:100vh;}.min-h-screen{min-height:100vh;}.w-\[0\.8rem\]{width:0.8rem;}.w-\[0\.9rem\]{width:0.9rem;}.w-\[1\.1rem\]{width:1.1rem;}.w-\[1\.4rem\]{width:1.4rem;}.w-\[380px\]{width:380px;}.w-\[80px\]{width:80px;}.w-4{width:1rem;}.w-5{width:1.25rem;}.w-6{width:1.5rem;}.w-7{width:1.75rem;}.w-full{width:100%;}.flex{display:flex;}.flex-1{flex:1 1 0%;}.flex-row{flex-direction:row;}.flex-col{flex-direction:column;}.cursor-pointer{cursor:pointer;}.select-none{user-select:none;}.items-center{align-items:center;}.justify-end{justify-content:flex-end;}.justify-center{justify-content:center;}.justify-between{justify-content:space-between;}.gap-\[12px\]{grid-gap:12px;gap:12px;}.gap-1{grid-gap:0.25rem;gap:0.25rem;}.gap-2{grid-gap:0.5rem;gap:0.5rem;}.gap-4{grid-gap:1rem;gap:1rem;}.overflow-y-auto{overflow-y:auto;}.b-2{border-width:2px;border-style:solid;}.border,.border-1{border-width:1px;border-style:solid;}.border-l-4{border-left-width:4px;border-left-style:solid;}.border-r-4{border-right-width:4px;border-right-style:solid;}.border-\[var\(--color-darkblue\)\]{border-color:var(--color-darkblue);}.border-\[var\(--color-green\)\],.hover\:border-\[var\(--color-green\)\]:hover{border-color:var(--color-green);}.border-\[var\(--color-orange\)\],.hover\:border-\[var\(--color-orange\)\]:hover{border-color:var(--color-orange);}.border-l-\[var\(--color-green\)\]{border-left-color:var(--color-green);}.border-l-transparent{border-left-color:transparent;}.border-r-\[var\(--color-green\)\]{border-right-color:var(--color-green);}.border-r-transparent{border-right-color:transparent;}.b-rd-\[10px\]{border-radius:10px;}.b-rd-\[5px\]{border-radius:5px;}.b-rd-2{border-radius:0.5rem;}.bg-\[var\(--color-darkerblue\)\]{background-color:var(--color-darkerblue);}.bg-\[var\(--color-darkestblue\)\]{background-color:var(--color-darkestblue);}.bg-\[var\(--color-green\)\]{background-color:var(--color-green);}.bg-dark-200{--un-bg-opacity:1;background-color:rgba(50,50,50,var(--un-bg-opacity));}.bg-transparent{background-color:transparent;}.px-\[22px\]{padding-left:22px;padding-right:22px;}.px-\[28px\]{padding-left:28px;padding-right:28px;}.py-\[10px\]{padding-top:10px;padding-bottom:10px;}.py-5{padding-top:1.25rem;padding-bottom:1.25rem;}.pb-\[14px\]{padding-bottom:14px;}.pb-20{padding-bottom:5rem;}.pb-4{padding-bottom:1rem;}.pt-\[14px\]{padding-top:14px;}.pt-\[20px\]{padding-top:20px;}.text-center{text-align:center;}.text-sm{font-size:0.875rem;line-height:1.25rem;}.text-xl{font-size:1.25rem;line-height:1.75rem;}.text-xs{font-size:0.75rem;line-height:1rem;}.font-medium{font-weight:500;}.tracking-wide{letter-spacing:0.025em;}.uppercase{text-transform:uppercase;}.capitalize{text-transform:capitalize;}.hover\:text-\[var\(--color-green\)\]:hover,.text-\[var\(--color-green\)\]{color:var(--color-green);}.hover\:text-\[var\(--color-orange\)\]:hover,.text-\[var\(--color-orange\)\]{color:var(--color-orange);}.text-\[var\(--color-darkblue\)\]{color:var(--color-darkblue);}.text-\[var\(--color-lightestgrey\)\]{color:var(--color-lightestgrey);}.text-black{--un-text-opacity:1;color:rgba(0,0,0,var(--un-text-opacity));}.text-white{--un-text-opacity:1;color:rgba(255,255,255,var(--un-text-opacity));}.duration-200{transition-duration:200ms;}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){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-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-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[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}textarea{resize:vertical}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} diff --git a/resources/[jobs]/ps-multijob/html/index.html b/resources/[jobs]/ps-multijob/html/index.html new file mode 100644 index 000000000..1f7497e4c --- /dev/null +++ b/resources/[jobs]/ps-multijob/html/index.html @@ -0,0 +1 @@ +PS-MultiJob
\ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/html/index.js b/resources/[jobs]/ps-multijob/html/index.js new file mode 100644 index 000000000..c00d4d4b6 --- /dev/null +++ b/resources/[jobs]/ps-multijob/html/index.js @@ -0,0 +1,44 @@ +const kt=function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function t(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerpolicy&&(o.referrerPolicy=l.referrerpolicy),l.crossorigin==="use-credentials"?o.credentials="include":l.crossorigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=t(l);fetch(l.href,o)}};kt();function $(){}const ot=n=>n;function st(n){return n()}function Re(){return Object.create(null)}function ie(n){n.forEach(st)}function Ve(n){return typeof n=="function"}function P(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}function $t(n){return Object.keys(n).length===0}function ct(n,...e){if(n==null)return $;const t=n.subscribe(...e);return t.unsubscribe?()=>t.unsubscribe():t}function Lt(n){let e;return ct(n,t=>e=t)(),e}function X(n,e,t){n.$$.on_destroy.push(ct(e,t))}function Be(n){return n==null?"":n}const ft=typeof window<"u";let at=ft?()=>window.performance.now():()=>Date.now(),De=ft?n=>requestAnimationFrame(n):$;const se=new Set;function ut(n){se.forEach(e=>{e.c(n)||(se.delete(e),e.f())}),se.size!==0&&De(ut)}function mt(n){let e;return se.size===0&&De(ut),{promise:new Promise(t=>{se.add(e={c:n,f:t})}),abort(){se.delete(e)}}}function g(n,e){n.appendChild(e)}function dt(n){if(!n)return document;const e=n.getRootNode?n.getRootNode():n.ownerDocument;return e&&e.host?e:n.ownerDocument}function jt(n){const e=y("style");return St(dt(n),e),e.sheet}function St(n,e){g(n.head||n,e)}function z(n,e,t){n.insertBefore(e,t||null)}function M(n){n.parentNode.removeChild(n)}function xt(n,e){for(let t=0;tn.removeEventListener(e,t,r)}function m(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function Mt(n){return Array.from(n.childNodes)}function ne(n,e){e=""+e,n.wholeText!==e&&(n.data=e)}function zt(n,e,{bubbles:t=!1,cancelable:r=!1}={}){const l=document.createEvent("CustomEvent");return l.initCustomEvent(n,t,r,e),l}const we=new Map;let ye=0;function At(n){let e=5381,t=n.length;for(;t--;)e=(e<<5)-e^n.charCodeAt(t);return e>>>0}function Nt(n,e){const t={stylesheet:jt(e),rules:{}};return we.set(n,t),t}function gt(n,e,t,r,l,o,i,s=0){const f=16.666/r;let c=`{ +`;for(let h=0;h<=1;h+=f){const S=e+(t-e)*o(h);c+=h*100+`%{${i(S,1-S)}} +`}const a=c+`100% {${i(t,1-t)}} +}`,u=`__svelte_${At(a)}_${s}`,_=dt(n),{stylesheet:v,rules:C}=we.get(_)||Nt(_,n);C[u]||(C[u]=!0,v.insertRule(`@keyframes ${u} ${a}`,v.cssRules.length));const d=n.style.animation||"";return n.style.animation=`${d?`${d}, `:""}${u} ${r}ms linear ${l}ms 1 both`,ye+=1,u}function Ae(n,e){const t=(n.style.animation||"").split(", "),r=t.filter(e?o=>o.indexOf(e)<0:o=>o.indexOf("__svelte")===-1),l=t.length-r.length;l&&(n.style.animation=r.join(", "),ye-=l,ye||Vt())}function Vt(){De(()=>{ye||(we.forEach(n=>{const{stylesheet:e}=n;let t=e.cssRules.length;for(;t--;)e.deleteRule(t);n.rules={}}),we.clear())})}let de;function me(n){de=n}function _t(){if(!de)throw new Error("Function called outside component initialization");return de}function Dt(n){_t().$$.on_mount.push(n)}function Jt(n){_t().$$.on_destroy.push(n)}const ae=[],Ge=[],ve=[],Te=[],Et=Promise.resolve();let Ne=!1;function Ot(){Ne||(Ne=!0,Et.then(ht))}function re(n){ve.push(n)}const xe=new Set;let pe=0;function ht(){const n=de;do{for(;pe{fe=null})),fe}function Ce(n,e,t){n.dispatchEvent(zt(`${e?"intro":"outro"}${t}`))}const be=new Set;let Z;function R(){Z={r:0,c:[],p:Z}}function B(){Z.r||ie(Z.c),Z=Z.p}function p(n,e){n&&n.i&&(be.delete(n),n.i(e))}function w(n,e,t,r){if(n&&n.o){if(be.has(n))return;be.add(n),Z.c.push(()=>{be.delete(n),r&&(t&&n.d(1),r())}),n.o(e)}else r&&r()}const vt={duration:0};function bt(n,e,t){let r=e(n,t),l=!1,o,i,s=0;function f(){o&&Ae(n,o)}function c(){const{delay:u=0,duration:_=300,easing:v=ot,tick:C=$,css:d}=r||vt;d&&(o=gt(n,0,1,_,u,v,d,s++)),C(0,1);const h=at()+u,S=h+_;i&&i.abort(),l=!0,re(()=>Ce(n,!0,"start")),i=mt(x=>{if(l){if(x>=S)return C(1,0),Ce(n,!0,"end"),f(),l=!1;if(x>=h){const j=v((x-h)/_);C(j,1-j)}}return l})}let a=!1;return{start(){a||(a=!0,Ae(n),Ve(r)?(r=r(),pt().then(c)):c())},invalidate(){a=!1},end(){l&&(f(),l=!1)}}}function wt(n,e,t){let r=e(n,t),l=!0,o;const i=Z;i.r+=1;function s(){const{delay:f=0,duration:c=300,easing:a=ot,tick:u=$,css:_}=r||vt;_&&(o=gt(n,1,0,c,f,a,_));const v=at()+f,C=v+c;re(()=>Ce(n,!1,"start")),mt(d=>{if(l){if(d>=C)return u(0,1),Ce(n,!1,"end"),--i.r||ie(i.c),!1;if(d>=v){const h=a((d-v)/c);u(1-h,h)}}return l})}return Ve(r)?pt().then(()=>{r=r(),s()}):s(),{end(f){f&&r.tick&&r.tick(1,0),l&&(o&&Ae(n,o),l=!1)}}}function Rt(n,e){w(n,1,1,()=>{e.delete(n.key)})}function Bt(n,e,t,r,l,o,i,s,f,c,a,u){let _=n.length,v=o.length,C=_;const d={};for(;C--;)d[n[C].key]=C;const h=[],S=new Map,x=new Map;for(C=v;C--;){const L=u(l,o,C),J=t(L);let G=i.get(J);G?r&&G.p(L,e):(G=c(J,L),G.c()),S.set(J,h[C]=G),J in d&&x.set(J,Math.abs(C-d[J]))}const j=new Set,A=new Set;function k(L){p(L,1),L.m(s,a),i.set(L.key,L),a=L.first,v--}for(;_&&v;){const L=h[v-1],J=n[_-1],G=L.key,F=J.key;L===J?(a=L.first,_--,v--):S.has(F)?!i.has(G)||j.has(G)?k(L):A.has(F)?_--:x.get(G)>x.get(F)?(A.add(G),k(L)):(j.add(F),_--):(f(J,i),_--)}for(;_--;){const L=n[_];S.has(L.key)||f(L,i)}for(;v;)k(h[v-1]);return h}function D(n){n&&n.c()}function N(n,e,t,r){const{fragment:l,on_mount:o,on_destroy:i,after_update:s}=n.$$;l&&l.m(e,t),r||re(()=>{const f=o.map(st).filter(Ve);i?i.push(...f):ie(f),n.$$.on_mount=[]}),s.forEach(re)}function V(n,e){const t=n.$$;t.fragment!==null&&(ie(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Gt(n,e){n.$$.dirty[0]===-1&&(ae.push(n),Ot(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{const C=v.length?v[0]:_;return c.ctx&&l(c.ctx[u],c.ctx[u]=C)&&(!c.skip_bound&&c.bound[u]&&c.bound[u](C),a&&Gt(n,u)),_}):[],c.update(),a=!0,ie(c.before_update),c.fragment=r?r(c.ctx):!1,e.target){if(e.hydrate){const u=Mt(e.target);c.fragment&&c.fragment.l(u),u.forEach(M)}else c.fragment&&c.fragment.c();e.intro&&p(n.$$.fragment),N(n,e.target,e.anchor,e.customElement),ht()}me(f)}class I{$destroy(){V(this,1),this.$destroy=$}$on(e,t){const r=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return r.push(t),()=>{const l=r.indexOf(t);l!==-1&&r.splice(l,1)}}$set(e){this.$$set&&!$t(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}function Tt(n){const e=n-1;return e*e*e+1}function ke(n,{delay:e=0,duration:t=400,easing:r=Tt,x:l=0,y:o=0,opacity:i=0}={}){const s=getComputedStyle(n),f=+s.opacity,c=s.transform==="none"?"":s.transform,a=f*(1-i);return{delay:e,duration:t,easing:r,css:(u,_)=>` + transform: ${c} translate(${(1-u)*l}px, ${(1-u)*o}px); + opacity: ${f-a*_}`}}function Pt(n){let e,t,r,l,o,i,s,f,c,a,u,_;var v=n[0];function C(d){return{}}return v&&(l=new v(C())),{c(){e=y("div"),t=y("div"),r=y("div"),l&&D(l.$$.fragment),o=T(),i=y("div"),s=y("p"),f=W(n[1]),c=W(`: + `),a=y("span"),u=W(n[2]),m(r,"class",n[3]),m(t,"class","w-full flex justify-center text-white"),m(a,"class","text-[var(--color-green)]"),m(s,"class","text-xs"),m(i,"class","text-center"),m(e,"class","flex flex-1 flex-col items-center gap-2 b-2 b-rd-2 border-[var(--color-darkblue)] pt-[14px] pb-[14px]")},m(d,h){z(d,e,h),g(e,t),g(t,r),l&&N(l,r,null),g(e,o),g(e,i),g(i,s),g(s,f),g(s,c),g(s,a),g(a,u),_=!0},p(d,[h]){if(v!==(v=d[0])){if(l){R();const S=l;w(S.$$.fragment,1,0,()=>{V(S,1)}),B()}v?(l=new v(C()),D(l.$$.fragment),p(l.$$.fragment,1),N(l,r,null)):l=null}(!_||h&8)&&m(r,"class",d[3]),(!_||h&2)&&ne(f,d[1]),(!_||h&4)&&ne(u,d[2])},i(d){_||(l&&p(l.$$.fragment,d),_=!0)},o(d){l&&w(l.$$.fragment,d),_=!1},d(d){d&&M(e),l&&V(l)}}}function Ut(n,e,t){let{icon:r=null}=e,{detail:l}=e,{value:o}=e,{svgSize:i}=e;return n.$$set=s=>{"icon"in s&&t(0,r=s.icon),"detail"in s&&t(1,l=s.detail),"value"in s&&t(2,o=s.value),"svgSize"in s&&t(3,i=s.svgSize)},[r,l,o,i]}class Me extends I{constructor(e){super(),U(this,e,Ut,Pt,P,{icon:0,detail:1,value:2,svgSize:3})}}function It(n){let e,t;return{c(){e=E("svg"),t=E("path"),m(t,"d",`M160 0C177.7 0 192 14.33 192 32V67.68C193.6 67.89 195.1 68.12 196.7 68.35C207.3 69.93 238.9 75.02 251.9 78.31C268.1 + 82.65 279.4 100.1 275 117.2C270.7 134.3 253.3 144.7 236.1 140.4C226.8 137.1 198.5 133.3 187.3 131.7C155.2 126.9 127.7 129.3 + 108.8 136.5C90.52 143.5 82.93 153.4 80.92 164.5C78.98 175.2 80.45 181.3 82.21 185.1C84.1 189.1 87.79 193.6 95.14 198.5C111.4 + 209.2 136.2 216.4 168.4 225.1L171.2 225.9C199.6 233.6 234.4 243.1 260.2 260.2C274.3 269.6 287.6 282.3 295.8 299.9C304.1 317.7 + 305.9 337.7 302.1 358.1C295.1 397 268.1 422.4 236.4 435.6C222.8 441.2 207.8 444.8 192 446.6V480C192 497.7 177.7 512 160 512C142.3 + 512 128 497.7 128 480V445.1C127.6 445.1 127.1 444.1 126.7 444.9L126.5 444.9C102.2 441.1 62.07 430.6 35 418.6C18.85 411.4 11.58 + 392.5 18.76 376.3C25.94 360.2 44.85 352.9 60.1 360.1C81.9 369.4 116.3 378.5 136.2 381.6C168.2 386.4 194.5 383.6 212.3 376.4C229.2 + 369.5 236.9 359.5 239.1 347.5C241 336.8 239.6 330.7 237.8 326.9C235.9 322.9 232.2 318.4 224.9 313.5C208.6 302.8 183.8 295.6 151.6 + 286.9L148.8 286.1C120.4 278.4 85.58 268.9 59.76 251.8C45.65 242.4 32.43 229.7 24.22 212.1C15.89 194.3 14.08 174.3 17.95 153C25.03 + 114.1 53.05 89.29 85.96 76.73C98.98 71.76 113.1 68.49 128 66.73V32C128 14.33 142.3 0 160 0V0z`),m(e,"fill","currentColor"),m(e,"viewBox","0 0 320 512")},m(r,l){z(r,e,l),g(e,t)},p:$,i:$,o:$,d(r){r&&M(e)}}}class qt extends I{constructor(e){super(),U(this,e,null,It,P,{})}}function Ft(n){let e,t;return{c(){e=E("svg"),t=E("path"),m(t,"d",`M287.9 0C297.1 0 305.5 5.25 309.5 13.52L378.1 154.8L531.4 177.5C540.4 178.8 547.8 185.1 550.7 193.7C553.5 202.4 + 551.2 211.9 544.8 218.2L433.6 328.4L459.9 483.9C461.4 492.9 457.7 502.1 450.2 507.4C442.8 512.7 432.1 513.4 424.9 509.1L287.9 + 435.9L150.1 509.1C142.9 513.4 133.1 512.7 125.6 507.4C118.2 502.1 114.5 492.9 115.1 483.9L142.2 328.4L31.11 218.2C24.65 211.9 + 22.36 202.4 25.2 193.7C28.03 185.1 35.5 178.8 44.49 177.5L197.7 154.8L266.3 13.52C270.4 5.249 278.7 0 287.9 0L287.9 0zM287.9 + 78.95L235.4 187.2C231.9 194.3 225.1 199.3 217.3 200.5L98.98 217.9L184.9 303C190.4 308.5 192.9 316.4 191.6 324.1L171.4 443.7L276.6 + 387.5C283.7 383.7 292.2 383.7 299.2 387.5L404.4 443.7L384.2 324.1C382.9 316.4 385.5 308.5 391 303L476.9 217.9L358.6 200.5C350.7 + 199.3 343.9 194.3 340.5 187.2L287.9 78.95z`),m(e,"fill","currentColor"),m(e,"viewBox","0 0 576 512")},m(r,l){z(r,e,l),g(e,t)},p:$,i:$,o:$,d(r){r&&M(e)}}}class Kt extends I{constructor(e){super(),U(this,e,null,Ft,P,{})}}function Wt(n){let e,t;return{c(){e=E("svg"),t=E("path"),m(t,"d",`M224 256c70.7 0 128-57.31 128-128s-57.3-128-128-128C153.3 0 96 57.31 96 128S153.3 256 224 256zM274.7 304H173.3C77.61 + 304 0 381.6 0 477.3c0 19.14 15.52 34.67 34.66 34.67h378.7C432.5 512 448 496.5 448 477.3C448 381.6 370.4 304 274.7 304z`),m(e,"fill","currentColor"),m(e,"viewBox","0 0 448 512")},m(r,l){z(r,e,l),g(e,t)},p:$,i:$,o:$,d(r){r&&M(e)}}}class Yt extends I{constructor(e){super(),U(this,e,null,Wt,P,{})}}function Qt(n){let e,t;return{c(){e=E("svg"),t=E("path"),m(t,"d",`M547.3,112.1c-98,98.1-196,196.2-294,294.2c-11.9,11.9-23.7,23.8-35.6,35.6c-6,6-9.3,6-15.3,0 + C141.5,381.1,80.7,320.2,19.8,259.3c-6-6-6-9.2,0-15.2c13.6-13.6,27.2-27.2,40.8-40.8c6-6,9.2-6,15.2,0 + c43.2,43.2,86.5,86.4,129.7,129.7c1.3,1.3,2.4,3,3.8,4.8c2-1.9,3.4-3.1,4.7-4.4c90.5-90.5,181-181,271.5-271.5 + c7.7-7.7,10-7.7,17.8,0.1c12.7,12.7,25.5,25.5,38.2,38.2c2.1,2.1,3.9,4.4,5.8,6.6C547.3,108.6,547.3,110.4,547.3,112.1z`),m(e,"fill","currentColor"),m(e,"x","0px"),m(e,"y","0px"),m(e,"viewBox","0 0 562.7 502.7"),m(e,"xml:space","preserve")},m(r,l){z(r,e,l),g(e,t)},p:$,i:$,o:$,d(r){r&&M(e)}}}class $e extends I{constructor(e){super(),U(this,e,null,Qt,P,{})}}function Xt(n){let e,t;return{c(){e=E("svg"),t=E("path"),m(t,"d",`M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 + 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 + 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z`),m(e,"fill","currentColor"),m(e,"viewBox","0 0 320 512")},m(r,l){z(r,e,l),g(e,t)},p:$,i:$,o:$,d(r){r&&M(e)}}}class Pe extends I{constructor(e){super(),U(this,e,null,Xt,P,{})}}function Zt(n){let e,t,r;return{c(){e=E("svg"),t=E("path"),r=E("path"),m(t,"d","M0 0h24v24H0z"),m(t,"fill","none"),m(r,"d","M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"),m(e,"fill","currentColor"),m(e,"viewBox","0 0 24 24")},m(l,o){z(l,e,o),g(e,t),g(e,r)},p:$,i:$,o:$,d(l){l&&M(e)}}}class Ue extends I{constructor(e){super(),U(this,e,null,Zt,P,{})}}function en(n){let e,t;return{c(){e=E("svg"),t=E("path"),m(t,"d",`M256 512C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256s-114.6 256-256 256zM232 120V256c0 + 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 + 10.7-24 24z`),m(e,"fill","currentColor"),m(e,"viewBox","0 0 512 512")},m(r,l){z(r,e,l),g(e,t)},p:$,i:$,o:$,d(r){r&&M(e)}}}class Ie extends I{constructor(e){super(),U(this,e,null,en,P,{})}}function tn(n){let e,t;return{c(){e=E("svg"),t=E("path"),m(t,"d",`M352 0C369.7 0 384 14.33 384 32V64L384 64.15C422.6 66.31 456.3 91.49 469.2 128.3L504.4 228.8C527.6 238.4 544 + 261.3 544 288V480C544 497.7 529.7 512 512 512H480C462.3 512 448 497.7 448 480V432H128V480C128 497.7 113.7 512 96 512H64C46.33 + 512 32 497.7 32 480V288C32 261.3 48.36 238.4 71.61 228.8L106.8 128.3C119.7 91.49 153.4 66.31 192 64.15L192 64V32C192 14.33 + 206.3 0 224 0L352 0zM197.4 128C183.8 128 171.7 136.6 167.2 149.4L141.1 224H434.9L408.8 149.4C404.3 136.6 392.2 128 378.6 + 128H197.4zM128 352C145.7 352 160 337.7 160 320C160 302.3 145.7 288 128 288C110.3 288 96 302.3 96 320C96 337.7 110.3 352 + 128 352zM448 288C430.3 288 416 302.3 416 320C416 337.7 430.3 352 448 352C465.7 352 480 337.7 480 320C480 302.3 465.7 288 + 448 288z`),m(e,"fill","currentColor"),m(e,"viewBox","0 0 576 512")},m(r,l){z(r,e,l),g(e,t)},p:$,i:$,o:$,d(r){r&&M(e)}}}class qe extends I{constructor(e){super(),U(this,e,null,tn,P,{})}}const oe=[];function te(n,e=$){let t;const r=new Set;function l(s){if(P(n,s)&&(n=s,t)){const f=!oe.length;for(const c of r)c[1](),oe.push(c,n);if(f){for(let c=0;c{r.delete(c),r.size===0&&(t(),t=null)}}return{set:l,update:o,subscribe:i}}async function ue(n,e={}){const t={method:"post",headers:{"Content-Type":"application/json; charset=UTF-8"},body:JSON.stringify(e)},l=(()=>{try{return window.GetParentResourceName()}catch{return"ps-multijob"}})();try{return await(await fetch(`https://${l}/${n}`,t)).json()}catch{}}function nn(n){let e,t;return{c(){e=E("svg"),t=E("path"),m(t,"d","M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z"),m(e,"fill",n[0]),m(e,"xmlns","http://www.w3.org/2000/svg"),m(e,"viewBox","0 0 448 512")},m(r,l){z(r,e,l),g(e,t)},p(r,[l]){l&1&&m(e,"fill",r[0])},i:$,o:$,d(r){r&&M(e)}}}function rn(n,e,t){let{color:r="black"}=e;return n.$$set=l=>{"color"in l&&t(0,r=l.color)},[r]}class ln extends I{constructor(e){super(),U(this,e,rn,nn,P,{color:0})}}function on(n){let e,t;return{c(){e=E("svg"),t=E("path"),m(t,"d",`M152.1 38.16C161.9 47.03 162.7 62.2 153.8 72.06L81.84 152.1C77.43 156.9 71.21 159.8 64.63 159.1C58.05 + 160.2 51.69 157.6 47.03 152.1L7.029 112.1C-2.343 103.6-2.343 88.4 7.029 79.03C16.4 69.66 31.6 69.66 40.97 79.03L63.08 + 101.1L118.2 39.94C127 30.09 142.2 29.29 152.1 38.16V38.16zM152.1 198.2C161.9 207 162.7 222.2 153.8 232.1L81.84 312.1C77.43 + 316.9 71.21 319.8 64.63 319.1C58.05 320.2 51.69 317.6 47.03 312.1L7.029 272.1C-2.343 263.6-2.343 248.4 7.029 239C16.4 + 229.7 31.6 229.7 40.97 239L63.08 261.1L118.2 199.9C127 190.1 142.2 189.3 152.1 198.2V198.2zM224 96C224 78.33 238.3 64 + 256 64H480C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H256C238.3 128 224 113.7 224 96V96zM224 256C224 238.3 + 238.3 224 256 224H480C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H256C238.3 288 224 273.7 224 256zM160 416C160 + 398.3 174.3 384 192 384H480C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H192C174.3 448 160 433.7 160 416zM0 + 416C0 389.5 21.49 368 48 368C74.51 368 96 389.5 96 416C96 442.5 74.51 464 48 464C21.49 464 0 442.5 0 416z`),m(e,"fill",n[0]),m(e,"xmlns","http://www.w3.org/2000/svg"),m(e,"viewBox","0 0 512 512")},m(r,l){z(r,e,l),g(e,t)},p(r,[l]){l&1&&m(e,"fill",r[0])},i:$,o:$,d(r){r&&M(e)}}}function sn(n,e,t){let{color:r="black"}=e;return n.$$set=l=>{"color"in l&&t(0,r=l.color)},[r]}class cn extends I{constructor(e){super(),U(this,e,sn,on,P,{color:0})}}const fn=[{name:"whitelist",icon:cn},{name:"civilian",icon:ln}],an=()=>{const n={panelActive:te(""),panels:te(fn),show:te(!1),side:te("right")},e={handleKeyUp(t){t.key=="Escape"&&(e.setShow(!1),ue("closemenu",null))},setActive(t){n.panelActive.set(t)},setShow(t){n.show.set(t)},setSide(t){n.side.set(t)}};return{...n,...e}},le=an(),un=()=>{const n={jobManifest:te({civilian:[],whitelist:[]}),activeJob:te("police person"),onDuty:te(!1)};return{...n,...{deleteJob(t,r,l){ue("removejob",{name:t,grade:r}),n.jobManifest.update(o=>(o[l]=o[l].filter(i=>i.name!=t),o))},receiveOpenMessage(t){n.jobManifest.set(t.jobs),n.activeJob.set(t.activeJob),n.onDuty.set(t.onDuty),le.side.set(t.side||"right")},recieveUpdateJob(t){Lt(n.activeJob)==t.name&&n.onDuty.set(t.onDuty),n.jobManifest.update(l=>{var a;function o(u,_){let v=l[u][_];v.grade=t.grade,v.gradeLabel=t.gradeLabel,v.salary=t.salary}function i(){return{name:t.name,label:t.label,description:t.description,salary:t.salary,gradeLabel:t.gradeLabel,grade:t.grade,active:0,icon:t.icon}}let s=u=>u.name==t.name;const f=t.isWhitelist?"whitelist":"civilian";let c=(a=l[f])==null?void 0:a.findIndex(s);return c!=-1?o(f,c):l[f]=[...l[f],i()],l})},async setActiveJob(t,r,l){n.activeJob.set(t);let o=await ue("selectjob",{name:r,grade:l});n.onDuty.set(o==null?void 0:o.onDuty)},unSetActiveJob(){n.activeJob.set(""),n.onDuty.set(!1),ue("selectjob",{name:"unemployed",grade:0})},toggleDuty(){n.onDuty.update(t=>!t),ue("toggleduty",null)}}}},Le=un();function mn(n){let e,t,r;var l=qe;function o(i){return{}}return l&&(e=new l(o())),{c(){e&&D(e.$$.fragment),t=je()},m(i,s){e&&N(e,i,s),z(i,t,s),r=!0},p(i,s){if(l!==(l=qe)){if(e){R();const f=e;w(f.$$.fragment,1,0,()=>{V(f,1)}),B()}l?(e=new l(o()),D(e.$$.fragment),p(e.$$.fragment,1),N(e,t.parentNode,t)):e=null}},i(i){r||(e&&p(e.$$.fragment,i),r=!0)},o(i){e&&w(e.$$.fragment,i),r=!1},d(i){i&&M(t),e&&V(e,i)}}}function dn(n){let e,t;return{c(){e=y("i"),m(e,"class",t=n[2]+" fa-lg")},m(r,l){z(r,e,l)},p(r,l){l[0]&4&&t!==(t=r[2]+" fa-lg")&&m(e,"class",t)},i:$,o:$,d(r){r&&M(e)}}}function Fe(n){let e,t,r,l,o,i,s,f;var c=$e;function a(u){return{}}return c&&(r=new c(a())),{c(){e=y("button"),t=y("div"),r&&D(r.$$.fragment),l=T(),o=y("p"),o.textContent="select",m(t,"class","w-4"),m(o,"class","ml-[5px] uppercase tracking-wide"),m(e,"class","bg-[var(--color-green)] flex flex-row h-11 items-center justify-center gap-1 b-rd-[5px] py-[10px] font-medium text-black flex-1 w-full")},m(u,_){z(u,e,_),g(e,t),r&&N(r,t,null),g(e,l),g(e,o),i=!0,s||(f=Y(e,"click",n[29]),s=!0)},p(u,_){if(c!==(c=$e)){if(r){R();const v=r;w(v.$$.fragment,1,0,()=>{V(v,1)}),B()}c?(r=new c(a()),D(r.$$.fragment),p(r.$$.fragment,1),N(r,t,null)):r=null}},i(u){i||(r&&p(r.$$.fragment,u),i=!0)},o(u){r&&w(r.$$.fragment,u),i=!1},d(u){u&&M(e),r&&V(r),s=!1,f()}}}function Ke(n){let e,t,r,l,o,i,s,f,c,a,u,_,v,C,d,h,S,x=!n[15]&&We(),j=(n[9]&&!n[11]||n[12])&&Ye(),A=(!n[9]&&!n[11]||n[13])&&Qe();return{c(){e=y("div"),t=y("button"),x&&x.c(),r=T(),l=y("p"),o=W(n[14]),s=T(),f=y("div"),c=y("button"),j&&j.c(),a=T(),A&&A.c(),u=T(),_=y("p"),v=W(n[16]),m(l,"class","uppercase tracking-wide"),m(t,"class",i="flex flex-1 flex-row gap-2 border-1 b-rd-[5px] justify-center items-center h-11"+(n[15]?"border-[var(--color-orange)] text-[var(--color-orange)]":"")),m(_,"class","ml-[5px] uppercase tracking-wide"),m(c,"class",C="flex flex-row justify-center items-center gap-1 h-11 border-1 b-rd-[5px] py-[10px] font-medium flex-1 w-full "+(n[9]?"border-[var(--color-green)] text-[var(--color-green)] ":"border-[var(--color-orange)] text-[var(--color-orange)] ")+(n[9]&&!n[12]?"hover:border-[var(--color-orange)] hover:text-[var(--color-orange)]":"")+(!n[9]&&!n[13]?"hover:border-[var(--color-green)] hover:text-[var(--color-green)]":"")),m(f,"class","flex-1"),m(e,"class","flex flex-row justify-between gap-2")},m(k,L){z(k,e,L),g(e,t),x&&x.m(t,null),g(t,r),g(t,l),g(l,o),g(e,s),g(e,f),g(f,c),j&&j.m(c,null),g(c,a),A&&A.m(c,null),g(c,u),g(c,_),g(_,v),d=!0,h||(S=[Y(t,"click",n[26]),Y(t,"mouseenter",n[24]),Y(t,"mouseleave",n[25]),Y(c,"click",n[23]),Y(c,"mouseenter",n[21]),Y(c,"mouseleave",n[22])],h=!0)},p(k,L){k[15]?x&&(R(),w(x,1,1,()=>{x=null}),B()):x?(x.p(k,L),L[0]&32768&&p(x,1)):(x=We(),x.c(),p(x,1),x.m(t,r)),(!d||L[0]&16384)&&ne(o,k[14]),(!d||L[0]&32768&&i!==(i="flex flex-1 flex-row gap-2 border-1 b-rd-[5px] justify-center items-center h-11"+(k[15]?"border-[var(--color-orange)] text-[var(--color-orange)]":"")))&&m(t,"class",i),k[9]&&!k[11]||k[12]?j?(j.p(k,L),L[0]&6656&&p(j,1)):(j=Ye(),j.c(),p(j,1),j.m(c,a)):j&&(R(),w(j,1,1,()=>{j=null}),B()),!k[9]&&!k[11]||k[13]?A?(A.p(k,L),L[0]&10752&&p(A,1)):(A=Qe(),A.c(),p(A,1),A.m(c,u)):A&&(R(),w(A,1,1,()=>{A=null}),B()),(!d||L[0]&65536)&&ne(v,k[16]),(!d||L[0]&12800&&C!==(C="flex flex-row justify-center items-center gap-1 h-11 border-1 b-rd-[5px] py-[10px] font-medium flex-1 w-full "+(k[9]?"border-[var(--color-green)] text-[var(--color-green)] ":"border-[var(--color-orange)] text-[var(--color-orange)] ")+(k[9]&&!k[12]?"hover:border-[var(--color-orange)] hover:text-[var(--color-orange)]":"")+(!k[9]&&!k[13]?"hover:border-[var(--color-green)] hover:text-[var(--color-green)]":"")))&&m(c,"class",C)},i(k){d||(p(x),p(j),p(A),d=!0)},o(k){w(x),w(j),w(A),d=!1},d(k){k&&M(e),x&&x.d(),j&&j.d(),A&&A.d(),h=!1,ie(S)}}}function We(n){let e,t,r;var l=$e;function o(i){return{}}return l&&(t=new l(o())),{c(){e=y("div"),t&&D(t.$$.fragment),m(e,"class","w-5")},m(i,s){z(i,e,s),t&&N(t,e,null),r=!0},p(i,s){if(l!==(l=$e)){if(t){R();const f=t;w(f.$$.fragment,1,0,()=>{V(f,1)}),B()}l?(t=new l(o()),D(t.$$.fragment),p(t.$$.fragment,1),N(t,e,null)):t=null}},i(i){r||(t&&p(t.$$.fragment,i),r=!0)},o(i){t&&w(t.$$.fragment,i),r=!1},d(i){i&&M(e),t&&V(t)}}}function Ye(n){let e,t,r;var l=Ie;function o(i){return{}}return l&&(t=new l(o())),{c(){e=y("div"),t&&D(t.$$.fragment),m(e,"class","w-5")},m(i,s){z(i,e,s),t&&N(t,e,null),r=!0},p(i,s){if(l!==(l=Ie)){if(t){R();const f=t;w(f.$$.fragment,1,0,()=>{V(f,1)}),B()}l?(t=new l(o()),D(t.$$.fragment),p(t.$$.fragment,1),N(t,e,null)):t=null}},i(i){r||(t&&p(t.$$.fragment,i),r=!0)},o(i){t&&w(t.$$.fragment,i),r=!1},d(i){i&&M(e),t&&V(t)}}}function Qe(n){let e,t,r;var l=Pe;function o(i){return{}}return l&&(t=new l(o())),{c(){e=y("div"),t&&D(t.$$.fragment),m(e,"class","w-[0.9rem]")},m(i,s){z(i,e,s),t&&N(t,e,null),r=!0},p(i,s){if(l!==(l=Pe)){if(t){R();const f=t;w(f.$$.fragment,1,0,()=>{V(f,1)}),B()}l?(t=new l(o()),D(t.$$.fragment),p(t.$$.fragment,1),N(t,e,null)):t=null}},i(i){r||(t&&p(t.$$.fragment,i),r=!0)},o(i){t&&w(t.$$.fragment,i),r=!1},d(i){i&&M(e),t&&V(t)}}}function gn(n){let e,t,r,l,o,i,s,f,c,a,u,_,v,C,d,h,S,x,j,A,k,L,J,G,F,ce,ge;const ee=[dn,mn],K=[];function _e(b,q){return b[2]?0:1}l=_e(n),o=K[l]=ee[l](n);var Q=Ue;function he(b){return{}}Q&&(u=new Q(he())),S=new Me({props:{icon:qt,detail:"Salary",value:n[4],svgSize:"w-[0.8rem]"}}),j=new Me({props:{icon:Kt,detail:"Rank",value:n[5],svgSize:"w-[1.4rem]"}}),k=new Me({props:{icon:Yt,detail:"Active",value:n[7],svgSize:"w-[1.1rem]"}});let O=!n[10]&&Fe(n),H=n[10]&&Ke(n);return{c(){e=y("main"),t=y("div"),r=y("div"),o.c(),i=T(),s=y("p"),f=W(n[0]),c=T(),a=y("div"),u&&D(u.$$.fragment),_=T(),v=y("p"),C=W(n[3]),d=T(),h=y("div"),D(S.$$.fragment),x=T(),D(j.$$.fragment),A=T(),D(k.$$.fragment),L=T(),J=y("div"),O&&O.c(),G=T(),H&&H.c(),m(r,"class","w-6 text-[var(--color-green)]"),m(s,"class","text-xl tracking-wide capitalize"),m(a,"class","w-7 text-[var(--color-darkblue)] cursor-pointer ml-auto hover:text-[var(--color-orange)]"),m(t,"class","flex flex-row items-center gap-2 text-center"),m(v,"class","text-sm text-[var(--color-lightestgrey)]"),m(h,"class","job-details flex gap-[12px] justify-stretch"),m(J,"class","mt-2"),m(e,"class","job w-full flex flex-col gap-4 mb-[30px] b-rd-[10px] px-[22px] py-5 relative select-none bg-[var(--color-darkerblue)] border border-[var(--color-darkblue)]")},m(b,q){z(b,e,q),g(e,t),g(t,r),K[l].m(r,null),g(t,i),g(t,s),g(s,f),g(t,c),g(t,a),u&&N(u,a,null),g(e,_),g(e,v),g(v,C),g(e,d),g(e,h),N(S,h,null),g(h,x),N(j,h,null),g(h,A),N(k,h,null),g(e,L),g(e,J),O&&O.m(J,null),g(J,G),H&&H.m(J,null),F=!0,ce||(ge=Y(a,"click",n[28]),ce=!0)},p(b,q){let Se=l;if(l=_e(b),l===Se?K[l].p(b,q):(R(),w(K[Se],1,1,()=>{K[Se]=null}),B(),o=K[l],o?o.p(b,q):(o=K[l]=ee[l](b),o.c()),p(o,1),o.m(r,null)),(!F||q[0]&1)&&ne(f,b[0]),Q!==(Q=Ue)){if(u){R();const He=u;w(He.$$.fragment,1,0,()=>{V(He,1)}),B()}Q?(u=new Q(he()),D(u.$$.fragment),p(u.$$.fragment,1),N(u,a,null)):u=null}(!F||q[0]&8)&&ne(C,b[3]);const Je={};q[0]&16&&(Je.value=b[4]),S.$set(Je);const Ee={};q[0]&32&&(Ee.value=b[5]),j.$set(Ee);const Oe={};q[0]&128&&(Oe.value=b[7]),k.$set(Oe),b[10]?O&&(R(),w(O,1,1,()=>{O=null}),B()):O?(O.p(b,q),q[0]&1024&&p(O,1)):(O=Fe(b),O.c(),p(O,1),O.m(J,G)),b[10]?H?(H.p(b,q),q[0]&1024&&p(H,1)):(H=Ke(b),H.c(),p(H,1),H.m(J,null)):H&&(R(),w(H,1,1,()=>{H=null}),B())},i(b){F||(p(o),u&&p(u.$$.fragment,b),p(S.$$.fragment,b),p(j.$$.fragment,b),p(k.$$.fragment,b),p(O),p(H),F=!0)},o(b){w(o),u&&w(u.$$.fragment,b),w(S.$$.fragment,b),w(j.$$.fragment,b),w(k.$$.fragment,b),w(O),w(H),F=!1},d(b){b&&M(e),K[l].d(),u&&V(u),V(S),V(j),V(k),O&&O.d(),H&&H.d(),ce=!1,ge()}}}function ze(n){return n?"On Duty":"Off Duty"}function Xe(n){return n?"Selected":"Unselect"}function _n(n,e,t){let r,l,o,{name:i}=e,{nuiName:s}=e,{icon:f=""}=e,{description:c=""}=e,{salary:a}=e,{rank:u}=e,{nuiRank:_}=e,{active:v}=e,{category:C}=e;const{activeJob:d,onDuty:h,setActiveJob:S,toggleDuty:x,unSetActiveJob:j,deleteJob:A}=Le;X(n,d,b=>t(27,o=b)),X(n,h,b=>t(9,l=b));let k=!1,L=!1,J=!1,G=!1;function F(){t(16,r=ze(!l)),t(11,L=!0)}function ce(){t(16,r=ze(l)),t(11,L=!1),t(12,J=!1),t(13,G=!1)}function ge(){l?(t(13,G=!0),t(12,J=!1)):(t(12,J=!0),t(13,G=!1)),x()}let ee="selected",K=!1;function _e(){t(14,ee=Xe(!1)),t(15,K=!0)}function Q(){t(14,ee=Xe(!0)),t(15,K=!1)}function he(){j(),t(15,K=!1),t(14,ee="selected")}const O=()=>A(s,_,C),H=()=>S(s,s,_);return n.$$set=b=>{"name"in b&&t(0,i=b.name),"nuiName"in b&&t(1,s=b.nuiName),"icon"in b&&t(2,f=b.icon),"description"in b&&t(3,c=b.description),"salary"in b&&t(4,a=b.salary),"rank"in b&&t(5,u=b.rank),"nuiRank"in b&&t(6,_=b.nuiRank),"active"in b&&t(7,v=b.active),"category"in b&&t(8,C=b.category)},n.$$.update=()=>{n.$$.dirty[0]&134217730&&t(10,k=o==s),n.$$.dirty[0]&512&&t(16,r=ze(l))},[i,s,f,c,a,u,_,v,C,l,k,L,J,G,ee,K,r,d,h,S,A,F,ce,ge,_e,Q,he,o,O,H]}class hn extends I{constructor(e){super(),U(this,e,_n,gn,P,{name:0,nuiName:1,icon:2,description:3,salary:4,rank:5,nuiRank:6,active:7,category:8},null,[-1,-1])}}function Ze(n,e,t){const r=n.slice();return r[2]=e[t],r}function et(n,e){let t,r,l;return r=new hn({props:{name:e[2].label,nuiName:e[2].name,nuiRank:e[2].grade,icon:e[2].icon,description:e[2].description,salary:e[2].salary,rank:e[2].gradeLabel,active:e[2].active,category:e[1]}}),{key:n,first:null,c(){t=je(),D(r.$$.fragment),this.first=t},m(o,i){z(o,t,i),N(r,o,i),l=!0},p(o,i){e=o;const s={};i&1&&(s.name=e[2].label),i&1&&(s.nuiName=e[2].name),i&1&&(s.nuiRank=e[2].grade),i&1&&(s.icon=e[2].icon),i&1&&(s.description=e[2].description),i&1&&(s.salary=e[2].salary),i&1&&(s.rank=e[2].gradeLabel),i&1&&(s.active=e[2].active),i&2&&(s.category=e[1]),r.$set(s)},i(o){l||(p(r.$$.fragment,o),l=!0)},o(o){w(r.$$.fragment,o),l=!1},d(o){o&&M(t),V(r,o)}}}function pn(n){let e,t,r,l,o,i,s,f,c,a=[],u=new Map,_,v=n[0];const C=d=>d[2].name;for(let d=0;d{"jobArray"in o&&t(0,r=o.jobArray),"panelName"in o&&t(1,l=o.panelName)},[r,l]}class yt extends I{constructor(e){super(),U(this,e,vn,pn,P,{jobArray:0,panelName:1})}}function bn(n){let e,t,r,l,o,i,s;var f=n[0];function c(a){return{props:{color:a[1]?"var(--color-green)":"var(--color-grey)"}}}return f&&(r=new f(c(n))),{c(){e=y("div"),t=y("div"),r&&D(r.$$.fragment),m(t,"class","icon svelte-1jmblc8"),m(e,"class",l=Be("navitem w-full h-[60px] flex justify-center items-center cursor-pointer duration-200 "+(n[3]=="left"?"border-l-4 ":"border-r-4 ")+(n[1]?n[3]=="left"?"border-l-[var(--color-green)] bg-[var(--color-darkestblue)] ":"border-r-[var(--color-green)] bg-[var(--color-darkestblue)] ":n[3]=="left"?"border-l-transparent ":"border-r-transparent "))+" svelte-1jmblc8")},m(a,u){z(a,e,u),g(e,t),r&&N(r,t,null),o=!0,i||(s=Y(e,"click",n[5]),i=!0)},p(a,[u]){const _={};if(u&2&&(_.color=a[1]?"var(--color-green)":"var(--color-grey)"),f!==(f=a[0])){if(r){R();const v=r;w(v.$$.fragment,1,0,()=>{V(v,1)}),B()}f?(r=new f(c(a)),D(r.$$.fragment),p(r.$$.fragment,1),N(r,t,null)):r=null}else f&&r.$set(_);(!o||u&10&&l!==(l=Be("navitem w-full h-[60px] flex justify-center items-center cursor-pointer duration-200 "+(a[3]=="left"?"border-l-4 ":"border-r-4 ")+(a[1]?a[3]=="left"?"border-l-[var(--color-green)] bg-[var(--color-darkestblue)] ":"border-r-[var(--color-green)] bg-[var(--color-darkestblue)] ":a[3]=="left"?"border-l-transparent ":"border-r-transparent "))+" svelte-1jmblc8"))&&m(e,"class",l)},i(a){o||(r&&p(r.$$.fragment,a),o=!0)},o(a){r&&w(r.$$.fragment,a),o=!1},d(a){a&&M(e),r&&V(r),i=!1,s()}}}function wn(n,e,t){let{icon:r}=e,{isActive:l}=e,{name:o}=e,{side:i}=e;function s(c){l?le.setActive(""):le.setActive(c)}const f=()=>s(o);return n.$$set=c=>{"icon"in c&&t(0,r=c.icon),"isActive"in c&&t(1,l=c.isActive),"name"in c&&t(2,o=c.name),"side"in c&&t(3,i=c.side)},[r,l,o,i,s,f]}class yn extends I{constructor(e){super(),U(this,e,wn,bn,P,{icon:0,isActive:1,name:2,side:3})}}function tt(n,e,t){const r=n.slice();return r[5]=e[t],r}function nt(n){let e,t;return e=new yn({props:{name:n[5].name,isActive:n[5].name==n[2],icon:n[5].icon,side:n[0]}}),{c(){D(e.$$.fragment)},m(r,l){N(e,r,l),t=!0},p(r,l){const o={};l&2&&(o.name=r[5].name),l&6&&(o.isActive=r[5].name==r[2]),l&2&&(o.icon=r[5].icon),l&1&&(o.side=r[0]),e.$set(o)},i(r){t||(p(e.$$.fragment,r),t=!0)},o(r){w(e.$$.fragment,r),t=!1},d(r){V(e,r)}}}function Cn(n){let e,t,r,l,o=n[1],i=[];for(let f=0;fw(i[f],1,1,()=>{i[f]=null});return{c(){e=y("nav"),t=y("div"),r=T();for(let f=0;ft(2,l=f)),X(n,s,f=>t(1,r=f)),n.$$set=f=>{"side"in f&&t(0,o=f.side)},[o,r,l,i,s]}class Ct extends I{constructor(e){super(),U(this,e,kn,Cn,P,{side:0})}}function $n(){function n(e){switch(e.data.action){case"sendjobs":Le.receiveOpenMessage(e.data),le.setShow(!0);break;case"updatejob":Le.recieveUpdateJob(e.data);break}}Dt(()=>window.addEventListener("message",n)),Jt(()=>window.removeEventListener("message",n))}function rt(n){let e,t,r,l,o;const i=[jn,Ln],s=[];function f(c,a){return c[1]=="right"?0:1}return t=f(n),r=s[t]=i[t](n),{c(){e=y("main"),r.c(),m(e,"class",l="min-h-screen flex"+(n[1]=="right"?" justify-end ":" ")+"bg-transparent")},m(c,a){z(c,e,a),s[t].m(e,null),o=!0},p(c,a){let u=t;t=f(c),t===u?s[t].p(c,a):(R(),w(s[u],1,1,()=>{s[u]=null}),B(),r=s[t],r?r.p(c,a):(r=s[t]=i[t](c),r.c()),p(r,1),r.m(e,null)),(!o||a&2&&l!==(l="min-h-screen flex"+(c[1]=="right"?" justify-end ":" ")+"bg-transparent"))&&m(e,"class",l)},i(c){o||(p(r),o=!0)},o(c){w(r),o=!1},d(c){c&&M(e),s[t].d()}}}function Ln(n){let e,t,r,l;e=new Ct({props:{side:n[1]}});let o=n[2]!=""&<(n);return{c(){D(e.$$.fragment),t=T(),o&&o.c(),r=je()},m(i,s){N(e,i,s),z(i,t,s),o&&o.m(i,s),z(i,r,s),l=!0},p(i,s){const f={};s&2&&(f.side=i[1]),e.$set(f),i[2]!=""?o?(o.p(i,s),s&4&&p(o,1)):(o=lt(i),o.c(),p(o,1),o.m(r.parentNode,r)):o&&(R(),w(o,1,1,()=>{o=null}),B())},i(i){l||(p(e.$$.fragment,i),p(o),l=!0)},o(i){w(e.$$.fragment,i),w(o),l=!1},d(i){V(e,i),i&&M(t),o&&o.d(i),i&&M(r)}}}function jn(n){let e,t,r,l=n[2]!=""&&it(n);return t=new Ct({props:{side:n[1]}}),{c(){l&&l.c(),e=T(),D(t.$$.fragment)},m(o,i){l&&l.m(o,i),z(o,e,i),N(t,o,i),r=!0},p(o,i){o[2]!=""?l?(l.p(o,i),i&4&&p(l,1)):(l=it(o),l.c(),p(l,1),l.m(e.parentNode,e)):l&&(R(),w(l,1,1,()=>{l=null}),B());const s={};i&2&&(s.side=o[1]),t.$set(s)},i(o){r||(p(l),p(t.$$.fragment,o),r=!0)},o(o){w(l),w(t.$$.fragment,o),r=!1},d(o){l&&l.d(o),o&&M(e),V(t,o)}}}function lt(n){let e,t,r,l,o;return t=new yt({props:{jobArray:n[3][n[2]]||[],panelName:n[2]}}),{c(){e=y("div"),D(t.$$.fragment)},m(i,s){z(i,e,s),N(t,e,null),o=!0},p(i,s){const f={};s&12&&(f.jobArray=i[3][i[2]]||[]),s&4&&(f.panelName=i[2]),t.$set(f)},i(i){o||(p(t.$$.fragment,i),i&&re(()=>{l&&l.end(1),r=bt(e,ke,{x:-500,duration:500}),r.start()}),o=!0)},o(i){w(t.$$.fragment,i),r&&r.invalidate(),i&&(l=wt(e,ke,{x:-500,duration:500})),o=!1},d(i){i&&M(e),V(t),i&&l&&l.end()}}}function it(n){let e,t,r,l,o;return t=new yt({props:{jobArray:n[3][n[2]]||[],panelName:n[2]}}),{c(){e=y("div"),D(t.$$.fragment)},m(i,s){z(i,e,s),N(t,e,null),o=!0},p(i,s){const f={};s&12&&(f.jobArray=i[3][i[2]]||[]),s&4&&(f.panelName=i[2]),t.$set(f)},i(i){o||(p(t.$$.fragment,i),i&&re(()=>{l&&l.end(1),r=bt(e,ke,{x:500,duration:500}),r.start()}),o=!0)},o(i){w(t.$$.fragment,i),r&&r.invalidate(),i&&(l=wt(e,ke,{x:500,duration:500})),o=!1},d(i){i&&M(e),V(t),i&&l&&l.end()}}}function Sn(n){let e,t,r=n[0]&&rt(n);return{c(){r&&r.c(),e=je()},m(l,o){r&&r.m(l,o),z(l,e,o),t=!0},p(l,[o]){l[0]?r?(r.p(l,o),o&1&&p(r,1)):(r=rt(l),r.c(),p(r,1),r.m(e.parentNode,e)):r&&(R(),w(r,1,1,()=>{r=null}),B())},i(l){t||(p(r),t=!0)},o(l){w(r),t=!1},d(l){r&&r.d(l),l&&M(e)}}}function xn(n,e,t){let r,l,o,i;const{panelActive:s,show:f,side:c}=le;X(n,s,u=>t(2,o=u)),X(n,f,u=>t(0,r=u)),X(n,c,u=>t(1,l=u));const{jobManifest:a}=Le;return X(n,a,u=>t(3,i=u)),$n(),document.onkeyup=le.handleKeyUp,[r,l,o,i,s,f,c,a]}class Mn extends I{constructor(e){super(),U(this,e,xn,Sn,P,{})}}new Mn({target:document.getElementById("app")}); diff --git a/resources/[jobs]/ps-multijob/server/sv_main.lua b/resources/[jobs]/ps-multijob/server/sv_main.lua new file mode 100644 index 000000000..4cb5dfe53 --- /dev/null +++ b/resources/[jobs]/ps-multijob/server/sv_main.lua @@ -0,0 +1,280 @@ +local QBCore = exports['qb-core']:GetCoreObject() + +local function GetJobs(citizenid) + local p = promise.new() + MySQL.Async.fetchAll("SELECT jobdata FROM multijobs WHERE citizenid = @citizenid",{ + ["@citizenid"] = citizenid + }, function(jobs) + if jobs[1] and jobs ~= "[]" then + jobs = json.decode(jobs[1].jobdata) + else + local Player = QBCore.Functions.GetOfflinePlayerByCitizenId(citizenid) + local temp = {} + if not Config.IgnoredJobs[Player.PlayerData.job.name] then + temp[Player.PlayerData.job.name] = Player.PlayerData.job.grade.level + MySQL.insert('INSERT INTO multijobs (citizenid, jobdata) VALUES (:citizenid, :jobdata) ON DUPLICATE KEY UPDATE jobdata = :jobdata', { + citizenid = citizenid, + jobdata = json.encode(temp), + }) + end + jobs = temp + end + p:resolve(jobs) + end) + return Citizen.Await(p) +end +exports("GetJobs", GetJobs) + +local function AddJob(citizenid, job, grade) + local jobs = GetJobs(citizenid) + for ignored in pairs(Config.IgnoredJobs) do + if jobs[ignored] then + jobs[ignored] = nil + end + end + + jobs[job] = grade + MySQL.insert('INSERT INTO multijobs (citizenid, jobdata) VALUES (:citizenid, :jobdata) ON DUPLICATE KEY UPDATE jobdata = :jobdata', { + citizenid = citizenid, + jobdata = json.encode(jobs), + }) +end +exports("AddJob", AddJob) + +local function UpdatePlayerJob(Player, job, grade) + if Player.PlayerData.source ~= nil then + Player.Functions.SetJob(job,grade) + else -- player is offline + local sharedJobData = QBCore.Shared.Jobs[job] + if sharedJobData == nil then return end + + local sharedGradeData = sharedJobData.grades[grade] + if sharedGradeData == nil then return end + + local isBoss = false + if sharedGradeData.isboss then isBoss = true end + + MySQL.update.await("update players set job = @jobData where citizenid = @citizenid", { + jobData = json.encode({ + label = sharedJobData.label, + name = job, + isboss = isBoss, + onduty = sharedJobData.defaultDuty, + payment = sharedGradeData.payment, + grade = { + name = sharedGradeData.name, + level = grade, + }, + }), + citizenid = Player.PlayerData.citizenid + }) + end +end + +local function UpdateJobRank(citizenid, job, grade) + local Player = QBCore.Functions.GetOfflinePlayerByCitizenId(citizenid) + if Player == nil then + return + end + + local jobs = GetJobs(citizenid) + if jobs[job] == nil then + return + end + + jobs[job] = grade + + MySQL.update.await("update multijobs set jobdata = :jobdata where citizenid = :citizenid", { + citizenid = citizenid, + jobdata = json.encode(jobs), + }) + + -- if the current job matches, then update + if Player.PlayerData.job.name == job then + UpdatePlayerJob(Player, job, grade) + end +end +exports("UpdateJobRank", UpdateJobRank) + +local function RemoveJob(citizenid, job) + local Player = QBCore.Functions.GetPlayerByCitizenId(citizenid) + + if Player == nil then + Player = QBCore.Functions.GetOfflinePlayerByCitizenId(citizenid) + end + + if Player == nil then return end + + local jobs = GetJobs(citizenid) + jobs[job] = nil + + -- Since we removed a job, put player in a new job + local foundNewJob = false + if Player.PlayerData.job.name == job then + for k,v in pairs(jobs) do + UpdatePlayerJob(Player, k,v) + foundNewJob = true + break + end + end + + if not foundNewJob then + UpdatePlayerJob(Player, "unemployed", 0) + end + + MySQL.insert('INSERT INTO multijobs (citizenid, jobdata) VALUES (:citizenid, :jobdata) ON DUPLICATE KEY UPDATE jobdata = :jobdata', { + citizenid = citizenid, + jobdata = json.encode(jobs), + }) +end +exports("RemoveJob", RemoveJob) + +QBCore.Commands.Add('removejob', 'Remove Multi Job (Admin Only)', { { name = 'id', help = 'ID of player' }, { name = 'job', help = 'Job Name' } }, false, function(source, args) + local source = source + if source ~= 0 then + if args[1] then + local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) + if Player then + if args[2] then + RemoveJob(Player.PlayerData.citizenid, args[2]) + else + TriggerClientEvent("QBCore:Notify", source, "Wrong usage!") + end + else + TriggerClientEvent("QBCore:Notify", source, "Wrong usage!") + end + else + TriggerClientEvent("QBCore:Notify", source, "Wrong usage!") + end + else + TriggerClientEvent("QBCore:Notify", source, "Wrong usage!") + end +end, 'admin') + +QBCore.Commands.Add('addjob', 'Add Multi Job (Admin Only)', { { name = 'id', help = 'ID of player' }, { name = 'job', help = 'Job Name' }, { name = 'grade', help = 'Job Grade' } }, false, function(source, args) + local source = source + if source ~= 0 then + if args[1] then + local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) + if Player then + if args[2]and args[3] then + AddJob(Player.PlayerData.citizenid, args[2], args[3]) + else + TriggerClientEvent("QBCore:Notify", source, "Wrong usage!") + end + else + TriggerClientEvent("QBCore:Notify", source, "Wrong usage!") + end + else + TriggerClientEvent("QBCore:Notify", source, "Wrong usage!") + end + else + TriggerClientEvent("QBCore:Notify", source, "Wrong usage!") + end +end, 'admin') + +QBCore.Functions.CreateCallback("ps-multijob:getJobs", function(source, cb) + local Player = QBCore.Functions.GetPlayer(source) + local jobs = GetJobs(Player.PlayerData.citizenid) + local multijobs = {} + local whitelistedjobs = {} + local civjobs = {} + local active = {} + local getjobs = {} + local Players = QBCore.Functions.GetPlayers() + + for i = 1, #Players, 1 do + local xPlayer = QBCore.Functions.GetPlayer(Players[i]) + active[xPlayer.PlayerData.job.name] = 0 + if active[xPlayer.PlayerData.job.name] and xPlayer.PlayerData.job.onduty then + active[xPlayer.PlayerData.job.name] = active[xPlayer.PlayerData.job.name] + 1 + end + end + + for job, grade in pairs(jobs) do + if QBCore.Shared.Jobs[job] == nil then + print("The job '" .. job .. "' has been removed and is not present in your QBCore jobs. Remove it from the multijob SQL or add it back to your qbcore jobs.lua.") + else + local online = active[job] or 0 + getjobs = { + name = job, + grade = grade, + description = Config.Descriptions[job], + icon = Config.FontAwesomeIcons[job], + label = QBCore.Shared.Jobs[job].label, + gradeLabel = QBCore.Shared.Jobs[job].grades[tostring(grade)].name, + salary = QBCore.Shared.Jobs[job].grades[tostring(grade)].payment, + active = online, + } + if Config.WhitelistJobs[job] then + whitelistedjobs[#whitelistedjobs+1] = getjobs + else + civjobs[#civjobs+1] = getjobs + end + end + end + + multijobs = { + whitelist = whitelistedjobs, + civilian = civjobs, + } + cb(multijobs) +end) + +RegisterNetEvent("ps-multijob:changeJob",function(cjob, cgrade) + local source = source + local Player = QBCore.Functions.GetPlayer(source) + + if cjob == "unemployed" and cgrade == 0 then + Player.Functions.SetJob(cjob, cgrade) + return + end + + local jobs = GetJobs(Player.PlayerData.citizenid) + for job, grade in pairs(jobs) do + if cjob == job and cgrade == grade then + Player.Functions.SetJob(job, grade) + end + end +end) + +RegisterNetEvent("ps-multijob:removeJob",function(job, grade) + local source = source + local Player = QBCore.Functions.GetPlayer(source) + RemoveJob(Player.PlayerData.citizenid, job) +end) + +-- QBCORE EVENTS + +RegisterNetEvent('ps-multijob:server:removeJob', function(targetCitizenId) + MySQL.Async.execute('DELETE FROM multijobs WHERE citizenid = ?', { targetCitizenId }, function(affectedRows) + if affectedRows > 0 then + print('Removed job: ' .. targetCitizenId) + else + print('Cannot remove job: ' .. targetCitizenId) + end + end) +end) + +RegisterNetEvent('QBCore:Server:OnJobUpdate', function(source, newJob) + local source = source + local Player = QBCore.Functions.GetPlayer(source) + local jobs = GetJobs(Player.PlayerData.citizenid) + local amount = 0 + local setjob = newJob + for k,v in pairs(jobs) do + amount = amount + 1 + end + + local maxJobs = Config.MaxJobs + if QBCore.Functions.HasPermission(source, "admin") then + maxJobs = math.huge + end + + if amount < maxJobs and not Config.IgnoredJobs[setjob.name] then + local foundOldJob = jobs[setjob.name] + if not foundOldJob or foundOldJob ~= setjob.grade.level then + AddJob(Player.PlayerData.citizenid, setjob.name, setjob.grade.level) + end + end +end) diff --git a/resources/[jobs]/ps-multijob/svelte-source/.gitignore b/resources/[jobs]/ps-multijob/svelte-source/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/.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 +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/resources/[jobs]/ps-multijob/svelte-source/.vscode/extensions.json b/resources/[jobs]/ps-multijob/svelte-source/.vscode/extensions.json new file mode 100644 index 000000000..bdef82015 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["svelte.svelte-vscode"] +} diff --git a/resources/[jobs]/ps-multijob/svelte-source/global.css b/resources/[jobs]/ps-multijob/svelte-source/global.css new file mode 100644 index 000000000..4ed4b0e1d --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/global.css @@ -0,0 +1,34 @@ +* { + margin: 0; + padding: 0; +} + +html, +body { + height: 100%; + width: 100%; + font-family: 'Roboto', sans-serif; + overflow: hidden; +} + +:root { + --color-green: #02f1b5; + --color-orange: #ff4545; + --color-darkestblue: #131121; + --color-darkerblue: #222033; + --color-darkblue: #424057; + --color-white: #ffffff; + --color-black: #000000; + --color-lightestgrey: #dadada; + --color-lightgrey: #cacaca; + --color-grey: #797979; + --font-color: rgba(var(--theme-white), 0.87); +} + +::-webkit-scrollbar { + width: 5px; +} +::-webkit-scrollbar-thumb { + border-radius: 2px; + background-color: rgba(60, 60, 60, 1); +} \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/index.html b/resources/[jobs]/ps-multijob/svelte-source/index.html new file mode 100644 index 000000000..130c84d3d --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/index.html @@ -0,0 +1,26 @@ + + + + + + PS-MultiJob + + + + + + + +
+ + + diff --git a/resources/[jobs]/ps-multijob/svelte-source/package.json b/resources/[jobs]/ps-multijob/svelte-source/package.json new file mode 100644 index 000000000..dbbab3671 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/package.json @@ -0,0 +1,34 @@ +{ + "name": "svelte-source", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite --host", + "build": "pnpm check && vite build", + "preview": "vite preview --host", + "check": "svelte-check --tsconfig ./tsconfig.json", + "test": "vitest", + "test:ui": "vitest --ui", + "coverage": "vitest run --coverage" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^1.0.1", + "@testing-library/svelte": "^3.1.3", + "@tsconfig/svelte": "^2.0.1", + "@unocss/preset-uno": "^0.44.5", + "@unocss/reset": "^0.44.5", + "html-minifier": "^4.0.0", + "jsdom": "^20.0.0", + "sass": "^1.54.9", + "svelte": "^3.49.0", + "svelte-check": "^2.8.0", + "svelte-preprocess": "^4.10.7", + "tslib": "^2.4.0", + "typescript": "^4.7.4", + "unocss": "^0.44.5", + "vite": ">=3.2.7", + "vite-plugin-windicss": "^1.8.7", + "vitest": "^0.18.1" + } +} diff --git a/resources/[jobs]/ps-multijob/svelte-source/pnpm-lock.yaml b/resources/[jobs]/ps-multijob/svelte-source/pnpm-lock.yaml new file mode 100644 index 000000000..40619d7a6 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/pnpm-lock.yaml @@ -0,0 +1,2180 @@ +lockfileVersion: 5.4 + +specifiers: + '@sveltejs/vite-plugin-svelte': ^1.0.1 + '@testing-library/svelte': ^3.1.3 + '@tsconfig/svelte': ^2.0.1 + '@unocss/preset-uno': ^0.44.5 + '@unocss/reset': ^0.44.5 + html-minifier: ^4.0.0 + jsdom: ^20.0.0 + sass: ^1.54.9 + svelte: ^3.49.0 + svelte-check: ^2.8.0 + svelte-preprocess: ^4.10.7 + tslib: ^2.4.0 + typescript: ^4.7.4 + unocss: ^0.44.5 + vite: 3.0.2 + vite-plugin-windicss: ^1.8.7 + vitest: ^0.18.1 + +devDependencies: + '@sveltejs/vite-plugin-svelte': 1.0.1_svelte@3.49.0+vite@3.0.2 + '@testing-library/svelte': 3.1.3_svelte@3.49.0 + '@tsconfig/svelte': 2.0.1 + '@unocss/preset-uno': 0.44.5 + '@unocss/reset': 0.44.5 + html-minifier: 4.0.0 + jsdom: 20.0.0 + sass: 1.54.9 + svelte: 3.49.0 + svelte-check: 2.8.0_sass@1.54.9+svelte@3.49.0 + svelte-preprocess: 4.10.7_mq6t4sd6nugfwpodxgp37cbwt4 + tslib: 2.4.0 + typescript: 4.7.4 + unocss: 0.44.5_vite@3.0.2 + vite: 3.0.2_sass@1.54.9 + vite-plugin-windicss: 1.8.7_vite@3.0.2 + vitest: 0.18.1_jsdom@20.0.0+sass@1.54.9 + +packages: + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.14 + dev: true + + /@antfu/install-pkg/0.1.0: + resolution: {integrity: sha512-VaIJd3d1o7irZfK1U0nvBsHMyjkuyMP3HKYVV53z8DKyulkHKmjhhtccXO51WSPeeSHIeoJEoNOKavYpS7jkZw==} + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + dev: true + + /@antfu/utils/0.5.2: + resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==} + dev: true + + /@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: true + + /@babel/helper-validator-identifier/7.18.6: + resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.18.6 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/runtime/7.18.9: + resolution: {integrity: sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.9 + dev: true + + /@iconify/types/1.1.0: + resolution: {integrity: sha512-Jh0llaK2LRXQoYsorIH8maClebsnzTcve+7U3rQUSnC11X4jtPnFuyatqFLvMxZ8MLG8dB4zfHsbPfuvxluONw==} + dev: true + + /@iconify/utils/1.0.33: + resolution: {integrity: sha512-vGeAqo7aGPxOQmGdVoXFUOuyN+0V7Lcrx2EvaiRjxUD1x6Om0Tvq2bdm7E24l2Pz++4S0mWMCVFXe/17EtKImQ==} + dependencies: + '@antfu/install-pkg': 0.1.0 + '@antfu/utils': 0.5.2 + '@iconify/types': 1.1.0 + debug: 4.3.4 + kolorist: 1.5.1 + local-pkg: 0.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/trace-mapping/0.3.14: + resolution: {integrity: sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@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.13.0 + dev: true + + /@polka/url/1.0.0-next.21: + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + dev: true + + /@rollup/pluginutils/4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@sveltejs/vite-plugin-svelte/1.0.1_svelte@3.49.0+vite@3.0.2: + resolution: {integrity: sha512-PorCgUounn0VXcpeJu+hOweZODKmGuLHsLomwqSj+p26IwjjGffmYQfVHtiTWq+NqaUuuHWWG7vPge6UFw4Aeg==} + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + diff-match-patch: ^1.0.5 + svelte: ^3.44.0 + vite: ^3.0.0 + peerDependenciesMeta: + diff-match-patch: + optional: true + dependencies: + '@rollup/pluginutils': 4.2.1 + debug: 4.3.4 + deepmerge: 4.2.2 + kleur: 4.1.5 + magic-string: 0.26.2 + svelte: 3.49.0 + svelte-hmr: 0.14.12_svelte@3.49.0 + vite: 3.0.2_sass@1.54.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@testing-library/dom/8.16.0: + resolution: {integrity: sha512-uxF4zmnLHHDlmW4l+0WDjcgLVwCvH+OVLpD8Dfp+Bjfz85prwxWGbwXgJdLtkgjD0qfOzkJF9SmA6YZPsMYX4w==} + engines: {node: '>=12'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/runtime': 7.18.9 + '@types/aria-query': 4.2.2 + aria-query: 5.0.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.14 + lz-string: 1.4.4 + pretty-format: 27.5.1 + dev: true + + /@testing-library/svelte/3.1.3_svelte@3.49.0: + resolution: {integrity: sha512-pyed3yMnTu7wG9Z4XKoIxdrx52hSEFDC8qUaiSsiSh8tBVj3ZjqEKnV2Nfc0IF2llEkT0B7QOXnOVTLJ3O5RCw==} + engines: {node: '>= 10'} + peerDependencies: + svelte: 3.x + dependencies: + '@testing-library/dom': 8.16.0 + svelte: 3.49.0 + dev: true + + /@tootallnate/once/2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + dev: true + + /@tsconfig/svelte/2.0.1: + resolution: {integrity: sha512-aqkICXbM1oX5FfgZd2qSSAGdyo/NRxjWCamxoyi3T8iVQnzGge19HhDYzZ6NrVOW7bhcWNSq9XexWFtMzbB24A==} + dev: true + + /@types/aria-query/4.2.2: + resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==} + dev: true + + /@types/chai-subset/1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + dependencies: + '@types/chai': 4.3.1 + dev: true + + /@types/chai/4.3.1: + resolution: {integrity: sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==} + dev: true + + /@types/node/18.0.6: + resolution: {integrity: sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==} + dev: true + + /@types/pug/2.0.6: + resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} + dev: true + + /@types/sass/1.43.1: + resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==} + dependencies: + '@types/node': 18.0.6 + dev: true + + /@unocss/cli/0.44.5: + resolution: {integrity: sha512-ll2UYzPAVw0NzArIoHauF5SeAnjFiktYTBF/V9UozoMCQM0BXihb3nfzWU4JSXo8V5vAeKIiJZvF/JGHd01C4A==} + engines: {node: '>=14'} + hasBin: true + dependencies: + '@unocss/config': 0.44.5 + '@unocss/core': 0.44.5 + '@unocss/preset-uno': 0.44.5 + cac: 6.7.12 + chokidar: 3.5.3 + colorette: 2.0.19 + consola: 2.15.3 + fast-glob: 3.2.11 + pathe: 0.3.2 + perfect-debounce: 0.1.3 + dev: true + + /@unocss/config/0.44.5: + resolution: {integrity: sha512-QDJkE+vIHehspQSlQtiXlJ/pIE+rg2QTULCbcgCDtYMQ3t2WF4ET/jQdshCxTDo6qJD0SrqZe5AvAjsYS6vKwA==} + engines: {node: '>=14'} + dependencies: + '@unocss/core': 0.44.5 + unconfig: 0.3.5 + dev: true + + /@unocss/core/0.44.5: + resolution: {integrity: sha512-IxFg0b0Exudko5akYLA4kfdv2MNYpQlgrB33N+UcHb8z0eGENBStq/ZKjwneplHV9RiSOM4d7nPYkK7Id1RgPA==} + dev: true + + /@unocss/inspector/0.44.5: + resolution: {integrity: sha512-Yd1adLO5WKQ9HCZGoY4KmV6R9kJl8/HM3bO7bIZbVfmVpfQg0k0f5ZaE2Jy6k1fuLw62EtpYQFWAZmkOF0mw7A==} + dependencies: + gzip-size: 6.0.0 + sirv: 2.0.2 + dev: true + + /@unocss/preset-attributify/0.44.5: + resolution: {integrity: sha512-TrTAcV6QaSVb6Xwbk36mxeJsKR7VUeDLYTM+3gruQKZRpZZDsxKMXbMoVLhCbecj/g0fvQxjI1ETRDDxg/gkjg==} + dependencies: + '@unocss/core': 0.44.5 + dev: true + + /@unocss/preset-icons/0.44.5: + resolution: {integrity: sha512-DJKHb9he09jqOnQ3pNUvBNt9gA+daQhnHptIBVYFVJyd4jnJSNgKRhQJNoGCb/gLnDZhg7tH+ggY5B0XnUvVvA==} + dependencies: + '@iconify/utils': 1.0.33 + '@unocss/core': 0.44.5 + ohmyfetch: 0.4.18 + transitivePeerDependencies: + - supports-color + dev: true + + /@unocss/preset-mini/0.44.5: + resolution: {integrity: sha512-eHBksxUzTaopNlDGKrAbQzuRPs7/F7U608gMQcHj1lN9uO4o1tYMzbGSj41vmAMVfnzd6kmS9kuFLQVO01J3aQ==} + dependencies: + '@unocss/core': 0.44.5 + dev: true + + /@unocss/preset-tagify/0.44.5: + resolution: {integrity: sha512-wSVWI45BNiBazCQULO0cuz7neevtlpU8q/IsRXw9d5402G9PSGajn5HfW3WCSuRvoXGTlBJ57rbbLP2s4R/H3g==} + dependencies: + '@unocss/core': 0.44.5 + dev: true + + /@unocss/preset-typography/0.44.5: + resolution: {integrity: sha512-ialH29y28qtRcNTJgsbD0YZc27cihA26vUh3aZQ9BkPp9j9M9F+DWOt8HnYcnf9iVmdS+6QTB+aMGEJ7Wd1qBg==} + dependencies: + '@unocss/core': 0.44.5 + dev: true + + /@unocss/preset-uno/0.44.5: + resolution: {integrity: sha512-1uMKiWVu3GTrCywKdX96f7kqcCkX5H7bW71aD8knOx/z6mY9ZD+e5mNyvIuYYZupBIx0Qfmh6t0T2wpI/nwTVg==} + dependencies: + '@unocss/core': 0.44.5 + '@unocss/preset-mini': 0.44.5 + '@unocss/preset-wind': 0.44.5 + dev: true + + /@unocss/preset-web-fonts/0.44.5: + resolution: {integrity: sha512-AgR8LNpP/cQIU6POMmDAnSjJWX17VLOH07HPxxF6f/hCg21ZSx1QmAV8ol68JW097d/fxF+jh85sCrTxb85ZGQ==} + dependencies: + '@unocss/core': 0.44.5 + ohmyfetch: 0.4.18 + dev: true + + /@unocss/preset-wind/0.44.5: + resolution: {integrity: sha512-CB9lE8s+EkgPxDUdfJC2VGcefphH2HFD3A2RAFJWUvYPecaRgpHfElx5pDRMYOUHtBhZZJwWrwOCt7qXNqsBFw==} + dependencies: + '@unocss/core': 0.44.5 + '@unocss/preset-mini': 0.44.5 + dev: true + + /@unocss/reset/0.44.5: + resolution: {integrity: sha512-ZNe86u7BpzCT/5P3S49sFxLucBlfW0ir6oRqmOZe4uhN02puqFUK1L7c0dkoXTVhETxESmWaxBM5GTmbifGeZg==} + dev: true + + /@unocss/scope/0.44.5: + resolution: {integrity: sha512-4x1MzeDldF257obQHnQ0F3AgkrAuoAFbWGfWgJ55rJM65MnQXEkyktmSxiArQlptwQaGzj9xwzEVMEnVVMhhsg==} + dev: true + + /@unocss/transformer-compile-class/0.44.5: + resolution: {integrity: sha512-kvC8/INiXdOkTKfNt73oTlG5tsTNf06aYhVzBUzoP5IYIZz18dRIpgXJ6xOEXkhJrat458G23UhBPqo9oRK3Fg==} + dependencies: + '@unocss/core': 0.44.5 + dev: true + + /@unocss/transformer-directives/0.44.5: + resolution: {integrity: sha512-uLHn0u0c65nGDy5UY7GCDfN/XqzPWbzEtQAp3LOTGTB7iLvuPF7GAzwQIrMINJG41SccDSqT54qmKLJW+gpmlg==} + dependencies: + '@unocss/core': 0.44.5 + css-tree: 2.1.0 + dev: true + + /@unocss/transformer-variant-group/0.44.5: + resolution: {integrity: sha512-rAf6hpnpPgJHBP4r7UJzF8h2HIY1Gh+l+9w1f3mHdzdY9/T0a6R5vywi/QcZPFUyobeu3v4RDtg8B9SGv219Ew==} + dependencies: + '@unocss/core': 0.44.5 + dev: true + + /@unocss/vite/0.44.5_vite@3.0.2: + resolution: {integrity: sha512-HAA77Z+CTHWCjtbgupolsLhRrGuYH4C+FbmfVwTgm07ttWFZy5QaWKRU0mcR53/n1owPxkZilPxWCWX7ltscbw==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 + dependencies: + '@ampproject/remapping': 2.2.0 + '@rollup/pluginutils': 4.2.1 + '@unocss/config': 0.44.5 + '@unocss/core': 0.44.5 + '@unocss/inspector': 0.44.5 + '@unocss/scope': 0.44.5 + '@unocss/transformer-directives': 0.44.5 + magic-string: 0.26.2 + vite: 3.0.2_sass@1.54.9 + dev: true + + /@windicss/config/1.8.7: + resolution: {integrity: sha512-8n+/Y36j5L3rw2tgMdLjeGRuNV7VYfKoHoraLK6Bk9OJ1MTPd5vv7pekof/uOPWVV7WWjVeZ6CTO8SDbDDW3iw==} + dependencies: + debug: 4.3.4 + jiti: 1.14.0 + windicss: 3.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@windicss/plugin-utils/1.8.7: + resolution: {integrity: sha512-dfj95olNZyGFDPFMBvE5oq8hA5f0ooUJZjVdWlthS4ek4W1/xNOHDxB6ygWR8LE9zCOXZykApjt1LOhy9Ky2QA==} + dependencies: + '@antfu/utils': 0.5.2 + '@windicss/config': 1.8.7 + debug: 4.3.4 + fast-glob: 3.2.11 + magic-string: 0.26.2 + micromatch: 4.0.5 + windicss: 3.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /abab/2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + dev: true + + /acorn-globals/6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + dev: true + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn/8.7.1: + resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + 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/5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /aria-query/5.0.0: + resolution: {integrity: sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==} + engines: {node: '>=6.0'} + dev: true + + /assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + 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 + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browser-process-hrtime/1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + dev: true + + /buffer-crc32/0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + + /cac/6.7.12: + resolution: {integrity: sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==} + engines: {node: '>=8'} + dev: true + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case/3.0.0: + resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + + /chai/4.3.6: + resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 3.0.1 + get-func-name: 2.0.0 + loupe: 2.3.4 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /check-error/1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + 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.2 + dev: true + + /clean-css/4.2.4: + resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} + engines: {node: '>= 4.0'} + dependencies: + source-map: 0.6.1 + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /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.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /colorette/2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: true + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /consola/2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + 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.1.0: + resolution: {integrity: sha512-PcysZRzToBbrpoUrZ9qfblRIRf8zbEAkU0AIpQFtgkFK0vSbzOmBCvdSAx2Zg7Xx5wiYJKUKk0NMP7kxevie/A==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + mdn-data: 2.0.27 + source-map-js: 1.0.2 + dev: true + + /cssom/0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: true + + /cssom/0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + dev: true + + /cssstyle/2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + dev: true + + /data-urls/3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + dev: true + + /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 + + /decimal.js/10.3.1: + resolution: {integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==} + dev: true + + /deep-eql/3.0.1: + resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} + engines: {node: '>=0.12'} + dependencies: + type-detect: 4.0.8 + dev: true + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deepmerge/4.2.2: + resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + engines: {node: '>=0.10.0'} + dev: true + + /defu/6.0.0: + resolution: {integrity: sha512-t2MZGLf1V2rV4VBZbWIaXKdX/mUcYW0n2znQZoADBkGGxYL8EWqCuCZBmJPJ/Yy9fofJkyuuSuo5GSwo0XdEgw==} + dev: true + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + + /destr/1.1.1: + resolution: {integrity: sha512-QqkneF8LrYmwATMdnuD2MLI3GHQIcBnG6qFC2q9bSH430VTCDAVjcspPmUaKhPGtAtPAftIUFqY1obQYQuwmbg==} + dev: true + + /detect-indent/6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /dom-accessibility-api/0.5.14: + resolution: {integrity: sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==} + dev: true + + /domexception/4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + dependencies: + webidl-conversions: 7.0.0 + dev: true + + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + + /entities/4.3.1: + resolution: {integrity: sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==} + engines: {node: '>=0.12'} + dev: true + + /es6-promise/3.3.1: + resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} + dev: true + + /esbuild-android-64/0.14.49: + resolution: {integrity: sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.14.49: + resolution: {integrity: sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.14.49: + resolution: {integrity: sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.14.49: + resolution: {integrity: sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.14.49: + resolution: {integrity: sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.14.49: + resolution: {integrity: sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.14.49: + resolution: {integrity: sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.14.49: + resolution: {integrity: sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.14.49: + resolution: {integrity: sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.14.49: + resolution: {integrity: sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.14.49: + resolution: {integrity: sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.14.49: + resolution: {integrity: sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.14.49: + resolution: {integrity: sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.14.49: + resolution: {integrity: sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.14.49: + resolution: {integrity: sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.14.49: + resolution: {integrity: sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.14.49: + resolution: {integrity: sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.14.49: + resolution: {integrity: sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.14.49: + resolution: {integrity: sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.14.49: + resolution: {integrity: sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.14.49: + resolution: {integrity: sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + esbuild-android-64: 0.14.49 + esbuild-android-arm64: 0.14.49 + esbuild-darwin-64: 0.14.49 + esbuild-darwin-arm64: 0.14.49 + esbuild-freebsd-64: 0.14.49 + esbuild-freebsd-arm64: 0.14.49 + esbuild-linux-32: 0.14.49 + esbuild-linux-64: 0.14.49 + esbuild-linux-arm: 0.14.49 + esbuild-linux-arm64: 0.14.49 + esbuild-linux-mips64le: 0.14.49 + esbuild-linux-ppc64le: 0.14.49 + esbuild-linux-riscv64: 0.14.49 + esbuild-linux-s390x: 0.14.49 + esbuild-netbsd-64: 0.14.49 + esbuild-openbsd-64: 0.14.49 + esbuild-sunos-64: 0.14.49 + esbuild-windows-32: 0.14.49 + esbuild-windows-64: 0.14.49 + esbuild-windows-arm64: 0.14.49 + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escodegen/2.0.0: + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + + /esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /execa/5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /fast-glob/3.2.11: + resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + 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 + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + 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 + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /form-data/4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /get-func-name/2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + dev: true + + /get-stream/6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + 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/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.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + + /gzip-size/6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /html-encoding-sniffer/3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + dependencies: + whatwg-encoding: 2.0.0 + dev: true + + /html-minifier/4.0.0: + resolution: {integrity: sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==} + engines: {node: '>=6'} + hasBin: true + dependencies: + camel-case: 3.0.0 + clean-css: 4.2.4 + commander: 2.20.3 + he: 1.2.0 + param-case: 2.1.1 + relateurl: 0.2.7 + uglify-js: 3.16.2 + dev: true + + /http-proxy-agent/5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent/5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /immutable/4.1.0: + resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==} + dev: true + + /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 + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-core-module/2.9.0: + resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} + dependencies: + has: 1.0.3 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + 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-potential-custom-element-name/1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true + + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /jiti/1.14.0: + resolution: {integrity: sha512-4IwstlaKQc9vCTC+qUXLM1hajy2ImiL9KnLvVYiaHOtS/v3wRjhLlGl121AmgDgx/O43uKmxownJghS5XMya2A==} + hasBin: true + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /jsdom/20.0.0: + resolution: {integrity: sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.7.1 + acorn-globals: 6.0.0 + cssom: 0.5.0 + cssstyle: 2.3.0 + data-urls: 3.0.2 + decimal.js: 10.3.1 + domexception: 4.0.0 + escodegen: 2.0.0 + form-data: 4.0.0 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.1 + parse5: 7.0.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.0.0 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 3.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + ws: 8.8.1 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /kleur/4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + + /kolorist/1.5.1: + resolution: {integrity: sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==} + dev: true + + /levn/0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: true + + /local-pkg/0.4.2: + resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} + engines: {node: '>=14'} + dev: true + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /loupe/2.3.4: + resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} + dependencies: + get-func-name: 2.0.0 + dev: true + + /lower-case/1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + dev: true + + /lz-string/1.4.4: + resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} + hasBin: true + dev: true + + /magic-string/0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /magic-string/0.26.2: + resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /mdn-data/2.0.27: + resolution: {integrity: sha512-kwqO0I0jtWr25KcfLm9pia8vLZ8qoAKhWZuZMbneJq3jjBD3gl5nZs8l8Tu3ZBlBAHVQtDur9rdDGyvtfVraHQ==} + dev: true + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /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 + + /mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types/2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + 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 + + /minimist/1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + dev: true + + /mkdirp/0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.6 + dev: true + + /mri/1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: true + + /mrmime/1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /no-case/2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + dependencies: + lower-case: 1.1.4 + dev: true + + /node-fetch-native/0.1.4: + resolution: {integrity: sha512-10EKpOCQPXwZVFh3U1ptOMWBgKTbsN7Vvo6WVKt5pw4hp8zbv6ZVBZPlXw+5M6Tyi1oc1iD4/sNPd71KYA16tQ==} + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /nwsapi/2.2.1: + resolution: {integrity: sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==} + dev: true + + /ohmyfetch/0.4.18: + resolution: {integrity: sha512-MslzNrQzBLtZHmiZBI8QMOcMpdNFlK61OJ34nFNFynZ4v+4BonfCQ7VIN4EGXvGGq5zhDzgdJoY3o9S1l2T7KQ==} + dependencies: + destr: 1.1.1 + node-fetch-native: 0.1.4 + ufo: 0.8.5 + undici: 5.8.0 + dev: true + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /optionator/0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.3 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /param-case/2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + dependencies: + no-case: 2.3.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 + + /parse5/7.0.0: + resolution: {integrity: sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==} + dependencies: + entities: 4.3.1 + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + 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 + + /pathe/0.3.2: + resolution: {integrity: sha512-qhnmX0TOqlCvdWWTkoM83wh5J8fZ2yhbDEc9MlsnAEtEc+JCwxUKEwmd6pkY9hRe6JR1Uecbc14VcAKX2yFSTA==} + dev: true + + /pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /perfect-debounce/0.1.3: + resolution: {integrity: sha512-NOT9AcKiDGpnV/HBhI22Str++XWcErO/bALvHCuhv33owZW/CjH8KAFLZDCmu3727sihe0wTxpDhyGc6M8qacQ==} + dev: true + + /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'} + dev: true + + /postcss/8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /prelude-ls/1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: true + + /pretty-format/27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: true + + /psl/1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true + + /punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /react-is/17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /regenerator-runtime/0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} + dev: true + + /relateurl/0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.9.0 + 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/2.77.0: + resolution: {integrity: sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /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: true + + /sander/0.5.1: + resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} + dependencies: + es6-promise: 3.3.1 + graceful-fs: 4.2.10 + mkdirp: 0.5.6 + rimraf: 2.7.1 + dev: true + + /sass/1.54.9: + resolution: {integrity: sha512-xb1hjASzEH+0L0WI9oFjqhRi51t/gagWnxLiwUNMltA0Ab6jIDkAacgKiGYKM9Jhy109osM7woEEai6SXeJo5Q==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.1.0 + source-map-js: 1.0.2 + dev: true + + /saxes/6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + dependencies: + xmlchars: 2.2.0 + 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/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /sirv/2.0.2: + resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.21 + mrmime: 1.0.1 + totalist: 3.0.0 + dev: true + + /sorcery/0.10.0: + resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==} + hasBin: true + dependencies: + buffer-crc32: 0.2.13 + minimist: 1.2.6 + sander: 0.5.1 + sourcemap-codec: 1.4.8 + dev: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + 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 + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /svelte-check/2.8.0_sass@1.54.9+svelte@3.49.0: + resolution: {integrity: sha512-HRL66BxffMAZusqe5I5k26mRWQ+BobGd9Rxm3onh7ZVu0nTk8YTKJ9vu3LVPjUGLU9IX7zS+jmwPVhJYdXJ8vg==} + hasBin: true + peerDependencies: + svelte: ^3.24.0 + dependencies: + '@jridgewell/trace-mapping': 0.3.14 + chokidar: 3.5.3 + fast-glob: 3.2.11 + import-fresh: 3.3.0 + picocolors: 1.0.0 + sade: 1.8.1 + svelte: 3.49.0 + svelte-preprocess: 4.10.7_mq6t4sd6nugfwpodxgp37cbwt4 + typescript: 4.7.4 + transitivePeerDependencies: + - '@babel/core' + - coffeescript + - less + - node-sass + - postcss + - postcss-load-config + - pug + - sass + - stylus + - sugarss + dev: true + + /svelte-hmr/0.14.12_svelte@3.49.0: + resolution: {integrity: sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} + peerDependencies: + svelte: '>=3.19.0' + dependencies: + svelte: 3.49.0 + dev: true + + /svelte-preprocess/4.10.7_mq6t4sd6nugfwpodxgp37cbwt4: + resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} + engines: {node: '>= 9.11.2'} + requiresBuild: true + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 || ^4.0.0 + node-sass: '*' + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.55.0 + sugarss: ^2.0.0 + svelte: ^3.23.0 + typescript: ^3.9.5 || ^4.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + node-sass: + 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.6 + '@types/sass': 1.43.1 + detect-indent: 6.1.0 + magic-string: 0.25.9 + sass: 1.54.9 + sorcery: 0.10.0 + strip-indent: 3.0.0 + svelte: 3.49.0 + typescript: 4.7.4 + dev: true + + /svelte/3.49.0: + resolution: {integrity: sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==} + engines: {node: '>= 8'} + dev: true + + /symbol-tree/3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true + + /tinypool/0.2.4: + resolution: {integrity: sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy/1.0.0: + resolution: {integrity: sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==} + engines: {node: '>=14.0.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 + + /totalist/3.0.0: + resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} + engines: {node: '>=6'} + dev: true + + /tough-cookie/4.0.0: + resolution: {integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.1.1 + universalify: 0.1.2 + dev: true + + /tr46/3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + dependencies: + punycode: 2.1.1 + dev: true + + /tslib/2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: true + + /type-check/0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: true + + /type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /typescript/4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /ufo/0.8.5: + resolution: {integrity: sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA==} + dev: true + + /uglify-js/3.16.2: + resolution: {integrity: sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg==} + engines: {node: '>=0.8.0'} + hasBin: true + dev: true + + /unconfig/0.3.5: + resolution: {integrity: sha512-YMnPPUSfW0pT4Zzy4inM8tRHJZmhH+KcuFW/3qxkLKPhswEw18gQYe1jt57jY6ctFB0fnpiCpQ2Jtkbg4y/IPA==} + dependencies: + '@antfu/utils': 0.5.2 + defu: 6.0.0 + jiti: 1.14.0 + dev: true + + /undici/5.8.0: + resolution: {integrity: sha512-1F7Vtcez5w/LwH2G2tGnFIihuWUlc58YidwLiCv+jR2Z50x0tNXpRRw7eOIJ+GvqCqIkg9SB7NWAJ/T9TLfv8Q==} + engines: {node: '>=12.18'} + dev: true + + /universalify/0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + + /unocss/0.44.5_vite@3.0.2: + resolution: {integrity: sha512-slSEH4P30XxT1QKbV3OYOpzSrEYfl4KmpibijhPNEIr0yW5V3yDTlTq1J+OQeCuY8G1rEO7bTggp4TORwt2zNA==} + engines: {node: '>=14'} + peerDependencies: + '@unocss/webpack': 0.44.5 + peerDependenciesMeta: + '@unocss/webpack': + optional: true + dependencies: + '@unocss/cli': 0.44.5 + '@unocss/core': 0.44.5 + '@unocss/preset-attributify': 0.44.5 + '@unocss/preset-icons': 0.44.5 + '@unocss/preset-mini': 0.44.5 + '@unocss/preset-tagify': 0.44.5 + '@unocss/preset-typography': 0.44.5 + '@unocss/preset-uno': 0.44.5 + '@unocss/preset-web-fonts': 0.44.5 + '@unocss/preset-wind': 0.44.5 + '@unocss/reset': 0.44.5 + '@unocss/transformer-compile-class': 0.44.5 + '@unocss/transformer-directives': 0.44.5 + '@unocss/transformer-variant-group': 0.44.5 + '@unocss/vite': 0.44.5_vite@3.0.2 + transitivePeerDependencies: + - supports-color + - vite + dev: true + + /upper-case/1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + dev: true + + /vite-plugin-windicss/1.8.7_vite@3.0.2: + resolution: {integrity: sha512-/zwQ8+RV+MSkbG0IGqsEma6r2R01NzN/aNpNjJD7VVAkxAptNznqDXOObFTskkWfZ+9m6KJZCOuCPgAFtQIzEA==} + peerDependencies: + vite: ^2.0.1 || ^3.0.0 + dependencies: + '@windicss/plugin-utils': 1.8.7 + debug: 4.3.4 + kolorist: 1.5.1 + vite: 3.0.2_sass@1.54.9 + windicss: 3.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /vite/3.0.2_sass@1.54.9: + resolution: {integrity: sha512-TAqydxW/w0U5AoL5AsD9DApTvGb2iNbGs3sN4u2VdT1GFkQVUfgUldt+t08TZgi23uIauh1TUOQJALduo9GXqw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + terser: ^5.4.0 + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.14.49 + postcss: 8.4.14 + resolve: 1.22.1 + rollup: 2.77.0 + sass: 1.54.9 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vitest/0.18.1_jsdom@20.0.0+sass@1.54.9: + resolution: {integrity: sha512-4F/1K/Vn4AvJwe7i2YblR02PT5vMKcw9KN4unDq2KD0YcSxX0B/6D6Qu9PJaXwVuxXMFTQ5ovd4+CQaW3bwofA==} + engines: {node: '>=v14.16.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/ui': '*' + c8: '*' + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/ui': + optional: true + c8: + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/chai': 4.3.1 + '@types/chai-subset': 1.3.3 + '@types/node': 18.0.6 + chai: 4.3.6 + debug: 4.3.4 + jsdom: 20.0.0 + local-pkg: 0.4.2 + tinypool: 0.2.4 + tinyspy: 1.0.0 + vite: 3.0.2_sass@1.54.9 + transitivePeerDependencies: + - less + - sass + - stylus + - supports-color + - terser + dev: true + + /w3c-hr-time/1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + dependencies: + browser-process-hrtime: 1.0.0 + dev: true + + /w3c-xmlserializer/3.0.0: + resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} + engines: {node: '>=12'} + dependencies: + xml-name-validator: 4.0.0 + dev: true + + /webidl-conversions/7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: true + + /whatwg-encoding/2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + dependencies: + iconv-lite: 0.6.3 + dev: true + + /whatwg-mimetype/3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + dev: true + + /whatwg-url/11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /windicss/3.5.6: + resolution: {integrity: sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==} + engines: {node: '>= 12'} + hasBin: true + dev: true + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /ws/8.8.1: + resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /xml-name-validator/4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + dev: true + + /xmlchars/2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/App.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/App.svelte new file mode 100644 index 000000000..4ca7247ec --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/App.svelte @@ -0,0 +1,44 @@ + + +{#if $show} +
+ {#if $side == "right"} + {#if $panelActive != ""} +
+ +
+ {/if} + + {:else} + + {#if $panelActive != ""} +
+ +
+ {/if} + {/if} +
+{/if} + + diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/CategoryMenu.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/CategoryMenu.svelte new file mode 100644 index 000000000..8038f6980 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/CategoryMenu.svelte @@ -0,0 +1,41 @@ + + +
+
+

CATEGORY

+

+ {panelName} Jobs +

+
+ +
+ {#each jobArray as job (job.name)} + + {/each} +
+
+ + diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/JobCard.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/JobCard.svelte new file mode 100644 index 000000000..d1071645a --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/JobCard.svelte @@ -0,0 +1,163 @@ + + +
+
+
+ {#if icon} + + {:else} + + {/if} +
+

+ {name} +

+
deleteJob(nuiName, nuiRank, category)}> + +
+
+

+ {description} +

+
+ + + +
+
+ {#if !isActive} + + {/if} + {#if isActive} +
+ +
+ +
+
+ {/if} +
+
diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/NavBar.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/NavBar.svelte new file mode 100644 index 000000000..7eabb1b89 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/NavBar.svelte @@ -0,0 +1,23 @@ + + + + + diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/JobDetail.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/JobDetail.svelte new file mode 100644 index 000000000..98a7cd169 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/JobDetail.svelte @@ -0,0 +1,22 @@ + + +
+
+
+ +
+
+
+

+ {detail}: + + {value} + +

+
+
\ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/NavItem.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/NavItem.svelte new file mode 100644 index 000000000..8e77d761f --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/NavItem.svelte @@ -0,0 +1,38 @@ + + +
navItemClicked(name)} +> +
+ +
+
+ + diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/ActiveSVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/ActiveSVG.svelte new file mode 100644 index 000000000..60eb09e8c --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/ActiveSVG.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/CivilianSVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/CivilianSVG.svelte new file mode 100644 index 000000000..c919fce4e --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/CivilianSVG.svelte @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/ClockSVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/ClockSVG.svelte new file mode 100644 index 000000000..8c82b7b2a --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/ClockSVG.svelte @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/CrossMarkSVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/CrossMarkSVG.svelte new file mode 100644 index 000000000..d1a9e43c0 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/CrossMarkSVG.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/DeleteSVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/DeleteSVG.svelte new file mode 100644 index 000000000..c1d99e7b2 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/DeleteSVG.svelte @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/PoliceSVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/PoliceSVG.svelte new file mode 100644 index 000000000..aabf3c74f --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/PoliceSVG.svelte @@ -0,0 +1,14 @@ + + + \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/RankSVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/RankSVG.svelte new file mode 100644 index 000000000..351a305b0 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/RankSVG.svelte @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/SalarySVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/SalarySVG.svelte new file mode 100644 index 000000000..742b1b5a3 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/SalarySVG.svelte @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/SelectSVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/SelectSVG.svelte new file mode 100644 index 000000000..51e062a84 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/SelectSVG.svelte @@ -0,0 +1,7 @@ + + + diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/TaxiSVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/TaxiSVG.svelte new file mode 100644 index 000000000..263c9848a --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/TaxiSVG.svelte @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/WhitelistSVG.svelte b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/WhitelistSVG.svelte new file mode 100644 index 000000000..e609d4d6b --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/components/atoms/svgs/WhitelistSVG.svelte @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/main.ts b/resources/[jobs]/ps-multijob/svelte-source/src/main.ts new file mode 100644 index 000000000..c9a3922d7 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/main.ts @@ -0,0 +1,9 @@ +import App from './App.svelte' +import 'uno.css' +import '@unocss/reset/tailwind.css' + +const app = new App({ + target: document.getElementById('app') +}) + +export default app \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/stores/JobStore.ts b/resources/[jobs]/ps-multijob/svelte-source/src/stores/JobStore.ts new file mode 100644 index 000000000..b6587f194 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/stores/JobStore.ts @@ -0,0 +1,120 @@ +import { writable, Writable, get } from "svelte/store"; +import fetchNUI from '../utils/fetch'; +import type { Job, JobManifest, side, nuiUpdateJobMessage } from '../types/types'; +import PanelStore from "./PanelStore"; + +export interface nuiOpenMessage { + activeJob: string; + onDuty: boolean; + jobs: JobManifest; + side: side; +} + +interface JobState { + jobManifest: Writable; + activeJob: Writable; + onDuty: Writable; +} + +const store = () => { + const JobStore: JobState = { + jobManifest: writable({ + "civilian": [], + "whitelist": [], + }), + activeJob: writable("police person"), + onDuty: writable(false), + } + + const methods = { + deleteJob(nuiName: string, nuiRank: number, category: string) { + fetchNUI("removejob", { + name: nuiName, + grade: nuiRank, + }); + // Remove job from list + JobStore.jobManifest.update((state) => { + state[category] = state[category].filter((element: Job) => element.name != nuiName); + return state; + }); + }, + receiveOpenMessage(data: nuiOpenMessage) { + JobStore.jobManifest.set(data.jobs); + JobStore.activeJob.set(data.activeJob); + JobStore.onDuty.set(data.onDuty); + PanelStore.side.set(data.side || "right"); + }, + recieveUpdateJob(data: nuiUpdateJobMessage) { + const activeJob: string = get(JobStore.activeJob); + if (activeJob == data.name) { + JobStore.onDuty.set(data.onDuty); + } + + JobStore.jobManifest.update((state) => { + function updateJob(kind: "whitelist" | "civilian", index: number) { + let changeJob = state[kind][index]; + changeJob.grade = data.grade; + changeJob.gradeLabel = data.gradeLabel; + changeJob.salary = data.salary; + } + + function newJob(): Job { + return { + name: data.name, + label: data.label, + description: data.description, + salary: data.salary, + gradeLabel: data.gradeLabel, + grade: data.grade, + active: 0, + icon: data.icon, + } + } + + let findSameName = (job: Job) => { + return job.name == data.name + } + + const accessString: "civilian" | "whitelist" = data.isWhitelist ? "whitelist" : "civilian"; + let index = state[accessString]?.findIndex(findSameName); + + if (index != -1) { + updateJob(accessString, index); + } else { + state[accessString] = [...state[accessString], newJob()] + } + + return state; + }) + }, + async setActiveJob(jobName: string, nuiName: string, nuiRank: number) { + JobStore.activeJob.set(jobName); + // Needs to give back onDuty + let data = await fetchNUI("selectjob", { + name: nuiName, + grade: nuiRank, + }); + JobStore.onDuty.set(data?.onDuty); + }, + unSetActiveJob() { + JobStore.activeJob.set(""); + JobStore.onDuty.set(false); + // Unselect current job by setting player to unemployed + fetchNUI("selectjob", { + name: 'unemployed', + grade: 0, + }); + }, + toggleDuty() { + JobStore.onDuty.update(state => !state); + fetchNUI('toggleduty', null); + } + } + + return { + ...JobStore, + ...methods + } +} + +export default store(); \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/stores/PanelStore.ts b/resources/[jobs]/ps-multijob/svelte-source/src/stores/PanelStore.ts new file mode 100644 index 000000000..f55cd0dcc --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/stores/PanelStore.ts @@ -0,0 +1,62 @@ +import { writable, Writable } from "svelte/store"; +import type { side } from '../types/types'; +import fetchNUI from '../utils/fetch'; +import CivilianSVG from '../components/atoms/svgs/CivilianSVG.svelte'; +import WhiteListSVG from '../components/atoms/svgs/WhitelistSVG.svelte'; + +interface panel { + name: string; + icon: any; +} + +interface PanelState { + show: Writable; + panelActive: Writable; + panels: Writable>; + side: Writable; +} + +const panels: Array = [ + { + name: "whitelist", + icon: WhiteListSVG, + }, + { + name: "civilian", + icon: CivilianSVG, + } +] + +const store = () => { + const PanelStore: PanelState = { + panelActive: writable(""), + panels: writable(panels), + show: writable(false), + side: writable("right"), + } + + const methods = { + handleKeyUp(event: KeyboardEvent) { + if (event.key == "Escape") { + methods.setShow(false); + fetchNUI("closemenu", null); + } + }, + setActive(name: string) { + PanelStore.panelActive.set(name); + }, + setShow(show: boolean) { + PanelStore.show.set(show); + }, + setSide(side: side) { + PanelStore.side.set(side); + } + } + + return { + ...PanelStore, + ...methods + } +} + +export default store(); \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/stores/debugStore.ts b/resources/[jobs]/ps-multijob/svelte-source/src/stores/debugStore.ts new file mode 100644 index 000000000..5ff73f03f --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/stores/debugStore.ts @@ -0,0 +1,2 @@ +const debugMode: boolean = import.meta.env.DEV; +export default debugMode; \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/tests/example.test.ts b/resources/[jobs]/ps-multijob/svelte-source/src/tests/example.test.ts new file mode 100644 index 000000000..15460146c --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/tests/example.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, test } from 'vitest'; + +describe('function()', async () => { + test('behavior', () => { + expect(1).toBe(1); + }); +}); \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/types/types.ts b/resources/[jobs]/ps-multijob/svelte-source/src/types/types.ts new file mode 100644 index 000000000..934f3265c --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/types/types.ts @@ -0,0 +1,22 @@ +export interface Job { + name: string; + label: string; + description: string; + salary: number; + gradeLabel: string; + grade: number; + active: number; + icon: string; +} + +export interface nuiUpdateJobMessage extends Omit { + isWhitelist: boolean; + onDuty: boolean; +} + +export interface JobManifest { + "whitelist": Array; + "civilian": Array; +} + +export type side = "left" | "right"; \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/utils/eventHandler.ts b/resources/[jobs]/ps-multijob/svelte-source/src/utils/eventHandler.ts new file mode 100644 index 000000000..b74f7a141 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/utils/eventHandler.ts @@ -0,0 +1,33 @@ +import { onMount, onDestroy } from "svelte"; +import JobStore from '../stores/JobStore'; +import PanelStore from '../stores/PanelStore'; + +interface nuiMessage { + data: { + action: string, + [key: string]: any, + }, +} + +export function EventHandler() { + function mainEvent(event: nuiMessage) { + switch (event.data.action) { + case "sendjobs": + JobStore.receiveOpenMessage(event.data as any); + PanelStore.setShow(true); + break; + case "updatejob": + JobStore.recieveUpdateJob(event.data as any); + break; + } + } + + onMount(() => window.addEventListener("message", mainEvent)); + onDestroy(() => window.removeEventListener("message", mainEvent)); +} + +export function handleKeyUp(event: KeyboardEvent) { + const charCode = event.key; + if (charCode == "Escape") { + } +} \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/utils/fetch.ts b/resources/[jobs]/ps-multijob/svelte-source/src/utils/fetch.ts new file mode 100644 index 000000000..c12a67375 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/utils/fetch.ts @@ -0,0 +1,26 @@ +export default async function fetchNui(eventName: string, data: unknown = {}) { + const options = { + method: "post", + headers: { + "Content-Type": "application/json; charset=UTF-8", + }, + body: JSON.stringify(data), + }; + + const getResourceName = () => { + try { + // @ts-ignore + return window.GetParentResourceName(); + } catch(err) { + return "ps-multijob"; + } + } + + const resourceName = getResourceName(); + + try { + const resp = await fetch(`https://${resourceName}/${eventName}`, options); + return await resp.json(); + } catch(err) { + } +} \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/utils/mockEvent.ts b/resources/[jobs]/ps-multijob/svelte-source/src/utils/mockEvent.ts new file mode 100644 index 000000000..51eb20159 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/utils/mockEvent.ts @@ -0,0 +1,132 @@ +import type { JobManifest } from '../types/types'; +import type { nuiOpenMessage } from '../stores/JobStore'; + +export default function mockEventCall(data: unknown = {}) { + window.dispatchEvent( + new MessageEvent("message", {data}) + ); +}; + +export function exampleCall() { + setTimeout(() => { + mockEventCall({ + action: 'show', + data: { + header: "Some Header!", + }, + }); + }, 100); +}; + +export function mockJobMenuOpen() { + const mockJobManifest: JobManifest = { + "whitelist": [ + { + name: "police person", + label: "police person", + description: `Generate Lorem lpsum placeholder text. + Select the number of characters, words, sentences or paragraphs, and hit generate!`, + salary: 250, + gradeLabel: "Regular", + grade: 0, + active: 0, + icon: "fa-solid fa-trash-can", + }, + { + name: "police chief", + label: "police chief", + description: "Blah blah blah", + salary: 500, + gradeLabel: "Boss", + grade: 0, + active: 1, + icon: "", + }, + { + name: "police chief2", + label: "police chief2", + description: "Blah blah blah", + salary: 500, + gradeLabel: "Boss", + grade: 0, + active: 1, + icon: "", + }, + { + name: "police chief3", + label: "police chief3", + description: "Blah blah blah", + salary: 500, + gradeLabel: "Boss", + grade: 0, + active: 1, + icon: "", + }, + { + name: "police chief4", + label: "police chief4", + description: "Blah blah blah", + salary: 500, + gradeLabel: "Boss", + grade: 0, + active: 1, + icon: "", + }, + ], + "civilian": [ + { + name: "taxi driver", + label: "taxi driver", + description: `Generate Lorem lpsum placeholder text. + Select the number of characters, words, sentences or paragraphs, and hit generate!`, + salary: 150, + gradeLabel: "Regular", + grade: 0, + active: 0, + icon: "", + }, + { + name: "murdershot1", + label: "murdershot1", + description: "Take people's order and serve them food", + salary: 100, + gradeLabel: "Cashier", + grade: 0, + active: 0, + icon: "", + }, + { + name: "murdershot2", + label: "murdershot2", + description: "Take people's order and serve them food", + salary: 100, + gradeLabel: "Cashier", + grade: 0, + active: 0, + icon: "", + }, + { + name: "murdershot3", + label: "murdershot3", + description: "Take people's order and serve them food", + salary: 100, + gradeLabel: "Cashier", + grade: 0, + active: 0, + icon: "", + } + ], + } + setTimeout(() => { + let sendData: nuiOpenMessage = { + activeJob: "murdershot1", + jobs: mockJobManifest, + onDuty: true, + side: "right", + } + mockEventCall({ + action: 'sendjobs', + ...sendData, + }); + }, 1000); +} \ No newline at end of file diff --git a/resources/[jobs]/ps-multijob/svelte-source/src/vite-env.d.ts b/resources/[jobs]/ps-multijob/svelte-source/src/vite-env.d.ts new file mode 100644 index 000000000..4078e7476 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/resources/[jobs]/ps-multijob/svelte-source/svelte.config.js b/resources/[jobs]/ps-multijob/svelte-source/svelte.config.js new file mode 100644 index 000000000..3630bb396 --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/svelte.config.js @@ -0,0 +1,7 @@ +import sveltePreprocess from 'svelte-preprocess' + +export default { + // Consult https://github.com/sveltejs/svelte-preprocess + // for more information about preprocessors + preprocess: sveltePreprocess() +} diff --git a/resources/[jobs]/ps-multijob/svelte-source/tsconfig.json b/resources/[jobs]/ps-multijob/svelte-source/tsconfig.json new file mode 100644 index 000000000..96bfd81aa --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + "compilerOptions": { + "target": "esnext", + "useDefineForClassFields": true, + "module": "esnext", + "resolveJsonModule": 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/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/resources/[jobs]/ps-multijob/svelte-source/tsconfig.node.json b/resources/[jobs]/ps-multijob/svelte-source/tsconfig.node.json new file mode 100644 index 000000000..e993792cb --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/tsconfig.node.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "composite": true, + "module": "esnext", + "moduleResolution": "node" + }, + "include": ["vite.config.ts"] +} diff --git a/resources/[jobs]/ps-multijob/svelte-source/vite.config.ts b/resources/[jobs]/ps-multijob/svelte-source/vite.config.ts new file mode 100644 index 000000000..5fb79230f --- /dev/null +++ b/resources/[jobs]/ps-multijob/svelte-source/vite.config.ts @@ -0,0 +1,50 @@ +/// +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' +import { minify } from "html-minifier"; +import Unocss from 'unocss/vite' +import presetUno from '@unocss/preset-uno' + +const minifyHtml = () => { + return { + name: 'html-transform', + transformIndexHtml(html) { + return minify(html, { + collapseWhitespace: true, + }); + }, + }; +}; + +export default defineConfig(({ mode }) => { + const isProduction = mode === 'production'; + + return { + plugins: [ + Unocss({ + presets: [ presetUno() ], + }), + svelte(), + isProduction && minifyHtml(), + ], + test: { + globals: true, + environment: 'jsdom', + }, + base: './', // fivem nui needs to have local dir reference + build: { + minify: isProduction, + emptyOutDir: true, + outDir: '../html', + assetsDir: './', + rollupOptions: { + output: { + // By not having hashes in the name, you don't have to update the manifest, yay! + entryFileNames: `[name].js`, + chunkFileNames: `[name].js`, + assetFileNames: `[name].[ext]` + } + } + }, + }; +});