diff --git a/.dockerignore b/.dockerignore index 0d1e926..5d01849 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,4 +3,5 @@ npm-debug.log .env agent/ .next -docs/ \ No newline at end of file +docs/ +screenshots/ \ No newline at end of file diff --git a/README.md b/README.md index 8184e9a..92c3460 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The only dashboard you'll ever need to manage your entire server infrastructure. Keep all your server data organized in one central place, easily add your self-hosted applications with quick access links, and monitor their availability in real-time with built-in uptime tracking. Designed for simplicity and control, it gives you a clear overview of your entire self-hosted setup at a glance. -Buy Me A Coffee +[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/corecontrol) ## Features @@ -17,35 +17,34 @@ The only dashboard you'll ever need to manage your entire server infrastructure. ## Screenshots Login Page: -![Login Page](https://i.ibb.co/DfS7BJdX/image.png) +![Login Page](/screenshots/login.png) Dashboard Page: -![Dashboard Page](https://i.ibb.co/SYwrFw8/image.png) +![Dashboard Page](/screenshots/dashboard.png) Servers Page: -![Servers Page](https://i.ibb.co/HLMD9HPZ/image.png) +![Servers Page](/screenshots/servers.png) -VM Display: -![VM Display](https://i.ibb.co/My45mv8k/image.png) +Server Detail Page +![Server Detail Page](/screenshots/server.png) Applications Page: -![Applications Page](https://i.ibb.co/Hc2HQpV/image.png) +![Applications Page](/screenshots/applications.png) Uptime Page: -![Uptime Page](https://i.ibb.co/jvGcL9Y6/image.png) +![Uptime Page](/screenshots/uptime.png) Network Page: -![Network Page](https://i.ibb.co/ymLHcNqM/image.png) +![Network Page](/screenshots/network.png) Settings Page: -![Settings Page](https://i.ibb.co/rRQB9Hcz/image.png) +![Settings Page](/screenshots/settings.png) ## Roadmap - [X] Edit Applications, Applications searchbar - [X] Uptime History - [X] Notifications - [X] Simple Server Monitoring -- [ ] Simple Server Monitoring History - [ ] Improved Network Flowchart with custom elements (like Network switches) - [ ] Advanced Settings (Disable Uptime Tracking & more) diff --git a/agent/main.go b/agent/main.go index cfc190c..d56885c 100644 --- a/agent/main.go +++ b/agent/main.go @@ -44,7 +44,16 @@ type CPUResponse struct { } type MemoryResponse struct { - Percent float64 `json:"percent"` + Active int64 `json:"active"` + Available int64 `json:"available"` + Buffers int64 `json:"buffers"` + Cached int64 `json:"cached"` + Free int64 `json:"free"` + Inactive int64 `json:"inactive"` + Percent float64 `json:"percent"` + Shared int64 `json:"shared"` + Total int64 `json:"total"` + Used int64 `json:"used"` } type FSResponse []struct { @@ -136,6 +145,16 @@ func main() { } }() + // Check for test notifications every 10 seconds + go func() { + testNotifTicker := time.NewTicker(10 * time.Second) + defer testNotifTicker.Stop() + + for range testNotifTicker.C { + checkAndSendTestNotifications(db) + } + }() + appClient := &http.Client{ Timeout: 4 * time.Second, } @@ -447,7 +466,23 @@ func checkAndUpdateServerStatus(db *sql.DB, client *http.Client, servers []Serve updateServerStatus(db, server.ID, false, 0, 0, 0) online = false } else { - ramUsage = memData.Percent + // Calculate actual RAM usage excluding swap, cache, and buffers + // Formula: (total - free - cached - buffers) / total * 100 + // This is the most accurate representation of actual used RAM + actualUsedRam := memData.Total - memData.Free - memData.Cached - memData.Buffers + if actualUsedRam < 0 { + actualUsedRam = 0 // Safeguard against negative values + } + + if memData.Total > 0 { + ramUsage = float64(actualUsedRam) / float64(memData.Total) * 100 + fmt.Printf("%s Calculated RAM usage: %.2f%% (Used: %d MB, Total: %d MB)\n", + logPrefix, ramUsage, actualUsedRam/1024/1024, memData.Total/1024/1024) + } else { + // Fallback to the provided percentage if calculation fails + ramUsage = memData.Percent + fmt.Printf("%s Using provided memory percentage because total is zero\n", logPrefix) + } } } } @@ -710,3 +745,76 @@ func sendPushover(n Notification, message string) { fmt.Printf("Pushover: ERROR status code: %d\n", resp.StatusCode) } } + +func checkAndSendTestNotifications(db *sql.DB) { + // Query for test notifications + rows, err := db.Query(`SELECT tn.id, tn."notificationId" FROM test_notification tn`) + if err != nil { + fmt.Printf("Error fetching test notifications: %v\n", err) + return + } + defer rows.Close() + + // Process each test notification + var testIds []int + for rows.Next() { + var id, notificationId int + if err := rows.Scan(&id, ¬ificationId); err != nil { + fmt.Printf("Error scanning test notification: %v\n", err) + continue + } + + // Add to list of IDs to delete + testIds = append(testIds, id) + + // Find the notification configuration + notifMutex.RLock() + for _, n := range notifications { + if n.ID == notificationId { + // Send test notification + fmt.Printf("Sending test notification to notification ID %d\n", notificationId) + sendSpecificNotification(n, "Test notification from CoreControl") + } + } + notifMutex.RUnlock() + } + + // Delete processed test notifications + if len(testIds) > 0 { + for _, id := range testIds { + _, err := db.Exec(`DELETE FROM test_notification WHERE id = $1`, id) + if err != nil { + fmt.Printf("Error deleting test notification (ID: %d): %v\n", id, err) + } + } + } +} + +func sendSpecificNotification(n Notification, message string) { + switch n.Type { + case "email": + if n.SMTPHost.Valid && n.SMTPTo.Valid { + sendEmail(n, message) + } + case "telegram": + if n.TelegramToken.Valid && n.TelegramChatID.Valid { + sendTelegram(n, message) + } + case "discord": + if n.DiscordWebhook.Valid { + sendDiscord(n, message) + } + case "gotify": + if n.GotifyUrl.Valid && n.GotifyToken.Valid { + sendGotify(n, message) + } + case "ntfy": + if n.NtfyUrl.Valid && n.NtfyToken.Valid { + sendNtfy(n, message) + } + case "pushover": + if n.PushoverUrl.Valid && n.PushoverToken.Valid && n.PushoverUser.Valid { + sendPushover(n, message) + } + } +} diff --git a/app/api/applications/uptime/route.ts b/app/api/applications/uptime/route.ts index e9dfc67..7c61f12 100644 --- a/app/api/applications/uptime/route.ts +++ b/app/api/applications/uptime/route.ts @@ -12,22 +12,27 @@ const getTimeRange = (timespan: number) => { switch (timespan) { case 1: return { - start: new Date(now.getTime() - 30 * 60 * 1000), + start: new Date(now.getTime() - 60 * 60 * 1000), interval: 'minute' }; case 2: return { - start: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000), - interval: '3hour' + start: new Date(now.getTime() - 24 * 60 * 60 * 1000), + interval: 'hour' }; case 3: + return { + start: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000), + interval: 'day' + }; + case 4: return { start: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000), interval: 'day' }; default: return { - start: new Date(now.getTime() - 30 * 60 * 1000), + start: new Date(now.getTime() - 60 * 60 * 1000), interval: 'minute' }; } @@ -38,23 +43,31 @@ const generateIntervals = (timespan: number) => { now.setSeconds(0, 0); switch (timespan) { - case 1: - return Array.from({ length: 30 }, (_, i) => { + case 1: // 1 hour - 60 one-minute intervals + return Array.from({ length: 60 }, (_, i) => { const d = new Date(now); d.setMinutes(d.getMinutes() - i); d.setSeconds(0, 0); return d; }); - case 2: - return Array.from({ length: 56 }, (_, i) => { + case 2: // 1 day - 24 one-hour intervals + return Array.from({ length: 24 }, (_, i) => { const d = new Date(now); - d.setHours(d.getHours() - (i * 3)); + d.setHours(d.getHours() - i); d.setMinutes(0, 0, 0); return d; }); - case 3: + case 3: // 7 days + return Array.from({ length: 7 }, (_, i) => { + const d = new Date(now); + d.setDate(d.getDate() - i); + d.setHours(0, 0, 0, 0); + return d; + }); + + case 4: // 30 days return Array.from({ length: 30 }, (_, i) => { const d = new Date(now); d.setDate(d.getDate() - i); @@ -70,14 +83,14 @@ const generateIntervals = (timespan: number) => { const getIntervalKey = (date: Date, timespan: number) => { const d = new Date(date); switch (timespan) { - case 1: + case 1: // 1 hour - minute intervals d.setSeconds(0, 0); return d.toISOString(); - case 2: - d.setHours(Math.floor(d.getHours() / 3) * 3); + case 2: // 1 day - hour intervals d.setMinutes(0, 0, 0); return d.toISOString(); - case 3: + case 3: // 7 days - day intervals + case 4: // 30 days - day intervals d.setHours(0, 0, 0, 0); return d.toISOString(); default: diff --git a/app/api/notifications/test/route.ts b/app/api/notifications/test/route.ts new file mode 100644 index 0000000..200a5c6 --- /dev/null +++ b/app/api/notifications/test/route.ts @@ -0,0 +1,23 @@ +import { NextResponse, NextRequest } from "next/server"; +import { prisma } from "@/lib/prisma"; + +interface AddRequest { + notificationId: number; +} + +export async function POST(request: NextRequest) { + try { + const body: AddRequest = await request.json(); + const { notificationId } = body; + + const notification = await prisma.test_notification.create({ + data: { + notificationId: notificationId, + } + }); + + return NextResponse.json({ message: "Success", notification }); + } catch (error: any) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/app/api/servers/get/route.ts b/app/api/servers/get/route.ts index 13228c6..7b7e156 100644 --- a/app/api/servers/get/route.ts +++ b/app/api/servers/get/route.ts @@ -1,23 +1,111 @@ import { NextResponse, NextRequest } from "next/server"; import { prisma } from "@/lib/prisma"; +import { Prisma } from "@prisma/client"; interface GetRequest { page?: number; ITEMS_PER_PAGE?: number; + timeRange?: '1h' | '1d' | '7d' | '30d'; + serverId?: number; } +const getTimeRange = (timeRange: '1h' | '1d' | '7d' | '30d' = '1h') => { + const now = new Date(); + switch (timeRange) { + case '1d': + return { + start: new Date(now.getTime() - 24 * 60 * 60 * 1000), + end: now, + intervalMinutes: 15 // 15 minute intervals + }; + case '7d': + return { + start: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000), + end: now, + intervalMinutes: 60 // 1 hour intervals + }; + case '30d': + return { + start: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000), + end: now, + intervalMinutes: 240 // 4 hour intervals + }; + case '1h': + default: + return { + start: new Date(now.getTime() - 60 * 60 * 1000), + end: now, + intervalMinutes: 1 // 1 minute intervals + }; + } +}; + +const getIntervals = (timeRange: '1h' | '1d' | '7d' | '30d' = '1h') => { + const { start, end, intervalMinutes } = getTimeRange(timeRange); + + let intervalCount: number; + switch (timeRange) { + case '1d': + intervalCount = 96; // 24 hours * 4 (15-minute intervals) + break; + case '7d': + intervalCount = 168; // 7 days * 24 hours + break; + case '30d': + intervalCount = 180; // 30 days * 6 (4-hour intervals) + break; + case '1h': + default: + intervalCount = 60; + break; + } + + // Calculate the total time span in minutes + const totalMinutes = Math.floor((end.getTime() - start.getTime()) / (1000 * 60)); + + // Create equally spaced intervals + return Array.from({ length: intervalCount }, (_, i) => { + const minutesFromEnd = Math.floor(i * (totalMinutes / (intervalCount - 1))); + const d = new Date(end.getTime() - minutesFromEnd * 60 * 1000); + return d; + }).reverse(); // Return in chronological order +}; + +const parseUsageValue = (value: string | null): number => { + if (!value) return 0; + return Math.round(parseFloat(value.replace('%', '')) * 100) / 100; +}; + export async function POST(request: NextRequest) { try { const body: GetRequest = await request.json(); const page = Math.max(1, body.page || 1); const ITEMS_PER_PAGE = body.ITEMS_PER_PAGE || 4; + const timeRange = body.timeRange || '1h'; + const serverId = body.serverId; - const hosts = await prisma.server.findMany({ - where: { hostServer: 0 }, - skip: (page - 1) * ITEMS_PER_PAGE, - take: ITEMS_PER_PAGE, - orderBy: { name: 'asc' } - }); + // If serverId is provided, only fetch that specific server + const hostsQuery = serverId + ? { id: serverId } + : { hostServer: 0 }; + + let hosts; + if (!serverId) { + hosts = await prisma.server.findMany({ + where: hostsQuery, + orderBy: { name: 'asc' as Prisma.SortOrder }, + skip: (page - 1) * ITEMS_PER_PAGE, + take: ITEMS_PER_PAGE, + }); + } else { + hosts = await prisma.server.findMany({ + where: hostsQuery, + orderBy: { name: 'asc' as Prisma.SortOrder }, + }); + } + + const { start } = getTimeRange(timeRange); + const intervals = getIntervals(timeRange); const hostsWithVms = await Promise.all( hosts.map(async (host) => { @@ -26,6 +114,87 @@ export async function POST(request: NextRequest) { orderBy: { name: 'asc' } }); + // Get server history for the host + const serverHistory = await prisma.server_history.findMany({ + where: { + serverId: host.id, + createdAt: { + gte: start + } + }, + orderBy: { + createdAt: 'asc' + } + }); + + // Process history data into intervals + const historyMap = new Map(); + + // Initialize intervals + intervals.forEach(date => { + const key = date.toISOString(); + historyMap.set(key, { + cpu: [], + ram: [], + disk: [], + online: [] + }); + }); + + // Group data by interval + serverHistory.forEach(record => { + const recordDate = new Date(record.createdAt); + let nearestInterval: Date = intervals[0]; + let minDiff = Infinity; + + // Find the nearest interval for this record + intervals.forEach(intervalDate => { + const diff = Math.abs(recordDate.getTime() - intervalDate.getTime()); + if (diff < minDiff) { + minDiff = diff; + nearestInterval = intervalDate; + } + }); + + const key = nearestInterval.toISOString(); + const interval = historyMap.get(key); + if (interval) { + interval.cpu.push(parseUsageValue(record.cpuUsage)); + interval.ram.push(parseUsageValue(record.ramUsage)); + interval.disk.push(parseUsageValue(record.diskUsage)); + interval.online.push(record.online); + } + }); + + // Calculate averages for each interval + const historyData = intervals.map(date => { + const key = date.toISOString(); + const data = historyMap.get(key) || { + cpu: [], + ram: [], + disk: [], + online: [] + }; + + const average = (arr: number[]) => + arr.length ? Math.round((arr.reduce((a, b) => a + b, 0) / arr.length) * 100) / 100 : null; + + return { + timestamp: key, + cpu: average(data.cpu), + ram: average(data.ram), + disk: average(data.disk), + online: data.online.length ? + data.online.filter(Boolean).length / data.online.length >= 0.5 + : null + }; + }); + // Add isVM flag to VMs const vmsWithFlag = vms.map(vm => ({ ...vm, @@ -35,17 +204,41 @@ export async function POST(request: NextRequest) { return { ...host, - isVM: false, // Mark as physical server/not a VM - hostedVMs: vmsWithFlag + isVM: false, + hostedVMs: vmsWithFlag, + history: { + labels: intervals.map(d => d.toISOString()), + datasets: { + cpu: intervals.map(d => { + const data = historyMap.get(d.toISOString())?.cpu || []; + return data.length ? Math.round((data.reduce((a, b) => a + b) / data.length) * 100) / 100 : null; + }), + ram: intervals.map(d => { + const data = historyMap.get(d.toISOString())?.ram || []; + return data.length ? Math.round((data.reduce((a, b) => a + b) / data.length) * 100) / 100 : null; + }), + disk: intervals.map(d => { + const data = historyMap.get(d.toISOString())?.disk || []; + return data.length ? Math.round((data.reduce((a, b) => a + b) / data.length) * 100) / 100 : null; + }), + online: intervals.map(d => { + const data = historyMap.get(d.toISOString())?.online || []; + return data.length ? data.filter(Boolean).length / data.length >= 0.5 : null; + }) + } + } }; }) ); - const totalHosts = await prisma.server.count({ - where: { OR: [{ hostServer: 0 }, { hostServer: null }] } - }); - - const maxPage = Math.ceil(totalHosts / ITEMS_PER_PAGE); + // Only calculate maxPage when not requesting a specific server + let maxPage = 1; + if (!serverId) { + const totalHosts = await prisma.server.count({ + where: { OR: [{ hostServer: 0 }, { hostServer: null }] } + }); + maxPage = Math.ceil(totalHosts / ITEMS_PER_PAGE); + } return NextResponse.json({ servers: hostsWithVms, diff --git a/app/dashboard/applications/Applications.tsx b/app/dashboard/applications/Applications.tsx index 1b55709..0e46c10 100644 --- a/app/dashboard/applications/Applications.tsx +++ b/app/dashboard/applications/Applications.tsx @@ -74,6 +74,8 @@ import { TooltipTrigger, } from "@/components/ui/tooltip" import { StatusIndicator } from "@/components/status-indicator"; +import { Toaster } from "@/components/ui/sonner" +import { toast } from "sonner" interface Application { id: number; @@ -152,8 +154,10 @@ export default function Dashboard() { serverId, }); getApplications(); + toast.success("Application added successfully"); } catch (error: any) { console.log(error.response?.data); + toast.error("Failed to add application"); } }; @@ -170,6 +174,7 @@ export default function Dashboard() { setLoading(false); } catch (error: any) { console.log(error.response?.data); + toast.error("Failed to get applications"); } }; @@ -185,8 +190,10 @@ export default function Dashboard() { try { await axios.post("/api/applications/delete", { id }); getApplications(); + toast.success("Application deleted successfully"); } catch (error: any) { console.log(error.response?.data); + toast.error("Failed to delete application"); } }; @@ -215,8 +222,10 @@ export default function Dashboard() { }); getApplications(); setEditId(null); + toast.success("Application edited successfully"); } catch (error: any) { console.log(error.response.data); + toast.error("Failed to edit application"); } }; @@ -280,6 +289,7 @@ export default function Dashboard() { +
Your Applications diff --git a/app/dashboard/servers/Servers.tsx b/app/dashboard/servers/Servers.tsx index a11faef..51de441 100644 --- a/app/dashboard/servers/Servers.tsx +++ b/app/dashboard/servers/Servers.tsx @@ -13,7 +13,7 @@ import { SidebarInset, SidebarProvider, SidebarTrigger } from "@/components/ui/s import { Button } from "@/components/ui/button" import { Plus, - Link, + Link as LinkIcon, MonitorIcon as MonitorCog, FileDigit, Trash2, @@ -26,6 +26,7 @@ import { HardDrive, LucideServer, Copy, + History, } from "lucide-react" import { Card, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { @@ -52,34 +53,51 @@ import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" import Cookies from "js-cookie" -import { useState, useEffect } from "react" +import { useState, useEffect, useRef } from "react" import axios from "axios" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Checkbox } from "@/components/ui/checkbox" import { ScrollArea } from "@/components/ui/scroll-area" import { DynamicIcon } from "lucide-react/dynamic" import { StatusIndicator } from "@/components/status-indicator" +import Chart from 'chart.js/auto' +import NextLink from "next/link" +import { Toaster } from "@/components/ui/sonner" +import { toast } from "sonner" + +interface ServerHistory { + labels: string[]; + datasets: { + cpu: number[]; + ram: number[]; + disk: number[]; + online: boolean[]; + } +} + interface Server { - id: number - name: string - icon: string - host: boolean - hostServer: number | null - os?: string - ip?: string - url?: string - cpu?: string - gpu?: string - ram?: string - disk?: string - hostedVMs?: Server[] - isVM?: boolean - monitoring?: boolean - monitoringURL?: string - online?: boolean - cpuUsage?: number - ramUsage?: number - diskUsage?: number + id: number; + name: string; + icon: string; + host: boolean; + hostServer: number | null; + os?: string; + ip?: string; + url?: string; + cpu?: string; + gpu?: string; + ram?: string; + disk?: string; + hostedVMs?: Server[]; + isVM?: boolean; + monitoring?: boolean; + monitoringURL?: string; + online?: boolean; + cpuUsage: number; + ramUsage: number; + diskUsage: number; + history?: ServerHistory; + port: number; } interface GetServersResponse { @@ -192,8 +210,10 @@ export default function Dashboard() { setMonitoring(false) setMonitoringURL("") getServers() + toast.success("Server added successfully"); } catch (error: any) { console.log(error.response.data) + toast.error("Failed to add server"); } } @@ -209,10 +229,12 @@ export default function Dashboard() { console.log("ID:" + server.id) } setServers(response.data.servers) + console.log(response.data.servers) setMaxPage(response.data.maxPage) setLoading(false) } catch (error: any) { console.log(error.response) + toast.error("Failed to fetch servers"); } } @@ -232,8 +254,10 @@ export default function Dashboard() { try { await axios.post("/api/servers/delete", { id }) getServers() + toast.success("Server deleted successfully"); } catch (error: any) { console.log(error.response.data) + toast.error("Failed to delete server"); } } @@ -276,8 +300,10 @@ export default function Dashboard() { }) getServers() setEditId(null) + toast.success("Server edited successfully"); } catch (error: any) { console.log(error.response.data) + toast.error("Failed to edit server"); } } @@ -288,7 +314,7 @@ export default function Dashboard() { setServers(response.data.results) setMaxPage(1) setIsSearching(false) - } catch (error: any) { + } catch (error: any) { console.error("Search error:", error.response?.data) setIsSearching(false) } @@ -408,6 +434,7 @@ export default function Dashboard() { ); } catch (error) { console.error("Error updating monitoring data:", error); + toast.error("Failed to update monitoring data"); } }; @@ -449,6 +476,7 @@ export default function Dashboard() {
+
Your Servers @@ -544,7 +572,7 @@ export default function Dashboard() { {icon && (
- + {icon}
)} @@ -581,7 +609,7 @@ export default function Dashboard() { data-icon-name={iconName} >
- + {iconName}
@@ -595,7 +623,7 @@ export default function Dashboard() {
- {icon && } + {icon && }
@@ -822,435 +850,925 @@ export default function Dashboard() {
{servers .filter((server) => (searchTerm ? true : server.hostServer === 0)) - .map((server) => ( - - - {server.monitoring && ( -
- -
- )} -
-
-
- -
- {server.icon && } - - {server.icon && "・"} {server.name} - -
- {server.isVM && ( - VM - )} -
- -
- - - OS: {server.os || "-"} - -
-
- - - IP: {server.ip || "Not set"} - -
- - {server.isVM && server.hostServer && ( + .map((server) => { + return ( + + + {server.monitoring && ( +
+ +
+ )} +
+
+
+ +
+ {server.icon && } + + + {server.icon && "・"} {server.name} + + +
+ {server.isVM && ( + VM + )} +
+
- + - Host: {getHostServerName(server.hostServer)} + OS: {server.os || "-"} + +
+
+ + + IP: {server.ip || "Not set"}
- )} -
- -
- -
-

Hardware Information

-
- -
- - - CPU: {server.cpu || "-"} - -
-
- - - GPU: {server.gpu || "-"} - -
-
- - - RAM: {server.ram || "-"} - -
-
- - - Disk: {server.disk || "-"} - -
- - {server.monitoring && server.hostServer === 0 && ( - <> -
- + {server.isVM && server.hostServer && ( +
+ + + Host: {getHostServerName(server.hostServer)} +
+ )} -
-

Resource Usage

-
-
-
-
- - CPU -
- {server.cpuUsage || 0}% -
-
-
80 ? "bg-destructive" : server.cpuUsage && server.cpuUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} - style={{ width: `${server.cpuUsage || 0}%` }} - /> -
-
+
+ +
-
-
-
- - RAM -
- {server.ramUsage || 0}% -
-
-
80 ? "bg-destructive" : server.ramUsage && server.ramUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} - style={{ width: `${server.ramUsage || 0}%` }} - /> -
-
+
+

Hardware Information

+
-
-
-
- - Disk +
+ + + CPU: {server.cpu || "-"} + +
+
+ + + GPU: {server.gpu || "-"} + +
+
+ + + RAM: {server.ram || "-"} + +
+
+ + + Disk: {server.disk || "-"} + +
+ + {server.monitoring && server.hostServer === 0 && ( + <> +
+ +
+ +
+

Resource Usage

+
+
+
+
+ + CPU +
+ {server.cpuUsage || 0}% +
+
+
80 ? "bg-destructive" : server.cpuUsage && server.cpuUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${server.cpuUsage || 0}%` }} + />
- {server.diskUsage || 0}%
-
-
80 ? "bg-destructive" : server.diskUsage && server.diskUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} - style={{ width: `${server.diskUsage || 0}%` }} - /> + +
+
+
+ + RAM +
+ {server.ramUsage || 0}% +
+
+
80 ? "bg-destructive" : server.ramUsage && server.ramUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${server.ramUsage || 0}%` }} + /> +
+
+ +
+
+
+ + Disk +
+ {server.diskUsage || 0}% +
+
+
80 ? "bg-destructive" : server.diskUsage && server.diskUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${server.diskUsage || 0}%` }} + /> +
-
- - )} - + + )} + +
-
-
-
-
-
- {server.url && ( + +
+
+ + + + + {server.url && ( + + + - )} - - - - - - - - Edit Server - - - - General - Hardware - Virtualization - {(!editHostServer || editHostServer === 0) && Monitoring} - - -
-
-
- -
- { - const iconElements = - document.querySelectorAll("[data-edit-icon-item]") - const searchTerm = e.target.value.toLowerCase() +
+ {hostedVM.icon && "・ "} + {hostedVM.name} +
+
+
+ { hostedVM.url && ( + + )} + - iconElements.forEach((el) => { - const iconName = - el.getAttribute("data-icon-name")?.toLowerCase() || "" - if (iconName.includes(searchTerm)) { - ;(el as HTMLElement).style.display = "flex" - } else { - ;(el as HTMLElement).style.display = "none" - } - }) - }} - /> - {Object.entries(iconCategories).map( - ([category, categoryIcons]) => ( -
-
- {category} + + + + + + + Edit VM + + + + General + Hardware + + Virtualization + + + +
+
+
+ +
+ { + const iconElements = + document.querySelectorAll( + "[data-vm-edit-icon-item]", + ) + const searchTerm = + e.target.value.toLowerCase() + + iconElements.forEach((el) => { + const iconName = + el + .getAttribute( + "data-icon-name", + ) + ?.toLowerCase() || "" + if ( + iconName.includes(searchTerm) + ) { + ;( + el as HTMLElement + ).style.display = "flex" + } else { + ;( + el as HTMLElement + ).style.display = "none" + } + }) + }} + /> + {Object.entries(iconCategories).map( + ([category, categoryIcons]) => ( +
+
+ {category} +
+ {categoryIcons.map((iconName) => ( + +
+ + {iconName} +
+
+ ))} +
+ ), + )} + + +
+
+
+ +
+ {editIcon && ( + + )} +
+
+
+
+ + setEditName(e.target.value)} + /> +
+
+ + +
+
+ + setEditIp(e.target.value)} + /> +
+
+ + setEditUrl(e.target.value)} + /> +
+
+
+ + +
+
+ + setEditCpu(e.target.value)} + /> +
+
+ + setEditGpu(e.target.value)} + /> +
+
+ + setEditRam(e.target.value)} + /> +
+
+ + setEditDisk(e.target.value)} + /> +
+
+
+ +
+
+ + setEditHost(checked === true) + } + disabled={ + server.hostedVMs && + server.hostedVMs.length > 0 + } + /> + +
+ {!editHost && ( +
+ + +
+ )} +
+
+
+
+
+ + Cancel + + +
+
+
+
+ +
+ +
+ +
+
+ + + OS: {hostedVM.os || "-"} + +
+
+ + + IP: {hostedVM.ip || "Not set"} + +
+
+ +
+

Hardware Information

+
+ +
+ + + CPU: {hostedVM.cpu || "-"} + +
+
+ + + GPU: {hostedVM.gpu || "-"} + +
+
+ + + RAM: {hostedVM.ram || "-"} + +
+
+ + + Disk: {hostedVM.disk || "-"} + +
+ + {hostedVM.monitoring && ( + <> +
+ +
+ +
+
+
+
+ + CPU +
+ + {hostedVM.cpuUsage || 0}% + +
+
+
80 ? "bg-destructive" : hostedVM.cpuUsage && hostedVM.cpuUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${hostedVM.cpuUsage || 0}%` }} + />
- {categoryIcons.map((iconName) => ( - -
- - {iconName} -
-
- ))}
- ), - )} - - -
+ +
+
+
+ + RAM +
+ + {hostedVM.ramUsage || 0}% + +
+
+
80 ? "bg-destructive" : hostedVM.ramUsage && hostedVM.ramUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${hostedVM.ramUsage || 0}%` }} + /> +
+
+ +
+
+
+ + Disk +
+ + {hostedVM.diskUsage || 0}% + +
+
+
80 ? "bg-destructive" : hostedVM.diskUsage && hostedVM.diskUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${hostedVM.diskUsage || 0}%` }} + /> +
+
+
+ + )} +
+ ))}
-
- -
+ +
+ )} + + + + Close + + + + + View VMs ({server.hostedVMs.length}) + + + )} + + + + + + + + Edit {server.name} + + + + General + Hardware + Virtualization + Monitoring + + +
+
+
+ +
+ setEditName(e.target.value)} - /> -
-
- - -
-
- - setEditIp(e.target.value)} - /> -
-
- - setEditUrl(e.target.value)} - /> -
-
- - -
-
- - setEditCpu(e.target.value)} - /> -
-
- - setEditGpu(e.target.value)} - /> -
-
- - setEditRam(e.target.value)} - /> -
-
- - setEditDisk(e.target.value)} - /> -
-
-
- -
-
- setEditHost(checked === true)} - disabled={server.hostedVMs && server.hostedVMs.length > 0} - /> - -
- {!editHost && ( -
- - { + const iconElements = document.querySelectorAll( + "[data-icon-item]" + ) + const searchTerm = e.target.value.toLowerCase() + + iconElements.forEach((el) => { + const iconName = + el.getAttribute("data-icon-name")?.toLowerCase() || "" + if (iconName.includes(searchTerm)) { + ;(el as HTMLElement).style.display = "flex" + } else { + ;(el as HTMLElement).style.display = "none" + } + }) }} - > - - - - - No host server - {hostServers - .filter((server) => server.id !== editId) - .map((server) => ( - - {server.name} + /> + {Object.entries(iconCategories).map( + ([category, categoryIcons]) => ( +
+
+ {category} +
+ {categoryIcons.map((iconName) => ( + +
+ + {iconName} +
))} - - -
- )} +
+ ) + )} + +
-
- -
-
- setEditMonitoring(checked === true)} - /> - -
- {editMonitoring && ( - <> -
- - setEditMonitoringURL(e.target.value)} - /> -
-
-

Required Server Setup

-

- To enable monitoring, you need to install Glances on your server. Here's an example Docker Compose configuration: -

-
-                                                      {`services:
+                                          
+
+ +
+ {editIcon && } +
+
+
+
+ + setEditName(e.target.value)} + /> +
+
+ + +
+
+ + setEditIp(e.target.value)} + /> +
+
+ + setEditUrl(e.target.value)} + /> +
+
+ + +
+
+ + setEditCpu(e.target.value)} + /> +
+
+ + setEditGpu(e.target.value)} + /> +
+
+ + setEditRam(e.target.value)} + /> +
+
+ + setEditDisk(e.target.value)} + /> +
+
+
+ +
+
+ + setEditHost(checked === true) + } + /> + +
+ {!editHost && ( +
+ + +
+ )} +
+
+ +
+
+ setEditMonitoring(checked === true)} + /> + +
+ {editMonitoring && ( + <> +
+ + setEditMonitoringURL(e.target.value)} + /> +
+
+

Required Server Setup

+

+ To enable monitoring, you need to install Glances on your server. Here's an example Docker Compose configuration: +

+
+                                                {`services:
   glances:
     image: nicolargo/glances:latest
     container_name: glances
@@ -1262,490 +1780,58 @@ export default function Dashboard() {
       - /var/run/docker.sock:/var/run/docker.sock:ro
     environment:
       - GLANCES_OPT=-w --disable-webui`}
-                                                    
-
- - )} +
-
- - - - - Cancel - - - - -
- - {server.hostedVMs && server.hostedVMs.length > 0 && ( + + )} +
+ + + + + + Cancel + + + + + + + + - - Hosted VMs + Delete {server.name} - {server.host && ( -
- -
- {server.hostedVMs?.map((hostedVM) => ( -
-
-
- {hostedVM.icon && ( - - )} -
- {hostedVM.icon && "・ "} - {hostedVM.name} -
-
-
- - - - - - - - - - Edit VM - - - - General - Hardware - - Virtualization - - - -
-
-
- -
- { - const iconElements = - document.querySelectorAll( - "[data-vm-edit-icon-item]", - ) - const searchTerm = - e.target.value.toLowerCase() - - iconElements.forEach((el) => { - const iconName = - el - .getAttribute( - "data-icon-name", - ) - ?.toLowerCase() || "" - if ( - iconName.includes(searchTerm) - ) { - ;( - el as HTMLElement - ).style.display = "flex" - } else { - ;( - el as HTMLElement - ).style.display = "none" - } - }) - }} - /> - {Object.entries(iconCategories).map( - ([category, categoryIcons]) => ( -
-
- {category} -
- {categoryIcons.map((iconName) => ( - -
- - {iconName} -
-
- ))} -
- ), - )} - - -
-
-
- -
- {editIcon && ( - - )} -
-
-
-
- - setEditName(e.target.value)} - /> -
-
- - -
-
- - setEditIp(e.target.value)} - /> -
-
- - setEditUrl(e.target.value)} - /> -
-
-
- - -
-
- - setEditCpu(e.target.value)} - /> -
-
- - setEditGpu(e.target.value)} - /> -
-
- - setEditRam(e.target.value)} - /> -
-
- - setEditDisk(e.target.value)} - /> -
-
-
- -
-
- - setEditHost(checked === true) - } - disabled={ - server.hostedVMs && - server.hostedVMs.length > 0 - } - /> - -
- {!editHost && ( -
- - -
- )} -
-
-
-
-
- - Cancel - - -
-
-
-
- -
- -
- -
-
- - - OS: {hostedVM.os || "-"} - -
-
- - - IP: {hostedVM.ip || "Not set"} - -
-
- -
-

Hardware Information

-
- -
- - - CPU: {hostedVM.cpu || "-"} - -
-
- - - GPU: {hostedVM.gpu || "-"} - -
-
- - - RAM: {hostedVM.ram || "-"} - -
-
- - - Disk: {hostedVM.disk || "-"} - -
- - {hostedVM.monitoring && ( - <> -
- -
- -
-
-
-
- - CPU -
- - {hostedVM.cpuUsage || 0}% - -
-
-
80 ? "bg-destructive" : hostedVM.cpuUsage && hostedVM.cpuUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} - style={{ width: `${hostedVM.cpuUsage || 0}%` }} - /> -
-
- -
-
-
- - RAM -
- - {hostedVM.ramUsage || 0}% - -
-
-
80 ? "bg-destructive" : hostedVM.ramUsage && hostedVM.ramUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} - style={{ width: `${hostedVM.ramUsage || 0}%` }} - /> -
-
- -
-
-
- - Disk -
- - {hostedVM.diskUsage || 0}% - -
-
-
80 ? "bg-destructive" : hostedVM.diskUsage && hostedVM.diskUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} - style={{ width: `${hostedVM.diskUsage || 0}%` }} - /> -
-
-
- - )} -
- ))} -
- -
- )} + Are you sure you want to delete this server? This action cannot be undone. - Close + Cancel + deleteApplication(server.id)} + > + Delete + - )} -
-
+ + Delete server + +
- - - ))} + + ) + })}
) : (
diff --git a/app/dashboard/servers/[server_id]/Server.tsx b/app/dashboard/servers/[server_id]/Server.tsx new file mode 100644 index 0000000..3f00582 --- /dev/null +++ b/app/dashboard/servers/[server_id]/Server.tsx @@ -0,0 +1,735 @@ +"use client" + +import { useEffect, useState } from "react" +import { useParams } from "next/navigation" +import axios from "axios" +import Chart from 'chart.js/auto' +import { AppSidebar } from "@/components/app-sidebar" +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbList, + BreadcrumbPage, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb" +import { SidebarInset, SidebarProvider, SidebarTrigger } from "@/components/ui/sidebar" +import { Separator } from "@/components/ui/separator" +import { Link, Cpu, MicroscopeIcon as Microchip, MemoryStick, HardDrive, MonitorIcon as MonitorCog, FileDigit, History } from "lucide-react" +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" +import { StatusIndicator } from "@/components/status-indicator" +import { DynamicIcon } from "lucide-react/dynamic" +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" +import { ScrollArea } from "@/components/ui/scroll-area" +import { Button } from "@/components/ui/button" +import NextLink from "next/link" + +interface ServerHistory { + labels: string[]; + datasets: { + cpu: (number | null)[]; + ram: (number | null)[]; + disk: (number | null)[]; + online: (boolean | null)[]; + } +} + +interface Server { + id: number; + name: string; + icon: string; + host: boolean; + hostServer: number | null; + os?: string; + ip?: string; + url?: string; + cpu?: string; + gpu?: string; + ram?: string; + disk?: string; + hostedVMs?: Server[]; + isVM?: boolean; + monitoring?: boolean; + monitoringURL?: string; + online?: boolean; + cpuUsage: number; + ramUsage: number; + diskUsage: number; + history?: ServerHistory; + port: number; +} + +interface GetServersResponse { + servers: Server[]; + maxPage: number; +} + +export default function ServerDetail() { + const params = useParams() + const serverId = params.server_id as string + const [server, setServer] = useState(null) + const [timeRange, setTimeRange] = useState<'1h' | '1d' | '7d' | '30d'>('1h') + const [loading, setLoading] = useState(true) + + // Chart references + const cpuChartRef = { current: null as Chart | null } + const ramChartRef = { current: null as Chart | null } + const diskChartRef = { current: null as Chart | null } + + const fetchServerDetails = async () => { + try { + setLoading(true) + const response = await axios.post("/api/servers/get", { + serverId: parseInt(serverId), + timeRange: timeRange + }) + + if (response.data.servers && response.data.servers.length > 0) { + setServer(response.data.servers[0]) + } + setLoading(false) + } catch (error) { + console.error("Failed to fetch server details:", error) + setLoading(false) + } + } + + useEffect(() => { + fetchServerDetails() + }, [serverId, timeRange]) + + useEffect(() => { + if (!server || !server.history) return; + + // Clean up existing charts + if (cpuChartRef.current) cpuChartRef.current.destroy(); + if (ramChartRef.current) ramChartRef.current.destroy(); + if (diskChartRef.current) diskChartRef.current.destroy(); + + // Wait for DOM to be ready + const initTimer = setTimeout(() => { + const history = server.history as ServerHistory; + + // Format time labels based on the selected time range + const timeLabels = history.labels.map((date: string) => { + const d = new Date(date) + if (timeRange === '1h') { + return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) + } else if (timeRange === '1d') { + // For 1 day, show hours and minutes + return d.toLocaleTimeString([], { + hour: '2-digit', + minute: '2-digit' + }) + } else if (timeRange === '7d') { + // For 7 days, show day and time + return d.toLocaleDateString([], { + weekday: 'short', + month: 'numeric', + day: 'numeric' + }) + ' ' + d.toLocaleTimeString([], { + hour: '2-digit' + }) + } else { + // For 30 days + return d.toLocaleDateString([], { + month: 'numeric', + day: 'numeric' + }) + } + }) + + // Create a time range title for the chart + const getRangeTitle = () => { + const now = new Date() + const startDate = new Date(history.labels[0]) + + if (timeRange === '1h') { + return `Last Hour (${startDate.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} - ${now.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })})` + } else if (timeRange === '1d') { + return `Last 24 Hours (${startDate.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} - ${now.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })})` + } else if (timeRange === '7d') { + return `Last 7 Days (${startDate.toLocaleDateString([], { month: 'short', day: 'numeric' })} - ${now.toLocaleDateString([], { month: 'short', day: 'numeric' })})` + } else { + return `Last 30 Days (${startDate.toLocaleDateString([], { month: 'short', day: 'numeric' })} - ${now.toLocaleDateString([], { month: 'short', day: 'numeric' })})` + } + } + + // Directly hardcode the y-axis maximum in each chart option + const commonOptions = { + responsive: true, + maintainAspectRatio: false, + interaction: { + mode: 'nearest' as const, + axis: 'x' as const, + intersect: false + }, + scales: { + y: { + min: 0, + max: 100, + beginAtZero: true, + ticks: { + stepSize: 25, + autoSkip: false, + callback: function(value: any) { + return value + '%'; + } + }, + title: { + display: true, + text: 'Usage %' + } + }, + x: { + grid: { + display: false + } + } + }, + elements: { + point: { + radius: 0 + }, + line: { + tension: 0.4, + spanGaps: true + } + } + }; + + // Create charts with very explicit y-axis max values + const cpuCanvas = document.getElementById(`cpu-chart`) as HTMLCanvasElement + if (cpuCanvas) { + cpuChartRef.current = new Chart(cpuCanvas, { + type: 'line', + data: { + labels: timeLabels, + datasets: [{ + label: 'CPU Usage', + data: history.datasets.cpu, + borderColor: 'rgb(75, 192, 192)', + backgroundColor: 'rgba(75, 192, 192, 0.1)', + fill: true, + spanGaps: false + }] + }, + options: { + ...commonOptions, + plugins: { + title: { + display: true, + text: 'CPU Usage History', + font: { + size: 14 + } + }, + tooltip: { + callbacks: { + title: function(tooltipItems: any) { + return timeLabels[tooltipItems[0].dataIndex]; + } + } + }, + legend: { + display: false + } + }, + scales: { + ...commonOptions.scales, + y: { + ...commonOptions.scales.y, + max: 100 // Force this to ensure it's applied + } + } + } + }) + } + + const ramCanvas = document.getElementById(`ram-chart`) as HTMLCanvasElement + if (ramCanvas) { + ramChartRef.current = new Chart(ramCanvas, { + type: 'line', + data: { + labels: timeLabels, + datasets: [{ + label: 'RAM Usage', + data: history.datasets.ram, + borderColor: 'rgb(153, 102, 255)', + backgroundColor: 'rgba(153, 102, 255, 0.1)', + fill: true, + spanGaps: false + }] + }, + options: { + ...commonOptions, + plugins: { + title: { + display: true, + text: 'RAM Usage History', + font: { + size: 14 + } + }, + tooltip: { + callbacks: { + title: function(tooltipItems: any) { + return timeLabels[tooltipItems[0].dataIndex]; + } + } + }, + legend: { + display: false + } + }, + scales: { + ...commonOptions.scales, + y: { + ...commonOptions.scales.y, + max: 100 // Force this to ensure it's applied + } + } + } + }) + } + + const diskCanvas = document.getElementById(`disk-chart`) as HTMLCanvasElement + if (diskCanvas) { + diskChartRef.current = new Chart(diskCanvas, { + type: 'line', + data: { + labels: timeLabels, + datasets: [{ + label: 'Disk Usage', + data: history.datasets.disk, + borderColor: 'rgb(255, 159, 64)', + backgroundColor: 'rgba(255, 159, 64, 0.1)', + fill: true, + spanGaps: false + }] + }, + options: { + ...commonOptions, + plugins: { + title: { + display: true, + text: 'Disk Usage History', + font: { + size: 14 + } + }, + tooltip: { + callbacks: { + title: function(tooltipItems: any) { + return timeLabels[tooltipItems[0].dataIndex]; + } + } + }, + legend: { + display: false + } + }, + scales: { + ...commonOptions.scales, + y: { + ...commonOptions.scales.y, + max: 100 // Force this to ensure it's applied + } + } + } + }) + } + }, 100); + + return () => { + clearTimeout(initTimer); + if (cpuChartRef.current) cpuChartRef.current.destroy(); + if (ramChartRef.current) ramChartRef.current.destroy(); + if (diskChartRef.current) diskChartRef.current.destroy(); + }; + }, [server, timeRange]); + + // Function to refresh data + const refreshData = () => { + fetchServerDetails() + } + + return ( + + + +
+
+ + + + + + / + + + + My Infrastructure + + + + + Servers + + + {server && ( + <> + + + {server.name} + + + )} + + +
+
+ +
+ {loading ? ( +
+
+ + + + + + + + + + + Loading... +
+
+ ) : server ? ( +
+ {/* Server header card */} + + +
+
+ {server.icon && } +
+ + {server.name} + + + {server.os || "No OS specified"} • {server.isVM ? "Virtual Machine" : "Physical Server"} + {server.isVM && server.hostServer && ( + <> • Hosted on {server.hostedVMs?.[0]?.name} + )} + +
+
+
+ {server.monitoring && ( +
+ +
+ )} +
+ +
+
+

Hardware

+
+
CPU:
+
{server.cpu || "-"}
+
GPU:
+
{server.gpu || "-"}
+
RAM:
+
{server.ram || "-"}
+
Disk:
+
{server.disk || "-"}
+
+
+ +
+

Network

+
+
IP Address:
+
{server.ip || "-"}
+
Management URL:
+
+ {server.url ? ( + + {server.url} + + ) : ( + "-" + )} +
+
+
+ + {server.monitoring && ( +
+

Current Usage

+
+
CPU Usage:
+
+
+
80 ? "bg-destructive" : server.cpuUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${server.cpuUsage}%` }} + /> +
+ {server.cpuUsage}% +
+
RAM Usage:
+
+
+
80 ? "bg-destructive" : server.ramUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${server.ramUsage}%` }} + /> +
+ {server.ramUsage}% +
+
Disk Usage:
+
+
+
80 ? "bg-destructive" : server.diskUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${server.diskUsage}%` }} + /> +
+ {server.diskUsage}% +
+
+
+ )} +
+ + + + {/* Charts */} + {server.monitoring && server.history && ( +
+ + +
+
+ Resource Usage History + + {timeRange === '1h' + ? 'Last hour, per minute' + : timeRange === '1d' + ? 'Last 24 hours, 15-minute intervals' + : timeRange === '7d' + ? 'Last 7 days, hourly intervals' + : 'Last 30 days, 4-hour intervals'} + +
+
+ + +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ )} + + {/* Virtual Machines */} + {server.hostedVMs && server.hostedVMs.length > 0 && ( + + + Virtual Machines + Virtual machines hosted on this server + + +
+ {server.hostedVMs.map((hostedVM) => ( +
+
+
+ {hostedVM.icon && ( + + )} + +
+ {hostedVM.icon && "・ "} + {hostedVM.name} +
+
+
+ {hostedVM.monitoring && ( + + )} +
+ +
+ +
+ +
+
+ + + OS: {hostedVM.os || "-"} + +
+
+ + + IP: {hostedVM.ip || "Not set"} + +
+
+ +
+

Hardware Information

+
+ +
+ + + CPU: {hostedVM.cpu || "-"} + +
+
+ + + GPU: {hostedVM.gpu || "-"} + +
+
+ + + RAM: {hostedVM.ram || "-"} + +
+
+ + + Disk: {hostedVM.disk || "-"} + +
+ + {hostedVM.monitoring && ( + <> +
+ +
+ +
+
+
+
+ + CPU +
+ + {hostedVM.cpuUsage || 0}% + +
+
+
80 ? "bg-destructive" : hostedVM.cpuUsage && hostedVM.cpuUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${hostedVM.cpuUsage || 0}%` }} + /> +
+
+ +
+
+
+ + RAM +
+ + {hostedVM.ramUsage || 0}% + +
+
+
80 ? "bg-destructive" : hostedVM.ramUsage && hostedVM.ramUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${hostedVM.ramUsage || 0}%` }} + /> +
+
+ +
+
+
+ + Disk +
+ + {hostedVM.diskUsage || 0}% + +
+
+
80 ? "bg-destructive" : hostedVM.diskUsage && hostedVM.diskUsage > 60 ? "bg-amber-500" : "bg-emerald-500"}`} + style={{ width: `${hostedVM.diskUsage || 0}%` }} + /> +
+
+
+ + )} +
+ ))} +
+ + + )} +
+ ) : ( +
+

Server not found

+

The requested server could not be found or you don't have permission to view it.

+
+ )} +
+ + + ) +} diff --git a/app/dashboard/servers/[server_id]/page.tsx b/app/dashboard/servers/[server_id]/page.tsx new file mode 100644 index 0000000..b32648c --- /dev/null +++ b/app/dashboard/servers/[server_id]/page.tsx @@ -0,0 +1,59 @@ +"use client"; + +import { useEffect, useState } from "react"; +import Cookies from "js-cookie"; +import { useRouter } from "next/navigation"; +import ServerDetail from "./Server" +import axios from "axios"; + +export default function DashboardPage() { + const router = useRouter(); + const [isAuthChecked, setIsAuthChecked] = useState(false); + const [isValid, setIsValid] = useState(false); + + useEffect(() => { + const token = Cookies.get("token"); + if (!token) { + router.push("/"); + } else { + const checkToken = async () => { + try { + const response = await axios.post("/api/auth/validate", { + token: token, + }); + + if (response.status === 200) { + setIsValid(true); + } + } catch (error: any) { + Cookies.remove("token"); + router.push("/"); + } + } + checkToken(); + } + setIsAuthChecked(true); + }, [router]); + + if (!isAuthChecked) { + return ( +
+
+ + + + + + + + + + + Loading... +
+
+ ) + } + + return isValid ? : null; +} \ No newline at end of file diff --git a/app/dashboard/settings/Settings.tsx b/app/dashboard/settings/Settings.tsx index 17bb44e..3d37a72 100644 --- a/app/dashboard/settings/Settings.tsx +++ b/app/dashboard/settings/Settings.tsx @@ -19,7 +19,9 @@ import axios from "axios" import Cookies from "js-cookie" import { Button } from "@/components/ui/button" import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" -import { AlertCircle, Check, Palette, User, Bell, AtSign, Send, MessageSquare, Trash2 } from "lucide-react" +import { AlertCircle, Check, Palette, User, Bell, AtSign, Send, MessageSquare, Trash2, Play } from "lucide-react" +import { Toaster } from "@/components/ui/sonner" +import { toast } from "sonner" import { AlertDialog, @@ -254,6 +256,17 @@ export default function Settings() { getNotificationText() }, []) + const testNotification = async (id: number) => { + try { + const response = await axios.post("/api/notifications/test", { + notificationId: id, + }) + toast.success("Notification will be sent in a few seconds.") + } catch (error: any) { + toast.error(error.response.data.error) + } + } + return ( @@ -763,15 +776,25 @@ export default function Settings() {

- +
+ + +
)) ) : ( @@ -789,6 +812,7 @@ export default function Settings() { )}
+
diff --git a/app/dashboard/uptime/Uptime.tsx b/app/dashboard/uptime/Uptime.tsx index 6bc8d7e..74af4e6 100644 --- a/app/dashboard/uptime/Uptime.tsx +++ b/app/dashboard/uptime/Uptime.tsx @@ -34,14 +34,18 @@ const timeFormats = { minute: '2-digit', hour12: false }), - 2: (timestamp: string) => { - const start = new Date(timestamp); - const end = new Date(start.getTime() + 3 * 60 * 60 * 1000); - return `${start.toLocaleDateString([], { day: '2-digit', month: 'short' })} - ${start.getHours().toString().padStart(2, '0')}:00 - - ${end.getHours().toString().padStart(2, '0')}:00`; - }, + 2: (timestamp: string) => + new Date(timestamp).toLocaleTimeString([], { + hour: '2-digit', + minute: '2-digit', + hour12: false + }), 3: (timestamp: string) => + new Date(timestamp).toLocaleDateString([], { + day: '2-digit', + month: 'short' + }), + 4: (timestamp: string) => new Date(timestamp).toLocaleDateString([], { day: '2-digit', month: 'short' @@ -49,9 +53,10 @@ const timeFormats = { }; const minBoxWidths = { - 1: 24, - 2: 24, - 3: 24 + 1: 20, + 2: 20, + 3: 24, + 4: 24 }; interface UptimeData { @@ -72,7 +77,7 @@ interface PaginationData { export default function Uptime() { const [data, setData] = useState([]); - const [timespan, setTimespan] = useState<1 | 2 | 3>(1); + const [timespan, setTimespan] = useState<1 | 2 | 3 | 4>(1); const [pagination, setPagination] = useState({ currentPage: 1, totalPages: 1, @@ -153,7 +158,7 @@ export default function Uptime() {
@@ -219,18 +225,14 @@ export default function Uptime() { >

- {timespan === 2 ? ( - timeFormats[2](entry.timestamp) - ) : ( - new Date(entry.timestamp).toLocaleString([], { - year: 'numeric', - month: 'short', - day: 'numeric', - hour: '2-digit', - minute: timespan === 3 ? undefined : '2-digit', - hour12: false - }) - )} + {new Date(entry.timestamp).toLocaleString([], { + year: 'numeric', + month: 'short', + day: timespan > 2 ? 'numeric' : undefined, + hour: '2-digit', + minute: timespan === 1 ? '2-digit' : undefined, + hour12: false + })}

{entry.missing diff --git a/components/ui/sonner.tsx b/components/ui/sonner.tsx new file mode 100644 index 0000000..957524e --- /dev/null +++ b/components/ui/sonner.tsx @@ -0,0 +1,25 @@ +"use client" + +import { useTheme } from "next-themes" +import { Toaster as Sonner, ToasterProps } from "sonner" + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme() + + return ( + + ) +} + +export { Toaster } diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 22a27ab..0bae6a3 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -19,7 +19,7 @@ export default defineConfig({ footer: { message: 'Released under the MIT License.', - copyright: 'Copyright © 2025-present CoreControl' + copyright: 'Copyright © 2025-present CoreControl', }, search: { @@ -53,12 +53,14 @@ export default defineConfig({ { text: 'Discord', link: '/notifications/Discord' }, { text: 'Gotify', link: '/notifications/Gotify' }, { text: 'Ntfy', link: '/notifications/Ntfy' }, + { text: 'Pushover', link: '/notifications/Pushover' }, ] } ], socialLinks: [ - { icon: 'github', link: 'https://github.com/crocofied/corecontrol' } + { icon: 'github', link: 'https://github.com/crocofied/corecontrol' }, + { icon: 'buymeacoffee', link: 'https://www.buymeacoffee.com/corecontrol' } ] } }) diff --git a/docs/.vitepress/dist/404.html b/docs/.vitepress/dist/404.html index f459cda..290dbd9 100644 --- a/docs/.vitepress/dist/404.html +++ b/docs/.vitepress/dist/404.html @@ -8,8 +8,8 @@ - - + + diff --git a/docs/.vitepress/dist/assets/app.CZwi0YgD.js b/docs/.vitepress/dist/assets/app.DQZaLSC2.js similarity index 95% rename from docs/.vitepress/dist/assets/app.CZwi0YgD.js rename to docs/.vitepress/dist/assets/app.DQZaLSC2.js index 3fa60fc..fced0ec 100644 --- a/docs/.vitepress/dist/assets/app.CZwi0YgD.js +++ b/docs/.vitepress/dist/assets/app.DQZaLSC2.js @@ -1 +1 @@ -import{t as p}from"./chunks/theme.CkdfpqM_.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.DPDPlp3K.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; +import{t as p}from"./chunks/theme.BTnOYcHU.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.DPDPlp3K.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/docs/.vitepress/dist/assets/chunks/@localSearchIndexroot.Bz_0HfKH.js b/docs/.vitepress/dist/assets/chunks/@localSearchIndexroot.Bz_0HfKH.js deleted file mode 100644 index 9c7692b..0000000 --- a/docs/.vitepress/dist/assets/chunks/@localSearchIndexroot.Bz_0HfKH.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":33,"nextId":33,"documentIds":{"0":"/general/Applications#applications","1":"/general/Applications#add-an-application","2":"/general/Applications#application-display","3":"/general/Dashboard#dashboard","4":"/general/Dashboard#cards-overview","5":"/general/Dashboard#servers-card","6":"/general/Dashboard#applications-card","7":"/general/Dashboard#uptime-card","8":"/general/Dashboard#network-card","9":"/general/Network#network","10":"/general/Servers#servers","11":"/general/Servers#add-a-server","12":"/general/Servers#general-tab","13":"/general/Servers#hardware-tab","14":"/general/Servers#virtualization-tab","15":"/general/Servers#monitoring-tab","16":"/general/Servers#monitoring","17":"/general/Servers#server-display","18":"/general/Servers#vms","19":"/general/Settings#settings","20":"/general/Settings#user-settings","21":"/general/Settings#theme-settings","22":"/general/Settings#notification-settings","23":"/installation#installation","24":"/installation#docker-compose-installation","25":"/installation#authentication","26":"/general/Uptime#uptime","27":"/notifications/Discord#discord","28":"/notifications/Email#email","29":"/notifications/General#notifications","30":"/notifications/Telegram#telegram","31":"/notifications/Ntfy#ntfy","32":"/notifications/Gotify#gotify"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,9],"1":[3,1,74],"2":[2,1,20],"3":[1,1,16],"4":[2,1,16],"5":[2,3,16],"6":[2,3,13],"7":[2,3,9],"8":[2,3,10],"9":[1,1,45],"10":[1,1,16],"11":[3,1,29],"12":[2,4,33],"13":[2,4,25],"14":[2,4,37],"15":[2,4,23],"16":[1,1,93],"17":[2,1,51],"18":[1,1,23],"19":[1,1,10],"20":[2,1,1],"21":[2,1,1],"22":[2,1,1],"23":[1,1,14],"24":[3,1,112],"25":[1,1,36],"26":[1,1,29],"27":[1,1,1],"28":[1,1,1],"29":[1,1,31],"30":[1,1,1],"31":[1,1,1],"32":[1,1,1]},"averageFieldLength":[1.606060606060606,1.606060606060606,24.181818181818183],"storedFields":{"0":{"title":"Applications","titles":[]},"1":{"title":"Add an application","titles":["Applications"]},"2":{"title":"Application Display","titles":["Applications"]},"3":{"title":"Dashboard","titles":[]},"4":{"title":"Cards Overview","titles":["Dashboard"]},"5":{"title":"Servers Card","titles":["Dashboard","Cards Overview"]},"6":{"title":"Applications Card","titles":["Dashboard","Cards Overview"]},"7":{"title":"Uptime Card","titles":["Dashboard","Cards Overview"]},"8":{"title":"Network Card","titles":["Dashboard","Cards Overview"]},"9":{"title":"Network","titles":[]},"10":{"title":"Servers","titles":[]},"11":{"title":"Add a Server","titles":["Servers"]},"12":{"title":"General Tab","titles":["Servers","Add a Server"]},"13":{"title":"Hardware Tab","titles":["Servers","Add a Server"]},"14":{"title":"Virtualization Tab","titles":["Servers","Add a Server"]},"15":{"title":"Monitoring Tab","titles":["Servers","Add a Server"]},"16":{"title":"Monitoring","titles":["Servers"]},"17":{"title":"Server Display","titles":["Servers"]},"18":{"title":"VMs","titles":["Servers"]},"19":{"title":"Settings","titles":[]},"20":{"title":"User Settings","titles":["Settings"]},"21":{"title":"Theme Settings","titles":["Settings"]},"22":{"title":"Notification Settings","titles":["Settings"]},"23":{"title":"Installation","titles":[]},"24":{"title":"Docker Compose Installation","titles":["Installation"]},"25":{"title":"Authentication","titles":["Installation"]},"26":{"title":"Uptime","titles":[]},"27":{"title":"Discord","titles":[]},"28":{"title":"Email","titles":[]},"29":{"title":"Notifications","titles":[]},"30":{"title":"Telegram","titles":[]},"31":{"title":"Ntfy","titles":[]},"32":{"title":"Gotify","titles":[]}},"dirtCount":0,"index":[["7",{"2":{"26":1}}],["30",{"2":{"26":1}}],["30min",{"2":{"26":1}}],["3000",{"2":{"24":3}}],["10",{"2":{"24":1}}],["17",{"2":{"24":1}}],["2s",{"2":{"24":2}}],["5432",{"2":{"24":2}}],["jwtsecret",{"2":{"24":1}}],["jwt",{"2":{"24":2}}],["61208",{"2":{"16":3}}],["yml",{"2":{"24":1}}],["yamlservices",{"2":{"16":1,"24":1}}],["you",{"2":{"6":1,"10":1,"16":6,"17":1,"18":1,"19":1,"25":1,"26":1,"29":2}}],["your",{"2":{"0":1,"1":2,"2":1,"3":1,"4":1,"5":1,"6":1,"9":1,"10":1,"12":1,"16":1,"17":1,"24":1,"25":1,"26":1}}],["var",{"2":{"16":2,"24":1}}],["volumes",{"2":{"16":1,"24":2}}],["vmware",{"2":{"14":1}}],["vm",{"2":{"9":1,"14":2}}],["vms",{"0":{"18":1},"2":{"9":2,"18":3}}],["virtualization",{"0":{"14":1},"2":{"14":1}}],["virtual",{"2":{"5":1,"14":2}}],["via",{"2":{"1":1}}],["4",{"2":{"4":1}}],["quick",{"2":{"3":1}}],["quot",{"2":{"1":4,"11":2,"14":2,"15":4}}],["gotify",{"0":{"32":1}}],["goes",{"2":{"29":2}}],["g",{"2":{"24":1}}],["gt",{"2":{"16":1}}],["glances",{"2":{"16":8}}],["graphics",{"2":{"13":1}}],["grid",{"2":{"2":1,"17":1}}],["gpu",{"2":{"13":1}}],["generate",{"2":{"24":2}}],["generated",{"2":{"9":1}}],["general",{"0":{"12":1}}],["get",{"2":{"3":1}}],["make",{"2":{"16":1,"24":1}}],["machine",{"2":{"14":1}}],["machines",{"2":{"14":1}}],["manage",{"2":{"12":1,"19":1}}],["management",{"2":{"12":1,"17":1}}],["main",{"2":{"9":2}}],["my",{"2":{"9":1}}],["monitor",{"2":{"16":1}}],["monitoring",{"0":{"15":1,"16":1},"2":{"4":1,"15":2,"16":2}}],["model",{"2":{"13":1}}],["more",{"2":{"10":1}}],["most",{"2":{"3":1}}],["menu",{"2":{"1":1,"10":1,"11":1,"17":1,"26":1}}],["lt",{"2":{"16":1}}],["latest",{"2":{"16":1,"24":2}}],["lib",{"2":{"24":1}}],["link",{"2":{"17":1}}],["like",{"2":{"14":1}}],["listed",{"2":{"9":1}}],["list",{"2":{"2":1,"17":1,"18":1,"26":1}}],["logging",{"2":{"25":1}}],["login",{"2":{"25":1}}],["logical",{"2":{"14":1}}],["logo",{"2":{"1":2}}],["localhost",{"2":{"24":1}}],["local",{"2":{"1":3}}],["long",{"2":{"1":1}}],["example",{"2":{"25":1}}],["email",{"0":{"28":1},"2":{"25":1}}],["early",{"2":{"24":1}}],["easiest",{"2":{"23":1}}],["each",{"2":{"2":1,"17":2}}],["edit",{"2":{"17":1}}],["end",{"2":{"17":1}}],["environment",{"2":{"16":1,"24":4}}],["enable",{"2":{"14":1,"16":1}}],["enter",{"2":{"1":4,"12":2,"13":2}}],["e",{"2":{"1":1,"24":1}}],["u",{"2":{"24":1}}],["unless",{"2":{"16":1}}],["use",{"2":{"24":1}}],["user",{"0":{"20":1},"2":{"24":1}}],["used",{"2":{"1":1,"12":1}}],["using",{"2":{"18":1,"23":1}}],["usage",{"2":{"16":1}}],["up",{"2":{"15":1,"24":2}}],["uptime",{"0":{"7":1,"26":1},"2":{"1":1,"7":1,"26":1}}],["url",{"2":{"1":7,"12":2,"16":2,"17":1,"24":2}}],["pg",{"2":{"24":1}}],["password",{"2":{"24":1,"25":2}}],["page",{"2":{"9":1}}],["pid",{"2":{"16":1}}],["postgres",{"2":{"24":16}}],["postgresql",{"2":{"24":3}}],["ports",{"2":{"16":1,"24":1}}],["pointing",{"2":{"1":1}}],["please",{"2":{"16":2}}],["placeholders",{"2":{"29":1}}],["place",{"2":{"3":1}}],["production",{"2":{"24":1}}],["proxmox",{"2":{"14":1}}],["provides",{"2":{"7":1}}],["provide",{"2":{"4":1}}],["perfect",{"2":{"14":1}}],["physical",{"2":{"5":1}}],["public",{"2":{"1":2}}],["bashdocker",{"2":{"24":1}}],["basic",{"2":{"12":1}}],["based",{"2":{"9":1}}],["between",{"2":{"14":1}}],["below",{"2":{"9":1}}],["be",{"2":{"1":2,"16":1}}],["buttons",{"2":{"17":1}}],["button",{"2":{"1":2,"11":1,"17":3,"18":1}}],["when",{"2":{"17":1,"29":2}}],["which",{"2":{"1":2,"9":1}}],["way",{"2":{"23":1}}],["warning",{"2":{"16":1,"25":1}}],["want",{"2":{"16":1}}],["w",{"2":{"16":1}}],["web",{"2":{"24":1}}],["webui",{"2":{"16":1}}],["we",{"2":{"16":1}}],["will",{"2":{"1":2,"14":1,"16":1}}],["with",{"2":{"1":1,"16":1,"17":3,"24":4,"25":1,"26":1,"29":1}}],["random",{"2":{"24":2}}],["ram",{"2":{"13":2}}],["ro",{"2":{"16":1}}],["run",{"2":{"16":2}}],["running",{"2":{"1":1,"6":1,"9":3}}],["reasons",{"2":{"25":1}}],["reach",{"2":{"16":1}}],["retries",{"2":{"24":1}}],["replace",{"2":{"24":1}}],["recommended",{"2":{"24":1,"25":1}}],["restart",{"2":{"16":1,"24":1}}],["respective",{"2":{"9":1}}],["refer",{"2":{"16":1}}],["required",{"2":{"1":1,"10":1,"15":1}}],["right",{"2":{"1":1,"9":1,"11":1}}],["improve",{"2":{"29":1}}],["important",{"2":{"3":1}}],["immediately",{"2":{"25":1}}],["image",{"2":{"16":1,"24":3}}],["ip",{"2":{"12":2,"16":1}}],["if",{"2":{"9":1,"10":1,"13":1,"14":2,"16":1,"18":1}}],["it",{"2":{"9":2,"24":1,"25":1}}],["its",{"2":{"2":1,"14":1,"17":1}}],["i",{"2":{"1":1}}],["icon",{"2":{"1":1,"12":2}}],["isready",{"2":{"24":1}}],["is",{"2":{"1":2,"3":1,"4":1,"9":2,"14":1,"23":1,"24":4,"25":1,"26":1}}],["include",{"2":{"29":1}}],["including",{"2":{"5":1}}],["interval",{"2":{"24":1}}],["into",{"2":{"4":1}}],["installed",{"2":{"24":1}}],["installation",{"0":{"23":1,"24":1},"1":{"24":1,"25":1}}],["install",{"2":{"16":1,"23":1}}],["infrastrucutre",{"2":{"9":1}}],["infrastructure",{"2":{"3":1,"4":1,"6":1,"9":1}}],["information",{"2":{"1":2,"5":1,"12":1,"15":2}}],["in",{"2":{"1":2,"2":2,"10":1,"11":1,"16":3,"17":2,"18":1,"24":1,"25":2,"26":1,"29":1}}],["ntfy",{"0":{"31":1}}],["now",{"2":{"24":1}}],["not",{"2":{"24":1}}],["notifications",{"0":{"29":1},"2":{"29":2}}],["notification",{"0":{"22":1},"2":{"29":1}}],["node",{"2":{"9":1}}],["nicolargo",{"2":{"16":1}}],["number",{"2":{"5":2,"6":1,"7":1}}],["need",{"2":{"16":1}}],["next",{"2":{"9":1}}],["network",{"0":{"8":1,"9":1},"2":{"1":1,"8":1,"9":1}}],["new",{"2":{"1":1,"11":1}}],["named",{"2":{"24":1}}],["name",{"2":{"1":2,"12":2,"16":1}}],["d",{"2":{"24":2}}],["db",{"2":{"24":5}}],["days",{"2":{"26":2}}],["data",{"2":{"24":3}}],["database",{"2":{"24":2}}],["danger",{"2":{"24":1}}],["dashboard",{"0":{"3":1},"1":{"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"3":1,"4":1}}],["docker",{"0":{"24":1},"2":{"16":2,"23":1,"24":4}}],["docs",{"2":{"16":1}}],["done",{"2":{"16":1}}],["direct",{"2":{"17":1,"29":1}}],["directly",{"2":{"9":1}}],["discord",{"0":{"27":1}}],["disable",{"2":{"16":1}}],["disk",{"2":{"13":1}}],["displays",{"2":{"5":1,"8":1}}],["display",{"0":{"2":1,"17":1},"2":{"2":1,"17":1,"18":1}}],["displayed",{"2":{"0":1,"2":1,"9":1,"17":1,"18":1}}],["different",{"2":{"4":1}}],["divided",{"2":{"4":1}}],["default",{"2":{"25":2}}],["depends",{"2":{"24":1}}],["depending",{"2":{"2":1,"17":1}}],["development",{"2":{"24":1}}],["deletion",{"2":{"17":1}}],["delete",{"2":{"17":1}}],["detailed",{"2":{"15":1,"16":1}}],["details",{"2":{"1":1,"11":1,"13":1}}],["descriptive",{"2":{"12":1}}],["description",{"2":{"1":2}}],["open",{"2":{"17":1}}],["operating",{"2":{"12":2}}],["opt=",{"2":{"16":1}}],["options",{"2":{"15":1}}],["optional",{"2":{"12":1}}],["overview",{"0":{"4":1},"1":{"5":1,"6":1,"7":1,"8":1},"2":{"3":1}}],["own",{"2":{"2":1,"17":1}}],["or",{"2":{"1":1,"2":1,"14":1,"17":1,"24":1,"29":2}}],["one",{"2":{"17":1}}],["online",{"2":{"7":1,"29":2}}],["only",{"2":{"1":1}}],["on",{"2":{"1":1,"2":1,"9":5,"16":1,"17":1,"24":2}}],["out",{"2":{"1":2,"11":1,"15":1}}],["offline",{"2":{"29":2}}],["of",{"2":{"1":6,"3":1,"4":1,"5":2,"6":1,"7":1,"8":1,"9":2,"11":1,"13":1,"16":3,"17":3,"19":1,"24":1,"26":1}}],["first",{"2":{"25":1}}],["filter",{"2":{"26":1}}],["file",{"2":{"24":1}}],["filling",{"2":{"1":1,"15":1}}],["fill",{"2":{"1":1,"11":1}}],["format",{"2":{"16":1}}],["for",{"2":{"12":2,"14":1,"15":1,"16":1,"24":1,"25":1,"29":1}}],["following",{"2":{"1":1,"11":1,"24":2}}],["follow",{"2":{"1":1,"11":1,"23":1}}],["flowchart",{"2":{"9":1}}],["flash",{"2":{"1":1}}],["credentials",{"2":{"25":1}}],["creating",{"2":{"17":1}}],["create",{"2":{"24":1}}],["created",{"2":{"16":1}}],["creates",{"2":{"14":1}}],["cmd",{"2":{"24":1}}],["change",{"2":{"24":1,"25":2}}],["choose",{"2":{"12":1}}],["clear",{"2":{"26":1}}],["clearly",{"2":{"18":1}}],["click",{"2":{"1":2,"11":1,"15":1,"17":1}}],["cpu",{"2":{"13":2}}],["customize",{"2":{"17":1,"29":1}}],["customizations",{"2":{"16":1}}],["custom",{"2":{"12":1,"24":1}}],["capacity",{"2":{"13":1}}],["can",{"2":{"10":1,"16":2,"17":1,"18":1,"19":1,"25":1,"26":1,"29":2}}],["cards",{"0":{"4":1},"1":{"5":1,"6":1,"7":1,"8":1},"2":{"4":1}}],["card",{"0":{"5":1,"6":1,"7":1,"8":1},"2":{"2":1,"5":1,"6":1,"7":1,"8":1,"13":1,"17":2}}],["comes",{"2":{"25":1}}],["command",{"2":{"24":1}}],["com",{"2":{"24":1,"25":1}}],["complete",{"2":{"19":1}}],["compose",{"0":{"24":1},"2":{"16":1,"23":1,"24":4}}],["copy",{"2":{"16":1}}],["condition",{"2":{"24":1}}],["content",{"2":{"24":1}}],["contains",{"2":{"18":1}}],["container",{"2":{"16":1}}],["configuration",{"2":{"13":1}}],["configure",{"2":{"12":1,"14":1}}],["connection",{"2":{"14":1}}],["connections",{"2":{"9":1}}],["connected",{"2":{"5":1}}],["corner",{"2":{"1":1,"11":1}}],["corecontrol",{"2":{"1":2,"11":1,"15":1,"16":1,"19":1,"23":1,"24":4,"25":1,"29":1}}],["span",{"2":{"26":1}}],["specified",{"2":{"16":2,"17":1}}],["specifications",{"2":{"13":2}}],["specify",{"2":{"13":2}}],["shell",{"2":{"24":1}}],["shown",{"2":{"26":1}}],["shows",{"2":{"6":1,"9":1}}],["should",{"2":{"16":1}}],["short",{"2":{"1":1}}],["same",{"2":{"17":1}}],["sample",{"2":{"16":1}}],["subject",{"2":{"24":1}}],["sure",{"2":{"16":1,"24":1}}],["sum",{"2":{"8":1}}],["sock",{"2":{"16":2}}],["simply",{"2":{"16":1}}],["similar",{"2":{"14":1}}],["strongly",{"2":{"25":1}}],["string",{"2":{"24":1}}],["start",{"2":{"24":1}}],["stage",{"2":{"24":1}}],["status",{"2":{"16":1}}],["stopped",{"2":{"16":1}}],["storage",{"2":{"13":1}}],["steps",{"2":{"1":1,"11":1,"23":1}}],["s",{"2":{"12":2,"13":1}}],["system",{"2":{"12":2,"24":1}}],["service",{"2":{"24":1}}],["servers",{"0":{"5":1,"10":1},"1":{"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"2":{"5":4,"8":1,"9":1,"10":1,"16":1,"17":1}}],["server",{"0":{"11":1,"17":1},"1":{"12":1,"13":1,"14":1,"15":1},"2":{"1":5,"9":3,"10":1,"11":4,"12":6,"13":1,"14":5,"15":2,"16":2,"17":5,"18":1,"29":1}}],["security",{"2":{"25":1}}],["secure",{"2":{"24":1}}],["secret",{"2":{"24":3}}],["section",{"2":{"15":1}}],["set",{"2":{"15":1,"29":1}}],["settings",{"0":{"19":1,"20":1,"21":1,"22":1},"1":{"20":1,"21":1,"22":1},"2":{"2":1,"14":3,"17":1,"19":1,"25":1,"29":1}}],["see",{"2":{"10":1,"15":1}}],["selected",{"2":{"1":1}}],["select",{"2":{"1":1,"12":1,"14":1,"26":1}}],["self",{"2":{"0":1}}],["telegram",{"0":{"30":1}}],["texts",{"2":{"29":1}}],["test",{"2":{"24":1}}],["timeout",{"2":{"24":1}}],["time",{"2":{"24":1,"26":1}}],["tab",{"0":{"12":1,"13":1,"14":1,"15":1},"2":{"16":1}}],["tabs",{"2":{"11":1}}],["track",{"2":{"1":1}}],["three",{"2":{"17":1}}],["that",{"2":{"4":1,"16":2}}],["this",{"2":{"1":1,"9":3,"14":3,"16":2,"17":1,"24":1}}],["then",{"2":{"18":1}}],["theme",{"0":{"21":1}}],["them",{"2":{"18":1,"29":1}}],["there",{"2":{"17":1}}],["the",{"2":{"1":23,"2":1,"3":2,"4":1,"5":1,"6":1,"7":1,"8":1,"9":9,"10":1,"11":5,"12":6,"13":2,"14":1,"15":2,"16":7,"17":8,"18":2,"19":1,"23":1,"24":3,"25":3,"26":3,"29":2}}],["these",{"2":{"1":1,"11":1,"23":1,"29":1}}],["top",{"2":{"1":1,"11":1}}],["to",{"2":{"1":6,"3":1,"9":2,"11":2,"12":1,"15":2,"16":5,"23":1,"24":1,"25":1}}],["http",{"2":{"16":1,"24":1}}],["healthcheck",{"2":{"24":1}}],["healthy",{"2":{"24":1}}],["help",{"2":{"16":1}}],["here",{"2":{"0":1,"19":1,"26":1}}],["haedlessdev",{"2":{"24":2}}],["have",{"2":{"16":3}}],["hardware",{"0":{"13":1},"2":{"13":1,"16":1}}],["hypervisors",{"2":{"14":1}}],["host",{"2":{"9":1,"14":5,"16":1,"18":1}}],["hosted",{"2":{"0":1}}],["admin",{"2":{"25":2}}],["administrator",{"2":{"25":2}}],["addition",{"2":{"16":1}}],["address",{"2":{"12":2}}],["add",{"0":{"1":1,"11":1},"1":{"12":1,"13":1,"14":1,"15":1},"2":{"1":5,"10":1,"11":2,"12":1,"13":1,"15":2}}],["authentication",{"0":{"25":1}}],["automatically",{"2":{"1":1,"9":1}}],["available",{"2":{"24":1}}],["agent",{"2":{"24":2}}],["arranged",{"2":{"18":1}}],["are",{"2":{"0":1,"2":1,"9":3,"17":2,"18":1,"24":1}}],["associated",{"2":{"18":1}}],["as",{"2":{"17":1}}],["aspects",{"2":{"4":1}}],["at",{"2":{"17":1,"24":3}}],["api",{"2":{"16":2}}],["applicable",{"2":{"13":1}}],["application",{"0":{"1":1,"2":1},"2":{"1":9,"2":1,"24":1,"29":1}}],["applications",{"0":{"0":1,"6":1},"1":{"1":1,"2":1},"2":{"0":1,"2":1,"6":2,"7":1,"8":1,"9":2,"26":1}}],["always",{"2":{"24":1}}],["also",{"2":{"16":1,"17":1,"26":1,"29":1}}],["all",{"2":{"0":1,"5":1,"9":1,"10":1,"26":1}}],["amount",{"2":{"13":1}}],["about",{"2":{"5":1}}],["after",{"2":{"1":1,"15":1,"16":1,"25":2}}],["account",{"2":{"25":1}}],["accessible",{"2":{"1":1}}],["action",{"2":{"17":1}}],["across",{"2":{"1":1,"6":1,"11":1}}],["a",{"0":{"11":1},"1":{"12":1,"13":1,"14":1,"15":1},"2":{"1":2,"2":1,"3":1,"9":2,"11":1,"12":2,"14":3,"16":1,"17":1,"18":2,"24":4,"25":1,"26":1,"29":1}}],["and",{"2":{"8":1,"9":1,"10":1,"13":2,"14":1,"16":1,"24":2,"26":1,"29":2}}],["an",{"0":{"1":1},"2":{"24":1,"29":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/docs/.vitepress/dist/assets/chunks/@localSearchIndexroot.CP7uK6Pq.js b/docs/.vitepress/dist/assets/chunks/@localSearchIndexroot.CP7uK6Pq.js new file mode 100644 index 0000000..a064947 --- /dev/null +++ b/docs/.vitepress/dist/assets/chunks/@localSearchIndexroot.CP7uK6Pq.js @@ -0,0 +1 @@ +const e='{"documentCount":34,"nextId":34,"documentIds":{"0":"/general/Applications#applications","1":"/general/Applications#add-an-application","2":"/general/Applications#application-display","3":"/general/Dashboard#dashboard","4":"/general/Dashboard#cards-overview","5":"/general/Dashboard#servers-card","6":"/general/Dashboard#applications-card","7":"/general/Dashboard#uptime-card","8":"/general/Dashboard#network-card","9":"/general/Network#network","10":"/general/Settings#settings","11":"/general/Settings#user-settings","12":"/general/Settings#theme-settings","13":"/general/Settings#notification-settings","14":"/general/Servers#servers","15":"/general/Servers#add-a-server","16":"/general/Servers#general-tab","17":"/general/Servers#hardware-tab","18":"/general/Servers#virtualization-tab","19":"/general/Servers#monitoring-tab","20":"/general/Servers#monitoring","21":"/general/Servers#server-display","22":"/general/Servers#vms","23":"/general/Uptime#uptime","24":"/installation#installation","25":"/installation#docker-compose-installation","26":"/installation#authentication","27":"/notifications/Email#email","28":"/notifications/Discord#discord","29":"/notifications/General#notifications","30":"/notifications/Gotify#gotify","31":"/notifications/Ntfy#ntfy","32":"/notifications/Pushover#pushover","33":"/notifications/Telegram#telegram"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,9],"1":[3,1,74],"2":[2,1,20],"3":[1,1,16],"4":[2,1,16],"5":[2,3,16],"6":[2,3,13],"7":[2,3,9],"8":[2,3,10],"9":[1,1,45],"10":[1,1,10],"11":[2,1,1],"12":[2,1,1],"13":[2,1,1],"14":[1,1,16],"15":[3,1,29],"16":[2,4,33],"17":[2,4,25],"18":[2,4,37],"19":[2,4,23],"20":[1,1,93],"21":[2,1,51],"22":[1,1,23],"23":[1,1,29],"24":[1,1,14],"25":[3,1,112],"26":[1,1,36],"27":[1,1,1],"28":[1,1,1],"29":[1,1,31],"30":[1,1,1],"31":[1,1,1],"32":[1,1,1],"33":[1,1,1]},"averageFieldLength":[1.588235294117647,1.588235294117647,23.5],"storedFields":{"0":{"title":"Applications","titles":[]},"1":{"title":"Add an application","titles":["Applications"]},"2":{"title":"Application Display","titles":["Applications"]},"3":{"title":"Dashboard","titles":[]},"4":{"title":"Cards Overview","titles":["Dashboard"]},"5":{"title":"Servers Card","titles":["Dashboard","Cards Overview"]},"6":{"title":"Applications Card","titles":["Dashboard","Cards Overview"]},"7":{"title":"Uptime Card","titles":["Dashboard","Cards Overview"]},"8":{"title":"Network Card","titles":["Dashboard","Cards Overview"]},"9":{"title":"Network","titles":[]},"10":{"title":"Settings","titles":[]},"11":{"title":"User Settings","titles":["Settings"]},"12":{"title":"Theme Settings","titles":["Settings"]},"13":{"title":"Notification Settings","titles":["Settings"]},"14":{"title":"Servers","titles":[]},"15":{"title":"Add a Server","titles":["Servers"]},"16":{"title":"General Tab","titles":["Servers","Add a Server"]},"17":{"title":"Hardware Tab","titles":["Servers","Add a Server"]},"18":{"title":"Virtualization Tab","titles":["Servers","Add a Server"]},"19":{"title":"Monitoring Tab","titles":["Servers","Add a Server"]},"20":{"title":"Monitoring","titles":["Servers"]},"21":{"title":"Server Display","titles":["Servers"]},"22":{"title":"VMs","titles":["Servers"]},"23":{"title":"Uptime","titles":[]},"24":{"title":"Installation","titles":[]},"25":{"title":"Docker Compose Installation","titles":["Installation"]},"26":{"title":"Authentication","titles":["Installation"]},"27":{"title":"Email","titles":[]},"28":{"title":"Discord","titles":[]},"29":{"title":"Notifications","titles":[]},"30":{"title":"Gotify","titles":[]},"31":{"title":"Ntfy","titles":[]},"32":{"title":"Pushover","titles":[]},"33":{"title":"Telegram","titles":[]}},"dirtCount":0,"index":[["10",{"2":{"25":1}}],["17",{"2":{"25":1}}],["2s",{"2":{"25":2}}],["5432",{"2":{"25":2}}],["jwtsecret",{"2":{"25":1}}],["jwt",{"2":{"25":2}}],["3000",{"2":{"25":3}}],["30",{"2":{"23":1}}],["30min",{"2":{"23":1}}],["7",{"2":{"23":1}}],["61208",{"2":{"20":3}}],["yml",{"2":{"25":1}}],["yamlservices",{"2":{"20":1,"25":1}}],["you",{"2":{"6":1,"10":1,"14":1,"20":6,"21":1,"22":1,"23":1,"26":1,"29":2}}],["your",{"2":{"0":1,"1":2,"2":1,"3":1,"4":1,"5":1,"6":1,"9":1,"14":1,"16":1,"20":1,"21":1,"23":1,"25":1,"26":1}}],["var",{"2":{"20":2,"25":1}}],["volumes",{"2":{"20":1,"25":2}}],["vmware",{"2":{"18":1}}],["vm",{"2":{"9":1,"18":2}}],["vms",{"0":{"22":1},"2":{"9":2,"22":3}}],["virtualization",{"0":{"18":1},"2":{"18":1}}],["virtual",{"2":{"5":1,"18":2}}],["via",{"2":{"1":1}}],["4",{"2":{"4":1}}],["quick",{"2":{"3":1}}],["quot",{"2":{"1":4,"15":2,"18":2,"19":4}}],["gotify",{"0":{"30":1}}],["goes",{"2":{"29":2}}],["g",{"2":{"25":1}}],["gt",{"2":{"20":1}}],["glances",{"2":{"20":8}}],["graphics",{"2":{"17":1}}],["grid",{"2":{"2":1,"21":1}}],["gpu",{"2":{"17":1}}],["generate",{"2":{"25":2}}],["generated",{"2":{"9":1}}],["general",{"0":{"16":1}}],["get",{"2":{"3":1}}],["make",{"2":{"20":1,"25":1}}],["machine",{"2":{"18":1}}],["machines",{"2":{"18":1}}],["management",{"2":{"16":1,"21":1}}],["manage",{"2":{"10":1,"16":1}}],["main",{"2":{"9":2}}],["my",{"2":{"9":1}}],["monitor",{"2":{"20":1}}],["monitoring",{"0":{"19":1,"20":1},"2":{"4":1,"19":2,"20":2}}],["model",{"2":{"17":1}}],["more",{"2":{"14":1}}],["most",{"2":{"3":1}}],["menu",{"2":{"1":1,"14":1,"15":1,"21":1,"23":1}}],["lt",{"2":{"20":1}}],["latest",{"2":{"20":1,"25":2}}],["lib",{"2":{"25":1}}],["link",{"2":{"21":1}}],["like",{"2":{"18":1}}],["listed",{"2":{"9":1}}],["list",{"2":{"2":1,"21":1,"22":1,"23":1}}],["logging",{"2":{"26":1}}],["login",{"2":{"26":1}}],["logical",{"2":{"18":1}}],["logo",{"2":{"1":2}}],["localhost",{"2":{"25":1}}],["local",{"2":{"1":3}}],["long",{"2":{"1":1}}],["example",{"2":{"26":1}}],["email",{"0":{"27":1},"2":{"26":1}}],["early",{"2":{"25":1}}],["easiest",{"2":{"24":1}}],["each",{"2":{"2":1,"21":2}}],["edit",{"2":{"21":1}}],["end",{"2":{"21":1}}],["environment",{"2":{"20":1,"25":4}}],["enable",{"2":{"18":1,"20":1}}],["enter",{"2":{"1":4,"16":2,"17":2}}],["e",{"2":{"1":1,"25":1}}],["u",{"2":{"25":1}}],["unless",{"2":{"20":1}}],["using",{"2":{"22":1,"24":1}}],["usage",{"2":{"20":1}}],["use",{"2":{"25":1}}],["user",{"0":{"11":1},"2":{"25":1}}],["used",{"2":{"1":1,"16":1}}],["up",{"2":{"19":1,"25":2}}],["uptime",{"0":{"7":1,"23":1},"2":{"1":1,"7":1,"23":1}}],["url",{"2":{"1":7,"16":2,"20":2,"21":1,"25":2}}],["pushover",{"0":{"32":1}}],["public",{"2":{"1":2}}],["pg",{"2":{"25":1}}],["password",{"2":{"25":1,"26":2}}],["page",{"2":{"9":1}}],["pid",{"2":{"20":1}}],["postgres",{"2":{"25":16}}],["postgresql",{"2":{"25":3}}],["ports",{"2":{"20":1,"25":1}}],["pointing",{"2":{"1":1}}],["please",{"2":{"20":2}}],["placeholders",{"2":{"29":1}}],["place",{"2":{"3":1}}],["production",{"2":{"25":1}}],["proxmox",{"2":{"18":1}}],["provides",{"2":{"7":1}}],["provide",{"2":{"4":1}}],["perfect",{"2":{"18":1}}],["physical",{"2":{"5":1}}],["bashdocker",{"2":{"25":1}}],["basic",{"2":{"16":1}}],["based",{"2":{"9":1}}],["between",{"2":{"18":1}}],["below",{"2":{"9":1}}],["be",{"2":{"1":2,"20":1}}],["buttons",{"2":{"21":1}}],["button",{"2":{"1":2,"15":1,"21":3,"22":1}}],["when",{"2":{"21":1,"29":2}}],["which",{"2":{"1":2,"9":1}}],["way",{"2":{"24":1}}],["warning",{"2":{"20":1,"26":1}}],["want",{"2":{"20":1}}],["w",{"2":{"20":1}}],["web",{"2":{"25":1}}],["webui",{"2":{"20":1}}],["we",{"2":{"20":1}}],["will",{"2":{"1":2,"18":1,"20":1}}],["with",{"2":{"1":1,"20":1,"21":3,"23":1,"25":4,"26":1,"29":1}}],["random",{"2":{"25":2}}],["ram",{"2":{"17":2}}],["ro",{"2":{"20":1}}],["run",{"2":{"20":2}}],["running",{"2":{"1":1,"6":1,"9":3}}],["reasons",{"2":{"26":1}}],["reach",{"2":{"20":1}}],["retries",{"2":{"25":1}}],["replace",{"2":{"25":1}}],["recommended",{"2":{"25":1,"26":1}}],["restart",{"2":{"20":1,"25":1}}],["respective",{"2":{"9":1}}],["refer",{"2":{"20":1}}],["required",{"2":{"1":1,"14":1,"19":1}}],["right",{"2":{"1":1,"9":1,"15":1}}],["improve",{"2":{"29":1}}],["important",{"2":{"3":1}}],["immediately",{"2":{"26":1}}],["image",{"2":{"20":1,"25":3}}],["ip",{"2":{"16":2,"20":1}}],["if",{"2":{"9":1,"14":1,"17":1,"18":2,"20":1,"22":1}}],["it",{"2":{"9":2,"25":1,"26":1}}],["its",{"2":{"2":1,"18":1,"21":1}}],["i",{"2":{"1":1}}],["icon",{"2":{"1":1,"16":2}}],["isready",{"2":{"25":1}}],["is",{"2":{"1":2,"3":1,"4":1,"9":2,"18":1,"23":1,"24":1,"25":4,"26":1}}],["include",{"2":{"29":1}}],["including",{"2":{"5":1}}],["interval",{"2":{"25":1}}],["into",{"2":{"4":1}}],["installed",{"2":{"25":1}}],["installation",{"0":{"24":1,"25":1},"1":{"25":1,"26":1}}],["install",{"2":{"20":1,"24":1}}],["infrastrucutre",{"2":{"9":1}}],["infrastructure",{"2":{"3":1,"4":1,"6":1,"9":1}}],["information",{"2":{"1":2,"5":1,"16":1,"19":2}}],["in",{"2":{"1":2,"2":2,"14":1,"15":1,"20":3,"21":2,"22":1,"23":1,"25":1,"26":2,"29":1}}],["ntfy",{"0":{"31":1}}],["nicolargo",{"2":{"20":1}}],["now",{"2":{"25":1}}],["not",{"2":{"25":1}}],["notifications",{"0":{"29":1},"2":{"29":2}}],["notification",{"0":{"13":1},"2":{"29":1}}],["node",{"2":{"9":1}}],["number",{"2":{"5":2,"6":1,"7":1}}],["need",{"2":{"20":1}}],["next",{"2":{"9":1}}],["network",{"0":{"8":1,"9":1},"2":{"1":1,"8":1,"9":1}}],["new",{"2":{"1":1,"15":1}}],["named",{"2":{"25":1}}],["name",{"2":{"1":2,"16":2,"20":1}}],["d",{"2":{"25":2}}],["db",{"2":{"25":5}}],["data",{"2":{"25":3}}],["database",{"2":{"25":2}}],["danger",{"2":{"25":1}}],["days",{"2":{"23":2}}],["dashboard",{"0":{"3":1},"1":{"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"3":1,"4":1}}],["docker",{"0":{"25":1},"2":{"20":2,"24":1,"25":4}}],["docs",{"2":{"20":1}}],["done",{"2":{"20":1}}],["direct",{"2":{"21":1,"29":1}}],["directly",{"2":{"9":1}}],["discord",{"0":{"28":1}}],["disable",{"2":{"20":1}}],["disk",{"2":{"17":1}}],["displays",{"2":{"5":1,"8":1}}],["display",{"0":{"2":1,"21":1},"2":{"2":1,"21":1,"22":1}}],["displayed",{"2":{"0":1,"2":1,"9":1,"21":1,"22":1}}],["different",{"2":{"4":1}}],["divided",{"2":{"4":1}}],["default",{"2":{"26":2}}],["depends",{"2":{"25":1}}],["depending",{"2":{"2":1,"21":1}}],["development",{"2":{"25":1}}],["deletion",{"2":{"21":1}}],["delete",{"2":{"21":1}}],["detailed",{"2":{"19":1,"20":1}}],["details",{"2":{"1":1,"15":1,"17":1}}],["descriptive",{"2":{"16":1}}],["description",{"2":{"1":2}}],["open",{"2":{"21":1}}],["operating",{"2":{"16":2}}],["opt=",{"2":{"20":1}}],["options",{"2":{"19":1}}],["optional",{"2":{"16":1}}],["overview",{"0":{"4":1},"1":{"5":1,"6":1,"7":1,"8":1},"2":{"3":1}}],["own",{"2":{"2":1,"21":1}}],["or",{"2":{"1":1,"2":1,"18":1,"21":1,"25":1,"29":2}}],["one",{"2":{"21":1}}],["online",{"2":{"7":1,"29":2}}],["only",{"2":{"1":1}}],["on",{"2":{"1":1,"2":1,"9":5,"20":1,"21":1,"25":2}}],["out",{"2":{"1":2,"15":1,"19":1}}],["offline",{"2":{"29":2}}],["of",{"2":{"1":6,"3":1,"4":1,"5":2,"6":1,"7":1,"8":1,"9":2,"10":1,"15":1,"17":1,"20":3,"21":3,"23":1,"25":1}}],["first",{"2":{"26":1}}],["file",{"2":{"25":1}}],["filter",{"2":{"23":1}}],["filling",{"2":{"1":1,"19":1}}],["fill",{"2":{"1":1,"15":1}}],["format",{"2":{"20":1}}],["for",{"2":{"16":2,"18":1,"19":1,"20":1,"25":1,"26":1,"29":1}}],["following",{"2":{"1":1,"15":1,"25":2}}],["follow",{"2":{"1":1,"15":1,"24":1}}],["flowchart",{"2":{"9":1}}],["flash",{"2":{"1":1}}],["credentials",{"2":{"26":1}}],["creating",{"2":{"21":1}}],["create",{"2":{"25":1}}],["created",{"2":{"20":1}}],["creates",{"2":{"18":1}}],["cmd",{"2":{"25":1}}],["change",{"2":{"25":1,"26":2}}],["choose",{"2":{"16":1}}],["clear",{"2":{"23":1}}],["clearly",{"2":{"22":1}}],["click",{"2":{"1":2,"15":1,"19":1,"21":1}}],["cpu",{"2":{"17":2}}],["customize",{"2":{"21":1,"29":1}}],["customizations",{"2":{"20":1}}],["custom",{"2":{"16":1,"25":1}}],["capacity",{"2":{"17":1}}],["can",{"2":{"10":1,"14":1,"20":2,"21":1,"22":1,"23":1,"26":1,"29":2}}],["cards",{"0":{"4":1},"1":{"5":1,"6":1,"7":1,"8":1},"2":{"4":1}}],["card",{"0":{"5":1,"6":1,"7":1,"8":1},"2":{"2":1,"5":1,"6":1,"7":1,"8":1,"17":1,"21":2}}],["comes",{"2":{"26":1}}],["command",{"2":{"25":1}}],["com",{"2":{"25":1,"26":1}}],["compose",{"0":{"25":1},"2":{"20":1,"24":1,"25":4}}],["complete",{"2":{"10":1}}],["copy",{"2":{"20":1}}],["condition",{"2":{"25":1}}],["content",{"2":{"25":1}}],["contains",{"2":{"22":1}}],["container",{"2":{"20":1}}],["configuration",{"2":{"17":1}}],["configure",{"2":{"16":1,"18":1}}],["connection",{"2":{"18":1}}],["connections",{"2":{"9":1}}],["connected",{"2":{"5":1}}],["corner",{"2":{"1":1,"15":1}}],["corecontrol",{"2":{"1":2,"10":1,"15":1,"19":1,"20":1,"24":1,"25":4,"26":1,"29":1}}],["shell",{"2":{"25":1}}],["shown",{"2":{"23":1}}],["shows",{"2":{"6":1,"9":1}}],["should",{"2":{"20":1}}],["short",{"2":{"1":1}}],["span",{"2":{"23":1}}],["specified",{"2":{"20":2,"21":1}}],["specifications",{"2":{"17":2}}],["specify",{"2":{"17":2}}],["same",{"2":{"21":1}}],["sample",{"2":{"20":1}}],["subject",{"2":{"25":1}}],["sure",{"2":{"20":1,"25":1}}],["sum",{"2":{"8":1}}],["sock",{"2":{"20":2}}],["simply",{"2":{"20":1}}],["similar",{"2":{"18":1}}],["strongly",{"2":{"26":1}}],["string",{"2":{"25":1}}],["start",{"2":{"25":1}}],["stage",{"2":{"25":1}}],["status",{"2":{"20":1}}],["stopped",{"2":{"20":1}}],["storage",{"2":{"17":1}}],["steps",{"2":{"1":1,"15":1,"24":1}}],["s",{"2":{"16":2,"17":1}}],["system",{"2":{"16":2,"25":1}}],["service",{"2":{"25":1}}],["servers",{"0":{"5":1,"14":1},"1":{"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1},"2":{"5":4,"8":1,"9":1,"14":1,"20":1,"21":1}}],["server",{"0":{"15":1,"21":1},"1":{"16":1,"17":1,"18":1,"19":1},"2":{"1":5,"9":3,"14":1,"15":4,"16":6,"17":1,"18":5,"19":2,"20":2,"21":5,"22":1,"29":1}}],["security",{"2":{"26":1}}],["secure",{"2":{"25":1}}],["secret",{"2":{"25":3}}],["section",{"2":{"19":1}}],["set",{"2":{"19":1,"29":1}}],["settings",{"0":{"10":1,"11":1,"12":1,"13":1},"1":{"11":1,"12":1,"13":1},"2":{"2":1,"10":1,"18":3,"21":1,"26":1,"29":1}}],["see",{"2":{"14":1,"19":1}}],["selected",{"2":{"1":1}}],["select",{"2":{"1":1,"16":1,"18":1,"23":1}}],["self",{"2":{"0":1}}],["telegram",{"0":{"33":1}}],["texts",{"2":{"29":1}}],["test",{"2":{"25":1}}],["timeout",{"2":{"25":1}}],["time",{"2":{"23":1,"25":1}}],["tab",{"0":{"16":1,"17":1,"18":1,"19":1},"2":{"20":1}}],["tabs",{"2":{"15":1}}],["track",{"2":{"1":1}}],["three",{"2":{"21":1}}],["that",{"2":{"4":1,"20":2}}],["this",{"2":{"1":1,"9":3,"18":3,"20":2,"21":1,"25":1}}],["then",{"2":{"22":1}}],["them",{"2":{"22":1,"29":1}}],["theme",{"0":{"12":1}}],["there",{"2":{"21":1}}],["the",{"2":{"1":23,"2":1,"3":2,"4":1,"5":1,"6":1,"7":1,"8":1,"9":9,"10":1,"14":1,"15":5,"16":6,"17":2,"18":1,"19":2,"20":7,"21":8,"22":2,"23":3,"24":1,"25":3,"26":3,"29":2}}],["these",{"2":{"1":1,"15":1,"24":1,"29":1}}],["top",{"2":{"1":1,"15":1}}],["to",{"2":{"1":6,"3":1,"9":2,"15":2,"16":1,"19":2,"20":5,"24":1,"25":1,"26":1}}],["http",{"2":{"20":1,"25":1}}],["healthcheck",{"2":{"25":1}}],["healthy",{"2":{"25":1}}],["help",{"2":{"20":1}}],["here",{"2":{"0":1,"10":1,"23":1}}],["haedlessdev",{"2":{"25":2}}],["have",{"2":{"20":3}}],["hardware",{"0":{"17":1},"2":{"17":1,"20":1}}],["hypervisors",{"2":{"18":1}}],["host",{"2":{"9":1,"18":5,"20":1,"22":1}}],["hosted",{"2":{"0":1}}],["admin",{"2":{"26":2}}],["administrator",{"2":{"26":2}}],["addition",{"2":{"20":1}}],["address",{"2":{"16":2}}],["add",{"0":{"1":1,"15":1},"1":{"16":1,"17":1,"18":1,"19":1},"2":{"1":5,"14":1,"15":2,"16":1,"17":1,"19":2}}],["authentication",{"0":{"26":1}}],["automatically",{"2":{"1":1,"9":1}}],["available",{"2":{"25":1}}],["agent",{"2":{"25":2}}],["arranged",{"2":{"22":1}}],["are",{"2":{"0":1,"2":1,"9":3,"21":2,"22":1,"25":1}}],["associated",{"2":{"22":1}}],["as",{"2":{"21":1}}],["aspects",{"2":{"4":1}}],["at",{"2":{"21":1,"25":3}}],["api",{"2":{"20":2}}],["applicable",{"2":{"17":1}}],["application",{"0":{"1":1,"2":1},"2":{"1":9,"2":1,"25":1,"29":1}}],["applications",{"0":{"0":1,"6":1},"1":{"1":1,"2":1},"2":{"0":1,"2":1,"6":2,"7":1,"8":1,"9":2,"23":1}}],["always",{"2":{"25":1}}],["also",{"2":{"20":1,"21":1,"23":1,"29":1}}],["all",{"2":{"0":1,"5":1,"9":1,"14":1,"23":1}}],["amount",{"2":{"17":1}}],["about",{"2":{"5":1}}],["after",{"2":{"1":1,"19":1,"20":1,"26":2}}],["account",{"2":{"26":1}}],["accessible",{"2":{"1":1}}],["action",{"2":{"21":1}}],["across",{"2":{"1":1,"6":1,"15":1}}],["a",{"0":{"15":1},"1":{"16":1,"17":1,"18":1,"19":1},"2":{"1":2,"2":1,"3":1,"9":2,"15":1,"16":2,"18":3,"20":1,"21":1,"22":2,"23":1,"25":4,"26":1,"29":1}}],["and",{"2":{"8":1,"9":1,"14":1,"17":2,"18":1,"20":1,"23":1,"25":2,"29":2}}],["an",{"0":{"1":1},"2":{"25":1,"29":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/docs/.vitepress/dist/assets/chunks/VPLocalSearchBox.CJEcdF5V.js b/docs/.vitepress/dist/assets/chunks/VPLocalSearchBox.B974QcpM.js similarity index 99% rename from docs/.vitepress/dist/assets/chunks/VPLocalSearchBox.CJEcdF5V.js rename to docs/.vitepress/dist/assets/chunks/VPLocalSearchBox.B974QcpM.js index 52f5c8d..b595c01 100644 --- a/docs/.vitepress/dist/assets/chunks/VPLocalSearchBox.CJEcdF5V.js +++ b/docs/.vitepress/dist/assets/chunks/VPLocalSearchBox.B974QcpM.js @@ -1,4 +1,4 @@ -var Nt=Object.defineProperty;var Ft=(a,e,t)=>e in a?Nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Ce=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ot,D as le,h as ge,ah as et,ai as Rt,aj as Ct,ak as At,q as $e,al as Mt,d as Lt,am as tt,p as fe,an as Dt,ao as Pt,s as zt,ap as Vt,v as Ae,P as he,O as _e,aq as $t,ar as jt,W as Bt,R as Wt,$ as Kt,b as Jt,o as H,j as _,a0 as qt,as as Ut,k as L,at as Gt,au as Ht,c as Z,e as Se,n as nt,B as st,F as it,a as pe,t as me,av as Qt,aw as rt,ax as Yt,a5 as Zt,aa as Xt,ay as en,_ as tn}from"./framework.DPDPlp3K.js";import{u as nn,c as sn}from"./theme.CkdfpqM_.js";const rn={root:()=>Ot(()=>import("./@localSearchIndexroot.Bz_0HfKH.js"),[])};/*! +var Nt=Object.defineProperty;var Ft=(a,e,t)=>e in a?Nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Ce=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ot,D as le,h as ge,ah as et,ai as Rt,aj as Ct,ak as At,q as $e,al as Mt,d as Lt,am as tt,p as fe,an as Dt,ao as Pt,s as zt,ap as Vt,v as Ae,P as he,O as _e,aq as $t,ar as jt,W as Bt,R as Wt,$ as Kt,b as Jt,o as H,j as _,a0 as qt,as as Ut,k as L,at as Gt,au as Ht,c as Z,e as Se,n as nt,B as st,F as it,a as pe,t as me,av as Qt,aw as rt,ax as Yt,a5 as Zt,aa as Xt,ay as en,_ as tn}from"./framework.DPDPlp3K.js";import{u as nn,c as sn}from"./theme.BTnOYcHU.js";const rn={root:()=>Ot(()=>import("./@localSearchIndexroot.CP7uK6Pq.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var mt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],ke=mt.join(","),vt=typeof Element>"u",re=vt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ne=!vt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Fe=function a(e,t){var n;t===void 0&&(t=!0);var s=e==null||(n=e.getAttribute)===null||n===void 0?void 0:n.call(e,"inert"),r=s===""||s==="true",i=r||t&&e&&a(e.parentNode);return i},an=function(e){var t,n=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return n===""||n==="true"},gt=function(e,t,n){if(Fe(e))return[];var s=Array.prototype.slice.apply(e.querySelectorAll(ke));return t&&re.call(e,ke)&&s.unshift(e),s=s.filter(n),s},bt=function a(e,t,n){for(var s=[],r=Array.from(e);r.length;){var i=r.shift();if(!Fe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,n);n.flatten?s.push.apply(s,c):s.push({scopeParent:i,candidates:c})}else{var f=re.call(i,ke);f&&n.filter(i)&&(t||!e.includes(i))&&s.push(i);var v=i.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(i),h=!Fe(v,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(i));if(v&&h){var b=a(v===!0?i.children:v.children,!0,n);n.flatten?s.push.apply(s,b):s.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return s},yt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ie=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||an(e))&&!yt(e)?0:e.tabIndex},on=function(e,t){var n=ie(e);return n<0&&t&&!yt(e)?0:n},ln=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},wt=function(e){return e.tagName==="INPUT"},cn=function(e){return wt(e)&&e.type==="hidden"},un=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(n){return n.tagName==="SUMMARY"});return t},dn=function(e,t){for(var n=0;nsummary:first-of-type"),i=r?e.parentElement:e;if(re.call(i,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="legacy-full"){if(typeof s=="function"){for(var o=e;e;){var l=e.parentElement,c=Ne(e);if(l&&!l.shadowRoot&&s(l)===!0)return at(e);e.assignedSlot?e=e.assignedSlot:!l&&c!==e.ownerDocument?e=c.host:e=l}e=o}if(mn(e))return!e.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return at(e);return!1},gn=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var n=0;n=0)},yn=function a(e){var t=[],n=[];return e.forEach(function(s,r){var i=!!s.scopeParent,o=i?s.scopeParent:s,l=on(o,i),c=i?a(s.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):n.push({documentOrder:r,tabIndex:l,item:s,isScope:i,content:c})}),n.sort(ln).reduce(function(s,r){return r.isScope?s.push.apply(s,r.content):s.push(r.content),s},[]).concat(t)},wn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=bt([e],t.includeContainer,{filter:je.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:bn}):n=gt(e,t.includeContainer,je.bind(null,t)),yn(n)},xn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=bt([e],t.includeContainer,{filter:Oe.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):n=gt(e,t.includeContainer,Oe.bind(null,t)),n},ae=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,ke)===!1?!1:je(t,e)},_n=mt.concat("iframe").join(","),Me=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,_n)===!1?!1:Oe(t,e)};/*! diff --git a/docs/.vitepress/dist/assets/chunks/metadata.87c7e30c.js b/docs/.vitepress/dist/assets/chunks/metadata.87c7e30c.js deleted file mode 100644 index 671fce2..0000000 --- a/docs/.vitepress/dist/assets/chunks/metadata.87c7e30c.js +++ /dev/null @@ -1 +0,0 @@ -window.__VP_HASH_MAP__=JSON.parse("{\"general_applications.md\":\"DFVqSlCw\",\"general_dashboard.md\":\"DW5yESFW\",\"general_network.md\":\"tbP8aEzX\",\"general_servers.md\":\"BaASA60T\",\"general_settings.md\":\"DrC2XV32\",\"general_uptime.md\":\"CKBdQg4u\",\"index.md\":\"_yXl4OkC\",\"installation.md\":\"Cz1eOHOr\",\"notifications_discord.md\":\"C0x5CxmR\",\"notifications_email.md\":\"Cugw2BRs\",\"notifications_general.md\":\"D7AVsSjD\",\"notifications_gotify.md\":\"vFHjr6ko\",\"notifications_ntfy.md\":\"CPMnGQVP\",\"notifications_telegram.md\":\"B6_EzaEX\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"CoreControl\",\"description\":\"Dashboard to manage your entire server infrastructure\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/logo.png\",\"nav\":[{\"text\":\"Home\",\"link\":\"/\"},{\"text\":\"Installation\",\"link\":\"/installation\"}],\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2025-present CoreControl\"},\"search\":{\"provider\":\"local\"},\"sidebar\":[{\"text\":\"Deploy\",\"items\":[{\"text\":\"Installation\",\"link\":\"/installation\"}]},{\"text\":\"General\",\"items\":[{\"text\":\"Dashboard\",\"link\":\"/general/Dashboard\"},{\"text\":\"Servers\",\"link\":\"/general/Servers\"},{\"text\":\"Applications\",\"link\":\"/general/Applications\"},{\"text\":\"Uptime\",\"link\":\"/general/Uptime\"},{\"text\":\"Network\",\"link\":\"/general/Network\"},{\"text\":\"Settings\",\"link\":\"/general/Settings\"}]},{\"text\":\"Notifications\",\"items\":[{\"text\":\"General\",\"link\":\"/notifications/General\"},{\"text\":\"Email\",\"link\":\"/notifications/Email\"},{\"text\":\"Telegram\",\"link\":\"/notifications/Telegram\"},{\"text\":\"Discord\",\"link\":\"/notifications/Discord\"},{\"text\":\"Gotify\",\"link\":\"/notifications/Gotify\"},{\"text\":\"Ntfy\",\"link\":\"/notifications/Ntfy\"}]}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/crocofied/corecontrol\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}"); \ No newline at end of file diff --git a/docs/.vitepress/dist/assets/chunks/metadata.b7f24d28.js b/docs/.vitepress/dist/assets/chunks/metadata.b7f24d28.js new file mode 100644 index 0000000..9f27088 --- /dev/null +++ b/docs/.vitepress/dist/assets/chunks/metadata.b7f24d28.js @@ -0,0 +1 @@ +window.__VP_HASH_MAP__=JSON.parse("{\"general_applications.md\":\"DFVqSlCw\",\"general_dashboard.md\":\"DW5yESFW\",\"general_network.md\":\"tbP8aEzX\",\"general_servers.md\":\"BaASA60T\",\"general_settings.md\":\"DrC2XV32\",\"general_uptime.md\":\"CKBdQg4u\",\"index.md\":\"_yXl4OkC\",\"installation.md\":\"Cz1eOHOr\",\"notifications_discord.md\":\"C0x5CxmR\",\"notifications_email.md\":\"Cugw2BRs\",\"notifications_general.md\":\"D7AVsSjD\",\"notifications_gotify.md\":\"vFHjr6ko\",\"notifications_ntfy.md\":\"CPMnGQVP\",\"notifications_pushover.md\":\"lZwGAQ0A\",\"notifications_telegram.md\":\"B6_EzaEX\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"CoreControl\",\"description\":\"Dashboard to manage your entire server infrastructure\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/logo.png\",\"nav\":[{\"text\":\"Home\",\"link\":\"/\"},{\"text\":\"Installation\",\"link\":\"/installation\"}],\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2025-present CoreControl\"},\"search\":{\"provider\":\"local\"},\"sidebar\":[{\"text\":\"Deploy\",\"items\":[{\"text\":\"Installation\",\"link\":\"/installation\"}]},{\"text\":\"General\",\"items\":[{\"text\":\"Dashboard\",\"link\":\"/general/Dashboard\"},{\"text\":\"Servers\",\"link\":\"/general/Servers\"},{\"text\":\"Applications\",\"link\":\"/general/Applications\"},{\"text\":\"Uptime\",\"link\":\"/general/Uptime\"},{\"text\":\"Network\",\"link\":\"/general/Network\"},{\"text\":\"Settings\",\"link\":\"/general/Settings\"}]},{\"text\":\"Notifications\",\"items\":[{\"text\":\"General\",\"link\":\"/notifications/General\"},{\"text\":\"Email\",\"link\":\"/notifications/Email\"},{\"text\":\"Telegram\",\"link\":\"/notifications/Telegram\"},{\"text\":\"Discord\",\"link\":\"/notifications/Discord\"},{\"text\":\"Gotify\",\"link\":\"/notifications/Gotify\"},{\"text\":\"Ntfy\",\"link\":\"/notifications/Ntfy\"},{\"text\":\"Pushover\",\"link\":\"/notifications/Pushover\"}]}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/crocofied/corecontrol\"},{\"icon\":\"buymeacoffee\",\"link\":\"https://www.buymeacoffee.com/corecontrol\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}"); \ No newline at end of file diff --git a/docs/.vitepress/dist/assets/chunks/theme.CkdfpqM_.js b/docs/.vitepress/dist/assets/chunks/theme.BTnOYcHU.js similarity index 99% rename from docs/.vitepress/dist/assets/chunks/theme.CkdfpqM_.js rename to docs/.vitepress/dist/assets/chunks/theme.BTnOYcHU.js index 37f4c59..b8f9896 100644 --- a/docs/.vitepress/dist/assets/chunks/theme.CkdfpqM_.js +++ b/docs/.vitepress/dist/assets/chunks/theme.BTnOYcHU.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.CJEcdF5V.js","assets/chunks/framework.DPDPlp3K.js"])))=>i.map(i=>d[i]); -import{d as m,c as u,r as c,n as M,o as a,a as z,t as I,b as k,w as f,T as ue,e as h,_ as g,u as He,i as Be,f as Ee,g as de,h as y,j as d,k as r,l as W,m as ae,p as T,q as D,s as Y,v as j,x as ve,y as pe,z as Fe,A as De,F as w,B as H,C as K,D as $e,E as Q,G as _,H as E,I as ye,J as Z,K as U,L as x,M as Oe,N as Pe,O as re,P as Le,Q as Ve,R as ee,S as Ge,U as Ue,V as je,W as Se,X as Te,Y as ze,Z as We,$ as Ke,a0 as qe,a1 as Re}from"./framework.DPDPlp3K.js";const Je=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),u("span",{class:M(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[z(I(e.text),1)])],2))}}),Xe={key:0,class:"VPBackdrop"},Ye=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),k(ue,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",Xe)):h("",!0)]),_:1}))}}),Qe=g(Ye,[["__scopeId","data-v-54a304ca"]]),L=He;function Ze(s,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(s,e):(s(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ie(s){return s.startsWith("/")?s:`/${s}`}function fe(s){const{pathname:e,search:t,hash:o,protocol:n}=new URL(s,"http://a.com");if(Be(s)||s.startsWith("#")||!n.startsWith("http")||!Ee(e))return s;const{site:i}=L(),l=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${o}`);return de(l)}function R({correspondingLink:s=!1}={}){const{site:e,localeIndex:t,page:o,theme:n,hash:i}=L(),l=y(()=>{var p,$;return{label:(p=e.value.locales[t.value])==null?void 0:p.label,link:(($=e.value.locales[t.value])==null?void 0:$.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([p,$])=>l.value.label===$.label?[]:{text:$.label,link:xe($.link||(p==="root"?"/":`/${p}/`),n.value.i18nRouting!==!1&&s,o.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function xe(s,e,t,o){return e?s.replace(/\/$/,"")+ie(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):s}const et={class:"NotFound"},tt={class:"code"},nt={class:"title"},ot={class:"quote"},st={class:"action"},at=["href","aria-label"],rt=m({__name:"NotFound",setup(s){const{theme:e}=L(),{currentLang:t}=R();return(o,n)=>{var i,l,v,p,$;return a(),u("div",et,[d("p",tt,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),d("h1",nt,I(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=d("div",{class:"divider"},null,-1)),d("blockquote",ot,I(((v=r(e).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",st,[d("a",{class:"link",href:r(de)(r(t).link),"aria-label":((p=r(e).notFound)==null?void 0:p.linkLabel)??"go to home"},I((($=r(e).notFound)==null?void 0:$.linkText)??"Take me home"),9,at)])])}}}),it=g(rt,[["__scopeId","data-v-6ff51ddd"]]);function Ne(s,e){if(Array.isArray(s))return J(s);if(s==null)return[];e=ie(e);const t=Object.keys(s).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(ie(n))),o=t?s[t]:[];return Array.isArray(o)?J(o):J(o.items,o.base)}function lt(s){const e=[];let t=0;for(const o in s){const n=s[o];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function ct(s){const e=[];function t(o){for(const n of o)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(s),e}function le(s,e){return Array.isArray(e)?e.some(t=>le(s,t)):W(s,e.link)?!0:e.items?le(s,e.items):!1}function J(s,e){return[...s].map(t=>{const o={...t},n=o.base||e;return n&&o.link&&(o.link=n+o.link),o.items&&(o.items=J(o.items,n)),o})}function O(){const{frontmatter:s,page:e,theme:t}=L(),o=ae("(min-width: 960px)"),n=T(!1),i=y(()=>{const C=t.value.sidebar,S=e.value.relativePath;return C?Ne(C,S):[]}),l=T(i.value);D(i,(C,S)=>{JSON.stringify(C)!==JSON.stringify(S)&&(l.value=i.value)});const v=y(()=>s.value.sidebar!==!1&&l.value.length>0&&s.value.layout!=="home"),p=y(()=>$?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),$=y(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),V=y(()=>v.value&&o.value),b=y(()=>v.value?lt(l.value):[]);function P(){n.value=!0}function N(){n.value=!1}function A(){n.value?N():P()}return{isOpen:n,sidebar:l,sidebarGroups:b,hasSidebar:v,hasAside:$,leftAside:p,isSidebarEnabled:V,open:P,close:N,toggle:A}}function ut(s,e){let t;Y(()=>{t=s.value?document.activeElement:void 0}),j(()=>{window.addEventListener("keyup",o)}),ve(()=>{window.removeEventListener("keyup",o)});function o(n){n.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function dt(s){const{page:e,hash:t}=L(),o=T(!1),n=y(()=>s.value.collapsed!=null),i=y(()=>!!s.value.link),l=T(!1),v=()=>{l.value=W(e.value.relativePath,s.value.link)};D([e,s,t],v),j(v);const p=y(()=>l.value?!0:s.value.items?le(e.value.relativePath,s.value.items):!1),$=y(()=>!!(s.value.items&&s.value.items.length));Y(()=>{o.value=!!(n.value&&s.value.collapsed)}),pe(()=>{(l.value||p.value)&&(o.value=!1)});function V(){n.value&&(o.value=!o.value)}return{collapsed:o,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:p,hasChildren:$,toggle:V}}function vt(){const{hasSidebar:s}=O(),e=ae("(min-width: 960px)"),t=ae("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const pt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ce=[];function Me(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function he(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:ft(t),link:"#"+t.id,level:o}});return ht(e,s)}function ft(s){let e="";for(const t of s.childNodes)if(t.nodeType===1){if(pt.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function ht(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return kt(s,o,n)}function mt(s,e){const{isAsideEnabled:t}=vt(),o=Ze(i,100);let n=null;j(()=>{requestAnimationFrame(i),window.addEventListener("scroll",o)}),Fe(()=>{l(location.hash)}),ve(()=>{window.removeEventListener("scroll",o)});function i(){if(!t.value)return;const v=window.scrollY,p=window.innerHeight,$=document.body.offsetHeight,V=Math.abs(v+p-$)<1,b=ce.map(({element:N,link:A})=>({link:A,top:_t(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,A)=>N.top-A.top);if(!b.length){l(null);return}if(v<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:N,top:A}of b){if(A>v+De()+4)break;P=N}l(P)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=s.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const p=n;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function _t(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}function kt(s,e,t){ce.length=0;const o=[],n=[];return s.forEach(i=>{const l={...i,children:[]};let v=n[n.length-1];for(;v&&v.level>=l.level;)n.pop(),v=n[n.length-1];if(l.element.classList.contains("ignore-header")||v&&"shouldIgnore"in v){n.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{const n=K("VPDocOutlineItem",!0);return a(),u("ul",{class:M(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(w,null,H(t.headers,({children:i,link:l,title:v})=>(a(),u("li",null,[d("a",{class:"outline-link",href:l,onClick:e,title:v},I(v),9,bt),i!=null&&i.length?(a(),k(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Ie=g(gt,[["__scopeId","data-v-53c99d69"]]),$t={class:"content"},yt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Pt=m({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=L(),o=$e([]);Q(()=>{o.value=he(e.value.outline??t.value.outline)});const n=T(),i=T();return mt(n,i),(l,v)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:M(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:n},[d("div",$t,[d("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),d("div",yt,I(r(Me)(r(t))),1),_(Ie,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),Lt=g(Pt,[["__scopeId","data-v-f610f197"]]),Vt={class:"VPDocAsideCarbonAds"},St=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,o)=>(a(),u("div",Vt,[_(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Tt={class:"VPDocAside"},Nt=m({__name:"VPDocAside",setup(s){const{theme:e}=L();return(t,o)=>(a(),u("div",Tt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),_(Lt),c(t.$slots,"aside-outline-after",{},void 0,!0),o[0]||(o[0]=d("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),k(St,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Mt=g(Nt,[["__scopeId","data-v-cb998dce"]]);function It(){const{theme:s,page:e}=L();return y(()=>{const{text:t="Edit this page",pattern:o=""}=s.value.editLink||{};let n;return typeof o=="function"?n=o(e.value):n=o.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function wt(){const{page:s,theme:e,frontmatter:t}=L();return y(()=>{var $,V,b,P,N,A,C,S;const o=Ne(e.value.sidebar,s.value.relativePath),n=ct(o),i=At(n,B=>B.link.replace(/[?#].*$/,"")),l=i.findIndex(B=>W(s.value.relativePath,B.link)),v=(($=e.value.docFooter)==null?void 0:$.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((N=i[l-1])==null?void 0:N.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((S=i[l+1])==null?void 0:S.link)}}})}function At(s,e){const t=new Set;return s.filter(o=>{const n=e(o);return t.has(n)?!1:t.add(n)})}const F=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=y(()=>e.tag??(e.href?"a":"span")),o=y(()=>e.href&&ye.test(e.href)||e.target==="_blank");return(n,i)=>(a(),k(E(t.value),{class:M(["VPLink",{link:n.href,"vp-external-link-icon":o.value,"no-icon":n.noIcon}]),href:n.href?r(fe)(n.href):void 0,target:n.target??(o.value?"_blank":void 0),rel:n.rel??(o.value?"noreferrer":void 0)},{default:f(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ct={class:"VPLastUpdated"},Ht=["datetime"],Bt=m({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,lang:o}=L(),n=y(()=>new Date(t.value.lastUpdated)),i=y(()=>n.value.toISOString()),l=T("");return j(()=>{Y(()=>{var v,p,$;l.value=new Intl.DateTimeFormat((p=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&p.forceLocale?o.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,p)=>{var $;return a(),u("p",Ct,[z(I((($=r(e).lastUpdated)==null?void 0:$.text)||r(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:i.value},I(l.value),9,Ht)])}}}),Et=g(Bt,[["__scopeId","data-v-1bb0c8a8"]]),Ft={key:0,class:"VPDocFooter"},Dt={key:0,class:"edit-info"},Ot={key:0,class:"edit-link"},Gt={key:1,class:"last-updated"},Ut={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},jt={class:"pager"},zt=["innerHTML"],Wt=["innerHTML"],Kt={class:"pager"},qt=["innerHTML"],Rt=["innerHTML"],Jt=m({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:o}=L(),n=It(),i=wt(),l=y(()=>e.value.editLink&&o.value.editLink!==!1),v=y(()=>t.value.lastUpdated),p=y(()=>l.value||v.value||i.value.prev||i.value.next);return($,V)=>{var b,P,N,A;return p.value?(a(),u("footer",Ft,[c($.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),u("div",Dt,[l.value?(a(),u("div",Ot,[_(F,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:f(()=>[V[0]||(V[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),z(" "+I(r(n).text),1)]),_:1},8,["href"])])):h("",!0),v.value?(a(),u("div",Gt,[_(Et)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Ut,[V[1]||(V[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",jt,[(N=r(i).prev)!=null&&N.link?(a(),k(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,zt),d("span",{class:"title",innerHTML:r(i).prev.text},null,8,Wt)]}),_:1},8,["href"])):h("",!0)]),d("div",Kt,[(A=r(i).next)!=null&&A.link?(a(),k(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,qt),d("span",{class:"title",innerHTML:r(i).next.text},null,8,Rt)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),Xt=g(Jt,[["__scopeId","data-v-1bcd8184"]]),Yt={class:"container"},Qt={class:"aside-container"},Zt={class:"aside-content"},xt={class:"content"},en={class:"content-container"},tn={class:"main"},nn=m({__name:"VPDoc",setup(s){const{theme:e}=L(),t=Z(),{hasSidebar:o,hasAside:n,leftAside:i}=O(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,p)=>{const $=K("Content");return a(),u("div",{class:M(["VPDoc",{"has-sidebar":r(o),"has-aside":r(n)}])},[c(v.$slots,"doc-top",{},void 0,!0),d("div",Yt,[r(n)?(a(),u("div",{key:0,class:M(["aside",{"left-aside":r(i)}])},[p[0]||(p[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Qt,[d("div",Zt,[_(Mt,null,{"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),d("div",xt,[d("div",en,[c(v.$slots,"doc-before",{},void 0,!0),d("main",tn,[_($,{class:M(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(Xt,null,{"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),on=g(nn,[["__scopeId","data-v-e6f2a212"]]),sn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=y(()=>e.href&&ye.test(e.href)),o=y(()=>e.tag||(e.href?"a":"button"));return(n,i)=>(a(),k(E(o.value),{class:M(["VPButton",[n.size,n.theme]]),href:n.href?r(fe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[z(I(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),an=g(sn,[["__scopeId","data-v-93dc4167"]]),rn=["src","alt"],ln=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const o=K("VPImage",!0);return e.image?(a(),u(w,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",U({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(de)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,rn)):(a(),u(w,{key:1},[_(o,U({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(o,U({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),X=g(ln,[["__scopeId","data-v-ab19afbb"]]),cn={class:"container"},un={class:"main"},dn={class:"heading"},vn=["innerHTML"],pn=["innerHTML"],fn=["innerHTML"],hn={key:0,class:"actions"},mn={key:0,class:"image"},_n={class:"image-container"},kn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=x("hero-image-slot-exists");return(t,o)=>(a(),u("div",{class:M(["VPHero",{"has-image":t.image||r(e)}])},[d("div",cn,[d("div",un,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[d("h1",dn,[t.name?(a(),u("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,vn)):h("",!0),t.text?(a(),u("span",{key:1,innerHTML:t.text,class:"text"},null,8,pn)):h("",!0)]),t.tagline?(a(),u("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,fn)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",hn,[(a(!0),u(w,null,H(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[_(an,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",mn,[d("div",_n,[o[0]||(o[0]=d("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),bn=g(kn,[["__scopeId","data-v-dd8814ff"]]),gn=m({__name:"VPHomeHero",setup(s){const{frontmatter:e}=L();return(t,o)=>r(e).hero?(a(),k(bn,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),$n={class:"box"},yn={key:0,class:"icon"},Pn=["innerHTML"],Ln=["innerHTML"],Vn=["innerHTML"],Sn={key:4,class:"link-text"},Tn={class:"link-text-value"},Nn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),k(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[d("article",$n,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",yn,[_(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Pn)):h("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Ln),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Vn)):h("",!0),e.linkText?(a(),u("div",Sn,[d("p",Tn,[z(I(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Mn=g(Nn,[["__scopeId","data-v-bd37d1a2"]]),In={key:0,class:"VPFeatures"},wn={class:"container"},An={class:"items"},Cn=m({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=y(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,n)=>o.features?(a(),u("div",In,[d("div",wn,[d("div",An,[(a(!0),u(w,null,H(o.features,i=>(a(),u("div",{key:i.title,class:M(["item",[t.value]])},[_(Mn,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Hn=g(Cn,[["__scopeId","data-v-b1eea84a"]]),Bn=m({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=L();return(t,o)=>r(e).features?(a(),k(Hn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),En=m({__name:"VPHomeContent",setup(s){const{width:e}=Oe({initialWidth:0,includeScrollbar:!1});return(t,o)=>(a(),u("div",{class:"vp-doc container",style:Pe(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Fn=g(En,[["__scopeId","data-v-c141a4bd"]]),Dn=m({__name:"VPHome",setup(s){const{frontmatter:e,theme:t}=L();return(o,n)=>{const i=K("Content");return a(),u("div",{class:M(["VPHome",{"external-link-icon-enabled":r(t).externalLinkIcon}])},[c(o.$slots,"home-hero-before",{},void 0,!0),_(gn,null,{"home-hero-info-before":f(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(o.$slots,"home-hero-after",{},void 0,!0),c(o.$slots,"home-features-before",{},void 0,!0),_(Bn),c(o.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),k(Fn,{key:0},{default:f(()=>[_(i)]),_:1})):(a(),k(i,{key:1}))],2)}}}),On=g(Dn,[["__scopeId","data-v-e07eaea7"]]),Gn={},Un={class:"VPPage"};function jn(s,e){const t=K("Content");return a(),u("div",Un,[c(s.$slots,"page-top"),_(t),c(s.$slots,"page-bottom")])}const zn=g(Gn,[["render",jn]]),Wn=m({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=L(),{hasSidebar:o}=O();return(n,i)=>(a(),u("div",{class:M(["VPContent",{"has-sidebar":r(o),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[_(it)],!0):r(t).layout==="page"?(a(),k(zn,{key:1},{"page-top":f(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),k(On,{key:2},{"home-hero-before":f(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),k(E(r(t).layout),{key:3})):(a(),k(on,{key:4},{"doc-top":f(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Kn=g(Wn,[["__scopeId","data-v-9a6c75ad"]]),qn={class:"container"},Rn=["innerHTML"],Jn=["innerHTML"],Xn=m({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=O();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:M(["VPFooter",{"has-sidebar":r(o)}])},[d("div",qn,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,Rn)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,Jn)):h("",!0)])],2)):h("",!0)}}),Yn=g(Xn,[["__scopeId","data-v-566314d4"]]);function Qn(){const{theme:s,frontmatter:e}=L(),t=$e([]),o=y(()=>t.value.length>0);return Q(()=>{t.value=he(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:o}}const Zn={class:"menu-text"},xn={class:"header"},eo={class:"outline"},to=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=L(),o=T(!1),n=T(0),i=T(),l=T();function v(b){var P;(P=i.value)!=null&&P.contains(b.target)||(o.value=!1)}D(o,b=>{if(b){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),re("Escape",()=>{o.value=!1}),Q(()=>{o.value=!1});function p(){o.value=!o.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function $(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Le(()=>{o.value=!1}))}function V(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Pe({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:p,class:M({open:o.value})},[d("span",Zn,I(r(Me)(r(t))),1),P[0]||(P[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:V},I(r(t).returnToTopLabel||"Return to top"),1)),_(ue,{name:"flyout"},{default:f(()=>[o.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:$},[d("div",xn,[d("a",{class:"top-link",href:"#",onClick:V},I(r(t).returnToTopLabel||"Return to top"),1)]),d("div",eo,[_(Ie,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),no=g(to,[["__scopeId","data-v-6b867909"]]),oo={class:"container"},so=["aria-expanded"],ao={class:"menu-text"},ro=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=O(),{headers:n}=Qn(),{y:i}=Ve(),l=T(0);j(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Q(()=>{n.value=he(t.value.outline??e.value.outline)});const v=y(()=>n.value.length===0),p=y(()=>v.value&&!o.value),$=y(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:v.value,fixed:p.value}));return(V,b)=>r(t).layout!=="home"&&(!p.value||r(i)>=l.value)?(a(),u("div",{key:0,class:M($.value)},[d("div",oo,[r(o)?(a(),u("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",ao,I(r(e).sidebarMenuLabel||"Menu"),1)],8,so)):h("",!0),_(no,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),io=g(ro,[["__scopeId","data-v-2488c25a"]]);function lo(){const s=T(!1);function e(){s.value=!0,window.addEventListener("resize",n)}function t(){s.value=!1,window.removeEventListener("resize",n)}function o(){s.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=Z();return D(()=>i.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:o}}const co={},uo={class:"VPSwitch",type:"button",role:"switch"},vo={class:"check"},po={key:0,class:"icon"};function fo(s,e){return a(),u("button",uo,[d("span",vo,[s.$slots.default?(a(),u("span",po,[c(s.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ho=g(co,[["render",fo],["__scopeId","data-v-b4ccac88"]]),mo=m({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=L(),o=x("toggle-appearance",()=>{e.value=!e.value}),n=T("");return pe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),k(ho,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(o)},{default:f(()=>l[0]||(l[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),me=g(mo,[["__scopeId","data-v-be9742d9"]]),_o={key:0,class:"VPNavBarAppearance"},ko=m({__name:"VPNavBarAppearance",setup(s){const{site:e}=L();return(t,o)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",_o,[_(me)])):h("",!0)}}),bo=g(ko,[["__scopeId","data-v-3f90c1a5"]]),_e=T();let we=!1,se=0;function go(s){const e=T(!1);if(ee){!we&&$o(),se++;const t=D(_e,o=>{var n,i,l;o===s.el.value||(n=s.el.value)!=null&&n.contains(o)?(e.value=!0,(i=s.onFocus)==null||i.call(s)):(e.value=!1,(l=s.onBlur)==null||l.call(s))});ve(()=>{t(),se--,se||yo()})}return Ge(e)}function $o(){document.addEventListener("focusin",Ae),we=!0,_e.value=document.activeElement}function yo(){document.removeEventListener("focusin",Ae)}function Ae(){_e.value=document.activeElement}const Po={class:"VPMenuLink"},Lo=["innerHTML"],Vo=m({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,o)=>(a(),u("div",Po,[_(F,{class:M({active:r(W)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Lo)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),te=g(Vo,[["__scopeId","data-v-7eeeb2dc"]]),So={class:"VPMenuGroup"},To={key:0,class:"title"},No=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",So,[e.text?(a(),u("p",To,I(e.text),1)):h("",!0),(a(!0),u(w,null,H(e.items,o=>(a(),u(w,null,["link"in o?(a(),k(te,{key:0,item:o},null,8,["item"])):h("",!0)],64))),256))]))}}),Mo=g(No,[["__scopeId","data-v-a6b0397c"]]),Io={class:"VPMenu"},wo={key:0,class:"items"},Ao=m({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),u("div",Io,[e.items?(a(),u("div",wo,[(a(!0),u(w,null,H(e.items,o=>(a(),u(w,{key:JSON.stringify(o)},["link"in o?(a(),k(te,{key:0,item:o},null,8,["item"])):"component"in o?(a(),k(E(o.component),U({key:1,ref_for:!0},o.props),null,16)):(a(),k(Mo,{key:2,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Co=g(Ao,[["__scopeId","data-v-20ed86d6"]]),Ho=["aria-expanded","aria-label"],Bo={key:0,class:"text"},Eo=["innerHTML"],Fo={key:1,class:"vpi-more-horizontal icon"},Do={class:"menu"},Oo=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=T(!1),t=T();go({el:t,onBlur:o});function o(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",Bo,[n.icon?(a(),u("span",{key:0,class:M([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Eo)):h("",!0),i[3]||(i[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",Fo))],8,Ho),d("div",Do,[_(Co,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ke=g(Oo,[["__scopeId","data-v-bfe7971f"]]),Go=["href","aria-label","innerHTML"],Uo=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=T();j(async()=>{var i;await Le();const n=(i=t.value)==null?void 0:i.children[0];n instanceof HTMLElement&&n.className.startsWith("vpi-social-")&&(getComputedStyle(n).maskImage||getComputedStyle(n).webkitMaskImage)==="none"&&n.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const o=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,i)=>(a(),u("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:o.value},null,8,Go))}}),jo=g(Uo,[["__scopeId","data-v-60a9a2d3"]]),zo={class:"VPSocialLinks"},Wo=m({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),u("div",zo,[(a(!0),u(w,null,H(e.links,({link:o,icon:n,ariaLabel:i})=>(a(),k(jo,{key:o,icon:n,link:o,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),be=g(Wo,[["__scopeId","data-v-e71e869c"]]),Ko={key:0,class:"group translations"},qo={class:"trans-title"},Ro={key:1,class:"group"},Jo={class:"item appearance"},Xo={class:"label"},Yo={class:"appearance-action"},Qo={key:2,class:"group"},Zo={class:"item social-links"},xo=m({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=L(),{localeLinks:o,currentLang:n}=R({correspondingLink:!0}),i=y(()=>o.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>i.value?(a(),k(ke,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(o).length&&r(n).label?(a(),u("div",Ko,[d("p",qo,I(r(n).label),1),(a(!0),u(w,null,H(r(o),p=>(a(),k(te,{key:p.link,item:p},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ro,[d("div",Jo,[d("p",Xo,I(r(t).darkModeSwitchLabel||"Appearance"),1),d("div",Yo,[_(me)])])])):h("",!0),r(t).socialLinks?(a(),u("div",Qo,[d("div",Zo,[_(be,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),es=g(xo,[["__scopeId","data-v-f953d92f"]]),ts=["aria-expanded"],ns=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),u("button",{type:"button",class:M(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},t[1]||(t[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,ts))}}),os=g(ns,[["__scopeId","data-v-6bee1efd"]]),ss=["innerHTML"],as=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,o)=>(a(),k(F,{class:M({VPNavBarMenuLink:!0,active:r(W)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,ss)]),_:1},8,["class","href","target","rel","no-icon"]))}}),rs=g(as,[["__scopeId","data-v-815115f5"]]),is=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=L(),o=i=>"component"in i?!1:"link"in i?W(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(o),n=y(()=>o(e.item));return(i,l)=>(a(),k(ke,{class:M({VPNavBarMenuGroup:!0,active:r(W)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ls={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},cs=m({__name:"VPNavBarMenu",setup(s){const{theme:e}=L();return(t,o)=>r(e).nav?(a(),u("nav",ls,[o[0]||(o[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(w,null,H(r(e).nav,n=>(a(),u(w,{key:JSON.stringify(n)},["link"in n?(a(),k(rs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props),null,16)):(a(),k(is,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),us=g(cs,[["__scopeId","data-v-afb2845e"]]);function ds(s){const{localeIndex:e,theme:t}=L();function o(n){var A,C,S;const i=n.split("."),l=(A=t.value.search)==null?void 0:A.options,v=l&&typeof l=="object",p=v&&((S=(C=l.locales)==null?void 0:C[e.value])==null?void 0:S.translations)||null,$=v&&l.translations||null;let V=p,b=$,P=s;const N=i.pop();for(const B of i){let G=null;const q=P==null?void 0:P[B];q&&(G=P=q);const ne=b==null?void 0:b[B];ne&&(G=b=ne);const oe=V==null?void 0:V[B];oe&&(G=V=oe),q||(P=G),ne||(b=G),oe||(V=G)}return(V==null?void 0:V[N])??(b==null?void 0:b[N])??(P==null?void 0:P[N])??""}return o}const vs=["aria-label"],ps={class:"DocSearch-Button-Container"},fs={class:"DocSearch-Button-Placeholder"},ge=m({__name:"VPNavBarSearchButton",setup(s){const t=ds({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[d("span",ps,[n[0]||(n[0]=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),d("span",fs,I(r(t)("button.buttonText")),1)]),n[1]||(n[1]=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,vs))}}),hs={class:"VPNavBarSearch"},ms={id:"local-search"},_s={key:1,id:"docsearch"},ks=m({__name:"VPNavBarSearch",setup(s){const e=Ue(()=>je(()=>import("./VPLocalSearchBox.CJEcdF5V.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:o}=L(),n=T(!1),i=T(!1);j(()=>{});function l(){n.value||(n.value=!0,setTimeout(v,16))}function v(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function p(b){const P=b.target,N=P.tagName;return P.isContentEditable||N==="INPUT"||N==="SELECT"||N==="TEXTAREA"}const $=T(!1);re("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),$.value=!0)}),re("/",b=>{p(b)||(b.preventDefault(),$.value=!0)});const V="local";return(b,P)=>{var N;return a(),u("div",hs,[r(V)==="local"?(a(),u(w,{key:0},[$.value?(a(),k(r(e),{key:0,onClose:P[0]||(P[0]=A=>$.value=!1)})):h("",!0),d("div",ms,[_(ge,{onClick:P[1]||(P[1]=A=>$.value=!0)})])],64)):r(V)==="algolia"?(a(),u(w,{key:1},[n.value?(a(),k(r(t),{key:0,algolia:((N=r(o).search)==null?void 0:N.options)??r(o).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",_s,[_(ge,{onClick:l})]))],64)):h("",!0)])}}}),bs=m({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=L();return(t,o)=>r(e).socialLinks?(a(),k(be,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),gs=g(bs,[["__scopeId","data-v-ef6192dc"]]),$s=["href","rel","target"],ys=["innerHTML"],Ps={key:2},Ls=m({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=L(),{hasSidebar:o}=O(),{currentLang:n}=R(),i=y(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),l=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),v=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,$)=>(a(),u("div",{class:M(["VPNavBarTitle",{"has-sidebar":r(o)}])},[d("a",{class:"title",href:i.value??r(fe)(r(n).link),rel:l.value,target:v.value},[c(p.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),k(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",{key:1,innerHTML:r(t).siteTitle},null,8,ys)):r(t).siteTitle===void 0?(a(),u("span",Ps,I(r(e).title),1)):h("",!0),c(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,$s)],2))}}),Vs=g(Ls,[["__scopeId","data-v-9f43907a"]]),Ss={class:"items"},Ts={class:"title"},Ns=m({__name:"VPNavBarTranslations",setup(s){const{theme:e}=L(),{localeLinks:t,currentLang:o}=R({correspondingLink:!0});return(n,i)=>r(t).length&&r(o).label?(a(),k(ke,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[d("div",Ss,[d("p",Ts,I(r(o).label),1),(a(!0),u(w,null,H(r(t),l=>(a(),k(te,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Ms=g(Ns,[["__scopeId","data-v-acee064b"]]),Is={class:"wrapper"},ws={class:"container"},As={class:"title"},Cs={class:"content"},Hs={class:"content-body"},Bs=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const e=s,{y:t}=Ve(),{hasSidebar:o}=O(),{frontmatter:n}=L(),i=T({});return pe(()=>{i.value={"has-sidebar":o.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),u("div",{class:M(["VPNavBar",i.value])},[d("div",Is,[d("div",ws,[d("div",As,[_(Vs,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Cs,[d("div",Hs,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),_(ks,{class:"search"}),_(us,{class:"menu"}),_(Ms,{class:"translations"}),_(bo,{class:"appearance"}),_(gs,{class:"social-links"}),_(es,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),_(os,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=p=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),Es=g(Bs,[["__scopeId","data-v-9fd4d1dd"]]),Fs={key:0,class:"VPNavScreenAppearance"},Ds={class:"text"},Os=m({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=L();return(o,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Fs,[d("p",Ds,I(r(t).darkModeSwitchLabel||"Appearance"),1),_(me)])):h("",!0)}}),Gs=g(Os,[["__scopeId","data-v-a3e2920d"]]),Us=["innerHTML"],js=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=x("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Us)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),zs=g(js,[["__scopeId","data-v-fa963d97"]]),Ws=["innerHTML"],Ks=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=x("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ws)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ce=g(Ks,[["__scopeId","data-v-e04f3e85"]]),qs={class:"VPNavScreenMenuGroupSection"},Rs={key:0,class:"title"},Js=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",qs,[e.text?(a(),u("p",Rs,I(e.text),1)):h("",!0),(a(!0),u(w,null,H(e.items,o=>(a(),k(Ce,{key:o.text,item:o},null,8,["item"]))),128))]))}}),Xs=g(Js,[["__scopeId","data-v-f60dbfa7"]]),Ys=["aria-controls","aria-expanded"],Qs=["innerHTML"],Zs=["id"],xs={key:0,class:"item"},ea={key:1,class:"item"},ta={key:2,class:"group"},na=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=T(!1),o=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:M(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:n},[d("span",{class:"button-text",innerHTML:i.text},null,8,Qs),l[0]||(l[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,Ys),d("div",{id:o.value,class:"items"},[(a(!0),u(w,null,H(i.items,v=>(a(),u(w,{key:JSON.stringify(v)},["link"in v?(a(),u("div",xs,[_(Ce,{item:v},null,8,["item"])])):"component"in v?(a(),u("div",ea,[(a(),k(E(v.component),U({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),u("div",ta,[_(Xs,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,Zs)],2))}}),oa=g(na,[["__scopeId","data-v-d99bfeec"]]),sa={key:0,class:"VPNavScreenMenu"},aa=m({__name:"VPNavScreenMenu",setup(s){const{theme:e}=L();return(t,o)=>r(e).nav?(a(),u("nav",sa,[(a(!0),u(w,null,H(r(e).nav,n=>(a(),u(w,{key:JSON.stringify(n)},["link"in n?(a(),k(zs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),k(oa,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),ra=m({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=L();return(t,o)=>r(e).socialLinks?(a(),k(be,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),ia={class:"list"},la=m({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=R({correspondingLink:!0}),o=T(!1);function n(){o.value=!o.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:M(["VPNavScreenTranslations",{open:o.value}])},[d("button",{class:"title",onClick:n},[l[0]||(l[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),z(" "+I(r(t).label)+" ",1),l[1]||(l[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",ia,[(a(!0),u(w,null,H(r(e),v=>(a(),u("li",{key:v.link,class:"item"},[_(F,{class:"link",href:v.link},{default:f(()=>[z(I(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),ca=g(la,[["__scopeId","data-v-516e4bc3"]]),ua={class:"container"},da=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=T(null),t=Se(ee?document.body:null);return(o,n)=>(a(),k(ue,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:f(()=>[o.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",ua,[c(o.$slots,"nav-screen-content-before",{},void 0,!0),_(aa,{class:"menu"}),_(ca,{class:"translations"}),_(Gs,{class:"appearance"}),_(ra,{class:"social-links"}),c(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),va=g(da,[["__scopeId","data-v-2dd6d0c7"]]),pa={key:0,class:"VPNav"},fa=m({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=lo(),{frontmatter:n}=L(),i=y(()=>n.value.navbar!==!1);return Te("close-screen",t),Y(()=>{ee&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,v)=>i.value?(a(),u("header",pa,[_(Es,{"is-screen-open":r(e),onToggleScreen:r(o)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(va,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ha=g(fa,[["__scopeId","data-v-7ad780c2"]]),ma=["role","tabindex"],_a={key:1,class:"items"},ka=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:o,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:v,toggle:p}=dt(y(()=>e.item)),$=y(()=>v.value?"section":"div"),V=y(()=>n.value?"a":"div"),b=y(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>n.value?void 0:"button"),N=y(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function A(S){"key"in S&&S.key!=="Enter"||!e.item.link&&p()}function C(){e.item.link&&p()}return(S,B)=>{const G=K("VPSidebarItem",!0);return a(),k(E($.value),{class:M(["VPSidebarItem",N.value])},{default:f(()=>[S.item.text?(a(),u("div",U({key:0,class:"item",role:P.value},ze(S.item.items?{click:A,keydown:A}:{},!0),{tabindex:S.item.items&&0}),[B[1]||(B[1]=d("div",{class:"indicator"},null,-1)),S.item.link?(a(),k(F,{key:0,tag:V.value,class:"link",href:S.item.link,rel:S.item.rel,target:S.item.target},{default:f(()=>[(a(),k(E(b.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(E(b.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null&&S.item.items&&S.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:We(C,["enter"]),tabindex:"0"},B[0]||(B[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,ma)):h("",!0),S.item.items&&S.item.items.length?(a(),u("div",_a,[S.depth<5?(a(!0),u(w,{key:0},H(S.item.items,q=>(a(),k(G,{key:q.text,item:q,depth:S.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),ba=g(ka,[["__scopeId","data-v-0009425e"]]),ga=m({__name:"VPSidebarGroup",props:{items:{}},setup(s){const e=T(!0);let t=null;return j(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ke(()=>{t!=null&&(clearTimeout(t),t=null)}),(o,n)=>(a(!0),u(w,null,H(o.items,i=>(a(),u("div",{key:i.text,class:M(["group",{"no-transition":e.value}])},[_(ba,{item:i,depth:0},null,8,["item"])],2))),128))}}),$a=g(ga,[["__scopeId","data-v-51288d80"]]),ya={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Pa=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=O(),o=s,n=T(null),i=Se(ee?document.body:null);D([o,n],()=>{var v;o.open?(i.value=!0,(v=n.value)==null||v.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return D(e,()=>{l.value+=1},{deep:!0}),(v,p)=>r(t)?(a(),u("aside",{key:0,class:M(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:p[0]||(p[0]=qe(()=>{},["stop"]))},[p[2]||(p[2]=d("div",{class:"curtain"},null,-1)),d("nav",ya,[p[1]||(p[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),k($a,{items:r(e),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),La=g(Pa,[["__scopeId","data-v-42c4c606"]]),Va=m({__name:"VPSkipLink",setup(s){const{theme:e}=L(),t=Z(),o=T();D(()=>t.path,()=>o.value.focus());function n({target:i}){const l=document.getElementById(decodeURIComponent(i.hash).slice(1));if(l){const v=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",v)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",v),l.focus(),window.scrollTo(0,0)}}return(i,l)=>(a(),u(w,null,[d("span",{ref_key:"backToTop",ref:o,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n},I(r(e).skipToContentLabel||"Skip to content"),1)],64))}}),Sa=g(Va,[["__scopeId","data-v-fcbfc0e0"]]),Ta=m({__name:"Layout",setup(s){const{isOpen:e,open:t,close:o}=O(),n=Z();D(()=>n.path,o),ut(e,o);const{frontmatter:i}=L(),l=Re(),v=y(()=>!!l["home-hero-image"]);return Te("hero-image-slot-exists",v),(p,$)=>{const V=K("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:M(["Layout",r(i).pageClass])},[c(p.$slots,"layout-top",{},void 0,!0),_(Sa),_(Qe,{class:"backdrop",show:r(e),onClick:r(o)},null,8,["show","onClick"]),_(ha,null,{"nav-bar-title-before":f(()=>[c(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(io,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),_(La,{open:r(e)},{"sidebar-nav-before":f(()=>[c(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(Kn,null,{"page-top":f(()=>[c(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(Yn),c(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(V,{key:1}))}}}),Na=g(Ta,[["__scopeId","data-v-d8b57b2d"]]),Ia={Layout:Na,enhanceApp:({app:s})=>{s.component("Badge",Je)}};export{ds as c,Ia as t,L as u}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.B974QcpM.js","assets/chunks/framework.DPDPlp3K.js"])))=>i.map(i=>d[i]); +import{d as m,c as u,r as c,n as M,o as a,a as z,t as I,b as k,w as f,T as ue,e as h,_ as g,u as He,i as Be,f as Ee,g as de,h as y,j as d,k as r,l as W,m as ae,p as T,q as D,s as Y,v as j,x as ve,y as pe,z as Fe,A as De,F as w,B as H,C as K,D as $e,E as Q,G as _,H as E,I as ye,J as Z,K as U,L as x,M as Oe,N as Pe,O as re,P as Le,Q as Ve,R as ee,S as Ge,U as Ue,V as je,W as Se,X as Te,Y as ze,Z as We,$ as Ke,a0 as qe,a1 as Re}from"./framework.DPDPlp3K.js";const Je=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),u("span",{class:M(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[z(I(e.text),1)])],2))}}),Xe={key:0,class:"VPBackdrop"},Ye=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),k(ue,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",Xe)):h("",!0)]),_:1}))}}),Qe=g(Ye,[["__scopeId","data-v-54a304ca"]]),L=He;function Ze(s,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(s,e):(s(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ie(s){return s.startsWith("/")?s:`/${s}`}function fe(s){const{pathname:e,search:t,hash:o,protocol:n}=new URL(s,"http://a.com");if(Be(s)||s.startsWith("#")||!n.startsWith("http")||!Ee(e))return s;const{site:i}=L(),l=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${o}`);return de(l)}function R({correspondingLink:s=!1}={}){const{site:e,localeIndex:t,page:o,theme:n,hash:i}=L(),l=y(()=>{var p,$;return{label:(p=e.value.locales[t.value])==null?void 0:p.label,link:(($=e.value.locales[t.value])==null?void 0:$.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([p,$])=>l.value.label===$.label?[]:{text:$.label,link:xe($.link||(p==="root"?"/":`/${p}/`),n.value.i18nRouting!==!1&&s,o.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function xe(s,e,t,o){return e?s.replace(/\/$/,"")+ie(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):s}const et={class:"NotFound"},tt={class:"code"},nt={class:"title"},ot={class:"quote"},st={class:"action"},at=["href","aria-label"],rt=m({__name:"NotFound",setup(s){const{theme:e}=L(),{currentLang:t}=R();return(o,n)=>{var i,l,v,p,$;return a(),u("div",et,[d("p",tt,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),d("h1",nt,I(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=d("div",{class:"divider"},null,-1)),d("blockquote",ot,I(((v=r(e).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",st,[d("a",{class:"link",href:r(de)(r(t).link),"aria-label":((p=r(e).notFound)==null?void 0:p.linkLabel)??"go to home"},I((($=r(e).notFound)==null?void 0:$.linkText)??"Take me home"),9,at)])])}}}),it=g(rt,[["__scopeId","data-v-6ff51ddd"]]);function Ne(s,e){if(Array.isArray(s))return J(s);if(s==null)return[];e=ie(e);const t=Object.keys(s).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(ie(n))),o=t?s[t]:[];return Array.isArray(o)?J(o):J(o.items,o.base)}function lt(s){const e=[];let t=0;for(const o in s){const n=s[o];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function ct(s){const e=[];function t(o){for(const n of o)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(s),e}function le(s,e){return Array.isArray(e)?e.some(t=>le(s,t)):W(s,e.link)?!0:e.items?le(s,e.items):!1}function J(s,e){return[...s].map(t=>{const o={...t},n=o.base||e;return n&&o.link&&(o.link=n+o.link),o.items&&(o.items=J(o.items,n)),o})}function O(){const{frontmatter:s,page:e,theme:t}=L(),o=ae("(min-width: 960px)"),n=T(!1),i=y(()=>{const C=t.value.sidebar,S=e.value.relativePath;return C?Ne(C,S):[]}),l=T(i.value);D(i,(C,S)=>{JSON.stringify(C)!==JSON.stringify(S)&&(l.value=i.value)});const v=y(()=>s.value.sidebar!==!1&&l.value.length>0&&s.value.layout!=="home"),p=y(()=>$?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),$=y(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),V=y(()=>v.value&&o.value),b=y(()=>v.value?lt(l.value):[]);function P(){n.value=!0}function N(){n.value=!1}function A(){n.value?N():P()}return{isOpen:n,sidebar:l,sidebarGroups:b,hasSidebar:v,hasAside:$,leftAside:p,isSidebarEnabled:V,open:P,close:N,toggle:A}}function ut(s,e){let t;Y(()=>{t=s.value?document.activeElement:void 0}),j(()=>{window.addEventListener("keyup",o)}),ve(()=>{window.removeEventListener("keyup",o)});function o(n){n.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function dt(s){const{page:e,hash:t}=L(),o=T(!1),n=y(()=>s.value.collapsed!=null),i=y(()=>!!s.value.link),l=T(!1),v=()=>{l.value=W(e.value.relativePath,s.value.link)};D([e,s,t],v),j(v);const p=y(()=>l.value?!0:s.value.items?le(e.value.relativePath,s.value.items):!1),$=y(()=>!!(s.value.items&&s.value.items.length));Y(()=>{o.value=!!(n.value&&s.value.collapsed)}),pe(()=>{(l.value||p.value)&&(o.value=!1)});function V(){n.value&&(o.value=!o.value)}return{collapsed:o,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:p,hasChildren:$,toggle:V}}function vt(){const{hasSidebar:s}=O(),e=ae("(min-width: 960px)"),t=ae("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const pt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ce=[];function Me(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function he(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:ft(t),link:"#"+t.id,level:o}});return ht(e,s)}function ft(s){let e="";for(const t of s.childNodes)if(t.nodeType===1){if(pt.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function ht(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return kt(s,o,n)}function mt(s,e){const{isAsideEnabled:t}=vt(),o=Ze(i,100);let n=null;j(()=>{requestAnimationFrame(i),window.addEventListener("scroll",o)}),Fe(()=>{l(location.hash)}),ve(()=>{window.removeEventListener("scroll",o)});function i(){if(!t.value)return;const v=window.scrollY,p=window.innerHeight,$=document.body.offsetHeight,V=Math.abs(v+p-$)<1,b=ce.map(({element:N,link:A})=>({link:A,top:_t(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,A)=>N.top-A.top);if(!b.length){l(null);return}if(v<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:N,top:A}of b){if(A>v+De()+4)break;P=N}l(P)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=s.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const p=n;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function _t(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}function kt(s,e,t){ce.length=0;const o=[],n=[];return s.forEach(i=>{const l={...i,children:[]};let v=n[n.length-1];for(;v&&v.level>=l.level;)n.pop(),v=n[n.length-1];if(l.element.classList.contains("ignore-header")||v&&"shouldIgnore"in v){n.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{const n=K("VPDocOutlineItem",!0);return a(),u("ul",{class:M(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(w,null,H(t.headers,({children:i,link:l,title:v})=>(a(),u("li",null,[d("a",{class:"outline-link",href:l,onClick:e,title:v},I(v),9,bt),i!=null&&i.length?(a(),k(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Ie=g(gt,[["__scopeId","data-v-53c99d69"]]),$t={class:"content"},yt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Pt=m({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=L(),o=$e([]);Q(()=>{o.value=he(e.value.outline??t.value.outline)});const n=T(),i=T();return mt(n,i),(l,v)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:M(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:n},[d("div",$t,[d("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),d("div",yt,I(r(Me)(r(t))),1),_(Ie,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),Lt=g(Pt,[["__scopeId","data-v-f610f197"]]),Vt={class:"VPDocAsideCarbonAds"},St=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,o)=>(a(),u("div",Vt,[_(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Tt={class:"VPDocAside"},Nt=m({__name:"VPDocAside",setup(s){const{theme:e}=L();return(t,o)=>(a(),u("div",Tt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),_(Lt),c(t.$slots,"aside-outline-after",{},void 0,!0),o[0]||(o[0]=d("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),k(St,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Mt=g(Nt,[["__scopeId","data-v-cb998dce"]]);function It(){const{theme:s,page:e}=L();return y(()=>{const{text:t="Edit this page",pattern:o=""}=s.value.editLink||{};let n;return typeof o=="function"?n=o(e.value):n=o.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function wt(){const{page:s,theme:e,frontmatter:t}=L();return y(()=>{var $,V,b,P,N,A,C,S;const o=Ne(e.value.sidebar,s.value.relativePath),n=ct(o),i=At(n,B=>B.link.replace(/[?#].*$/,"")),l=i.findIndex(B=>W(s.value.relativePath,B.link)),v=(($=e.value.docFooter)==null?void 0:$.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((N=i[l-1])==null?void 0:N.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((S=i[l+1])==null?void 0:S.link)}}})}function At(s,e){const t=new Set;return s.filter(o=>{const n=e(o);return t.has(n)?!1:t.add(n)})}const F=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=y(()=>e.tag??(e.href?"a":"span")),o=y(()=>e.href&&ye.test(e.href)||e.target==="_blank");return(n,i)=>(a(),k(E(t.value),{class:M(["VPLink",{link:n.href,"vp-external-link-icon":o.value,"no-icon":n.noIcon}]),href:n.href?r(fe)(n.href):void 0,target:n.target??(o.value?"_blank":void 0),rel:n.rel??(o.value?"noreferrer":void 0)},{default:f(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ct={class:"VPLastUpdated"},Ht=["datetime"],Bt=m({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,lang:o}=L(),n=y(()=>new Date(t.value.lastUpdated)),i=y(()=>n.value.toISOString()),l=T("");return j(()=>{Y(()=>{var v,p,$;l.value=new Intl.DateTimeFormat((p=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&p.forceLocale?o.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,p)=>{var $;return a(),u("p",Ct,[z(I((($=r(e).lastUpdated)==null?void 0:$.text)||r(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:i.value},I(l.value),9,Ht)])}}}),Et=g(Bt,[["__scopeId","data-v-1bb0c8a8"]]),Ft={key:0,class:"VPDocFooter"},Dt={key:0,class:"edit-info"},Ot={key:0,class:"edit-link"},Gt={key:1,class:"last-updated"},Ut={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},jt={class:"pager"},zt=["innerHTML"],Wt=["innerHTML"],Kt={class:"pager"},qt=["innerHTML"],Rt=["innerHTML"],Jt=m({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:o}=L(),n=It(),i=wt(),l=y(()=>e.value.editLink&&o.value.editLink!==!1),v=y(()=>t.value.lastUpdated),p=y(()=>l.value||v.value||i.value.prev||i.value.next);return($,V)=>{var b,P,N,A;return p.value?(a(),u("footer",Ft,[c($.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),u("div",Dt,[l.value?(a(),u("div",Ot,[_(F,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:f(()=>[V[0]||(V[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),z(" "+I(r(n).text),1)]),_:1},8,["href"])])):h("",!0),v.value?(a(),u("div",Gt,[_(Et)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Ut,[V[1]||(V[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",jt,[(N=r(i).prev)!=null&&N.link?(a(),k(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,zt),d("span",{class:"title",innerHTML:r(i).prev.text},null,8,Wt)]}),_:1},8,["href"])):h("",!0)]),d("div",Kt,[(A=r(i).next)!=null&&A.link?(a(),k(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,qt),d("span",{class:"title",innerHTML:r(i).next.text},null,8,Rt)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),Xt=g(Jt,[["__scopeId","data-v-1bcd8184"]]),Yt={class:"container"},Qt={class:"aside-container"},Zt={class:"aside-content"},xt={class:"content"},en={class:"content-container"},tn={class:"main"},nn=m({__name:"VPDoc",setup(s){const{theme:e}=L(),t=Z(),{hasSidebar:o,hasAside:n,leftAside:i}=O(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,p)=>{const $=K("Content");return a(),u("div",{class:M(["VPDoc",{"has-sidebar":r(o),"has-aside":r(n)}])},[c(v.$slots,"doc-top",{},void 0,!0),d("div",Yt,[r(n)?(a(),u("div",{key:0,class:M(["aside",{"left-aside":r(i)}])},[p[0]||(p[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Qt,[d("div",Zt,[_(Mt,null,{"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),d("div",xt,[d("div",en,[c(v.$slots,"doc-before",{},void 0,!0),d("main",tn,[_($,{class:M(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(Xt,null,{"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),on=g(nn,[["__scopeId","data-v-e6f2a212"]]),sn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=y(()=>e.href&&ye.test(e.href)),o=y(()=>e.tag||(e.href?"a":"button"));return(n,i)=>(a(),k(E(o.value),{class:M(["VPButton",[n.size,n.theme]]),href:n.href?r(fe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[z(I(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),an=g(sn,[["__scopeId","data-v-93dc4167"]]),rn=["src","alt"],ln=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const o=K("VPImage",!0);return e.image?(a(),u(w,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",U({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(de)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,rn)):(a(),u(w,{key:1},[_(o,U({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(o,U({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),X=g(ln,[["__scopeId","data-v-ab19afbb"]]),cn={class:"container"},un={class:"main"},dn={class:"heading"},vn=["innerHTML"],pn=["innerHTML"],fn=["innerHTML"],hn={key:0,class:"actions"},mn={key:0,class:"image"},_n={class:"image-container"},kn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=x("hero-image-slot-exists");return(t,o)=>(a(),u("div",{class:M(["VPHero",{"has-image":t.image||r(e)}])},[d("div",cn,[d("div",un,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[d("h1",dn,[t.name?(a(),u("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,vn)):h("",!0),t.text?(a(),u("span",{key:1,innerHTML:t.text,class:"text"},null,8,pn)):h("",!0)]),t.tagline?(a(),u("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,fn)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",hn,[(a(!0),u(w,null,H(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[_(an,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",mn,[d("div",_n,[o[0]||(o[0]=d("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),bn=g(kn,[["__scopeId","data-v-dd8814ff"]]),gn=m({__name:"VPHomeHero",setup(s){const{frontmatter:e}=L();return(t,o)=>r(e).hero?(a(),k(bn,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),$n={class:"box"},yn={key:0,class:"icon"},Pn=["innerHTML"],Ln=["innerHTML"],Vn=["innerHTML"],Sn={key:4,class:"link-text"},Tn={class:"link-text-value"},Nn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),k(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[d("article",$n,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",yn,[_(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Pn)):h("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Ln),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Vn)):h("",!0),e.linkText?(a(),u("div",Sn,[d("p",Tn,[z(I(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Mn=g(Nn,[["__scopeId","data-v-bd37d1a2"]]),In={key:0,class:"VPFeatures"},wn={class:"container"},An={class:"items"},Cn=m({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=y(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,n)=>o.features?(a(),u("div",In,[d("div",wn,[d("div",An,[(a(!0),u(w,null,H(o.features,i=>(a(),u("div",{key:i.title,class:M(["item",[t.value]])},[_(Mn,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Hn=g(Cn,[["__scopeId","data-v-b1eea84a"]]),Bn=m({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=L();return(t,o)=>r(e).features?(a(),k(Hn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),En=m({__name:"VPHomeContent",setup(s){const{width:e}=Oe({initialWidth:0,includeScrollbar:!1});return(t,o)=>(a(),u("div",{class:"vp-doc container",style:Pe(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Fn=g(En,[["__scopeId","data-v-c141a4bd"]]),Dn=m({__name:"VPHome",setup(s){const{frontmatter:e,theme:t}=L();return(o,n)=>{const i=K("Content");return a(),u("div",{class:M(["VPHome",{"external-link-icon-enabled":r(t).externalLinkIcon}])},[c(o.$slots,"home-hero-before",{},void 0,!0),_(gn,null,{"home-hero-info-before":f(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(o.$slots,"home-hero-after",{},void 0,!0),c(o.$slots,"home-features-before",{},void 0,!0),_(Bn),c(o.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),k(Fn,{key:0},{default:f(()=>[_(i)]),_:1})):(a(),k(i,{key:1}))],2)}}}),On=g(Dn,[["__scopeId","data-v-e07eaea7"]]),Gn={},Un={class:"VPPage"};function jn(s,e){const t=K("Content");return a(),u("div",Un,[c(s.$slots,"page-top"),_(t),c(s.$slots,"page-bottom")])}const zn=g(Gn,[["render",jn]]),Wn=m({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=L(),{hasSidebar:o}=O();return(n,i)=>(a(),u("div",{class:M(["VPContent",{"has-sidebar":r(o),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[_(it)],!0):r(t).layout==="page"?(a(),k(zn,{key:1},{"page-top":f(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),k(On,{key:2},{"home-hero-before":f(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),k(E(r(t).layout),{key:3})):(a(),k(on,{key:4},{"doc-top":f(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Kn=g(Wn,[["__scopeId","data-v-9a6c75ad"]]),qn={class:"container"},Rn=["innerHTML"],Jn=["innerHTML"],Xn=m({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=O();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:M(["VPFooter",{"has-sidebar":r(o)}])},[d("div",qn,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,Rn)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,Jn)):h("",!0)])],2)):h("",!0)}}),Yn=g(Xn,[["__scopeId","data-v-566314d4"]]);function Qn(){const{theme:s,frontmatter:e}=L(),t=$e([]),o=y(()=>t.value.length>0);return Q(()=>{t.value=he(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:o}}const Zn={class:"menu-text"},xn={class:"header"},eo={class:"outline"},to=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=L(),o=T(!1),n=T(0),i=T(),l=T();function v(b){var P;(P=i.value)!=null&&P.contains(b.target)||(o.value=!1)}D(o,b=>{if(b){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),re("Escape",()=>{o.value=!1}),Q(()=>{o.value=!1});function p(){o.value=!o.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function $(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Le(()=>{o.value=!1}))}function V(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Pe({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:p,class:M({open:o.value})},[d("span",Zn,I(r(Me)(r(t))),1),P[0]||(P[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:V},I(r(t).returnToTopLabel||"Return to top"),1)),_(ue,{name:"flyout"},{default:f(()=>[o.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:$},[d("div",xn,[d("a",{class:"top-link",href:"#",onClick:V},I(r(t).returnToTopLabel||"Return to top"),1)]),d("div",eo,[_(Ie,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),no=g(to,[["__scopeId","data-v-6b867909"]]),oo={class:"container"},so=["aria-expanded"],ao={class:"menu-text"},ro=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=O(),{headers:n}=Qn(),{y:i}=Ve(),l=T(0);j(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Q(()=>{n.value=he(t.value.outline??e.value.outline)});const v=y(()=>n.value.length===0),p=y(()=>v.value&&!o.value),$=y(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:v.value,fixed:p.value}));return(V,b)=>r(t).layout!=="home"&&(!p.value||r(i)>=l.value)?(a(),u("div",{key:0,class:M($.value)},[d("div",oo,[r(o)?(a(),u("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",ao,I(r(e).sidebarMenuLabel||"Menu"),1)],8,so)):h("",!0),_(no,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),io=g(ro,[["__scopeId","data-v-2488c25a"]]);function lo(){const s=T(!1);function e(){s.value=!0,window.addEventListener("resize",n)}function t(){s.value=!1,window.removeEventListener("resize",n)}function o(){s.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=Z();return D(()=>i.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:o}}const co={},uo={class:"VPSwitch",type:"button",role:"switch"},vo={class:"check"},po={key:0,class:"icon"};function fo(s,e){return a(),u("button",uo,[d("span",vo,[s.$slots.default?(a(),u("span",po,[c(s.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ho=g(co,[["render",fo],["__scopeId","data-v-b4ccac88"]]),mo=m({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=L(),o=x("toggle-appearance",()=>{e.value=!e.value}),n=T("");return pe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),k(ho,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(o)},{default:f(()=>l[0]||(l[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),me=g(mo,[["__scopeId","data-v-be9742d9"]]),_o={key:0,class:"VPNavBarAppearance"},ko=m({__name:"VPNavBarAppearance",setup(s){const{site:e}=L();return(t,o)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",_o,[_(me)])):h("",!0)}}),bo=g(ko,[["__scopeId","data-v-3f90c1a5"]]),_e=T();let we=!1,se=0;function go(s){const e=T(!1);if(ee){!we&&$o(),se++;const t=D(_e,o=>{var n,i,l;o===s.el.value||(n=s.el.value)!=null&&n.contains(o)?(e.value=!0,(i=s.onFocus)==null||i.call(s)):(e.value=!1,(l=s.onBlur)==null||l.call(s))});ve(()=>{t(),se--,se||yo()})}return Ge(e)}function $o(){document.addEventListener("focusin",Ae),we=!0,_e.value=document.activeElement}function yo(){document.removeEventListener("focusin",Ae)}function Ae(){_e.value=document.activeElement}const Po={class:"VPMenuLink"},Lo=["innerHTML"],Vo=m({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,o)=>(a(),u("div",Po,[_(F,{class:M({active:r(W)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Lo)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),te=g(Vo,[["__scopeId","data-v-7eeeb2dc"]]),So={class:"VPMenuGroup"},To={key:0,class:"title"},No=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",So,[e.text?(a(),u("p",To,I(e.text),1)):h("",!0),(a(!0),u(w,null,H(e.items,o=>(a(),u(w,null,["link"in o?(a(),k(te,{key:0,item:o},null,8,["item"])):h("",!0)],64))),256))]))}}),Mo=g(No,[["__scopeId","data-v-a6b0397c"]]),Io={class:"VPMenu"},wo={key:0,class:"items"},Ao=m({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),u("div",Io,[e.items?(a(),u("div",wo,[(a(!0),u(w,null,H(e.items,o=>(a(),u(w,{key:JSON.stringify(o)},["link"in o?(a(),k(te,{key:0,item:o},null,8,["item"])):"component"in o?(a(),k(E(o.component),U({key:1,ref_for:!0},o.props),null,16)):(a(),k(Mo,{key:2,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Co=g(Ao,[["__scopeId","data-v-20ed86d6"]]),Ho=["aria-expanded","aria-label"],Bo={key:0,class:"text"},Eo=["innerHTML"],Fo={key:1,class:"vpi-more-horizontal icon"},Do={class:"menu"},Oo=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=T(!1),t=T();go({el:t,onBlur:o});function o(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",Bo,[n.icon?(a(),u("span",{key:0,class:M([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Eo)):h("",!0),i[3]||(i[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",Fo))],8,Ho),d("div",Do,[_(Co,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ke=g(Oo,[["__scopeId","data-v-bfe7971f"]]),Go=["href","aria-label","innerHTML"],Uo=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=T();j(async()=>{var i;await Le();const n=(i=t.value)==null?void 0:i.children[0];n instanceof HTMLElement&&n.className.startsWith("vpi-social-")&&(getComputedStyle(n).maskImage||getComputedStyle(n).webkitMaskImage)==="none"&&n.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const o=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,i)=>(a(),u("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:o.value},null,8,Go))}}),jo=g(Uo,[["__scopeId","data-v-60a9a2d3"]]),zo={class:"VPSocialLinks"},Wo=m({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),u("div",zo,[(a(!0),u(w,null,H(e.links,({link:o,icon:n,ariaLabel:i})=>(a(),k(jo,{key:o,icon:n,link:o,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),be=g(Wo,[["__scopeId","data-v-e71e869c"]]),Ko={key:0,class:"group translations"},qo={class:"trans-title"},Ro={key:1,class:"group"},Jo={class:"item appearance"},Xo={class:"label"},Yo={class:"appearance-action"},Qo={key:2,class:"group"},Zo={class:"item social-links"},xo=m({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=L(),{localeLinks:o,currentLang:n}=R({correspondingLink:!0}),i=y(()=>o.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>i.value?(a(),k(ke,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(o).length&&r(n).label?(a(),u("div",Ko,[d("p",qo,I(r(n).label),1),(a(!0),u(w,null,H(r(o),p=>(a(),k(te,{key:p.link,item:p},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ro,[d("div",Jo,[d("p",Xo,I(r(t).darkModeSwitchLabel||"Appearance"),1),d("div",Yo,[_(me)])])])):h("",!0),r(t).socialLinks?(a(),u("div",Qo,[d("div",Zo,[_(be,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),es=g(xo,[["__scopeId","data-v-f953d92f"]]),ts=["aria-expanded"],ns=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),u("button",{type:"button",class:M(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},t[1]||(t[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,ts))}}),os=g(ns,[["__scopeId","data-v-6bee1efd"]]),ss=["innerHTML"],as=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,o)=>(a(),k(F,{class:M({VPNavBarMenuLink:!0,active:r(W)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,ss)]),_:1},8,["class","href","target","rel","no-icon"]))}}),rs=g(as,[["__scopeId","data-v-815115f5"]]),is=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=L(),o=i=>"component"in i?!1:"link"in i?W(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(o),n=y(()=>o(e.item));return(i,l)=>(a(),k(ke,{class:M({VPNavBarMenuGroup:!0,active:r(W)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ls={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},cs=m({__name:"VPNavBarMenu",setup(s){const{theme:e}=L();return(t,o)=>r(e).nav?(a(),u("nav",ls,[o[0]||(o[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(w,null,H(r(e).nav,n=>(a(),u(w,{key:JSON.stringify(n)},["link"in n?(a(),k(rs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props),null,16)):(a(),k(is,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),us=g(cs,[["__scopeId","data-v-afb2845e"]]);function ds(s){const{localeIndex:e,theme:t}=L();function o(n){var A,C,S;const i=n.split("."),l=(A=t.value.search)==null?void 0:A.options,v=l&&typeof l=="object",p=v&&((S=(C=l.locales)==null?void 0:C[e.value])==null?void 0:S.translations)||null,$=v&&l.translations||null;let V=p,b=$,P=s;const N=i.pop();for(const B of i){let G=null;const q=P==null?void 0:P[B];q&&(G=P=q);const ne=b==null?void 0:b[B];ne&&(G=b=ne);const oe=V==null?void 0:V[B];oe&&(G=V=oe),q||(P=G),ne||(b=G),oe||(V=G)}return(V==null?void 0:V[N])??(b==null?void 0:b[N])??(P==null?void 0:P[N])??""}return o}const vs=["aria-label"],ps={class:"DocSearch-Button-Container"},fs={class:"DocSearch-Button-Placeholder"},ge=m({__name:"VPNavBarSearchButton",setup(s){const t=ds({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[d("span",ps,[n[0]||(n[0]=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),d("span",fs,I(r(t)("button.buttonText")),1)]),n[1]||(n[1]=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,vs))}}),hs={class:"VPNavBarSearch"},ms={id:"local-search"},_s={key:1,id:"docsearch"},ks=m({__name:"VPNavBarSearch",setup(s){const e=Ue(()=>je(()=>import("./VPLocalSearchBox.B974QcpM.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:o}=L(),n=T(!1),i=T(!1);j(()=>{});function l(){n.value||(n.value=!0,setTimeout(v,16))}function v(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function p(b){const P=b.target,N=P.tagName;return P.isContentEditable||N==="INPUT"||N==="SELECT"||N==="TEXTAREA"}const $=T(!1);re("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),$.value=!0)}),re("/",b=>{p(b)||(b.preventDefault(),$.value=!0)});const V="local";return(b,P)=>{var N;return a(),u("div",hs,[r(V)==="local"?(a(),u(w,{key:0},[$.value?(a(),k(r(e),{key:0,onClose:P[0]||(P[0]=A=>$.value=!1)})):h("",!0),d("div",ms,[_(ge,{onClick:P[1]||(P[1]=A=>$.value=!0)})])],64)):r(V)==="algolia"?(a(),u(w,{key:1},[n.value?(a(),k(r(t),{key:0,algolia:((N=r(o).search)==null?void 0:N.options)??r(o).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",_s,[_(ge,{onClick:l})]))],64)):h("",!0)])}}}),bs=m({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=L();return(t,o)=>r(e).socialLinks?(a(),k(be,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),gs=g(bs,[["__scopeId","data-v-ef6192dc"]]),$s=["href","rel","target"],ys=["innerHTML"],Ps={key:2},Ls=m({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=L(),{hasSidebar:o}=O(),{currentLang:n}=R(),i=y(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),l=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),v=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,$)=>(a(),u("div",{class:M(["VPNavBarTitle",{"has-sidebar":r(o)}])},[d("a",{class:"title",href:i.value??r(fe)(r(n).link),rel:l.value,target:v.value},[c(p.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),k(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",{key:1,innerHTML:r(t).siteTitle},null,8,ys)):r(t).siteTitle===void 0?(a(),u("span",Ps,I(r(e).title),1)):h("",!0),c(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,$s)],2))}}),Vs=g(Ls,[["__scopeId","data-v-9f43907a"]]),Ss={class:"items"},Ts={class:"title"},Ns=m({__name:"VPNavBarTranslations",setup(s){const{theme:e}=L(),{localeLinks:t,currentLang:o}=R({correspondingLink:!0});return(n,i)=>r(t).length&&r(o).label?(a(),k(ke,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[d("div",Ss,[d("p",Ts,I(r(o).label),1),(a(!0),u(w,null,H(r(t),l=>(a(),k(te,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Ms=g(Ns,[["__scopeId","data-v-acee064b"]]),Is={class:"wrapper"},ws={class:"container"},As={class:"title"},Cs={class:"content"},Hs={class:"content-body"},Bs=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const e=s,{y:t}=Ve(),{hasSidebar:o}=O(),{frontmatter:n}=L(),i=T({});return pe(()=>{i.value={"has-sidebar":o.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),u("div",{class:M(["VPNavBar",i.value])},[d("div",Is,[d("div",ws,[d("div",As,[_(Vs,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Cs,[d("div",Hs,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),_(ks,{class:"search"}),_(us,{class:"menu"}),_(Ms,{class:"translations"}),_(bo,{class:"appearance"}),_(gs,{class:"social-links"}),_(es,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),_(os,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=p=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),Es=g(Bs,[["__scopeId","data-v-9fd4d1dd"]]),Fs={key:0,class:"VPNavScreenAppearance"},Ds={class:"text"},Os=m({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=L();return(o,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Fs,[d("p",Ds,I(r(t).darkModeSwitchLabel||"Appearance"),1),_(me)])):h("",!0)}}),Gs=g(Os,[["__scopeId","data-v-a3e2920d"]]),Us=["innerHTML"],js=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=x("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Us)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),zs=g(js,[["__scopeId","data-v-fa963d97"]]),Ws=["innerHTML"],Ks=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=x("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ws)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ce=g(Ks,[["__scopeId","data-v-e04f3e85"]]),qs={class:"VPNavScreenMenuGroupSection"},Rs={key:0,class:"title"},Js=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",qs,[e.text?(a(),u("p",Rs,I(e.text),1)):h("",!0),(a(!0),u(w,null,H(e.items,o=>(a(),k(Ce,{key:o.text,item:o},null,8,["item"]))),128))]))}}),Xs=g(Js,[["__scopeId","data-v-f60dbfa7"]]),Ys=["aria-controls","aria-expanded"],Qs=["innerHTML"],Zs=["id"],xs={key:0,class:"item"},ea={key:1,class:"item"},ta={key:2,class:"group"},na=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=T(!1),o=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:M(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:n},[d("span",{class:"button-text",innerHTML:i.text},null,8,Qs),l[0]||(l[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,Ys),d("div",{id:o.value,class:"items"},[(a(!0),u(w,null,H(i.items,v=>(a(),u(w,{key:JSON.stringify(v)},["link"in v?(a(),u("div",xs,[_(Ce,{item:v},null,8,["item"])])):"component"in v?(a(),u("div",ea,[(a(),k(E(v.component),U({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),u("div",ta,[_(Xs,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,Zs)],2))}}),oa=g(na,[["__scopeId","data-v-d99bfeec"]]),sa={key:0,class:"VPNavScreenMenu"},aa=m({__name:"VPNavScreenMenu",setup(s){const{theme:e}=L();return(t,o)=>r(e).nav?(a(),u("nav",sa,[(a(!0),u(w,null,H(r(e).nav,n=>(a(),u(w,{key:JSON.stringify(n)},["link"in n?(a(),k(zs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),k(oa,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),ra=m({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=L();return(t,o)=>r(e).socialLinks?(a(),k(be,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),ia={class:"list"},la=m({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=R({correspondingLink:!0}),o=T(!1);function n(){o.value=!o.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:M(["VPNavScreenTranslations",{open:o.value}])},[d("button",{class:"title",onClick:n},[l[0]||(l[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),z(" "+I(r(t).label)+" ",1),l[1]||(l[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",ia,[(a(!0),u(w,null,H(r(e),v=>(a(),u("li",{key:v.link,class:"item"},[_(F,{class:"link",href:v.link},{default:f(()=>[z(I(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),ca=g(la,[["__scopeId","data-v-516e4bc3"]]),ua={class:"container"},da=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=T(null),t=Se(ee?document.body:null);return(o,n)=>(a(),k(ue,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:f(()=>[o.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",ua,[c(o.$slots,"nav-screen-content-before",{},void 0,!0),_(aa,{class:"menu"}),_(ca,{class:"translations"}),_(Gs,{class:"appearance"}),_(ra,{class:"social-links"}),c(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),va=g(da,[["__scopeId","data-v-2dd6d0c7"]]),pa={key:0,class:"VPNav"},fa=m({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=lo(),{frontmatter:n}=L(),i=y(()=>n.value.navbar!==!1);return Te("close-screen",t),Y(()=>{ee&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,v)=>i.value?(a(),u("header",pa,[_(Es,{"is-screen-open":r(e),onToggleScreen:r(o)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(va,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ha=g(fa,[["__scopeId","data-v-7ad780c2"]]),ma=["role","tabindex"],_a={key:1,class:"items"},ka=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:o,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:v,toggle:p}=dt(y(()=>e.item)),$=y(()=>v.value?"section":"div"),V=y(()=>n.value?"a":"div"),b=y(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>n.value?void 0:"button"),N=y(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function A(S){"key"in S&&S.key!=="Enter"||!e.item.link&&p()}function C(){e.item.link&&p()}return(S,B)=>{const G=K("VPSidebarItem",!0);return a(),k(E($.value),{class:M(["VPSidebarItem",N.value])},{default:f(()=>[S.item.text?(a(),u("div",U({key:0,class:"item",role:P.value},ze(S.item.items?{click:A,keydown:A}:{},!0),{tabindex:S.item.items&&0}),[B[1]||(B[1]=d("div",{class:"indicator"},null,-1)),S.item.link?(a(),k(F,{key:0,tag:V.value,class:"link",href:S.item.link,rel:S.item.rel,target:S.item.target},{default:f(()=>[(a(),k(E(b.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(E(b.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null&&S.item.items&&S.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:We(C,["enter"]),tabindex:"0"},B[0]||(B[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,ma)):h("",!0),S.item.items&&S.item.items.length?(a(),u("div",_a,[S.depth<5?(a(!0),u(w,{key:0},H(S.item.items,q=>(a(),k(G,{key:q.text,item:q,depth:S.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),ba=g(ka,[["__scopeId","data-v-0009425e"]]),ga=m({__name:"VPSidebarGroup",props:{items:{}},setup(s){const e=T(!0);let t=null;return j(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ke(()=>{t!=null&&(clearTimeout(t),t=null)}),(o,n)=>(a(!0),u(w,null,H(o.items,i=>(a(),u("div",{key:i.text,class:M(["group",{"no-transition":e.value}])},[_(ba,{item:i,depth:0},null,8,["item"])],2))),128))}}),$a=g(ga,[["__scopeId","data-v-51288d80"]]),ya={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Pa=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=O(),o=s,n=T(null),i=Se(ee?document.body:null);D([o,n],()=>{var v;o.open?(i.value=!0,(v=n.value)==null||v.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return D(e,()=>{l.value+=1},{deep:!0}),(v,p)=>r(t)?(a(),u("aside",{key:0,class:M(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:p[0]||(p[0]=qe(()=>{},["stop"]))},[p[2]||(p[2]=d("div",{class:"curtain"},null,-1)),d("nav",ya,[p[1]||(p[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),k($a,{items:r(e),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),La=g(Pa,[["__scopeId","data-v-42c4c606"]]),Va=m({__name:"VPSkipLink",setup(s){const{theme:e}=L(),t=Z(),o=T();D(()=>t.path,()=>o.value.focus());function n({target:i}){const l=document.getElementById(decodeURIComponent(i.hash).slice(1));if(l){const v=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",v)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",v),l.focus(),window.scrollTo(0,0)}}return(i,l)=>(a(),u(w,null,[d("span",{ref_key:"backToTop",ref:o,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n},I(r(e).skipToContentLabel||"Skip to content"),1)],64))}}),Sa=g(Va,[["__scopeId","data-v-fcbfc0e0"]]),Ta=m({__name:"Layout",setup(s){const{isOpen:e,open:t,close:o}=O(),n=Z();D(()=>n.path,o),ut(e,o);const{frontmatter:i}=L(),l=Re(),v=y(()=>!!l["home-hero-image"]);return Te("hero-image-slot-exists",v),(p,$)=>{const V=K("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:M(["Layout",r(i).pageClass])},[c(p.$slots,"layout-top",{},void 0,!0),_(Sa),_(Qe,{class:"backdrop",show:r(e),onClick:r(o)},null,8,["show","onClick"]),_(ha,null,{"nav-bar-title-before":f(()=>[c(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(io,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),_(La,{open:r(e)},{"sidebar-nav-before":f(()=>[c(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(Kn,null,{"page-top":f(()=>[c(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(Yn),c(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(V,{key:1}))}}}),Na=g(Ta,[["__scopeId","data-v-d8b57b2d"]]),Ia={Layout:Na,enhanceApp:({app:s})=>{s.component("Badge",Je)}};export{ds as c,Ia as t,L as u}; diff --git a/docs/.vitepress/dist/assets/notifications_Pushover.md.lZwGAQ0A.js b/docs/.vitepress/dist/assets/notifications_Pushover.md.lZwGAQ0A.js new file mode 100644 index 0000000..b169262 --- /dev/null +++ b/docs/.vitepress/dist/assets/notifications_Pushover.md.lZwGAQ0A.js @@ -0,0 +1 @@ +import{_ as s,c as a,o,j as e,a as r}from"./chunks/framework.DPDPlp3K.js";const n="/assets/notifications_pushover.CeUzFKPr.png",m=JSON.parse('{"title":"Pushover","description":"","frontmatter":{},"headers":[],"relativePath":"notifications/Pushover.md","filePath":"notifications/Pushover.md","lastUpdated":1745496781000}'),i={name:"notifications/Pushover.md"};function c(p,t,d,l,u,h){return o(),a("div",null,t[0]||(t[0]=[e("h1",{id:"pushover",tabindex:"-1"},[r("Pushover "),e("a",{class:"header-anchor",href:"#pushover","aria-label":'Permalink to "Pushover"'},"​")],-1),e("p",null,[e("img",{src:n,alt:"Set up"})],-1)]))}const v=s(i,[["render",c]]);export{m as __pageData,v as default}; diff --git a/docs/.vitepress/dist/assets/notifications_Pushover.md.lZwGAQ0A.lean.js b/docs/.vitepress/dist/assets/notifications_Pushover.md.lZwGAQ0A.lean.js new file mode 100644 index 0000000..b169262 --- /dev/null +++ b/docs/.vitepress/dist/assets/notifications_Pushover.md.lZwGAQ0A.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o,j as e,a as r}from"./chunks/framework.DPDPlp3K.js";const n="/assets/notifications_pushover.CeUzFKPr.png",m=JSON.parse('{"title":"Pushover","description":"","frontmatter":{},"headers":[],"relativePath":"notifications/Pushover.md","filePath":"notifications/Pushover.md","lastUpdated":1745496781000}'),i={name:"notifications/Pushover.md"};function c(p,t,d,l,u,h){return o(),a("div",null,t[0]||(t[0]=[e("h1",{id:"pushover",tabindex:"-1"},[r("Pushover "),e("a",{class:"header-anchor",href:"#pushover","aria-label":'Permalink to "Pushover"'},"​")],-1),e("p",null,[e("img",{src:n,alt:"Set up"})],-1)]))}const v=s(i,[["render",c]]);export{m as __pageData,v as default}; diff --git a/docs/.vitepress/dist/assets/notifications_pushover.CeUzFKPr.png b/docs/.vitepress/dist/assets/notifications_pushover.CeUzFKPr.png new file mode 100644 index 0000000..567cb10 Binary files /dev/null and b/docs/.vitepress/dist/assets/notifications_pushover.CeUzFKPr.png differ diff --git a/docs/.vitepress/dist/general/Applications.html b/docs/.vitepress/dist/general/Applications.html index ff6098b..a75ffa3 100644 --- a/docs/.vitepress/dist/general/Applications.html +++ b/docs/.vitepress/dist/general/Applications.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -

Skip to content

Applications

All your self-hosted applications are displayed here.

Add an application

To add a new application to CoreControl, follow these steps:

  1. Click the "Add Application" button in the top right corner of the server menu: Application Add Button

  2. Fill out the server details across the following information:

  • Name: Enter the name of the application
  • Server: Select the server on which the application is running
  • Description: Enter a short (or long) description of the server
  • Icon URL: Add the url pointing to the logo of the application. With the flash button the logo will be automatically selected.
  • Public URL: Enter the public URL of your application. This will be used to track the uptime.
  • Local URL: Enter the local URL of your application, i.e. the URL via which the application is only accessible in the local network

After filling out the required information, click "Add" to add the application to CoreControl.

Application Display

Your applications are displayed in a list or grid (depending on the display settings) - each application in its own card Application card

Released under the MIT License.

+
Skip to content

Applications

All your self-hosted applications are displayed here.

Add an application

To add a new application to CoreControl, follow these steps:

  1. Click the "Add Application" button in the top right corner of the server menu: Application Add Button

  2. Fill out the server details across the following information:

  • Name: Enter the name of the application
  • Server: Select the server on which the application is running
  • Description: Enter a short (or long) description of the server
  • Icon URL: Add the url pointing to the logo of the application. With the flash button the logo will be automatically selected.
  • Public URL: Enter the public URL of your application. This will be used to track the uptime.
  • Local URL: Enter the local URL of your application, i.e. the URL via which the application is only accessible in the local network

After filling out the required information, click "Add" to add the application to CoreControl.

Application Display

Your applications are displayed in a list or grid (depending on the display settings) - each application in its own card Application card

Released under the MIT License.

diff --git a/docs/.vitepress/dist/general/Dashboard.html b/docs/.vitepress/dist/general/Dashboard.html index 78fb3ce..7c3fc22 100644 --- a/docs/.vitepress/dist/general/Dashboard.html +++ b/docs/.vitepress/dist/general/Dashboard.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -
Skip to content

Dashboard

The dashboard is the most important place to get a quick overview of your infrastructure.

Cards Overview

The dashboard is divided into 4 cards that provide different aspects of your infrastructure monitoring:

Servers Card

Servers Card

The Servers card displays information about all your connected servers, including:

  • Number of Physical Servers
  • Number of Virtual Servers

Applications Card

Applications Card

The Applications card shows you:

  • Number of running applications across your infrastructure

Uptime Card

Uptime Card

The Uptime card provides:

  • Number of online applications

Network Card

Network Card

The Network card displays:

  • Sum of servers and applications

Released under the MIT License.

+
Skip to content

Dashboard

The dashboard is the most important place to get a quick overview of your infrastructure.

Cards Overview

The dashboard is divided into 4 cards that provide different aspects of your infrastructure monitoring:

Servers Card

Servers Card

The Servers card displays information about all your connected servers, including:

  • Number of Physical Servers
  • Number of Virtual Servers

Applications Card

Applications Card

The Applications card shows you:

  • Number of running applications across your infrastructure

Uptime Card

Uptime Card

The Uptime card provides:

  • Number of online applications

Network Card

Network Card

The Network card displays:

  • Sum of servers and applications

Released under the MIT License.

diff --git a/docs/.vitepress/dist/general/Network.html b/docs/.vitepress/dist/general/Network.html index dac1cf8..69d2678 100644 --- a/docs/.vitepress/dist/general/Network.html +++ b/docs/.vitepress/dist/general/Network.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -
Skip to content

Network

A network flowchart is automatically generated on this page, which shows the connections of your infrastructure. The main servers are displayed based on the main node “My Infrastrucutre”. Below this are the applications running directly on this server and next to it the VMs running on the server, if it is a host server. To the right of the VMs, all applications running on the respective VM are listed.

Released under the MIT License.

+
Skip to content

Network

A network flowchart is automatically generated on this page, which shows the connections of your infrastructure. The main servers are displayed based on the main node “My Infrastrucutre”. Below this are the applications running directly on this server and next to it the VMs running on the server, if it is a host server. To the right of the VMs, all applications running on the respective VM are listed.

Released under the MIT License.

diff --git a/docs/.vitepress/dist/general/Servers.html b/docs/.vitepress/dist/general/Servers.html index 625037c..72b0123 100644 --- a/docs/.vitepress/dist/general/Servers.html +++ b/docs/.vitepress/dist/general/Servers.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -
Skip to content

Servers

In the server menu you can see all your servers and add more if required

Add a Server

To add a new server to CoreControl, follow these steps:

  1. Click the "Add Server" button in the top right corner of the server menu: Servers Add Button

  2. Fill out the server details across the following tabs:

General Tab

Configure the basic server information:

  • Icon: Choose a custom icon for your server
  • Name: Enter a descriptive name for the server
  • Operating System: Select the server's operating system
  • IP Address: Enter the server's IP address
  • Management URL: Add the URL used to manage the server (optional)

Hardware Tab

Specify the server's hardware specifications:

  • CPU: Enter CPU model and specifications
  • GPU: Add graphics card details if applicable
  • RAM: Specify the amount of RAM
  • Disk: Enter storage capacity and configuration

Virtualization Tab

Configure virtualization settings:

  • Host Server Settings:
    • Enable "Host Server" if this server will host virtual machines
    • Perfect for hypervisors like Proxmox, VMware, or similar
  • VM Settings:
    • Select a host server if this server is a virtual machine
    • This creates a logical connection between the VM and its host

Monitoring Tab

Set up server monitoring options (see "Monitoring" section for detailed information)

After filling out the required information, click "Add" to add the server to CoreControl.

Monitoring

If you want to monitor the hardware usage and status of your servers, you will have to enable monitoring in the monitoring tab.

After you have done this you need to install Glances on the server. To help you with this, we have created a sample compose that you can simply copy. For detailed customizations, please refer to the Glances docs.

yaml
services:
+    
Skip to content

Servers

In the server menu you can see all your servers and add more if required

Add a Server

To add a new server to CoreControl, follow these steps:

  1. Click the "Add Server" button in the top right corner of the server menu: Servers Add Button

  2. Fill out the server details across the following tabs:

General Tab

Configure the basic server information:

  • Icon: Choose a custom icon for your server
  • Name: Enter a descriptive name for the server
  • Operating System: Select the server's operating system
  • IP Address: Enter the server's IP address
  • Management URL: Add the URL used to manage the server (optional)

Hardware Tab

Specify the server's hardware specifications:

  • CPU: Enter CPU model and specifications
  • GPU: Add graphics card details if applicable
  • RAM: Specify the amount of RAM
  • Disk: Enter storage capacity and configuration

Virtualization Tab

Configure virtualization settings:

  • Host Server Settings:
    • Enable "Host Server" if this server will host virtual machines
    • Perfect for hypervisors like Proxmox, VMware, or similar
  • VM Settings:
    • Select a host server if this server is a virtual machine
    • This creates a logical connection between the VM and its host

Monitoring Tab

Set up server monitoring options (see "Monitoring" section for detailed information)

After filling out the required information, click "Add" to add the server to CoreControl.

Monitoring

If you want to monitor the hardware usage and status of your servers, you will have to enable monitoring in the monitoring tab.

After you have done this you need to install Glances on the server. To help you with this, we have created a sample compose that you can simply copy. For detailed customizations, please refer to the Glances docs.

yaml
services:
   glances:
     image: nicolargo/glances:latest
     container_name: glances
diff --git a/docs/.vitepress/dist/general/Settings.html b/docs/.vitepress/dist/general/Settings.html
index 17a07ea..4c8760d 100644
--- a/docs/.vitepress/dist/general/Settings.html
+++ b/docs/.vitepress/dist/general/Settings.html
@@ -8,10 +8,10 @@
     
     
     
-    
-    
+    
+    
     
-    
+    
     
     
     
@@ -20,7 +20,7 @@
     
   
   
-    
Skip to content

Settings

Here you can manage the complete settings of CoreControl.

User Settings

User Settings

Theme Settings

Theme Settings

Notification Settings

Notification Settings

Released under the MIT License.

+
Skip to content

Settings

Here you can manage the complete settings of CoreControl.

User Settings

User Settings

Theme Settings

Theme Settings

Notification Settings

Notification Settings

Released under the MIT License.

diff --git a/docs/.vitepress/dist/general/Uptime.html b/docs/.vitepress/dist/general/Uptime.html index ab5bf37..2ff443a 100644 --- a/docs/.vitepress/dist/general/Uptime.html +++ b/docs/.vitepress/dist/general/Uptime.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -
Skip to content

Uptime

The uptime of all your Applications is shown here in a clear list.

Uptime

With the Select menu you can also filter the time span (30min, 7 days and 30 days)

Released under the MIT License.

+
Skip to content

Uptime

The uptime of all your Applications is shown here in a clear list.

Uptime

With the Select menu you can also filter the time span (30min, 7 days and 30 days)

Released under the MIT License.

diff --git a/docs/.vitepress/dist/hashmap.json b/docs/.vitepress/dist/hashmap.json index 4f2b1b3..1900046 100644 --- a/docs/.vitepress/dist/hashmap.json +++ b/docs/.vitepress/dist/hashmap.json @@ -1 +1 @@ -{"general_applications.md":"DFVqSlCw","general_dashboard.md":"DW5yESFW","general_network.md":"tbP8aEzX","general_servers.md":"BaASA60T","general_settings.md":"DrC2XV32","general_uptime.md":"CKBdQg4u","index.md":"_yXl4OkC","installation.md":"Cz1eOHOr","notifications_discord.md":"C0x5CxmR","notifications_email.md":"Cugw2BRs","notifications_general.md":"D7AVsSjD","notifications_gotify.md":"vFHjr6ko","notifications_ntfy.md":"CPMnGQVP","notifications_telegram.md":"B6_EzaEX"} +{"general_applications.md":"DFVqSlCw","general_dashboard.md":"DW5yESFW","general_network.md":"tbP8aEzX","general_servers.md":"BaASA60T","general_settings.md":"DrC2XV32","general_uptime.md":"CKBdQg4u","index.md":"_yXl4OkC","installation.md":"Cz1eOHOr","notifications_discord.md":"C0x5CxmR","notifications_email.md":"Cugw2BRs","notifications_general.md":"D7AVsSjD","notifications_gotify.md":"vFHjr6ko","notifications_ntfy.md":"CPMnGQVP","notifications_pushover.md":"lZwGAQ0A","notifications_telegram.md":"B6_EzaEX"} diff --git a/docs/.vitepress/dist/index.html b/docs/.vitepress/dist/index.html index b505a78..03e7bcb 100644 --- a/docs/.vitepress/dist/index.html +++ b/docs/.vitepress/dist/index.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -
Skip to content

CoreControlManage your server infrastructure

Logo

Released under the MIT License.

+
Skip to content

CoreControlManage your server infrastructure

Logo

Released under the MIT License.

diff --git a/docs/.vitepress/dist/installation.html b/docs/.vitepress/dist/installation.html index 6bdcb50..970376c 100644 --- a/docs/.vitepress/dist/installation.html +++ b/docs/.vitepress/dist/installation.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -
Skip to content

Installation

The easiest way to install CoreControl is using Docker Compose. Follow these steps:

Docker Compose Installation

DANGER

CoreControl is at an early stage of development and is subject to change. It is not recommended for use in a production environment at this time.

  1. Make sure Docker and Docker Compose are installed on your system.

  2. Create a file named docker-compose.yml with the following content:

yaml
services:
+    
Skip to content

Installation

The easiest way to install CoreControl is using Docker Compose. Follow these steps:

Docker Compose Installation

DANGER

CoreControl is at an early stage of development and is subject to change. It is not recommended for use in a production environment at this time.

  1. Make sure Docker and Docker Compose are installed on your system.

  2. Create a file named docker-compose.yml with the following content:

yaml
services:
   web:
     image: haedlessdev/corecontrol:latest
     ports:
diff --git a/docs/.vitepress/dist/notifications/Discord.html b/docs/.vitepress/dist/notifications/Discord.html
index c5152d4..e68c2e7 100644
--- a/docs/.vitepress/dist/notifications/Discord.html
+++ b/docs/.vitepress/dist/notifications/Discord.html
@@ -8,10 +8,10 @@
     
     
     
-    
-    
+    
+    
     
-    
+    
     
     
     
@@ -19,7 +19,7 @@
     
   
   
-    
Skip to content

Discord

Discord

Released under the MIT License.

+
Skip to content

Discord

Discord

Released under the MIT License.

diff --git a/docs/.vitepress/dist/notifications/Email.html b/docs/.vitepress/dist/notifications/Email.html index 734223c..04ab741 100644 --- a/docs/.vitepress/dist/notifications/Email.html +++ b/docs/.vitepress/dist/notifications/Email.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -
Skip to content

Released under the MIT License.

+
Skip to content

Released under the MIT License.

diff --git a/docs/.vitepress/dist/notifications/General.html b/docs/.vitepress/dist/notifications/General.html index f059c37..4b8ce57 100644 --- a/docs/.vitepress/dist/notifications/General.html +++ b/docs/.vitepress/dist/notifications/General.html @@ -8,10 +8,10 @@ - - + + - + @@ -20,7 +20,7 @@ -
Skip to content

Notifications

You can set the notifications for CoreControl in the settings. These notifications include when an application goes online or offline and when a server goes online or offline.

Notification Settings

You can also customize direct notification texts and improve them with placeholders

Released under the MIT License.

+
Skip to content

Notifications

You can set the notifications for CoreControl in the settings. These notifications include when an application goes online or offline and when a server goes online or offline.

Notification Settings

You can also customize direct notification texts and improve them with placeholders

Released under the MIT License.

diff --git a/docs/.vitepress/dist/notifications/Gotify.html b/docs/.vitepress/dist/notifications/Gotify.html index b214be0..f7a6abf 100644 --- a/docs/.vitepress/dist/notifications/Gotify.html +++ b/docs/.vitepress/dist/notifications/Gotify.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -
Skip to content

Gotify

Set up

Released under the MIT License.

+
Skip to content

Gotify

Set up

Released under the MIT License.

diff --git a/docs/.vitepress/dist/notifications/Ntfy.html b/docs/.vitepress/dist/notifications/Ntfy.html index f53eabe..50c4164 100644 --- a/docs/.vitepress/dist/notifications/Ntfy.html +++ b/docs/.vitepress/dist/notifications/Ntfy.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -
Skip to content

Ntfy

Set up

Released under the MIT License.

+
Skip to content

Released under the MIT License.

diff --git a/docs/.vitepress/dist/notifications/Pushover.html b/docs/.vitepress/dist/notifications/Pushover.html new file mode 100644 index 0000000..3b6a7d3 --- /dev/null +++ b/docs/.vitepress/dist/notifications/Pushover.html @@ -0,0 +1,26 @@ + + + + + + Pushover | CoreControl + + + + + + + + + + + + + + + +
Skip to content

Pushover

Set up

Released under the MIT License.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/notifications/Telegram.html b/docs/.vitepress/dist/notifications/Telegram.html index ca0a7ef..581c04c 100644 --- a/docs/.vitepress/dist/notifications/Telegram.html +++ b/docs/.vitepress/dist/notifications/Telegram.html @@ -8,10 +8,10 @@ - - + + - + @@ -19,7 +19,7 @@ -
Skip to content

Telegram

Telegram

Released under the MIT License.

+
Skip to content

Telegram

Telegram

Released under the MIT License.

diff --git a/docs/.vitepress/dist/vp-icons.css b/docs/.vitepress/dist/vp-icons.css index ddc5bd8..80ee28c 100644 --- a/docs/.vitepress/dist/vp-icons.css +++ b/docs/.vitepress/dist/vp-icons.css @@ -1 +1 @@ -.vpi-social-github{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")} \ No newline at end of file +.vpi-social-buymeacoffee{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m20.216 6.415l-.132-.666c-.119-.598-.388-1.163-1.001-1.379c-.197-.069-.42-.098-.57-.241c-.152-.143-.196-.366-.231-.572c-.065-.378-.125-.756-.192-1.133c-.057-.325-.102-.69-.25-.987c-.195-.4-.597-.634-.996-.788a6 6 0 0 0-.626-.194c-1-.263-2.05-.36-3.077-.416a26 26 0 0 0-3.7.062c-.915.083-1.88.184-2.75.5c-.318.116-.646.256-.888.501c-.297.302-.393.77-.177 1.146c.154.267.415.456.692.58c.36.162.737.284 1.123.366c1.075.238 2.189.331 3.287.37q1.829.074 3.65-.118q.449-.05.896-.119c.352-.054.578-.513.474-.834c-.124-.383-.457-.531-.834-.473c-.466.074-.96.108-1.382.146q-1.767.12-3.536.006a22 22 0 0 1-1.157-.107c-.086-.01-.18-.025-.258-.036q-.364-.055-.724-.13c-.111-.027-.111-.185 0-.212h.005q.416-.09.838-.147h.002c.131-.009.263-.032.394-.048a25 25 0 0 1 3.426-.12q1.011.029 2.017.144l.228.031q.4.06.798.145c.392.085.895.113 1.07.542c.055.137.08.288.111.431l.319 1.484a.237.237 0 0 1-.199.284h-.003l-.112.015a37 37 0 0 1-4.743.295a37 37 0 0 1-4.699-.304c-.14-.017-.293-.042-.417-.06c-.326-.048-.649-.108-.973-.161c-.393-.065-.768-.032-1.123.161c-.29.16-.527.404-.675.701c-.154.316-.199.66-.267 1c-.069.34-.176.707-.135 1.056c.087.753.613 1.365 1.37 1.502a39.7 39.7 0 0 0 11.343.376a.483.483 0 0 1 .535.53l-.071.697l-1.018 9.907c-.041.41-.047.832-.125 1.237c-.122.637-.553 1.028-1.182 1.171q-.868.197-1.756.205c-.656.004-1.31-.025-1.966-.022c-.699.004-1.556-.06-2.095-.58c-.475-.458-.54-1.174-.605-1.793l-.731-7.013l-.322-3.094c-.037-.351-.286-.695-.678-.678c-.336.015-.718.3-.678.679l.228 2.185l.949 9.112c.147 1.344 1.174 2.068 2.446 2.272c.742.12 1.503.144 2.257.156c.966.016 1.942.053 2.892-.122c1.408-.258 2.465-1.198 2.616-2.657l1.024-9.995l.215-2.087a.48.48 0 0 1 .39-.426c.402-.078.787-.212 1.074-.518c.455-.488.546-1.124.385-1.766zm-1.478.772c-.145.137-.363.201-.578.233c-2.416.359-4.866.54-7.308.46c-1.748-.06-3.477-.254-5.207-.498c-.17-.024-.353-.055-.47-.18c-.22-.236-.111-.71-.054-.995c.052-.26.152-.609.463-.646c.484-.057 1.046.148 1.526.22q.865.132 1.737.212c2.48.226 5.002.19 7.472-.14q.675-.09 1.345-.21c.399-.072.84-.206 1.08.206c.166.281.188.657.162.974a.54.54 0 0 1-.169.364zm-6.159 3.9c-.862.37-1.84.788-3.109.788a6 6 0 0 1-1.569-.217l.877 9.004c.065.78.717 1.38 1.5 1.38c0 0 1.243.065 1.658.065c.447 0 1.786-.065 1.786-.065c.783 0 1.434-.6 1.499-1.38l.94-9.95a4 4 0 0 0-1.322-.238c-.826 0-1.491.284-2.26.613'/%3E%3C/svg%3E")}.vpi-social-github{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")} \ No newline at end of file diff --git a/docs/assets/screenshots/notifications_pushover.png b/docs/assets/screenshots/notifications_pushover.png new file mode 100644 index 0000000..567cb10 Binary files /dev/null and b/docs/assets/screenshots/notifications_pushover.png differ diff --git a/docs/notifications/Pushover.md b/docs/notifications/Pushover.md new file mode 100644 index 0000000..b6c05d3 --- /dev/null +++ b/docs/notifications/Pushover.md @@ -0,0 +1,3 @@ +# Pushover + +![Set up](../assets/screenshots/notifications_pushover.png) \ No newline at end of file diff --git a/docs/package.json b/docs/package.json index 7736b18..63bd832 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "docs", - "version": "1.0.0", + "version": "0.0.2", "description": "", "main": "index.js", "scripts": { diff --git a/package-lock.json b/package-lock.json index e0b50e5..8c06500 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "corecontrol", - "version": "0.0.8", + "version": "0.0.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "corecontrol", - "version": "0.0.8", + "version": "0.0.9", "dependencies": { "@prisma/client": "^6.6.0", "@prisma/extension-accelerate": "^1.3.0", @@ -31,6 +31,7 @@ "@xyflow/react": "^12.5.5", "axios": "^1.8.4", "bcrypt": "^5.1.1", + "chart.js": "^4.4.9", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "fuse.js": "^7.1.0", @@ -42,6 +43,7 @@ "postcss-loader": "^8.1.1", "react": "^19.0.0", "react-dom": "^19.0.0", + "sonner": "^2.0.3", "tailwind-merge": "^3.2.0", "tw-animate-css": "^1.2.5" }, @@ -55,250 +57,7 @@ "prisma": "^6.6.0", "tailwindcss": "^4.1.4", "tsx": "^4.19.3", - "typescript": "^5", - "vitepress": "^1.6.3" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", - "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", - "@algolia/autocomplete-shared": "1.17.7" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", - "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", - "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", - "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.23.4.tgz", - "integrity": "sha512-WIMT2Kxy+FFWXWQxIU8QgbTioL+SGE24zhpj0kipG4uQbzXwONaWt7ffaYLjfge3gcGSgJVv+1VlahVckafluQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4", - "@algolia/requester-browser-xhr": "5.23.4", - "@algolia/requester-fetch": "5.23.4", - "@algolia/requester-node-http": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.23.4.tgz", - "integrity": "sha512-4B9gChENsQA9kFmFlb+x3YhBz2Gx3vSsm81FHI1yJ3fn2zlxREHmfrjyqYoMunsU7BybT/o5Nb7ccCbm/vfseA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4", - "@algolia/requester-browser-xhr": "5.23.4", - "@algolia/requester-fetch": "5.23.4", - "@algolia/requester-node-http": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.23.4.tgz", - "integrity": "sha512-bsj0lwU2ytiWLtl7sPunr+oLe+0YJql9FozJln5BnIiqfKOaseSDdV42060vUy+D4373f2XBI009K/rm2IXYMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.23.4.tgz", - "integrity": "sha512-XSCtAYvJ/hnfDHfRVMbBH0dayR+2ofVZy3jf5qyifjguC6rwxDsSdQvXpT0QFVyG+h8UPGtDhMPoUIng4wIcZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4", - "@algolia/requester-browser-xhr": "5.23.4", - "@algolia/requester-fetch": "5.23.4", - "@algolia/requester-node-http": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.23.4.tgz", - "integrity": "sha512-l/0QvqgRFFOf7BnKSJ3myd1WbDr86ftVaa3PQwlsNh7IpIHmvVcT83Bi5zlORozVGMwaKfyPZo6O48PZELsOeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4", - "@algolia/requester-browser-xhr": "5.23.4", - "@algolia/requester-fetch": "5.23.4", - "@algolia/requester-node-http": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.23.4.tgz", - "integrity": "sha512-TB0htrDgVacVGtPDyENoM6VIeYqR+pMsDovW94dfi2JoaRxfqu/tYmLpvgWcOknP6wLbr8bA+G7t/NiGksNAwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4", - "@algolia/requester-browser-xhr": "5.23.4", - "@algolia/requester-fetch": "5.23.4", - "@algolia/requester-node-http": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.23.4.tgz", - "integrity": "sha512-uBGo6KwUP6z+u6HZWRui8UJClS7fgUIAiYd1prUqCbkzDiCngTOzxaJbEvrdkK0hGCQtnPDiuNhC5MhtVNN4Eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4", - "@algolia/requester-browser-xhr": "5.23.4", - "@algolia/requester-fetch": "5.23.4", - "@algolia/requester-node-http": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/ingestion": { - "version": "1.23.4", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.23.4.tgz", - "integrity": "sha512-Si6rFuGnSeEUPU9QchYvbknvEIyCRK7nkeaPVQdZpABU7m4V/tsiWdHmjVodtx3h20VZivJdHeQO9XbHxBOcCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4", - "@algolia/requester-browser-xhr": "5.23.4", - "@algolia/requester-fetch": "5.23.4", - "@algolia/requester-node-http": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.23.4", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.23.4.tgz", - "integrity": "sha512-EXGoVVTshraqPJgr5cMd1fq7Jm71Ew6MpGCEaxI5PErBpJAmKdtjRIzs6JOGKHRaWLi+jdbJPYc2y8RN4qcx5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4", - "@algolia/requester-browser-xhr": "5.23.4", - "@algolia/requester-fetch": "5.23.4", - "@algolia/requester-node-http": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.23.4.tgz", - "integrity": "sha512-1t6glwKVCkjvBNlng2itTf8fwaLSqkL4JaMENgR3WTGR8mmW2akocUy/ZYSQcG4TcR7qu4zW2UMGAwLoWoflgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4", - "@algolia/requester-browser-xhr": "5.23.4", - "@algolia/requester-fetch": "5.23.4", - "@algolia/requester-node-http": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.23.4.tgz", - "integrity": "sha512-UUuizcgc5+VSY8hqzDFVdJ3Wcto03lpbFRGPgW12pHTlUQHUTADtIpIhkLLOZRCjXmCVhtr97Z+eR6LcRYXa3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.23.4.tgz", - "integrity": "sha512-UhDg6elsek6NnV5z4VG1qMwR6vbp+rTMBEnl/v4hUyXQazU+CNdYkl++cpdmLwGI/7nXc28xtZiL90Es3I7viQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.23.4.tgz", - "integrity": "sha512-jXGzGBRUS0oywQwnaCA6mMDJO7LoC3dYSLsyNfIqxDR4SNGLhtg3je0Y31lc24OA4nYyKAYgVLtjfrpcpsWShg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" + "typescript": "^5" } }, "node_modules/@alloc/quick-lru": { @@ -328,16 +87,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", @@ -347,143 +96,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", - "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@docsearch/js": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", - "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@docsearch/react": "3.8.2", - "preact": "^10.0.0" - } - }, - "node_modules/@docsearch/js/node_modules/@docsearch/react": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", - "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.17.7", - "@algolia/autocomplete-preset-algolia": "1.17.7", - "@docsearch/css": "3.8.2", - "algoliasearch": "^5.14.2" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@docsearch/js/node_modules/@types/react": { - "version": "18.3.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", - "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@docsearch/js/node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@docsearch/js/node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/@docsearch/js/node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/@emnapi/runtime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.1.tgz", @@ -957,23 +569,6 @@ "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", "license": "MIT" }, - "node_modules/@iconify-json/simple-icons": { - "version": "1.2.32", - "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.32.tgz", - "integrity": "sha512-gxgLq0raip7SJaeJ0302vwhsqupQttS21B93Ci1kA/++B+hIgGw71HzTOWQoUhwjlrdWcoVUxSvpPJoMs7oURg==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@iconify/types": "*" - } - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", - "dev": true, - "license": "MIT" - }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.34.1", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.1.tgz", @@ -1351,11 +946,10 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", "license": "MIT" }, "node_modules/@mapbox/node-pre-gyp": { @@ -2534,373 +2128,6 @@ "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", "license": "MIT" }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", - "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", - "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", - "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", - "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", - "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", - "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", - "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", - "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", - "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", - "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", - "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", - "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", - "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", - "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", - "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", - "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz", - "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", - "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", - "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", - "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@shikijs/core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", - "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/engine-javascript": "2.5.0", - "@shikijs/engine-oniguruma": "2.5.0", - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.4" - } - }, - "node_modules/@shikijs/engine-javascript": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", - "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^3.1.0" - } - }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", - "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/@shikijs/langs": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", - "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/themes": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", - "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/transformers": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", - "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "2.5.0", - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", - "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, - "license": "MIT" - }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", @@ -3231,23 +2458,6 @@ "@types/d3-selection": "*" } }, - "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, "node_modules/@types/js-cookie": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", @@ -3264,41 +2474,6 @@ "@types/node": "*" } }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/markdown-it": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" - } - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/ms": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", @@ -3314,15 +2489,6 @@ "undici-types": "~6.19.2" } }, - "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/@types/react": { "version": "19.1.1", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.1.tgz", @@ -3343,292 +2509,6 @@ "@types/react": "^19.0.0" } }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", - "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.3.tgz", - "integrity": "sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", - "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.13", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", - "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", - "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.13", - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.48", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", - "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/devtools-api": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.5.tgz", - "integrity": "sha512-HYV3tJGARROq5nlVMJh5KKHk7GU8Au3IrrmNNqr978m0edxgpHgYPDoNUGrvEgIbObz09SQezFR3A1EVmB5WZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-kit": "^7.7.5" - } - }, - "node_modules/@vue/devtools-kit": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.5.tgz", - "integrity": "sha512-S9VAVJYVAe4RPx2JZb9ZTEi0lqTySz2CBeF0wHT5D3dkTLnT9yMMGegKNl4b2EIELwLSkcI9bl2qp0/jW+upqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-shared": "^7.7.5", - "birpc": "^2.3.0", - "hookable": "^5.5.3", - "mitt": "^3.0.1", - "perfect-debounce": "^1.0.0", - "speakingurl": "^14.0.1", - "superjson": "^2.2.2" - } - }, - "node_modules/@vue/devtools-shared": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.5.tgz", - "integrity": "sha512-QBjG72RfpM0DKtpns2RZOxBltO226kOAls9e4Lri6YxS2gWTgL0H+wj1R2K76lxxIeOrqo4+2Ty6RQnzv+WSTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "rfdc": "^1.4.1" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", - "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", - "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", - "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/runtime-core": "3.5.13", - "@vue/shared": "3.5.13", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", - "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "vue": "3.5.13" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", - "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vueuse/core": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", - "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/web-bluetooth": "^0.0.21", - "@vueuse/metadata": "12.8.2", - "@vueuse/shared": "12.8.2", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/integrations": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", - "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vueuse/core": "12.8.2", - "@vueuse/shared": "12.8.2", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "async-validator": "^4", - "axios": "^1", - "change-case": "^5", - "drauu": "^0.4", - "focus-trap": "^7", - "fuse.js": "^7", - "idb-keyval": "^6", - "jwt-decode": "^4", - "nprogress": "^0.2", - "qrcode": "^1.5", - "sortablejs": "^1", - "universal-cookie": "^7" - }, - "peerDependenciesMeta": { - "async-validator": { - "optional": true - }, - "axios": { - "optional": true - }, - "change-case": { - "optional": true - }, - "drauu": { - "optional": true - }, - "focus-trap": { - "optional": true - }, - "fuse.js": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "jwt-decode": { - "optional": true - }, - "nprogress": { - "optional": true - }, - "qrcode": { - "optional": true - }, - "sortablejs": { - "optional": true - }, - "universal-cookie": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", - "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", - "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/@xyflow/react": { "version": "12.5.6", "resolved": "https://registry.npmjs.org/@xyflow/react/-/react-12.5.6.tgz", @@ -3677,31 +2557,6 @@ "node": ">= 6.0.0" } }, - "node_modules/algoliasearch": { - "version": "5.23.4", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.23.4.tgz", - "integrity": "sha512-QzAKFHl3fm53s44VHrTdEo0TkpL3XVUYQpnZy1r6/EHvMAyIg+O4hwprzlsNmcCHTNyVcF2S13DAUn7XhkC6qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-abtesting": "5.23.4", - "@algolia/client-analytics": "5.23.4", - "@algolia/client-common": "5.23.4", - "@algolia/client-insights": "5.23.4", - "@algolia/client-personalization": "5.23.4", - "@algolia/client-query-suggestions": "5.23.4", - "@algolia/client-search": "5.23.4", - "@algolia/ingestion": "1.23.4", - "@algolia/monitoring": "1.23.4", - "@algolia/recommend": "5.23.4", - "@algolia/requester-browser-xhr": "5.23.4", - "@algolia/requester-fetch": "5.23.4", - "@algolia/requester-node-http": "5.23.4" - }, - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3824,16 +2679,6 @@ "node": ">= 10.0.0" } }, - "node_modules/birpc": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.3.0.tgz", - "integrity": "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3936,37 +2781,16 @@ ], "license": "CC-BY-4.0" }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, + "node_modules/chart.js": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.9.tgz", + "integrity": "sha512-EyZ9wWKgpAU0fLJ43YAEIF8sr5F2W3LqbS40ZJyHIner2lY14ufqv2VMp69MAiZ2rpwxEUxEhIH/0U3xyRynxg==", "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" } }, "node_modules/chownr": { @@ -4077,17 +2901,6 @@ "node": ">= 0.8" } }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4100,22 +2913,6 @@ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "license": "ISC" }, - "node_modules/copy-anything": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^4.1.8" - }, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", @@ -4286,16 +3083,6 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "license": "MIT" }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -4311,20 +3098,6 @@ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "license": "MIT" }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -4361,13 +3134,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, - "node_modules/emoji-regex-xs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", - "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", - "dev": true, - "license": "MIT" - }, "node_modules/enhanced-resolve": { "version": "5.18.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", @@ -4382,19 +3148,6 @@ "node": ">=10.13.0" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -4528,23 +3281,6 @@ "node": ">=6" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/focus-trap": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz", - "integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tabbable": "^6.2.0" - } - }, "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", @@ -4822,62 +3558,6 @@ "node": ">= 0.4" } }, - "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -4940,19 +3620,6 @@ "node": ">=8" } }, - "node_modules/is-what": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, "node_modules/jiti": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", @@ -5326,21 +3993,6 @@ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "license": "MIT" }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lucide-react": { "version": "0.487.0", "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.487.0.tgz", @@ -5350,16 +4002,6 @@ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -5384,13 +4026,6 @@ "semver": "bin/semver.js" } }, - "node_modules/mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", - "dev": true, - "license": "MIT" - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -5400,122 +4035,6 @@ "node": ">= 0.4" } }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -5558,13 +4077,6 @@ "node": ">=8" } }, - "node_modules/minisearch": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.2.tgz", - "integrity": "sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==", - "dev": true, - "license": "MIT" - }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -5590,13 +4102,6 @@ "node": ">=8" } }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true, - "license": "MIT" - }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -5830,18 +4335,6 @@ "wrappy": "1" } }, - "node_modules/oniguruma-to-es": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", - "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex-xs": "^1.0.0", - "regex": "^6.0.1", - "regex-recursion": "^6.0.2" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5881,13 +4374,6 @@ "node": ">=0.10.0" } }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", - "dev": true, - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5969,17 +4455,6 @@ "dev": true, "license": "MIT" }, - "node_modules/preact": { - "version": "10.26.5", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.5.tgz", - "integrity": "sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } - }, "node_modules/prisma": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.6.0.tgz", @@ -6009,17 +4484,6 @@ } } }, - "node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -6130,33 +4594,6 @@ "node": ">= 6" } }, - "node_modules/regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", - "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-recursion": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-utilities": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", - "dev": true, - "license": "MIT" - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -6176,13 +4613,6 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -6199,46 +4629,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rollup": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", - "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.7" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.40.0", - "@rollup/rollup-android-arm64": "4.40.0", - "@rollup/rollup-darwin-arm64": "4.40.0", - "@rollup/rollup-darwin-x64": "4.40.0", - "@rollup/rollup-freebsd-arm64": "4.40.0", - "@rollup/rollup-freebsd-x64": "4.40.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", - "@rollup/rollup-linux-arm-musleabihf": "4.40.0", - "@rollup/rollup-linux-arm64-gnu": "4.40.0", - "@rollup/rollup-linux-arm64-musl": "4.40.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", - "@rollup/rollup-linux-riscv64-gnu": "4.40.0", - "@rollup/rollup-linux-riscv64-musl": "4.40.0", - "@rollup/rollup-linux-s390x-gnu": "4.40.0", - "@rollup/rollup-linux-x64-gnu": "4.40.0", - "@rollup/rollup-linux-x64-musl": "4.40.0", - "@rollup/rollup-win32-arm64-msvc": "4.40.0", - "@rollup/rollup-win32-ia32-msvc": "4.40.0", - "@rollup/rollup-win32-x64-msvc": "4.40.0", - "fsevents": "~2.3.2" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6265,14 +4655,6 @@ "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", "license": "MIT" }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -6332,23 +4714,6 @@ "@img/sharp-win32-x64": "0.34.1" } }, - "node_modules/shiki": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", - "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "2.5.0", - "@shikijs/engine-javascript": "2.5.0", - "@shikijs/engine-oniguruma": "2.5.0", - "@shikijs/langs": "2.5.0", - "@shikijs/themes": "2.5.0", - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -6365,6 +4730,16 @@ "is-arrayish": "^0.3.1" } }, + "node_modules/sonner": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.3.tgz", + "integrity": "sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -6374,27 +4749,6 @@ "node": ">=0.10.0" } }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/speakingurl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", - "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -6426,21 +4780,6 @@ "node": ">=8" } }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -6476,26 +4815,6 @@ } } }, - "node_modules/superjson": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", - "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "copy-anything": "^3.0.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "dev": true, - "license": "MIT" - }, "node_modules/tailwind-merge": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.2.0.tgz", @@ -6546,17 +4865,6 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -6612,79 +4920,6 @@ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "license": "MIT" }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -6774,590 +5009,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite": { - "version": "5.4.18", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.18.tgz", - "integrity": "sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/vitepress": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.3.tgz", - "integrity": "sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@docsearch/css": "3.8.2", - "@docsearch/js": "3.8.2", - "@iconify-json/simple-icons": "^1.2.21", - "@shikijs/core": "^2.1.0", - "@shikijs/transformers": "^2.1.0", - "@shikijs/types": "^2.1.0", - "@types/markdown-it": "^14.1.2", - "@vitejs/plugin-vue": "^5.2.1", - "@vue/devtools-api": "^7.7.0", - "@vue/shared": "^3.5.13", - "@vueuse/core": "^12.4.0", - "@vueuse/integrations": "^12.4.0", - "focus-trap": "^7.6.4", - "mark.js": "8.11.1", - "minisearch": "^7.1.1", - "shiki": "^2.1.0", - "vite": "^5.4.14", - "vue": "^3.5.13" - }, - "bin": { - "vitepress": "bin/vitepress.js" - }, - "peerDependencies": { - "markdown-it-mathjax3": "^4", - "postcss": "^8" - }, - "peerDependenciesMeta": { - "markdown-it-mathjax3": { - "optional": true - }, - "postcss": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", - "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-sfc": "3.5.13", - "@vue/runtime-dom": "3.5.13", - "@vue/server-renderer": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -7423,17 +5074,6 @@ } } }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/@next/swc-win32-x64-msvc": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.0.tgz", diff --git a/package.json b/package.json index bd6e221..400e829 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "corecontrol", - "version": "0.0.8", + "version": "0.0.9", "private": true, "scripts": { "dev": "next dev --turbopack", @@ -32,6 +32,7 @@ "@xyflow/react": "^12.5.5", "axios": "^1.8.4", "bcrypt": "^5.1.1", + "chart.js": "^4.4.9", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "fuse.js": "^7.1.0", @@ -43,6 +44,7 @@ "postcss-loader": "^8.1.1", "react": "^19.0.0", "react-dom": "^19.0.0", + "sonner": "^2.0.3", "tailwind-merge": "^3.2.0", "tw-animate-css": "^1.2.5" }, diff --git a/prisma/migrations/20250423190419_test_notification/migration.sql b/prisma/migrations/20250423190419_test_notification/migration.sql new file mode 100644 index 0000000..f15ee09 --- /dev/null +++ b/prisma/migrations/20250423190419_test_notification/migration.sql @@ -0,0 +1,7 @@ +-- CreateTable +CREATE TABLE "test_notification" ( + "id" SERIAL NOT NULL, + "notificationId" INTEGER NOT NULL, + + CONSTRAINT "test_notification_pkey" PRIMARY KEY ("id") +); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 39562aa..b0dd79a 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -97,4 +97,9 @@ model notification { pushoverUrl String? pushoverToken String? pushoverUser String? -} \ No newline at end of file +} + +model test_notification { + id Int @id @default(autoincrement()) + notificationId Int +} diff --git a/screenshots/applications.png b/screenshots/applications.png new file mode 100644 index 0000000..5bea78b Binary files /dev/null and b/screenshots/applications.png differ diff --git a/screenshots/dashboard.png b/screenshots/dashboard.png new file mode 100644 index 0000000..a388c90 Binary files /dev/null and b/screenshots/dashboard.png differ diff --git a/screenshots/login.png b/screenshots/login.png new file mode 100644 index 0000000..3bf466a Binary files /dev/null and b/screenshots/login.png differ diff --git a/screenshots/network.png b/screenshots/network.png new file mode 100644 index 0000000..16b3cbf Binary files /dev/null and b/screenshots/network.png differ diff --git a/screenshots/server.png b/screenshots/server.png new file mode 100644 index 0000000..6cc174a Binary files /dev/null and b/screenshots/server.png differ diff --git a/screenshots/servers.png b/screenshots/servers.png new file mode 100644 index 0000000..57cf461 Binary files /dev/null and b/screenshots/servers.png differ diff --git a/screenshots/settings.png b/screenshots/settings.png new file mode 100644 index 0000000..7b088fe Binary files /dev/null and b/screenshots/settings.png differ diff --git a/screenshots/uptime.png b/screenshots/uptime.png new file mode 100644 index 0000000..f3cffec Binary files /dev/null and b/screenshots/uptime.png differ