├── pnpm-workspace.yaml ├── .gitignore ├── packages ├── shared │ ├── src │ │ ├── index.ts │ │ ├── result.ts │ │ └── theme.ts │ ├── tsconfig.json │ └── package.json ├── backend │ ├── src │ │ ├── utils │ │ │ └── utils.ts │ │ ├── types.ts │ │ ├── index.ts │ │ ├── store │ │ │ └── themes.ts │ │ ├── defaults.ts │ │ ├── api │ │ │ └── themes.ts │ │ └── database │ │ │ └── database.ts │ ├── tsconfig.json │ ├── package.json │ └── vite.config.ts └── frontend │ ├── src │ ├── types.ts │ ├── utils │ │ └── api-calls.ts │ ├── stores │ │ ├── sdk.tsx │ │ └── themes.ts │ ├── App.tsx │ ├── index.tsx │ ├── themes │ │ └── switcher.ts │ ├── styles │ │ └── style.css │ └── components │ │ ├── ThemesList.tsx │ │ └── ThemePreview.tsx │ ├── .vscode │ └── settings.json │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── vite.config.ts │ └── package.json ├── .markdownlint.json ├── .vscode ├── settings.json └── tasks.json ├── scripts ├── clean.js └── pack.js ├── package.json ├── tsconfig.json ├── README.md ├── manifest.json ├── .github └── workflows │ └── release.yml ├── LICENSE └── pnpm-lock.yaml /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'packages/*' 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .DS_Store 4 | pnpm-lock.yaml -------------------------------------------------------------------------------- /packages/shared/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./result"; 2 | export * from "./theme"; -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "no-inline-html": false, 3 | "line-length": false, 4 | "first-line-h1": false 5 | } 6 | -------------------------------------------------------------------------------- /packages/shared/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "include": ["./src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/backend/src/utils/utils.ts: -------------------------------------------------------------------------------- 1 | export function generateID(): string { 2 | return Math.random().toString(36).substring(2, 15); 3 | } 4 | -------------------------------------------------------------------------------- /packages/frontend/src/types.ts: -------------------------------------------------------------------------------- 1 | import { Caido } from "@caido/sdk-frontend"; 2 | import { API, BackendEvents } from "backend"; 3 | 4 | export type CaidoSDK = Caido; -------------------------------------------------------------------------------- /packages/backend/src/types.ts: -------------------------------------------------------------------------------- 1 | import { DefineEvents, SDK } from "caido:plugin"; 2 | 3 | export type BackendEvents = DefineEvents<{}>; 4 | export type CaidoBackendSDK = SDK; 5 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "**/.git": true, 4 | "**/.svn": true, 5 | "**/.hg": true, 6 | "**/CVS": true, 7 | "**/.DS_Store": true, 8 | "**/Thumbs.db": true 9 | }, 10 | "hide-files.files": [] 11 | } 12 | -------------------------------------------------------------------------------- /scripts/clean.js: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import path from "path"; 3 | import { fileURLToPath } from "url"; 4 | 5 | const __dirname = path.dirname(fileURLToPath(import.meta.url)); 6 | const DIST = path.join(__dirname, "../dist"); 7 | 8 | fs.rmSync(DIST, { recursive: true, force: true }); 9 | -------------------------------------------------------------------------------- /packages/frontend/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "**/.git": true, 4 | "**/.svn": true, 5 | "**/.hg": true, 6 | "**/CVS": true, 7 | "**/.DS_Store": true, 8 | "**/Thumbs.db": true 9 | }, 10 | "hide-files.files": [] 11 | } -------------------------------------------------------------------------------- /packages/frontend/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: ["./index.html", "./src/**/*.{tsx,ts}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | 8 | plugins: [], 9 | corePlugins: { 10 | preflight: false, 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /packages/shared/src/result.ts: -------------------------------------------------------------------------------- 1 | export type Result = 2 | | { kind: "Error"; error: string } 3 | | { kind: "Success"; value: T }; 4 | 5 | export function ok(value: T): Result { 6 | return { kind: "Success", value }; 7 | } 8 | 9 | export function error(error: string): Result { 10 | return { kind: "Error", error }; 11 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "type": "npm", 6 | "script": "build", 7 | "group": { 8 | "kind": "build", 9 | "isDefault": true 10 | }, 11 | "problemMatcher": ["$tsc"], 12 | "label": "npm: build", 13 | "detail": "Build the project" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /packages/shared/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "shared", 3 | "version": "1.0.2", 4 | "description": "Shared types", 5 | "author": "bebiks", 6 | "license": "CC0-1.0", 7 | "type": "module", 8 | "types": "src/index.ts", 9 | "main": "src/index.ts", 10 | "scripts": { 11 | "typecheck": "tsc --noEmit" 12 | }, 13 | "dependencies": { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "lib": ["DOM", "ESNext"], 5 | "types": ["@caido/sdk-backend", "node"], 6 | "baseUrl": ".", 7 | "noResolve": false, 8 | "moduleResolution": "node", 9 | "paths": { 10 | "@/*": ["src/*"] 11 | } 12 | }, 13 | "include": ["./src/**/*.tsx", "./src/**/*.ts"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/api-calls.ts: -------------------------------------------------------------------------------- 1 | import { CaidoSDK } from "@/types"; 2 | import { Result } from "shared"; 3 | 4 | export async function handleResult( 5 | promise: Promise>, 6 | sdk: CaidoSDK 7 | ) { 8 | const result = await promise; 9 | 10 | if (result.kind === "Error") { 11 | sdk.window.showToast(result.error, { variant: "error" }); 12 | throw new Error(result.error); 13 | } 14 | 15 | return result.value; 16 | } -------------------------------------------------------------------------------- /packages/backend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["@caido/sdk-backend"], 5 | "baseUrl": "./", 6 | "paths": { 7 | "@/*": ["src/*"] 8 | }, 9 | "disableSourceOfProjectReferenceRedirect": true, 10 | "composite": true, 11 | "importsNotUsedAsValues": "remove" 12 | }, 13 | "include": ["src/**/*.ts"], 14 | "tsc-alias": { 15 | "resolveFullPaths": true 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "caido-themes", 3 | "version": "1.0.2", 4 | "description": "A plugin for managing and customizing themes in Caido", 5 | "author": "bebiks", 6 | "license": "CC0-1.0", 7 | "type": "module", 8 | "scripts": { 9 | "build": "node scripts/clean.js && pnpm -r build && node scripts/pack.js", 10 | "typecheck": "pnpm -r typecheck" 11 | }, 12 | "devDependencies": { 13 | "@caido/plugin-manifest": "0.1.3", 14 | "jszip": "3.10.1", 15 | "typescript": "5.6.2", 16 | "vite": "5.4.8" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.2", 4 | "description": "Backend for Caido Themes", 5 | "author": "bebiks", 6 | "license": "CC0-1.0", 7 | "type": "module", 8 | "types": "src/index.ts", 9 | "scripts": { 10 | "build": "vite build", 11 | "typecheck": "tsc --noEmit" 12 | }, 13 | "dependencies": { 14 | "shared": "workspace:*" 15 | }, 16 | "devDependencies": { 17 | "shared": "workspace:*", 18 | "@caido/sdk-backend": "0.41.0", 19 | "@types/node": "^22.7.4" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "lib": ["ESNext"], 6 | 7 | "jsx": "preserve", 8 | "noImplicitAny": true, 9 | "noUncheckedIndexedAccess": true, 10 | "strict": true, 11 | "skipLibCheck": true, 12 | "resolveJsonModule": true, 13 | 14 | "moduleResolution": "bundler", 15 | "esModuleInterop": true, 16 | "sourceMap": true, 17 | "noUnusedLocals": true, 18 | 19 | "useDefineForClassFields": true, 20 | "isolatedModules": true, 21 | 22 | "baseUrl": "." 23 | } 24 | } -------------------------------------------------------------------------------- /packages/shared/src/theme.ts: -------------------------------------------------------------------------------- 1 | export interface Theme { 2 | id: string; 3 | name: string; 4 | description: string; 5 | author: string; 6 | 7 | primary: { 8 | dark: string; 9 | light: string; 10 | subtle: string; 11 | }; 12 | button?: { 13 | primary?: { 14 | bg: string; 15 | text: string; 16 | }; 17 | secondary?: { 18 | bg: string; 19 | text: string; 20 | }; 21 | tertiary?: { 22 | bg: string; 23 | text: string; 24 | }; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /packages/backend/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import { resolve } from "path"; 3 | import { builtinModules } from "module"; 4 | 5 | export default defineConfig({ 6 | build: { 7 | lib: { 8 | entry: resolve(__dirname, "src/index.ts"), 9 | name: "backend", 10 | fileName: (format) => "script.js", 11 | formats: ["es"], 12 | }, 13 | outDir: "../../dist/backend", 14 | rollupOptions: { 15 | external: [/caido:.+/, ...builtinModules], 16 | output: { 17 | manualChunks: undefined, 18 | }, 19 | }, 20 | }, 21 | resolve: { 22 | alias: { 23 | "@": resolve(__dirname, "src"), 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/frontend/src/stores/sdk.tsx: -------------------------------------------------------------------------------- 1 | import { createContext, useContext, ReactNode } from "react"; 2 | import { CaidoSDK } from "@/types"; 3 | 4 | interface SDKProviderProps { 5 | sdk: CaidoSDK; 6 | children: ReactNode; 7 | } 8 | 9 | const SDKContext = createContext(undefined); 10 | 11 | export function SDKProvider({ sdk, children }: SDKProviderProps) { 12 | return {children}; 13 | } 14 | 15 | export function useSDK(): CaidoSDK { 16 | const context = useContext(SDKContext); 17 | if (context === undefined) { 18 | throw new Error("useSDK must be used within an SDKProvider"); 19 | } 20 | return context; 21 | } 22 | -------------------------------------------------------------------------------- /packages/frontend/src/App.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { ThemeProvider } from "@mui/material/styles"; 3 | import { caidoTheme, StyledSplitter } from "caido-material-ui"; 4 | import "allotment/dist/style.css"; 5 | import "./styles/style.css"; 6 | import { ThemesList } from "@/components/ThemesList"; 7 | import { ThemePreview } from "@/components/ThemePreview"; 8 | import { useThemeStore } from "@/stores/themes"; 9 | 10 | export const App = () => { 11 | const { selectedThemeID: selectedThemeName } = useThemeStore(); 12 | 13 | return ( 14 | 15 | 16 | 17 | {selectedThemeName && } 18 | 19 | 20 | ); 21 | }; 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Caido Themes 2 | A simple plugin for managing and customizing themes in Caido. 3 | ![image](https://github.com/user-attachments/assets/39e257b1-dae0-4bd9-900f-4b65edd3f4d1) 4 | 5 | 6 | ## Installation [Recommended] 7 | 1. Open Caido and go to the Plugins page. 8 | 2. Go to the **Community Store** tab. 9 | 3. Find "Caido Themes" and click on the "Install" button. 10 | 4. Done! 11 | 12 | ## Installation [Manually] 13 | 1. Go to the [releases page](https://github.com/bebiksior/CaidoThemes/releases) and download the latest version of the plugin (`plugin_package.zip` file) 14 | 2. Open Caido and go to the Plugins page. 15 | 3. Click on the "Install Package" button. 16 | 4. Select the downloaded `plugin_package.zip` file 17 | 5. Done! 18 | 19 | ## Contributing 20 | If you have any ideas or suggestions, please open an issue or submit a pull request. 21 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "caido-themes", 3 | "name": "Caido Themes", 4 | "version": "1.0.2", 5 | "description": "A plugin for managing and customizing themes in Caido", 6 | "author": { 7 | "name": "bebiks", 8 | "email": "bebiks@cvssadvisor.com", 9 | "url": "https://github.com/bebiksior/CaidoThemes" 10 | }, 11 | "plugins": [ 12 | { 13 | "kind": "frontend", 14 | "id": "caido-themes-frontend", 15 | "name": "Caido Themes: Frontend", 16 | "entrypoint": "frontend/script.js", 17 | "style": "frontend/style.css", 18 | "backend": { 19 | "id": "caido-themes-backend" 20 | } 21 | }, 22 | { 23 | "kind": "backend", 24 | "id": "caido-themes-backend", 25 | "name": "Caido Themes: Backend", 26 | "runtime": "javascript", 27 | "entrypoint": "backend/script.js" 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /packages/frontend/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import { resolve } from "path"; 3 | import react from "@vitejs/plugin-react"; 4 | import tailwindcss from "tailwindcss"; 5 | 6 | export default defineConfig({ 7 | plugins: [react()], 8 | css: { 9 | postcss: { 10 | plugins: [tailwindcss()], 11 | }, 12 | }, 13 | resolve: { 14 | alias: { 15 | "@": resolve(__dirname, "src"), 16 | }, 17 | }, 18 | build: { 19 | lib: { 20 | entry: resolve(__dirname, "src/index.tsx"), 21 | name: "frontend", 22 | fileName: (format) => "script.js", 23 | formats: ["es"], 24 | }, 25 | outDir: "../../dist/frontend", 26 | rollupOptions: { 27 | output: { 28 | manualChunks: undefined, 29 | }, 30 | }, 31 | }, 32 | define: { 33 | "process.env.NODE_ENV": '"production"', 34 | }, 35 | }); 36 | -------------------------------------------------------------------------------- /packages/frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "version": "1.0.2", 4 | "description": "Themes", 5 | "author": "bebiks", 6 | "license": "CC0-1.0", 7 | "type": "module", 8 | "scripts": { 9 | "build": "vite build", 10 | "typecheck": "tsc --noEmit" 11 | }, 12 | "dependencies": { 13 | "@caido/sdk-frontend": "0.41.0", 14 | "@emotion/react": "^11.13.3", 15 | "@emotion/styled": "^11.13.0", 16 | "@mui/icons-material": "^6.1.1", 17 | "@mui/material": "^6.1.1", 18 | "@tanstack/react-query": "^5.59.0", 19 | "@types/react": "^18.3.10", 20 | "@types/react-dom": "^18.3.0", 21 | "allotment": "^1.20.2", 22 | "caido-material-ui": "^1.0.1", 23 | "react": "^18.3.1", 24 | "react-dom": "^18.3.1", 25 | "zustand": "5.0.0-rc.2" 26 | }, 27 | "devDependencies": { 28 | "@caido/sdk-backend": "0.41.0", 29 | "@types/node": "^22.7.4", 30 | "@vitejs/plugin-react": "^4.3.1", 31 | "backend": "workspace:*", 32 | "shared": "workspace:*", 33 | "tailwindcss": "^3.4.13", 34 | "vite": "5.4.8" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /packages/backend/src/index.ts: -------------------------------------------------------------------------------- 1 | import { DefineAPI } from "caido:plugin"; 2 | import { CaidoBackendSDK } from "@/types"; 3 | import DatabaseManager from "@/database/database"; 4 | import { ThemesStore } from "@/store/themes"; 5 | import { addTheme, getTheme, getThemes, removeTheme, updateTheme, resetThemes } from "./api/themes"; 6 | 7 | export type { BackendEvents } from "./types"; 8 | 9 | export type API = DefineAPI<{ 10 | getThemes: typeof getThemes; 11 | addTheme: typeof addTheme; 12 | removeTheme: typeof removeTheme; 13 | getTheme: typeof getTheme; 14 | updateTheme: typeof updateTheme; 15 | resetThemes: typeof resetThemes; 16 | }>; 17 | 18 | export async function init(sdk: CaidoBackendSDK): Promise { 19 | sdk.api.register("getThemes", getThemes); 20 | sdk.api.register("addTheme", addTheme); 21 | sdk.api.register("removeTheme", removeTheme); 22 | sdk.api.register("getTheme", getTheme); 23 | sdk.api.register("updateTheme", updateTheme); 24 | sdk.api.register("resetThemes", resetThemes); 25 | 26 | const dbManager = new DatabaseManager(sdk); 27 | const setup = await dbManager.init(); 28 | 29 | ThemesStore.init(dbManager, sdk); 30 | if (setup) { 31 | sdk.console.log("First time CaidoThemes launch, adding default themes"); 32 | await ThemesStore.get().resetThemes(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /packages/frontend/src/index.tsx: -------------------------------------------------------------------------------- 1 | import { createRoot } from "react-dom/client"; 2 | import { CaidoSDK } from "./types"; 3 | import { App } from "@/App"; 4 | import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; 5 | import { SDKProvider } from "@/stores/sdk"; 6 | import { setTheme } from "@/themes/switcher"; 7 | 8 | const queryClient = new QueryClient(); 9 | 10 | export const init = async (sdk: CaidoSDK) => { 11 | const rootElement = document.createElement("div"); 12 | Object.assign(rootElement.style, { 13 | height: "100%", 14 | width: "100%", 15 | }); 16 | 17 | const root = createRoot(rootElement); 18 | root.render( 19 | 20 | 21 | 22 | 23 | 24 | ); 25 | 26 | sdk.navigation.addPage("/themes", { 27 | body: rootElement, 28 | }); 29 | 30 | sdk.sidebar.registerItem("Themes", "/themes", { 31 | icon: "fas fa-palette", 32 | }); 33 | 34 | const storedTheme = localStorage.getItem("caidothemes:theme"); 35 | if (storedTheme) { 36 | localStorage.removeItem("caidothemes:theme"); 37 | 38 | const result = await sdk.backend.getTheme(storedTheme); 39 | if (result.kind === "Error") { 40 | return; 41 | } 42 | 43 | const theme = result.value; 44 | setTheme(theme); 45 | } 46 | }; 47 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: 🚀 Release 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | env: 7 | NODE_VERSION: 20 8 | PNPM_VERSION: 9 9 | 10 | jobs: 11 | release: 12 | name: Release 13 | runs-on: ubuntu-latest 14 | permissions: 15 | contents: write 16 | 17 | steps: 18 | - name: Checkout project 19 | uses: actions/checkout@v4 20 | 21 | - name: Check version 22 | id: meta 23 | run: | 24 | VERSION=$(jq -r .version manifest.json) 25 | echo "version=${VERSION}" >> $GITHUB_OUTPUT 26 | 27 | - name: Setup Node.js 28 | uses: actions/setup-node@v4 29 | with: 30 | node-version: ${{ env.NODE_VERSION }} 31 | 32 | - name: Setup pnpm 33 | uses: pnpm/action-setup@v4 34 | with: 35 | version: ${{ env.PNPM_VERSION }} 36 | run_install: true 37 | 38 | - name: Build package 39 | run: pnpm build 40 | 41 | - name: Sign package 42 | working-directory: dist 43 | run: | 44 | if [[ -z "${{ secrets.PRIVATE_KEY }}" ]]; then 45 | echo "Set an ed25519 key as PRIVATE_KEY in GitHub Action secret to sign." 46 | else 47 | echo "${{ secrets.PRIVATE_KEY }}" > private_key.pem 48 | openssl pkeyutl -sign -inkey private_key.pem -out plugin_package.zip.sig -rawin -in plugin_package.zip 49 | rm private_key.pem 50 | fi 51 | 52 | - name: Create release 53 | uses: ncipollo/release-action@v1 54 | with: 55 | tag: ${{ steps.meta.outputs.version }} 56 | commit: ${{ github.sha }} 57 | body: 'Release ${{ steps.meta.outputs.version }}' 58 | artifacts: 'dist/plugin_package.zip,dist/plugin_package.zip.sig' 59 | -------------------------------------------------------------------------------- /scripts/pack.js: -------------------------------------------------------------------------------- 1 | import JSZip from "jszip"; 2 | import fs from "fs"; 3 | import path from "path"; 4 | import { fileURLToPath } from "url"; 5 | import { validateManifest } from "@caido/plugin-manifest"; 6 | 7 | const __dirname = path.dirname(fileURLToPath(import.meta.url)); 8 | const DIST = path.resolve(__dirname, "../dist"); 9 | 10 | /** 11 | * @param {string} dirPath 12 | * @param {JSZip} zipFolder 13 | */ 14 | function addDirToZip(dirPath, zipFolder) { 15 | const files = fs.readdirSync(dirPath); 16 | files.forEach((file) => { 17 | const filePath = path.join(dirPath, file); 18 | const fileStat = fs.statSync(filePath); 19 | if (fileStat.isDirectory()) { 20 | const newZipFolder = zipFolder.folder(file); 21 | addDirToZip(filePath, newZipFolder); 22 | } else { 23 | const fileContents = fs.readFileSync(filePath); 24 | zipFolder.file(file, fileContents); 25 | } 26 | }); 27 | } 28 | 29 | console.log("[*] Copying manifest file"); 30 | const srcManifestPath = path.resolve(__dirname, "../manifest.json"); 31 | const destManifestPath = path.join(DIST, "manifest.json"); 32 | const data = JSON.parse(fs.readFileSync(srcManifestPath, "utf-8")); 33 | if (!validateManifest(data)) { 34 | process.exit(1); 35 | } 36 | fs.copyFileSync(srcManifestPath, destManifestPath); 37 | 38 | console.log("[*] Creating zip"); 39 | const zip = new JSZip(); 40 | 41 | addDirToZip(DIST, zip); 42 | 43 | const zipPath = path.join(DIST, "plugin_package.zip"); 44 | zip 45 | .generateAsync({ 46 | type: "nodebuffer", 47 | compression: "DEFLATE", 48 | compressionOptions: { 49 | level: 9, 50 | }, 51 | }) 52 | .then((content) => { 53 | fs.writeFileSync(zipPath, content); 54 | }) 55 | .catch((err) => console.error("[-] Error creating zip:", err)); 56 | -------------------------------------------------------------------------------- /packages/frontend/src/themes/switcher.ts: -------------------------------------------------------------------------------- 1 | import { Theme } from "shared"; 2 | 3 | export let usedThemeID: string | undefined; 4 | 5 | export function setTheme(theme: Theme): void { 6 | localStorage.setItem("caidothemes:theme", theme.id); 7 | const root = document.documentElement; 8 | usedThemeID = theme.id; 9 | 10 | // Set primary colors 11 | setPropertyIfNotUndefined(root, "--caidothemes-primary-dark", theme.primary.dark); 12 | setPropertyIfNotUndefined(root, "--caidothemes-primary-light", theme.primary.light); 13 | setPropertyIfNotUndefined(root, "--caidothemes-subtle", theme.primary.subtle); 14 | 15 | // Set button colors 16 | if (theme.button) { 17 | setPropertyIfNotUndefined(root, "--caidothemes-btn-primary-bg", theme.button.primary?.bg); 18 | setPropertyIfNotUndefined(root, "--caidothemes-btn-primary-text", theme.button.primary?.text); 19 | setPropertyIfNotUndefined(root, "--caidothemes-btn-secondary-bg", theme.button.secondary?.bg); 20 | setPropertyIfNotUndefined(root, "--caidothemes-btn-secondary-text", theme.button.secondary?.text); 21 | setPropertyIfNotUndefined(root, "--caidothemes-btn-tertiary-bg", theme.button.tertiary?.bg); 22 | setPropertyIfNotUndefined(root, "--caidothemes-btn-tertiary-text", theme.button.tertiary?.text); 23 | } 24 | } 25 | 26 | export function resetTheme(): void { 27 | usedThemeID = undefined; 28 | const root = document.documentElement; 29 | localStorage.removeItem("caidothemes:theme"); 30 | 31 | const properties = Object.values(root.style); 32 | for (const property of properties) { 33 | if (property.startsWith("--caidothemes-")) { 34 | root.style.removeProperty(property); 35 | } 36 | } 37 | } 38 | 39 | const setPropertyIfNotUndefined = ( 40 | root: HTMLElement, 41 | property: string, 42 | value: string | undefined 43 | ) => { 44 | if (value && value !== "") { 45 | root.style.setProperty(property, value); 46 | } else { 47 | root.style.removeProperty(property); 48 | } 49 | }; 50 | -------------------------------------------------------------------------------- /packages/frontend/src/styles/style.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | /* Base Colors */ 7 | --caidothemes-primary-dark: #25272d; 8 | --caidothemes-primary-light: #353942; 9 | --caidothemes-subtle: #2f323a; 10 | 11 | /* Button Colors */ 12 | --caidothemes-btn-primary-bg: var(--c-bg-primary); 13 | --caidothemes-btn-primary-text: #ffffff; 14 | 15 | --caidothemes-btn-secondary-bg: var(--c-bg-secondary); 16 | --caidothemes-btn-secondary-text: #ffffff; 17 | 18 | --caidothemes-btn-tertiary-bg: #var(--c-bg-tertiary); 19 | --caidothemes-btn-tertiary-text: #ffffff; 20 | 21 | /* Caido CSS Overrides */ 22 | --c-gray-900: var(--caidothemes-primary-dark) !important; 23 | --c-gray-800: var(--caidothemes-subtle) !important; 24 | --p-gray-900: var(--caidothemes-primary-dark) !important; 25 | --p-gray-800: var(--caidothemes-subtle) !important; 26 | 27 | --p-surface-800: var(--caidothemes-subtle) !important; 28 | --p-surface-900: var(--caidothemes-primary-light) !important; 29 | --p-surface-950: var(--caidothemes-primary-dark) !important; 30 | } 31 | 32 | .c-table__item-row[data-is-even=false], 33 | .c-table__header-row { 34 | background-color: var(--caidothemes-primary-light) !important; 35 | } 36 | 37 | .c-table__item-row:hover { 38 | background-color: var(--caidothemes-primary-dark) !important; 39 | } 40 | 41 | [data-variant="tertiary"][data-outline="false"] .c-button__input { 42 | background-color: var(--caidothemes-btn-tertiary-bg) !important; 43 | color: var(--caidothemes-btn-tertiary-text) !important; 44 | } 45 | 46 | [data-variant="secondary"][data-outline="false"] .c-button__input { 47 | background-color: var(--caidothemes-btn-secondary-bg) !important; 48 | color: var(--caidothemes-btn-secondary-text) !important; 49 | } 50 | 51 | [data-variant="primary"][data-outline="false"] .c-button__input { 52 | background-color: var(--caidothemes-btn-primary-bg) !important; 53 | color: var(--caidothemes-btn-primary-text) !important; 54 | } -------------------------------------------------------------------------------- /packages/backend/src/store/themes.ts: -------------------------------------------------------------------------------- 1 | import DatabaseManager from "@/database/database"; 2 | import { Theme } from "shared"; 3 | import { CaidoBackendSDK } from "@/types"; 4 | import { DEFAULT_THEMES } from "@/defaults"; 5 | 6 | export class ThemesStore { 7 | private static instance: ThemesStore; 8 | 9 | private themesMap: Map = new Map(); 10 | private dbManager: DatabaseManager; 11 | private sdk: CaidoBackendSDK; 12 | 13 | constructor(dbManager: DatabaseManager, sdk: CaidoBackendSDK) { 14 | this.dbManager = dbManager; 15 | this.sdk = sdk; 16 | } 17 | 18 | public static async init(dbManager: DatabaseManager, sdk: CaidoBackendSDK) { 19 | this.instance = new ThemesStore(dbManager, sdk); 20 | return this.instance; 21 | } 22 | 23 | public static get(): ThemesStore { 24 | if (!ThemesStore.instance) { 25 | throw new Error("ThemesStore not initialized"); 26 | } 27 | 28 | return ThemesStore.instance; 29 | } 30 | 31 | public async resetThemes(): Promise { 32 | await this.dbManager.clearThemes(); 33 | this.themesMap.clear(); 34 | 35 | for (const theme of DEFAULT_THEMES) { 36 | await this.addTheme(theme); 37 | } 38 | } 39 | 40 | public async getThemes(): Promise { 41 | const themes = await this.dbManager.getThemes(); 42 | this.themesMap = new Map(themes.map((theme) => [theme.id, theme])); 43 | return themes; 44 | } 45 | 46 | public async existsID(id: string): Promise { 47 | return this.themesMap.has(id); 48 | } 49 | 50 | public async getTheme(id: string): Promise { 51 | return this.dbManager.getTheme(id); 52 | } 53 | 54 | public async addTheme(theme: Omit): Promise { 55 | const id = await this.dbManager.createTheme(theme); 56 | 57 | const newTheme = { 58 | ...theme, 59 | id, 60 | }; 61 | this.themesMap.set(id, newTheme); 62 | 63 | return newTheme; 64 | } 65 | 66 | public async updateTheme(theme: Theme): Promise { 67 | await this.dbManager.updateTheme(theme); 68 | this.themesMap.set(theme.id, theme); 69 | return theme; 70 | } 71 | 72 | public async removeTheme(id: string): Promise { 73 | await this.dbManager.deleteTheme(id); 74 | this.themesMap.delete(id); 75 | } 76 | 77 | public async clear(): Promise { 78 | await this.dbManager.clearThemes(); 79 | this.themesMap.clear(); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /packages/frontend/src/stores/themes.ts: -------------------------------------------------------------------------------- 1 | import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; 2 | import { CaidoSDK } from "@/types"; 3 | import { Theme } from "shared"; 4 | import { handleResult } from "@/utils/api-calls"; 5 | import { create } from "zustand"; 6 | import { resetTheme, usedThemeID } from "@/themes/switcher"; 7 | 8 | const THEMES_QUERY_KEY = ["themes"]; 9 | 10 | interface ThemeLocalStore { 11 | selectedThemeID: string | null; 12 | setSelectedThemeID: (themeID: string | null) => void; 13 | } 14 | 15 | const useThemeLocalStore = create((set) => ({ 16 | selectedThemeID: localStorage.getItem("caidothemes:theme") || null, 17 | setSelectedThemeID: (themeID) => set({ selectedThemeID: themeID }), 18 | })); 19 | 20 | function useThemes(sdk: CaidoSDK) { 21 | return useQuery({ 22 | queryKey: THEMES_QUERY_KEY, 23 | queryFn: () => handleResult(sdk.backend.getThemes(), sdk), 24 | staleTime: 1000 * 60 * 5, 25 | }); 26 | } 27 | 28 | function useTheme(sdk: CaidoSDK, themeID: string) { 29 | return useQuery({ 30 | queryKey: [THEMES_QUERY_KEY, themeID], 31 | queryFn: () => handleResult(sdk.backend.getTheme(themeID), sdk), 32 | }); 33 | } 34 | 35 | function useUpdateTheme(sdk: CaidoSDK) { 36 | const queryClient = useQueryClient(); 37 | 38 | return useMutation({ 39 | mutationFn: ({ 40 | themeID, 41 | updatedTheme, 42 | }: { 43 | themeID: string; 44 | updatedTheme: Partial; 45 | }) => handleResult(sdk.backend.updateTheme(themeID, updatedTheme), sdk), 46 | onSuccess: (data) => { 47 | queryClient.setQueryData(THEMES_QUERY_KEY, data); 48 | }, 49 | }); 50 | } 51 | 52 | function useAddTheme(sdk: CaidoSDK) { 53 | const queryClient = useQueryClient(); 54 | 55 | return useMutation({ 56 | mutationFn: (newTheme: Omit) => 57 | handleResult(sdk.backend.addTheme(newTheme), sdk), 58 | onSuccess: (data) => { 59 | queryClient.setQueryData(THEMES_QUERY_KEY, data); 60 | }, 61 | }); 62 | } 63 | 64 | function useRemoveTheme(sdk: CaidoSDK) { 65 | const queryClient = useQueryClient(); 66 | 67 | return useMutation({ 68 | mutationFn: (themeID: string) => 69 | handleResult(sdk.backend.removeTheme(themeID), sdk), 70 | onSuccess: (data, variables) => { 71 | const currentSelectedTheme = 72 | useThemeLocalStore.getState().selectedThemeID; 73 | 74 | if (usedThemeID === variables) { 75 | resetTheme(); 76 | } 77 | 78 | if (currentSelectedTheme === variables) { 79 | useThemeLocalStore.setState({ selectedThemeID: null }); 80 | } 81 | 82 | queryClient.setQueryData(THEMES_QUERY_KEY, data); 83 | }, 84 | }); 85 | } 86 | 87 | export { 88 | useThemes, 89 | useAddTheme, 90 | useRemoveTheme, 91 | useThemeLocalStore as useThemeStore, 92 | useTheme, 93 | useUpdateTheme, 94 | }; 95 | -------------------------------------------------------------------------------- /packages/backend/src/defaults.ts: -------------------------------------------------------------------------------- 1 | import { Theme } from "shared"; 2 | 3 | /* Most of this themes are made by ChatGPT lol. Feel free to contribute your own! */ 4 | export const DEFAULT_THEMES: Omit[] = [ 5 | { 6 | name: "Default", 7 | description: "The default Caido theme", 8 | author: "Caido", 9 | primary: { 10 | dark: "#25272d", 11 | light: "#353942", 12 | subtle: "#2f323a", 13 | }, 14 | }, 15 | { 16 | name: "Dark Gray", 17 | description: "For hackers who like their themes as dark as their intentions", 18 | author: "bebiks", 19 | primary: { 20 | dark: "#262626", 21 | light: "#3a3a3a", 22 | subtle: "#303030", 23 | }, 24 | }, 25 | { 26 | name: "Even Darker", 27 | description: "So dark, you might lose your mouse cursor", 28 | author: "bebiks", 29 | primary: { 30 | dark: "#000000", 31 | light: "#121111", 32 | subtle: "#151414", 33 | }, 34 | }, 35 | { 36 | name: "Coffee Stain", 37 | description: "A dark theme inspired by your favorite brew", 38 | author: "bebiks", 39 | primary: { 40 | dark: "#2e241f", 41 | light: "#4d3e32", 42 | subtle: "#3a3027", 43 | }, 44 | }, 45 | { 46 | name: "Ocean Blue", 47 | description: "For when you want your screen to look like a fish tank", 48 | author: "bebiks", 49 | primary: { 50 | dark: "#1a2b3c", 51 | light: "#3a5a7a", 52 | subtle: "#2c4a6a", 53 | }, 54 | }, 55 | { 56 | name: "Forest Green", 57 | description: "Perfect for pretending you're outside while testing indoors", 58 | author: "bebiks", 59 | primary: { 60 | dark: "#1e3a23", 61 | light: "#3c7a4d", 62 | subtle: "#2c5a3d", 63 | }, 64 | }, 65 | { 66 | name: "Sunset Orange", 67 | description: "Caido, but make it pumpkin spice", 68 | author: "bebiks", 69 | primary: { 70 | dark: "#3a2a1a", 71 | light: "#7a5a3a", 72 | subtle: "#5a4a2a", 73 | }, 74 | }, 75 | { 76 | name: "Lavender", 77 | description: "For researchers who want their proxy to smell like a fancy soap shop", 78 | author: "bebiks", 79 | primary: { 80 | dark: "#2a1a3a", 81 | light: "#5a3a7a", 82 | subtle: "#4a2a5a", 83 | }, 84 | }, 85 | { 86 | name: "Midnight in Seoul", 87 | description: "A theme inspired by the deep blue hues of Seoul at midnight", 88 | author: "hahwul", 89 | primary: { 90 | dark: "#081721", 91 | light: "#182730", 92 | subtle: "#122231", 93 | }, 94 | button: { 95 | primary: { 96 | bg: "#30465a", 97 | text: "", 98 | }, 99 | secondary: { 100 | bg: "#000000", 101 | text: "#000000", 102 | }, 103 | tertiary: { 104 | bg: "#31516d", 105 | text: "", 106 | }, 107 | }, 108 | }, 109 | ]; 110 | -------------------------------------------------------------------------------- /packages/backend/src/api/themes.ts: -------------------------------------------------------------------------------- 1 | import { error, ok, Result } from "shared"; 2 | import { CaidoBackendSDK } from "@/types"; 3 | import { Theme } from "shared"; 4 | import { ThemesStore } from "@/store/themes"; 5 | 6 | async function getThemes(sdk: CaidoBackendSDK): Promise> { 7 | const themeStore = ThemesStore.get(); 8 | const themes = await themeStore.getThemes(); 9 | 10 | return ok(themes); 11 | } 12 | 13 | async function getTheme( 14 | sdk: CaidoBackendSDK, 15 | themeID: string 16 | ): Promise> { 17 | const themeStore = ThemesStore.get(); 18 | const theme = await themeStore.getTheme(themeID); 19 | 20 | if (!theme) { 21 | return error(`Theme ${themeID} not found`); 22 | } 23 | 24 | return ok(theme); 25 | } 26 | 27 | async function addTheme( 28 | sdk: CaidoBackendSDK, 29 | newTheme: Omit 30 | ): Promise> { 31 | const themeStore = ThemesStore.get(); 32 | const themes = await themeStore.getThemes(); 33 | 34 | const validationResult = validateTheme(newTheme); 35 | if (validationResult.kind === "Error") { 36 | return error(validationResult.error); 37 | } 38 | 39 | const theme = await themeStore.addTheme(newTheme); 40 | return ok([...themes, theme]); 41 | } 42 | 43 | async function updateTheme( 44 | sdk: CaidoBackendSDK, 45 | themeID: string, 46 | updatedThemeFields: Partial 47 | ): Promise> { 48 | const themeStore = ThemesStore.get(); 49 | const theme = await themeStore.getTheme(themeID); 50 | if (!theme) { 51 | return error(`Theme ${themeID} not found`); 52 | } 53 | 54 | const updatedTheme = { ...theme, ...updatedThemeFields }; 55 | const validationResult = validateTheme(updatedTheme); 56 | if (validationResult.kind === "Error") { 57 | return error(validationResult.error); 58 | } 59 | 60 | await themeStore.updateTheme(updatedTheme); 61 | 62 | const themes = await themeStore.getThemes(); 63 | return ok(themes); 64 | } 65 | 66 | async function removeTheme( 67 | sdk: CaidoBackendSDK, 68 | themeID: string 69 | ): Promise> { 70 | const themeStore = ThemesStore.get(); 71 | const theme = await themeStore.getTheme(themeID); 72 | if (!theme) { 73 | return error(`Theme ${themeID} not found`); 74 | } 75 | 76 | await themeStore.removeTheme(themeID); 77 | 78 | const themes = await themeStore.getThemes(); 79 | return ok(themes); 80 | } 81 | 82 | async function resetThemes(sdk: CaidoBackendSDK): Promise> { 83 | const themeStore = ThemesStore.get(); 84 | await themeStore.resetThemes(); 85 | return getThemes(sdk); 86 | } 87 | 88 | function validateTheme(theme: Omit): Result> { 89 | if (!theme.name) { 90 | return error("Theme name is required"); 91 | } 92 | 93 | if (!theme.author) { 94 | return error("Theme author is required"); 95 | } 96 | 97 | if (!theme.description) { 98 | return error("Theme description is required"); 99 | } 100 | 101 | if (theme.author.length > 50) { 102 | return error("Theme author is too long"); 103 | } 104 | 105 | if (theme.name.length > 50) { 106 | return error("Theme name is too long"); 107 | } 108 | 109 | if (theme.description.length > 300) { 110 | return error("Theme description is too long"); 111 | } 112 | 113 | return ok(theme); 114 | } 115 | 116 | export { getThemes, getTheme, addTheme, updateTheme, removeTheme, resetThemes }; 117 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /packages/frontend/src/components/ThemesList.tsx: -------------------------------------------------------------------------------- 1 | import { useSDK } from "@/stores/sdk"; 2 | import { useRemoveTheme, useThemes, useThemeStore } from "@/stores/themes"; 3 | import { 4 | Table, 5 | TableBody, 6 | TableCell, 7 | TableContainer, 8 | TableHead, 9 | TableRow, 10 | Typography, 11 | Button, 12 | Menu, 13 | MenuItem, 14 | ListItemIcon, 15 | Dialog, 16 | DialogContentText, 17 | DialogContent, 18 | DialogActions, 19 | DialogTitle, 20 | } from "@mui/material"; 21 | import { StyledBox } from "caido-material-ui"; 22 | import { useAddTheme } from "@/stores/themes"; 23 | import { useState } from "react"; 24 | import RestartAltIcon from "@mui/icons-material/RestartAlt"; 25 | import FileUploadIcon from "@mui/icons-material/FileUpload"; 26 | import { useQueryClient } from "@tanstack/react-query"; 27 | 28 | export const ThemesList = () => { 29 | const sdk = useSDK(); 30 | const queryClient = useQueryClient(); 31 | 32 | const { data: themes } = useThemes(sdk); 33 | const { selectedThemeID, setSelectedThemeID } = useThemeStore(); 34 | const { mutate: addTheme } = useAddTheme(sdk); 35 | const { mutate: removeTheme } = useRemoveTheme(sdk); 36 | 37 | const [anchorEl, setAnchorEl] = useState(null); 38 | 39 | const handleAddTheme = () => { 40 | addTheme({ 41 | name: "New Theme " + Date.now(), 42 | description: "This is easily the best theme ever created", 43 | author: "awesome-someone", 44 | primary: { 45 | dark: "#25272d", 46 | light: "#353942", 47 | subtle: "#2f323a", 48 | }, 49 | }); 50 | 51 | sdk.window.showToast("New theme created", { 52 | variant: "success", 53 | }); 54 | }; 55 | 56 | const handleRemoveTheme = (themeId: string) => { 57 | removeTheme(themeId); 58 | 59 | sdk.window.showToast("Theme deleted", { 60 | variant: "success", 61 | }); 62 | }; 63 | 64 | const handleImportTheme = () => { 65 | const input = document.createElement("input"); 66 | input.type = "file"; 67 | input.accept = ".json"; 68 | input.onchange = (event) => { 69 | const file = (event.target as HTMLInputElement).files?.[0]; 70 | if (file) { 71 | const reader = new FileReader(); 72 | reader.onload = (e) => { 73 | try { 74 | const themeData = JSON.parse(e.target?.result as string); 75 | addTheme(themeData); 76 | sdk.window.showToast("Theme imported successfully", { 77 | variant: "success", 78 | }); 79 | } catch (error) { 80 | sdk.window.showToast("Error importing theme", { variant: "error" }); 81 | } 82 | }; 83 | reader.readAsText(file); 84 | } 85 | }; 86 | input.click(); 87 | }; 88 | 89 | const handleResetThemes = async () => { 90 | await sdk.backend.resetThemes(); 91 | 92 | sdk.window.showToast("Themes reset", { 93 | variant: "success", 94 | }); 95 | }; 96 | const [openResetDialog, setOpenResetDialog] = useState(false); 97 | 98 | const handleOpenResetDialog = () => { 99 | setOpenResetDialog(true); 100 | setAnchorEl(null); 101 | }; 102 | 103 | const handleCloseResetDialog = () => { 104 | setOpenResetDialog(false); 105 | }; 106 | 107 | const handleConfirmReset = async () => { 108 | await handleResetThemes(); 109 | handleCloseResetDialog(); 110 | setSelectedThemeID(null); 111 | queryClient.invalidateQueries({ queryKey: ["themes"] }); 112 | }; 113 | return ( 114 | 115 |
116 | 117 | Themes 118 | 119 |
120 | 128 | setAnchorEl(null)} 132 | > 133 | 134 | 135 | 136 | 137 | Reset 138 | 139 | 140 | 141 | 142 | 143 | Import 144 | 145 | 146 | 149 |
150 | 156 | {"Reset Themes?"} 157 | 158 | 159 | Are you sure you want to reset all themes? This action cannot be 160 | undone. 161 | 162 | 163 | 164 | 167 | 170 | 171 | 172 |
173 | 174 | 175 | 176 | 177 | 178 | Name 179 | Description 180 | Author 181 | Actions 182 | 183 | 184 | 185 | {themes?.map((theme) => ( 186 | setSelectedThemeID(theme.id)} 189 | selected={selectedThemeID === theme.id} 190 | hover 191 | > 192 | {theme.name} 193 | {theme.description} 194 | {theme.author} 195 | 196 | 206 | 207 | 208 | ))} 209 | 210 |
211 |
212 |
213 | ); 214 | }; 215 | -------------------------------------------------------------------------------- /packages/backend/src/database/database.ts: -------------------------------------------------------------------------------- 1 | import { CaidoBackendSDK } from "@/types"; 2 | import { Database } from "sqlite"; 3 | import { Theme } from "shared"; 4 | 5 | interface DatabaseTheme { 6 | id: string; 7 | name: string; 8 | description: string; 9 | author: string; 10 | primary_dark: string; 11 | primary_light: string; 12 | primary_subtle: string; 13 | button_primary_bg: string; 14 | button_primary_text: string; 15 | button_secondary_bg: string; 16 | button_secondary_text: string; 17 | button_tertiary_bg: string; 18 | button_tertiary_text: string; 19 | } 20 | 21 | class DatabaseManager { 22 | private sdk: CaidoBackendSDK; 23 | private database: Database | null = null; 24 | 25 | constructor(sdk: CaidoBackendSDK) { 26 | this.sdk = sdk; 27 | } 28 | 29 | async init(): Promise { 30 | this.database = await this.sdk.meta.db(); 31 | return await this.setupDatabase(); 32 | } 33 | 34 | private async setupDatabase(): Promise { 35 | if (!this.database) return false; 36 | 37 | const tableExistsStatement = await this.database.prepare( 38 | "SELECT name FROM sqlite_master WHERE type='table' AND name='themes'" 39 | ); 40 | const tableExists = await tableExistsStatement.get(); 41 | 42 | if (tableExists) { 43 | return false; 44 | } 45 | 46 | await this.database.exec(` 47 | CREATE TABLE themes ( 48 | id TEXT PRIMARY KEY, 49 | name TEXT NOT NULL, 50 | description TEXT, 51 | author TEXT, 52 | primary_dark TEXT, 53 | primary_light TEXT, 54 | primary_subtle TEXT, 55 | button_primary_bg TEXT, 56 | button_primary_text TEXT, 57 | button_secondary_bg TEXT, 58 | button_secondary_text TEXT, 59 | button_tertiary_bg TEXT, 60 | button_tertiary_text TEXT 61 | ) 62 | `); 63 | 64 | return true; 65 | } 66 | 67 | async createTheme(theme: Omit): Promise { 68 | if (!this.database) throw new Error("Database not initialized"); 69 | 70 | const startTime = Date.now(); 71 | const id = Math.random().toString(36).slice(2, 15); 72 | 73 | const statement = await this.database.prepare(` 74 | INSERT INTO themes ( 75 | id, name, description, author, 76 | primary_dark, primary_light, primary_subtle, 77 | button_primary_bg, button_primary_text, 78 | button_secondary_bg, button_secondary_text, 79 | button_tertiary_bg, button_tertiary_text 80 | ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 81 | `); 82 | 83 | await statement.run( 84 | id, 85 | theme.name, 86 | theme.description, 87 | theme.author, 88 | theme.primary.dark, 89 | theme.primary.light, 90 | theme.primary.subtle, 91 | theme.button?.primary?.bg ?? null, 92 | theme.button?.primary?.text ?? null, 93 | theme.button?.secondary?.bg ?? null, 94 | theme.button?.secondary?.text ?? null, 95 | theme.button?.tertiary?.bg ?? null, 96 | theme.button?.tertiary?.text ?? null 97 | ); 98 | 99 | const timeTaken = Date.now() - startTime; 100 | this.sdk.console.log(`[DATABASE] Created theme ID ${id} in ${timeTaken}ms`); 101 | 102 | return id; 103 | } 104 | 105 | async updateTheme(theme: Theme): Promise { 106 | if (!this.database) throw new Error("Database not initialized"); 107 | 108 | const startTime = Date.now(); 109 | 110 | const statement = await this.database.prepare(` 111 | UPDATE themes SET 112 | name = ?, description = ?, author = ?, 113 | primary_dark = ?, primary_light = ?, primary_subtle = ?, 114 | button_primary_bg = ?, button_primary_text = ?, 115 | button_secondary_bg = ?, button_secondary_text = ?, 116 | button_tertiary_bg = ?, button_tertiary_text = ? 117 | WHERE id = ? 118 | `); 119 | 120 | await statement.run( 121 | theme.name, 122 | theme.description, 123 | theme.author, 124 | theme.primary.dark, 125 | theme.primary.light, 126 | theme.primary.subtle, 127 | theme.button?.primary?.bg ?? null, 128 | theme.button?.primary?.text ?? null, 129 | theme.button?.secondary?.bg ?? null, 130 | theme.button?.secondary?.text ?? null, 131 | theme.button?.tertiary?.bg ?? null, 132 | theme.button?.tertiary?.text ?? null, 133 | theme.id 134 | ); 135 | 136 | const timeTaken = Date.now() - startTime; 137 | this.sdk.console.log( 138 | `[DATABASE] Updated theme ID ${theme.id} in ${timeTaken}ms` 139 | ); 140 | } 141 | 142 | async deleteTheme(id: string): Promise { 143 | if (!this.database) throw new Error("Database not initialized"); 144 | 145 | const startTime = Date.now(); 146 | const statement = await this.database.prepare( 147 | "DELETE FROM themes WHERE id = ?" 148 | ); 149 | await statement.run(id); 150 | 151 | const timeTaken = Date.now() - startTime; 152 | this.sdk.console.log(`[DATABASE] Deleted theme ID ${id} in ${timeTaken}ms`); 153 | } 154 | 155 | async getThemes(): Promise { 156 | if (!this.database) throw new Error("Database not initialized"); 157 | 158 | const startTime = Date.now(); 159 | 160 | const statement = await this.database.prepare("SELECT * FROM themes"); 161 | const rows = (await statement.all()) as DatabaseTheme[]; 162 | 163 | const timeTaken = Date.now() - startTime; 164 | this.sdk.console.log(`[DATABASE] Fetched themes in ${timeTaken}ms`); 165 | 166 | return rows.map((row) => ({ 167 | id: row.id, 168 | name: row.name, 169 | description: row.description, 170 | author: row.author, 171 | primary: { 172 | dark: row.primary_dark, 173 | light: row.primary_light, 174 | subtle: row.primary_subtle, 175 | }, 176 | button: { 177 | primary: { 178 | bg: row.button_primary_bg, 179 | text: row.button_primary_text, 180 | }, 181 | secondary: { 182 | bg: row.button_secondary_bg, 183 | text: row.button_secondary_text, 184 | }, 185 | tertiary: { 186 | bg: row.button_tertiary_bg, 187 | text: row.button_tertiary_text, 188 | }, 189 | }, 190 | })); 191 | } 192 | 193 | async getTheme(id: string): Promise { 194 | if (!this.database) throw new Error("Database not initialized"); 195 | 196 | const statement = await this.database.prepare( 197 | "SELECT * FROM themes WHERE id = ?" 198 | ); 199 | const row = (await statement.get(id)) as DatabaseTheme; 200 | 201 | return row 202 | ? { 203 | id: row.id, 204 | name: row.name, 205 | description: row.description, 206 | author: row.author, 207 | primary: { 208 | dark: row.primary_dark, 209 | light: row.primary_light, 210 | subtle: row.primary_subtle, 211 | }, 212 | button: { 213 | primary: { 214 | bg: row.button_primary_bg, 215 | text: row.button_primary_text, 216 | }, 217 | secondary: { 218 | bg: row.button_secondary_bg, 219 | text: row.button_secondary_text, 220 | }, 221 | tertiary: { 222 | bg: row.button_tertiary_bg, 223 | text: row.button_tertiary_text, 224 | }, 225 | }, 226 | } 227 | : null; 228 | } 229 | 230 | async clearThemes(): Promise { 231 | if (!this.database) throw new Error("Database not initialized"); 232 | 233 | const statement = await this.database.prepare("DELETE FROM themes"); 234 | await statement.run(); 235 | } 236 | } 237 | 238 | export default DatabaseManager; 239 | -------------------------------------------------------------------------------- /packages/frontend/src/components/ThemePreview.tsx: -------------------------------------------------------------------------------- 1 | import { useSDK } from "@/stores/sdk"; 2 | import { useTheme, useThemeStore, useUpdateTheme } from "@/stores/themes"; 3 | import { 4 | Typography, 5 | Button, 6 | TextField, 7 | Box, 8 | Tooltip, 9 | Divider, 10 | } from "@mui/material"; 11 | import { StyledBox } from "caido-material-ui"; 12 | import { setTheme as useThemeFrontend } from "@/themes/switcher"; 13 | import { useState, useEffect } from "react"; 14 | import { Theme } from "shared"; 15 | 16 | interface EmptyPageProps { 17 | text: string; 18 | } 19 | 20 | function EmptyPage({ text }: EmptyPageProps) { 21 | return ( 22 | 23 | {text} 24 | 25 | ); 26 | } 27 | 28 | interface ColorInputProps { 29 | label: string; 30 | value: string; 31 | onChange: (value: string) => void; 32 | } 33 | 34 | function ColorInput({ label, value, onChange }: ColorInputProps) { 35 | return ( 36 | 37 | 38 | onChange(e.target.value)} 43 | /> 44 | 45 | 46 | onChange(e.target.value)} 50 | style={{ width: "100%", height: "56px" }} 51 | /> 52 | 53 | 54 | ); 55 | } 56 | 57 | export function ThemePreview() { 58 | const sdk = useSDK(); 59 | const { selectedThemeID } = useThemeStore(); 60 | const { data: theme, isError } = useTheme(sdk, selectedThemeID ?? ""); 61 | const { mutate: updateTheme } = useUpdateTheme(sdk); 62 | 63 | const [editedTheme, setEditedTheme] = useState(null); 64 | 65 | useEffect(() => { 66 | if (theme) { 67 | setEditedTheme(theme); 68 | } 69 | }, [theme]); 70 | 71 | if (!selectedThemeID) { 72 | return ; 73 | } 74 | 75 | if (isError || !theme || !editedTheme) { 76 | return ; 77 | } 78 | 79 | const handleUseTheme = () => { 80 | if (editedTheme) { 81 | useThemeFrontend(editedTheme); 82 | updateTheme({ themeID: selectedThemeID, updatedTheme: editedTheme }); 83 | localStorage.setItem("caidothemes:theme", editedTheme.id); 84 | } 85 | }; 86 | 87 | const handleExportTheme = () => { 88 | const { id, ...themeWithoutId } = editedTheme; 89 | const themeData = JSON.stringify(themeWithoutId, null, 2); 90 | const blob = new Blob([themeData], { type: "application/json" }); 91 | const url = URL.createObjectURL(blob); 92 | const fileName = `${editedTheme.name.toLowerCase().replace(/\s+/g, '-')}.json`; 93 | 94 | const link = document.createElement("a"); 95 | link.href = url; 96 | link.download = fileName; 97 | link.click(); 98 | 99 | URL.revokeObjectURL(url); 100 | 101 | sdk.window.showToast("Theme exported successfully", { variant: "success" }); 102 | }; 103 | 104 | const handleColorChange = ( 105 | category: "primary" | "button", 106 | subCategory: string, 107 | property: string, 108 | value: string 109 | ) => { 110 | if (editedTheme) { 111 | setEditedTheme((prevTheme) => { 112 | if (!prevTheme) return null; 113 | if (category === "primary") { 114 | return { 115 | ...prevTheme, 116 | primary: { 117 | ...prevTheme.primary, 118 | [subCategory]: value, 119 | }, 120 | }; 121 | } else if (category === "button") { 122 | return { 123 | ...prevTheme, 124 | button: { 125 | ...prevTheme.button, 126 | [subCategory]: { 127 | ...(prevTheme.button?.[subCategory as keyof Theme["button"]] || 128 | {}), 129 | [property]: value, 130 | }, 131 | }, 132 | }; 133 | } 134 | return prevTheme; 135 | }); 136 | } 137 | }; 138 | 139 | return ( 140 | 141 |
142 | 143 | Theme Preview 144 | 145 | ID: {editedTheme.id} 146 | 147 | 148 |
149 | 156 | 159 |
160 |
161 | 162 | 166 | setEditedTheme({ ...editedTheme, name: e.target.value }) 167 | } 168 | fullWidth 169 | /> 170 | 174 | setEditedTheme({ ...editedTheme, author: e.target.value }) 175 | } 176 | fullWidth 177 | /> 178 | 182 | setEditedTheme({ ...editedTheme, description: e.target.value }) 183 | } 184 | fullWidth 185 | multiline 186 | rows={3} 187 | /> 188 | 189 | 190 | 191 | 192 | Primary Colors 193 | 194 | 195 | handleColorChange("primary", "dark", "", value)} 199 | /> 200 | 201 | 205 | handleColorChange("primary", "subtle", "", value) 206 | } 207 | /> 208 | 209 | 214 |
215 | 219 | handleColorChange("primary", "light", "", value) 220 | } 221 | /> 222 |
223 |
224 | 225 | 226 | 227 | 228 | Button Colors 229 | 230 | 231 | 235 | handleColorChange("button", "primary", "bg", value) 236 | } 237 | /> 238 | 239 | 243 | handleColorChange("button", "primary", "text", value) 244 | } 245 | /> 246 | 247 | 251 | handleColorChange("button", "secondary", "bg", value) 252 | } 253 | /> 254 | 255 | 259 | handleColorChange("button", "secondary", "text", value) 260 | } 261 | /> 262 | 263 | 267 | handleColorChange("button", "tertiary", "bg", value) 268 | } 269 | /> 270 | 271 | 275 | handleColorChange("button", "tertiary", "text", value) 276 | } 277 | /> 278 |
279 |
280 | ); 281 | } 282 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@caido/plugin-manifest': 12 | specifier: 0.1.3 13 | version: 0.1.3 14 | jszip: 15 | specifier: 3.10.1 16 | version: 3.10.1 17 | typescript: 18 | specifier: 5.6.2 19 | version: 5.6.2 20 | vite: 21 | specifier: 5.4.8 22 | version: 5.4.8(@types/node@22.7.4) 23 | 24 | packages/backend: 25 | dependencies: 26 | shared: 27 | specifier: workspace:* 28 | version: link:../shared 29 | devDependencies: 30 | '@caido/sdk-backend': 31 | specifier: 0.41.0 32 | version: 0.41.0 33 | '@types/node': 34 | specifier: ^22.7.4 35 | version: 22.7.4 36 | 37 | packages/frontend: 38 | dependencies: 39 | '@caido/sdk-frontend': 40 | specifier: 0.41.0 41 | version: 0.41.0(@codemirror/view@6.34.1) 42 | '@emotion/react': 43 | specifier: ^11.13.3 44 | version: 11.13.3(@types/react@18.3.10)(react@18.3.1) 45 | '@emotion/styled': 46 | specifier: ^11.13.0 47 | version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) 48 | '@mui/icons-material': 49 | specifier: ^6.1.1 50 | version: 6.1.1(@mui/material@6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) 51 | '@mui/material': 52 | specifier: ^6.1.1 53 | version: 6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 54 | '@tanstack/react-query': 55 | specifier: ^5.59.0 56 | version: 5.59.0(react@18.3.1) 57 | '@types/react': 58 | specifier: ^18.3.10 59 | version: 18.3.10 60 | '@types/react-dom': 61 | specifier: ^18.3.0 62 | version: 18.3.0 63 | allotment: 64 | specifier: ^1.20.2 65 | version: 1.20.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 66 | caido-material-ui: 67 | specifier: ^1.0.1 68 | version: 1.0.1(@types/react@18.3.10) 69 | react: 70 | specifier: ^18.3.1 71 | version: 18.3.1 72 | react-dom: 73 | specifier: ^18.3.1 74 | version: 18.3.1(react@18.3.1) 75 | zustand: 76 | specifier: 5.0.0-rc.2 77 | version: 5.0.0-rc.2(@types/react@18.3.10)(react@18.3.1) 78 | devDependencies: 79 | '@caido/sdk-backend': 80 | specifier: 0.41.0 81 | version: 0.41.0 82 | '@types/node': 83 | specifier: ^22.7.4 84 | version: 22.7.4 85 | '@vitejs/plugin-react': 86 | specifier: ^4.3.1 87 | version: 4.3.1(vite@5.4.8(@types/node@22.7.4)) 88 | backend: 89 | specifier: workspace:* 90 | version: link:../backend 91 | shared: 92 | specifier: workspace:* 93 | version: link:../shared 94 | tailwindcss: 95 | specifier: ^3.4.13 96 | version: 3.4.13 97 | vite: 98 | specifier: 5.4.8 99 | version: 5.4.8(@types/node@22.7.4) 100 | 101 | packages/shared: {} 102 | 103 | packages: 104 | 105 | '@alloc/quick-lru@5.2.0': 106 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 107 | engines: {node: '>=10'} 108 | 109 | '@ampproject/remapping@2.3.0': 110 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 111 | engines: {node: '>=6.0.0'} 112 | 113 | '@babel/code-frame@7.24.7': 114 | resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} 115 | engines: {node: '>=6.9.0'} 116 | 117 | '@babel/compat-data@7.25.4': 118 | resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} 119 | engines: {node: '>=6.9.0'} 120 | 121 | '@babel/core@7.25.2': 122 | resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} 123 | engines: {node: '>=6.9.0'} 124 | 125 | '@babel/generator@7.25.6': 126 | resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} 127 | engines: {node: '>=6.9.0'} 128 | 129 | '@babel/helper-compilation-targets@7.25.2': 130 | resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} 131 | engines: {node: '>=6.9.0'} 132 | 133 | '@babel/helper-module-imports@7.24.7': 134 | resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} 135 | engines: {node: '>=6.9.0'} 136 | 137 | '@babel/helper-module-transforms@7.25.2': 138 | resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} 139 | engines: {node: '>=6.9.0'} 140 | peerDependencies: 141 | '@babel/core': ^7.0.0 142 | 143 | '@babel/helper-plugin-utils@7.24.8': 144 | resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} 145 | engines: {node: '>=6.9.0'} 146 | 147 | '@babel/helper-simple-access@7.24.7': 148 | resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} 149 | engines: {node: '>=6.9.0'} 150 | 151 | '@babel/helper-string-parser@7.24.8': 152 | resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} 153 | engines: {node: '>=6.9.0'} 154 | 155 | '@babel/helper-validator-identifier@7.24.7': 156 | resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} 157 | engines: {node: '>=6.9.0'} 158 | 159 | '@babel/helper-validator-option@7.24.8': 160 | resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} 161 | engines: {node: '>=6.9.0'} 162 | 163 | '@babel/helpers@7.25.6': 164 | resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} 165 | engines: {node: '>=6.9.0'} 166 | 167 | '@babel/highlight@7.24.7': 168 | resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} 169 | engines: {node: '>=6.9.0'} 170 | 171 | '@babel/parser@7.25.6': 172 | resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} 173 | engines: {node: '>=6.0.0'} 174 | hasBin: true 175 | 176 | '@babel/plugin-transform-react-jsx-self@7.24.7': 177 | resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} 178 | engines: {node: '>=6.9.0'} 179 | peerDependencies: 180 | '@babel/core': ^7.0.0-0 181 | 182 | '@babel/plugin-transform-react-jsx-source@7.24.7': 183 | resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} 184 | engines: {node: '>=6.9.0'} 185 | peerDependencies: 186 | '@babel/core': ^7.0.0-0 187 | 188 | '@babel/runtime@7.25.6': 189 | resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} 190 | engines: {node: '>=6.9.0'} 191 | 192 | '@babel/template@7.25.0': 193 | resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} 194 | engines: {node: '>=6.9.0'} 195 | 196 | '@babel/traverse@7.25.6': 197 | resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} 198 | engines: {node: '>=6.9.0'} 199 | 200 | '@babel/types@7.25.6': 201 | resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} 202 | engines: {node: '>=6.9.0'} 203 | 204 | '@caido/plugin-manifest@0.1.3': 205 | resolution: {integrity: sha512-6PK/mIz2vIImgNFmc34Smiz86ifE+B962xz7uR4MPMxRaRlMlgfL8IvPkbpJyRaXb0mDDVqGzMB82HddpyGQSw==} 206 | 207 | '@caido/quickjs-types@0.7.0': 208 | resolution: {integrity: sha512-F+vORpADqFVjKoC8TDs5vnsP2BEogwgw067pGiwbezCBw/9BzSIuLN5zJRyhvV6Sdgyy4cT8M6oANDpD1ZqLYA==} 209 | 210 | '@caido/sdk-backend@0.41.0': 211 | resolution: {integrity: sha512-H35HvOZ7Kl1IIR6QsLaJHKheEYg2CMbY1TWRqA3NvRcv/AhgR6K70hFr28o9CqvU38eNcNGHQtgxU1xRBQ5Dug==} 212 | 213 | '@caido/sdk-frontend@0.41.0': 214 | resolution: {integrity: sha512-fX6QiDGR059zBiiC4V69ZATnZ44kcQQF1B+Pzga95Ze98c/5C6I7jHOsjNuflU87mxBmJB352YMWEmkWCf9yOA==} 215 | peerDependencies: 216 | '@codemirror/view': ^6.0.0 217 | 218 | '@caido/sdk-shared@0.1.0': 219 | resolution: {integrity: sha512-blffEE1ha74X/FKRC31HEh94b7gZ8riZqLDbD1Hpp7ihdlvaiQgap8i2Z6BppAaycks83+rUXTLLR6DxXNvdiQ==} 220 | 221 | '@codemirror/state@6.4.1': 222 | resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==} 223 | 224 | '@codemirror/view@6.34.1': 225 | resolution: {integrity: sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==} 226 | 227 | '@emotion/babel-plugin@11.12.0': 228 | resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} 229 | 230 | '@emotion/cache@11.13.1': 231 | resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==} 232 | 233 | '@emotion/hash@0.9.2': 234 | resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} 235 | 236 | '@emotion/is-prop-valid@1.3.1': 237 | resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} 238 | 239 | '@emotion/memoize@0.9.0': 240 | resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} 241 | 242 | '@emotion/react@11.13.3': 243 | resolution: {integrity: sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==} 244 | peerDependencies: 245 | '@types/react': '*' 246 | react: '>=16.8.0' 247 | peerDependenciesMeta: 248 | '@types/react': 249 | optional: true 250 | 251 | '@emotion/serialize@1.3.2': 252 | resolution: {integrity: sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==} 253 | 254 | '@emotion/sheet@1.4.0': 255 | resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} 256 | 257 | '@emotion/styled@11.13.0': 258 | resolution: {integrity: sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==} 259 | peerDependencies: 260 | '@emotion/react': ^11.0.0-rc.0 261 | '@types/react': '*' 262 | react: '>=16.8.0' 263 | peerDependenciesMeta: 264 | '@types/react': 265 | optional: true 266 | 267 | '@emotion/unitless@0.10.0': 268 | resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} 269 | 270 | '@emotion/use-insertion-effect-with-fallbacks@1.1.0': 271 | resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} 272 | peerDependencies: 273 | react: '>=16.8.0' 274 | 275 | '@emotion/utils@1.4.1': 276 | resolution: {integrity: sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==} 277 | 278 | '@emotion/weak-memoize@0.4.0': 279 | resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} 280 | 281 | '@esbuild/aix-ppc64@0.21.5': 282 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 283 | engines: {node: '>=12'} 284 | cpu: [ppc64] 285 | os: [aix] 286 | 287 | '@esbuild/android-arm64@0.21.5': 288 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 289 | engines: {node: '>=12'} 290 | cpu: [arm64] 291 | os: [android] 292 | 293 | '@esbuild/android-arm@0.21.5': 294 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 295 | engines: {node: '>=12'} 296 | cpu: [arm] 297 | os: [android] 298 | 299 | '@esbuild/android-x64@0.21.5': 300 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 301 | engines: {node: '>=12'} 302 | cpu: [x64] 303 | os: [android] 304 | 305 | '@esbuild/darwin-arm64@0.21.5': 306 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 307 | engines: {node: '>=12'} 308 | cpu: [arm64] 309 | os: [darwin] 310 | 311 | '@esbuild/darwin-x64@0.21.5': 312 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 313 | engines: {node: '>=12'} 314 | cpu: [x64] 315 | os: [darwin] 316 | 317 | '@esbuild/freebsd-arm64@0.21.5': 318 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 319 | engines: {node: '>=12'} 320 | cpu: [arm64] 321 | os: [freebsd] 322 | 323 | '@esbuild/freebsd-x64@0.21.5': 324 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 325 | engines: {node: '>=12'} 326 | cpu: [x64] 327 | os: [freebsd] 328 | 329 | '@esbuild/linux-arm64@0.21.5': 330 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 331 | engines: {node: '>=12'} 332 | cpu: [arm64] 333 | os: [linux] 334 | 335 | '@esbuild/linux-arm@0.21.5': 336 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 337 | engines: {node: '>=12'} 338 | cpu: [arm] 339 | os: [linux] 340 | 341 | '@esbuild/linux-ia32@0.21.5': 342 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 343 | engines: {node: '>=12'} 344 | cpu: [ia32] 345 | os: [linux] 346 | 347 | '@esbuild/linux-loong64@0.21.5': 348 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 349 | engines: {node: '>=12'} 350 | cpu: [loong64] 351 | os: [linux] 352 | 353 | '@esbuild/linux-mips64el@0.21.5': 354 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 355 | engines: {node: '>=12'} 356 | cpu: [mips64el] 357 | os: [linux] 358 | 359 | '@esbuild/linux-ppc64@0.21.5': 360 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 361 | engines: {node: '>=12'} 362 | cpu: [ppc64] 363 | os: [linux] 364 | 365 | '@esbuild/linux-riscv64@0.21.5': 366 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 367 | engines: {node: '>=12'} 368 | cpu: [riscv64] 369 | os: [linux] 370 | 371 | '@esbuild/linux-s390x@0.21.5': 372 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 373 | engines: {node: '>=12'} 374 | cpu: [s390x] 375 | os: [linux] 376 | 377 | '@esbuild/linux-x64@0.21.5': 378 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 379 | engines: {node: '>=12'} 380 | cpu: [x64] 381 | os: [linux] 382 | 383 | '@esbuild/netbsd-x64@0.21.5': 384 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 385 | engines: {node: '>=12'} 386 | cpu: [x64] 387 | os: [netbsd] 388 | 389 | '@esbuild/openbsd-x64@0.21.5': 390 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 391 | engines: {node: '>=12'} 392 | cpu: [x64] 393 | os: [openbsd] 394 | 395 | '@esbuild/sunos-x64@0.21.5': 396 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 397 | engines: {node: '>=12'} 398 | cpu: [x64] 399 | os: [sunos] 400 | 401 | '@esbuild/win32-arm64@0.21.5': 402 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 403 | engines: {node: '>=12'} 404 | cpu: [arm64] 405 | os: [win32] 406 | 407 | '@esbuild/win32-ia32@0.21.5': 408 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 409 | engines: {node: '>=12'} 410 | cpu: [ia32] 411 | os: [win32] 412 | 413 | '@esbuild/win32-x64@0.21.5': 414 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 415 | engines: {node: '>=12'} 416 | cpu: [x64] 417 | os: [win32] 418 | 419 | '@isaacs/cliui@8.0.2': 420 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 421 | engines: {node: '>=12'} 422 | 423 | '@jridgewell/gen-mapping@0.3.5': 424 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 425 | engines: {node: '>=6.0.0'} 426 | 427 | '@jridgewell/resolve-uri@3.1.2': 428 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 429 | engines: {node: '>=6.0.0'} 430 | 431 | '@jridgewell/set-array@1.2.1': 432 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 433 | engines: {node: '>=6.0.0'} 434 | 435 | '@jridgewell/sourcemap-codec@1.5.0': 436 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 437 | 438 | '@jridgewell/trace-mapping@0.3.25': 439 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 440 | 441 | '@juggle/resize-observer@3.4.0': 442 | resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} 443 | 444 | '@mui/core-downloads-tracker@6.1.1': 445 | resolution: {integrity: sha512-VdQC1tPIIcZAnf62L2M1eQif0x2vlKg3YK4kGYbtijSH4niEgI21GnstykW1vQIs+Bc6L+Hua2GATYVjilJ22A==} 446 | 447 | '@mui/icons-material@6.1.1': 448 | resolution: {integrity: sha512-sy/YKwcLPW8VcacNP2uWMYR9xyWuwO9NN9FXuGEU90bRshBXj8pdKk+joe3TCW7oviVS3zXLHlc94wQ0jNsQRQ==} 449 | engines: {node: '>=14.0.0'} 450 | peerDependencies: 451 | '@mui/material': ^6.1.1 452 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 453 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 454 | peerDependenciesMeta: 455 | '@types/react': 456 | optional: true 457 | 458 | '@mui/material@6.1.1': 459 | resolution: {integrity: sha512-b+eULldTqtqTCbN++2BtBWCir/1LwEYw+2mIlOt2GiEUh1EBBw4/wIukGKKNt3xrCZqRA80yLLkV6tF61Lq3cA==} 460 | engines: {node: '>=14.0.0'} 461 | peerDependencies: 462 | '@emotion/react': ^11.5.0 463 | '@emotion/styled': ^11.3.0 464 | '@mui/material-pigment-css': ^6.1.1 465 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 466 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 467 | react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 468 | peerDependenciesMeta: 469 | '@emotion/react': 470 | optional: true 471 | '@emotion/styled': 472 | optional: true 473 | '@mui/material-pigment-css': 474 | optional: true 475 | '@types/react': 476 | optional: true 477 | 478 | '@mui/private-theming@6.1.1': 479 | resolution: {integrity: sha512-JlrjIdhyZUtewtdAuUsvi3ZnO0YS49IW4Mfz19ZWTlQ0sDGga6LNPVwHClWr2/zJK2we2BQx9/i8M32rgKuzrg==} 480 | engines: {node: '>=14.0.0'} 481 | peerDependencies: 482 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 483 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 484 | peerDependenciesMeta: 485 | '@types/react': 486 | optional: true 487 | 488 | '@mui/styled-engine@6.1.1': 489 | resolution: {integrity: sha512-HJyIoMpFb11fnHuRtUILOXgq6vj4LhIlE8maG4SwP/W+E5sa7HFexhnB3vOMT7bKys4UKNxhobC8jwWxYilGsA==} 490 | engines: {node: '>=14.0.0'} 491 | peerDependencies: 492 | '@emotion/react': ^11.4.1 493 | '@emotion/styled': ^11.3.0 494 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 495 | peerDependenciesMeta: 496 | '@emotion/react': 497 | optional: true 498 | '@emotion/styled': 499 | optional: true 500 | 501 | '@mui/system@6.1.1': 502 | resolution: {integrity: sha512-PaYsCz2tUOcpu3T0okDEsSuP/yCDIj9JZ4Tox1JovRSKIjltHpXPsXZSGr3RiWdtM1MTQMFMCZzu0+CKbyy+Kw==} 503 | engines: {node: '>=14.0.0'} 504 | peerDependencies: 505 | '@emotion/react': ^11.5.0 506 | '@emotion/styled': ^11.3.0 507 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 508 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 509 | peerDependenciesMeta: 510 | '@emotion/react': 511 | optional: true 512 | '@emotion/styled': 513 | optional: true 514 | '@types/react': 515 | optional: true 516 | 517 | '@mui/types@7.2.17': 518 | resolution: {integrity: sha512-oyumoJgB6jDV8JFzRqjBo2daUuHpzDjoO/e3IrRhhHo/FxJlaVhET6mcNrKHUq2E+R+q3ql0qAtvQ4rfWHhAeQ==} 519 | peerDependencies: 520 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 521 | peerDependenciesMeta: 522 | '@types/react': 523 | optional: true 524 | 525 | '@mui/utils@6.1.1': 526 | resolution: {integrity: sha512-HlRrgdJSPbYDXPpoVMWZV8AE7WcFtAk13rWNWAEVWKSanzBBkymjz3km+Th/Srowsh4pf1fTSP1B0L116wQBYw==} 527 | engines: {node: '>=14.0.0'} 528 | peerDependencies: 529 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 530 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 531 | peerDependenciesMeta: 532 | '@types/react': 533 | optional: true 534 | 535 | '@nodelib/fs.scandir@2.1.5': 536 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 537 | engines: {node: '>= 8'} 538 | 539 | '@nodelib/fs.stat@2.0.5': 540 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 541 | engines: {node: '>= 8'} 542 | 543 | '@nodelib/fs.walk@1.2.8': 544 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 545 | engines: {node: '>= 8'} 546 | 547 | '@pkgjs/parseargs@0.11.0': 548 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 549 | engines: {node: '>=14'} 550 | 551 | '@popperjs/core@2.11.8': 552 | resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} 553 | 554 | '@rollup/rollup-android-arm-eabi@4.22.5': 555 | resolution: {integrity: sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww==} 556 | cpu: [arm] 557 | os: [android] 558 | 559 | '@rollup/rollup-android-arm64@4.22.5': 560 | resolution: {integrity: sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ==} 561 | cpu: [arm64] 562 | os: [android] 563 | 564 | '@rollup/rollup-darwin-arm64@4.22.5': 565 | resolution: {integrity: sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw==} 566 | cpu: [arm64] 567 | os: [darwin] 568 | 569 | '@rollup/rollup-darwin-x64@4.22.5': 570 | resolution: {integrity: sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg==} 571 | cpu: [x64] 572 | os: [darwin] 573 | 574 | '@rollup/rollup-linux-arm-gnueabihf@4.22.5': 575 | resolution: {integrity: sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw==} 576 | cpu: [arm] 577 | os: [linux] 578 | 579 | '@rollup/rollup-linux-arm-musleabihf@4.22.5': 580 | resolution: {integrity: sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ==} 581 | cpu: [arm] 582 | os: [linux] 583 | 584 | '@rollup/rollup-linux-arm64-gnu@4.22.5': 585 | resolution: {integrity: sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w==} 586 | cpu: [arm64] 587 | os: [linux] 588 | 589 | '@rollup/rollup-linux-arm64-musl@4.22.5': 590 | resolution: {integrity: sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw==} 591 | cpu: [arm64] 592 | os: [linux] 593 | 594 | '@rollup/rollup-linux-powerpc64le-gnu@4.22.5': 595 | resolution: {integrity: sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w==} 596 | cpu: [ppc64] 597 | os: [linux] 598 | 599 | '@rollup/rollup-linux-riscv64-gnu@4.22.5': 600 | resolution: {integrity: sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A==} 601 | cpu: [riscv64] 602 | os: [linux] 603 | 604 | '@rollup/rollup-linux-s390x-gnu@4.22.5': 605 | resolution: {integrity: sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ==} 606 | cpu: [s390x] 607 | os: [linux] 608 | 609 | '@rollup/rollup-linux-x64-gnu@4.22.5': 610 | resolution: {integrity: sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA==} 611 | cpu: [x64] 612 | os: [linux] 613 | 614 | '@rollup/rollup-linux-x64-musl@4.22.5': 615 | resolution: {integrity: sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g==} 616 | cpu: [x64] 617 | os: [linux] 618 | 619 | '@rollup/rollup-win32-arm64-msvc@4.22.5': 620 | resolution: {integrity: sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w==} 621 | cpu: [arm64] 622 | os: [win32] 623 | 624 | '@rollup/rollup-win32-ia32-msvc@4.22.5': 625 | resolution: {integrity: sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg==} 626 | cpu: [ia32] 627 | os: [win32] 628 | 629 | '@rollup/rollup-win32-x64-msvc@4.22.5': 630 | resolution: {integrity: sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ==} 631 | cpu: [x64] 632 | os: [win32] 633 | 634 | '@tanstack/query-core@5.59.0': 635 | resolution: {integrity: sha512-WGD8uIhX6/deH/tkZqPNcRyAhDUqs729bWKoByYHSogcshXfFbppOdTER5+qY7mFvu8KEFJwT0nxr8RfPTVh0Q==} 636 | 637 | '@tanstack/react-query@5.59.0': 638 | resolution: {integrity: sha512-YDXp3OORbYR+8HNQx+lf4F73NoiCmCcSvZvgxE29OifmQFk0sBlO26NWLHpcNERo92tVk3w+JQ53/vkcRUY1hA==} 639 | peerDependencies: 640 | react: ^18 || ^19 641 | 642 | '@types/babel__core@7.20.5': 643 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 644 | 645 | '@types/babel__generator@7.6.8': 646 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 647 | 648 | '@types/babel__template@7.4.4': 649 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 650 | 651 | '@types/babel__traverse@7.20.6': 652 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 653 | 654 | '@types/estree@1.0.6': 655 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 656 | 657 | '@types/node@22.7.4': 658 | resolution: {integrity: sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==} 659 | 660 | '@types/parse-json@4.0.2': 661 | resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} 662 | 663 | '@types/prop-types@15.7.13': 664 | resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} 665 | 666 | '@types/react-dom@18.3.0': 667 | resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} 668 | 669 | '@types/react-transition-group@4.4.11': 670 | resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} 671 | 672 | '@types/react@18.3.10': 673 | resolution: {integrity: sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==} 674 | 675 | '@vitejs/plugin-react@4.3.1': 676 | resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} 677 | engines: {node: ^14.18.0 || >=16.0.0} 678 | peerDependencies: 679 | vite: ^4.2.0 || ^5.0.0 680 | 681 | ajv@8.16.0: 682 | resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} 683 | 684 | allotment@1.20.2: 685 | resolution: {integrity: sha512-TaCuHfYNcsJS9EPk04M7TlG5Rl3vbAdHeAyrTE9D5vbpzV+wxnRoUrulDbfnzaQcPIZKpHJNixDOoZNuzliKEA==} 686 | peerDependencies: 687 | react: ^17.0.0 || ^18.0.0 688 | react-dom: ^17.0.0 || ^18.0.0 689 | 690 | ansi-regex@5.0.1: 691 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 692 | engines: {node: '>=8'} 693 | 694 | ansi-regex@6.1.0: 695 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 696 | engines: {node: '>=12'} 697 | 698 | ansi-styles@3.2.1: 699 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 700 | engines: {node: '>=4'} 701 | 702 | ansi-styles@4.3.0: 703 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 704 | engines: {node: '>=8'} 705 | 706 | ansi-styles@6.2.1: 707 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 708 | engines: {node: '>=12'} 709 | 710 | any-promise@1.3.0: 711 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 712 | 713 | anymatch@3.1.3: 714 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 715 | engines: {node: '>= 8'} 716 | 717 | arg@5.0.2: 718 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 719 | 720 | babel-plugin-macros@3.1.0: 721 | resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} 722 | engines: {node: '>=10', npm: '>=6'} 723 | 724 | balanced-match@1.0.2: 725 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 726 | 727 | binary-extensions@2.3.0: 728 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 729 | engines: {node: '>=8'} 730 | 731 | brace-expansion@2.0.1: 732 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 733 | 734 | braces@3.0.3: 735 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 736 | engines: {node: '>=8'} 737 | 738 | browserslist@4.24.0: 739 | resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} 740 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 741 | hasBin: true 742 | 743 | caido-material-ui@1.0.1: 744 | resolution: {integrity: sha512-RKnrnxjwvx+Mcv/2ogU6Y4gEFK+I5zX3UfjvN58tNym7+tdKVpyEwVQCLcqF/1BO5zs/QW6oIWANKi5MlA6ITQ==} 745 | 746 | callsites@3.1.0: 747 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 748 | engines: {node: '>=6'} 749 | 750 | camelcase-css@2.0.1: 751 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 752 | engines: {node: '>= 6'} 753 | 754 | caniuse-lite@1.0.30001664: 755 | resolution: {integrity: sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==} 756 | 757 | chalk@2.4.2: 758 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 759 | engines: {node: '>=4'} 760 | 761 | chokidar@3.6.0: 762 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 763 | engines: {node: '>= 8.10.0'} 764 | 765 | classnames@2.5.1: 766 | resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} 767 | 768 | clsx@2.1.1: 769 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 770 | engines: {node: '>=6'} 771 | 772 | color-convert@1.9.3: 773 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 774 | 775 | color-convert@2.0.1: 776 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 777 | engines: {node: '>=7.0.0'} 778 | 779 | color-name@1.1.3: 780 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 781 | 782 | color-name@1.1.4: 783 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 784 | 785 | commander@4.1.1: 786 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 787 | engines: {node: '>= 6'} 788 | 789 | convert-source-map@1.9.0: 790 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 791 | 792 | convert-source-map@2.0.0: 793 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 794 | 795 | core-util-is@1.0.3: 796 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 797 | 798 | cosmiconfig@7.1.0: 799 | resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} 800 | engines: {node: '>=10'} 801 | 802 | cross-spawn@7.0.3: 803 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 804 | engines: {node: '>= 8'} 805 | 806 | cssesc@3.0.0: 807 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 808 | engines: {node: '>=4'} 809 | hasBin: true 810 | 811 | csstype@3.1.3: 812 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 813 | 814 | debug@4.3.7: 815 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 816 | engines: {node: '>=6.0'} 817 | peerDependencies: 818 | supports-color: '*' 819 | peerDependenciesMeta: 820 | supports-color: 821 | optional: true 822 | 823 | didyoumean@1.2.2: 824 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 825 | 826 | dlv@1.1.3: 827 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 828 | 829 | dom-helpers@5.2.1: 830 | resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} 831 | 832 | eastasianwidth@0.2.0: 833 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 834 | 835 | electron-to-chromium@1.5.29: 836 | resolution: {integrity: sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==} 837 | 838 | emoji-regex@8.0.0: 839 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 840 | 841 | emoji-regex@9.2.2: 842 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 843 | 844 | error-ex@1.3.2: 845 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 846 | 847 | esbuild@0.21.5: 848 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 849 | engines: {node: '>=12'} 850 | hasBin: true 851 | 852 | escalade@3.2.0: 853 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 854 | engines: {node: '>=6'} 855 | 856 | escape-string-regexp@1.0.5: 857 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 858 | engines: {node: '>=0.8.0'} 859 | 860 | escape-string-regexp@4.0.0: 861 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 862 | engines: {node: '>=10'} 863 | 864 | eventemitter3@5.0.1: 865 | resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 866 | 867 | fast-deep-equal@3.1.3: 868 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 869 | 870 | fast-glob@3.3.2: 871 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 872 | engines: {node: '>=8.6.0'} 873 | 874 | fastq@1.17.1: 875 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 876 | 877 | fill-range@7.1.1: 878 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 879 | engines: {node: '>=8'} 880 | 881 | find-root@1.1.0: 882 | resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} 883 | 884 | foreground-child@3.3.0: 885 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 886 | engines: {node: '>=14'} 887 | 888 | fsevents@2.3.3: 889 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 890 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 891 | os: [darwin] 892 | 893 | function-bind@1.1.2: 894 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 895 | 896 | gensync@1.0.0-beta.2: 897 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 898 | engines: {node: '>=6.9.0'} 899 | 900 | glob-parent@5.1.2: 901 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 902 | engines: {node: '>= 6'} 903 | 904 | glob-parent@6.0.2: 905 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 906 | engines: {node: '>=10.13.0'} 907 | 908 | glob@10.4.5: 909 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 910 | hasBin: true 911 | 912 | globals@11.12.0: 913 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 914 | engines: {node: '>=4'} 915 | 916 | has-flag@3.0.0: 917 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 918 | engines: {node: '>=4'} 919 | 920 | hasown@2.0.2: 921 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 922 | engines: {node: '>= 0.4'} 923 | 924 | hoist-non-react-statics@3.3.2: 925 | resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} 926 | 927 | immediate@3.0.6: 928 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} 929 | 930 | import-fresh@3.3.0: 931 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 932 | engines: {node: '>=6'} 933 | 934 | inherits@2.0.4: 935 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 936 | 937 | is-arrayish@0.2.1: 938 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 939 | 940 | is-binary-path@2.1.0: 941 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 942 | engines: {node: '>=8'} 943 | 944 | is-core-module@2.15.1: 945 | resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 946 | engines: {node: '>= 0.4'} 947 | 948 | is-extglob@2.1.1: 949 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 950 | engines: {node: '>=0.10.0'} 951 | 952 | is-fullwidth-code-point@3.0.0: 953 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 954 | engines: {node: '>=8'} 955 | 956 | is-glob@4.0.3: 957 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 958 | engines: {node: '>=0.10.0'} 959 | 960 | is-number@7.0.0: 961 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 962 | engines: {node: '>=0.12.0'} 963 | 964 | isarray@1.0.0: 965 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 966 | 967 | isexe@2.0.0: 968 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 969 | 970 | jackspeak@3.4.3: 971 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 972 | 973 | jiti@1.21.6: 974 | resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} 975 | hasBin: true 976 | 977 | js-tokens@4.0.0: 978 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 979 | 980 | jsesc@2.5.2: 981 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 982 | engines: {node: '>=4'} 983 | hasBin: true 984 | 985 | json-parse-even-better-errors@2.3.1: 986 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 987 | 988 | json-schema-traverse@1.0.0: 989 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 990 | 991 | json5@2.2.3: 992 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 993 | engines: {node: '>=6'} 994 | hasBin: true 995 | 996 | jszip@3.10.1: 997 | resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} 998 | 999 | lie@3.3.0: 1000 | resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} 1001 | 1002 | lilconfig@2.1.0: 1003 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1004 | engines: {node: '>=10'} 1005 | 1006 | lilconfig@3.1.2: 1007 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} 1008 | engines: {node: '>=14'} 1009 | 1010 | lines-and-columns@1.2.4: 1011 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1012 | 1013 | lodash.clamp@4.0.3: 1014 | resolution: {integrity: sha512-HvzRFWjtcguTW7yd8NJBshuNaCa8aqNFtnswdT7f/cMd/1YKy5Zzoq4W/Oxvnx9l7aeY258uSdDfM793+eLsVg==} 1015 | 1016 | lodash.debounce@4.0.8: 1017 | resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} 1018 | 1019 | lodash.isequal@4.5.0: 1020 | resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} 1021 | 1022 | loose-envify@1.4.0: 1023 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1024 | hasBin: true 1025 | 1026 | lru-cache@10.4.3: 1027 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1028 | 1029 | lru-cache@5.1.1: 1030 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1031 | 1032 | merge2@1.4.1: 1033 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1034 | engines: {node: '>= 8'} 1035 | 1036 | micromatch@4.0.8: 1037 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1038 | engines: {node: '>=8.6'} 1039 | 1040 | minimatch@9.0.5: 1041 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1042 | engines: {node: '>=16 || 14 >=14.17'} 1043 | 1044 | minipass@7.1.2: 1045 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1046 | engines: {node: '>=16 || 14 >=14.17'} 1047 | 1048 | ms@2.1.3: 1049 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1050 | 1051 | mz@2.7.0: 1052 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1053 | 1054 | nanoid@3.3.7: 1055 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1056 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1057 | hasBin: true 1058 | 1059 | node-releases@2.0.18: 1060 | resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} 1061 | 1062 | normalize-path@3.0.0: 1063 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1064 | engines: {node: '>=0.10.0'} 1065 | 1066 | object-assign@4.1.1: 1067 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1068 | engines: {node: '>=0.10.0'} 1069 | 1070 | object-hash@3.0.0: 1071 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1072 | engines: {node: '>= 6'} 1073 | 1074 | package-json-from-dist@1.0.1: 1075 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1076 | 1077 | pako@1.0.11: 1078 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 1079 | 1080 | parent-module@1.0.1: 1081 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1082 | engines: {node: '>=6'} 1083 | 1084 | parse-json@5.2.0: 1085 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1086 | engines: {node: '>=8'} 1087 | 1088 | path-key@3.1.1: 1089 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1090 | engines: {node: '>=8'} 1091 | 1092 | path-parse@1.0.7: 1093 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1094 | 1095 | path-scurry@1.11.1: 1096 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1097 | engines: {node: '>=16 || 14 >=14.18'} 1098 | 1099 | path-type@4.0.0: 1100 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1101 | engines: {node: '>=8'} 1102 | 1103 | picocolors@1.1.0: 1104 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} 1105 | 1106 | picomatch@2.3.1: 1107 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1108 | engines: {node: '>=8.6'} 1109 | 1110 | pify@2.3.0: 1111 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1112 | engines: {node: '>=0.10.0'} 1113 | 1114 | pirates@4.0.6: 1115 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1116 | engines: {node: '>= 6'} 1117 | 1118 | postcss-import@15.1.0: 1119 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1120 | engines: {node: '>=14.0.0'} 1121 | peerDependencies: 1122 | postcss: ^8.0.0 1123 | 1124 | postcss-js@4.0.1: 1125 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1126 | engines: {node: ^12 || ^14 || >= 16} 1127 | peerDependencies: 1128 | postcss: ^8.4.21 1129 | 1130 | postcss-load-config@4.0.2: 1131 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 1132 | engines: {node: '>= 14'} 1133 | peerDependencies: 1134 | postcss: '>=8.0.9' 1135 | ts-node: '>=9.0.0' 1136 | peerDependenciesMeta: 1137 | postcss: 1138 | optional: true 1139 | ts-node: 1140 | optional: true 1141 | 1142 | postcss-nested@6.2.0: 1143 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 1144 | engines: {node: '>=12.0'} 1145 | peerDependencies: 1146 | postcss: ^8.2.14 1147 | 1148 | postcss-selector-parser@6.1.2: 1149 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 1150 | engines: {node: '>=4'} 1151 | 1152 | postcss-value-parser@4.2.0: 1153 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1154 | 1155 | postcss@8.4.47: 1156 | resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} 1157 | engines: {node: ^10 || ^12 || >=14} 1158 | 1159 | prettier@3.3.2: 1160 | resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} 1161 | engines: {node: '>=14'} 1162 | hasBin: true 1163 | 1164 | process-nextick-args@2.0.1: 1165 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 1166 | 1167 | prop-types@15.8.1: 1168 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1169 | 1170 | punycode@2.3.1: 1171 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1172 | engines: {node: '>=6'} 1173 | 1174 | queue-microtask@1.2.3: 1175 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1176 | 1177 | react-dom@18.3.1: 1178 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1179 | peerDependencies: 1180 | react: ^18.3.1 1181 | 1182 | react-is@16.13.1: 1183 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1184 | 1185 | react-is@18.3.1: 1186 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 1187 | 1188 | react-refresh@0.14.2: 1189 | resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} 1190 | engines: {node: '>=0.10.0'} 1191 | 1192 | react-transition-group@4.4.5: 1193 | resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} 1194 | peerDependencies: 1195 | react: '>=16.6.0' 1196 | react-dom: '>=16.6.0' 1197 | 1198 | react@18.3.1: 1199 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1200 | engines: {node: '>=0.10.0'} 1201 | 1202 | read-cache@1.0.0: 1203 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1204 | 1205 | readable-stream@2.3.8: 1206 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 1207 | 1208 | readdirp@3.6.0: 1209 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1210 | engines: {node: '>=8.10.0'} 1211 | 1212 | regenerator-runtime@0.14.1: 1213 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1214 | 1215 | require-from-string@2.0.2: 1216 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 1217 | engines: {node: '>=0.10.0'} 1218 | 1219 | resolve-from@4.0.0: 1220 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1221 | engines: {node: '>=4'} 1222 | 1223 | resolve@1.22.8: 1224 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1225 | hasBin: true 1226 | 1227 | reusify@1.0.4: 1228 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1229 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1230 | 1231 | rollup@4.22.5: 1232 | resolution: {integrity: sha512-WoinX7GeQOFMGznEcWA1WrTQCd/tpEbMkc3nuMs9BT0CPjMdSjPMTVClwWd4pgSQwJdP65SK9mTCNvItlr5o7w==} 1233 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1234 | hasBin: true 1235 | 1236 | run-parallel@1.2.0: 1237 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1238 | 1239 | safe-buffer@5.1.2: 1240 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1241 | 1242 | scheduler@0.23.2: 1243 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1244 | 1245 | semver@6.3.1: 1246 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1247 | hasBin: true 1248 | 1249 | setimmediate@1.0.5: 1250 | resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} 1251 | 1252 | shebang-command@2.0.0: 1253 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1254 | engines: {node: '>=8'} 1255 | 1256 | shebang-regex@3.0.0: 1257 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1258 | engines: {node: '>=8'} 1259 | 1260 | signal-exit@4.1.0: 1261 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1262 | engines: {node: '>=14'} 1263 | 1264 | source-map-js@1.2.1: 1265 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1266 | engines: {node: '>=0.10.0'} 1267 | 1268 | source-map@0.5.7: 1269 | resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} 1270 | engines: {node: '>=0.10.0'} 1271 | 1272 | string-width@4.2.3: 1273 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1274 | engines: {node: '>=8'} 1275 | 1276 | string-width@5.1.2: 1277 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1278 | engines: {node: '>=12'} 1279 | 1280 | string_decoder@1.1.1: 1281 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 1282 | 1283 | strip-ansi@6.0.1: 1284 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1285 | engines: {node: '>=8'} 1286 | 1287 | strip-ansi@7.1.0: 1288 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1289 | engines: {node: '>=12'} 1290 | 1291 | style-mod@4.1.2: 1292 | resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} 1293 | 1294 | stylis@4.2.0: 1295 | resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} 1296 | 1297 | sucrase@3.35.0: 1298 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1299 | engines: {node: '>=16 || 14 >=14.17'} 1300 | hasBin: true 1301 | 1302 | supports-color@5.5.0: 1303 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1304 | engines: {node: '>=4'} 1305 | 1306 | supports-preserve-symlinks-flag@1.0.0: 1307 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1308 | engines: {node: '>= 0.4'} 1309 | 1310 | tailwindcss@3.4.13: 1311 | resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==} 1312 | engines: {node: '>=14.0.0'} 1313 | hasBin: true 1314 | 1315 | thenify-all@1.6.0: 1316 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1317 | engines: {node: '>=0.8'} 1318 | 1319 | thenify@3.3.1: 1320 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1321 | 1322 | to-fast-properties@2.0.0: 1323 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1324 | engines: {node: '>=4'} 1325 | 1326 | to-regex-range@5.0.1: 1327 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1328 | engines: {node: '>=8.0'} 1329 | 1330 | ts-interface-checker@0.1.13: 1331 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1332 | 1333 | typescript@5.6.2: 1334 | resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} 1335 | engines: {node: '>=14.17'} 1336 | hasBin: true 1337 | 1338 | undici-types@6.19.8: 1339 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 1340 | 1341 | update-browserslist-db@1.1.1: 1342 | resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} 1343 | hasBin: true 1344 | peerDependencies: 1345 | browserslist: '>= 4.21.0' 1346 | 1347 | uri-js@4.4.1: 1348 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1349 | 1350 | use-resize-observer@9.1.0: 1351 | resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} 1352 | peerDependencies: 1353 | react: 16.8.0 - 18 1354 | react-dom: 16.8.0 - 18 1355 | 1356 | util-deprecate@1.0.2: 1357 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1358 | 1359 | vite@5.4.8: 1360 | resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} 1361 | engines: {node: ^18.0.0 || >=20.0.0} 1362 | hasBin: true 1363 | peerDependencies: 1364 | '@types/node': ^18.0.0 || >=20.0.0 1365 | less: '*' 1366 | lightningcss: ^1.21.0 1367 | sass: '*' 1368 | sass-embedded: '*' 1369 | stylus: '*' 1370 | sugarss: '*' 1371 | terser: ^5.4.0 1372 | peerDependenciesMeta: 1373 | '@types/node': 1374 | optional: true 1375 | less: 1376 | optional: true 1377 | lightningcss: 1378 | optional: true 1379 | sass: 1380 | optional: true 1381 | sass-embedded: 1382 | optional: true 1383 | stylus: 1384 | optional: true 1385 | sugarss: 1386 | optional: true 1387 | terser: 1388 | optional: true 1389 | 1390 | w3c-keyname@2.2.8: 1391 | resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} 1392 | 1393 | which@2.0.2: 1394 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1395 | engines: {node: '>= 8'} 1396 | hasBin: true 1397 | 1398 | wrap-ansi@7.0.0: 1399 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1400 | engines: {node: '>=10'} 1401 | 1402 | wrap-ansi@8.1.0: 1403 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1404 | engines: {node: '>=12'} 1405 | 1406 | yallist@3.1.1: 1407 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1408 | 1409 | yaml@1.10.2: 1410 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1411 | engines: {node: '>= 6'} 1412 | 1413 | yaml@2.5.1: 1414 | resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} 1415 | engines: {node: '>= 14'} 1416 | hasBin: true 1417 | 1418 | zustand@5.0.0-rc.2: 1419 | resolution: {integrity: sha512-o2Nwuvnk8vQBX7CcHL8WfFkZNJdxB/VKeWw0tNglw8p4cypsZ3tRT7rTRTDNeUPFS0qaMBRSKe+fVwL5xpcE3A==} 1420 | engines: {node: '>=12.20.0'} 1421 | peerDependencies: 1422 | '@types/react': '>=18.0.0' 1423 | immer: '>=9.0.6' 1424 | react: '>=18.0.0' 1425 | use-sync-external-store: '>=1.2.0' 1426 | peerDependenciesMeta: 1427 | '@types/react': 1428 | optional: true 1429 | immer: 1430 | optional: true 1431 | react: 1432 | optional: true 1433 | use-sync-external-store: 1434 | optional: true 1435 | 1436 | snapshots: 1437 | 1438 | '@alloc/quick-lru@5.2.0': {} 1439 | 1440 | '@ampproject/remapping@2.3.0': 1441 | dependencies: 1442 | '@jridgewell/gen-mapping': 0.3.5 1443 | '@jridgewell/trace-mapping': 0.3.25 1444 | 1445 | '@babel/code-frame@7.24.7': 1446 | dependencies: 1447 | '@babel/highlight': 7.24.7 1448 | picocolors: 1.1.0 1449 | 1450 | '@babel/compat-data@7.25.4': {} 1451 | 1452 | '@babel/core@7.25.2': 1453 | dependencies: 1454 | '@ampproject/remapping': 2.3.0 1455 | '@babel/code-frame': 7.24.7 1456 | '@babel/generator': 7.25.6 1457 | '@babel/helper-compilation-targets': 7.25.2 1458 | '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) 1459 | '@babel/helpers': 7.25.6 1460 | '@babel/parser': 7.25.6 1461 | '@babel/template': 7.25.0 1462 | '@babel/traverse': 7.25.6 1463 | '@babel/types': 7.25.6 1464 | convert-source-map: 2.0.0 1465 | debug: 4.3.7 1466 | gensync: 1.0.0-beta.2 1467 | json5: 2.2.3 1468 | semver: 6.3.1 1469 | transitivePeerDependencies: 1470 | - supports-color 1471 | 1472 | '@babel/generator@7.25.6': 1473 | dependencies: 1474 | '@babel/types': 7.25.6 1475 | '@jridgewell/gen-mapping': 0.3.5 1476 | '@jridgewell/trace-mapping': 0.3.25 1477 | jsesc: 2.5.2 1478 | 1479 | '@babel/helper-compilation-targets@7.25.2': 1480 | dependencies: 1481 | '@babel/compat-data': 7.25.4 1482 | '@babel/helper-validator-option': 7.24.8 1483 | browserslist: 4.24.0 1484 | lru-cache: 5.1.1 1485 | semver: 6.3.1 1486 | 1487 | '@babel/helper-module-imports@7.24.7': 1488 | dependencies: 1489 | '@babel/traverse': 7.25.6 1490 | '@babel/types': 7.25.6 1491 | transitivePeerDependencies: 1492 | - supports-color 1493 | 1494 | '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': 1495 | dependencies: 1496 | '@babel/core': 7.25.2 1497 | '@babel/helper-module-imports': 7.24.7 1498 | '@babel/helper-simple-access': 7.24.7 1499 | '@babel/helper-validator-identifier': 7.24.7 1500 | '@babel/traverse': 7.25.6 1501 | transitivePeerDependencies: 1502 | - supports-color 1503 | 1504 | '@babel/helper-plugin-utils@7.24.8': {} 1505 | 1506 | '@babel/helper-simple-access@7.24.7': 1507 | dependencies: 1508 | '@babel/traverse': 7.25.6 1509 | '@babel/types': 7.25.6 1510 | transitivePeerDependencies: 1511 | - supports-color 1512 | 1513 | '@babel/helper-string-parser@7.24.8': {} 1514 | 1515 | '@babel/helper-validator-identifier@7.24.7': {} 1516 | 1517 | '@babel/helper-validator-option@7.24.8': {} 1518 | 1519 | '@babel/helpers@7.25.6': 1520 | dependencies: 1521 | '@babel/template': 7.25.0 1522 | '@babel/types': 7.25.6 1523 | 1524 | '@babel/highlight@7.24.7': 1525 | dependencies: 1526 | '@babel/helper-validator-identifier': 7.24.7 1527 | chalk: 2.4.2 1528 | js-tokens: 4.0.0 1529 | picocolors: 1.1.0 1530 | 1531 | '@babel/parser@7.25.6': 1532 | dependencies: 1533 | '@babel/types': 7.25.6 1534 | 1535 | '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': 1536 | dependencies: 1537 | '@babel/core': 7.25.2 1538 | '@babel/helper-plugin-utils': 7.24.8 1539 | 1540 | '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': 1541 | dependencies: 1542 | '@babel/core': 7.25.2 1543 | '@babel/helper-plugin-utils': 7.24.8 1544 | 1545 | '@babel/runtime@7.25.6': 1546 | dependencies: 1547 | regenerator-runtime: 0.14.1 1548 | 1549 | '@babel/template@7.25.0': 1550 | dependencies: 1551 | '@babel/code-frame': 7.24.7 1552 | '@babel/parser': 7.25.6 1553 | '@babel/types': 7.25.6 1554 | 1555 | '@babel/traverse@7.25.6': 1556 | dependencies: 1557 | '@babel/code-frame': 7.24.7 1558 | '@babel/generator': 7.25.6 1559 | '@babel/parser': 7.25.6 1560 | '@babel/template': 7.25.0 1561 | '@babel/types': 7.25.6 1562 | debug: 4.3.7 1563 | globals: 11.12.0 1564 | transitivePeerDependencies: 1565 | - supports-color 1566 | 1567 | '@babel/types@7.25.6': 1568 | dependencies: 1569 | '@babel/helper-string-parser': 7.24.8 1570 | '@babel/helper-validator-identifier': 7.24.7 1571 | to-fast-properties: 2.0.0 1572 | 1573 | '@caido/plugin-manifest@0.1.3': 1574 | dependencies: 1575 | ajv: 8.16.0 1576 | 1577 | '@caido/quickjs-types@0.7.0': 1578 | dependencies: 1579 | prettier: 3.3.2 1580 | 1581 | '@caido/sdk-backend@0.41.0': 1582 | dependencies: 1583 | '@caido/quickjs-types': 0.7.0 1584 | '@caido/sdk-shared': 0.1.0 1585 | 1586 | '@caido/sdk-frontend@0.41.0(@codemirror/view@6.34.1)': 1587 | dependencies: 1588 | '@codemirror/view': 6.34.1 1589 | 1590 | '@caido/sdk-shared@0.1.0': {} 1591 | 1592 | '@codemirror/state@6.4.1': {} 1593 | 1594 | '@codemirror/view@6.34.1': 1595 | dependencies: 1596 | '@codemirror/state': 6.4.1 1597 | style-mod: 4.1.2 1598 | w3c-keyname: 2.2.8 1599 | 1600 | '@emotion/babel-plugin@11.12.0': 1601 | dependencies: 1602 | '@babel/helper-module-imports': 7.24.7 1603 | '@babel/runtime': 7.25.6 1604 | '@emotion/hash': 0.9.2 1605 | '@emotion/memoize': 0.9.0 1606 | '@emotion/serialize': 1.3.2 1607 | babel-plugin-macros: 3.1.0 1608 | convert-source-map: 1.9.0 1609 | escape-string-regexp: 4.0.0 1610 | find-root: 1.1.0 1611 | source-map: 0.5.7 1612 | stylis: 4.2.0 1613 | transitivePeerDependencies: 1614 | - supports-color 1615 | 1616 | '@emotion/cache@11.13.1': 1617 | dependencies: 1618 | '@emotion/memoize': 0.9.0 1619 | '@emotion/sheet': 1.4.0 1620 | '@emotion/utils': 1.4.1 1621 | '@emotion/weak-memoize': 0.4.0 1622 | stylis: 4.2.0 1623 | 1624 | '@emotion/hash@0.9.2': {} 1625 | 1626 | '@emotion/is-prop-valid@1.3.1': 1627 | dependencies: 1628 | '@emotion/memoize': 0.9.0 1629 | 1630 | '@emotion/memoize@0.9.0': {} 1631 | 1632 | '@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1)': 1633 | dependencies: 1634 | '@babel/runtime': 7.25.6 1635 | '@emotion/babel-plugin': 11.12.0 1636 | '@emotion/cache': 11.13.1 1637 | '@emotion/serialize': 1.3.2 1638 | '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) 1639 | '@emotion/utils': 1.4.1 1640 | '@emotion/weak-memoize': 0.4.0 1641 | hoist-non-react-statics: 3.3.2 1642 | react: 18.3.1 1643 | optionalDependencies: 1644 | '@types/react': 18.3.10 1645 | transitivePeerDependencies: 1646 | - supports-color 1647 | 1648 | '@emotion/serialize@1.3.2': 1649 | dependencies: 1650 | '@emotion/hash': 0.9.2 1651 | '@emotion/memoize': 0.9.0 1652 | '@emotion/unitless': 0.10.0 1653 | '@emotion/utils': 1.4.1 1654 | csstype: 3.1.3 1655 | 1656 | '@emotion/sheet@1.4.0': {} 1657 | 1658 | '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1)': 1659 | dependencies: 1660 | '@babel/runtime': 7.25.6 1661 | '@emotion/babel-plugin': 11.12.0 1662 | '@emotion/is-prop-valid': 1.3.1 1663 | '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) 1664 | '@emotion/serialize': 1.3.2 1665 | '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) 1666 | '@emotion/utils': 1.4.1 1667 | react: 18.3.1 1668 | optionalDependencies: 1669 | '@types/react': 18.3.10 1670 | transitivePeerDependencies: 1671 | - supports-color 1672 | 1673 | '@emotion/unitless@0.10.0': {} 1674 | 1675 | '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.3.1)': 1676 | dependencies: 1677 | react: 18.3.1 1678 | 1679 | '@emotion/utils@1.4.1': {} 1680 | 1681 | '@emotion/weak-memoize@0.4.0': {} 1682 | 1683 | '@esbuild/aix-ppc64@0.21.5': 1684 | optional: true 1685 | 1686 | '@esbuild/android-arm64@0.21.5': 1687 | optional: true 1688 | 1689 | '@esbuild/android-arm@0.21.5': 1690 | optional: true 1691 | 1692 | '@esbuild/android-x64@0.21.5': 1693 | optional: true 1694 | 1695 | '@esbuild/darwin-arm64@0.21.5': 1696 | optional: true 1697 | 1698 | '@esbuild/darwin-x64@0.21.5': 1699 | optional: true 1700 | 1701 | '@esbuild/freebsd-arm64@0.21.5': 1702 | optional: true 1703 | 1704 | '@esbuild/freebsd-x64@0.21.5': 1705 | optional: true 1706 | 1707 | '@esbuild/linux-arm64@0.21.5': 1708 | optional: true 1709 | 1710 | '@esbuild/linux-arm@0.21.5': 1711 | optional: true 1712 | 1713 | '@esbuild/linux-ia32@0.21.5': 1714 | optional: true 1715 | 1716 | '@esbuild/linux-loong64@0.21.5': 1717 | optional: true 1718 | 1719 | '@esbuild/linux-mips64el@0.21.5': 1720 | optional: true 1721 | 1722 | '@esbuild/linux-ppc64@0.21.5': 1723 | optional: true 1724 | 1725 | '@esbuild/linux-riscv64@0.21.5': 1726 | optional: true 1727 | 1728 | '@esbuild/linux-s390x@0.21.5': 1729 | optional: true 1730 | 1731 | '@esbuild/linux-x64@0.21.5': 1732 | optional: true 1733 | 1734 | '@esbuild/netbsd-x64@0.21.5': 1735 | optional: true 1736 | 1737 | '@esbuild/openbsd-x64@0.21.5': 1738 | optional: true 1739 | 1740 | '@esbuild/sunos-x64@0.21.5': 1741 | optional: true 1742 | 1743 | '@esbuild/win32-arm64@0.21.5': 1744 | optional: true 1745 | 1746 | '@esbuild/win32-ia32@0.21.5': 1747 | optional: true 1748 | 1749 | '@esbuild/win32-x64@0.21.5': 1750 | optional: true 1751 | 1752 | '@isaacs/cliui@8.0.2': 1753 | dependencies: 1754 | string-width: 5.1.2 1755 | string-width-cjs: string-width@4.2.3 1756 | strip-ansi: 7.1.0 1757 | strip-ansi-cjs: strip-ansi@6.0.1 1758 | wrap-ansi: 8.1.0 1759 | wrap-ansi-cjs: wrap-ansi@7.0.0 1760 | 1761 | '@jridgewell/gen-mapping@0.3.5': 1762 | dependencies: 1763 | '@jridgewell/set-array': 1.2.1 1764 | '@jridgewell/sourcemap-codec': 1.5.0 1765 | '@jridgewell/trace-mapping': 0.3.25 1766 | 1767 | '@jridgewell/resolve-uri@3.1.2': {} 1768 | 1769 | '@jridgewell/set-array@1.2.1': {} 1770 | 1771 | '@jridgewell/sourcemap-codec@1.5.0': {} 1772 | 1773 | '@jridgewell/trace-mapping@0.3.25': 1774 | dependencies: 1775 | '@jridgewell/resolve-uri': 3.1.2 1776 | '@jridgewell/sourcemap-codec': 1.5.0 1777 | 1778 | '@juggle/resize-observer@3.4.0': {} 1779 | 1780 | '@mui/core-downloads-tracker@6.1.1': {} 1781 | 1782 | '@mui/icons-material@6.1.1(@mui/material@6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.10)(react@18.3.1)': 1783 | dependencies: 1784 | '@babel/runtime': 7.25.6 1785 | '@mui/material': 6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1786 | react: 18.3.1 1787 | optionalDependencies: 1788 | '@types/react': 18.3.10 1789 | 1790 | '@mui/material@6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1791 | dependencies: 1792 | '@babel/runtime': 7.25.6 1793 | '@mui/core-downloads-tracker': 6.1.1 1794 | '@mui/system': 6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) 1795 | '@mui/types': 7.2.17(@types/react@18.3.10) 1796 | '@mui/utils': 6.1.1(@types/react@18.3.10)(react@18.3.1) 1797 | '@popperjs/core': 2.11.8 1798 | '@types/react-transition-group': 4.4.11 1799 | clsx: 2.1.1 1800 | csstype: 3.1.3 1801 | prop-types: 15.8.1 1802 | react: 18.3.1 1803 | react-dom: 18.3.1(react@18.3.1) 1804 | react-is: 18.3.1 1805 | react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1806 | optionalDependencies: 1807 | '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) 1808 | '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) 1809 | '@types/react': 18.3.10 1810 | 1811 | '@mui/private-theming@6.1.1(@types/react@18.3.10)(react@18.3.1)': 1812 | dependencies: 1813 | '@babel/runtime': 7.25.6 1814 | '@mui/utils': 6.1.1(@types/react@18.3.10)(react@18.3.1) 1815 | prop-types: 15.8.1 1816 | react: 18.3.1 1817 | optionalDependencies: 1818 | '@types/react': 18.3.10 1819 | 1820 | '@mui/styled-engine@6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1)': 1821 | dependencies: 1822 | '@babel/runtime': 7.25.6 1823 | '@emotion/cache': 11.13.1 1824 | '@emotion/sheet': 1.4.0 1825 | csstype: 3.1.3 1826 | prop-types: 15.8.1 1827 | react: 18.3.1 1828 | optionalDependencies: 1829 | '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) 1830 | '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) 1831 | 1832 | '@mui/system@6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1)': 1833 | dependencies: 1834 | '@babel/runtime': 7.25.6 1835 | '@mui/private-theming': 6.1.1(@types/react@18.3.10)(react@18.3.1) 1836 | '@mui/styled-engine': 6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) 1837 | '@mui/types': 7.2.17(@types/react@18.3.10) 1838 | '@mui/utils': 6.1.1(@types/react@18.3.10)(react@18.3.1) 1839 | clsx: 2.1.1 1840 | csstype: 3.1.3 1841 | prop-types: 15.8.1 1842 | react: 18.3.1 1843 | optionalDependencies: 1844 | '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) 1845 | '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) 1846 | '@types/react': 18.3.10 1847 | 1848 | '@mui/types@7.2.17(@types/react@18.3.10)': 1849 | optionalDependencies: 1850 | '@types/react': 18.3.10 1851 | 1852 | '@mui/utils@6.1.1(@types/react@18.3.10)(react@18.3.1)': 1853 | dependencies: 1854 | '@babel/runtime': 7.25.6 1855 | '@mui/types': 7.2.17(@types/react@18.3.10) 1856 | '@types/prop-types': 15.7.13 1857 | clsx: 2.1.1 1858 | prop-types: 15.8.1 1859 | react: 18.3.1 1860 | react-is: 18.3.1 1861 | optionalDependencies: 1862 | '@types/react': 18.3.10 1863 | 1864 | '@nodelib/fs.scandir@2.1.5': 1865 | dependencies: 1866 | '@nodelib/fs.stat': 2.0.5 1867 | run-parallel: 1.2.0 1868 | 1869 | '@nodelib/fs.stat@2.0.5': {} 1870 | 1871 | '@nodelib/fs.walk@1.2.8': 1872 | dependencies: 1873 | '@nodelib/fs.scandir': 2.1.5 1874 | fastq: 1.17.1 1875 | 1876 | '@pkgjs/parseargs@0.11.0': 1877 | optional: true 1878 | 1879 | '@popperjs/core@2.11.8': {} 1880 | 1881 | '@rollup/rollup-android-arm-eabi@4.22.5': 1882 | optional: true 1883 | 1884 | '@rollup/rollup-android-arm64@4.22.5': 1885 | optional: true 1886 | 1887 | '@rollup/rollup-darwin-arm64@4.22.5': 1888 | optional: true 1889 | 1890 | '@rollup/rollup-darwin-x64@4.22.5': 1891 | optional: true 1892 | 1893 | '@rollup/rollup-linux-arm-gnueabihf@4.22.5': 1894 | optional: true 1895 | 1896 | '@rollup/rollup-linux-arm-musleabihf@4.22.5': 1897 | optional: true 1898 | 1899 | '@rollup/rollup-linux-arm64-gnu@4.22.5': 1900 | optional: true 1901 | 1902 | '@rollup/rollup-linux-arm64-musl@4.22.5': 1903 | optional: true 1904 | 1905 | '@rollup/rollup-linux-powerpc64le-gnu@4.22.5': 1906 | optional: true 1907 | 1908 | '@rollup/rollup-linux-riscv64-gnu@4.22.5': 1909 | optional: true 1910 | 1911 | '@rollup/rollup-linux-s390x-gnu@4.22.5': 1912 | optional: true 1913 | 1914 | '@rollup/rollup-linux-x64-gnu@4.22.5': 1915 | optional: true 1916 | 1917 | '@rollup/rollup-linux-x64-musl@4.22.5': 1918 | optional: true 1919 | 1920 | '@rollup/rollup-win32-arm64-msvc@4.22.5': 1921 | optional: true 1922 | 1923 | '@rollup/rollup-win32-ia32-msvc@4.22.5': 1924 | optional: true 1925 | 1926 | '@rollup/rollup-win32-x64-msvc@4.22.5': 1927 | optional: true 1928 | 1929 | '@tanstack/query-core@5.59.0': {} 1930 | 1931 | '@tanstack/react-query@5.59.0(react@18.3.1)': 1932 | dependencies: 1933 | '@tanstack/query-core': 5.59.0 1934 | react: 18.3.1 1935 | 1936 | '@types/babel__core@7.20.5': 1937 | dependencies: 1938 | '@babel/parser': 7.25.6 1939 | '@babel/types': 7.25.6 1940 | '@types/babel__generator': 7.6.8 1941 | '@types/babel__template': 7.4.4 1942 | '@types/babel__traverse': 7.20.6 1943 | 1944 | '@types/babel__generator@7.6.8': 1945 | dependencies: 1946 | '@babel/types': 7.25.6 1947 | 1948 | '@types/babel__template@7.4.4': 1949 | dependencies: 1950 | '@babel/parser': 7.25.6 1951 | '@babel/types': 7.25.6 1952 | 1953 | '@types/babel__traverse@7.20.6': 1954 | dependencies: 1955 | '@babel/types': 7.25.6 1956 | 1957 | '@types/estree@1.0.6': {} 1958 | 1959 | '@types/node@22.7.4': 1960 | dependencies: 1961 | undici-types: 6.19.8 1962 | 1963 | '@types/parse-json@4.0.2': {} 1964 | 1965 | '@types/prop-types@15.7.13': {} 1966 | 1967 | '@types/react-dom@18.3.0': 1968 | dependencies: 1969 | '@types/react': 18.3.10 1970 | 1971 | '@types/react-transition-group@4.4.11': 1972 | dependencies: 1973 | '@types/react': 18.3.10 1974 | 1975 | '@types/react@18.3.10': 1976 | dependencies: 1977 | '@types/prop-types': 15.7.13 1978 | csstype: 3.1.3 1979 | 1980 | '@vitejs/plugin-react@4.3.1(vite@5.4.8(@types/node@22.7.4))': 1981 | dependencies: 1982 | '@babel/core': 7.25.2 1983 | '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) 1984 | '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) 1985 | '@types/babel__core': 7.20.5 1986 | react-refresh: 0.14.2 1987 | vite: 5.4.8(@types/node@22.7.4) 1988 | transitivePeerDependencies: 1989 | - supports-color 1990 | 1991 | ajv@8.16.0: 1992 | dependencies: 1993 | fast-deep-equal: 3.1.3 1994 | json-schema-traverse: 1.0.0 1995 | require-from-string: 2.0.2 1996 | uri-js: 4.4.1 1997 | 1998 | allotment@1.20.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 1999 | dependencies: 2000 | classnames: 2.5.1 2001 | eventemitter3: 5.0.1 2002 | lodash.clamp: 4.0.3 2003 | lodash.debounce: 4.0.8 2004 | lodash.isequal: 4.5.0 2005 | react: 18.3.1 2006 | react-dom: 18.3.1(react@18.3.1) 2007 | use-resize-observer: 9.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2008 | 2009 | ansi-regex@5.0.1: {} 2010 | 2011 | ansi-regex@6.1.0: {} 2012 | 2013 | ansi-styles@3.2.1: 2014 | dependencies: 2015 | color-convert: 1.9.3 2016 | 2017 | ansi-styles@4.3.0: 2018 | dependencies: 2019 | color-convert: 2.0.1 2020 | 2021 | ansi-styles@6.2.1: {} 2022 | 2023 | any-promise@1.3.0: {} 2024 | 2025 | anymatch@3.1.3: 2026 | dependencies: 2027 | normalize-path: 3.0.0 2028 | picomatch: 2.3.1 2029 | 2030 | arg@5.0.2: {} 2031 | 2032 | babel-plugin-macros@3.1.0: 2033 | dependencies: 2034 | '@babel/runtime': 7.25.6 2035 | cosmiconfig: 7.1.0 2036 | resolve: 1.22.8 2037 | 2038 | balanced-match@1.0.2: {} 2039 | 2040 | binary-extensions@2.3.0: {} 2041 | 2042 | brace-expansion@2.0.1: 2043 | dependencies: 2044 | balanced-match: 1.0.2 2045 | 2046 | braces@3.0.3: 2047 | dependencies: 2048 | fill-range: 7.1.1 2049 | 2050 | browserslist@4.24.0: 2051 | dependencies: 2052 | caniuse-lite: 1.0.30001664 2053 | electron-to-chromium: 1.5.29 2054 | node-releases: 2.0.18 2055 | update-browserslist-db: 1.1.1(browserslist@4.24.0) 2056 | 2057 | caido-material-ui@1.0.1(@types/react@18.3.10): 2058 | dependencies: 2059 | '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) 2060 | '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) 2061 | '@mui/icons-material': 6.1.1(@mui/material@6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) 2062 | '@mui/material': 6.1.1(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2063 | allotment: 1.20.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2064 | react: 18.3.1 2065 | react-dom: 18.3.1(react@18.3.1) 2066 | transitivePeerDependencies: 2067 | - '@mui/material-pigment-css' 2068 | - '@types/react' 2069 | - supports-color 2070 | 2071 | callsites@3.1.0: {} 2072 | 2073 | camelcase-css@2.0.1: {} 2074 | 2075 | caniuse-lite@1.0.30001664: {} 2076 | 2077 | chalk@2.4.2: 2078 | dependencies: 2079 | ansi-styles: 3.2.1 2080 | escape-string-regexp: 1.0.5 2081 | supports-color: 5.5.0 2082 | 2083 | chokidar@3.6.0: 2084 | dependencies: 2085 | anymatch: 3.1.3 2086 | braces: 3.0.3 2087 | glob-parent: 5.1.2 2088 | is-binary-path: 2.1.0 2089 | is-glob: 4.0.3 2090 | normalize-path: 3.0.0 2091 | readdirp: 3.6.0 2092 | optionalDependencies: 2093 | fsevents: 2.3.3 2094 | 2095 | classnames@2.5.1: {} 2096 | 2097 | clsx@2.1.1: {} 2098 | 2099 | color-convert@1.9.3: 2100 | dependencies: 2101 | color-name: 1.1.3 2102 | 2103 | color-convert@2.0.1: 2104 | dependencies: 2105 | color-name: 1.1.4 2106 | 2107 | color-name@1.1.3: {} 2108 | 2109 | color-name@1.1.4: {} 2110 | 2111 | commander@4.1.1: {} 2112 | 2113 | convert-source-map@1.9.0: {} 2114 | 2115 | convert-source-map@2.0.0: {} 2116 | 2117 | core-util-is@1.0.3: {} 2118 | 2119 | cosmiconfig@7.1.0: 2120 | dependencies: 2121 | '@types/parse-json': 4.0.2 2122 | import-fresh: 3.3.0 2123 | parse-json: 5.2.0 2124 | path-type: 4.0.0 2125 | yaml: 1.10.2 2126 | 2127 | cross-spawn@7.0.3: 2128 | dependencies: 2129 | path-key: 3.1.1 2130 | shebang-command: 2.0.0 2131 | which: 2.0.2 2132 | 2133 | cssesc@3.0.0: {} 2134 | 2135 | csstype@3.1.3: {} 2136 | 2137 | debug@4.3.7: 2138 | dependencies: 2139 | ms: 2.1.3 2140 | 2141 | didyoumean@1.2.2: {} 2142 | 2143 | dlv@1.1.3: {} 2144 | 2145 | dom-helpers@5.2.1: 2146 | dependencies: 2147 | '@babel/runtime': 7.25.6 2148 | csstype: 3.1.3 2149 | 2150 | eastasianwidth@0.2.0: {} 2151 | 2152 | electron-to-chromium@1.5.29: {} 2153 | 2154 | emoji-regex@8.0.0: {} 2155 | 2156 | emoji-regex@9.2.2: {} 2157 | 2158 | error-ex@1.3.2: 2159 | dependencies: 2160 | is-arrayish: 0.2.1 2161 | 2162 | esbuild@0.21.5: 2163 | optionalDependencies: 2164 | '@esbuild/aix-ppc64': 0.21.5 2165 | '@esbuild/android-arm': 0.21.5 2166 | '@esbuild/android-arm64': 0.21.5 2167 | '@esbuild/android-x64': 0.21.5 2168 | '@esbuild/darwin-arm64': 0.21.5 2169 | '@esbuild/darwin-x64': 0.21.5 2170 | '@esbuild/freebsd-arm64': 0.21.5 2171 | '@esbuild/freebsd-x64': 0.21.5 2172 | '@esbuild/linux-arm': 0.21.5 2173 | '@esbuild/linux-arm64': 0.21.5 2174 | '@esbuild/linux-ia32': 0.21.5 2175 | '@esbuild/linux-loong64': 0.21.5 2176 | '@esbuild/linux-mips64el': 0.21.5 2177 | '@esbuild/linux-ppc64': 0.21.5 2178 | '@esbuild/linux-riscv64': 0.21.5 2179 | '@esbuild/linux-s390x': 0.21.5 2180 | '@esbuild/linux-x64': 0.21.5 2181 | '@esbuild/netbsd-x64': 0.21.5 2182 | '@esbuild/openbsd-x64': 0.21.5 2183 | '@esbuild/sunos-x64': 0.21.5 2184 | '@esbuild/win32-arm64': 0.21.5 2185 | '@esbuild/win32-ia32': 0.21.5 2186 | '@esbuild/win32-x64': 0.21.5 2187 | 2188 | escalade@3.2.0: {} 2189 | 2190 | escape-string-regexp@1.0.5: {} 2191 | 2192 | escape-string-regexp@4.0.0: {} 2193 | 2194 | eventemitter3@5.0.1: {} 2195 | 2196 | fast-deep-equal@3.1.3: {} 2197 | 2198 | fast-glob@3.3.2: 2199 | dependencies: 2200 | '@nodelib/fs.stat': 2.0.5 2201 | '@nodelib/fs.walk': 1.2.8 2202 | glob-parent: 5.1.2 2203 | merge2: 1.4.1 2204 | micromatch: 4.0.8 2205 | 2206 | fastq@1.17.1: 2207 | dependencies: 2208 | reusify: 1.0.4 2209 | 2210 | fill-range@7.1.1: 2211 | dependencies: 2212 | to-regex-range: 5.0.1 2213 | 2214 | find-root@1.1.0: {} 2215 | 2216 | foreground-child@3.3.0: 2217 | dependencies: 2218 | cross-spawn: 7.0.3 2219 | signal-exit: 4.1.0 2220 | 2221 | fsevents@2.3.3: 2222 | optional: true 2223 | 2224 | function-bind@1.1.2: {} 2225 | 2226 | gensync@1.0.0-beta.2: {} 2227 | 2228 | glob-parent@5.1.2: 2229 | dependencies: 2230 | is-glob: 4.0.3 2231 | 2232 | glob-parent@6.0.2: 2233 | dependencies: 2234 | is-glob: 4.0.3 2235 | 2236 | glob@10.4.5: 2237 | dependencies: 2238 | foreground-child: 3.3.0 2239 | jackspeak: 3.4.3 2240 | minimatch: 9.0.5 2241 | minipass: 7.1.2 2242 | package-json-from-dist: 1.0.1 2243 | path-scurry: 1.11.1 2244 | 2245 | globals@11.12.0: {} 2246 | 2247 | has-flag@3.0.0: {} 2248 | 2249 | hasown@2.0.2: 2250 | dependencies: 2251 | function-bind: 1.1.2 2252 | 2253 | hoist-non-react-statics@3.3.2: 2254 | dependencies: 2255 | react-is: 16.13.1 2256 | 2257 | immediate@3.0.6: {} 2258 | 2259 | import-fresh@3.3.0: 2260 | dependencies: 2261 | parent-module: 1.0.1 2262 | resolve-from: 4.0.0 2263 | 2264 | inherits@2.0.4: {} 2265 | 2266 | is-arrayish@0.2.1: {} 2267 | 2268 | is-binary-path@2.1.0: 2269 | dependencies: 2270 | binary-extensions: 2.3.0 2271 | 2272 | is-core-module@2.15.1: 2273 | dependencies: 2274 | hasown: 2.0.2 2275 | 2276 | is-extglob@2.1.1: {} 2277 | 2278 | is-fullwidth-code-point@3.0.0: {} 2279 | 2280 | is-glob@4.0.3: 2281 | dependencies: 2282 | is-extglob: 2.1.1 2283 | 2284 | is-number@7.0.0: {} 2285 | 2286 | isarray@1.0.0: {} 2287 | 2288 | isexe@2.0.0: {} 2289 | 2290 | jackspeak@3.4.3: 2291 | dependencies: 2292 | '@isaacs/cliui': 8.0.2 2293 | optionalDependencies: 2294 | '@pkgjs/parseargs': 0.11.0 2295 | 2296 | jiti@1.21.6: {} 2297 | 2298 | js-tokens@4.0.0: {} 2299 | 2300 | jsesc@2.5.2: {} 2301 | 2302 | json-parse-even-better-errors@2.3.1: {} 2303 | 2304 | json-schema-traverse@1.0.0: {} 2305 | 2306 | json5@2.2.3: {} 2307 | 2308 | jszip@3.10.1: 2309 | dependencies: 2310 | lie: 3.3.0 2311 | pako: 1.0.11 2312 | readable-stream: 2.3.8 2313 | setimmediate: 1.0.5 2314 | 2315 | lie@3.3.0: 2316 | dependencies: 2317 | immediate: 3.0.6 2318 | 2319 | lilconfig@2.1.0: {} 2320 | 2321 | lilconfig@3.1.2: {} 2322 | 2323 | lines-and-columns@1.2.4: {} 2324 | 2325 | lodash.clamp@4.0.3: {} 2326 | 2327 | lodash.debounce@4.0.8: {} 2328 | 2329 | lodash.isequal@4.5.0: {} 2330 | 2331 | loose-envify@1.4.0: 2332 | dependencies: 2333 | js-tokens: 4.0.0 2334 | 2335 | lru-cache@10.4.3: {} 2336 | 2337 | lru-cache@5.1.1: 2338 | dependencies: 2339 | yallist: 3.1.1 2340 | 2341 | merge2@1.4.1: {} 2342 | 2343 | micromatch@4.0.8: 2344 | dependencies: 2345 | braces: 3.0.3 2346 | picomatch: 2.3.1 2347 | 2348 | minimatch@9.0.5: 2349 | dependencies: 2350 | brace-expansion: 2.0.1 2351 | 2352 | minipass@7.1.2: {} 2353 | 2354 | ms@2.1.3: {} 2355 | 2356 | mz@2.7.0: 2357 | dependencies: 2358 | any-promise: 1.3.0 2359 | object-assign: 4.1.1 2360 | thenify-all: 1.6.0 2361 | 2362 | nanoid@3.3.7: {} 2363 | 2364 | node-releases@2.0.18: {} 2365 | 2366 | normalize-path@3.0.0: {} 2367 | 2368 | object-assign@4.1.1: {} 2369 | 2370 | object-hash@3.0.0: {} 2371 | 2372 | package-json-from-dist@1.0.1: {} 2373 | 2374 | pako@1.0.11: {} 2375 | 2376 | parent-module@1.0.1: 2377 | dependencies: 2378 | callsites: 3.1.0 2379 | 2380 | parse-json@5.2.0: 2381 | dependencies: 2382 | '@babel/code-frame': 7.24.7 2383 | error-ex: 1.3.2 2384 | json-parse-even-better-errors: 2.3.1 2385 | lines-and-columns: 1.2.4 2386 | 2387 | path-key@3.1.1: {} 2388 | 2389 | path-parse@1.0.7: {} 2390 | 2391 | path-scurry@1.11.1: 2392 | dependencies: 2393 | lru-cache: 10.4.3 2394 | minipass: 7.1.2 2395 | 2396 | path-type@4.0.0: {} 2397 | 2398 | picocolors@1.1.0: {} 2399 | 2400 | picomatch@2.3.1: {} 2401 | 2402 | pify@2.3.0: {} 2403 | 2404 | pirates@4.0.6: {} 2405 | 2406 | postcss-import@15.1.0(postcss@8.4.47): 2407 | dependencies: 2408 | postcss: 8.4.47 2409 | postcss-value-parser: 4.2.0 2410 | read-cache: 1.0.0 2411 | resolve: 1.22.8 2412 | 2413 | postcss-js@4.0.1(postcss@8.4.47): 2414 | dependencies: 2415 | camelcase-css: 2.0.1 2416 | postcss: 8.4.47 2417 | 2418 | postcss-load-config@4.0.2(postcss@8.4.47): 2419 | dependencies: 2420 | lilconfig: 3.1.2 2421 | yaml: 2.5.1 2422 | optionalDependencies: 2423 | postcss: 8.4.47 2424 | 2425 | postcss-nested@6.2.0(postcss@8.4.47): 2426 | dependencies: 2427 | postcss: 8.4.47 2428 | postcss-selector-parser: 6.1.2 2429 | 2430 | postcss-selector-parser@6.1.2: 2431 | dependencies: 2432 | cssesc: 3.0.0 2433 | util-deprecate: 1.0.2 2434 | 2435 | postcss-value-parser@4.2.0: {} 2436 | 2437 | postcss@8.4.47: 2438 | dependencies: 2439 | nanoid: 3.3.7 2440 | picocolors: 1.1.0 2441 | source-map-js: 1.2.1 2442 | 2443 | prettier@3.3.2: {} 2444 | 2445 | process-nextick-args@2.0.1: {} 2446 | 2447 | prop-types@15.8.1: 2448 | dependencies: 2449 | loose-envify: 1.4.0 2450 | object-assign: 4.1.1 2451 | react-is: 16.13.1 2452 | 2453 | punycode@2.3.1: {} 2454 | 2455 | queue-microtask@1.2.3: {} 2456 | 2457 | react-dom@18.3.1(react@18.3.1): 2458 | dependencies: 2459 | loose-envify: 1.4.0 2460 | react: 18.3.1 2461 | scheduler: 0.23.2 2462 | 2463 | react-is@16.13.1: {} 2464 | 2465 | react-is@18.3.1: {} 2466 | 2467 | react-refresh@0.14.2: {} 2468 | 2469 | react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2470 | dependencies: 2471 | '@babel/runtime': 7.25.6 2472 | dom-helpers: 5.2.1 2473 | loose-envify: 1.4.0 2474 | prop-types: 15.8.1 2475 | react: 18.3.1 2476 | react-dom: 18.3.1(react@18.3.1) 2477 | 2478 | react@18.3.1: 2479 | dependencies: 2480 | loose-envify: 1.4.0 2481 | 2482 | read-cache@1.0.0: 2483 | dependencies: 2484 | pify: 2.3.0 2485 | 2486 | readable-stream@2.3.8: 2487 | dependencies: 2488 | core-util-is: 1.0.3 2489 | inherits: 2.0.4 2490 | isarray: 1.0.0 2491 | process-nextick-args: 2.0.1 2492 | safe-buffer: 5.1.2 2493 | string_decoder: 1.1.1 2494 | util-deprecate: 1.0.2 2495 | 2496 | readdirp@3.6.0: 2497 | dependencies: 2498 | picomatch: 2.3.1 2499 | 2500 | regenerator-runtime@0.14.1: {} 2501 | 2502 | require-from-string@2.0.2: {} 2503 | 2504 | resolve-from@4.0.0: {} 2505 | 2506 | resolve@1.22.8: 2507 | dependencies: 2508 | is-core-module: 2.15.1 2509 | path-parse: 1.0.7 2510 | supports-preserve-symlinks-flag: 1.0.0 2511 | 2512 | reusify@1.0.4: {} 2513 | 2514 | rollup@4.22.5: 2515 | dependencies: 2516 | '@types/estree': 1.0.6 2517 | optionalDependencies: 2518 | '@rollup/rollup-android-arm-eabi': 4.22.5 2519 | '@rollup/rollup-android-arm64': 4.22.5 2520 | '@rollup/rollup-darwin-arm64': 4.22.5 2521 | '@rollup/rollup-darwin-x64': 4.22.5 2522 | '@rollup/rollup-linux-arm-gnueabihf': 4.22.5 2523 | '@rollup/rollup-linux-arm-musleabihf': 4.22.5 2524 | '@rollup/rollup-linux-arm64-gnu': 4.22.5 2525 | '@rollup/rollup-linux-arm64-musl': 4.22.5 2526 | '@rollup/rollup-linux-powerpc64le-gnu': 4.22.5 2527 | '@rollup/rollup-linux-riscv64-gnu': 4.22.5 2528 | '@rollup/rollup-linux-s390x-gnu': 4.22.5 2529 | '@rollup/rollup-linux-x64-gnu': 4.22.5 2530 | '@rollup/rollup-linux-x64-musl': 4.22.5 2531 | '@rollup/rollup-win32-arm64-msvc': 4.22.5 2532 | '@rollup/rollup-win32-ia32-msvc': 4.22.5 2533 | '@rollup/rollup-win32-x64-msvc': 4.22.5 2534 | fsevents: 2.3.3 2535 | 2536 | run-parallel@1.2.0: 2537 | dependencies: 2538 | queue-microtask: 1.2.3 2539 | 2540 | safe-buffer@5.1.2: {} 2541 | 2542 | scheduler@0.23.2: 2543 | dependencies: 2544 | loose-envify: 1.4.0 2545 | 2546 | semver@6.3.1: {} 2547 | 2548 | setimmediate@1.0.5: {} 2549 | 2550 | shebang-command@2.0.0: 2551 | dependencies: 2552 | shebang-regex: 3.0.0 2553 | 2554 | shebang-regex@3.0.0: {} 2555 | 2556 | signal-exit@4.1.0: {} 2557 | 2558 | source-map-js@1.2.1: {} 2559 | 2560 | source-map@0.5.7: {} 2561 | 2562 | string-width@4.2.3: 2563 | dependencies: 2564 | emoji-regex: 8.0.0 2565 | is-fullwidth-code-point: 3.0.0 2566 | strip-ansi: 6.0.1 2567 | 2568 | string-width@5.1.2: 2569 | dependencies: 2570 | eastasianwidth: 0.2.0 2571 | emoji-regex: 9.2.2 2572 | strip-ansi: 7.1.0 2573 | 2574 | string_decoder@1.1.1: 2575 | dependencies: 2576 | safe-buffer: 5.1.2 2577 | 2578 | strip-ansi@6.0.1: 2579 | dependencies: 2580 | ansi-regex: 5.0.1 2581 | 2582 | strip-ansi@7.1.0: 2583 | dependencies: 2584 | ansi-regex: 6.1.0 2585 | 2586 | style-mod@4.1.2: {} 2587 | 2588 | stylis@4.2.0: {} 2589 | 2590 | sucrase@3.35.0: 2591 | dependencies: 2592 | '@jridgewell/gen-mapping': 0.3.5 2593 | commander: 4.1.1 2594 | glob: 10.4.5 2595 | lines-and-columns: 1.2.4 2596 | mz: 2.7.0 2597 | pirates: 4.0.6 2598 | ts-interface-checker: 0.1.13 2599 | 2600 | supports-color@5.5.0: 2601 | dependencies: 2602 | has-flag: 3.0.0 2603 | 2604 | supports-preserve-symlinks-flag@1.0.0: {} 2605 | 2606 | tailwindcss@3.4.13: 2607 | dependencies: 2608 | '@alloc/quick-lru': 5.2.0 2609 | arg: 5.0.2 2610 | chokidar: 3.6.0 2611 | didyoumean: 1.2.2 2612 | dlv: 1.1.3 2613 | fast-glob: 3.3.2 2614 | glob-parent: 6.0.2 2615 | is-glob: 4.0.3 2616 | jiti: 1.21.6 2617 | lilconfig: 2.1.0 2618 | micromatch: 4.0.8 2619 | normalize-path: 3.0.0 2620 | object-hash: 3.0.0 2621 | picocolors: 1.1.0 2622 | postcss: 8.4.47 2623 | postcss-import: 15.1.0(postcss@8.4.47) 2624 | postcss-js: 4.0.1(postcss@8.4.47) 2625 | postcss-load-config: 4.0.2(postcss@8.4.47) 2626 | postcss-nested: 6.2.0(postcss@8.4.47) 2627 | postcss-selector-parser: 6.1.2 2628 | resolve: 1.22.8 2629 | sucrase: 3.35.0 2630 | transitivePeerDependencies: 2631 | - ts-node 2632 | 2633 | thenify-all@1.6.0: 2634 | dependencies: 2635 | thenify: 3.3.1 2636 | 2637 | thenify@3.3.1: 2638 | dependencies: 2639 | any-promise: 1.3.0 2640 | 2641 | to-fast-properties@2.0.0: {} 2642 | 2643 | to-regex-range@5.0.1: 2644 | dependencies: 2645 | is-number: 7.0.0 2646 | 2647 | ts-interface-checker@0.1.13: {} 2648 | 2649 | typescript@5.6.2: {} 2650 | 2651 | undici-types@6.19.8: {} 2652 | 2653 | update-browserslist-db@1.1.1(browserslist@4.24.0): 2654 | dependencies: 2655 | browserslist: 4.24.0 2656 | escalade: 3.2.0 2657 | picocolors: 1.1.0 2658 | 2659 | uri-js@4.4.1: 2660 | dependencies: 2661 | punycode: 2.3.1 2662 | 2663 | use-resize-observer@9.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2664 | dependencies: 2665 | '@juggle/resize-observer': 3.4.0 2666 | react: 18.3.1 2667 | react-dom: 18.3.1(react@18.3.1) 2668 | 2669 | util-deprecate@1.0.2: {} 2670 | 2671 | vite@5.4.8(@types/node@22.7.4): 2672 | dependencies: 2673 | esbuild: 0.21.5 2674 | postcss: 8.4.47 2675 | rollup: 4.22.5 2676 | optionalDependencies: 2677 | '@types/node': 22.7.4 2678 | fsevents: 2.3.3 2679 | 2680 | w3c-keyname@2.2.8: {} 2681 | 2682 | which@2.0.2: 2683 | dependencies: 2684 | isexe: 2.0.0 2685 | 2686 | wrap-ansi@7.0.0: 2687 | dependencies: 2688 | ansi-styles: 4.3.0 2689 | string-width: 4.2.3 2690 | strip-ansi: 6.0.1 2691 | 2692 | wrap-ansi@8.1.0: 2693 | dependencies: 2694 | ansi-styles: 6.2.1 2695 | string-width: 5.1.2 2696 | strip-ansi: 7.1.0 2697 | 2698 | yallist@3.1.1: {} 2699 | 2700 | yaml@1.10.2: {} 2701 | 2702 | yaml@2.5.1: {} 2703 | 2704 | zustand@5.0.0-rc.2(@types/react@18.3.10)(react@18.3.1): 2705 | optionalDependencies: 2706 | '@types/react': 18.3.10 2707 | react: 18.3.1 2708 | --------------------------------------------------------------------------------