Merge pull request #563 from kaname-png/rework-home

feat(ui): rework home UI and with responsive design
This commit is contained in:
Andras Bacsai 2022-08-26 10:00:06 +02:00 committed by GitHub
commit 2af65ee946
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 334 additions and 282 deletions

View File

@ -38,6 +38,7 @@
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"@sveltejs/adapter-static": "1.0.0-next.39", "@sveltejs/adapter-static": "1.0.0-next.39",
"@tailwindcss/typography": "^0.5.4",
"cuid": "2.1.8", "cuid": "2.1.8",
"daisyui": "2.24.0", "daisyui": "2.24.0",
"js-cookie": "3.0.1", "js-cookie": "3.0.1",

View File

@ -50,61 +50,70 @@
}); });
</script> </script>
<div class="pb-4"> <div class="w-full">
<div class="title">Hardware Details</div> <h1 class="title text-4xl">Hardware details</h1>
<div class="text-center p-8 "> <div class="divider" />
<div> <div class="grid grid-flow-col gap-4 grid-rows-3 lg:grid-rows-1">
<div class="stat w-64"> <div class="stats stats-vertical lg:stats-horizontal shadow w-full mb-5">
<div class="stat">
<div class="stat-title">Total Memory</div> <div class="stat-title">Total Memory</div>
<div class="stat-value"> <div class="stat-value">
{(usage?.memory.totalMemMb).toFixed(0)}<span class="text-sm">MB</span> {(usage?.memory.totalMemMb).toFixed(0)}<span class="text-sm">MB</span>
</div> </div>
</div> </div>
<div class="stat w-64">
<div class="stat">
<div class="stat-title">Used Memory</div> <div class="stat-title">Used Memory</div>
<div class="stat-value"> <div class="stat-value">
{(usage?.memory.usedMemMb).toFixed(0)}<span class="text-sm">MB</span> {(usage?.memory.usedMemMb).toFixed(0)}<span class="text-sm">MB</span>
</div> </div>
</div> </div>
<div class="stat w-64">
<div class="stat">
<div class="stat-title">Free Memory</div> <div class="stat-title">Free Memory</div>
<div class="stat-value"> <div class="stat-value">
{usage?.memory.freeMemPercentage}<span class="text-sm">%</span> {usage?.memory.freeMemPercentage}<span class="text-sm">%</span>
</div> </div>
</div> </div>
</div> </div>
<div class="py-10">
<div class="stat w-64"> <div class="stats stats-vertical lg:stats-horizontal shadow w-full mb-5">
<div class="stat">
<div class="stat-title">Total CPUs</div> <div class="stat-title">Total CPUs</div>
<div class="stat-value"> <div class="stat-value">
{usage?.cpu.count} {usage?.cpu.count}
</div> </div>
</div> </div>
<div class="stat w-64">
<div class="stat">
<div class="stat-title">CPU Usage</div> <div class="stat-title">CPU Usage</div>
<div class="stat-value"> <div class="stat-value">
{usage?.cpu.usage}<span class="text-sm">%</span> {usage?.cpu.usage}<span class="text-sm">%</span>
</div> </div>
</div> </div>
<div class="stat w-64">
<div class="stat">
<div class="stat-title">Load Average (5,10,30mins)</div> <div class="stat-title">Load Average (5,10,30mins)</div>
<div class="stat-value">{usage?.cpu.load}</div> <div class="stat-value">{usage?.cpu.load}</div>
</div> </div>
</div> </div>
<div>
<div class="stat w-64"> <div class="stats stats-vertical lg:stats-horizontal shadow w-full mb-5">
<div class="stat">
<div class="stat-title">Total Disk</div> <div class="stat-title">Total Disk</div>
<div class="stat-value"> <div class="stat-value">
{usage?.disk.totalGb}<span class="text-sm">GB</span> {usage?.disk.totalGb}<span class="text-sm">GB</span>
</div> </div>
</div> </div>
<div class="stat w-64">
<div class="stat">
<div class="stat-title">Used Disk</div> <div class="stat-title">Used Disk</div>
<div class="stat-value"> <div class="stat-value">
{usage?.disk.usedGb}<span class="text-sm">GB</span> {usage?.disk.usedGb}<span class="text-sm">GB</span>
</div> </div>
</div> </div>
<div class="stat w-64">
<div class="stat">
<div class="stat-title">Free Disk</div> <div class="stat-title">Free Disk</div>
<div class="stat-value">{usage?.disk.freePercentage}<span class="text-sm">%</span></div> <div class="stat-value">{usage?.disk.freePercentage}<span class="text-sm">%</span></div>
</div> </div>

View File

@ -99,256 +99,240 @@
> >
{/if} {/if}
</div> </div>
<div class="mt-10 pb-12 sm:pb-16"> <div class="container lg:mx-auto lg:p-0 p-5">
<div class="mx-auto px-10"> {#if $appSession.teamId === '0'}
<div class="flex flex-col justify-center xl:flex-row"> <Usage />
{#if applications.length > 0} {/if}
<div> {#if applications.length > 0}
<div class="title">Resources</div> <h1 class="title text-4xl mt-10">Resources</h1>
<div class="flex items-start justify-center p-8"> <div class="divider" />
<table class="rounded-none text-base"> <div class="grid grid-col gap-4 auto-cols-max grid-cols-1 lg:grid-cols-3">
<tbody> {#each applications as application}
{#each applications as application} <div class="w-full rounded p-5 bg-neutral indicator mb-5">
<tr> {#await getStatus(application)}
<td class="space-x-2 items-center tracking-tight font-bold"> <span class="indicator-item badge bg-yellow-500" />
{#await getStatus(application)} {:then status}
<div class="inline-flex w-2 h-2 bg-yellow-500 rounded-full" /> {#if status === 'Running'}1
{:then status} <span class="indicator-item badge bg-success" />
{#if status === 'Running'} {:else}
<div class="inline-flex w-2 h-2 bg-success rounded-full" /> <span class="indicator-item badge bg-error" />
{:else} {/if}
<div class="inline-flex w-2 h-2 bg-error rounded-full" /> {/await}
{/if} <div class="w-full flex flex-row">
{/await} <ApplicationsIcons {application} isAbsolute={false} />
<div class="inline-flex">{application.name}</div> <div class="w-full flex flex-col ml-5">
</td> <span>
<td class="px-10 inline-flex"> Application
<ApplicationsIcons {application} isAbsolute={false} /> {#if application.settings.isBot}
</td> | BOT
<td class="px-10"> {/if}
<div </span>
class="badge badge-outline text-xs border-applications rounded text-white" <h1 class="font-bold text-lg">{application.name}</h1>
> <div class="divider" />
Application <div class="btn-group justify-end">
{#if application.settings.isBot} {#if application.fqdn}
| BOT <a href={application.fqdn} target="_blank" class="btn btn-sm">
{/if} <svg
</div></td xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6 mr-2"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
> >
<td class="flex justify-end"> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
{#if application.fqdn} <path d="M11 7h-5a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-5" />
<a <line x1="10" y1="14" x2="20" y2="4" />
href={application.fqdn} <polyline points="15 4 20 4 20 9" />
target="_blank" </svg>
class="icons bg-transparent text-sm inline-flex" Website
><svg </a>
xmlns="http://www.w3.org/2000/svg" {/if}
class="h-6 w-6" {#if application.settings.isBot && application.exposePort}
viewBox="0 0 24 24" <a
stroke-width="1.5" href={`http://${dev ? 'localhost' : settings.ipv4}:${application.exposePort}`}
stroke="currentColor" target="_blank"
fill="none" class="btn btn-sm"
stroke-linecap="round" >
stroke-linejoin="round" <svg
> xmlns="http://www.w3.org/2000/svg"
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> class="h-6 w-6 mr-2"
<path d="M11 7h-5a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-5" /> viewBox="0 0 24 24"
<line x1="10" y1="14" x2="20" y2="4" /> stroke-width="1.5"
<polyline points="15 4 20 4 20 9" /> stroke="currentColor"
</svg></a fill="none"
> stroke-linecap="round"
{/if} stroke-linejoin="round"
{#if application.settings.isBot && application.exposePort} >
<a <path stroke="none" d="M0 0h24v24H0z" fill="none" />
href={`http://${dev ? 'localhost' : settings.ipv4}:${ <path d="M11 7h-5a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-5" />
application.exposePort <line x1="10" y1="14" x2="20" y2="4" />
}`} <polyline points="15 4 20 4 20 9" />
target="_blank" </svg>
class="icons bg-transparent text-sm inline-flex" Server
><svg </a>
xmlns="http://www.w3.org/2000/svg" {/if}
class="h-6 w-6" <a class="btn btn-sm btn-active" href={`/applications/${application.id}`}>
viewBox="0 0 24 24" <svg
stroke-width="1.5" xmlns="http://www.w3.org/2000/svg"
stroke="currentColor" class="h-6 w-6 mr-2"
fill="none" viewBox="0 0 24 24"
stroke-linecap="round" stroke-width="1.5"
stroke-linejoin="round" stroke="currentColor"
> fill="none"
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> stroke-linecap="round"
<path d="M11 7h-5a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-5" /> stroke-linejoin="round"
<line x1="10" y1="14" x2="20" y2="4" /> >
<polyline points="15 4 20 4 20 9" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
</svg></a <rect x="4" y="8" width="4" height="4" />
> <line x1="6" y1="4" x2="6" y2="8" />
{/if} <line x1="6" y1="12" x2="6" y2="20" />
<a <rect x="10" y="14" width="4" height="4" />
href={`/applications/${application.id}`} <line x1="12" y1="4" x2="12" y2="14" />
class="icons bg-transparent text-sm inline-flex" <line x1="12" y1="18" x2="12" y2="20" />
> <rect x="16" y="5" width="4" height="4" />
<svg <line x1="18" y1="4" x2="18" y2="5" />
xmlns="http://www.w3.org/2000/svg" <line x1="18" y1="9" x2="18" y2="20" />
class="h-6 w-6" </svg>
viewBox="0 0 24 24" Manage
stroke-width="1.5" </a>
stroke="currentColor" </div>
fill="none" </div>
stroke-linecap="round"
stroke-linejoin="round"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<rect x="4" y="8" width="4" height="4" />
<line x1="6" y1="4" x2="6" y2="8" />
<line x1="6" y1="12" x2="6" y2="20" />
<rect x="10" y="14" width="4" height="4" />
<line x1="12" y1="4" x2="12" y2="14" />
<line x1="12" y1="18" x2="12" y2="20" />
<rect x="16" y="5" width="4" height="4" />
<line x1="18" y1="4" x2="18" y2="5" />
<line x1="18" y1="9" x2="18" y2="20" />
</svg>
</a>
</td>
</tr>
{/each}
{#each services as service}
<tr>
<td class="space-x-2 items-center tracking-tight font-bold">
{#await getStatus(service)}
<div class="inline-flex w-2 h-2 bg-yellow-500 rounded-full" />
{:then status}
{#if status === 'Running'}
<div class="inline-flex w-2 h-2 bg-success rounded-full" />
{:else}
<div class="inline-flex w-2 h-2 bg-error rounded-full" />
{/if}
{/await}
<div class="inline-flex">{service.name}</div>
</td>
<td class="px-10 inline-flex">
<ServiceIcons type={service.type} isAbsolute={false} />
</td>
<td class="px-10"
><div class="badge badge-outline text-xs border-services rounded text-white">
Service
</div>
</td>
<td class="flex justify-end">
{#if service.fqdn}
<a
href={service.fqdn}
target="_blank"
class="icons bg-transparent text-sm inline-flex"
><svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M11 7h-5a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-5" />
<line x1="10" y1="14" x2="20" y2="4" />
<polyline points="15 4 20 4 20 9" />
</svg></a
>
{/if}
<a
href={`/services/${service.id}`}
class="icons bg-transparent text-sm inline-flex"
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<rect x="4" y="8" width="4" height="4" />
<line x1="6" y1="4" x2="6" y2="8" />
<line x1="6" y1="12" x2="6" y2="20" />
<rect x="10" y="14" width="4" height="4" />
<line x1="12" y1="4" x2="12" y2="14" />
<line x1="12" y1="18" x2="12" y2="20" />
<rect x="16" y="5" width="4" height="4" />
<line x1="18" y1="4" x2="18" y2="5" />
<line x1="18" y1="9" x2="18" y2="20" />
</svg>
</a>
</td>
</tr>
{/each}
{#each databases as database}
<tr>
<td class="space-x-2 items-center tracking-tight font-bold">
{#await getStatus(database)}
<div class="inline-flex w-2 h-2 bg-yellow-500 rounded-full" />
{:then status}
{#if status === 'Running'}
<div class="inline-flex w-2 h-2 bg-success rounded-full" />
{:else}
<div class="inline-flex w-2 h-2 bg-error rounded-full" />
{/if}
{/await}
<div class="inline-flex">{database.name}</div>
</td>
<td class="px-10 inline-flex">
<DatabaseIcons type={database.type} />
</td>
<td class="px-10">
<div class="badge badge-outline text-xs border-databases rounded text-white">
Database
</div>
</td>
<td class="flex justify-end">
<a
href={`/databases/${database.id}`}
class="icons bg-transparent text-sm inline-flex ml-11"
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<rect x="4" y="8" width="4" height="4" />
<line x1="6" y1="4" x2="6" y2="8" />
<line x1="6" y1="12" x2="6" y2="20" />
<rect x="10" y="14" width="4" height="4" />
<line x1="12" y1="4" x2="12" y2="14" />
<line x1="12" y1="18" x2="12" y2="20" />
<rect x="16" y="5" width="4" height="4" />
<line x1="18" y1="4" x2="18" y2="5" />
<line x1="18" y1="9" x2="18" y2="20" />
</svg>
</a>
</td>
</tr>
{/each}
</tbody>
</table>
</div> </div>
</div> </div>
{:else if $appSession.teamId !== '0'} {/each}
<div class="text-center text-xl font-bold">Nothing is configured yet.</div>
{/if}
{#if $appSession.teamId === '0'}
<Usage />
{/if}
</div> </div>
</div> <h1 class="title text-4xl mt-10">Services</h1>
<div class="divider" />
<div class="grid grid-col gap-4 auto-cols-max grid-cols-1 lg:grid-cols-3">
{#each services as service}
<div class="w-full rounded p-5 bg-neutral indicator mb-5">
{#await getStatus(service)}
<span class="indicator-item badge bg-yellow-500" />
{:then status}
{#if status === 'Running'}1
<span class="indicator-item badge bg-success" />
{:else}
<span class="indicator-item badge bg-error" />
{/if}
{/await}
<div class="w-full flex flex-row">
<ServiceIcons type={service.type} isAbsolute={false} />
<div class="w-full flex flex-col ml-5">
<span>
Service
</span>
<h1 class="font-bold text-lg">{service.name}</h1>
<div class="divider" />
<div class="btn-group justify-end">
{#if service.fqdn}
<a href={service.fqdn} target="_blank" class="btn btn-sm">
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6 mr-2"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M11 7h-5a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-5" />
<line x1="10" y1="14" x2="20" y2="4" />
<polyline points="15 4 20 4 20 9" />
</svg>
Website
</a>
{/if}
<a class="btn btn-sm btn-active" href={`/services/${service.id}`}>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6 mr-2"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<rect x="4" y="8" width="4" height="4" />
<line x1="6" y1="4" x2="6" y2="8" />
<line x1="6" y1="12" x2="6" y2="20" />
<rect x="10" y="14" width="4" height="4" />
<line x1="12" y1="4" x2="12" y2="14" />
<line x1="12" y1="18" x2="12" y2="20" />
<rect x="16" y="5" width="4" height="4" />
<line x1="18" y1="4" x2="18" y2="5" />
<line x1="18" y1="9" x2="18" y2="20" />
</svg>
Manage
</a>
</div>
</div>
</div>
</div>
{/each}
</div>
<h1 class="title text-4xl mt-10">Databases</h1>
<div class="divider" />
<div class="grid grid-col gap-4 auto-cols-max grid-cols-1 lg:grid-cols-3">
{#each databases as database}
<div class="w-full rounded p-5 bg-neutral indicator mb-5">
{#await getStatus(database)}
<span class="indicator-item badge bg-yellow-500" />
{:then status}
{#if status === 'Running'}1
<span class="indicator-item badge bg-success" />
{:else}
<span class="indicator-item badge bg-error" />
{/if}
{/await}
<div class="w-full flex flex-row">
<DatabaseIcons type={database.type} isAbsolute={false} />
<div class="w-full flex flex-col ml-5">
<span>
Service
</span>
<h1 class="font-bold text-lg">{database.name}</h1>
<div class="divider" />
<div class="btn-group justify-end">
<a class="btn btn-sm btn-active" href={`/databases/${database.id}`}>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6 mr-2"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<rect x="4" y="8" width="4" height="4" />
<line x1="6" y1="4" x2="6" y2="8" />
<line x1="6" y1="12" x2="6" y2="20" />
<rect x="10" y="14" width="4" height="4" />
<line x1="12" y1="4" x2="12" y2="14" />
<line x1="12" y1="18" x2="12" y2="20" />
<rect x="16" y="5" width="4" height="4" />
<line x1="18" y1="4" x2="18" y2="5" />
<line x1="18" y1="9" x2="18" y2="20" />
</svg>
Manage
</a>
</div>
</div>
</div>
</div>
{/each}
</div>
{:else if $appSession.teamId !== '0'}
<div class="text-center text-xl font-bold h-screen w-full flex flex-col justify-center">
<h1 class="text-5xl">Nothing is configured yet.</h1>
</div>
{/if}
</div> </div>

View File

@ -62,5 +62,5 @@ module.exports = {
scrollbar: ['dark'], scrollbar: ['dark'],
extend: {} extend: {}
}, },
plugins: [require('tailwindcss-scrollbar'), require('daisyui')] plugins: [require('tailwindcss-scrollbar'), require('daisyui'), require("@tailwindcss/typography")]
}; };

View File

@ -122,6 +122,7 @@ importers:
'@playwright/test': 1.25.1 '@playwright/test': 1.25.1
'@sveltejs/adapter-static': 1.0.0-next.39 '@sveltejs/adapter-static': 1.0.0-next.39
'@sveltejs/kit': 1.0.0-next.405 '@sveltejs/kit': 1.0.0-next.405
'@tailwindcss/typography': ^0.5.4
'@types/js-cookie': 3.0.2 '@types/js-cookie': 3.0.2
'@typescript-eslint/eslint-plugin': 5.35.1 '@typescript-eslint/eslint-plugin': 5.35.1
'@typescript-eslint/parser': 5.35.1 '@typescript-eslint/parser': 5.35.1
@ -148,6 +149,7 @@ importers:
vite: 3.0.5 vite: 3.0.5
dependencies: dependencies:
'@sveltejs/adapter-static': 1.0.0-next.39 '@sveltejs/adapter-static': 1.0.0-next.39
'@tailwindcss/typography': 0.5.4_tailwindcss@3.1.8
cuid: 2.1.8 cuid: 2.1.8
daisyui: 2.24.0_25hquoklqeoqwmt7fwvvcyxm5e daisyui: 2.24.0_25hquoklqeoqwmt7fwvvcyxm5e
js-cookie: 3.0.1 js-cookie: 3.0.1
@ -170,7 +172,7 @@ importers:
svelte: 3.49.0 svelte: 3.49.0
svelte-check: 2.8.1_vylzxgme5yisu3bsyvcau4hjtq svelte-check: 2.8.1_vylzxgme5yisu3bsyvcau4hjtq
svelte-preprocess: 4.10.7_fje22ktja5v2dh6nbkissncqme svelte-preprocess: 4.10.7_fje22ktja5v2dh6nbkissncqme
tailwindcss: 3.1.8 tailwindcss: 3.1.8_postcss@8.4.16_postcss@8.4.16
tailwindcss-scrollbar: 0.1.0_tailwindcss@3.1.8 tailwindcss-scrollbar: 0.1.0_tailwindcss@3.1.8
tslib: 2.4.0 tslib: 2.4.0
typescript: 4.7.4 typescript: 4.7.4
@ -418,8 +420,8 @@ packages:
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
dependencies: dependencies:
'@types/node': 18.7.13 '@types/node': 18.6.5
playwright-core: 1.25.1 playwright-core: 1.24.2
dev: true dev: true
/@prisma/client/3.15.2_prisma@3.15.2: /@prisma/client/3.15.2_prisma@3.15.2:
@ -525,6 +527,17 @@ packages:
defer-to-connect: 2.0.1 defer-to-connect: 2.0.1
dev: false dev: false
/@tailwindcss/typography/0.5.4_tailwindcss@3.1.8:
resolution: {integrity: sha512-QEdg40EmGvE7kKoDei8zr5sf4D1pIayHj4R31bH3lX8x2BtTiR+jNejYPOkhbmy3DXgkMF9jC8xqNiGFAuL9Sg==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
dependencies:
lodash.castarray: 4.4.0
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
tailwindcss: 3.1.8_postcss@8.4.16
dev: false
/@tsconfig/node10/1.0.8: /@tsconfig/node10/1.0.8:
resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==}
dev: false dev: false
@ -580,8 +593,16 @@ packages:
resolution: {integrity: sha512-XwVteWQx/XkfRPyaGkw8dEbrCAkoRZ73pI3XznUYIpzbCfpQB3UnDlR5TnmdhetlT889tUJGF8QWo9xrgTpsiA==} resolution: {integrity: sha512-XwVteWQx/XkfRPyaGkw8dEbrCAkoRZ73pI3XznUYIpzbCfpQB3UnDlR5TnmdhetlT889tUJGF8QWo9xrgTpsiA==}
dev: true dev: true
/@types/node/18.7.13: /@types/node/18.0.3:
resolution: {integrity: sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==} resolution: {integrity: sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ==}
dev: true
/@types/node/18.6.5:
resolution: {integrity: sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==}
dev: true
/@types/node/18.7.11:
resolution: {integrity: sha512-KZhFpSLlmK/sdocfSAjqPETTMd0ug6HIMIAwkwUpU79olnZdQtMxpQP+G1wDzCH7na+FltSIhbaZuKdwZ8RDrw==}
/@types/normalize-package-data/2.4.1: /@types/normalize-package-data/2.4.1:
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
@ -680,19 +701,14 @@ packages:
/@typescript-eslint/types/5.35.1: /@typescript-eslint/types/5.35.1:
resolution: {integrity: sha512-FDaujtsH07VHzG0gQ6NDkVVhi1+rhq0qEvzHdJAQjysN+LHDCKDKCBRlZFFE0ec0jKxiv0hN63SNfExy0KrbQQ==} resolution: {integrity: sha512-FDaujtsH07VHzG0gQ6NDkVVhi1+rhq0qEvzHdJAQjysN+LHDCKDKCBRlZFFE0ec0jKxiv0hN63SNfExy0KrbQQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@typescript-eslint/typescript-estree/5.35.1_typescript@4.7.4:
resolution: {integrity: sha512-JUqE1+VRTGyoXlDWWjm6MdfpBYVq+hixytrv1oyjYIBEOZhBCwtpp5ZSvBt4wIA1MKWlnaC2UXl2XmYGC3BoQA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/types': 5.35.1 '@typescript-eslint/types': 5.33.0
'@typescript-eslint/visitor-keys': 5.35.1 '@typescript-eslint/visitor-keys': 5.33.0
debug: 4.3.4 debug: 4.3.4
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
@ -703,16 +719,55 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/utils/5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq: /@typescript-eslint/typescript-estree/5.34.0_typescript@4.7.4:
resolution: {integrity: sha512-v6F8JNXgeBWI4pzZn36hT2HXXzoBBBJuOYvoQiaQaEEjdi5STzux3Yj8v7ODIpx36i/5s8TdzuQ54TPc5AITQQ==} resolution: {integrity: sha512-mXHAqapJJDVzxauEkfJI96j3D10sd567LlqroyCeJaHnu42sDbjxotGb3XFtGPYKPD9IyLjhsoULML1oI3M86A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 5.34.0
'@typescript-eslint/visitor-keys': 5.34.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
semver: 7.3.7
tsutils: 3.21.0_typescript@4.7.4
typescript: 4.7.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/utils/5.33.0_qugx7qdu5zevzvxaiqyxfiwquq:
resolution: {integrity: sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies: dependencies:
'@types/json-schema': 7.0.11 '@types/json-schema': 7.0.11
'@typescript-eslint/scope-manager': 5.35.1 '@typescript-eslint/scope-manager': 5.33.0
'@typescript-eslint/types': 5.35.1 '@typescript-eslint/types': 5.33.0
'@typescript-eslint/typescript-estree': 5.35.1_typescript@4.7.4 '@typescript-eslint/typescript-estree': 5.33.0_typescript@4.7.4
eslint: 8.21.0
eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@8.21.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/@typescript-eslint/utils/5.34.0_4rv7y5c6xz3vfxwhbrcxxi73bq:
resolution: {integrity: sha512-kWRYybU4Rn++7lm9yu8pbuydRyQsHRoBDIo11k7eqBWTldN4xUdVUMCsHBiE7aoEkFzrUEaZy3iH477vr4xHAQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
'@types/json-schema': 7.0.11
'@typescript-eslint/scope-manager': 5.34.0
'@typescript-eslint/types': 5.34.0
'@typescript-eslint/typescript-estree': 5.34.0_typescript@4.7.4
eslint: 8.22.0 eslint: 8.22.0
eslint-scope: 5.1.1 eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@8.22.0 eslint-utils: 3.0.0_eslint@8.22.0
@ -4066,6 +4121,10 @@ packages:
lodash._basetostring: 4.12.0 lodash._basetostring: 4.12.0
dev: false dev: false
/lodash.castarray/4.4.0:
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
dev: false
/lodash.includes/4.3.0: /lodash.includes/4.3.0:
resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==}
dev: false dev: false
@ -4092,7 +4151,6 @@ packages:
/lodash.merge/4.6.2: /lodash.merge/4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
dev: true
/lodash.omit/4.5.0: /lodash.omit/4.5.0:
resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==}