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
+
+
+
+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
+
+
+
+## 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}
+
setActiveJob(nuiName, nuiName, nuiRank)}
+ >
+
+
+
+ select
+
+ {/if}
+ {#if isActive}
+
+
+ {#if !selectHover}
+
+
+
+ {/if}
+
+ {selectText}
+
+
+
+
+ {#if ($onDuty && !onDutyHover) || transitionOnDuty}
+
+
+
+ {/if}
+ {#if (!$onDuty && !onDutyHover) || transitionOffDuty}
+
+
+
+ {/if}
+ {dutyText}
+
+
+
+ {/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 @@
+
+
+
+
+ {#each $panels as item}
+
+ {/each}
+
+
+
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]`
+ }
+ }
+ },
+ };
+});