Initial commit with Sveltekit + format files

This commit is contained in:
pheralb
2025-08-21 10:26:07 +01:00
parent ca4f397e0a
commit 459457a7e1
97 changed files with 3892 additions and 9893 deletions
-13
View File
@@ -1,13 +0,0 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock
+10 -21
View File
@@ -1,34 +1,23 @@
# Dependencies
node_modules
package-lock.json
yarn.lock
# Folders
# Output
.output
.vercel
.netlify
.wrangler
/.svelte-kit
/build
dist
/package
.idea/
# Hono
.wrangler
.dev.vars
# Vercel
.vercel
# Logs
# OS
.DS_Store
Thumbs.db
# Environment variables
# Env
.env
.env.*
!.env.example
!.env.test
# Vite files
# Vite
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
src/figma/dist
# Lychee files
.lycheecache
+7 -11
View File
@@ -1,13 +1,9 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
# Package Managers
package-lock.json
pnpm-lock.yaml
yarn.lock
bun.lock
bun.lockb
# Miscellaneous
/static/
-14
View File
@@ -1,14 +0,0 @@
{
"$schema": "https://shadcn-svelte.com/schema.json",
"style": "new-york",
"tailwind": {
"config": "tailwind.config.js",
"css": "src\\app.css",
"baseColor": "neutral"
},
"aliases": {
"components": "@/ui",
"utils": "@/utils"
},
"typescript": true
}
-33
View File
@@ -1,33 +0,0 @@
import js from '@eslint/js';
import ts from 'typescript-eslint';
import svelte from 'eslint-plugin-svelte';
import prettier from 'eslint-config-prettier';
import globals from 'globals';
/** @type {import('eslint').Linter.Config[]} */
export default [
js.configs.recommended,
...ts.configs.recommended,
...svelte.configs['flat/recommended'],
prettier,
...svelte.configs['flat/prettier'],
{
languageOptions: {
globals: {
...globals.browser,
...globals.node
}
}
},
{
files: ['**/*.svelte'],
languageOptions: {
parserOptions: {
parser: ts.parser
}
}
},
{
ignores: ['build/', '.svelte-kit/', 'dist/']
}
];
+40
View File
@@ -0,0 +1,40 @@
import prettier from "eslint-config-prettier";
import { includeIgnoreFile } from "@eslint/compat";
import js from "@eslint/js";
import svelte from "eslint-plugin-svelte";
import globals from "globals";
import { fileURLToPath } from "node:url";
import ts from "typescript-eslint";
import svelteConfig from "./svelte.config.js";
const gitignorePath = fileURLToPath(new URL("./.gitignore", import.meta.url));
export default ts.config(
includeIgnoreFile(gitignorePath),
js.configs.recommended,
...ts.configs.recommended,
...svelte.configs.recommended,
prettier,
...svelte.configs.prettier,
{
languageOptions: {
globals: { ...globals.browser, ...globals.node },
},
rules: {
// typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects.
// see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors
"no-undef": "off",
},
},
{
files: ["**/*.svelte", "**/*.svelte.ts", "**/*.svelte.js"],
languageOptions: {
parserOptions: {
projectService: true,
extraFileExtensions: [".svelte"],
parser: ts.parser,
svelteConfig,
},
},
},
);
-51
View File
@@ -1,51 +0,0 @@
import { escapeSvelte } from 'mdsvex';
import { createHighlighter, makeSingletonHighlighter } from 'shiki';
// Markdown Plugins
import remarkGfm from 'remark-gfm';
import rehypeSlug from 'rehype-slug';
import rehypeAutolinkHeadings from 'rehype-autolink-headings';
// Highlighter
const getHighlighter = makeSingletonHighlighter(createHighlighter);
/** @type {import('mdsvex').MdsvexOptions} */
const mdsvexOptions = {
remarkPlugins: [[remarkGfm]],
rehypePlugins: [
[rehypeSlug],
[
rehypeAutolinkHeadings,
{
behavior: 'wrap',
properties: {
className: [
`before:content-['#'] before:absolute before:-ml-[1em] before:text-neutral-100/0 hover:before:text-neutral-200/50 pl-[1em] -ml-[1em]`
]
}
}
]
],
extensions: ['.md'],
highlight: {
highlighter: async (code, lang = 'text') => {
const highlighter = await getHighlighter({
themes: ['github-light', 'github-dark'],
langs: ['javascript', 'typescript', 'bash', 'json', 'html']
});
await highlighter.loadLanguage('javascript', 'typescript', 'bash', 'html');
const html = escapeSvelte(
highlighter.codeToHtml(code, {
lang,
themes: {
light: 'github-light',
dark: 'github-dark'
}
})
);
return `{@html \`${html}\` }`;
}
}
};
export { mdsvexOptions };
+30 -66
View File
@@ -1,7 +1,7 @@
{
"name": "@pheralb/svgl",
"author": "@pheralb_",
"version": "4.6.1",
"version": "5.0.0",
"description": "A beautiful library with SVG logos.",
"private": true,
"license": "MIT",
@@ -21,75 +21,39 @@
},
"scripts": {
"dev": "vite dev",
"host": "vite dev --host",
"build": "pnpm run prebuild && vite build",
"prebuild": "cd ./utils/check-size && pnpm install && pnpm run start",
"vite:build": "vite build",
"build": "vite build",
"preview": "vite preview",
"prepare": "svelte-kit sync || echo ''",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"check:size": "cd ./utils/check-size && npm run start",
"check:links": " lychee --base . ./src/data/svgs.ts --cache --max-cache-age 3d . --include 'https://svgl.app'",
"fix:viewbox": "cd ./utils/fix-viewbox && npm run start",
"test": "vitest run",
"lint": "prettier --plugin-search-dir . --check . && eslint .",
"format": "prettier --plugin-search-dir . --write .",
"dev:figma": "concurrently -n plugin,svelte 'npm run build:plugin -- --watch --define:SITE_URL=\\\"http://localhost:5173?figma=1\\\"' 'npm run dev'",
"build:plugin": "esbuild src/figma/code.ts --bundle --target=es6 --loader:.svg=text --outfile=src/figma/dist/code.js",
"build:figma": "concurrently -n plugin,svelte 'npm run build:plugin -- --define:SITE_URL=\\\"$npm_package_config_siteURL\\\"' 'npm run build'"
},
"dependencies": {
"@figma/plugin-typings": "1.115.0",
"@svelte-dev/pretty-code": "1.0.0",
"@svgr/core": "8.1.0",
"@svgr/plugin-jsx": "8.1.0",
"@upstash/ratelimit": "2.0.6",
"@upstash/redis": "1.35.3",
"clsx": "2.1.1",
"downloadjs": "1.4.7",
"fuse.js": "7.1.0",
"jszip": "3.10.1",
"lucide-svelte": "0.525.0",
"mode-watcher": "0.5.1",
"rehype-autolink-headings": "7.1.0",
"rehype-slug": "6.0.0",
"remark-gfm": "4.0.1",
"shiki": "3.7.0",
"svelte-sonner": "0.3.28",
"svgo": "4.0.0",
"tailwind-merge": "2.6.0",
"tailwind-variants": "0.3.1"
"format": "prettier --write .",
"lint": "prettier --check . && eslint ."
},
"devDependencies": {
"@sveltejs/adapter-auto": "3.2.5",
"@sveltejs/adapter-node": "5.2.5",
"@sveltejs/kit": "2.5.28",
"@sveltejs/vite-plugin-svelte": "3.1.2",
"@tailwindcss/typography": "0.5.16",
"@types/downloadjs": "1.4.6",
"@types/eslint": "9.6.1",
"@types/node": "22.5.5",
"autoprefixer": "10.4.21",
"bits-ui": "0.22.0",
"concurrently": "9.0.1",
"esbuild": "0.24.0",
"eslint": "9.11.0",
"eslint-config-prettier": "9.1.0",
"eslint-plugin-svelte": "2.44.0",
"globals": "15.9.0",
"mdsvex": "0.12.5",
"postcss": "8.5.3",
"prettier": "3.3.3",
"prettier-plugin-svelte": "3.2.6",
"prettier-plugin-tailwindcss": "0.6.6",
"svelte": "4.2.20",
"svelte-check": "4.0.9",
"sveltekit-search-params": "3.0.0",
"tailwindcss": "3.4.17",
"tslib": "2.7.0",
"typescript": "5.6.2",
"typescript-eslint": "8.6.0",
"vite": "5.4.7",
"vitest": "2.1.1"
"@eslint/compat": "1.3.2",
"@eslint/js": "9.33.0",
"@sveltejs/adapter-auto": "6.1.0",
"@sveltejs/kit": "2.36.1",
"@sveltejs/vite-plugin-svelte": "6.1.3",
"@tailwindcss/vite": "4.1.12",
"eslint": "9.33.0",
"eslint-config-prettier": "10.1.8",
"eslint-plugin-svelte": "3.11.0",
"globals": "16.3.0",
"mdsvex": "0.12.6",
"prettier": "3.6.2",
"prettier-plugin-svelte": "3.4.0",
"prettier-plugin-tailwindcss": "0.6.14",
"svelte": "5.38.2",
"svelte-check": "4.3.1",
"tailwindcss": "4.1.12",
"typescript": "5.9.2",
"typescript-eslint": "8.40.0",
"vite": "7.1.3"
},
"pnpm": {
"onlyBuiltDependencies": [
"esbuild"
]
}
}
+1122 -4012
View File
@@ -7,516 +7,228 @@ settings:
importers:
.:
dependencies:
'@figma/plugin-typings':
specifier: 1.115.0
version: 1.115.0
'@svelte-dev/pretty-code':
specifier: 1.0.0
version: 1.0.0(shikiji@0.10.2)
'@svgr/core':
specifier: 8.1.0
version: 8.1.0(typescript@5.6.2)
'@svgr/plugin-jsx':
specifier: 8.1.0
version: 8.1.0(@svgr/core@8.1.0(typescript@5.6.2))
'@upstash/ratelimit':
specifier: 2.0.6
version: 2.0.6(@upstash/redis@1.35.3)
'@upstash/redis':
specifier: 1.35.3
version: 1.35.3
clsx:
specifier: 2.1.1
version: 2.1.1
downloadjs:
specifier: 1.4.7
version: 1.4.7
fuse.js:
specifier: 7.1.0
version: 7.1.0
jszip:
specifier: 3.10.1
version: 3.10.1
lucide-svelte:
specifier: 0.525.0
version: 0.525.0(svelte@4.2.20)
mode-watcher:
specifier: 0.5.1
version: 0.5.1(svelte@4.2.20)
rehype-autolink-headings:
specifier: 7.1.0
version: 7.1.0
rehype-slug:
specifier: 6.0.0
version: 6.0.0
remark-gfm:
specifier: 4.0.1
version: 4.0.1
shiki:
specifier: 3.7.0
version: 3.7.0
svelte-sonner:
specifier: 0.3.28
version: 0.3.28(svelte@4.2.20)
svgo:
specifier: 4.0.0
version: 4.0.0
tailwind-merge:
specifier: 2.6.0
version: 2.6.0
tailwind-variants:
specifier: 0.3.1
version: 0.3.1(tailwindcss@3.4.17)
devDependencies:
'@eslint/compat':
specifier: 1.3.2
version: 1.3.2(eslint@9.33.0(jiti@2.5.1))
'@eslint/js':
specifier: 9.33.0
version: 9.33.0
'@sveltejs/adapter-auto':
specifier: 3.2.5
version: 3.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))
'@sveltejs/adapter-node':
specifier: 5.2.5
version: 5.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))
specifier: 6.1.0
version: 6.1.0(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1)))
'@sveltejs/kit':
specifier: 2.5.28
version: 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
specifier: 2.36.1
version: 2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))
'@sveltejs/vite-plugin-svelte':
specifier: 3.1.2
version: 3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
'@tailwindcss/typography':
specifier: 0.5.16
version: 0.5.16(tailwindcss@3.4.17)
'@types/downloadjs':
specifier: 1.4.6
version: 1.4.6
'@types/eslint':
specifier: 9.6.1
version: 9.6.1
'@types/node':
specifier: 22.5.5
version: 22.5.5
autoprefixer:
specifier: 10.4.21
version: 10.4.21(postcss@8.5.3)
bits-ui:
specifier: 0.22.0
version: 0.22.0(svelte@4.2.20)
concurrently:
specifier: 9.0.1
version: 9.0.1
esbuild:
specifier: 0.24.0
version: 0.24.0
specifier: 6.1.3
version: 6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))
'@tailwindcss/vite':
specifier: 4.1.12
version: 4.1.12(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))
eslint:
specifier: 9.11.0
version: 9.11.0(jiti@1.21.7)
specifier: 9.33.0
version: 9.33.0(jiti@2.5.1)
eslint-config-prettier:
specifier: 9.1.0
version: 9.1.0(eslint@9.11.0(jiti@1.21.7))
specifier: 10.1.8
version: 10.1.8(eslint@9.33.0(jiti@2.5.1))
eslint-plugin-svelte:
specifier: 2.44.0
version: 2.44.0(eslint@9.11.0(jiti@1.21.7))(svelte@4.2.20)
specifier: 3.11.0
version: 3.11.0(eslint@9.33.0(jiti@2.5.1))(svelte@5.38.2)
globals:
specifier: 15.9.0
version: 15.9.0
specifier: 16.3.0
version: 16.3.0
mdsvex:
specifier: 0.12.5
version: 0.12.5(svelte@4.2.20)
postcss:
specifier: 8.5.3
version: 8.5.3
specifier: 0.12.6
version: 0.12.6(svelte@5.38.2)
prettier:
specifier: 3.3.3
version: 3.3.3
specifier: 3.6.2
version: 3.6.2
prettier-plugin-svelte:
specifier: 3.2.6
version: 3.2.6(prettier@3.3.3)(svelte@4.2.20)
specifier: 3.4.0
version: 3.4.0(prettier@3.6.2)(svelte@5.38.2)
prettier-plugin-tailwindcss:
specifier: 0.6.6
version: 0.6.6(prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.20))(prettier@3.3.3)
specifier: 0.6.14
version: 0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.38.2))(prettier@3.6.2)
svelte:
specifier: 4.2.20
version: 4.2.20
specifier: 5.38.2
version: 5.38.2
svelte-check:
specifier: 4.0.9
version: 4.0.9(picomatch@4.0.2)(svelte@4.2.20)(typescript@5.6.2)
sveltekit-search-params:
specifier: 3.0.0
version: 3.0.0(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
specifier: 4.3.1
version: 4.3.1(picomatch@4.0.3)(svelte@5.38.2)(typescript@5.9.2)
tailwindcss:
specifier: 3.4.17
version: 3.4.17
tslib:
specifier: 2.7.0
version: 2.7.0
specifier: 4.1.12
version: 4.1.12
typescript:
specifier: 5.6.2
version: 5.6.2
specifier: 5.9.2
version: 5.9.2
typescript-eslint:
specifier: 8.6.0
version: 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
specifier: 8.40.0
version: 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
vite:
specifier: 5.4.7
version: 5.4.7(@types/node@22.5.5)
vitest:
specifier: 2.1.1
version: 2.1.1(@types/node@22.5.5)
specifier: 7.1.3
version: 7.1.3(jiti@2.5.1)(lightningcss@1.30.1)
packages:
'@alloc/quick-lru@5.2.0':
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
'@ampproject/remapping@2.3.0':
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
'@babel/code-frame@7.26.2':
resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
engines: {node: '>=6.9.0'}
'@babel/compat-data@7.26.8':
resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
engines: {node: '>=6.9.0'}
'@babel/core@7.26.9':
resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==}
engines: {node: '>=6.9.0'}
'@babel/generator@7.26.9':
resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==}
engines: {node: '>=6.9.0'}
'@babel/helper-compilation-targets@7.26.5':
resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-imports@7.25.9':
resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-transforms@7.26.0':
resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-string-parser@7.25.9':
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.25.9':
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-option@7.25.9':
resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
engines: {node: '>=6.9.0'}
'@babel/helpers@7.26.9':
resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.26.9':
resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/template@7.26.9':
resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==}
engines: {node: '>=6.9.0'}
'@babel/traverse@7.26.9':
resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==}
engines: {node: '>=6.9.0'}
'@babel/types@7.26.9':
resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==}
engines: {node: '>=6.9.0'}
'@esbuild/aix-ppc64@0.21.5':
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [aix]
'@esbuild/aix-ppc64@0.24.0':
resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
'@esbuild/aix-ppc64@0.25.9':
resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
'@esbuild/android-arm64@0.21.5':
resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
'@esbuild/android-arm64@0.24.0':
resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
'@esbuild/android-arm64@0.25.9':
resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
'@esbuild/android-arm@0.21.5':
resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
'@esbuild/android-arm@0.24.0':
resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
'@esbuild/android-arm@0.25.9':
resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
'@esbuild/android-x64@0.21.5':
resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
'@esbuild/android-x64@0.24.0':
resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
'@esbuild/android-x64@0.25.9':
resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
'@esbuild/darwin-arm64@0.21.5':
resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
'@esbuild/darwin-arm64@0.24.0':
resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
'@esbuild/darwin-arm64@0.25.9':
resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
'@esbuild/darwin-x64@0.21.5':
resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
'@esbuild/darwin-x64@0.24.0':
resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
'@esbuild/darwin-x64@0.25.9':
resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
'@esbuild/freebsd-arm64@0.21.5':
resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-arm64@0.24.0':
resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
'@esbuild/freebsd-arm64@0.25.9':
resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-x64@0.21.5':
resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
'@esbuild/freebsd-x64@0.24.0':
resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
'@esbuild/freebsd-x64@0.25.9':
resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
'@esbuild/linux-arm64@0.21.5':
resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
'@esbuild/linux-arm64@0.24.0':
resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
'@esbuild/linux-arm64@0.25.9':
resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
'@esbuild/linux-arm@0.21.5':
resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
'@esbuild/linux-arm@0.24.0':
resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
'@esbuild/linux-arm@0.25.9':
resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
'@esbuild/linux-ia32@0.21.5':
resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
'@esbuild/linux-ia32@0.24.0':
resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
'@esbuild/linux-ia32@0.25.9':
resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
'@esbuild/linux-loong64@0.21.5':
resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
'@esbuild/linux-loong64@0.24.0':
resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
'@esbuild/linux-loong64@0.25.9':
resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
'@esbuild/linux-mips64el@0.21.5':
resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
'@esbuild/linux-mips64el@0.24.0':
resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
'@esbuild/linux-mips64el@0.25.9':
resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
'@esbuild/linux-ppc64@0.21.5':
resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
'@esbuild/linux-ppc64@0.24.0':
resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
'@esbuild/linux-ppc64@0.25.9':
resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
'@esbuild/linux-riscv64@0.21.5':
resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
'@esbuild/linux-riscv64@0.24.0':
resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
'@esbuild/linux-riscv64@0.25.9':
resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
'@esbuild/linux-s390x@0.21.5':
resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
'@esbuild/linux-s390x@0.24.0':
resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
'@esbuild/linux-s390x@0.25.9':
resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
'@esbuild/linux-x64@0.21.5':
resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
'@esbuild/linux-x64@0.24.0':
resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
'@esbuild/linux-x64@0.25.9':
resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
'@esbuild/netbsd-x64@0.21.5':
resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
engines: {node: '>=12'}
cpu: [x64]
'@esbuild/netbsd-arm64@0.25.9':
resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
'@esbuild/netbsd-x64@0.24.0':
resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
'@esbuild/netbsd-x64@0.25.9':
resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
'@esbuild/openbsd-arm64@0.24.0':
resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
'@esbuild/openbsd-arm64@0.25.9':
resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
'@esbuild/openbsd-x64@0.21.5':
resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
'@esbuild/openbsd-x64@0.24.0':
resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
'@esbuild/openbsd-x64@0.25.9':
resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
'@esbuild/sunos-x64@0.21.5':
resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
'@esbuild/openharmony-arm64@0.25.9':
resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
'@esbuild/sunos-x64@0.24.0':
resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
'@esbuild/sunos-x64@0.25.9':
resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
'@esbuild/win32-arm64@0.21.5':
resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
'@esbuild/win32-arm64@0.24.0':
resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
'@esbuild/win32-arm64@0.25.9':
resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
'@esbuild/win32-ia32@0.21.5':
resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
'@esbuild/win32-ia32@0.24.0':
resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
'@esbuild/win32-ia32@0.25.9':
resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
'@esbuild/win32-x64@0.21.5':
resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
'@esbuild/win32-x64@0.24.0':
resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
'@esbuild/win32-x64@0.25.9':
resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
'@eslint-community/eslint-utils@4.4.1':
resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
'@eslint-community/eslint-utils@4.7.0':
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -525,41 +237,50 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/config-array@0.18.0':
resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
'@eslint/compat@1.3.2':
resolution: {integrity: sha512-jRNwzTbd6p2Rw4sZ1CgWRS8YMtqG15YyZf7zvb6gY2rB2u6n+2Z+ELW0GtL0fQgyl0pr4Y/BzBfng/BdsereRA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.40 || 9
peerDependenciesMeta:
eslint:
optional: true
'@eslint/config-array@0.21.0':
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.12.0':
resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
'@eslint/config-helpers@0.3.1':
resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.0':
resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==}
'@eslint/core@0.15.2':
resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.11.0':
resolution: {integrity: sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==}
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.33.0':
resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.2.7':
resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
'@eslint/plugin-kit@0.3.5':
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@figma/plugin-typings@1.115.0':
resolution: {integrity: sha512-qAnJuOkZDXKzMacnkugoi9rIIQ9/P3CP0zqsSklXuXhREWsqOTua35Fpkxmp25DHjPqs6tC+eVuVWvKWHHq4pA==}
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
'@floating-ui/core@1.6.9':
resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
'@floating-ui/dom@1.6.13':
resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==}
'@floating-ui/utils@0.2.9':
resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
'@humanfs/node@0.16.6':
resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
engines: {node: '>=18.18.0'}
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
@@ -569,35 +290,29 @@ packages:
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
engines: {node: '>=18.18'}
'@internationalized/date@3.7.0':
resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==}
'@humanwhocodes/retry@0.4.3':
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
'@isaacs/fs-minipass@4.0.1':
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
engines: {node: '>=18.0.0'}
'@jridgewell/gen-mapping@0.3.8':
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
engines: {node: '>=6.0.0'}
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/remapping@2.3.5':
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
'@jridgewell/set-array@1.2.1':
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
'@melt-ui/svelte@0.76.2':
resolution: {integrity: sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==}
peerDependencies:
svelte: '>=3 <5'
'@jridgewell/trace-mapping@0.3.30':
resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -611,295 +326,245 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
'@polka/url@1.0.0-next.28':
resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
'@rollup/plugin-commonjs@28.0.2':
resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==}
engines: {node: '>=16.0.0 || 14 >= 14.17'}
peerDependencies:
rollup: ^2.68.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
'@rollup/plugin-json@6.1.0':
resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
'@rollup/plugin-node-resolve@15.3.1':
resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^2.78.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
'@rollup/pluginutils@5.1.4':
resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
'@rollup/rollup-android-arm-eabi@4.34.8':
resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==}
'@rollup/rollup-android-arm-eabi@4.46.4':
resolution: {integrity: sha512-B2wfzCJ+ps/OBzRjeds7DlJumCU3rXMxJJS1vzURyj7+KBHGONm7c9q1TfdBl4vCuNMkDvARn3PBl2wZzuR5mw==}
cpu: [arm]
os: [android]
'@rollup/rollup-android-arm64@4.34.8':
resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==}
'@rollup/rollup-android-arm64@4.46.4':
resolution: {integrity: sha512-FGJYXvYdn8Bs6lAlBZYT5n+4x0ciEp4cmttsvKAZc/c8/JiPaQK8u0c/86vKX8lA7OY/+37lIQSe0YoAImvBAA==}
cpu: [arm64]
os: [android]
'@rollup/rollup-darwin-arm64@4.34.8':
resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==}
'@rollup/rollup-darwin-arm64@4.46.4':
resolution: {integrity: sha512-/9qwE/BM7ATw/W/OFEMTm3dmywbJyLQb4f4v5nmOjgYxPIGpw7HaxRi6LnD4Pjn/q7k55FGeHe1/OD02w63apA==}
cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.34.8':
resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==}
'@rollup/rollup-darwin-x64@4.46.4':
resolution: {integrity: sha512-QkWfNbeRuzFnv2d0aPlrzcA3Ebq2mE8kX/5Pl7VdRShbPBjSnom7dbT8E3Jmhxo2RL784hyqGvR5KHavCJQciw==}
cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.34.8':
resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==}
'@rollup/rollup-freebsd-arm64@4.46.4':
resolution: {integrity: sha512-+ToyOMYnSfV8D+ckxO6NthPln/PDNp1P6INcNypfZ7muLmEvPKXqduUiD8DlJpMMT8LxHcE5W0dK9kXfJke9Zw==}
cpu: [arm64]
os: [freebsd]
'@rollup/rollup-freebsd-x64@4.34.8':
resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==}
'@rollup/rollup-freebsd-x64@4.46.4':
resolution: {integrity: sha512-cGT6ey/W+sje6zywbLiqmkfkO210FgRz7tepWAzzEVgQU8Hn91JJmQWNqs55IuglG8sJdzk7XfNgmGRtcYlo1w==}
cpu: [x64]
os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.34.8':
resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==}
'@rollup/rollup-linux-arm-gnueabihf@4.46.4':
resolution: {integrity: sha512-9fhTJyOb275w5RofPSl8lpr4jFowd+H4oQKJ9XTYzD1JWgxdZKE8bA6d4npuiMemkecQOcigX01FNZNCYnQBdA==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.34.8':
resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==}
'@rollup/rollup-linux-arm-musleabihf@4.46.4':
resolution: {integrity: sha512-+6kCIM5Zjvz2HwPl/udgVs07tPMIp1VU2Y0c72ezjOvSvEfAIWsUgpcSDvnC7g9NrjYR6X9bZT92mZZ90TfvXw==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.34.8':
resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==}
'@rollup/rollup-linux-arm64-gnu@4.46.4':
resolution: {integrity: sha512-SWuXdnsayCZL4lXoo6jn0yyAj7TTjWE4NwDVt9s7cmu6poMhtiras5c8h6Ih6Y0Zk6Z+8t/mLumvpdSPTWub2Q==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-arm64-musl@4.34.8':
resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==}
'@rollup/rollup-linux-arm64-musl@4.46.4':
resolution: {integrity: sha512-vDknMDqtMhrrroa5kyX6tuC0aRZZlQ+ipDfbXd2YGz5HeV2t8HOl/FDAd2ynhs7Ki5VooWiiZcCtxiZ4IjqZwQ==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-loongarch64-gnu@4.34.8':
resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==}
'@rollup/rollup-linux-loongarch64-gnu@4.46.4':
resolution: {integrity: sha512-mCBkjRZWhvjtl/x+Bd4fQkWZT8canStKDxGrHlBiTnZmJnWygGcvBylzLVCZXka4dco5ymkWhZlLwKCGFF4ivw==}
cpu: [loong64]
os: [linux]
'@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==}
'@rollup/rollup-linux-ppc64-gnu@4.46.4':
resolution: {integrity: sha512-YMdz2phOTFF+Z66dQfGf0gmeDSi5DJzY5bpZyeg9CPBkV9QDzJ1yFRlmi/j7WWRf3hYIWrOaJj5jsfwgc8GTHQ==}
cpu: [ppc64]
os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.34.8':
resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==}
'@rollup/rollup-linux-riscv64-gnu@4.46.4':
resolution: {integrity: sha512-r0WKLSfFAK8ucG024v2yiLSJMedoWvk8yWqfNICX28NHDGeu3F/wBf8KG6mclghx4FsLePxJr/9N8rIj1PtCnw==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.34.8':
resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==}
'@rollup/rollup-linux-riscv64-musl@4.46.4':
resolution: {integrity: sha512-IaizpPP2UQU3MNyPH1u0Xxbm73D+4OupL0bjo4Hm0496e2wg3zuvoAIhubkD1NGy9fXILEExPQy87mweujEatA==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.46.4':
resolution: {integrity: sha512-aCM29orANR0a8wk896p6UEgIfupReupnmISz6SUwMIwTGaTI8MuKdE0OD2LvEg8ondDyZdMvnaN3bW4nFbATPA==}
cpu: [s390x]
os: [linux]
'@rollup/rollup-linux-x64-gnu@4.34.8':
resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==}
'@rollup/rollup-linux-x64-gnu@4.46.4':
resolution: {integrity: sha512-0Xj1vZE3cbr/wda8d/m+UeuSL+TDpuozzdD4QaSzu/xSOMK0Su5RhIkF7KVHFQsobemUNHPLEcYllL7ZTCP/Cg==}
cpu: [x64]
os: [linux]
'@rollup/rollup-linux-x64-musl@4.34.8':
resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==}
'@rollup/rollup-linux-x64-musl@4.46.4':
resolution: {integrity: sha512-kM/orjpolfA5yxsx84kI6bnK47AAZuWxglGKcNmokw2yy9i5eHY5UAjcX45jemTJnfHAWo3/hOoRqEeeTdL5hw==}
cpu: [x64]
os: [linux]
'@rollup/rollup-win32-arm64-msvc@4.34.8':
resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==}
'@rollup/rollup-win32-arm64-msvc@4.46.4':
resolution: {integrity: sha512-cNLH4psMEsWKILW0isbpQA2OvjXLbKvnkcJFmqAptPQbtLrobiapBJVj6RoIvg6UXVp5w0wnIfd/Q56cNpF+Ew==}
cpu: [arm64]
os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.34.8':
resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==}
'@rollup/rollup-win32-ia32-msvc@4.46.4':
resolution: {integrity: sha512-OiEa5lRhiANpv4SfwYVgQ3opYWi/QmPDC5ve21m8G9pf6ZO+aX1g2EEF1/IFaM1xPSP7mK0msTRXlPs6mIagkg==}
cpu: [ia32]
os: [win32]
'@rollup/rollup-win32-x64-msvc@4.34.8':
resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==}
'@rollup/rollup-win32-x64-msvc@4.46.4':
resolution: {integrity: sha512-IKL9mewGZ5UuuX4NQlwOmxPyqielvkAPUS2s1cl6yWjjQvyN3h5JTdVFGD5Jr5xMjRC8setOfGQDVgX8V+dkjg==}
cpu: [x64]
os: [win32]
'@shikijs/core@3.7.0':
resolution: {integrity: sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==}
'@standard-schema/spec@1.0.0':
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
'@shikijs/engine-javascript@3.7.0':
resolution: {integrity: sha512-0t17s03Cbv+ZcUvv+y33GtX75WBLQELgNdVghnsdhTgU3hVcWcMsoP6Lb0nDTl95ZJfbP1mVMO0p3byVh3uuzA==}
'@sveltejs/acorn-typescript@1.0.5':
resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==}
peerDependencies:
acorn: ^8.9.0
'@shikijs/engine-oniguruma@3.7.0':
resolution: {integrity: sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==}
'@shikijs/langs@3.7.0':
resolution: {integrity: sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==}
'@shikijs/themes@3.7.0':
resolution: {integrity: sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==}
'@shikijs/types@3.7.0':
resolution: {integrity: sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
'@svelte-dev/pretty-code@1.0.0':
resolution: {integrity: sha512-4dFacn9fv7SNK0kp6VjZeSQd9e7ISihaC3l/I7fB6sAAObZt5hRkbFeU2pM2kUlpjzRPGaYuXlWfYj7dLFvPHA==}
'@sveltejs/adapter-auto@3.2.5':
resolution: {integrity: sha512-27LR+uKccZ62lgq4N/hvyU2G+hTP9fxWEAfnZcl70HnyfAjMSsGk1z/SjAPXNCD1mVJIE7IFu3TQ8cQ/UH3c0A==}
'@sveltejs/adapter-auto@6.1.0':
resolution: {integrity: sha512-shOuLI5D2s+0zTv2ab5M5PqfknXqWbKi+0UwB9yLTRIdzsK1R93JOO8jNhIYSHdW+IYXIYnLniu+JZqXs7h9Wg==}
peerDependencies:
'@sveltejs/kit': ^2.0.0
'@sveltejs/adapter-node@5.2.5':
resolution: {integrity: sha512-FVeysFqeIlKFpDF1Oj38gby34f6uA9FuXnV330Z0RHmSyOR9JzJs70/nFKy1Ue3fWtf7S0RemOrP66Vr9Jcmew==}
peerDependencies:
'@sveltejs/kit': ^2.4.0
'@sveltejs/kit@2.5.28':
resolution: {integrity: sha512-/O7pvFGBsQPcFa9UrW8eUC5uHTOXLsUp3SN0dY6YmRAL9nfPSrJsSJk//j5vMpinSshzUjteAFcfQTU+04Ka1w==}
'@sveltejs/kit@2.36.1':
resolution: {integrity: sha512-dldNCtSIpaGxQMEfHaUxSPH/k3uU28pTZwtKzfkn8fqpOjWufKlMBeIL7FJ/s93dOrhEq41zaQYkXh+XTgEgVw==}
engines: {node: '>=18.13'}
hasBin: true
peerDependencies:
'@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1
'@opentelemetry/api': ^1.0.0
'@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.3
vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0
peerDependenciesMeta:
'@opentelemetry/api':
optional: true
'@sveltejs/vite-plugin-svelte-inspector@2.1.0':
resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==}
engines: {node: ^18.0.0 || >=20}
'@sveltejs/vite-plugin-svelte-inspector@5.0.1':
resolution: {integrity: sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==}
engines: {node: ^20.19 || ^22.12 || >=24}
peerDependencies:
'@sveltejs/vite-plugin-svelte': ^3.0.0
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
'@sveltejs/vite-plugin-svelte': ^6.0.0-next.0
svelte: ^5.0.0
vite: ^6.3.0 || ^7.0.0
'@sveltejs/vite-plugin-svelte@3.1.2':
resolution: {integrity: sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==}
engines: {node: ^18.0.0 || >=20}
'@sveltejs/vite-plugin-svelte@6.1.3':
resolution: {integrity: sha512-3pppgIeIZs6nrQLazzKcdnTJ2IWiui/UucEPXKyFG35TKaHQrfkWBnv6hyJcLxFuR90t+LaoecrqTs8rJKWfSQ==}
engines: {node: ^20.19 || ^22.12 || >=24}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
svelte: ^5.0.0
vite: ^6.3.0 || ^7.0.0
'@svgr/babel-plugin-add-jsx-attribute@8.0.0':
resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==}
engines: {node: '>=14'}
'@tailwindcss/node@4.1.12':
resolution: {integrity: sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==}
'@tailwindcss/oxide-android-arm64@4.1.12':
resolution: {integrity: sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [android]
'@tailwindcss/oxide-darwin-arm64@4.1.12':
resolution: {integrity: sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@tailwindcss/oxide-darwin-x64@4.1.12':
resolution: {integrity: sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
'@tailwindcss/oxide-freebsd-x64@4.1.12':
resolution: {integrity: sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==}
engines: {node: '>= 10'}
cpu: [x64]
os: [freebsd]
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
resolution: {integrity: sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
'@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
resolution: {integrity: sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@tailwindcss/oxide-linux-arm64-musl@4.1.12':
resolution: {integrity: sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@tailwindcss/oxide-linux-x64-gnu@4.1.12':
resolution: {integrity: sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@tailwindcss/oxide-linux-x64-musl@4.1.12':
resolution: {integrity: sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@tailwindcss/oxide-wasm32-wasi@4.1.12':
resolution: {integrity: sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
bundledDependencies:
- '@napi-rs/wasm-runtime'
- '@emnapi/core'
- '@emnapi/runtime'
- '@tybys/wasm-util'
- '@emnapi/wasi-threads'
- tslib
'@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
resolution: {integrity: sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
'@tailwindcss/oxide-win32-x64-msvc@4.1.12':
resolution: {integrity: sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
'@tailwindcss/oxide@4.1.12':
resolution: {integrity: sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==}
engines: {node: '>= 10'}
'@tailwindcss/vite@4.1.12':
resolution: {integrity: sha512-4pt0AMFDx7gzIrAOIYgYP0KCBuKWqyW8ayrdiLEjoJTT4pKTjrzG/e4uzWtTLDziC+66R9wbUqZBccJalSE5vQ==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-remove-jsx-attribute@8.0.0':
resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0':
resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0':
resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-svg-dynamic-title@8.0.0':
resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-svg-em-dimensions@8.0.0':
resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-transform-react-native-svg@8.1.0':
resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-plugin-transform-svg-component@8.0.0':
resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==}
engines: {node: '>=12'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/babel-preset@8.1.0':
resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==}
engines: {node: '>=14'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@svgr/core@8.1.0':
resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==}
engines: {node: '>=14'}
'@svgr/hast-util-to-babel-ast@8.0.0':
resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==}
engines: {node: '>=14'}
'@svgr/plugin-jsx@8.1.0':
resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==}
engines: {node: '>=14'}
peerDependencies:
'@svgr/core': '*'
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
'@tailwindcss/typography@0.5.16':
resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1'
vite: ^5.2.0 || ^6 || ^7
'@types/cookie@0.6.0':
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
'@types/downloadjs@1.4.6':
resolution: {integrity: sha512-mp3w70vsaiLRT9ix92fmI9Ob2yJAPZm6tShJtofo2uHbN11G2i6a0ApIEjBl/kv3e9V7Pv7jMjk1bUwYWvMHvA==}
'@types/eslint@9.6.1':
resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -907,165 +572,85 @@ packages:
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
'@types/node@22.5.5':
resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==}
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
'@types/unist@2.0.11':
resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
'@typescript-eslint/eslint-plugin@8.6.0':
resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==}
'@typescript-eslint/eslint-plugin@8.40.0':
resolution: {integrity: sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
'@typescript-eslint/parser': ^8.40.0
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.6.0':
resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==}
'@typescript-eslint/parser@8.40.0':
resolution: {integrity: sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.6.0':
resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.6.0':
resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==}
'@typescript-eslint/project-service@8.40.0':
resolution: {integrity: sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/types@8.6.0':
resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==}
'@typescript-eslint/scope-manager@8.40.0':
resolution: {integrity: sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.6.0':
resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==}
'@typescript-eslint/tsconfig-utils@8.40.0':
resolution: {integrity: sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.6.0':
resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==}
'@typescript-eslint/type-utils@8.40.0':
resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.6.0':
resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==}
'@typescript-eslint/types@8.40.0':
resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
'@upstash/core-analytics@0.0.10':
resolution: {integrity: sha512-7qJHGxpQgQr9/vmeS1PktEwvNAF7TI4iJDi8Pu2CFZ9YUGHZH4fOP5TfYlZ4aVxfopnELiE4BS4FBjyK7V1/xQ==}
engines: {node: '>=16.0.0'}
'@upstash/ratelimit@2.0.6':
resolution: {integrity: sha512-Uak5qklMfzFN5RXltxY6IXRENu+Hgmo9iEgMPOlUs2etSQas2N+hJfbHw37OUy4vldLRXeD0OzL+YRvO2l5acg==}
'@typescript-eslint/typescript-estree@8.40.0':
resolution: {integrity: sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@upstash/redis': ^1.34.3
typescript: '>=4.8.4 <6.0.0'
'@upstash/redis@1.35.3':
resolution: {integrity: sha512-hSjv66NOuahW3MisRGlSgoszU2uONAY2l5Qo3Sae8OT3/Tng9K+2/cBRuyPBX8egwEGcNNCF9+r0V6grNnhL+w==}
'@vitest/expect@2.1.1':
resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==}
'@vitest/mocker@2.1.1':
resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==}
'@typescript-eslint/utils@8.40.0':
resolution: {integrity: sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@vitest/spy': 2.1.1
msw: ^2.3.5
vite: ^5.0.0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@vitest/pretty-format@2.1.1':
resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==}
'@vitest/pretty-format@2.1.9':
resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
'@vitest/runner@2.1.1':
resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==}
'@vitest/snapshot@2.1.1':
resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==}
'@vitest/spy@2.1.1':
resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==}
'@vitest/utils@2.1.1':
resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==}
'@typescript-eslint/visitor-keys@8.40.0':
resolution: {integrity: sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.14.0:
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
ansi-regex@6.1.0:
resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
engines: {node: '>=12'}
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -1073,119 +658,43 @@ packages:
resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
engines: {node: '>= 0.4'}
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
autoprefixer@10.4.21:
resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
postcss: ^8.1.0
axobject-query@4.1.0:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
bits-ui@0.22.0:
resolution: {integrity: sha512-r7Fw1HNgA4YxZBRcozl7oP0bheQ8EHh+kfMBZJgyFISix8t4p/nqDcHLmBgIiJ3T5XjYnJRorYDjIWaCfhb5fw==}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
browserslist@4.24.4:
resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
camelcase-css@2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
camelcase@6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
caniuse-lite@1.0.30001700:
resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==}
caniuse-lite@1.0.30001715:
resolution: {integrity: sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
chai@5.2.0:
resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==}
engines: {node: '>=12'}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
character-entities-html4@2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
character-entities-legacy@3.0.0:
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
character-entities@2.0.2:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
check-error@2.1.1:
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
engines: {node: '>= 16'}
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
chokidar@4.0.3:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
chownr@3.0.0:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'}
clsx@2.1.1:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
code-red@1.0.4:
resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -1193,81 +702,24 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
concurrently@9.0.1:
resolution: {integrity: sha512-wYKvCd/f54sTXJMSfV6Ln/B8UrfLBKOYa+lzc6CHay3Qek+LorVSBdMVfyewFhRbH0Rbabsk4D+3PL/VjQ5gzg==}
engines: {node: '>=18'}
hasBin: true
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
cookie@0.6.0:
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
engines: {node: '>= 0.6'}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
cosmiconfig@8.3.6:
resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
engines: {node: '>=14'}
peerDependencies:
typescript: '>=4.9.5'
peerDependenciesMeta:
typescript:
optional: true
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
css-select@5.2.2:
resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
css-tree@2.2.1:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
css-tree@2.3.1:
resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
css-tree@3.1.0:
resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
css-what@6.2.2:
resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
engines: {node: '>= 6'}
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
hasBin: true
csso@5.0.5:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
debug@4.4.0:
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
debug@4.4.1:
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -1275,13 +727,6 @@ packages:
supports-color:
optional: true
decode-named-character-reference@1.0.2:
resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
deep-eql@5.0.2:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -1289,122 +734,56 @@ packages:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
detect-libc@2.0.4:
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
engines: {node: '>=8'}
devalue@5.1.1:
resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
enhanced-resolve@5.18.3:
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'}
didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
domhandler@5.0.3:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
dot-case@3.0.4:
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
downloadjs@1.4.7:
resolution: {integrity: sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q==}
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
electron-to-chromium@1.5.104:
resolution: {integrity: sha512-Us9M2L4cO/zMBqVkJtnj353nQhMju9slHm62NprKTmdF3HH8wYOtNvDFq/JB2+ZRoGLzdvYDiATlMHs98XBM1g==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
esbuild@0.21.5:
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
engines: {node: '>=12'}
hasBin: true
esbuild@0.24.0:
resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
esbuild@0.25.9:
resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==}
engines: {node: '>=18'}
hasBin: true
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
eslint-compat-utils@0.5.1:
resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==}
engines: {node: '>=12'}
peerDependencies:
eslint: '>=6.0.0'
eslint-config-prettier@9.1.0:
resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
eslint-config-prettier@10.1.8:
resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
eslint-plugin-svelte@2.44.0:
resolution: {integrity: sha512-wav4MOs02vBb1WjvTCYItwJCxMkuk2Z4p+K/eyjL0N/z7ahXLP+0LtQQjiKc2ezuif7GnZLbD1F3o1VHzSvdVg==}
engines: {node: ^14.17.0 || >=16.0.0}
eslint-plugin-svelte@3.11.0:
resolution: {integrity: sha512-KliWlkieHyEa65aQIkRwUFfHzT5Cn4u3BQQsu3KlkJOs7c1u7ryn84EWaOjEzilbKgttT4OfBURA8Uc4JBSQIw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191
eslint: ^8.57.1 || ^9.0.0
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
peerDependenciesMeta:
svelte:
optional: true
eslint-scope@7.2.2:
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-scope@8.2.0:
resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
eslint-scope@8.4.0:
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-visitor-keys@4.2.0:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
eslint-visitor-keys@4.2.1:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.11.0:
resolution: {integrity: sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA==}
eslint@9.33.0:
resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -1416,18 +795,17 @@ packages:
esm-env@1.2.2:
resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
espree@10.3.0:
resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
espree@10.4.0:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
espree@9.6.1:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
esrap@2.1.0:
resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==}
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
@@ -1436,19 +814,10 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -1462,11 +831,12 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
fastq@1.19.0:
resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
fdir@6.4.3:
resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
@@ -1492,39 +862,11 @@ packages:
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
focus-trap@7.6.4:
resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==}
foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
fuse.js@7.1.0:
resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==}
engines: {node: '>=10'}
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -1533,27 +875,16 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
globals@15.9.0:
resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==}
globals@16.3.0:
resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==}
engines: {node: '>=18'}
globalyzer@0.1.0:
resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
@@ -1562,150 +893,57 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
hast-util-from-html@2.0.3:
resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==}
hast-util-from-parse5@8.0.3:
resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
hast-util-heading-rank@3.0.0:
resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
hast-util-is-element@3.0.0:
resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
hast-util-parse-selector@4.0.0:
resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
hast-util-to-html@9.0.5:
resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
hast-util-to-string@3.0.1:
resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
hastscript@9.0.1:
resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
immediate@3.0.6:
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
ignore@7.0.5:
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'}
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
import-meta-resolve@4.1.0:
resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
is-core-module@2.16.1:
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines: {node: '>= 0.4'}
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
is-module@1.0.0:
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
is-reference@1.2.1:
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
is-reference@3.0.3:
resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
jiti@1.21.7:
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
jiti@2.5.1:
resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
hasBin: true
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'}
hasBin: true
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
jszip@3.10.1:
resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
@@ -1713,27 +951,81 @@ packages:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
known-css-properties@0.34.0:
resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==}
known-css-properties@0.37.0:
resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==}
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
lie@3.3.0:
resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
lightningcss-darwin-arm64@1.30.1:
resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [darwin]
lightningcss-darwin-x64@1.30.1:
resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [darwin]
lightningcss-freebsd-x64@1.30.1:
resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [freebsd]
lightningcss-linux-arm-gnueabihf@1.30.1:
resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
engines: {node: '>= 12.0.0'}
cpu: [arm]
os: [linux]
lightningcss-linux-arm64-gnu@1.30.1:
resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
lightningcss-linux-arm64-musl@1.30.1:
resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
lightningcss-linux-x64-gnu@1.30.1:
resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
lightningcss-linux-x64-musl@1.30.1:
resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
lightningcss-win32-arm64-msvc@1.30.1:
resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [win32]
lightningcss-win32-x64-msvc@1.30.1:
resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [win32]
lightningcss@1.30.1:
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
engines: {node: '>= 12.0.0'}
lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
locate-character@3.0.0:
resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
@@ -1741,91 +1033,14 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
lodash.castarray@4.4.0:
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
loupe@3.1.3:
resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
lucide-svelte@0.525.0:
resolution: {integrity: sha512-kfuN6JcCqTfCz2B76aXnyGLAzEBRSYw5GaUspM5RNHQZS5aI5yaKu06fbaofOk8cDvUtY0AUm/zAix7aUX6Q3A==}
peerDependencies:
svelte: ^3 || ^4 || ^5.0.0-next.42
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
mdast-util-find-and-replace@3.0.2:
resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
mdast-util-from-markdown@2.0.2:
resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
mdast-util-gfm-autolink-literal@2.0.1:
resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
mdast-util-gfm-footnote@2.1.0:
resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
mdast-util-gfm-strikethrough@2.0.0:
resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
mdast-util-gfm-table@2.0.0:
resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
mdast-util-gfm-task-list-item@2.0.0:
resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
mdast-util-gfm@3.1.0:
resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
mdast-util-phrasing@4.1.0:
resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
mdast-util-to-hast@13.2.0:
resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
mdast-util-to-markdown@2.1.2:
resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
mdn-data@2.0.30:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
mdsvex@0.12.5:
resolution: {integrity: sha512-JQy8CBbGF1IvpxZTmGJigRiD1s2BKfLKS9xCLPKngjHToY8WMYLZ8WFGRpuR6x4C4bxipSuLm2LctwL2fVXaEQ==}
mdsvex@0.12.6:
resolution: {integrity: sha512-pupx2gzWh3hDtm/iDW4WuCpljmyHbHi34r7ktOqpPGvyiM4MyfNgdJ3qMizXdgCErmvYC9Nn/qyjePy+4ss9Wg==}
peerDependencies:
svelte: ^3.56.0 || ^4.0.0 || ^5.0.0-next.120
@@ -1833,90 +1048,6 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
micromark-core-commonmark@2.0.2:
resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==}
micromark-extension-gfm-autolink-literal@2.1.0:
resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
micromark-extension-gfm-footnote@2.1.0:
resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
micromark-extension-gfm-strikethrough@2.1.0:
resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
micromark-extension-gfm-table@2.1.1:
resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
micromark-extension-gfm-tagfilter@2.0.0:
resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
micromark-extension-gfm-task-list-item@2.1.0:
resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
micromark-factory-destination@2.0.1:
resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
micromark-factory-label@2.0.1:
resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
micromark-factory-space@2.0.1:
resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
micromark-factory-title@2.0.1:
resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
micromark-factory-whitespace@2.0.1:
resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
micromark-util-character@2.1.1:
resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
micromark-util-chunked@2.0.1:
resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
micromark-util-classify-character@2.0.1:
resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
micromark-util-combine-extensions@2.0.1:
resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
micromark-util-decode-numeric-character-reference@2.0.2:
resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
micromark-util-decode-string@2.0.1:
resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
micromark-util-encode@2.0.1:
resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
micromark-util-html-tag-name@2.0.1:
resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
micromark-util-normalize-identifier@2.0.1:
resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
micromark-util-resolve-all@2.0.1:
resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
micromark-util-sanitize-uri@2.0.1:
resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
micromark-util-subtokenize@2.0.4:
resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==}
micromark-util-symbol@2.0.1:
resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
micromark-util-types@2.0.1:
resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==}
micromark@4.0.1:
resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==}
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
@@ -1932,10 +1063,14 @@ packages:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
mode-watcher@0.5.1:
resolution: {integrity: sha512-adEC6T7TMX/kzQlaO/MtiQOSFekZfQu4MC+lXyoceQG+U5sKpJWZ4yKXqw846ExIuWJgedkOIPqAYYRk/xHm+w==}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.1
minizlib@3.0.2:
resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==}
engines: {node: '>= 18'}
mkdirp@3.0.1:
resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
engines: {node: '>=10'}
hasBin: true
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
@@ -1948,53 +1083,14 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
nanoid@3.3.8:
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
nanoid@5.1.2:
resolution: {integrity: sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==}
engines: {node: ^18 || >=20}
hasBin: true
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
node-releases@2.0.19:
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
normalize-range@0.1.2:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
engines: {node: '>=0.10.0'}
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
object-hash@3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
oniguruma-parser@0.12.1:
resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
oniguruma-to-es@4.3.3:
resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==}
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -2007,26 +1103,10 @@ packages:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
pako@1.0.11:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
parse-numeric-range@1.3.0:
resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==}
parse5@7.2.1:
resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -2035,27 +1115,6 @@ packages:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
path-scurry@1.11.1:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
pathval@2.0.0:
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
engines: {node: '>= 14.16'}
periscopic@3.1.0:
resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -2063,30 +1122,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
picomatch@4.0.2:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
pirates@4.0.6:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
postcss-import@15.1.0:
resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
engines: {node: '>=14.0.0'}
peerDependencies:
postcss: ^8.0.0
postcss-js@4.0.1:
resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
engines: {node: ^12 || ^14 || >= 16}
peerDependencies:
postcss: ^8.4.21
postcss-load-config@3.1.4:
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
engines: {node: '>= 10'}
@@ -2099,29 +1138,11 @@ packages:
ts-node:
optional: true
postcss-load-config@4.0.2:
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
engines: {node: '>= 14'}
postcss-safe-parser@7.0.1:
resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==}
engines: {node: '>=18.0'}
peerDependencies:
postcss: '>=8.0.9'
ts-node: '>=9.0.0'
peerDependenciesMeta:
postcss:
optional: true
ts-node:
optional: true
postcss-nested@6.2.0:
resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
postcss-safe-parser@6.0.0:
resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.3.3
postcss: ^8.4.31
postcss-scss@4.0.9:
resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==}
@@ -2129,40 +1150,35 @@ packages:
peerDependencies:
postcss: ^8.4.29
postcss-selector-parser@6.0.10:
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
postcss-selector-parser@7.1.0:
resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
engines: {node: '>=4'}
postcss-selector-parser@6.1.2:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines: {node: '>=4'}
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
postcss@8.5.3:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
prettier-plugin-svelte@3.2.6:
resolution: {integrity: sha512-Y1XWLw7vXUQQZmgv1JAEiLcErqUniAF2wO7QJsw8BVMvpLET2dI5WpEIEJx1r11iHVdSMzQxivyfrH9On9t2IQ==}
prettier-plugin-svelte@3.4.0:
resolution: {integrity: sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==}
peerDependencies:
prettier: ^3.0.0
svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
prettier-plugin-tailwindcss@0.6.6:
resolution: {integrity: sha512-OPva5S7WAsPLEsOuOWXATi13QrCKACCiIonFgIR6V4lYv4QLp++UXVhZSzRbZxXGimkQtQT86CC6fQqTOybGng==}
prettier-plugin-tailwindcss@0.6.14:
resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==}
engines: {node: '>=14.21.3'}
peerDependencies:
'@ianvs/prettier-plugin-sort-imports': '*'
'@prettier/plugin-hermes': '*'
'@prettier/plugin-oxc': '*'
'@prettier/plugin-pug': '*'
'@shopify/prettier-plugin-liquid': '*'
'@trivago/prettier-plugin-sort-imports': '*'
'@zackad/prettier-plugin-twig-melody': '*'
'@zackad/prettier-plugin-twig': '*'
prettier: ^3.0
prettier-plugin-astro: '*'
prettier-plugin-css-order: '*'
@@ -2178,13 +1194,17 @@ packages:
peerDependenciesMeta:
'@ianvs/prettier-plugin-sort-imports':
optional: true
'@prettier/plugin-hermes':
optional: true
'@prettier/plugin-oxc':
optional: true
'@prettier/plugin-pug':
optional: true
'@shopify/prettier-plugin-liquid':
optional: true
'@trivago/prettier-plugin-sort-imports':
optional: true
'@zackad/prettier-plugin-twig-melody':
'@zackad/prettier-plugin-twig':
optional: true
prettier-plugin-astro:
optional: true
@@ -2209,24 +1229,18 @@ packages:
prettier-plugin-svelte:
optional: true
prettier@3.3.3:
resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
prettier@3.6.2:
resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
engines: {node: '>=14'}
hasBin: true
prism-svelte@0.4.7:
resolution: {integrity: sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==}
prismjs@1.29.0:
resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
prismjs@1.30.0:
resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
engines: {node: '>=6'}
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
property-information@7.0.0:
resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -2234,112 +1248,38 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
readdirp@4.1.2:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
regex-recursion@6.0.2:
resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
regex-utilities@2.3.0:
resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
regex@6.0.1:
resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==}
rehype-autolink-headings@7.1.0:
resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==}
rehype-parse@9.0.1:
resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==}
rehype-pretty-code@0.12.6:
resolution: {integrity: sha512-AW18s4eXwnb4PGwL0Y8BoUzBJr23epWNXndCKaZ52S4kl/4tsgM+406oCp5NdtPZsB0ItpaY+hCMv3kw58DLrA==}
engines: {node: '>=18'}
peerDependencies:
shikiji: ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0
rehype-slug@6.0.0:
resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
rehype-stringify@10.0.1:
resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==}
remark-gfm@4.0.1:
resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
remark-parse@11.0.0:
resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
remark-rehype@11.1.1:
resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
resolve@1.22.10:
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
engines: {node: '>= 0.4'}
hasBin: true
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rollup@4.34.8:
resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==}
rollup@4.46.4:
resolution: {integrity: sha512-YbxoxvoqNg9zAmw4+vzh1FkGAiZRK+LhnSrbSrSXMdZYsRPDWoshcSd/pldKRO6lWzv/e9TiJAVQyirYIeSIPQ==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
rxjs@7.8.2:
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
sade@1.8.1:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
engines: {node: '>=6'}
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
sax@1.4.1:
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
semver@7.7.1:
resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
semver@7.7.2:
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
engines: {node: '>=10'}
hasBin: true
set-cookie-parser@2.7.1:
resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
setimmediate@1.0.5:
resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -2348,187 +1288,57 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
shell-quote@1.8.2:
resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==}
engines: {node: '>= 0.4'}
shiki@3.7.0:
resolution: {integrity: sha512-ZcI4UT9n6N2pDuM2n3Jbk0sR4Swzq43nLPgS/4h0E3B/NrFn2HKElrDtceSf8Zx/OWYOo7G1SAtBLypCp+YXqg==}
shikiji-core@0.10.2:
resolution: {integrity: sha512-9Of8HMlF96usXJHmCL3Gd0Fcf0EcyJUF9m8EoAKKd98mHXi0La2AZl1h6PegSFGtiYcBDK/fLuKbDa1l16r1fA==}
deprecated: Deprecated, use @shikijs/core instead
shikiji@0.10.2:
resolution: {integrity: sha512-wtZg3T0vtYV2PnqusWQs3mDaJBdCPWxFDrBM/SE5LfrX92gjUvfEMlc+vJnoKY6Z/S44OWaCRzNIsdBRWcTAiw==}
deprecated: Deprecated, use shiki instead
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
sirv@2.0.4:
resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
engines: {node: '>= 10'}
snake-case@3.0.4:
resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
sirv@3.0.1:
resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
engines: {node: '>=18'}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
std-env@3.8.0:
resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
string-width@5.1.2:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
strip-ansi@7.1.0:
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
engines: {node: '>=12'}
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
sucrase@3.35.0:
resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
supports-color@8.1.1:
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
engines: {node: '>=10'}
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
svelte-check@4.0.9:
resolution: {integrity: sha512-SVNCz2L+9ZELGli7G0n3B3QE5kdf0u27RtKr2ZivWQhcWIXatZxwM4VrQ6AiA2k9zKp2mk5AxkEhdjbpjv7rEw==}
svelte-check@4.3.1:
resolution: {integrity: sha512-lkh8gff5gpHLjxIV+IaApMxQhTGnir2pNUAqcNgeKkvK5bT/30Ey/nzBxNLDlkztCH4dP7PixkMt9SWEKFPBWg==}
engines: {node: '>= 18.0.0'}
hasBin: true
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.0
typescript: '>=5.0.0'
svelte-eslint-parser@0.41.1:
resolution: {integrity: sha512-08ndI6zTghzI8SuJAFpvMbA/haPSGn3xz19pjre19yYMw8Nw/wQJ2PrZBI/L8ijGTgtkWCQQiLLy+Z1tfaCwNA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
svelte-eslint-parser@1.3.1:
resolution: {integrity: sha512-0Iztj5vcOVOVkhy1pbo5uA9r+d3yaVoE5XPc9eABIWDOSJZ2mOsZ4D+t45rphWCOr0uMw3jtSG2fh2e7GvKnPg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
peerDependenciesMeta:
svelte:
optional: true
svelte-hmr@0.16.0:
resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==}
engines: {node: ^12.20 || ^14.13.1 || >= 16}
peerDependencies:
svelte: ^3.19.0 || ^4.0.0
svelte@5.38.2:
resolution: {integrity: sha512-iAcp/oFAWauVSGILdD67n7DiwgLHXZzWZIdzl7araRxu72jUr7PFAo2Iie7gXt0IbnlYvhxCb9GT3ZJUquO3PA==}
engines: {node: '>=18'}
svelte-sonner@0.3.28:
resolution: {integrity: sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==}
peerDependencies:
svelte: ^3.0.0 || ^4.0.0 || ^5.0.0-next.1
tailwindcss@4.1.12:
resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==}
svelte@4.2.20:
resolution: {integrity: sha512-eeEgGc2DtiUil5ANdtd8vPwt9AgaMdnuUFnPft9F5oMvU/FHu5IHFic+p1dR/UOB7XU2mX2yHW+NcTch4DCh5Q==}
engines: {node: '>=16'}
tapable@2.2.2:
resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
engines: {node: '>=6'}
sveltekit-search-params@3.0.0:
resolution: {integrity: sha512-wq1Yo5zITev8ty9CWGmHgvAh+Xb3mCUewyUmvCdv6MJWi+/aZ4o79Y6SjuduDL0Cfd/KYHkqt4f/wQ4FtokSdw==}
peerDependencies:
'@sveltejs/kit': ^1.0.0 || ^2.0.0
svelte: ^3.55.0 || ^4.0.0 || ^5.0.0
tar@7.4.3:
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
engines: {node: '>=18'}
svg-parser@2.0.4:
resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
svgo@4.0.0:
resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==}
engines: {node: '>=16'}
hasBin: true
tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
tailwind-merge@2.5.4:
resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==}
tailwind-merge@2.6.0:
resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
tailwind-variants@0.3.1:
resolution: {integrity: sha512-krn67M3FpPwElg4FsZrOQd0U26o7UDH/QOkK8RNaiCCrr052f6YJPBUfNKnPo/s/xRzNPtv1Mldlxsg8Tb46BQ==}
engines: {node: '>=16.x', pnpm: '>=7.x'}
peerDependencies:
tailwindcss: '*'
tailwindcss@3.4.17:
resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
engines: {node: '>=14.0.0'}
hasBin: true
text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
tiny-glob@0.2.9:
resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
tinyexec@0.3.2:
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
tinypool@1.0.2:
resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
engines: {node: ^18.0.0 || >=20.0.0}
tinyrainbow@1.2.0:
resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
engines: {node: '>=14.0.0'}
tinyspy@3.0.2:
resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
engines: {node: '>=14.0.0'}
tinyglobby@0.2.14:
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
engines: {node: '>=12.0.0'}
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
@@ -2538,130 +1348,70 @@ packages:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
ts-api-utils@1.4.3:
resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
engines: {node: '>=16'}
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.2.0'
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
tslib@2.7.0:
resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
typescript: '>=4.8.4'
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
typescript-eslint@8.6.0:
resolution: {integrity: sha512-eEhhlxCEpCd4helh3AO1hk0UP2MvbRi9CtIAJTVPQjuSXOOO2jsEacNi4UdcJzZJbeuVg1gMhtZ8UYb+NFYPrA==}
typescript-eslint@8.40.0:
resolution: {integrity: sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
typescript@5.6.2:
resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
typescript@5.9.2:
resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
engines: {node: '>=14.17'}
hasBin: true
uncrypto@0.1.3:
resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
undici-types@6.19.8:
resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
unist-util-is@4.1.0:
resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
unist-util-is@6.0.0:
resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
unist-util-position@5.0.0:
resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
unist-util-stringify-position@2.0.3:
resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
unist-util-visit-parents@3.1.1:
resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==}
unist-util-visit-parents@6.0.1:
resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
unist-util-visit@2.0.3:
resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==}
unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
update-browserslist-db@1.1.2:
resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
vfile-location@5.0.3:
resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
vfile-message@2.0.4:
resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==}
vfile-message@4.0.2:
resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
vite-node@2.1.1:
resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
vite@5.4.7:
resolution: {integrity: sha512-5l2zxqMEPVENgvzTuBpHer2awaetimj2BGkhBPdnwKbPNOlHsODU+oiazEZzLK7KhAnOrO+XGYJYn4ZlUhDtDQ==}
engines: {node: ^18.0.0 || >=20.0.0}
vite@7.1.3:
resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@types/node': ^18.0.0 || >=20.0.0
less: '*'
'@types/node': ^20.19.0 || >=22.12.0
jiti: '>=1.21.0'
less: ^4.0.0
lightningcss: ^1.21.0
sass: '*'
sass-embedded: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
sass: ^1.70.0
sass-embedded: ^1.70.0
stylus: '>=0.54.8'
sugarss: ^5.0.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
peerDependenciesMeta:
'@types/node':
optional: true
jiti:
optional: true
less:
optional: true
lightningcss:
@@ -2676,368 +1426,153 @@ packages:
optional: true
terser:
optional: true
tsx:
optional: true
yaml:
optional: true
vitefu@0.2.5:
resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
vitefu@1.1.1:
resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==}
peerDependencies:
vite: ^3.0.0 || ^4.0.0 || ^5.0.0
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0
peerDependenciesMeta:
vite:
optional: true
vitest@2.1.1:
resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@types/node': ^18.0.0 || >=20.0.0
'@vitest/browser': 2.1.1
'@vitest/ui': 2.1.1
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
'@edge-runtime/vm':
optional: true
'@types/node':
optional: true
'@vitest/browser':
optional: true
'@vitest/ui':
optional: true
happy-dom:
optional: true
jsdom:
optional: true
web-namespaces@2.0.1:
resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
why-is-node-running@2.3.0:
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
engines: {node: '>=8'}
hasBin: true
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
wrap-ansi@8.1.0:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
yallist@5.0.0:
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
engines: {node: '>=18'}
yaml@1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'}
yaml@2.7.0:
resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==}
engines: {node: '>= 14'}
hasBin: true
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
zimmerframe@1.1.2:
resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==}
snapshots:
'@alloc/quick-lru@5.2.0': {}
'@esbuild/aix-ppc64@0.25.9':
optional: true
'@ampproject/remapping@2.3.0':
'@esbuild/android-arm64@0.25.9':
optional: true
'@esbuild/android-arm@0.25.9':
optional: true
'@esbuild/android-x64@0.25.9':
optional: true
'@esbuild/darwin-arm64@0.25.9':
optional: true
'@esbuild/darwin-x64@0.25.9':
optional: true
'@esbuild/freebsd-arm64@0.25.9':
optional: true
'@esbuild/freebsd-x64@0.25.9':
optional: true
'@esbuild/linux-arm64@0.25.9':
optional: true
'@esbuild/linux-arm@0.25.9':
optional: true
'@esbuild/linux-ia32@0.25.9':
optional: true
'@esbuild/linux-loong64@0.25.9':
optional: true
'@esbuild/linux-mips64el@0.25.9':
optional: true
'@esbuild/linux-ppc64@0.25.9':
optional: true
'@esbuild/linux-riscv64@0.25.9':
optional: true
'@esbuild/linux-s390x@0.25.9':
optional: true
'@esbuild/linux-x64@0.25.9':
optional: true
'@esbuild/netbsd-arm64@0.25.9':
optional: true
'@esbuild/netbsd-x64@0.25.9':
optional: true
'@esbuild/openbsd-arm64@0.25.9':
optional: true
'@esbuild/openbsd-x64@0.25.9':
optional: true
'@esbuild/openharmony-arm64@0.25.9':
optional: true
'@esbuild/sunos-x64@0.25.9':
optional: true
'@esbuild/win32-arm64@0.25.9':
optional: true
'@esbuild/win32-ia32@0.25.9':
optional: true
'@esbuild/win32-x64@0.25.9':
optional: true
'@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.5.1))':
dependencies:
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
'@babel/code-frame@7.26.2':
dependencies:
'@babel/helper-validator-identifier': 7.25.9
js-tokens: 4.0.0
picocolors: 1.1.1
'@babel/compat-data@7.26.8': {}
'@babel/core@7.26.9':
dependencies:
'@ampproject/remapping': 2.3.0
'@babel/code-frame': 7.26.2
'@babel/generator': 7.26.9
'@babel/helper-compilation-targets': 7.26.5
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9)
'@babel/helpers': 7.26.9
'@babel/parser': 7.26.9
'@babel/template': 7.26.9
'@babel/traverse': 7.26.9
'@babel/types': 7.26.9
convert-source-map: 2.0.0
debug: 4.4.0
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
'@babel/generator@7.26.9':
dependencies:
'@babel/parser': 7.26.9
'@babel/types': 7.26.9
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
jsesc: 3.1.0
'@babel/helper-compilation-targets@7.26.5':
dependencies:
'@babel/compat-data': 7.26.8
'@babel/helper-validator-option': 7.25.9
browserslist: 4.24.4
lru-cache: 5.1.1
semver: 6.3.1
'@babel/helper-module-imports@7.25.9':
dependencies:
'@babel/traverse': 7.26.9
'@babel/types': 7.26.9
transitivePeerDependencies:
- supports-color
'@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@babel/helper-module-imports': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
'@babel/traverse': 7.26.9
transitivePeerDependencies:
- supports-color
'@babel/helper-string-parser@7.25.9': {}
'@babel/helper-validator-identifier@7.25.9': {}
'@babel/helper-validator-option@7.25.9': {}
'@babel/helpers@7.26.9':
dependencies:
'@babel/template': 7.26.9
'@babel/types': 7.26.9
'@babel/parser@7.26.9':
dependencies:
'@babel/types': 7.26.9
'@babel/template@7.26.9':
dependencies:
'@babel/code-frame': 7.26.2
'@babel/parser': 7.26.9
'@babel/types': 7.26.9
'@babel/traverse@7.26.9':
dependencies:
'@babel/code-frame': 7.26.2
'@babel/generator': 7.26.9
'@babel/parser': 7.26.9
'@babel/template': 7.26.9
'@babel/types': 7.26.9
debug: 4.4.0
globals: 11.12.0
transitivePeerDependencies:
- supports-color
'@babel/types@7.26.9':
dependencies:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
'@esbuild/aix-ppc64@0.21.5':
optional: true
'@esbuild/aix-ppc64@0.24.0':
optional: true
'@esbuild/android-arm64@0.21.5':
optional: true
'@esbuild/android-arm64@0.24.0':
optional: true
'@esbuild/android-arm@0.21.5':
optional: true
'@esbuild/android-arm@0.24.0':
optional: true
'@esbuild/android-x64@0.21.5':
optional: true
'@esbuild/android-x64@0.24.0':
optional: true
'@esbuild/darwin-arm64@0.21.5':
optional: true
'@esbuild/darwin-arm64@0.24.0':
optional: true
'@esbuild/darwin-x64@0.21.5':
optional: true
'@esbuild/darwin-x64@0.24.0':
optional: true
'@esbuild/freebsd-arm64@0.21.5':
optional: true
'@esbuild/freebsd-arm64@0.24.0':
optional: true
'@esbuild/freebsd-x64@0.21.5':
optional: true
'@esbuild/freebsd-x64@0.24.0':
optional: true
'@esbuild/linux-arm64@0.21.5':
optional: true
'@esbuild/linux-arm64@0.24.0':
optional: true
'@esbuild/linux-arm@0.21.5':
optional: true
'@esbuild/linux-arm@0.24.0':
optional: true
'@esbuild/linux-ia32@0.21.5':
optional: true
'@esbuild/linux-ia32@0.24.0':
optional: true
'@esbuild/linux-loong64@0.21.5':
optional: true
'@esbuild/linux-loong64@0.24.0':
optional: true
'@esbuild/linux-mips64el@0.21.5':
optional: true
'@esbuild/linux-mips64el@0.24.0':
optional: true
'@esbuild/linux-ppc64@0.21.5':
optional: true
'@esbuild/linux-ppc64@0.24.0':
optional: true
'@esbuild/linux-riscv64@0.21.5':
optional: true
'@esbuild/linux-riscv64@0.24.0':
optional: true
'@esbuild/linux-s390x@0.21.5':
optional: true
'@esbuild/linux-s390x@0.24.0':
optional: true
'@esbuild/linux-x64@0.21.5':
optional: true
'@esbuild/linux-x64@0.24.0':
optional: true
'@esbuild/netbsd-x64@0.21.5':
optional: true
'@esbuild/netbsd-x64@0.24.0':
optional: true
'@esbuild/openbsd-arm64@0.24.0':
optional: true
'@esbuild/openbsd-x64@0.21.5':
optional: true
'@esbuild/openbsd-x64@0.24.0':
optional: true
'@esbuild/sunos-x64@0.21.5':
optional: true
'@esbuild/sunos-x64@0.24.0':
optional: true
'@esbuild/win32-arm64@0.21.5':
optional: true
'@esbuild/win32-arm64@0.24.0':
optional: true
'@esbuild/win32-ia32@0.21.5':
optional: true
'@esbuild/win32-ia32@0.24.0':
optional: true
'@esbuild/win32-x64@0.21.5':
optional: true
'@esbuild/win32-x64@0.24.0':
optional: true
'@eslint-community/eslint-utils@4.4.1(eslint@9.11.0(jiti@1.21.7))':
dependencies:
eslint: 9.11.0(jiti@1.21.7)
eslint: 9.33.0(jiti@2.5.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
'@eslint/config-array@0.18.0':
'@eslint/compat@1.3.2(eslint@9.33.0(jiti@2.5.1))':
optionalDependencies:
eslint: 9.33.0(jiti@2.5.1)
'@eslint/config-array@0.21.0':
dependencies:
'@eslint/object-schema': 2.1.6
debug: 4.4.0
debug: 4.4.1
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
'@eslint/core@0.12.0':
'@eslint/config-helpers@0.3.1': {}
'@eslint/core@0.15.2':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/eslintrc@3.3.0':
'@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
debug: 4.4.0
espree: 10.3.0
debug: 4.4.1
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
@@ -3047,71 +1582,50 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@eslint/js@9.11.0': {}
'@eslint/js@9.33.0': {}
'@eslint/object-schema@2.1.6': {}
'@eslint/plugin-kit@0.2.7':
'@eslint/plugin-kit@0.3.5':
dependencies:
'@eslint/core': 0.12.0
'@eslint/core': 0.15.2
levn: 0.4.1
'@figma/plugin-typings@1.115.0': {}
'@humanfs/core@0.19.1': {}
'@floating-ui/core@1.6.9':
'@humanfs/node@0.16.6':
dependencies:
'@floating-ui/utils': 0.2.9
'@floating-ui/dom@1.6.13':
dependencies:
'@floating-ui/core': 1.6.9
'@floating-ui/utils': 0.2.9
'@floating-ui/utils@0.2.9': {}
'@humanfs/core': 0.19.1
'@humanwhocodes/retry': 0.3.1
'@humanwhocodes/module-importer@1.0.1': {}
'@humanwhocodes/retry@0.3.1': {}
'@internationalized/date@3.7.0':
dependencies:
'@swc/helpers': 0.5.15
'@humanwhocodes/retry@0.4.3': {}
'@isaacs/cliui@8.0.2':
'@isaacs/fs-minipass@4.0.1':
dependencies:
string-width: 5.1.2
string-width-cjs: string-width@4.2.3
strip-ansi: 7.1.0
strip-ansi-cjs: strip-ansi@6.0.1
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
minipass: 7.1.2
'@jridgewell/gen-mapping@0.3.8':
'@jridgewell/gen-mapping@0.3.13':
dependencies:
'@jridgewell/set-array': 1.2.1
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.25
'@jridgewell/sourcemap-codec': 1.5.5
'@jridgewell/trace-mapping': 0.3.30
'@jridgewell/remapping@2.3.5':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.30
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/set-array@1.2.1': {}
'@jridgewell/sourcemap-codec@1.5.5': {}
'@jridgewell/sourcemap-codec@1.5.0': {}
'@jridgewell/trace-mapping@0.3.25':
'@jridgewell/trace-mapping@0.3.30':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
'@melt-ui/svelte@0.76.2(svelte@4.2.20)':
dependencies:
'@floating-ui/core': 1.6.9
'@floating-ui/dom': 1.6.13
'@internationalized/date': 3.7.0
dequal: 2.0.3
focus-trap: 7.6.4
nanoid: 5.1.2
svelte: 4.2.20
'@jridgewell/sourcemap-codec': 1.5.5
'@nodelib/fs.scandir@2.1.5':
dependencies:
@@ -3123,468 +1637,302 @@ snapshots:
'@nodelib/fs.walk@1.2.8':
dependencies:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.0
fastq: 1.19.1
'@pkgjs/parseargs@0.11.0':
'@polka/url@1.0.0-next.29': {}
'@rollup/rollup-android-arm-eabi@4.46.4':
optional: true
'@polka/url@1.0.0-next.28': {}
'@rollup/rollup-android-arm64@4.46.4':
optional: true
'@rollup/plugin-commonjs@28.0.2(rollup@4.34.8)':
'@rollup/rollup-darwin-arm64@4.46.4':
optional: true
'@rollup/rollup-darwin-x64@4.46.4':
optional: true
'@rollup/rollup-freebsd-arm64@4.46.4':
optional: true
'@rollup/rollup-freebsd-x64@4.46.4':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.46.4':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.46.4':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-arm64-musl@4.46.4':
optional: true
'@rollup/rollup-linux-loongarch64-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-ppc64-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-riscv64-musl@4.46.4':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-x64-gnu@4.46.4':
optional: true
'@rollup/rollup-linux-x64-musl@4.46.4':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.46.4':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.46.4':
optional: true
'@rollup/rollup-win32-x64-msvc@4.46.4':
optional: true
'@standard-schema/spec@1.0.0': {}
'@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)':
dependencies:
'@rollup/pluginutils': 5.1.4(rollup@4.34.8)
commondir: 1.0.1
estree-walker: 2.0.2
fdir: 6.4.3(picomatch@4.0.2)
is-reference: 1.2.1
magic-string: 0.30.17
picomatch: 4.0.2
optionalDependencies:
rollup: 4.34.8
acorn: 8.15.0
'@rollup/plugin-json@6.1.0(rollup@4.34.8)':
'@sveltejs/adapter-auto@6.1.0(@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1)))':
dependencies:
'@rollup/pluginutils': 5.1.4(rollup@4.34.8)
optionalDependencies:
rollup: 4.34.8
'@sveltejs/kit': 2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))
'@rollup/plugin-node-resolve@15.3.1(rollup@4.34.8)':
'@sveltejs/kit@2.36.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))':
dependencies:
'@rollup/pluginutils': 5.1.4(rollup@4.34.8)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-module: 1.0.0
resolve: 1.22.10
optionalDependencies:
rollup: 4.34.8
'@rollup/pluginutils@5.1.4(rollup@4.34.8)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
rollup: 4.34.8
'@rollup/rollup-android-arm-eabi@4.34.8':
optional: true
'@rollup/rollup-android-arm64@4.34.8':
optional: true
'@rollup/rollup-darwin-arm64@4.34.8':
optional: true
'@rollup/rollup-darwin-x64@4.34.8':
optional: true
'@rollup/rollup-freebsd-arm64@4.34.8':
optional: true
'@rollup/rollup-freebsd-x64@4.34.8':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.34.8':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.34.8':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-arm64-musl@4.34.8':
optional: true
'@rollup/rollup-linux-loongarch64-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-x64-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-x64-musl@4.34.8':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.34.8':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.34.8':
optional: true
'@rollup/rollup-win32-x64-msvc@4.34.8':
optional: true
'@shikijs/core@3.7.0':
dependencies:
'@shikijs/types': 3.7.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
'@shikijs/engine-javascript@3.7.0':
dependencies:
'@shikijs/types': 3.7.0
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 4.3.3
'@shikijs/engine-oniguruma@3.7.0':
dependencies:
'@shikijs/types': 3.7.0
'@shikijs/vscode-textmate': 10.0.2
'@shikijs/langs@3.7.0':
dependencies:
'@shikijs/types': 3.7.0
'@shikijs/themes@3.7.0':
dependencies:
'@shikijs/types': 3.7.0
'@shikijs/types@3.7.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
'@shikijs/vscode-textmate@10.0.2': {}
'@svelte-dev/pretty-code@1.0.0(shikiji@0.10.2)':
dependencies:
rehype-pretty-code: 0.12.6(shikiji@0.10.2)
rehype-stringify: 10.0.1
remark-parse: 11.0.0
remark-rehype: 11.1.1
unified: 11.0.5
transitivePeerDependencies:
- shikiji
- supports-color
'@sveltejs/adapter-auto@3.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))':
dependencies:
'@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
import-meta-resolve: 4.1.0
'@sveltejs/adapter-node@5.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))':
dependencies:
'@rollup/plugin-commonjs': 28.0.2(rollup@4.34.8)
'@rollup/plugin-json': 6.1.0(rollup@4.34.8)
'@rollup/plugin-node-resolve': 15.3.1(rollup@4.34.8)
'@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
rollup: 4.34.8
'@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))':
dependencies:
'@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
'@standard-schema/spec': 1.0.0
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0)
'@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))
'@types/cookie': 0.6.0
acorn: 8.15.0
cookie: 0.6.0
devalue: 5.1.1
esm-env: 1.2.2
import-meta-resolve: 4.1.0
kleur: 4.1.5
magic-string: 0.30.17
mrmime: 2.0.1
sade: 1.8.1
set-cookie-parser: 2.7.1
sirv: 2.0.4
svelte: 4.2.20
tiny-glob: 0.2.9
vite: 5.4.7(@types/node@22.5.5)
sirv: 3.0.1
svelte: 5.38.2
vite: 7.1.3(jiti@2.5.1)(lightningcss@1.30.1)
'@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))':
'@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))':
dependencies:
'@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
debug: 4.4.0
svelte: 4.2.20
vite: 5.4.7(@types/node@22.5.5)
'@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))
debug: 4.4.1
svelte: 5.38.2
vite: 7.1.3(jiti@2.5.1)(lightningcss@1.30.1)
transitivePeerDependencies:
- supports-color
'@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))':
'@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))':
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
debug: 4.4.0
'@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))
debug: 4.4.1
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.17
svelte: 4.2.20
svelte-hmr: 0.16.0(svelte@4.2.20)
vite: 5.4.7(@types/node@22.5.5)
vitefu: 0.2.5(vite@5.4.7(@types/node@22.5.5))
svelte: 5.38.2
vite: 7.1.3(jiti@2.5.1)(lightningcss@1.30.1)
vitefu: 1.1.1(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))
transitivePeerDependencies:
- supports-color
'@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.9)':
'@tailwindcss/node@4.1.12':
dependencies:
'@babel/core': 7.26.9
'@jridgewell/remapping': 2.3.5
enhanced-resolve: 5.18.3
jiti: 2.5.1
lightningcss: 1.30.1
magic-string: 0.30.17
source-map-js: 1.2.1
tailwindcss: 4.1.12
'@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@tailwindcss/oxide-android-arm64@4.1.12':
optional: true
'@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@tailwindcss/oxide-darwin-arm64@4.1.12':
optional: true
'@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@tailwindcss/oxide-darwin-x64@4.1.12':
optional: true
'@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@tailwindcss/oxide-freebsd-x64@4.1.12':
optional: true
'@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
optional: true
'@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
optional: true
'@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@tailwindcss/oxide-linux-arm64-musl@4.1.12':
optional: true
'@svgr/babel-preset@8.1.0(@babel/core@7.26.9)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.9)
'@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.9)
'@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.9)
'@tailwindcss/oxide-linux-x64-gnu@4.1.12':
optional: true
'@svgr/core@8.1.0(typescript@5.6.2)':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-preset': 8.1.0(@babel/core@7.26.9)
camelcase: 6.3.0
cosmiconfig: 8.3.6(typescript@5.6.2)
snake-case: 3.0.4
transitivePeerDependencies:
- supports-color
- typescript
'@tailwindcss/oxide-linux-x64-musl@4.1.12':
optional: true
'@svgr/hast-util-to-babel-ast@8.0.0':
dependencies:
'@babel/types': 7.26.9
entities: 4.5.0
'@tailwindcss/oxide-wasm32-wasi@4.1.12':
optional: true
'@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.6.2))':
dependencies:
'@babel/core': 7.26.9
'@svgr/babel-preset': 8.1.0(@babel/core@7.26.9)
'@svgr/core': 8.1.0(typescript@5.6.2)
'@svgr/hast-util-to-babel-ast': 8.0.0
svg-parser: 2.0.4
transitivePeerDependencies:
- supports-color
'@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
optional: true
'@swc/helpers@0.5.15':
dependencies:
tslib: 2.8.1
'@tailwindcss/oxide-win32-x64-msvc@4.1.12':
optional: true
'@tailwindcss/typography@0.5.16(tailwindcss@3.4.17)':
'@tailwindcss/oxide@4.1.12':
dependencies:
lodash.castarray: 4.4.0
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
tailwindcss: 3.4.17
detect-libc: 2.0.4
tar: 7.4.3
optionalDependencies:
'@tailwindcss/oxide-android-arm64': 4.1.12
'@tailwindcss/oxide-darwin-arm64': 4.1.12
'@tailwindcss/oxide-darwin-x64': 4.1.12
'@tailwindcss/oxide-freebsd-x64': 4.1.12
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.12
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.12
'@tailwindcss/oxide-linux-arm64-musl': 4.1.12
'@tailwindcss/oxide-linux-x64-gnu': 4.1.12
'@tailwindcss/oxide-linux-x64-musl': 4.1.12
'@tailwindcss/oxide-wasm32-wasi': 4.1.12
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.12
'@tailwindcss/oxide-win32-x64-msvc': 4.1.12
'@tailwindcss/vite@4.1.12(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1))':
dependencies:
'@tailwindcss/node': 4.1.12
'@tailwindcss/oxide': 4.1.12
tailwindcss: 4.1.12
vite: 7.1.3(jiti@2.5.1)(lightningcss@1.30.1)
'@types/cookie@0.6.0': {}
'@types/debug@4.1.12':
dependencies:
'@types/ms': 2.1.0
'@types/downloadjs@1.4.6': {}
'@types/eslint@9.6.1':
dependencies:
'@types/estree': 1.0.6
'@types/json-schema': 7.0.15
'@types/estree@1.0.6': {}
'@types/hast@3.0.4':
dependencies:
'@types/unist': 3.0.3
'@types/estree@1.0.8': {}
'@types/json-schema@7.0.15': {}
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.3
'@types/ms@2.1.0': {}
'@types/node@22.5.5':
dependencies:
undici-types: 6.19.8
'@types/resolve@1.20.2': {}
'@types/unist': 2.0.11
'@types/unist@2.0.11': {}
'@types/unist@3.0.3': {}
'@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)':
'@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
'@typescript-eslint/scope-manager': 8.6.0
'@typescript-eslint/type-utils': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
'@typescript-eslint/utils': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.6.0
eslint: 9.11.0(jiti@1.21.7)
'@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/scope-manager': 8.40.0
'@typescript-eslint/type-utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 8.40.0
eslint: 9.33.0(jiti@2.5.1)
graphemer: 1.4.0
ignore: 5.3.2
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 1.4.3(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
ts-api-utils: 2.1.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)':
'@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.6.0
'@typescript-eslint/types': 8.6.0
'@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.6.0
debug: 4.4.0
eslint: 9.11.0(jiti@1.21.7)
optionalDependencies:
typescript: 5.6.2
'@typescript-eslint/scope-manager': 8.40.0
'@typescript-eslint/types': 8.40.0
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 8.40.0
debug: 4.4.1
eslint: 9.33.0(jiti@2.5.1)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.6.0':
'@typescript-eslint/project-service@8.40.0(typescript@5.9.2)':
dependencies:
'@typescript-eslint/types': 8.6.0
'@typescript-eslint/visitor-keys': 8.6.0
'@typescript-eslint/type-utils@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)':
dependencies:
'@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
'@typescript-eslint/utils': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
debug: 4.4.0
ts-api-utils: 1.4.3(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
'@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2)
'@typescript-eslint/types': 8.40.0
debug: 4.4.1
typescript: 5.9.2
transitivePeerDependencies:
- eslint
- supports-color
'@typescript-eslint/types@8.6.0': {}
'@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2)':
'@typescript-eslint/scope-manager@8.40.0':
dependencies:
'@typescript-eslint/types': 8.6.0
'@typescript-eslint/visitor-keys': 8.6.0
debug: 4.4.0
'@typescript-eslint/types': 8.40.0
'@typescript-eslint/visitor-keys': 8.40.0
'@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.2)':
dependencies:
typescript: 5.9.2
'@typescript-eslint/type-utils@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@typescript-eslint/types': 8.40.0
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2)
'@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
debug: 4.4.1
eslint: 9.33.0(jiti@2.5.1)
ts-api-utils: 2.1.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@8.40.0': {}
'@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.2)':
dependencies:
'@typescript-eslint/project-service': 8.40.0(typescript@5.9.2)
'@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2)
'@typescript-eslint/types': 8.40.0
'@typescript-eslint/visitor-keys': 8.40.0
debug: 4.4.1
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.1
ts-api-utils: 1.4.3(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
semver: 7.7.2
ts-api-utils: 2.1.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)':
'@typescript-eslint/utils@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.11.0(jiti@1.21.7))
'@typescript-eslint/scope-manager': 8.6.0
'@typescript-eslint/types': 8.6.0
'@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
eslint: 9.11.0(jiti@1.21.7)
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1))
'@typescript-eslint/scope-manager': 8.40.0
'@typescript-eslint/types': 8.40.0
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2)
eslint: 9.33.0(jiti@2.5.1)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/visitor-keys@8.6.0':
'@typescript-eslint/visitor-keys@8.40.0':
dependencies:
'@typescript-eslint/types': 8.6.0
eslint-visitor-keys: 3.4.3
'@typescript-eslint/types': 8.40.0
eslint-visitor-keys: 4.2.1
'@ungap/structured-clone@1.3.0': {}
'@upstash/core-analytics@0.0.10':
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
'@upstash/redis': 1.35.3
acorn: 8.15.0
'@upstash/ratelimit@2.0.6(@upstash/redis@1.35.3)':
dependencies:
'@upstash/core-analytics': 0.0.10
'@upstash/redis': 1.35.3
'@upstash/redis@1.35.3':
dependencies:
uncrypto: 0.1.3
'@vitest/expect@2.1.1':
dependencies:
'@vitest/spy': 2.1.1
'@vitest/utils': 2.1.1
chai: 5.2.0
tinyrainbow: 1.2.0
'@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.7(@types/node@22.5.5))':
dependencies:
'@vitest/spy': 2.1.1
estree-walker: 3.0.3
magic-string: 0.30.17
optionalDependencies:
vite: 5.4.7(@types/node@22.5.5)
'@vitest/pretty-format@2.1.1':
dependencies:
tinyrainbow: 1.2.0
'@vitest/pretty-format@2.1.9':
dependencies:
tinyrainbow: 1.2.0
'@vitest/runner@2.1.1':
dependencies:
'@vitest/utils': 2.1.1
pathe: 1.1.2
'@vitest/snapshot@2.1.1':
dependencies:
'@vitest/pretty-format': 2.1.1
magic-string: 0.30.17
pathe: 1.1.2
'@vitest/spy@2.1.1':
dependencies:
tinyspy: 3.0.2
'@vitest/utils@2.1.1':
dependencies:
'@vitest/pretty-format': 2.1.1
loupe: 3.1.3
tinyrainbow: 1.2.0
acorn-jsx@5.3.2(acorn@8.14.0):
dependencies:
acorn: 8.14.0
acorn@8.14.0: {}
acorn@8.15.0: {}
ajv@6.12.6:
dependencies:
@@ -3593,64 +1941,24 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
ansi-regex@5.0.1: {}
ansi-regex@6.1.0: {}
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
ansi-styles@6.2.1: {}
any-promise@1.3.0: {}
anymatch@3.1.3:
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
arg@5.0.2: {}
argparse@2.0.1: {}
aria-query@5.3.2: {}
assertion-error@2.0.1: {}
autoprefixer@10.4.21(postcss@8.5.3):
dependencies:
browserslist: 4.24.4
caniuse-lite: 1.0.30001715
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
postcss: 8.5.3
postcss-value-parser: 4.2.0
axobject-query@4.1.0: {}
bail@2.0.2: {}
balanced-match@1.0.2: {}
binary-extensions@2.3.0: {}
bits-ui@0.22.0(svelte@4.2.20):
dependencies:
'@internationalized/date': 3.7.0
'@melt-ui/svelte': 0.76.2(svelte@4.2.20)
nanoid: 5.1.2
svelte: 4.2.20
boolbase@1.0.0: {}
brace-expansion@1.1.11:
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
brace-expansion@2.0.1:
brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
@@ -3658,343 +1966,141 @@ snapshots:
dependencies:
fill-range: 7.1.1
browserslist@4.24.4:
dependencies:
caniuse-lite: 1.0.30001700
electron-to-chromium: 1.5.104
node-releases: 2.0.19
update-browserslist-db: 1.1.2(browserslist@4.24.4)
cac@6.7.14: {}
callsites@3.1.0: {}
camelcase-css@2.0.1: {}
camelcase@6.3.0: {}
caniuse-lite@1.0.30001700: {}
caniuse-lite@1.0.30001715: {}
ccount@2.0.1: {}
chai@5.2.0:
dependencies:
assertion-error: 2.0.1
check-error: 2.1.1
deep-eql: 5.0.2
loupe: 3.1.3
pathval: 2.0.0
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
supports-color: 7.2.0
character-entities-html4@2.1.0: {}
character-entities-legacy@3.0.0: {}
character-entities@2.0.2: {}
check-error@2.1.1: {}
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
braces: 3.0.3
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.3
chokidar@4.0.3:
dependencies:
readdirp: 4.1.2
cliui@8.0.1:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
chownr@3.0.0: {}
clsx@2.1.1: {}
code-red@1.0.4:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
'@types/estree': 1.0.6
acorn: 8.14.0
estree-walker: 3.0.3
periscopic: 3.1.0
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
color-name@1.1.4: {}
comma-separated-tokens@2.0.3: {}
commander@11.1.0: {}
commander@4.1.1: {}
commondir@1.0.1: {}
concat-map@0.0.1: {}
concurrently@9.0.1:
dependencies:
chalk: 4.1.2
lodash: 4.17.21
rxjs: 7.8.2
shell-quote: 1.8.2
supports-color: 8.1.1
tree-kill: 1.2.2
yargs: 17.7.2
convert-source-map@2.0.0: {}
cookie@0.6.0: {}
core-util-is@1.0.3: {}
cosmiconfig@8.3.6(typescript@5.6.2):
dependencies:
import-fresh: 3.3.1
js-yaml: 4.1.0
parse-json: 5.2.0
path-type: 4.0.0
optionalDependencies:
typescript: 5.6.2
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
css-select@5.2.2:
dependencies:
boolbase: 1.0.0
css-what: 6.2.2
domhandler: 5.0.3
domutils: 3.2.2
nth-check: 2.1.1
css-tree@2.2.1:
dependencies:
mdn-data: 2.0.28
source-map-js: 1.2.1
css-tree@2.3.1:
dependencies:
mdn-data: 2.0.30
source-map-js: 1.2.1
css-tree@3.1.0:
dependencies:
mdn-data: 2.12.2
source-map-js: 1.2.1
css-what@6.2.2: {}
cssesc@3.0.0: {}
csso@5.0.5:
dependencies:
css-tree: 2.2.1
debug@4.4.0:
debug@4.4.1:
dependencies:
ms: 2.1.3
decode-named-character-reference@1.0.2:
dependencies:
character-entities: 2.0.2
deep-eql@5.0.2: {}
deep-is@0.1.4: {}
deepmerge@4.3.1: {}
dequal@2.0.3: {}
detect-libc@2.0.4: {}
devalue@5.1.1: {}
devlop@1.1.0:
enhanced-resolve@5.18.3:
dependencies:
dequal: 2.0.3
graceful-fs: 4.2.11
tapable: 2.2.2
didyoumean@1.2.2: {}
dlv@1.1.3: {}
dom-serializer@2.0.0:
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
entities: 4.5.0
domelementtype@2.3.0: {}
domhandler@5.0.3:
dependencies:
domelementtype: 2.3.0
domutils@3.2.2:
dependencies:
dom-serializer: 2.0.0
domelementtype: 2.3.0
domhandler: 5.0.3
dot-case@3.0.4:
dependencies:
no-case: 3.0.4
tslib: 2.7.0
downloadjs@1.4.7: {}
eastasianwidth@0.2.0: {}
electron-to-chromium@1.5.104: {}
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
entities@4.5.0: {}
error-ex@1.3.2:
dependencies:
is-arrayish: 0.2.1
esbuild@0.21.5:
esbuild@0.25.9:
optionalDependencies:
'@esbuild/aix-ppc64': 0.21.5
'@esbuild/android-arm': 0.21.5
'@esbuild/android-arm64': 0.21.5
'@esbuild/android-x64': 0.21.5
'@esbuild/darwin-arm64': 0.21.5
'@esbuild/darwin-x64': 0.21.5
'@esbuild/freebsd-arm64': 0.21.5
'@esbuild/freebsd-x64': 0.21.5
'@esbuild/linux-arm': 0.21.5
'@esbuild/linux-arm64': 0.21.5
'@esbuild/linux-ia32': 0.21.5
'@esbuild/linux-loong64': 0.21.5
'@esbuild/linux-mips64el': 0.21.5
'@esbuild/linux-ppc64': 0.21.5
'@esbuild/linux-riscv64': 0.21.5
'@esbuild/linux-s390x': 0.21.5
'@esbuild/linux-x64': 0.21.5
'@esbuild/netbsd-x64': 0.21.5
'@esbuild/openbsd-x64': 0.21.5
'@esbuild/sunos-x64': 0.21.5
'@esbuild/win32-arm64': 0.21.5
'@esbuild/win32-ia32': 0.21.5
'@esbuild/win32-x64': 0.21.5
esbuild@0.24.0:
optionalDependencies:
'@esbuild/aix-ppc64': 0.24.0
'@esbuild/android-arm': 0.24.0
'@esbuild/android-arm64': 0.24.0
'@esbuild/android-x64': 0.24.0
'@esbuild/darwin-arm64': 0.24.0
'@esbuild/darwin-x64': 0.24.0
'@esbuild/freebsd-arm64': 0.24.0
'@esbuild/freebsd-x64': 0.24.0
'@esbuild/linux-arm': 0.24.0
'@esbuild/linux-arm64': 0.24.0
'@esbuild/linux-ia32': 0.24.0
'@esbuild/linux-loong64': 0.24.0
'@esbuild/linux-mips64el': 0.24.0
'@esbuild/linux-ppc64': 0.24.0
'@esbuild/linux-riscv64': 0.24.0
'@esbuild/linux-s390x': 0.24.0
'@esbuild/linux-x64': 0.24.0
'@esbuild/netbsd-x64': 0.24.0
'@esbuild/openbsd-arm64': 0.24.0
'@esbuild/openbsd-x64': 0.24.0
'@esbuild/sunos-x64': 0.24.0
'@esbuild/win32-arm64': 0.24.0
'@esbuild/win32-ia32': 0.24.0
'@esbuild/win32-x64': 0.24.0
escalade@3.2.0: {}
'@esbuild/aix-ppc64': 0.25.9
'@esbuild/android-arm': 0.25.9
'@esbuild/android-arm64': 0.25.9
'@esbuild/android-x64': 0.25.9
'@esbuild/darwin-arm64': 0.25.9
'@esbuild/darwin-x64': 0.25.9
'@esbuild/freebsd-arm64': 0.25.9
'@esbuild/freebsd-x64': 0.25.9
'@esbuild/linux-arm': 0.25.9
'@esbuild/linux-arm64': 0.25.9
'@esbuild/linux-ia32': 0.25.9
'@esbuild/linux-loong64': 0.25.9
'@esbuild/linux-mips64el': 0.25.9
'@esbuild/linux-ppc64': 0.25.9
'@esbuild/linux-riscv64': 0.25.9
'@esbuild/linux-s390x': 0.25.9
'@esbuild/linux-x64': 0.25.9
'@esbuild/netbsd-arm64': 0.25.9
'@esbuild/netbsd-x64': 0.25.9
'@esbuild/openbsd-arm64': 0.25.9
'@esbuild/openbsd-x64': 0.25.9
'@esbuild/openharmony-arm64': 0.25.9
'@esbuild/sunos-x64': 0.25.9
'@esbuild/win32-arm64': 0.25.9
'@esbuild/win32-ia32': 0.25.9
'@esbuild/win32-x64': 0.25.9
escape-string-regexp@4.0.0: {}
escape-string-regexp@5.0.0: {}
eslint-compat-utils@0.5.1(eslint@9.11.0(jiti@1.21.7)):
eslint-config-prettier@10.1.8(eslint@9.33.0(jiti@2.5.1)):
dependencies:
eslint: 9.11.0(jiti@1.21.7)
semver: 7.7.1
eslint: 9.33.0(jiti@2.5.1)
eslint-config-prettier@9.1.0(eslint@9.11.0(jiti@1.21.7)):
eslint-plugin-svelte@3.11.0(eslint@9.33.0(jiti@2.5.1))(svelte@5.38.2):
dependencies:
eslint: 9.11.0(jiti@1.21.7)
eslint-plugin-svelte@2.44.0(eslint@9.11.0(jiti@1.21.7))(svelte@4.2.20):
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.11.0(jiti@1.21.7))
'@jridgewell/sourcemap-codec': 1.5.0
eslint: 9.11.0(jiti@1.21.7)
eslint-compat-utils: 0.5.1(eslint@9.11.0(jiti@1.21.7))
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1))
'@jridgewell/sourcemap-codec': 1.5.5
eslint: 9.33.0(jiti@2.5.1)
esutils: 2.0.3
known-css-properties: 0.34.0
postcss: 8.5.3
postcss-load-config: 3.1.4(postcss@8.5.3)
postcss-safe-parser: 6.0.0(postcss@8.5.3)
postcss-selector-parser: 6.1.2
semver: 7.7.1
svelte-eslint-parser: 0.41.1(svelte@4.2.20)
globals: 16.3.0
known-css-properties: 0.37.0
postcss: 8.5.6
postcss-load-config: 3.1.4(postcss@8.5.6)
postcss-safe-parser: 7.0.1(postcss@8.5.6)
semver: 7.7.2
svelte-eslint-parser: 1.3.1(svelte@5.38.2)
optionalDependencies:
svelte: 4.2.20
svelte: 5.38.2
transitivePeerDependencies:
- ts-node
eslint-scope@7.2.2:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
eslint-scope@8.2.0:
eslint-scope@8.4.0:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
eslint-visitor-keys@3.4.3: {}
eslint-visitor-keys@4.2.0: {}
eslint-visitor-keys@4.2.1: {}
eslint@9.11.0(jiti@1.21.7):
eslint@9.33.0(jiti@2.5.1):
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.11.0(jiti@1.21.7))
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.18.0
'@eslint/eslintrc': 3.3.0
'@eslint/js': 9.11.0
'@eslint/plugin-kit': 0.2.7
'@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.1
'@eslint/core': 0.15.2
'@eslint/eslintrc': 3.3.1
'@eslint/js': 9.33.0
'@eslint/plugin-kit': 0.3.5
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.3.1
'@nodelib/fs.walk': 1.2.8
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
'@types/json-schema': 7.0.15
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
debug: 4.4.0
debug: 4.4.1
escape-string-regexp: 4.0.0
eslint-scope: 8.2.0
eslint-visitor-keys: 4.2.0
espree: 10.3.0
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
esquery: 1.6.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@@ -4004,53 +2110,40 @@ snapshots:
ignore: 5.3.2
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
json-stable-stringify-without-jsonify: 1.0.1
lodash.merge: 4.6.2
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
strip-ansi: 6.0.1
text-table: 0.2.0
optionalDependencies:
jiti: 1.21.7
jiti: 2.5.1
transitivePeerDependencies:
- supports-color
esm-env@1.2.2: {}
espree@10.3.0:
espree@10.4.0:
dependencies:
acorn: 8.14.0
acorn-jsx: 5.3.2(acorn@8.14.0)
eslint-visitor-keys: 4.2.0
espree@9.6.1:
dependencies:
acorn: 8.14.0
acorn-jsx: 5.3.2(acorn@8.14.0)
eslint-visitor-keys: 3.4.3
acorn: 8.15.0
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.1
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
esrap@2.1.0:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
esrecurse@4.3.0:
dependencies:
estraverse: 5.3.0
estraverse@5.3.0: {}
estree-walker@2.0.2: {}
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.6
esutils@2.0.3: {}
extend@3.0.2: {}
fast-deep-equal@3.1.3: {}
fast-glob@3.3.3:
@@ -4065,13 +2158,13 @@ snapshots:
fast-levenshtein@2.0.6: {}
fastq@1.19.0:
fastq@1.19.1:
dependencies:
reusify: 1.1.0
fdir@6.4.3(picomatch@4.0.2):
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.2
picomatch: 4.0.3
file-entry-cache@8.0.0:
dependencies:
@@ -4093,30 +2186,9 @@ snapshots:
flatted@3.3.3: {}
focus-trap@7.6.4:
dependencies:
tabbable: 6.2.0
foreground-child@3.3.1:
dependencies:
cross-spawn: 7.0.6
signal-exit: 4.1.0
fraction.js@4.3.7: {}
fsevents@2.3.3:
optional: true
function-bind@1.1.2: {}
fuse.js@7.1.0: {}
gensync@1.0.0-beta.2: {}
get-caller-file@2.0.5: {}
github-slugger@2.0.0: {}
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -4125,567 +2197,137 @@ snapshots:
dependencies:
is-glob: 4.0.3
glob@10.4.5:
dependencies:
foreground-child: 3.3.1
jackspeak: 3.4.3
minimatch: 9.0.5
minipass: 7.1.2
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
globals@11.12.0: {}
globals@14.0.0: {}
globals@15.9.0: {}
globals@16.3.0: {}
globalyzer@0.1.0: {}
globrex@0.1.2: {}
graceful-fs@4.2.11: {}
graphemer@1.4.0: {}
has-flag@4.0.0: {}
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
hast-util-from-html@2.0.3:
dependencies:
'@types/hast': 3.0.4
devlop: 1.1.0
hast-util-from-parse5: 8.0.3
parse5: 7.2.1
vfile: 6.0.3
vfile-message: 4.0.2
hast-util-from-parse5@8.0.3:
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.3
devlop: 1.1.0
hastscript: 9.0.1
property-information: 7.0.0
vfile: 6.0.3
vfile-location: 5.0.3
web-namespaces: 2.0.1
hast-util-heading-rank@3.0.0:
dependencies:
'@types/hast': 3.0.4
hast-util-is-element@3.0.0:
dependencies:
'@types/hast': 3.0.4
hast-util-parse-selector@4.0.0:
dependencies:
'@types/hast': 3.0.4
hast-util-to-html@9.0.5:
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.3
ccount: 2.0.1
comma-separated-tokens: 2.0.3
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.2.0
property-information: 7.0.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.4
zwitch: 2.0.4
hast-util-to-string@3.0.1:
dependencies:
'@types/hast': 3.0.4
hast-util-whitespace@3.0.0:
dependencies:
'@types/hast': 3.0.4
hastscript@9.0.1:
dependencies:
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
hast-util-parse-selector: 4.0.0
property-information: 7.0.0
space-separated-tokens: 2.0.2
html-void-elements@3.0.0: {}
ignore@5.3.2: {}
immediate@3.0.6: {}
ignore@7.0.5: {}
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
import-meta-resolve@4.1.0: {}
imurmurhash@0.1.4: {}
inherits@2.0.4: {}
is-arrayish@0.2.1: {}
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
is-core-module@2.16.1:
dependencies:
hasown: 2.0.2
is-extglob@2.1.1: {}
is-fullwidth-code-point@3.0.0: {}
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
is-module@1.0.0: {}
is-number@7.0.0: {}
is-path-inside@3.0.3: {}
is-plain-obj@4.1.0: {}
is-reference@1.2.1:
dependencies:
'@types/estree': 1.0.6
is-reference@3.0.3:
dependencies:
'@types/estree': 1.0.6
isarray@1.0.0: {}
'@types/estree': 1.0.8
isexe@2.0.0: {}
jackspeak@3.4.3:
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
jiti@1.21.7: {}
js-tokens@4.0.0: {}
jiti@2.5.1: {}
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
jsesc@3.1.0: {}
json-buffer@3.0.1: {}
json-parse-even-better-errors@2.3.1: {}
json-schema-traverse@0.4.1: {}
json-stable-stringify-without-jsonify@1.0.1: {}
json5@2.2.3: {}
jszip@3.10.1:
dependencies:
lie: 3.3.0
pako: 1.0.11
readable-stream: 2.3.8
setimmediate: 1.0.5
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
kleur@4.1.5: {}
known-css-properties@0.34.0: {}
known-css-properties@0.37.0: {}
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
type-check: 0.4.0
lie@3.3.0:
lightningcss-darwin-arm64@1.30.1:
optional: true
lightningcss-darwin-x64@1.30.1:
optional: true
lightningcss-freebsd-x64@1.30.1:
optional: true
lightningcss-linux-arm-gnueabihf@1.30.1:
optional: true
lightningcss-linux-arm64-gnu@1.30.1:
optional: true
lightningcss-linux-arm64-musl@1.30.1:
optional: true
lightningcss-linux-x64-gnu@1.30.1:
optional: true
lightningcss-linux-x64-musl@1.30.1:
optional: true
lightningcss-win32-arm64-msvc@1.30.1:
optional: true
lightningcss-win32-x64-msvc@1.30.1:
optional: true
lightningcss@1.30.1:
dependencies:
immediate: 3.0.6
detect-libc: 2.0.4
optionalDependencies:
lightningcss-darwin-arm64: 1.30.1
lightningcss-darwin-x64: 1.30.1
lightningcss-freebsd-x64: 1.30.1
lightningcss-linux-arm-gnueabihf: 1.30.1
lightningcss-linux-arm64-gnu: 1.30.1
lightningcss-linux-arm64-musl: 1.30.1
lightningcss-linux-x64-gnu: 1.30.1
lightningcss-linux-x64-musl: 1.30.1
lightningcss-win32-arm64-msvc: 1.30.1
lightningcss-win32-x64-msvc: 1.30.1
lilconfig@2.1.0: {}
lilconfig@3.1.3: {}
lines-and-columns@1.2.4: {}
locate-character@3.0.0: {}
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
lodash.castarray@4.4.0: {}
lodash.isplainobject@4.0.6: {}
lodash.merge@4.6.2: {}
lodash@4.17.21: {}
longest-streak@3.1.0: {}
loupe@3.1.3: {}
lower-case@2.0.2:
dependencies:
tslib: 2.7.0
lru-cache@10.4.3: {}
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
lucide-svelte@0.525.0(svelte@4.2.20):
dependencies:
svelte: 4.2.20
magic-string@0.30.17:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/sourcemap-codec': 1.5.5
markdown-table@3.0.4: {}
mdast-util-find-and-replace@3.0.2:
dependencies:
'@types/mdast': 4.0.4
escape-string-regexp: 5.0.0
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
mdast-util-from-markdown@2.0.2:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
decode-named-character-reference: 1.0.2
devlop: 1.1.0
mdast-util-to-string: 4.0.0
micromark: 4.0.1
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-decode-string: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
unist-util-stringify-position: 4.0.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm-autolink-literal@2.0.1:
dependencies:
'@types/mdast': 4.0.4
ccount: 2.0.1
devlop: 1.1.0
mdast-util-find-and-replace: 3.0.2
micromark-util-character: 2.1.1
mdast-util-gfm-footnote@2.1.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
micromark-util-normalize-identifier: 2.0.1
transitivePeerDependencies:
- supports-color
mdast-util-gfm-strikethrough@2.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm-table@2.0.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
markdown-table: 3.0.4
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm-task-list-item@2.0.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm@3.1.0:
dependencies:
mdast-util-from-markdown: 2.0.2
mdast-util-gfm-autolink-literal: 2.0.1
mdast-util-gfm-footnote: 2.1.0
mdast-util-gfm-strikethrough: 2.0.0
mdast-util-gfm-table: 2.0.0
mdast-util-gfm-task-list-item: 2.0.0
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-phrasing@4.1.0:
dependencies:
'@types/mdast': 4.0.4
unist-util-is: 6.0.0
mdast-util-to-hast@13.2.0:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@ungap/structured-clone': 1.3.0
devlop: 1.1.0
micromark-util-sanitize-uri: 2.0.1
trim-lines: 3.0.1
unist-util-position: 5.0.0
unist-util-visit: 5.0.0
vfile: 6.0.3
mdast-util-to-markdown@2.1.2:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
longest-streak: 3.1.0
mdast-util-phrasing: 4.1.0
mdast-util-to-string: 4.0.0
micromark-util-classify-character: 2.0.1
micromark-util-decode-string: 2.0.1
unist-util-visit: 5.0.0
zwitch: 2.0.4
mdast-util-to-string@4.0.0:
dependencies:
'@types/mdast': 4.0.4
mdn-data@2.0.28: {}
mdn-data@2.0.30: {}
mdn-data@2.12.2: {}
mdsvex@0.12.5(svelte@4.2.20):
mdsvex@0.12.6(svelte@5.38.2):
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 2.0.11
prism-svelte: 0.4.7
prismjs: 1.29.0
svelte: 4.2.20
prismjs: 1.30.0
svelte: 5.38.2
unist-util-visit: 2.0.3
vfile-message: 2.0.4
merge2@1.4.1: {}
micromark-core-commonmark@2.0.2:
dependencies:
decode-named-character-reference: 1.0.2
devlop: 1.1.0
micromark-factory-destination: 2.0.1
micromark-factory-label: 2.0.1
micromark-factory-space: 2.0.1
micromark-factory-title: 2.0.1
micromark-factory-whitespace: 2.0.1
micromark-util-character: 2.1.1
micromark-util-chunked: 2.0.1
micromark-util-classify-character: 2.0.1
micromark-util-html-tag-name: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-subtokenize: 2.0.4
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm-autolink-literal@2.1.0:
dependencies:
micromark-util-character: 2.1.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm-footnote@2.1.0:
dependencies:
devlop: 1.1.0
micromark-core-commonmark: 2.0.2
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm-strikethrough@2.1.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.1
micromark-util-classify-character: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm-table@2.1.1:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm-tagfilter@2.0.0:
dependencies:
micromark-util-types: 2.0.1
micromark-extension-gfm-task-list-item@2.1.0:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-extension-gfm@3.0.0:
dependencies:
micromark-extension-gfm-autolink-literal: 2.1.0
micromark-extension-gfm-footnote: 2.1.0
micromark-extension-gfm-strikethrough: 2.1.0
micromark-extension-gfm-table: 2.1.1
micromark-extension-gfm-tagfilter: 2.0.0
micromark-extension-gfm-task-list-item: 2.1.0
micromark-util-combine-extensions: 2.0.1
micromark-util-types: 2.0.1
micromark-factory-destination@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-factory-label@2.0.1:
dependencies:
devlop: 1.1.0
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-factory-space@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-types: 2.0.1
micromark-factory-title@2.0.1:
dependencies:
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-factory-whitespace@2.0.1:
dependencies:
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-character@2.1.1:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-chunked@2.0.1:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-classify-character@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-combine-extensions@2.0.1:
dependencies:
micromark-util-chunked: 2.0.1
micromark-util-types: 2.0.1
micromark-util-decode-numeric-character-reference@2.0.2:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-decode-string@2.0.1:
dependencies:
decode-named-character-reference: 1.0.2
micromark-util-character: 2.1.1
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-symbol: 2.0.1
micromark-util-encode@2.0.1: {}
micromark-util-html-tag-name@2.0.1: {}
micromark-util-normalize-identifier@2.0.1:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-resolve-all@2.0.1:
dependencies:
micromark-util-types: 2.0.1
micromark-util-sanitize-uri@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-encode: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-subtokenize@2.0.4:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
micromark-util-symbol@2.0.1: {}
micromark-util-types@2.0.1: {}
micromark@4.0.1:
dependencies:
'@types/debug': 4.1.12
debug: 4.4.0
decode-named-character-reference: 1.0.2
devlop: 1.1.0
micromark-core-commonmark: 2.0.2
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-chunked: 2.0.1
micromark-util-combine-extensions: 2.0.1
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-encode: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-subtokenize: 2.0.4
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.1
transitivePeerDependencies:
- supports-color
micromatch@4.0.8:
dependencies:
braces: 3.0.3
@@ -4693,17 +2335,19 @@ snapshots:
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
brace-expansion: 1.1.12
minimatch@9.0.5:
dependencies:
brace-expansion: 2.0.1
brace-expansion: 2.0.2
minipass@7.1.2: {}
mode-watcher@0.5.1(svelte@4.2.20):
minizlib@3.0.2:
dependencies:
svelte: 4.2.20
minipass: 7.1.2
mkdirp@3.0.1: {}
mri@1.2.0: {}
@@ -4711,45 +2355,10 @@ snapshots:
ms@2.1.3: {}
mz@2.7.0:
dependencies:
any-promise: 1.3.0
object-assign: 4.1.1
thenify-all: 1.6.0
nanoid@3.3.8: {}
nanoid@5.1.2: {}
nanoid@3.3.11: {}
natural-compare@1.4.0: {}
no-case@3.0.4:
dependencies:
lower-case: 2.0.2
tslib: 2.7.0
node-releases@2.0.19: {}
normalize-path@3.0.0: {}
normalize-range@0.1.2: {}
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
object-assign@4.1.1: {}
object-hash@3.0.0: {}
oniguruma-parser@0.12.1: {}
oniguruma-to-es@4.3.3:
dependencies:
oniguruma-parser: 0.12.1
regex: 6.0.1
regex-recursion: 6.0.2
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -4767,537 +2376,190 @@ snapshots:
dependencies:
p-limit: 3.1.0
package-json-from-dist@1.0.1: {}
pako@1.0.11: {}
parent-module@1.0.1:
dependencies:
callsites: 3.1.0
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.26.2
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
parse-numeric-range@1.3.0: {}
parse5@7.2.1:
dependencies:
entities: 4.5.0
path-exists@4.0.0: {}
path-key@3.1.1: {}
path-parse@1.0.7: {}
path-scurry@1.11.1:
dependencies:
lru-cache: 10.4.3
minipass: 7.1.2
path-type@4.0.0: {}
pathe@1.1.2: {}
pathval@2.0.0: {}
periscopic@3.1.0:
dependencies:
'@types/estree': 1.0.6
estree-walker: 3.0.3
is-reference: 3.0.3
picocolors@1.1.1: {}
picomatch@2.3.1: {}
picomatch@4.0.2: {}
picomatch@4.0.3: {}
pify@2.3.0: {}
pirates@4.0.6: {}
postcss-import@15.1.0(postcss@8.5.3):
dependencies:
postcss: 8.5.3
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.10
postcss-js@4.0.1(postcss@8.5.3):
dependencies:
camelcase-css: 2.0.1
postcss: 8.5.3
postcss-load-config@3.1.4(postcss@8.5.3):
postcss-load-config@3.1.4(postcss@8.5.6):
dependencies:
lilconfig: 2.1.0
yaml: 1.10.2
optionalDependencies:
postcss: 8.5.3
postcss: 8.5.6
postcss-load-config@4.0.2(postcss@8.5.3):
postcss-safe-parser@7.0.1(postcss@8.5.6):
dependencies:
lilconfig: 3.1.3
yaml: 2.7.0
optionalDependencies:
postcss: 8.5.3
postcss: 8.5.6
postcss-nested@6.2.0(postcss@8.5.3):
postcss-scss@4.0.9(postcss@8.5.6):
dependencies:
postcss: 8.5.3
postcss-selector-parser: 6.1.2
postcss: 8.5.6
postcss-safe-parser@6.0.0(postcss@8.5.3):
dependencies:
postcss: 8.5.3
postcss-scss@4.0.9(postcss@8.5.3):
dependencies:
postcss: 8.5.3
postcss-selector-parser@6.0.10:
postcss-selector-parser@7.1.0:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss-selector-parser@6.1.2:
postcss@8.5.6:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss-value-parser@4.2.0: {}
postcss@8.5.3:
dependencies:
nanoid: 3.3.8
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
prelude-ls@1.2.1: {}
prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.20):
prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.38.2):
dependencies:
prettier: 3.3.3
svelte: 4.2.20
prettier: 3.6.2
svelte: 5.38.2
prettier-plugin-tailwindcss@0.6.6(prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.20))(prettier@3.3.3):
prettier-plugin-tailwindcss@0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.38.2))(prettier@3.6.2):
dependencies:
prettier: 3.3.3
prettier: 3.6.2
optionalDependencies:
prettier-plugin-svelte: 3.2.6(prettier@3.3.3)(svelte@4.2.20)
prettier-plugin-svelte: 3.4.0(prettier@3.6.2)(svelte@5.38.2)
prettier@3.3.3: {}
prettier@3.6.2: {}
prism-svelte@0.4.7: {}
prismjs@1.29.0: {}
process-nextick-args@2.0.1: {}
property-information@7.0.0: {}
prismjs@1.30.0: {}
punycode@2.3.1: {}
queue-microtask@1.2.3: {}
read-cache@1.0.0:
dependencies:
pify: 2.3.0
readable-stream@2.3.8:
dependencies:
core-util-is: 1.0.3
inherits: 2.0.4
isarray: 1.0.0
process-nextick-args: 2.0.1
safe-buffer: 5.1.2
string_decoder: 1.1.1
util-deprecate: 1.0.2
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
readdirp@4.1.2: {}
regex-recursion@6.0.2:
dependencies:
regex-utilities: 2.3.0
regex-utilities@2.3.0: {}
regex@6.0.1:
dependencies:
regex-utilities: 2.3.0
rehype-autolink-headings@7.1.0:
dependencies:
'@types/hast': 3.0.4
'@ungap/structured-clone': 1.3.0
hast-util-heading-rank: 3.0.0
hast-util-is-element: 3.0.0
unified: 11.0.5
unist-util-visit: 5.0.0
rehype-parse@9.0.1:
dependencies:
'@types/hast': 3.0.4
hast-util-from-html: 2.0.3
unified: 11.0.5
rehype-pretty-code@0.12.6(shikiji@0.10.2):
dependencies:
'@types/hast': 3.0.4
hast-util-to-string: 3.0.1
parse-numeric-range: 1.3.0
rehype-parse: 9.0.1
shikiji: 0.10.2
unified: 11.0.5
unist-util-visit: 5.0.0
rehype-slug@6.0.0:
dependencies:
'@types/hast': 3.0.4
github-slugger: 2.0.0
hast-util-heading-rank: 3.0.0
hast-util-to-string: 3.0.1
unist-util-visit: 5.0.0
rehype-stringify@10.0.1:
dependencies:
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
unified: 11.0.5
remark-gfm@4.0.1:
dependencies:
'@types/mdast': 4.0.4
mdast-util-gfm: 3.1.0
micromark-extension-gfm: 3.0.0
remark-parse: 11.0.0
remark-stringify: 11.0.0
unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-parse@11.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-from-markdown: 2.0.2
micromark-util-types: 2.0.1
unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-rehype@11.1.1:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
mdast-util-to-hast: 13.2.0
unified: 11.0.5
vfile: 6.0.3
remark-stringify@11.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-to-markdown: 2.1.2
unified: 11.0.5
require-directory@2.1.1: {}
resolve-from@4.0.0: {}
resolve@1.22.10:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
reusify@1.1.0: {}
rollup@4.34.8:
rollup@4.46.4:
dependencies:
'@types/estree': 1.0.6
'@types/estree': 1.0.8
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.34.8
'@rollup/rollup-android-arm64': 4.34.8
'@rollup/rollup-darwin-arm64': 4.34.8
'@rollup/rollup-darwin-x64': 4.34.8
'@rollup/rollup-freebsd-arm64': 4.34.8
'@rollup/rollup-freebsd-x64': 4.34.8
'@rollup/rollup-linux-arm-gnueabihf': 4.34.8
'@rollup/rollup-linux-arm-musleabihf': 4.34.8
'@rollup/rollup-linux-arm64-gnu': 4.34.8
'@rollup/rollup-linux-arm64-musl': 4.34.8
'@rollup/rollup-linux-loongarch64-gnu': 4.34.8
'@rollup/rollup-linux-powerpc64le-gnu': 4.34.8
'@rollup/rollup-linux-riscv64-gnu': 4.34.8
'@rollup/rollup-linux-s390x-gnu': 4.34.8
'@rollup/rollup-linux-x64-gnu': 4.34.8
'@rollup/rollup-linux-x64-musl': 4.34.8
'@rollup/rollup-win32-arm64-msvc': 4.34.8
'@rollup/rollup-win32-ia32-msvc': 4.34.8
'@rollup/rollup-win32-x64-msvc': 4.34.8
'@rollup/rollup-android-arm-eabi': 4.46.4
'@rollup/rollup-android-arm64': 4.46.4
'@rollup/rollup-darwin-arm64': 4.46.4
'@rollup/rollup-darwin-x64': 4.46.4
'@rollup/rollup-freebsd-arm64': 4.46.4
'@rollup/rollup-freebsd-x64': 4.46.4
'@rollup/rollup-linux-arm-gnueabihf': 4.46.4
'@rollup/rollup-linux-arm-musleabihf': 4.46.4
'@rollup/rollup-linux-arm64-gnu': 4.46.4
'@rollup/rollup-linux-arm64-musl': 4.46.4
'@rollup/rollup-linux-loongarch64-gnu': 4.46.4
'@rollup/rollup-linux-ppc64-gnu': 4.46.4
'@rollup/rollup-linux-riscv64-gnu': 4.46.4
'@rollup/rollup-linux-riscv64-musl': 4.46.4
'@rollup/rollup-linux-s390x-gnu': 4.46.4
'@rollup/rollup-linux-x64-gnu': 4.46.4
'@rollup/rollup-linux-x64-musl': 4.46.4
'@rollup/rollup-win32-arm64-msvc': 4.46.4
'@rollup/rollup-win32-ia32-msvc': 4.46.4
'@rollup/rollup-win32-x64-msvc': 4.46.4
fsevents: 2.3.3
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
rxjs@7.8.2:
dependencies:
tslib: 2.7.0
sade@1.8.1:
dependencies:
mri: 1.2.0
safe-buffer@5.1.2: {}
sax@1.4.1: {}
semver@6.3.1: {}
semver@7.7.1: {}
semver@7.7.2: {}
set-cookie-parser@2.7.1: {}
setimmediate@1.0.5: {}
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
shebang-regex@3.0.0: {}
shell-quote@1.8.2: {}
shiki@3.7.0:
sirv@3.0.1:
dependencies:
'@shikijs/core': 3.7.0
'@shikijs/engine-javascript': 3.7.0
'@shikijs/engine-oniguruma': 3.7.0
'@shikijs/langs': 3.7.0
'@shikijs/themes': 3.7.0
'@shikijs/types': 3.7.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
shikiji-core@0.10.2: {}
shikiji@0.10.2:
dependencies:
shikiji-core: 0.10.2
siginfo@2.0.0: {}
signal-exit@4.1.0: {}
sirv@2.0.4:
dependencies:
'@polka/url': 1.0.0-next.28
'@polka/url': 1.0.0-next.29
mrmime: 2.0.1
totalist: 3.0.1
snake-case@3.0.4:
dependencies:
dot-case: 3.0.4
tslib: 2.7.0
source-map-js@1.2.1: {}
space-separated-tokens@2.0.2: {}
stackback@0.0.2: {}
std-env@3.8.0: {}
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
string-width@5.1.2:
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
strip-ansi: 7.1.0
string_decoder@1.1.1:
dependencies:
safe-buffer: 5.1.2
stringify-entities@4.0.4:
dependencies:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
strip-ansi@7.1.0:
dependencies:
ansi-regex: 6.1.0
strip-json-comments@3.1.1: {}
sucrase@3.35.0:
dependencies:
'@jridgewell/gen-mapping': 0.3.8
commander: 4.1.1
glob: 10.4.5
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.6
ts-interface-checker: 0.1.13
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
supports-color@8.1.1:
svelte-check@4.3.1(picomatch@4.0.3)(svelte@5.38.2)(typescript@5.9.2):
dependencies:
has-flag: 4.0.0
supports-preserve-symlinks-flag@1.0.0: {}
svelte-check@4.0.9(picomatch@4.0.2)(svelte@4.2.20)(typescript@5.6.2):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
'@jridgewell/trace-mapping': 0.3.30
chokidar: 4.0.3
fdir: 6.4.3(picomatch@4.0.2)
fdir: 6.5.0(picomatch@4.0.3)
picocolors: 1.1.1
sade: 1.8.1
svelte: 4.2.20
typescript: 5.6.2
svelte: 5.38.2
typescript: 5.9.2
transitivePeerDependencies:
- picomatch
svelte-eslint-parser@0.41.1(svelte@4.2.20):
svelte-eslint-parser@1.3.1(svelte@5.38.2):
dependencies:
eslint-scope: 7.2.2
eslint-visitor-keys: 3.4.3
espree: 9.6.1
postcss: 8.5.3
postcss-scss: 4.0.9(postcss@8.5.3)
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
postcss: 8.5.6
postcss-scss: 4.0.9(postcss@8.5.6)
postcss-selector-parser: 7.1.0
optionalDependencies:
svelte: 4.2.20
svelte: 5.38.2
svelte-hmr@0.16.0(svelte@4.2.20):
svelte@5.38.2:
dependencies:
svelte: 4.2.20
svelte-sonner@0.3.28(svelte@4.2.20):
dependencies:
svelte: 4.2.20
svelte@4.2.20:
dependencies:
'@ampproject/remapping': 2.3.0
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.25
'@types/estree': 1.0.6
acorn: 8.14.0
'@jridgewell/remapping': 2.3.5
'@jridgewell/sourcemap-codec': 1.5.5
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0)
'@types/estree': 1.0.8
acorn: 8.15.0
aria-query: 5.3.2
axobject-query: 4.1.0
code-red: 1.0.4
css-tree: 2.3.1
estree-walker: 3.0.3
clsx: 2.1.1
esm-env: 1.2.2
esrap: 2.1.0
is-reference: 3.0.3
locate-character: 3.0.0
magic-string: 0.30.17
periscopic: 3.1.0
zimmerframe: 1.1.2
sveltekit-search-params@3.0.0(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)):
tailwindcss@4.1.12: {}
tapable@2.2.2: {}
tar@7.4.3:
dependencies:
'@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5)))(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
'@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.20)(vite@5.4.7(@types/node@22.5.5))
svelte: 4.2.20
transitivePeerDependencies:
- supports-color
- vite
'@isaacs/fs-minipass': 4.0.1
chownr: 3.0.0
minipass: 7.1.2
minizlib: 3.0.2
mkdirp: 3.0.1
yallist: 5.0.0
svg-parser@2.0.4: {}
svgo@4.0.0:
tinyglobby@0.2.14:
dependencies:
commander: 11.1.0
css-select: 5.2.2
css-tree: 3.1.0
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
sax: 1.4.1
tabbable@6.2.0: {}
tailwind-merge@2.5.4: {}
tailwind-merge@2.6.0: {}
tailwind-variants@0.3.1(tailwindcss@3.4.17):
dependencies:
tailwind-merge: 2.5.4
tailwindcss: 3.4.17
tailwindcss@3.4.17:
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
chokidar: 3.6.0
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.3.3
glob-parent: 6.0.2
is-glob: 4.0.3
jiti: 1.21.7
lilconfig: 3.1.3
micromatch: 4.0.8
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.1.1
postcss: 8.5.3
postcss-import: 15.1.0(postcss@8.5.3)
postcss-js: 4.0.1(postcss@8.5.3)
postcss-load-config: 4.0.2(postcss@8.5.3)
postcss-nested: 6.2.0(postcss@8.5.3)
postcss-selector-parser: 6.1.2
resolve: 1.22.10
sucrase: 3.35.0
transitivePeerDependencies:
- ts-node
text-table@0.2.0: {}
thenify-all@1.6.0:
dependencies:
thenify: 3.3.1
thenify@3.3.1:
dependencies:
any-promise: 1.3.0
tiny-glob@0.2.9:
dependencies:
globalyzer: 0.1.0
globrex: 0.1.2
tinybench@2.9.0: {}
tinyexec@0.3.2: {}
tinypool@1.0.2: {}
tinyrainbow@1.2.0: {}
tinyspy@3.0.2: {}
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
to-regex-range@5.0.1:
dependencies:
@@ -5305,234 +2567,82 @@ snapshots:
totalist@3.0.1: {}
tree-kill@1.2.2: {}
trim-lines@3.0.1: {}
trough@2.2.0: {}
ts-api-utils@1.4.3(typescript@5.6.2):
ts-api-utils@2.1.0(typescript@5.9.2):
dependencies:
typescript: 5.6.2
ts-interface-checker@0.1.13: {}
tslib@2.7.0: {}
tslib@2.8.1: {}
typescript: 5.9.2
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
typescript-eslint@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2):
typescript-eslint@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2):
dependencies:
'@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
'@typescript-eslint/parser': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
'@typescript-eslint/utils': 8.6.0(eslint@9.11.0(jiti@1.21.7))(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
'@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2)
'@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
eslint: 9.33.0(jiti@2.5.1)
typescript: 5.9.2
transitivePeerDependencies:
- eslint
- supports-color
typescript@5.6.2: {}
uncrypto@0.1.3: {}
undici-types@6.19.8: {}
unified@11.0.5:
dependencies:
'@types/unist': 3.0.3
bail: 2.0.2
devlop: 1.1.0
extend: 3.0.2
is-plain-obj: 4.1.0
trough: 2.2.0
vfile: 6.0.3
typescript@5.9.2: {}
unist-util-is@4.1.0: {}
unist-util-is@6.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-position@5.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-stringify-position@2.0.3:
dependencies:
'@types/unist': 2.0.11
unist-util-stringify-position@4.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-visit-parents@3.1.1:
dependencies:
'@types/unist': 2.0.11
unist-util-is: 4.1.0
unist-util-visit-parents@6.0.1:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.0
unist-util-visit@2.0.3:
dependencies:
'@types/unist': 2.0.11
unist-util-is: 4.1.0
unist-util-visit-parents: 3.1.1
unist-util-visit@5.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
update-browserslist-db@1.1.2(browserslist@4.24.4):
dependencies:
browserslist: 4.24.4
escalade: 3.2.0
picocolors: 1.1.1
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
util-deprecate@1.0.2: {}
vfile-location@5.0.3:
dependencies:
'@types/unist': 3.0.3
vfile: 6.0.3
vfile-message@2.0.4:
dependencies:
'@types/unist': 2.0.11
unist-util-stringify-position: 2.0.3
vfile-message@4.0.2:
vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1):
dependencies:
'@types/unist': 3.0.3
unist-util-stringify-position: 4.0.0
vfile@6.0.3:
dependencies:
'@types/unist': 3.0.3
vfile-message: 4.0.2
vite-node@2.1.1(@types/node@22.5.5):
dependencies:
cac: 6.7.14
debug: 4.4.0
pathe: 1.1.2
vite: 5.4.7(@types/node@22.5.5)
transitivePeerDependencies:
- '@types/node'
- less
- lightningcss
- sass
- sass-embedded
- stylus
- sugarss
- supports-color
- terser
vite@5.4.7(@types/node@22.5.5):
dependencies:
esbuild: 0.21.5
postcss: 8.5.3
rollup: 4.34.8
esbuild: 0.25.9
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
rollup: 4.46.4
tinyglobby: 0.2.14
optionalDependencies:
'@types/node': 22.5.5
fsevents: 2.3.3
jiti: 2.5.1
lightningcss: 1.30.1
vitefu@0.2.5(vite@5.4.7(@types/node@22.5.5)):
vitefu@1.1.1(vite@7.1.3(jiti@2.5.1)(lightningcss@1.30.1)):
optionalDependencies:
vite: 5.4.7(@types/node@22.5.5)
vitest@2.1.1(@types/node@22.5.5):
dependencies:
'@vitest/expect': 2.1.1
'@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.7(@types/node@22.5.5))
'@vitest/pretty-format': 2.1.9
'@vitest/runner': 2.1.1
'@vitest/snapshot': 2.1.1
'@vitest/spy': 2.1.1
'@vitest/utils': 2.1.1
chai: 5.2.0
debug: 4.4.0
magic-string: 0.30.17
pathe: 1.1.2
std-env: 3.8.0
tinybench: 2.9.0
tinyexec: 0.3.2
tinypool: 1.0.2
tinyrainbow: 1.2.0
vite: 5.4.7(@types/node@22.5.5)
vite-node: 2.1.1(@types/node@22.5.5)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 22.5.5
transitivePeerDependencies:
- less
- lightningcss
- msw
- sass
- sass-embedded
- stylus
- sugarss
- supports-color
- terser
web-namespaces@2.0.1: {}
vite: 7.1.3(jiti@2.5.1)(lightningcss@1.30.1)
which@2.0.2:
dependencies:
isexe: 2.0.0
why-is-node-running@2.3.0:
dependencies:
siginfo: 2.0.0
stackback: 0.0.2
word-wrap@1.2.5: {}
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi@8.1.0:
dependencies:
ansi-styles: 6.2.1
string-width: 5.1.2
strip-ansi: 7.1.0
y18n@5.0.8: {}
yallist@3.1.1: {}
yallist@5.0.0: {}
yaml@1.10.2: {}
yaml@2.7.0: {}
yargs-parser@21.1.1: {}
yargs@17.7.2:
dependencies:
cliui: 8.0.1
escalade: 3.2.0
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 21.1.1
yocto-queue@0.1.0: {}
zwitch@2.0.4: {}
zimmerframe@1.1.2: {}
-6
View File
@@ -1,6 +0,0 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {}
}
};
+13 -10
View File
@@ -1,12 +1,15 @@
/** @type {import("prettier").Config} */
const config = {
useTabs: false,
singleQuote: true,
trailingComma: 'none',
printWidth: 100,
plugins: ['prettier-plugin-svelte', 'prettier-plugin-tailwindcss'],
pluginSearchDirs: ['.'],
overrides: [{ files: '*.svelte', options: { parser: 'svelte' } }]
/** @type {import('prettier').Config & import('prettier-plugin-tailwindcss').PluginOptions} */
const prettierConfig = {
plugins: ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
tailwindStylesheet: "./src/styles/globals.css",
overrides: [
{
files: "*.svelte",
options: {
parser: "svelte",
},
},
],
};
export default config;
export default prettierConfig;
+2 -1
View File
@@ -1,10 +1,11 @@
// See https://kit.svelte.dev/docs/types#app
// See https://svelte.dev/docs/kit/types#app.d.ts
// for information about these interfaces
declare global {
namespace App {
// interface Error {}
// interface Locals {}
// interface PageData {}
// interface PageState {}
// interface Platform {}
}
}
+3 -30
View File
@@ -2,37 +2,10 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<meta name="robots" content="index, follow" />
<meta name="author" content="@pheralb_" />
<meta name="description" content="A beautiful library with SVG logos" />
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="%sveltekit.assets%/images/logo.svg" />
<link rel="icon" type="image/ico" href="%sveltekit.assets%/images/logo_ico.ico" />
<!-- OG -->
<meta property="og:type" content="website" />
<meta property="og:title" content="svgl" />
<meta property="og:description" content="A beautiful library with SVG logos" />
<meta property="og:url" content="https://svgl.app" />
<meta property="og:image" content="https://svgl.app/images/screenshot.png" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Svgl" />
<meta name="twitter:description" content="A beautiful library with SVG logos" />
<meta name="twitter:creator" content="@pheralb_" />
<meta name="twitter:image" content="https://svgl.app/images/screenshot.png" />
<!-- Title -->
<title>A beautiful library with SVG logos - Svgl</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
%sveltekit.head%
</head>
<body
data-sveltekit-preload-data="hover"
class="min-h-screen scroll-smooth overscroll-none bg-white font-sans text-mini antialiased [text-rendering:optimizeLegibility;] selection:bg-neutral-200 dark:bg-dark dark:text-white dark:selection:bg-neutral-700"
>
<div>%sveltekit.body%</div>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>
-3
View File
@@ -1,3 +0,0 @@
<div class="container mx-auto px-6 pt-4 xl:px-[18px]">
<slot />
</div>
-514
View File
@@ -1,514 +0,0 @@
<script lang="ts">
import type { iSVG } from '@/types/svg';
import { ClipboardIcon, CopyIcon, Loader, X } from 'lucide-svelte';
import { toast } from 'svelte-sonner';
import * as Popover from '@/ui/popover';
import * as Tabs from '@/ui/tabs';
import { buttonStyles } from '@/ui/styles';
// Utils:
import { cn } from '@/utils/cn';
import { clipboard } from '@/utils/clipboard';
import { copyToClipboard as figmaCopyToClipboard } from '@/figma/copy-to-clipboard';
import { getPrefixFromSvgUrl, prefixSvgIds } from '@/utils/prefixSvgIds';
// Templates:
import { getSource } from '@/templates/getSource';
import { getReactCode } from '@/templates/getReactCode';
import { getVueCode } from '@/templates/getVueCode';
import { getSvelteCode } from '@/templates/getSvelteCode';
import { getAngularCode } from '@/templates/getAngularCode';
import { getWebComponent } from '@/templates/getWebComponent';
import { getAstroCode } from '@/templates/getAstroCode';
//Icons:
import ReactIcon from '@/components/icons/reactIcon.svelte';
import VueIcon from '@/components/icons/vueIcon.svelte';
import SvelteIcon from '@/components/icons/svelteIcon.svelte';
import AngularIcon from '@/components/icons/angularIcon.svelte';
import WebComponentIcon from '@/components/icons/webComponentIcon.svelte';
import AstroIcon from '@/components/icons/astroIcon.svelte';
// Props:
export let iconSize = 24;
export let iconStroke = 2;
export let isInFigma = false;
export let isWordmarkSvg = false;
export let svgInfo: iSVG;
// Variables:
let optionsOpen = false;
let isLoading = false;
const getSvgUrl = () => {
let svgUrlToCopy;
const dark = document.documentElement.classList.contains('dark');
if (isWordmarkSvg) {
const svgHasTheme = typeof svgInfo.wordmark !== 'string';
if (!svgHasTheme) {
svgUrlToCopy =
typeof svgInfo.wordmark === 'string'
? svgInfo.wordmark
: "Something went wrong. Couldn't copy the SVG.";
}
svgUrlToCopy =
typeof svgInfo.wordmark !== 'string'
? dark
? svgInfo.wordmark?.dark
: svgInfo.wordmark?.light
: svgInfo.wordmark;
} else {
const svgHasTheme = typeof svgInfo.route !== 'string';
if (!svgHasTheme) {
svgUrlToCopy =
typeof svgInfo.route === 'string'
? svgInfo.route
: "Something went wrong. Couldn't copy the SVG.";
}
svgUrlToCopy =
typeof svgInfo.route !== 'string'
? dark
? svgInfo.route.dark
: svgInfo.route.light
: svgInfo.route;
}
return svgUrlToCopy;
};
// Copy SVG to clipboard:
const copyToClipboard = async () => {
const svgUrlToCopy = getSvgUrl();
optionsOpen = false;
let content = await getSource({
url: svgUrlToCopy
});
if (svgUrlToCopy) {
content = prefixSvgIds(content, getPrefixFromSvgUrl(svgUrlToCopy));
}
if (isInFigma) {
figmaCopyToClipboard(content);
}
await clipboard(content);
const category = Array.isArray(svgInfo.category)
? svgInfo.category.sort().join(' - ')
: svgInfo.category;
if (isInFigma) {
toast.success('Ready to paste in Figma', {
description: `${svgInfo.title} - ${category}`
});
return;
}
if (isWordmarkSvg) {
toast.success('Copied wordmark SVG to clipboard', {
description: `${svgInfo.title} - ${category}`
});
return;
}
toast.success('Copied to clipboard', {
description: `${svgInfo.title} - ${category}`
});
};
// Convert SVG as React component:
const convertSvgReactComponent = async (tsx: boolean) => {
const svgUrlToCopy = getSvgUrl();
optionsOpen = false;
isLoading = true;
const title = svgInfo.title.split(' ').join('');
let content = await getSource({
url: svgUrlToCopy
});
if (svgUrlToCopy) {
content = prefixSvgIds(content, getPrefixFromSvgUrl(svgUrlToCopy));
}
const dataComponent = { code: content, typescript: tsx, name: title };
const { data, error } = await getReactCode(dataComponent);
if (error || !data) {
toast.error('Failed to fetch React component', {
description: `${error ?? ''}`,
duration: 5000
});
isLoading = false;
return;
}
await clipboard(data);
toast.success(`Copied as React ${tsx ? 'TSX' : 'JSX'} component`, {
description: `${svgInfo.title} - ${svgInfo.category}`
});
isLoading = false;
};
// Copy SVG as Vue Component:
const convertSvgVueComponent = async (ts: boolean) => {
try {
const svgUrlToCopy = getSvgUrl();
optionsOpen = false;
let content = await getSource({
url: svgUrlToCopy
});
if (svgUrlToCopy) {
content = prefixSvgIds(content, getPrefixFromSvgUrl(svgUrlToCopy));
}
const copyCode = getVueCode({
content: content,
lang: ts ? 'ts' : 'js'
});
if (copyCode) {
await clipboard(copyCode);
}
const category = Array.isArray(svgInfo?.category)
? svgInfo.category.sort().join(' - ')
: svgInfo.category;
toast.success(`Copied as Vue ${ts ? 'TS' : 'JS'} component`, {
description: `${svgInfo?.title} - ${category}`
});
} catch (err) {
console.error(`Error copying Vue component:`, err);
toast.error(`Failed to copy Vue component`);
}
};
// Copy SVG as Svelte Component:
const convertSvgSvelteComponent = async (ts: boolean) => {
try {
const svgUrlToCopy = getSvgUrl();
optionsOpen = false;
let content = await getSource({
url: svgUrlToCopy
});
if (svgUrlToCopy) {
content = prefixSvgIds(content, getPrefixFromSvgUrl(svgUrlToCopy));
}
const copyCode = getSvelteCode({
content: content,
lang: ts ? 'ts' : 'js'
});
if (copyCode) {
await clipboard(copyCode);
}
const category = Array.isArray(svgInfo?.category)
? svgInfo.category.sort().join(' - ')
: svgInfo.category;
toast.success(`Copied as Svelte ${ts ? 'TS' : 'JS'} component`, {
description: `${svgInfo?.title} - ${category}`
});
} catch (err) {
console.error(`Error copying Svelte component:`, err);
toast.error(`Failed to copy Svelte component`);
}
};
// Copy SVG as Standalone Angular component:
const convertSvgAngularComponent = async () => {
isLoading = true;
optionsOpen = false;
const title = svgInfo.title.split(' ').join('');
const svgUrlToCopy = getSvgUrl();
let content = await getSource({
url: svgUrlToCopy
});
if (svgUrlToCopy) {
content = prefixSvgIds(content, getPrefixFromSvgUrl(svgUrlToCopy));
}
if (!content) {
toast.error('Failed to fetch the SVG content', {
duration: 5000
});
isLoading = false;
return;
}
const angularComponent = getAngularCode({
componentName: title,
svgContent: content
});
await clipboard(angularComponent);
toast.success(`Copied as Standalone Angular component`, {
description: `${svgInfo.title} - ${svgInfo.category}`
});
isLoading = false;
};
// Copy SVG as Web Component:
const convertSvgWebComponent = async () => {
isLoading = true;
optionsOpen = false;
const title = svgInfo.title.split(' ').join('');
const svgUrlToCopy = getSvgUrl();
let content = await getSource({
url: svgUrlToCopy
});
if (svgUrlToCopy) {
content = prefixSvgIds(content, getPrefixFromSvgUrl(svgUrlToCopy));
}
if (!content) {
toast.error('Failed to fetch the SVG content', {
duration: 5000
});
isLoading = false;
return;
}
const webComponentCode = getWebComponent({
name: title,
content: content
});
await clipboard(webComponentCode);
toast.success(`Copied as Web Component`, {
description: `${svgInfo.title} - ${svgInfo.category}`
});
isLoading = false;
};
// Copy SVG as Astro component:
const convertSvgAstroComponent = async () => {
isLoading = true;
optionsOpen = false;
const svgUrlToCopy = getSvgUrl();
let content = await getSource({
url: svgUrlToCopy
});
if (svgUrlToCopy) {
content = prefixSvgIds(content, getPrefixFromSvgUrl(svgUrlToCopy));
}
if (!content) {
toast.error('Failed to fetch the SVG content', {
duration: 5000
});
isLoading = false;
return;
}
const astroComponentCode = getAstroCode({
svgContent: content
});
await clipboard(astroComponentCode);
toast.success(`Copied as Astro Component`, {
description: `${svgInfo.title} - ${svgInfo.category}`
});
isLoading = false;
};
</script>
<Popover.Root open={optionsOpen} onOpenChange={(isOpen) => (optionsOpen = isOpen)}>
<Popover.Trigger
title="Copy SVG element as svg file, React TSX code, or React JSX code"
class="flex items-center space-x-2 rounded-md p-2 duration-100 hover:bg-neutral-200 dark:hover:bg-neutral-700/40"
>
{#if optionsOpen}
<X size={iconSize} strokeWidth={iconStroke} />
{:else if isLoading}
<Loader size={iconSize} strokeWidth={iconStroke} class="animate-spin" />
{:else}
<CopyIcon size={iconSize} strokeWidth={iconStroke} />
{/if}
</Popover.Trigger>
<Popover.Content class="flex flex-col space-y-2 p-4" sideOffset={2}>
<Tabs.Root value="source" class="flex w-full flex-col space-y-1">
<Tabs.List>
<Tabs.Trigger value="source">Source</Tabs.Trigger>
<div
class="ml-3 flex flex-row space-x-0.5 border-l border-dashed border-neutral-200 pl-3 dark:border-neutral-800"
>
<Tabs.Trigger value="web-component" title="Web Component">
<WebComponentIcon iconSize={21} />
</Tabs.Trigger>
<Tabs.Trigger value="react" title="React">
<ReactIcon iconSize={20} />
</Tabs.Trigger>
<Tabs.Trigger value="vue" title="Vue">
<VueIcon iconSize={20} />
</Tabs.Trigger>
<Tabs.Trigger value="svelte" title="Svelte">
<SvelteIcon iconSize={20} />
</Tabs.Trigger>
<Tabs.Trigger value="angular" title="Angular">
<AngularIcon iconSize={20} />
</Tabs.Trigger>
<Tabs.Trigger value="astro" title="Astro" class="text-black dark:text-white">
<AstroIcon iconSize={21} />
</Tabs.Trigger>
</div>
</Tabs.List>
<Tabs.Content value="source">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title={isWordmarkSvg ? 'Copy wordmark SVG to clipboard' : 'Copy SVG to clipboard'}
on:click={() => copyToClipboard()}
>
<ClipboardIcon size={16} strokeWidth={2} />
<span>Copy SVG</span>
</button>
</section>
</Tabs.Content>
<Tabs.Content value="react">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as React component"
disabled={isLoading}
on:click={() => convertSvgReactComponent(true)}
>
<ReactIcon iconSize={18} />
<span>Copy TSX</span>
</button>
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as React component"
disabled={isLoading}
on:click={() => convertSvgReactComponent(false)}
>
<ReactIcon iconSize={18} />
<span>Copy JSX</span>
</button>
</section>
</Tabs.Content>
<Tabs.Content value="svelte">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Svelte component"
disabled={isLoading}
on:click={() => convertSvgSvelteComponent(false)}
>
<SvelteIcon iconSize={18} />
<span>Copy JS</span>
</button>
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Svelte component"
disabled={isLoading}
on:click={() => convertSvgSvelteComponent(true)}
>
<SvelteIcon iconSize={18} />
<span>Copy TS</span>
</button>
</section>
</Tabs.Content>
<Tabs.Content value="vue">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Vue component"
disabled={isLoading}
on:click={() => convertSvgVueComponent(false)}
>
<VueIcon iconSize={18} />
<span>Copy JS</span>
</button>
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Vue component"
disabled={isLoading}
on:click={() => convertSvgVueComponent(true)}
>
<VueIcon iconSize={18} />
<span>Copy TS</span>
</button>
</section>
</Tabs.Content>
<Tabs.Content value="angular">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Standalone Component"
disabled={isLoading}
on:click={() => convertSvgAngularComponent()}
>
<AngularIcon iconSize={18} />
<span>Copy Standalone Component</span>
</button>
</section>
</Tabs.Content>
<Tabs.Content value="web-component">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Web Component"
disabled={isLoading}
on:click={() => convertSvgWebComponent()}
>
<WebComponentIcon iconSize={18} />
<span>Copy Web Component</span>
</button>
</section>
</Tabs.Content>
<Tabs.Content value="astro">
<section class="flex flex-col space-y-2">
<button
class={cn(buttonStyles, 'w-full rounded-md')}
title="Copy as Astro Component"
disabled={isLoading}
on:click={() => convertSvgAstroComponent()}
>
<AstroIcon iconSize={18} />
<span>Copy Astro Component</span>
</button>
</section>
</Tabs.Content>
</Tabs.Root>
<div
class="mt-1 flex w-full items-center text-center text-[12px] text-neutral-600 dark:text-neutral-400"
>
<p>
Remember to request permission from the creators for the use of the SVG. Modification is not
allowed.
</p>
</div>
</Popover.Content>
</Popover.Root>
-298
View File
@@ -1,298 +0,0 @@
<script lang="ts">
import type { iSVG } from '@/types/svg';
import JSZip from 'jszip';
import download from 'downloadjs';
import { toast } from 'svelte-sonner';
import { DownloadIcon } from 'lucide-svelte';
import { getSource } from '@/templates/getSource';
import {
Dialog,
DialogTrigger,
DialogContent,
DialogHeader,
DialogTitle,
DialogDescription,
DialogFooter
} from '@/ui/dialog';
import { buttonStyles } from '@/ui/styles';
import { cn } from '@/utils/cn';
import { getPrefixFromSvgUrl, prefixSvgIds } from '@/utils/prefixSvgIds';
// Props:
export let svgInfo: iSVG;
export let isDarkTheme: () => boolean;
// Shared:
let iconStroke = 1.8;
let iconSize = 16;
let mainDownloadStyles =
'flex items-center space-x-2 rounded-md p-2 duration-100 hover:bg-neutral-200 dark:hover:bg-neutral-700/40';
let cardDownloadStyles =
'flex w-full h-full flex-col p-4 rounded-md shadow-sm dark:bg-neutral-800/20 bg-neutral-200/10 border border-neutral-200 dark:border-neutral-800 space-y-2';
// Functions:
const downloadSvg = async (url?: string) => {
let content = await getSource({
url: url
});
if (url) {
content = prefixSvgIds(content, getPrefixFromSvgUrl(url));
}
download(content || '', url?.split('/').pop() || '', 'image/svg+xml');
const category = Array.isArray(svgInfo.category)
? svgInfo.category.sort().join(' - ')
: svgInfo.category;
toast.success(`Downloading...`, {
description: `${svgInfo.title} - ${category}`
});
};
// Download all variants:
const downloadAllVariants = async ({
lightRoute,
darkRoute,
isWordmark
}: {
lightRoute: string;
darkRoute: string;
isWordmark?: boolean;
}) => {
const zip = new JSZip();
let lightSvg = await getSource({
url: lightRoute
});
let darkSvg = await getSource({
url: darkRoute
});
lightSvg = prefixSvgIds(
lightSvg,
svgInfo.title.toLowerCase() + (isWordmark ? '_wordmark_light' : '_light')
);
darkSvg = prefixSvgIds(
darkSvg,
svgInfo.title.toLowerCase() + (isWordmark ? '_wordmark_dark' : '_dark')
);
if (isWordmark) {
zip.file(`${svgInfo.title}_wordmark_light.svg`, lightSvg);
zip.file(`${svgInfo.title}_wordmark_dark.svg`, darkSvg);
} else {
zip.file(`${svgInfo.title}_light.svg`, lightSvg);
zip.file(`${svgInfo.title}_dark.svg`, darkSvg);
}
zip.generateAsync({ type: 'blob' }).then((content) => {
download(
content,
isWordmark ? `${svgInfo.title}_wordmark_light_dark.zip` : `${svgInfo.title}_light_dark.zip`,
'application/zip'
);
});
const category = Array.isArray(svgInfo.category)
? svgInfo.category.sort().join(' - ')
: svgInfo.category;
toast.success('Downloading light & dark variants...', {
description: isWordmark
? `${svgInfo.title} - Wordmark - ${category}`
: `${svgInfo.title} - ${category}`
});
};
</script>
{#if typeof svgInfo.route === 'string' && svgInfo.wordmark === undefined}
<button
title="Download Light & Dark variants"
class={mainDownloadStyles}
on:click={() => {
if (typeof svgInfo.route === 'string') {
downloadSvg(svgInfo.route);
return;
}
}}
>
<DownloadIcon size={iconSize} strokeWidth={iconStroke} />
</button>
{:else}
<Dialog>
<DialogTrigger title="Download SVG" class={mainDownloadStyles}>
<DownloadIcon size={iconSize} strokeWidth={iconStroke} />
</DialogTrigger>
<DialogContent class="max-w-[630px]">
<DialogHeader>
<DialogTitle>Download {svgInfo.title} SVG</DialogTitle>
<DialogDescription>This logo has multiple options to download:</DialogDescription>
</DialogHeader>
<div
class={cn(
'flex h-full flex-col space-y-2 pb-0.5 pt-4',
'md:flex-row md:items-center md:justify-center md:space-x-2 md:space-y-0'
)}
>
{#if typeof svgInfo.route === 'string'}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme() ? svgInfo.route : svgInfo.route}
alt={svgInfo.title}
class="my-4 h-8"
/>
<button
title="Download logo"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.route === 'string') {
downloadSvg(svgInfo.route);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
<p>Icon logo</p>
</button>
</div>
{:else}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme() ? svgInfo.route.dark : svgInfo.route.light}
alt={svgInfo.title}
class="my-4 h-10"
/>
<button
title="Logo with light & dark variants"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.route !== 'string') {
downloadAllVariants({
lightRoute: svgInfo.route.light,
darkRoute: svgInfo.route.dark
});
}
}}
>
<DownloadIcon size={iconSize} />
<p>Light & dark variants</p>
</button>
<button
title="Download light variant"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.route !== 'string') {
downloadSvg(svgInfo.route.light);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
Only light variant
</button>
<button
title="Download dark variant"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.route !== 'string') {
downloadSvg(svgInfo.route.dark);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
Only dark variant
</button>
</div>
{/if}
{#if typeof svgInfo.wordmark === 'string' && svgInfo.wordmark !== undefined}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme() ? svgInfo.wordmark : svgInfo.wordmark}
alt={svgInfo.title}
class="my-4 h-8"
/>
<button
title="Download Wordmark logo"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.wordmark === 'string') {
downloadSvg(svgInfo.wordmark);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
<p>Wordmark logo</p>
</button>
</div>
{/if}
{#if typeof svgInfo.wordmark !== 'string' && svgInfo.wordmark !== undefined}
<div class={cardDownloadStyles}>
<img
src={isDarkTheme() ? svgInfo.wordmark.dark : svgInfo.wordmark.light}
alt={svgInfo.title}
class="my-4 h-10"
/>
<button
title="Download Wordmark light variant"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.wordmark !== 'string') {
downloadAllVariants({
lightRoute: svgInfo.wordmark?.light || '',
darkRoute: svgInfo.wordmark?.dark || '',
isWordmark: true
});
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
Light & dark variants
</button>
<button
title="Download Wordmark light variant"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.wordmark !== 'string') {
downloadSvg(svgInfo.wordmark?.light);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
Wordmark light variant
</button>
<button
title="Download Wordmark dark variant"
class={buttonStyles}
on:click={() => {
if (typeof svgInfo.wordmark !== 'string') {
downloadSvg(svgInfo.wordmark?.dark);
return;
}
}}
>
<DownloadIcon class="mr-2" size={iconSize} />
Wordmark dark variant
</button>
</div>
{/if}
</div>
<DialogFooter class="mt-3 text-xs text-neutral-600 dark:text-neutral-400">
<p>
Remember to request permission from the creators for the use of the SVG. Modification is
not allowed.
</p>
</DialogFooter>
</DialogContent>
</Dialog>
{/if}
-34
View File
@@ -1,34 +0,0 @@
<script lang="ts">
import { cn } from '@/utils/cn';
type methodType = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
export let method: methodType;
export let title: string;
export let description: string;
</script>
<div class={cn('border-2 border-neutral-100 dark:border-neutral-800 rounded-lg', 'p-4 mb-2')}>
<div class="flex items-center space-x-4 mb-4">
<p
class={cn(
'm-0 rounded-md font-medium px-1.5 py-0.5 text-sm leading-5 select-none',
method === 'GET' &&
' text-green-600 dark:text-green-500 bg-green-400/20 dark:bg-green-400/20',
method === 'POST' && ' text-blue-600 dark:text-blue-500 bg-blue-400/20 dark:bg-blue-400/20',
method === 'PUT' &&
' text-yellow-600 dark:text-yellow-500 bg-yellow-400/20 dark:bg-yellow-400/20',
method === 'PATCH' &&
' text-yellow-600 dark:text-yellow-500 bg-yellow-400/20 dark:bg-yellow-400/20',
method === 'DELETE' && ' text-red-600 dark:text-red-500 bg-red-400/20 dark:bg-red-400/20'
)}
>
{method}
</p>
<div class="flex flex-col space-y-0 m-0">
<h3 class="m-0 font-medium">{title}</h3>
<p class="mb-0 font-mono text-sm">{description}</p>
</div>
</div>
<slot />
</div>
-5
View File
@@ -1,5 +0,0 @@
<div
class="mt-4 grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-2 lg:grid-cols-4 xl:grid-cols-5"
>
<slot />
</div>
-54
View File
@@ -1,54 +0,0 @@
<script lang="ts">
import { toast } from 'svelte-sonner';
import * as ContextMenu from '@/ui/context-menu';
import { ArrowUpRightIcon, CopyIcon, StarsIcon } from 'lucide-svelte';
import Logo from './icons/logo.svelte';
import { clipboard } from '@/utils/clipboard';
import GithubIcon from './icons/githubIcon.svelte';
import { getSource } from '@/templates/getSource';
const logoUrl = '/library/svgl.svg';
const copyToClipboard = async () => {
const content = await getSource({
url: logoUrl
});
await clipboard(content);
toast.success('Copied to clipboard', {
description: `Svgl - Library`
});
};
const openUrl = (url: string) => {
window.open(url, '_blank');
};
</script>
<ContextMenu.Root>
<ContextMenu.Trigger class="flex items-center space-x-2">
<a href="/" aria-label="Go to the SVGL v4.1 home page">
<div class="flex items-center space-x-2 opacity-100 transition-opacity hover:opacity-80">
<svelte:component this={Logo} />
<span class="hidden text-xl font-medium tracking-tight md:block">svgl</span>
</div>
</a>
</ContextMenu.Trigger>
<ContextMenu.Content>
<ContextMenu.Item on:click={() => copyToClipboard()}>
<CopyIcon size={16} strokeWidth={1.5} />
<span>Copy as SVG</span>
</ContextMenu.Item>
<ContextMenu.Item on:click={() => openUrl('https://github.com/pheralb/svgl')}>
<GithubIcon iconSize={16} />
<span>Repository</span>
<ArrowUpRightIcon class="text-neutral-400 dark:text-neutral-500" size={14} strokeWidth={2} />
</ContextMenu.Item>
<ContextMenu.Item disabled class="font-mono">
<StarsIcon size={16} strokeWidth={1.5} />
<span>v4.6.1</span>
</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Root>
-48
View File
@@ -1,48 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
width={iconSize || 16}
height={iconSize || 16}
viewBox="0 0 242 256"
><g clip-path="url(#a)"
><mask
id="b"
width="242"
height="256"
x="0"
y="0"
maskUnits="userSpaceOnUse"
style="mask-type:luminance"><path fill="#fff" d="M0 0h242v256H0V0Z" /></mask
><g mask="url(#b)"
><path
fill="url(#c)"
d="m241 43-9 136L149 0l92 43Zm-58 176-62 36-63-36 12-31h101l12 31ZM121 68l32 80H88l33-80ZM9 179 0 43 92 0 9 179Z"
/><path
fill="url(#d)"
d="m241 43-9 136L149 0l92 43Zm-58 176-62 36-63-36 12-31h101l12 31ZM121 68l32 80H88l33-80ZM9 179 0 43 92 0 9 179Z"
/></g
></g
><defs
><linearGradient id="c" x1="53.2" x2="245" y1="231.9" y2="140.7" gradientUnits="userSpaceOnUse"
><stop stop-color="#E40035" /><stop offset=".2" stop-color="#F60A48" /><stop
offset=".4"
stop-color="#F20755"
/><stop offset=".5" stop-color="#DC087D" /><stop offset=".7" stop-color="#9717E7" /><stop
offset="1"
stop-color="#6C00F5"
/></linearGradient
>
<linearGradient id="d" x1="44.5" x2="170" y1="30.7" y2="174" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF31D9" /><stop
offset="1"
stop-color="#FF5BE1"
stop-opacity="0"
/></linearGradient
><clipPath id="a"><path fill="#fff" d="M0 0h242v256H0z" /></clipPath></defs
></svg
>
-20
View File
@@ -1,20 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
</script>
<svg
viewBox="0 0 256 366"
xmlns="http://www.w3.org/2000/svg"
width={iconSize || 16}
height={iconSize || 16}
preserveAspectRatio="xMidYMid"
><path
fill="currentColor"
d="M182.022 9.147c2.982 3.702 4.502 8.697 7.543 18.687L256 246.074a276.467 276.467 0 0 0-79.426-26.891L133.318 73.008a5.63 5.63 0 0 0-10.802.017L79.784 219.11A276.453 276.453 0 0 0 0 246.04L66.76 27.783c3.051-9.972 4.577-14.959 7.559-18.654a24.541 24.541 0 0 1 9.946-7.358C88.67 0 93.885 0 104.314 0h47.683c10.443 0 15.664 0 20.074 1.774a24.545 24.545 0 0 1 9.95 7.373Z"
/><path
fill="#FF5D01"
d="M189.972 256.46c-10.952 9.364-32.812 15.751-57.992 15.751-30.904 0-56.807-9.621-63.68-22.56-2.458 7.415-3.009 15.903-3.009 21.324 0 0-1.619 26.623 16.898 45.14 0-9.615 7.795-17.41 17.41-17.41 16.48 0 16.46 14.378 16.446 26.043l-.001 1.041c0 17.705 10.82 32.883 26.21 39.28a35.685 35.685 0 0 1-3.588-15.647c0-16.886 9.913-23.173 21.435-30.48 9.167-5.814 19.353-12.274 26.372-25.232a47.588 47.588 0 0 0 5.742-22.735c0-5.06-.786-9.938-2.243-14.516Z"
/></svg
>
-18
View File
@@ -1,18 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
</script>
<svg
width={iconSize || 16}
height={iconSize || 16}
fill="none"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="xMidYMid"
viewBox="0 0 256 256"
><path
d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"
fill="currentColor"
/>
</svg>
-60
View File
@@ -1,60 +0,0 @@
<svg
width="30"
name="SVGL Logo"
viewBox="0 0 512 512"
fill="none"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
class=""
><rect
id="r4"
width="512"
height="512"
x="0"
y="0"
rx="128"
fill="#222"
stroke="#FFFFFF"
stroke-width="0"
stroke-opacity="100%"
paint-order="stroke"
></rect><rect
width="512"
height="512"
x="0"
y="0"
fill="url(#r6)"
rx="128"
style="mix-blend-mode: overlay;"
></rect><clipPath id="clip"><use xlink:href="#r4"></use></clipPath><defs
><linearGradient
id="r5"
gradientUnits="userSpaceOnUse"
gradientTransform="rotate(135)"
style="transform-origin: center center;"
><stop stop-color="#222"></stop><stop offset="1" stop-color="#222222"></stop></linearGradient
><radialGradient
id="r6"
cx="0"
cy="0"
r="1"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(256) rotate(90) scale(512)"
><stop stop-color="white"></stop><stop offset="1" stop-color="white" stop-opacity="0"
></stop></radialGradient
></defs
><svg
xmlns="http://www.w3.org/2000/svg"
width="310"
height="310"
fill="#e8e8e8"
viewBox="0 0 256 256"
x="101"
y="101"
alignment-baseline="middle"
style="color: rgb(255, 255, 255);"
><path
d="M168,32H88A56.06,56.06,0,0,0,32,88v80a56.06,56.06,0,0,0,56,56h48a8.07,8.07,0,0,0,2.53-.41c26.23-8.75,76.31-58.83,85.06-85.06A8.07,8.07,0,0,0,224,136V88A56.06,56.06,0,0,0,168,32ZM48,168V88A40,40,0,0,1,88,48h80a40,40,0,0,1,40,40v40H184a56.06,56.06,0,0,0-56,56v24H88A40,40,0,0,1,48,168Zm96,35.14V184a40,40,0,0,1,40-40h19.14C191,163.5,163.5,191,144,203.14Z"
></path></svg
></svg
>

Before

Width:  |  Height:  |  Size: 1.7 KiB

-22
View File
@@ -1,22 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
export let className: IconProps['className'];
</script>
<svg
width={iconSize || 28}
height={iconSize || 28}
class={className}
viewBox="0 0 28 28"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M7 18.079V21L0 14L1.46 12.54L7 18.081V18.079ZM9.921 21H7L14 28L15.46 26.54L9.921 21ZM26.535 15.462L27.996 14L13.996 0L12.538 1.466L18.077 7.004H14.73L10.864 3.146L9.404 4.606L11.809 7.01H10.129V17.876H20.994V16.196L23.399 18.6L24.859 17.14L20.994 13.274V9.927L26.535 15.462ZM7.73 6.276L6.265 7.738L7.833 9.304L9.294 7.844L7.73 6.276ZM20.162 18.708L18.702 20.17L20.268 21.738L21.73 20.276L20.162 18.708ZM4.596 9.41L3.134 10.872L7 14.738V11.815L4.596 9.41ZM16.192 21.006H13.268L17.134 24.872L18.596 23.41L16.192 21.006Z"
fill="#FF6363"
/>
</svg>
File diff suppressed because one or more lines are too long
-19
View File
@@ -1,19 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
width={iconSize || 16}
height={iconSize || 16}
viewBox="0 0 256 308"
><path
fill="#FF3E00"
d="M239.682 40.707C211.113-.182 154.69-12.301 113.895 13.69L42.247 59.356a82.2 82.2 0 0 0-37.135 55.056a86.57 86.57 0 0 0 8.536 55.576a82.4 82.4 0 0 0-12.296 30.719a87.6 87.6 0 0 0 14.964 66.244c28.574 40.893 84.997 53.007 125.787 27.016l71.648-45.664a82.18 82.18 0 0 0 37.135-55.057a86.6 86.6 0 0 0-8.53-55.577a82.4 82.4 0 0 0 12.29-30.718a87.57 87.57 0 0 0-14.963-66.244"
/><path
fill="#FFF"
d="M106.889 270.841c-23.102 6.007-47.497-3.036-61.103-22.648a52.7 52.7 0 0 1-9.003-39.85a50 50 0 0 1 1.713-6.693l1.35-4.115l3.671 2.697a92.5 92.5 0 0 0 28.036 14.007l2.663.808l-.245 2.659a16.07 16.07 0 0 0 2.89 10.656a17.14 17.14 0 0 0 18.397 6.828a15.8 15.8 0 0 0 4.403-1.935l71.67-45.672a14.92 14.92 0 0 0 6.734-9.977a15.92 15.92 0 0 0-2.713-12.011a17.16 17.16 0 0 0-18.404-6.832a15.8 15.8 0 0 0-4.396 1.933l-27.35 17.434a52.3 52.3 0 0 1-14.553 6.391c-23.101 6.007-47.497-3.036-61.101-22.649a52.68 52.68 0 0 1-9.004-39.849a49.43 49.43 0 0 1 22.34-33.114l71.664-45.677a52.2 52.2 0 0 1 14.563-6.398c23.101-6.007 47.497 3.036 61.101 22.648a52.7 52.7 0 0 1 9.004 39.85a51 51 0 0 1-1.713 6.692l-1.35 4.116l-3.67-2.693a92.4 92.4 0 0 0-28.037-14.013l-2.664-.809l.246-2.658a16.1 16.1 0 0 0-2.89-10.656a17.14 17.14 0 0 0-18.398-6.828a15.8 15.8 0 0 0-4.402 1.935l-71.67 45.674a14.9 14.9 0 0 0-6.73 9.975a15.9 15.9 0 0 0 2.709 12.012a17.16 17.16 0 0 0 18.404 6.832a15.8 15.8 0 0 0 4.402-1.935l27.345-17.427a52.2 52.2 0 0 1 14.552-6.397c23.101-6.006 47.497 3.037 61.102 22.65a52.68 52.68 0 0 1 9.003 39.848a49.45 49.45 0 0 1-22.34 33.12l-71.664 45.673a52.2 52.2 0 0 1-14.563 6.398"
/></svg
>
-16
View File
@@ -1,16 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
width={iconSize || 16}
height={iconSize || 16}
viewBox="0 0 256 221"
><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0z" /><path
fill="#41B883"
d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0z"
/><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0z" /></svg
>
@@ -1,18 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let iconSize: IconProps['size'];
</script>
<svg viewBox="0 0 128 128" width={iconSize || 16} height={iconSize || 16}>
<path
fill="var(--bgcolor, #fff)"
d="m31 12-1 1L2 63l29 51h67l15-26v-2l14-23-15-24v-2L98 12H31zm21 30h21l13 21-13 21H52L40 63z"
/>
<path fill="#166da5" d="m122 63-12 21-18-21 18-21z" />
<path fill="#8fdb69" d="M108 88 89 65 78 84l17 26z" />
<path fill="#166da5" d="M108 38 89 61 78 42l17-26z" />
<path d="M63 110 35 63l28-47H33L6 63l27 47z" />
<path fill="#287bbe" d="m50 38 13-22h32l13 22zm28 4h32l11 19H89z" />
<path fill="#ddf021" d="m50 88 13 22h32l13-22zm28-4h32l11-19H89z" />
</svg>
-19
View File
@@ -1,19 +0,0 @@
<script lang="ts">
import type { IconProps } from '@/types/icon';
export let size: IconProps['size'];
export let color: IconProps['color'];
</script>
<svg
xmlns="http://www.w3.org/2000/svg"
width={size || 16}
height={size || 16}
name="Twitter"
fill="none"
viewBox="0 0 1200 1227"
><path
fill={color || 'currentColor'}
d="M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z"
/>
</svg>
-105
View File
@@ -1,105 +0,0 @@
<script lang="ts">
export let currentPath: string;
import { cn } from '@/utils/cn';
import Theme from './theme.svelte';
import { ArrowUpRight, CloudyIcon } from 'lucide-svelte';
import XIcon from './icons/xIcon.svelte';
import GithubIcon from './icons/githubIcon.svelte';
import HeaderLogoLink from './headerLogoLink.svelte';
const externalLinks = [
{
name: 'API',
url: '/api',
icon: CloudyIcon,
external: false,
label: "Go to the SVGL's API section"
},
{
name: 'Extensions',
url: 'https://github.com/pheralb/svgl?tab=readme-ov-file#-extensions',
icon: ArrowUpRight,
external: true,
label: "Go to the SVGL's extensions section"
},
{
name: 'Submit logo',
url: 'https://github.com/pheralb/svgl#-getting-started',
icon: ArrowUpRight,
external: true,
label: "Submit logo and go to the SVGL's getting started section"
}
];
</script>
<nav
class={cn(
'bg-white dark:bg-neutral-900',
'w-full border-b border-neutral-200 px-5 py-4 dark:border-neutral-800',
'sticky top-0 z-50',
'bg-white/90 backdrop-blur-md dark:bg-neutral-900/90'
)}
>
<div class="mx-auto flex items-center justify-between">
<HeaderLogoLink />
<div class="flex items-center space-x-0 md:space-x-7">
<div
class="flex items-center divide-x divide-dashed divide-neutral-300 dark:divide-neutral-700 md:space-x-4"
>
{#each externalLinks as link}
<a
href={link.url}
target={link.external ? '_blank' : ''}
aria-label={link.label ?? link.name}
class={cn(
'group flex items-center pl-2 text-[15px] opacity-80 transition-opacity hover:opacity-100 md:pl-3',
currentPath === link.url &&
'underline decoration-neutral-500 decoration-dotted underline-offset-8'
)}
>
{#if !link.external}
<svelte:component
this={link.icon}
size={16}
strokeWidth={1.5}
class="mr-2"
name={link.name}
/>
{/if}
<span class={cn('hidden md:block', !link.external && 'block')}>{link.name}</span>
{#if link.external}
<svelte:component
this={link.icon}
size={16}
name="External link"
strokeWidth={1.5}
class="ml-1 hidden transition-transform duration-300 group-hover:-translate-y-[1px] group-hover:translate-x-[1px] md:block"
/>
{/if}
</a>
{/each}
</div>
<div class="flex items-center space-x-4">
<a
href="https://twitter.com/pheralb_"
target="_blank"
class="flex items-center space-x-1 opacity-80 transition-opacity hover:opacity-100"
title="Twitter"
>
<XIcon size={16} color="currentColor" />
</a>
<a
href="https://github.com/pheralb/svgl"
target="_blank"
class="flex items-center space-x-1 opacity-80 transition-opacity hover:opacity-100"
title="GitHub"
>
<GithubIcon iconSize={19} />
</a>
<Theme />
</div>
</div>
</div>
</nav>
-29
View File
@@ -1,29 +0,0 @@
<script lang="ts">
import { buttonStyles } from '@/ui/styles';
export let notFoundTerm: string;
import { PackageOpen, ArrowUpRight } from 'lucide-svelte';
</script>
<div class="mt-6 flex w-full flex-col items-center justify-center text-gray-600 dark:text-gray-400">
<PackageOpen size={40} class="mb-4" />
<p class="text-xl mb-1 font-medium">Couldn't find the Icon</p>
<p class="text-md mb-4 font-mono">"{notFoundTerm}"</p>
<div class="flex items-center space-x-1">
<a
href="https://github.com/pheralb/svgl?tab=readme-ov-file#-getting-started"
target="_blank"
class={buttonStyles}
>
<span>Submit logo</span>
<ArrowUpRight size={16} />
</a>
<a
href="https://github.com/pheralb/svgl/issues/new?assignees=pheralb&labels=request&projects=&template=request-svg-.md&title=%5BRequest%5D%3A"
target="_blank"
class={buttonStyles}
>
<span>Request Icon</span>
<ArrowUpRight size={16} />
</a>
</div>
</div>
-77
View File
@@ -1,77 +0,0 @@
<script lang="ts">
import { page } from '$app/stores';
import { inputStyles } from '@/ui/styles';
import { Command, SearchIcon } from 'lucide-svelte';
export let searchTerm: string;
export let placeholder: string = 'Search...';
export let clearSearch: () => void;
import { X } from 'lucide-svelte';
let inputElement;
function focusInput(node: HTMLElement) {
const handleKeydown = (event: KeyboardEvent) => {
if ((event.metaKey || event.ctrlKey) && event.key === 'k') {
event.preventDefault();
node.focus();
}
};
window.addEventListener('keydown', handleKeydown);
return {
destroy() {
window.removeEventListener('keydown', handleKeydown);
}
};
}
let searchParams = {} as { [key: string]: string };
$: {
if ($page) {
searchParams = Object.fromEntries($page.url.searchParams);
if (!searchParams?.search) {
clearSearch();
}
}
}
</script>
<div class="sticky top-[63px] z-50">
<div class="relative w-full text-[16px]">
<div class="absolute inset-y-0 left-0 flex items-center pl-3 text-neutral-500">
<div class="pointer-events-none">
<SearchIcon size={20} strokeWidth={searchTerm ? 2.5 : 1.5} />
</div>
</div>
<input
type="text"
{placeholder}
autocomplete="off"
class={inputStyles}
bind:value={searchTerm}
on:input
use:focusInput
bind:this={inputElement}
/>
{#if searchTerm.length > 0}
<div class="absolute inset-y-0 right-0 flex items-center pr-3">
<button
type="button"
class="focus:outline-none focus:ring-1 focus:ring-neutral-300"
on:click={clearSearch}
>
<X size={18} />
</button>
</div>
{:else}
<div class="absolute inset-y-0 right-0 flex items-center pr-4 text-neutral-500">
<div class="flex h-full items-center pointer-events-none gap-x-1 font-mono">
<Command size={16} />
<span>K</span>
</div>
</div>
{/if}
</div>
</div>
-239
View File
@@ -1,239 +0,0 @@
<script lang="ts">
import type { iSVG } from '@/types/svg';
// Utils:
import { cn } from '@/utils/cn';
// Icons:
import {
LinkIcon,
ChevronsRight,
Baseline,
Sparkles,
EllipsisIcon,
TagIcon,
XIcon,
PaletteIcon
} from 'lucide-svelte';
// Components & styles:
import DownloadSvg from './downloadSvg.svelte';
import CopySvg from './copySvg.svelte';
import { badgeStyles, buttonStyles } from '@/ui/styles';
import * as Popover from '@/ui/popover';
// Figma
import { onMount } from 'svelte';
import { insertSVG as figmaInsertSVG } from '@/figma/insert-svg';
import { getSource } from '@/templates/getSource';
// Props:
export let svgInfo: iSVG;
export let searchTerm: string;
let isInFigma = false;
onMount(() => {
const searchParams = new URLSearchParams(window.location.search);
isInFigma = searchParams.get('figma') === '1';
});
// Wordmark SVG:
let wordmarkSvg = false;
$: {
if (searchTerm) {
wordmarkSvg = false;
}
}
const insertSVG = async (url?: string) => {
const content = (await getSource({
url
})) as string;
figmaInsertSVG(content);
};
// Icon Stroke & Size:
let iconStroke = 1.8;
let iconSize = 16;
// Max Categories:
let maxVisibleCategories = 1;
let moreTagsOptions = false;
// Global Styles:
const globalImageStyles = 'mb-4 mt-2 h-10 select-none pointer-events-none';
const btnStyles =
'flex items-center space-x-2 rounded-md p-2 duration-100 hover:bg-neutral-200 dark:hover:bg-neutral-700/40';
</script>
<div
class="group flex flex-col items-center justify-center rounded-md border border-neutral-200 p-4 transition-colors duration-100 hover:bg-neutral-100/80 dark:border-neutral-800 dark:hover:bg-neutral-800/20"
>
<!-- Image -->
{#if wordmarkSvg == true && svgInfo.wordmark !== undefined}
<img
class={cn('hidden dark:block', globalImageStyles)}
src={typeof svgInfo.wordmark !== 'string'
? svgInfo.wordmark?.dark || ''
: svgInfo.wordmark || ''}
alt={svgInfo.title}
title={svgInfo.title}
loading="lazy"
/>
<img
class={cn('block dark:hidden', globalImageStyles)}
src={typeof svgInfo.wordmark !== 'string'
? svgInfo.wordmark?.light || ''
: svgInfo.wordmark || ''}
alt={svgInfo.title}
title={svgInfo.title}
loading="lazy"
/>
{:else}
<img
class={cn('hidden dark:block', globalImageStyles)}
src={typeof svgInfo.route !== 'string' ? svgInfo.route.dark : svgInfo.route}
alt={svgInfo.title}
title={svgInfo.title}
loading="lazy"
/>
<img
class={cn('block dark:hidden', globalImageStyles)}
src={typeof svgInfo.route !== 'string' ? svgInfo.route.light : svgInfo.route}
alt={svgInfo.title}
title={svgInfo.title}
loading="lazy"
/>
{/if}
<!-- Title -->
<div class="mb-3 flex flex-col items-center justify-center space-y-1">
<p class="select-all truncate text-balance text-center text-[15px] font-medium">
{svgInfo.title}
</p>
<div class="flex items-center justify-center space-x-1">
{#if Array.isArray(svgInfo.category)}
{#each svgInfo.category.slice(0, maxVisibleCategories) as c, index}
<a
href={`/directory/${c.toLowerCase()}`}
class={badgeStyles}
title={`This icon is part of the ${svgInfo.category} category`}>{c}</a
>
{/each}
{#if svgInfo.category.length > maxVisibleCategories}
<Popover.Root
open={moreTagsOptions}
onOpenChange={(isOpen) => (moreTagsOptions = isOpen)}
>
<Popover.Trigger class={badgeStyles} title="More Tags">
{#if moreTagsOptions}
<XIcon size={15} strokeWidth={1.5} />
{:else}
<EllipsisIcon size={15} strokeWidth={1.5} />
{/if}
</Popover.Trigger>
<Popover.Content class="flex flex-col space-y-2">
<p class="font-medium">More tags:</p>
{#each svgInfo.category.slice(maxVisibleCategories) as c}
<a
href={`/directory/${c.toLowerCase()}`}
class={cn(buttonStyles, 'w-full rounded-md')}
>
<TagIcon size={15} strokeWidth={1.5} />
<span>{c}</span>
</a>
{/each}
</Popover.Content>
</Popover.Root>
{/if}
{:else}
<a href={`/directory/${svgInfo.category.toLowerCase()}`} class={badgeStyles}>
{svgInfo.category}
</a>
{/if}
</div>
</div>
<!-- Actions -->
<div class="flex items-center space-x-1">
{#if isInFigma}
<button
title="Insert to figma"
on:click={() => {
const svgHasTheme = typeof svgInfo.route !== 'string';
if (!svgHasTheme) {
insertSVG(
typeof svgInfo.route === 'string'
? svgInfo.route
: "Something went wrong. Couldn't copy the SVG."
);
return;
}
const dark = document.documentElement.classList.contains('dark');
insertSVG(
typeof svgInfo.route !== 'string'
? dark
? svgInfo.route.dark
: svgInfo.route.light
: svgInfo.route
);
}}
class={btnStyles}
>
<ChevronsRight size={iconSize} strokeWidth={iconStroke} />
</button>
{/if}
{#if wordmarkSvg && svgInfo.wordmark !== undefined}
<CopySvg {iconSize} {iconStroke} {svgInfo} isInFigma={false} isWordmarkSvg={true} />
{:else}
<CopySvg {iconSize} {iconStroke} {svgInfo} isInFigma={false} isWordmarkSvg={false} />
{/if}
<DownloadSvg
{svgInfo}
isDarkTheme={() => {
const dark = document.documentElement.classList.contains('dark');
return dark;
}}
/>
<a
href={svgInfo.url}
title="Website"
target="_blank"
rel="noopener noreferrer"
class={btnStyles}
>
<LinkIcon size={iconSize} strokeWidth={iconStroke} />
</a>
{#if svgInfo.wordmark !== undefined}
<button
title={wordmarkSvg ? 'Show logo SVG' : 'Show wordmark SVG'}
on:click={() => {
wordmarkSvg = !wordmarkSvg;
}}
class={btnStyles}
>
{#if wordmarkSvg}
<Sparkles size={iconSize} strokeWidth={iconStroke} />
{:else}
<Baseline size={iconSize} strokeWidth={iconStroke} />
{/if}
</button>
{/if}
{#if svgInfo.brandUrl !== undefined}
<a
href={svgInfo.brandUrl}
title="Brand Assets"
target="_blank"
rel="noopener noreferrer"
class={btnStyles}
>
<PaletteIcon size={iconSize} strokeWidth={iconStroke} />
</a>
{/if}
</div>
</div>
-14
View File
@@ -1,14 +0,0 @@
<script lang="ts">
import { toggleMode, mode } from 'mode-watcher';
// Icons:
import { MoonIcon, SunIcon } from 'lucide-svelte';
</script>
<button on:click={toggleMode} aria-label="Toggle dark mode" class="opacity-80 hover:opacity-100">
{#if $mode === 'light'}
<SunIcon size={20} strokeWidth={1.5} />
{:else}
<MoonIcon size={20} strokeWidth={1.5} />
{/if}
</button>
-10
View File
@@ -1,10 +0,0 @@
<script lang="ts">
import { fly } from 'svelte/transition';
export let pathname: string = '';
</script>
{#key pathname}
<div in:fly={{ x: 0, y: 23, duration: 450 }}>
<slot />
</div>
{/key}
-45
View File
@@ -1,45 +0,0 @@
<script lang="ts">
import { AlertTriangleIcon, Check } from 'lucide-svelte';
import { browser } from '$app/environment';
import { buttonStyles } from '@/ui/styles';
import { cn } from '@/utils/cn';
let warning = false;
let warningName = 'svgl_warn_message';
const initialValue = browser ? window.localStorage.getItem(warningName) : true;
</script>
{#if !warning && !initialValue}
<div
class="flex w-full flex-col items-center justify-between space-x-0 space-y-2 border-b border-neutral-200 bg-neutral-100/60 px-3 py-2 text-neutral-700 dark:border-neutral-800 dark:bg-neutral-800/40 dark:text-neutral-300 md:flex-row md:space-x-2 md:space-y-0"
>
<div class="flex items-center space-x-2">
<AlertTriangleIcon
size={18}
strokeWidth={2}
class="mr-1 flex-shrink-0 animate-pulse text-yellow-600 dark:text-yellow-500"
/>
<p>
All SVGs include links to the respective products or companies that own them. <strong
>Please contact the owner directly if you need to use their logo.</strong
>
If you are the owner of an SVG and would like it removed,
<a
target="_blank"
class="underline decoration-neutral-500 decoration-dotted underline-offset-4"
href="https://github.com/pheralb/svgl/issues/new">create an issue</a
> on GitHub.
</p>
</div>
<button
class={cn(buttonStyles, 'h-10 text-sm')}
on:click={() => {
localStorage.setItem(warningName, 'true');
warning = true;
}}
>
<Check size={14} strokeWidth={2} />
<span>Accept</span>
</button>
</div>
{/if}
+62 -58
View File
@@ -1,87 +1,91 @@
import type { Extension } from '@/types/extensions';
import type { Extension } from "@/types/extensions";
export const extensions: Extension[] = [
{
name: 'SVGL for Raycast',
description: 'Search SVG logos via svgl using Raycast.',
url: 'https://www.raycast.com/1weiho/svgl',
image: 'https://github.com/pheralb/svgl/raw/main/static/library/raycast.svg',
name: "SVGL for Raycast",
description: "Search SVG logos via svgl using Raycast.",
url: "https://www.raycast.com/1weiho/svgl",
image:
"https://github.com/pheralb/svgl/raw/main/static/library/raycast.svg",
created_by: {
name: '1weiho',
socialUrl: 'https://x.com/1weiho'
}
name: "1weiho",
socialUrl: "https://x.com/1weiho",
},
},
{
name: 'SVGL for PowerToys',
description: 'Search & copy SVG logos in PowerToys Run.',
url: 'https://svgl.sameerjs.com/',
image: 'https://github.com/pheralb/svgl/raw/main/static/library/powertoys.svg',
name: "SVGL for PowerToys",
description: "Search & copy SVG logos in PowerToys Run.",
url: "https://svgl.sameerjs.com/",
image:
"https://github.com/pheralb/svgl/raw/main/static/library/powertoys.svg",
created_by: {
name: 'SameerJS6',
socialUrl: 'https://svgl.sameerjs.com/'
}
name: "SameerJS6",
socialUrl: "https://svgl.sameerjs.com/",
},
},
{
name: 'SVGL for React',
name: "SVGL for React",
description:
'An open-source NPM package that offers a collection of high-quality SVGL logos for React.',
url: 'https://github.com/ridemountainpig/svgl-react?tab=readme-ov-file',
"An open-source NPM package that offers a collection of high-quality SVGL logos for React.",
url: "https://github.com/ridemountainpig/svgl-react?tab=readme-ov-file",
image:
'https://raw.githubusercontent.com/pheralb/svgl/0d4514c9521688e76c6a1b426f3054a424d96aa5/static/library/react_dark.svg',
"https://raw.githubusercontent.com/pheralb/svgl/0d4514c9521688e76c6a1b426f3054a424d96aa5/static/library/react_dark.svg",
created_by: {
name: 'ridemountainpig',
socialUrl: 'https://twitter.com/ridemountainpig'
}
name: "ridemountainpig",
socialUrl: "https://twitter.com/ridemountainpig",
},
},
{
name: 'SVGL Badges',
description: 'A beautiful badges with svgl SVG logos.',
url: 'https://svgl-badge.vercel.app/',
name: "SVGL Badges",
description: "A beautiful badges with svgl SVG logos.",
url: "https://svgl-badge.vercel.app/",
image:
'https://camo.githubusercontent.com/b516f0f725ad1827dd854f16ec08626569d02ab827cd06b4f42163e519b813c7/68747470733a2f2f7376676c2d62616467652e76657263656c2e6170702f6170692f4c6962726172792f5376676c3f7468656d653d6c69676874',
"https://camo.githubusercontent.com/b516f0f725ad1827dd854f16ec08626569d02ab827cd06b4f42163e519b813c7/68747470733a2f2f7376676c2d62616467652e76657263656c2e6170702f6170692f4c6962726172792f5376676c3f7468656d653d6c69676874",
created_by: {
name: 'ridemountainpig',
socialUrl: 'https://twitter.com/ridemountainpig'
}
name: "ridemountainpig",
socialUrl: "https://twitter.com/ridemountainpig",
},
},
{
name: 'Magic',
description: 'AI extension for Cursor & other IDEs.',
url: 'https://21st.dev/magic',
image: 'https://github.com/serafimcloud/21st/blob/main/apps/web/public/icon.png?raw=true',
name: "Magic",
description: "AI extension for Cursor & other IDEs.",
url: "https://21st.dev/magic",
image:
"https://github.com/serafimcloud/21st/blob/main/apps/web/public/icon.png?raw=true",
created_by: {
name: 'serafim',
socialUrl: 'https://x.com/serafimcloud'
}
name: "serafim",
socialUrl: "https://x.com/serafimcloud",
},
},
{
name: 'svgls',
description: 'A CLI for easily adding SVG icons to your project.',
url: 'https://github.com/sujjeee/svgls',
image: 'https://github.com/pheralb/svgl/raw/main/static/library/svgl.svg',
name: "svgls",
description: "A CLI for easily adding SVG icons to your project.",
url: "https://github.com/sujjeee/svgls",
image: "https://github.com/pheralb/svgl/raw/main/static/library/svgl.svg",
created_by: {
name: 'Sujjeee',
socialUrl: 'https://twitter.com/sujjeeee'
}
name: "Sujjeee",
socialUrl: "https://twitter.com/sujjeeee",
},
},
{
name: 'SVGL for Figma',
description: 'Add svgs from svgl to your Figma project.',
url: 'https://www.figma.com/community/plugin/1320306989350693206/svgl',
image: 'https://github.com/pheralb/svgl/raw/main/static/library/figma.svg',
name: "SVGL for Figma",
description: "Add svgs from svgl to your Figma project.",
url: "https://www.figma.com/community/plugin/1320306989350693206/svgl",
image: "https://github.com/pheralb/svgl/raw/main/static/library/figma.svg",
created_by: {
name: 'Quill',
socialUrl: 'https://x.com/quillzhou'
}
name: "Quill",
socialUrl: "https://x.com/quillzhou",
},
},
{
name: 'SVGL for VSCode',
description: 'SVGL directly in your VSCode.',
url: 'https://marketplace.visualstudio.com/items?itemName=EsteveSegura.svgl',
image: 'https://github.com/pheralb/svgl/blob/main/static/library/vscode.svg',
name: "SVGL for VSCode",
description: "SVGL directly in your VSCode.",
url: "https://marketplace.visualstudio.com/items?itemName=EsteveSegura.svgl",
image:
"https://github.com/pheralb/svgl/blob/main/static/library/vscode.svg",
created_by: {
name: 'GiR',
socialUrl: 'https://x.com/girlazote'
}
}
name: "GiR",
socialUrl: "https://x.com/girlazote",
},
},
];
+9 -5
View File
@@ -1,5 +1,5 @@
import type { iSVG } from '@/types/svg';
import { svgs } from './svgs';
import type { iSVG } from "@/types/svg";
import { svgs } from "./svgs";
export const svgsData = svgs.map((svg: iSVG, index: number) => {
return { id: index, ...svg };
@@ -7,17 +7,21 @@ export const svgsData = svgs.map((svg: iSVG, index: number) => {
export const getCategories = () => {
const categories = svgs
.flatMap((svg) => (Array.isArray(svg.category) ? svg.category : [svg.category]))
.flatMap((svg) =>
Array.isArray(svg.category) ? svg.category : [svg.category],
)
.filter((category, index, array) => array.indexOf(category) === index);
return categories;
};
export const getCategoriesForDirectory = () => {
const categories = svgs
.flatMap((svg) => (Array.isArray(svg.category) ? svg.category : [svg.category]))
.flatMap((svg) =>
Array.isArray(svg.category) ? svg.category : [svg.category],
)
.filter((category, index, array) => array.indexOf(category) === index)
.map((category) => ({
slug: category.toLowerCase()
slug: category.toLowerCase(),
}));
return categories;
};
+2414 -2414
View File
@@ -1,3812 +1,3812 @@
import type { iSVG } from '@/types/svg';
import type { iSVG } from "@/types/svg";
export const svgs: iSVG[] = [
{
title: 'Google Classroom',
category: ['Google', 'Education'],
route: '/library/google-classroom.svg',
url: 'https://edu.google.com/workspace-for-education/products/classroom/',
brandUrl: 'https://developers.google.com/workspace/classroom/brand'
title: "Google Classroom",
category: ["Google", "Education"],
route: "/library/google-classroom.svg",
url: "https://edu.google.com/workspace-for-education/products/classroom/",
brandUrl: "https://developers.google.com/workspace/classroom/brand",
},
{
title: 'Kimi',
category: 'AI',
route: '/library/kimi.svg',
url: 'https://kimi.ai/'
title: "Kimi",
category: "AI",
route: "/library/kimi.svg",
url: "https://kimi.ai/",
},
{
title: 'Perspective',
category: 'Software',
title: "Perspective",
category: "Software",
route: {
light: '/library/perspective-light.svg',
dark: '/library/perspective-dark.svg'
light: "/library/perspective-light.svg",
dark: "/library/perspective-dark.svg",
},
wordmark: {
light: '/library/perspective-wordmark-light.svg',
dark: '/library/perspective-wordmark-dark.svg'
light: "/library/perspective-wordmark-light.svg",
dark: "/library/perspective-wordmark-dark.svg",
},
url: 'https://perspective.co/'
url: "https://perspective.co/",
},
{
title: 'Windsurf',
category: ['Software', 'AI'],
route: '/library/windsurf-logo.svg',
url: 'https://codeium.com/windsurf'
title: "Windsurf",
category: ["Software", "AI"],
route: "/library/windsurf-logo.svg",
url: "https://codeium.com/windsurf",
},
{
title: 'Mattermost',
category: 'Software',
title: "Mattermost",
category: "Software",
route: {
light: '/library/mattermost-light.svg',
dark: '/library/mattermost-dark.svg'
light: "/library/mattermost-light.svg",
dark: "/library/mattermost-dark.svg",
},
url: 'http://mattermost.com/'
url: "http://mattermost.com/",
},
{
title: 'Inngest',
category: 'Software',
title: "Inngest",
category: "Software",
route: {
light: '/library/inngest-light.svg',
dark: '/library/inngest-dark.svg'
light: "/library/inngest-light.svg",
dark: "/library/inngest-dark.svg",
},
url: 'https://inngest.com/'
url: "https://inngest.com/",
},
{
title: 'daisyUI',
category: 'Library',
route: '/library/daisyui.svg',
url: 'https://daisyui.com/'
title: "daisyUI",
category: "Library",
route: "/library/daisyui.svg",
url: "https://daisyui.com/",
},
{
title: 'PayPal',
category: 'Payment',
route: '/library/paypal.svg',
wordmark: '/library/paypal-wordmark.svg',
url: 'https://paypal.com'
title: "PayPal",
category: "Payment",
route: "/library/paypal.svg",
wordmark: "/library/paypal-wordmark.svg",
url: "https://paypal.com",
},
{
title: 'Google Drive',
category: 'Google',
route: '/library/drive.svg',
url: 'https://www.google.com/drive/'
title: "Google Drive",
category: "Google",
route: "/library/drive.svg",
url: "https://www.google.com/drive/",
},
{
title: 'Amazon Q',
category: 'AI',
route: '/library/amazon-q.svg',
url: 'https://aws.amazon.com/q'
title: "Amazon Q",
category: "AI",
route: "/library/amazon-q.svg",
url: "https://aws.amazon.com/q",
},
{
title: 'UV',
category: 'Devtool',
route: '/library/uv.svg',
url: 'https://docs.astral.sh/uv/'
title: "UV",
category: "Devtool",
route: "/library/uv.svg",
url: "https://docs.astral.sh/uv/",
},
{
title: 'Milanote',
category: 'Software',
title: "Milanote",
category: "Software",
route: {
light: '/library/milanote-light.svg',
dark: '/library/milanote-dark.svg'
light: "/library/milanote-light.svg",
dark: "/library/milanote-dark.svg",
},
wordmark: {
light: '/library/milanote-wordmark-light.svg',
dark: '/library/milanote-wordmark-dark.svg'
light: "/library/milanote-wordmark-light.svg",
dark: "/library/milanote-wordmark-dark.svg",
},
url: 'https://milanote.com'
url: "https://milanote.com",
},
{
title: 'Together AI',
category: 'AI',
title: "Together AI",
category: "AI",
route: {
light: '/library/togetherai_light.svg',
dark: '/library/togetherai_dark.svg'
light: "/library/togetherai_light.svg",
dark: "/library/togetherai_dark.svg",
},
url: 'https://www.together.ai/'
url: "https://www.together.ai/",
},
{
title: 'Suno',
category: 'AI',
route: '/library/suno.svg',
title: "Suno",
category: "AI",
route: "/library/suno.svg",
wordmark: {
light: '/library/suno_wordmark_light.svg',
dark: '/library/suno_wordmark_dark.svg'
light: "/library/suno_wordmark_light.svg",
dark: "/library/suno_wordmark_dark.svg",
},
url: 'https://suno.com/'
url: "https://suno.com/",
},
{
title: 'Groq',
category: 'AI',
route: '/library/groq.svg',
title: "Groq",
category: "AI",
route: "/library/groq.svg",
wordmark: {
light: '/library/groq_wordmark_light.svg',
dark: '/library/groq_wordmark_dark.svg'
light: "/library/groq_wordmark_light.svg",
dark: "/library/groq_wordmark_dark.svg",
},
url: 'https://groq.com/'
url: "https://groq.com/",
},
{
title: 'Cohere',
category: 'AI',
route: '/library/cohere.svg',
wordmark: '/library/cohere_wordmark.svg',
url: 'https://cohere.com/'
title: "Cohere",
category: "AI",
route: "/library/cohere.svg",
wordmark: "/library/cohere_wordmark.svg",
url: "https://cohere.com/",
},
{
title: 'Ollama',
category: 'AI',
title: "Ollama",
category: "AI",
route: {
light: '/library/ollama_light.svg',
dark: '/library/ollama_dark.svg'
light: "/library/ollama_light.svg",
dark: "/library/ollama_dark.svg",
},
url: 'https://www.ollama.com/'
url: "https://www.ollama.com/",
},
{
title: 'Cisco',
category: 'Software',
title: "Cisco",
category: "Software",
route: {
light: '/library/cisco_light.svg',
dark: '/library/cisco_dark.svg'
light: "/library/cisco_light.svg",
dark: "/library/cisco_dark.svg",
},
url: 'https://www.cisco.com/'
url: "https://www.cisco.com/",
},
{
title: 'Animate',
category: ['Software', 'Design'],
route: '/library/animate.svg',
url: 'https://www.adobe.com/products/animate'
title: "Animate",
category: ["Software", "Design"],
route: "/library/animate.svg",
url: "https://www.adobe.com/products/animate",
},
{
title: 'Apollo.io',
category: 'Software',
route: '/library/apollo.io.svg',
url: 'https://www.apollo.io/'
title: "Apollo.io",
category: "Software",
route: "/library/apollo.io.svg",
url: "https://www.apollo.io/",
},
{
title: 'Blender',
category: ['Software', 'Design'],
route: '/library/blender.svg',
url: 'https://blender.org/',
brandUrl: 'https://www.blender.org/about/logo/'
title: "Blender",
category: ["Software", "Design"],
route: "/library/blender.svg",
url: "https://blender.org/",
brandUrl: "https://www.blender.org/about/logo/",
},
{
title: 'Lua',
category: 'Language',
route: '/library/lua.svg',
url: 'https://lua.org/'
title: "Lua",
category: "Language",
route: "/library/lua.svg",
url: "https://lua.org/",
},
{
title: 'Mercado Pago',
category: 'Payment',
route: '/library/mercado-pago.svg',
wordmark: '/library/mercado-pago-wordmark.svg',
url: 'https://www.mercadopago.com/developers/'
title: "Mercado Pago",
category: "Payment",
route: "/library/mercado-pago.svg",
wordmark: "/library/mercado-pago-wordmark.svg",
url: "https://www.mercadopago.com/developers/",
},
{
title: 'Basewell',
category: ['AI', 'Software'],
route: '/library/basewell.svg',
url: 'https://www.basewell.com/'
title: "Basewell",
category: ["AI", "Software"],
route: "/library/basewell.svg",
url: "https://www.basewell.com/",
},
{
title: 'ahooks',
category: 'Library',
route: '/library/ahooks.svg',
title: "ahooks",
category: "Library",
route: "/library/ahooks.svg",
wordmark: {
light: '/library/ahooks-wordmark-light.svg',
dark: '/library/ahooks-wordmark-dark.svg'
light: "/library/ahooks-wordmark-light.svg",
dark: "/library/ahooks-wordmark-dark.svg",
},
url: 'https://ahooks.js.org/'
url: "https://ahooks.js.org/",
},
{
title: 'Discord',
category: 'Software',
route: '/library/discord.svg',
url: 'https://discord.com/',
brandUrl: 'https://discord.com/branding'
title: "Discord",
category: "Software",
route: "/library/discord.svg",
url: "https://discord.com/",
brandUrl: "https://discord.com/branding",
},
{
title: 'Aliexpress',
category: 'Software',
route: '/library/aliexpress-icon.svg',
wordmark: '/library/aliexpress-logo.svg',
url: 'https://aliexpress.com/'
title: "Aliexpress",
category: "Software",
route: "/library/aliexpress-icon.svg",
wordmark: "/library/aliexpress-logo.svg",
url: "https://aliexpress.com/",
},
{
title: 'Preact',
category: 'Library',
route: '/library/preact.svg',
url: 'https://preactjs.com/'
title: "Preact",
category: "Library",
route: "/library/preact.svg",
url: "https://preactjs.com/",
},
{
title: 'React',
category: 'Library',
title: "React",
category: "Library",
route: {
light: '/library/react_light.svg',
dark: '/library/react_dark.svg'
light: "/library/react_light.svg",
dark: "/library/react_dark.svg",
},
wordmark: {
light: '/library/react_wordmark_light.svg',
dark: '/library/react_wordmark_dark.svg'
light: "/library/react_wordmark_light.svg",
dark: "/library/react_wordmark_dark.svg",
},
url: 'https://react.dev/'
url: "https://react.dev/",
},
{
title: 'Svelte',
category: 'Library',
route: '/library/svelte.svg',
url: 'https://svelte.dev/'
title: "Svelte",
category: "Library",
route: "/library/svelte.svg",
url: "https://svelte.dev/",
},
{
title: 'Vue',
category: 'Framework',
route: '/library/vue.svg',
url: 'https://vuejs.org/'
title: "Vue",
category: "Framework",
route: "/library/vue.svg",
url: "https://vuejs.org/",
},
{
title: 'Vuetify',
category: 'Library',
route: '/library/vuetify.svg',
url: 'https://vuetifyjs.com/',
brandUrl: 'https://vuetifyjs.com/en/resources/brand-kit/'
title: "Vuetify",
category: "Library",
route: "/library/vuetify.svg",
url: "https://vuetifyjs.com/",
brandUrl: "https://vuetifyjs.com/en/resources/brand-kit/",
},
{
title: 'Nuxt',
category: 'Framework',
route: '/library/nuxt.svg',
url: 'https://nuxtjs.org/',
brandUrl: 'https://nuxt.com/design-kit'
title: "Nuxt",
category: "Framework",
route: "/library/nuxt.svg",
url: "https://nuxtjs.org/",
brandUrl: "https://nuxt.com/design-kit",
},
{
title: 'Visual Studio Code',
category: 'Software',
route: '/library/vscode.svg',
url: 'https://code.visualstudio.com/',
brandUrl: 'https://code.visualstudio.com/brand'
title: "Visual Studio Code",
category: "Software",
route: "/library/vscode.svg",
url: "https://code.visualstudio.com/",
brandUrl: "https://code.visualstudio.com/brand",
},
{
title: 'Ton',
category: 'Crypto',
route: '/library/ton.svg',
url: 'https://ton.org/'
title: "Ton",
category: "Crypto",
route: "/library/ton.svg",
url: "https://ton.org/",
},
{
title: 'Locofy',
category: 'AI',
route: '/library/locofy.svg',
url: 'https://www.locofy.ai/'
title: "Locofy",
category: "AI",
route: "/library/locofy.svg",
url: "https://www.locofy.ai/",
},
{
title: 'Runway',
category: 'AI',
route: '/library/runway.svg',
url: 'https://runwayml.com/'
title: "Runway",
category: "AI",
route: "/library/runway.svg",
url: "https://runwayml.com/",
},
{
title: 'Yarn',
category: 'Software',
route: '/library/yarn.svg',
url: 'https://yarnpkg.com/'
title: "Yarn",
category: "Software",
route: "/library/yarn.svg",
url: "https://yarnpkg.com/",
},
{
title: 'JWT',
category: ['Library', 'Authentication'],
route: '/library/jwt.svg',
url: 'https://jwt.io/'
title: "JWT",
category: ["Library", "Authentication"],
route: "/library/jwt.svg",
url: "https://jwt.io/",
},
{
title: 'Strapi',
category: 'CMS',
route: '/library/strapi.svg',
url: 'https://strapi.io/',
brandUrl: 'https://handbook.strapi.io/strapi-brand-book-2022'
title: "Strapi",
category: "CMS",
route: "/library/strapi.svg",
url: "https://strapi.io/",
brandUrl: "https://handbook.strapi.io/strapi-brand-book-2022",
},
{
title: 'Figma',
category: 'Design',
route: '/library/figma.svg',
url: 'https://www.figma.com/',
brandUrl: 'https://www.figma.com/using-the-figma-brand/'
title: "Figma",
category: "Design",
route: "/library/figma.svg",
url: "https://www.figma.com/",
brandUrl: "https://www.figma.com/using-the-figma-brand/",
},
{
title: 'Spotify',
category: 'Music',
route: '/library/spotify.svg',
wordmark: '/library/spotify_wordmark.svg',
url: 'https://www.spotify.com/'
title: "Spotify",
category: "Music",
route: "/library/spotify.svg",
wordmark: "/library/spotify_wordmark.svg",
url: "https://www.spotify.com/",
},
{
title: 'WorkOS',
category: ['Software', 'Authentication'],
title: "WorkOS",
category: ["Software", "Authentication"],
route: {
light: '/library/workos.svg',
dark: '/library/workos-light.svg'
light: "/library/workos.svg",
dark: "/library/workos-light.svg",
},
url: 'https://workos.com/'
url: "https://workos.com/",
},
{
title: 'Whop',
category: 'Marketplace',
title: "Whop",
category: "Marketplace",
route: {
light: '/library/whop.svg',
dark: '/library/whop-light.svg'
light: "/library/whop.svg",
dark: "/library/whop-light.svg",
},
url: 'https://whop.com/'
url: "https://whop.com/",
},
{
title: 'Postman',
category: 'Software',
route: '/library/postman.svg',
url: 'https://www.getpostman.com/'
title: "Postman",
category: "Software",
route: "/library/postman.svg",
url: "https://www.getpostman.com/",
},
{
title: 'Discord.js',
category: 'Library',
route: '/library/djs.svg',
url: 'https://discord.js.org/'
title: "Discord.js",
category: "Library",
route: "/library/djs.svg",
url: "https://discord.js.org/",
},
{
title: 'OpenSea',
category: 'Crypto',
route: '/library/opensea.svg',
url: 'https://opensea.io/'
title: "OpenSea",
category: "Crypto",
route: "/library/opensea.svg",
url: "https://opensea.io/",
},
{
title: 'Algolia',
category: 'Library',
route: '/library/algolia.svg',
url: 'https://www.algolia.com/'
title: "Algolia",
category: "Library",
route: "/library/algolia.svg",
url: "https://www.algolia.com/",
},
{
title: 'Bootstrap',
category: 'Framework',
route: '/library/bootstrap.svg',
url: 'https://getbootstrap.com/',
brandUrl: 'https://getbootstrap.com/docs/4.0/about/brand/'
title: "Bootstrap",
category: "Framework",
route: "/library/bootstrap.svg",
url: "https://getbootstrap.com/",
brandUrl: "https://getbootstrap.com/docs/4.0/about/brand/",
},
{
title: 'Facebook',
category: 'Social',
route: '/library/facebook.svg',
url: 'https://www.facebook.com/',
brandUrl: 'https://about.meta.com/brand/resources/facebook/logo/'
title: "Facebook",
category: "Social",
route: "/library/facebook.svg",
url: "https://www.facebook.com/",
brandUrl: "https://about.meta.com/brand/resources/facebook/logo/",
},
{
title: 'Twitter',
category: 'Social',
route: '/library/twitter.svg',
url: 'https://twitter.com/'
title: "Twitter",
category: "Social",
route: "/library/twitter.svg",
url: "https://twitter.com/",
},
{
title: 'Esbuild',
category: 'Compiler',
route: '/library/esbuild.svg',
url: 'https://esbuild.github.io/'
title: "Esbuild",
category: "Compiler",
route: "/library/esbuild.svg",
url: "https://esbuild.github.io/",
},
{
title: 'Deno',
category: 'Library',
title: "Deno",
category: "Library",
route: {
light: '/library/deno.svg',
dark: '/library/deno_dark.svg'
light: "/library/deno.svg",
dark: "/library/deno_dark.svg",
},
wordmark: {
light: '/library/deno_wordmark.svg',
dark: '/library/deno_wordmark_dark.svg'
light: "/library/deno_wordmark.svg",
dark: "/library/deno_wordmark_dark.svg",
},
brandUrl: 'https://deno.com/brand',
url: 'https://deno.com/'
brandUrl: "https://deno.com/brand",
url: "https://deno.com/",
},
{
title: 'Gatsby',
category: 'Framework',
route: '/library/gatsby.svg',
url: 'https://www.gatsbyjs.org/'
title: "Gatsby",
category: "Framework",
route: "/library/gatsby.svg",
url: "https://www.gatsbyjs.org/",
},
{
title: 'NPM',
category: 'Software',
route: '/library/npm.svg',
url: 'https://www.npmjs.com/'
title: "NPM",
category: "Software",
route: "/library/npm.svg",
url: "https://www.npmjs.com/",
},
{
title: 'Nuget',
category: 'Software',
route: '/library/nuget.svg',
url: 'https://www.nuget.org/'
title: "Nuget",
category: "Software",
route: "/library/nuget.svg",
url: "https://www.nuget.org/",
},
{
title: 'Homebrew',
category: 'Software',
route: '/library/homebrew.svg',
url: 'https://brew.sh/'
title: "Homebrew",
category: "Software",
route: "/library/homebrew.svg",
url: "https://brew.sh/",
},
{
title: 'Sublime Text',
category: 'Software',
route: '/library/sublimetext.svg',
url: 'https://www.sublimetext.com/'
title: "Sublime Text",
category: "Software",
route: "/library/sublimetext.svg",
url: "https://www.sublimetext.com/",
},
{
title: 'Turborepo',
category: ['Library', 'Vercel', 'Monorepo'],
route: '/library/turborepo.svg',
url: 'https://turborepo.org/'
title: "Turborepo",
category: ["Library", "Vercel", "Monorepo"],
route: "/library/turborepo.svg",
url: "https://turborepo.org/",
},
{
title: 'Tailwind CSS',
category: 'Framework',
route: '/library/tailwindcss.svg',
title: "Tailwind CSS",
category: "Framework",
route: "/library/tailwindcss.svg",
wordmark: {
light: '/library/tailwindcss-wordmark.svg',
dark: '/library/tailwindcss-wordmark-dark.svg'
light: "/library/tailwindcss-wordmark.svg",
dark: "/library/tailwindcss-wordmark-dark.svg",
},
brandUrl: 'https://tailwindcss.com/brand',
url: 'https://tailwindcss.com/'
brandUrl: "https://tailwindcss.com/brand",
url: "https://tailwindcss.com/",
},
{
title: 'Styled Components',
category: 'Library',
route: '/library/styledcomponents.svg',
url: 'https://styled-components.com/'
title: "Styled Components",
category: "Library",
route: "/library/styledcomponents.svg",
url: "https://styled-components.com/",
},
{
title: 'Angular',
category: 'Framework',
route: '/library/angular.svg',
url: 'https://angular.dev/',
brandUrl: 'https://angular.dev/press-kit'
title: "Angular",
category: "Framework",
route: "/library/angular.svg",
url: "https://angular.dev/",
brandUrl: "https://angular.dev/press-kit",
},
{
title: 'Blitz',
category: 'Framework',
route: '/library/blitzjs.svg',
url: 'https://blitzjs.com/'
title: "Blitz",
category: "Framework",
route: "/library/blitzjs.svg",
url: "https://blitzjs.com/",
},
{
title: 'Lit',
category: 'Library',
route: '/library/lit.svg',
url: 'https://lit.dev/'
title: "Lit",
category: "Library",
route: "/library/lit.svg",
url: "https://lit.dev/",
},
{
title: 'Atom',
category: 'Software',
route: '/library/atom.svg',
url: 'https://atom.io/'
title: "Atom",
category: "Software",
route: "/library/atom.svg",
url: "https://atom.io/",
},
{
title: 'YouTube',
category: ['Google', 'Social'],
route: '/library/youtube.svg',
wordmark: '/library/youtube-wordmark.svg',
url: 'https://www.youtube.com/'
title: "YouTube",
category: ["Google", "Social"],
route: "/library/youtube.svg",
wordmark: "/library/youtube-wordmark.svg",
url: "https://www.youtube.com/",
},
{
title: 'Astro',
category: 'Framework',
title: "Astro",
category: "Framework",
route: {
light: '/library/astro.svg',
dark: '/library/astro_dark.svg'
light: "/library/astro.svg",
dark: "/library/astro_dark.svg",
},
url: 'https://astro.build/',
brandUrl: 'https://astro.build/press/'
url: "https://astro.build/",
brandUrl: "https://astro.build/press/",
},
{
title: 'Google',
category: 'Google',
route: '/library/google.svg',
wordmark: '/library/google-wordmark.svg',
url: 'https://www.google.com/'
title: "Google",
category: "Google",
route: "/library/google.svg",
wordmark: "/library/google-wordmark.svg",
url: "https://www.google.com/",
},
{
title: 'Framer',
category: 'Software',
title: "Framer",
category: "Software",
route: {
light: '/library/framer.svg',
dark: '/library/framer_dark.svg'
light: "/library/framer.svg",
dark: "/library/framer_dark.svg",
},
url: 'https://framer.com/'
url: "https://framer.com/",
},
{
title: 'Netflix',
category: 'Entertainment',
route: '/library/netflix.svg',
url: 'https://www.netflix.com/',
brandUrl: 'https://brand.netflix.com/en/assets/logos'
title: "Netflix",
category: "Entertainment",
route: "/library/netflix.svg",
url: "https://www.netflix.com/",
brandUrl: "https://brand.netflix.com/en/assets/logos",
},
{
title: 'Firefox',
category: 'Browser',
route: '/library/firefox.svg',
url: 'https://www.mozilla.org/en-US/firefox/',
brandUrl: 'https://mozilla.design/firefox/'
title: "Firefox",
category: "Browser",
route: "/library/firefox.svg",
url: "https://www.mozilla.org/en-US/firefox/",
brandUrl: "https://mozilla.design/firefox/",
},
{
title: 'LinkedIn',
category: 'Social',
route: '/library/linkedin.svg',
url: 'https://www.linkedin.com/',
brandUrl: 'https://brand.linkedin.com/'
title: "LinkedIn",
category: "Social",
route: "/library/linkedin.svg",
url: "https://www.linkedin.com/",
brandUrl: "https://brand.linkedin.com/",
},
{
title: 'Telegram',
category: 'Social',
route: '/library/telegram.svg',
url: 'https://web.telegram.org/'
title: "Telegram",
category: "Social",
route: "/library/telegram.svg",
url: "https://web.telegram.org/",
},
{
title: 'Matrix',
category: 'Social',
title: "Matrix",
category: "Social",
route: {
light: '/library/matrix-light.svg',
dark: '/library/matrix-dark.svg'
light: "/library/matrix-light.svg",
dark: "/library/matrix-dark.svg",
},
url: 'https://matrix.org/'
url: "https://matrix.org/",
},
{
title: 'WhatsApp',
category: 'Social',
route: '/library/whatsapp.svg',
url: 'https://web.whatsapp.com/'
title: "WhatsApp",
category: "Social",
route: "/library/whatsapp.svg",
url: "https://web.whatsapp.com/",
},
{
title: 'Headless UI',
category: 'Library',
route: '/library/headlessui.svg',
url: 'https://headlessui.dev/'
title: "Headless UI",
category: "Library",
route: "/library/headlessui.svg",
url: "https://headlessui.dev/",
},
{
title: 'Kotlin',
category: 'Language',
route: '/library/kotlin.svg',
url: 'https://kotlinlang.org/'
title: "Kotlin",
category: "Language",
route: "/library/kotlin.svg",
url: "https://kotlinlang.org/",
},
{
title: 'Storybook',
category: 'Software',
route: '/library/storybook.svg',
url: 'https://storybook.js.org/'
title: "Storybook",
category: "Software",
route: "/library/storybook.svg",
url: "https://storybook.js.org/",
},
{
title: 'Netlify',
category: 'Hosting',
route: '/library/netlify.svg',
url: 'https://www.netlify.com/'
title: "Netlify",
category: "Hosting",
route: "/library/netlify.svg",
url: "https://www.netlify.com/",
},
{
title: 'Solidjs',
category: 'Framework',
route: '/library/solidjs.svg',
url: 'https://www.solidjs.com/'
title: "Solidjs",
category: "Framework",
route: "/library/solidjs.svg",
url: "https://www.solidjs.com/",
},
{
title: 'MongoDB',
category: 'Database',
route: '/library/mongodb.svg',
wordmark: '/library/mongodb-wordmark.svg',
url: 'https://www.mongodb.com/',
brandUrl: 'https://www.mongodb.com/company/newsroom/brand-resources'
title: "MongoDB",
category: "Database",
route: "/library/mongodb.svg",
wordmark: "/library/mongodb-wordmark.svg",
url: "https://www.mongodb.com/",
brandUrl: "https://www.mongodb.com/company/newsroom/brand-resources",
},
{
title: 'Moon',
category: 'Framework',
route: '/library/moon.svg',
url: 'https://moonjs.org/'
title: "Moon",
category: "Framework",
route: "/library/moon.svg",
url: "https://moonjs.org/",
},
{
title: 'Payload CMS',
category: 'CMS',
title: "Payload CMS",
category: "CMS",
route: {
light: '/library/payload.svg',
dark: '/library/payload_dark.svg'
light: "/library/payload.svg",
dark: "/library/payload_dark.svg",
},
url: 'https://payloadcms.com'
url: "https://payloadcms.com",
},
{
title: 'Fly',
category: 'Hosting',
route: '/library/fly.svg',
url: 'https://fly.io',
brandUrl: 'https://fly.io/docs/about/brand/'
title: "Fly",
category: "Hosting",
route: "/library/fly.svg",
url: "https://fly.io",
brandUrl: "https://fly.io/docs/about/brand/",
},
{
title: 'LearnThis',
category: 'Education',
route: '/library/learnthis.svg',
url: 'https://learnthisacademy.com'
title: "LearnThis",
category: "Education",
route: "/library/learnthis.svg",
url: "https://learnthisacademy.com",
},
{
title: 'Visual Studio',
category: 'Software',
route: '/library/visual-studio.svg',
url: 'https://visualstudio.microsoft.com'
title: "Visual Studio",
category: "Software",
route: "/library/visual-studio.svg",
url: "https://visualstudio.microsoft.com",
},
{
title: 'Chakra UI',
category: 'Library',
route: '/library/chakra-ui.svg',
url: 'https://chakra-ui.com'
title: "Chakra UI",
category: "Library",
route: "/library/chakra-ui.svg",
url: "https://chakra-ui.com",
},
{
title: 'Express.js',
category: 'Framework',
title: "Express.js",
category: "Framework",
route: {
light: '/library/expressjs.svg',
dark: '/library/expressjs_dark.svg'
light: "/library/expressjs.svg",
dark: "/library/expressjs_dark.svg",
},
url: 'https://expressjs.com'
url: "https://expressjs.com",
},
{
title: 'Fastify',
category: 'Framework',
title: "Fastify",
category: "Framework",
route: {
light: '/library/fastify.svg',
dark: '/library/fastify_dark.svg'
light: "/library/fastify.svg",
dark: "/library/fastify_dark.svg",
},
url: 'https://www.fastify.io'
url: "https://www.fastify.io",
},
{
title: 'JavaScript',
category: 'Language',
route: '/library/javascript.svg',
url: 'https://developer.mozilla.org/docs/Web/JavaScript'
title: "JavaScript",
category: "Language",
route: "/library/javascript.svg",
url: "https://developer.mozilla.org/docs/Web/JavaScript",
},
{
title: 'jQuery',
category: 'Library',
title: "jQuery",
category: "Library",
route: {
light: '/library/jquery.svg',
dark: '/library/jquery_dark.svg'
light: "/library/jquery.svg",
dark: "/library/jquery_dark.svg",
},
url: 'https://jquery.com'
url: "https://jquery.com",
},
{
title: 'Rapid API',
category: 'Software',
route: '/library/rapidapi.svg',
url: 'https://rapidapi.com'
title: "Rapid API",
category: "Software",
route: "/library/rapidapi.svg",
url: "https://rapidapi.com",
},
{
title: 'TypeScript',
category: 'Language',
route: '/library/typescript.svg',
url: 'https://www.typescriptlang.org'
title: "TypeScript",
category: "Language",
route: "/library/typescript.svg",
url: "https://www.typescriptlang.org",
},
{
title: 'Bun',
category: 'Library',
route: '/library/bun.svg',
url: 'https://bun.sh',
brandUrl: 'https://bun.sh/press-kit'
title: "Bun",
category: "Library",
route: "/library/bun.svg",
url: "https://bun.sh",
brandUrl: "https://bun.sh/press-kit",
},
{
title: 'BuildShip',
category: 'AI',
route: '/library/buildship.svg',
url: 'https://buildship.com/'
title: "BuildShip",
category: "AI",
route: "/library/buildship.svg",
url: "https://buildship.com/",
},
{
title: 'Twilio',
category: ['Software', 'Authentication'],
route: '/library/twilio.svg',
url: 'https://twilio.com'
title: "Twilio",
category: ["Software", "Authentication"],
route: "/library/twilio.svg",
url: "https://twilio.com",
},
{
title: 'Arc',
category: 'Social',
title: "Arc",
category: "Social",
route: {
light: '/library/arc.svg',
dark: '/library/arc_dark.svg'
light: "/library/arc.svg",
dark: "/library/arc_dark.svg",
},
url: 'https://arc.dev'
url: "https://arc.dev",
},
{
title: 'Arc',
category: 'Software',
title: "Arc",
category: "Software",
route: {
light: '/library/arc_fintech_light.svg',
dark: '/library/arc_fintech_dark.svg'
light: "/library/arc_fintech_light.svg",
dark: "/library/arc_fintech_dark.svg",
},
url: 'https://arc.tech'
url: "https://arc.tech",
},
{
title: 'Qwik',
category: 'Framework',
route: '/library/qwik.svg',
url: 'https://qwik.builder.io/'
title: "Qwik",
category: "Framework",
route: "/library/qwik.svg",
url: "https://qwik.builder.io/",
},
{
title: 'Coinbase',
category: 'Crypto',
route: '/library/coinbase.svg',
title: "Coinbase",
category: "Crypto",
route: "/library/coinbase.svg",
wordmark: {
light: '/library/coinbase-wordmark-light.svg',
dark: '/library/coinbase-wordmark-dark.svg'
light: "/library/coinbase-wordmark-light.svg",
dark: "/library/coinbase-wordmark-dark.svg",
},
url: 'https://www.coinbase.com/'
url: "https://www.coinbase.com/",
},
{
title: 'Authy',
category: ['Software', 'Authentication'],
route: '/library/authy.svg',
url: 'https://authy.com/'
title: "Authy",
category: ["Software", "Authentication"],
route: "/library/authy.svg",
url: "https://authy.com/",
},
{
title: 'NestJS',
category: 'Framework',
route: '/library/nestjs.svg',
url: 'https://nestjs.com/'
title: "NestJS",
category: "Framework",
route: "/library/nestjs.svg",
url: "https://nestjs.com/",
},
{
title: 'GitHub Copilot',
category: 'Software',
title: "GitHub Copilot",
category: "Software",
route: {
light: '/library/copilot.svg',
dark: '/library/copilot_dark.svg'
light: "/library/copilot.svg",
dark: "/library/copilot_dark.svg",
},
url: 'https://github.com/features/copilot'
url: "https://github.com/features/copilot",
},
{
title: 'Railway',
category: 'Software',
title: "Railway",
category: "Software",
route: {
light: '/library/railway.svg',
dark: '/library/railway_dark.svg'
light: "/library/railway.svg",
dark: "/library/railway_dark.svg",
},
url: 'https://railway.app/'
url: "https://railway.app/",
},
{
title: 'Docusaurus',
category: 'Software',
route: '/library/docusaurus.svg',
url: 'https://docusaurus.io/'
title: "Docusaurus",
category: "Software",
route: "/library/docusaurus.svg",
url: "https://docusaurus.io/",
},
{
title: 'Twitch',
category: 'Entertainment',
route: '/library/twitch.svg',
url: 'https://twitch.tv'
title: "Twitch",
category: "Entertainment",
route: "/library/twitch.svg",
url: "https://twitch.tv",
},
{
title: 'GoDaddy',
category: 'Hosting',
title: "GoDaddy",
category: "Hosting",
route: {
light: '/library/godaddy.svg',
dark: '/library/godaddy_dark.svg'
light: "/library/godaddy.svg",
dark: "/library/godaddy_dark.svg",
},
url: 'https://www.godaddy.com/'
url: "https://www.godaddy.com/",
},
{
title: 'Udemy',
category: 'Education',
title: "Udemy",
category: "Education",
route: {
light: '/library/udemy.svg',
dark: '/library/udemy_dark.svg'
light: "/library/udemy.svg",
dark: "/library/udemy_dark.svg",
},
url: 'https://www.udemy.com/'
url: "https://www.udemy.com/",
},
{
title: 'GraphQL',
category: 'Language',
route: '/library/graphql.svg',
url: 'https://graphql.org/'
title: "GraphQL",
category: "Language",
route: "/library/graphql.svg",
url: "https://graphql.org/",
},
{
title: 'Grok',
category: 'AI',
title: "Grok",
category: "AI",
route: {
light: '/library/grok-light.svg',
dark: '/library/grok-dark.svg'
light: "/library/grok-light.svg",
dark: "/library/grok-dark.svg",
},
wordmark: {
light: '/library/grok-wordmark-light.svg',
dark: '/library/grok-wordmark-dark.svg'
light: "/library/grok-wordmark-light.svg",
dark: "/library/grok-wordmark-dark.svg",
},
url: 'https://grok.com/'
url: "https://grok.com/",
},
{
title: 'GitLab',
category: 'Software',
route: '/library/gitlab.svg',
url: 'https://gitlab.com/'
title: "GitLab",
category: "Software",
route: "/library/gitlab.svg",
url: "https://gitlab.com/",
},
{
title: 'Prisma',
category: 'Software',
title: "Prisma",
category: "Software",
route: {
light: '/library/prisma.svg',
dark: '/library/prisma_dark.svg'
light: "/library/prisma.svg",
dark: "/library/prisma_dark.svg",
},
url: 'https://prisma.io/'
url: "https://prisma.io/",
},
{
title: 'Go',
category: 'Language',
title: "Go",
category: "Language",
route: {
light: '/library/golang.svg',
dark: '/library/golang_dark.svg'
light: "/library/golang.svg",
dark: "/library/golang_dark.svg",
},
url: 'https://go.dev/'
url: "https://go.dev/",
},
{
title: 'Platzi',
category: 'Education',
route: '/library/platzi.svg',
url: 'https://platzi.com/'
title: "Platzi",
category: "Education",
route: "/library/platzi.svg",
url: "https://platzi.com/",
},
{
title: 'Coursera',
category: 'Education',
route: '/library/coursera.svg',
url: 'https://www.coursera.org/'
title: "Coursera",
category: "Education",
route: "/library/coursera.svg",
url: "https://www.coursera.org/",
},
{
title: 'Udacity',
category: 'Education',
route: '/library/udacity.svg',
url: 'https://www.udacity.com/'
title: "Udacity",
category: "Education",
route: "/library/udacity.svg",
url: "https://www.udacity.com/",
},
{
title: 'Kubernetes',
category: 'Software',
route: '/library/kubernetes.svg',
url: 'https://kubernetes.io/'
title: "Kubernetes",
category: "Software",
route: "/library/kubernetes.svg",
url: "https://kubernetes.io/",
},
{
title: 'Docker',
category: 'Software',
route: '/library/docker.svg',
url: 'https://www.docker.com/',
brandUrl: 'https://www.docker.com/company/newsroom/media-resources/'
title: "Docker",
category: "Software",
route: "/library/docker.svg",
url: "https://www.docker.com/",
brandUrl: "https://www.docker.com/company/newsroom/media-resources/",
},
{
title: 'Amazon Web Services',
category: 'Software',
title: "Amazon Web Services",
category: "Software",
route: {
light: '/library/aws_light.svg',
dark: '/library/aws_dark.svg'
light: "/library/aws_light.svg",
dark: "/library/aws_dark.svg",
},
url: 'https://aws.amazon.com/'
url: "https://aws.amazon.com/",
},
{
title: 'Microsoft Azure',
category: 'Software',
route: '/library/azure.svg',
url: 'https://azure.microsoft.com/'
title: "Microsoft Azure",
category: "Software",
route: "/library/azure.svg",
url: "https://azure.microsoft.com/",
},
{
title: 'Heroku',
category: 'Software',
route: '/library/heroku.svg',
url: 'https://www.heroku.com/'
title: "Heroku",
category: "Software",
route: "/library/heroku.svg",
url: "https://www.heroku.com/",
},
{
title: 'JetBrains',
category: 'Software',
route: '/library/jetbrains.svg',
url: 'https://www.jetbrains.com/',
brandUrl: 'https://www.jetbrains.com/company/brand/'
title: "JetBrains",
category: "Software",
route: "/library/jetbrains.svg",
url: "https://www.jetbrains.com/",
brandUrl: "https://www.jetbrains.com/company/brand/",
},
{
title: 'JetBrains Rider',
category: 'Software',
route: '/library/rider.svg',
url: 'https://www.jetbrains.com/rider/'
title: "JetBrains Rider",
category: "Software",
route: "/library/rider.svg",
url: "https://www.jetbrains.com/rider/",
},
{
title: 'PlanetScale',
category: 'Database',
title: "PlanetScale",
category: "Database",
route: {
light: '/library/planetscale.svg',
dark: '/library/planetscale_dark.svg'
light: "/library/planetscale.svg",
dark: "/library/planetscale_dark.svg",
},
url: 'https://planetscale.com/'
url: "https://planetscale.com/",
},
{
title: 'Playwright',
category: 'Framework',
route: '/library/playwright.svg',
url: 'https://playwright.dev/'
title: "Playwright",
category: "Framework",
route: "/library/playwright.svg",
url: "https://playwright.dev/",
},
{
title: 'Atlassian',
category: 'Software',
route: '/library/atlassian.svg',
url: 'https://www.atlassian.com/'
title: "Atlassian",
category: "Software",
route: "/library/atlassian.svg",
url: "https://www.atlassian.com/",
},
{
title: 'Discourse',
category: 'Software',
route: '/library/discourse.svg',
url: 'https://discourse.org/'
title: "Discourse",
category: "Software",
route: "/library/discourse.svg",
url: "https://discourse.org/",
},
{
title: 'Ember',
category: 'Framework',
route: '/library/ember.svg',
url: 'https://emberjs.com/'
title: "Ember",
category: "Framework",
route: "/library/ember.svg",
url: "https://emberjs.com/",
},
{
title: 'Expo',
category: 'Software',
route: '/library/expo.svg',
url: 'https://expo.dev/'
title: "Expo",
category: "Software",
route: "/library/expo.svg",
url: "https://expo.dev/",
},
{
title: 'Flutter',
category: 'Framework',
route: '/library/flutter.svg',
url: 'https://flutter.dev/',
brandUrl: 'https://flutter.dev/brand'
title: "Flutter",
category: "Framework",
route: "/library/flutter.svg",
url: "https://flutter.dev/",
brandUrl: "https://flutter.dev/brand",
},
{
title: 'Auth0',
category: ['Library', 'Authentication'],
route: '/library/auth0.svg',
url: 'https://auth0.com/'
title: "Auth0",
category: ["Library", "Authentication"],
route: "/library/auth0.svg",
url: "https://auth0.com/",
},
{
title: 'Fresh',
category: 'Framework',
route: '/library/fresh.svg',
url: 'https://fresh.deno.dev/'
title: "Fresh",
category: "Framework",
route: "/library/fresh.svg",
url: "https://fresh.deno.dev/",
},
{
title: 'Git',
category: 'Software',
route: '/library/git.svg',
url: 'https://git-scm.com/'
title: "Git",
category: "Software",
route: "/library/git.svg",
url: "https://git-scm.com/",
},
{
title: 'Hostgator',
category: 'Hosting',
route: '/library/hostgator.svg',
url: 'https://www.hostgator.com/'
title: "Hostgator",
category: "Hosting",
route: "/library/hostgator.svg",
url: "https://www.hostgator.com/",
},
{
title: 'IntelliJ IDEA',
category: 'Software',
route: '/library/intellijidea.svg',
url: 'https://www.jetbrains.com/idea/'
title: "IntelliJ IDEA",
category: "Software",
route: "/library/intellijidea.svg",
url: "https://www.jetbrains.com/idea/",
},
{
title: 'Jasmine',
category: 'Framework',
route: '/library/jasmine.svg',
url: 'https://jasmine.github.io/'
title: "Jasmine",
category: "Framework",
route: "/library/jasmine.svg",
url: "https://jasmine.github.io/",
},
{
title: 'Java',
category: 'Language',
route: '/library/java.svg',
url: 'https://www.java.com/'
title: "Java",
category: "Language",
route: "/library/java.svg",
url: "https://www.java.com/",
},
{
title: 'Jest',
category: 'Framework',
route: '/library/jest.svg',
url: 'https://jestjs.io/'
title: "Jest",
category: "Framework",
route: "/library/jest.svg",
url: "https://jestjs.io/",
},
{
title: 'JetBrains',
category: 'Software',
route: '/library/jetbrainsSolid.svg',
url: 'https://www.jetbrains.com/'
title: "JetBrains",
category: "Software",
route: "/library/jetbrainsSolid.svg",
url: "https://www.jetbrains.com/",
},
{
title: 'KrakenJS',
category: 'Framework',
route: '/library/krakenjs.svg',
url: 'https://krakenjs.com/'
title: "KrakenJS",
category: "Framework",
route: "/library/krakenjs.svg",
url: "https://krakenjs.com/",
},
{
title: 'Laravel',
category: 'Framework',
route: '/library/laravel.svg',
url: 'https://laravel.com/'
title: "Laravel",
category: "Framework",
route: "/library/laravel.svg",
url: "https://laravel.com/",
},
{
title: 'MariaDB',
category: 'Database',
route: '/library/mariadb.svg',
url: 'https://mariadb.org/'
title: "MariaDB",
category: "Database",
route: "/library/mariadb.svg",
url: "https://mariadb.org/",
},
{
title: 'Material UI',
category: 'Framework',
route: '/library/materialui.svg',
url: 'https://mui.com/'
title: "Material UI",
category: "Framework",
route: "/library/materialui.svg",
url: "https://mui.com/",
},
{
title: 'MySQL',
category: 'Database',
route: '/library/mysql.svg',
url: 'https://www.mysql.com/'
title: "MySQL",
category: "Database",
route: "/library/mysql.svg",
url: "https://www.mysql.com/",
},
{
title: 'Parcel',
category: 'Compiler',
route: '/library/parcel.svg',
url: 'https://parceljs.org/'
title: "Parcel",
category: "Compiler",
route: "/library/parcel.svg",
url: "https://parceljs.org/",
},
{
title: 'PM2',
category: 'Framework',
route: '/library/pm2.svg',
url: 'https://pm2.io/'
title: "PM2",
category: "Framework",
route: "/library/pm2.svg",
url: "https://pm2.io/",
},
{
title: 'PostgreSQL',
category: 'Database',
route: '/library/postgresql.svg',
url: 'https://www.postgresql.org/'
title: "PostgreSQL",
category: "Database",
route: "/library/postgresql.svg",
url: "https://www.postgresql.org/",
},
{
title: 'React Query',
category: 'Framework',
route: '/library/reactquery.svg',
url: 'https://tanstack.com/query/v4'
title: "React Query",
category: "Framework",
route: "/library/reactquery.svg",
url: "https://tanstack.com/query/v4",
},
{
title: 'Devto',
category: 'Community',
title: "Devto",
category: "Community",
route: {
light: '/library/devto-light.svg',
dark: '/library/devto-dark.svg'
light: "/library/devto-light.svg",
dark: "/library/devto-dark.svg",
},
url: 'https://dev.to/'
url: "https://dev.to/",
},
{
title: 'Redis',
category: 'Database',
route: '/library/redis.svg',
url: 'https://redis.io/'
title: "Redis",
category: "Database",
route: "/library/redis.svg",
url: "https://redis.io/",
},
{
title: 'RedwoodJS',
category: 'Framework',
route: '/library/redwoodjs.svg',
url: 'https://redwoodjs.com/'
title: "RedwoodJS",
category: "Framework",
route: "/library/redwoodjs.svg",
url: "https://redwoodjs.com/",
},
{
title: 'Ruby',
category: 'Language',
route: '/library/ruby.svg',
url: 'https://www.ruby-lang.org/'
title: "Ruby",
category: "Language",
route: "/library/ruby.svg",
url: "https://www.ruby-lang.org/",
},
{
title: 'Scala',
category: 'Language',
route: '/library/scala.svg',
url: 'https://www.scala-lang.org/'
title: "Scala",
category: "Language",
route: "/library/scala.svg",
url: "https://www.scala-lang.org/",
},
{
title: 'Sequelize',
category: 'Framework',
route: '/library/sequelize.svg',
url: 'https://sequelize.org/'
title: "Sequelize",
category: "Framework",
route: "/library/sequelize.svg",
url: "https://sequelize.org/",
},
{
title: 'Spinnaker',
category: 'Software',
route: '/library/spinnaker.svg',
url: 'https://spinnaker.io/'
title: "Spinnaker",
category: "Software",
route: "/library/spinnaker.svg",
url: "https://spinnaker.io/",
},
{
title: 'SQLite',
category: 'Database',
route: '/library/sqlite.svg',
url: 'https://www.sqlite.org/'
title: "SQLite",
category: "Database",
route: "/library/sqlite.svg",
url: "https://www.sqlite.org/",
},
{
title: 'Swagger',
category: 'Software',
route: '/library/swagger.svg',
url: 'https://swagger.io/'
title: "Swagger",
category: "Software",
route: "/library/swagger.svg",
url: "https://swagger.io/",
},
{
title: 'Swift',
category: 'Language',
route: '/library/swift.svg',
url: 'https://swift.org/'
title: "Swift",
category: "Language",
route: "/library/swift.svg",
url: "https://swift.org/",
},
{
title: 'TypeORM',
category: 'Database',
route: '/library/typeorm.svg',
url: 'https://typeorm.io/'
title: "TypeORM",
category: "Database",
route: "/library/typeorm.svg",
url: "https://typeorm.io/",
},
{
title: 'Unity',
category: 'Software',
title: "Unity",
category: "Software",
route: {
light: '/library/unity.svg',
dark: '/library/unity_dark.svg'
light: "/library/unity.svg",
dark: "/library/unity_dark.svg",
},
url: 'https://unity.com/'
url: "https://unity.com/",
},
{
title: 'Vim',
category: 'Software',
route: '/library/vim.svg',
url: 'https://www.vim.org/'
title: "Vim",
category: "Software",
route: "/library/vim.svg",
url: "https://www.vim.org/",
},
{
title: 'Pocketbase',
category: 'Database',
route: '/library/pocket-base.svg',
url: 'https://pocketbase.io/'
title: "Pocketbase",
category: "Database",
route: "/library/pocket-base.svg",
url: "https://pocketbase.io/",
},
{
title: 'OpenBootcamp',
category: 'Education',
route: '/library/openbootcamp.svg',
url: 'https://open-bootcamp.com/'
title: "OpenBootcamp",
category: "Education",
route: "/library/openbootcamp.svg",
url: "https://open-bootcamp.com/",
},
{
title: 'Digital Ocean',
category: 'Software',
route: '/library/digitalocean.svg',
url: 'https://www.digitalocean.com/'
title: "Digital Ocean",
category: "Software",
route: "/library/digitalocean.svg",
url: "https://www.digitalocean.com/",
},
{
title: 'Disney+',
category: 'Entertainment',
route: '/library/disneyplus.svg',
url: 'https://www.disneyplus.com/'
title: "Disney+",
category: "Entertainment",
route: "/library/disneyplus.svg",
url: "https://www.disneyplus.com/",
},
{
title: 'React Router',
category: 'Library',
route: '/library/reactrouter.svg',
url: 'https://reactrouter.com/en/main'
title: "React Router",
category: "Library",
route: "/library/reactrouter.svg",
url: "https://reactrouter.com/en/main",
},
{
title: 'AMP',
category: 'Library',
route: '/library/amp.svg',
url: 'https://amp.dev/'
title: "AMP",
category: "Library",
route: "/library/amp.svg",
url: "https://amp.dev/",
},
{
title: 'Developer Student Club',
category: 'Community',
route: '/library/gdsc.svg',
url: 'https://gdsc.community.dev/'
title: "Developer Student Club",
category: "Community",
route: "/library/gdsc.svg",
url: "https://gdsc.community.dev/",
},
{
title: 'Brave Browser',
category: 'Browser',
route: '/library/brave.svg',
url: 'https://brave.com/',
brandUrl: 'https://brave.com/brave-branding-assets/'
title: "Brave Browser",
category: "Browser",
route: "/library/brave.svg",
url: "https://brave.com/",
brandUrl: "https://brave.com/brave-branding-assets/",
},
{
title: 'Eclipse IDE',
category: 'Software',
route: '/library/eclipse.svg',
url: 'https://www.eclipse.org/'
title: "Eclipse IDE",
category: "Software",
route: "/library/eclipse.svg",
url: "https://www.eclipse.org/",
},
{
title: 'Three.js',
category: 'Library',
title: "Three.js",
category: "Library",
route: {
light: '/library/threejs-light.svg',
dark: '/library/threejs-dark.svg'
light: "/library/threejs-light.svg",
dark: "/library/threejs-dark.svg",
},
url: 'https://threejs.org/'
url: "https://threejs.org/",
},
{
title: 'HTML5',
category: 'Language',
route: '/library/html5.svg',
url: 'https://es.wikipedia.org/wiki/HTML5'
title: "HTML5",
category: "Language",
route: "/library/html5.svg",
url: "https://es.wikipedia.org/wiki/HTML5",
},
{
title: 'CSS (New)',
category: 'Language',
route: '/library/css.svg',
url: 'https://es.wikipedia.org/wiki/CSS'
title: "CSS (New)",
category: "Language",
route: "/library/css.svg",
url: "https://es.wikipedia.org/wiki/CSS",
},
{
title: 'CSS',
category: 'Language',
route: '/library/css_old.svg',
url: 'https://es.wikipedia.org/wiki/CSS'
title: "CSS",
category: "Language",
route: "/library/css_old.svg",
url: "https://es.wikipedia.org/wiki/CSS",
},
{
title: 'midudev',
category: 'Community',
route: '/library/midudev.svg',
url: 'https://midu.dev'
title: "midudev",
category: "Community",
route: "/library/midudev.svg",
url: "https://midu.dev",
},
{
title: 'Apple',
category: 'Software',
title: "Apple",
category: "Software",
route: {
light: '/library/apple.svg',
dark: '/library/apple_dark.svg'
light: "/library/apple.svg",
dark: "/library/apple_dark.svg",
},
url: 'https://www.apple.com'
url: "https://www.apple.com",
},
{
title: 'Windows',
category: 'Software',
route: '/library/windows.svg',
url: 'https://www.microsoft.com/windows'
title: "Windows",
category: "Software",
route: "/library/windows.svg",
url: "https://www.microsoft.com/windows",
},
{
title: 'Python',
category: 'Language',
route: '/library/python.svg',
url: 'https://www.python.org/'
title: "Python",
category: "Language",
route: "/library/python.svg",
url: "https://www.python.org/",
},
{
title: 'Solidity',
category: 'Language',
route: '/library/solidity.svg',
url: 'https://soliditylang.org/'
title: "Solidity",
category: "Language",
route: "/library/solidity.svg",
url: "https://soliditylang.org/",
},
{
title: 'Turbopack',
category: 'Software',
route: '/library/turbopack.svg',
url: 'https://turbo.build/'
title: "Turbopack",
category: "Software",
route: "/library/turbopack.svg",
url: "https://turbo.build/",
},
{
title: 'Builder',
category: 'CMS',
route: '/library/builder.svg',
url: 'https://builder.io/'
title: "Builder",
category: "CMS",
route: "/library/builder.svg",
url: "https://builder.io/",
},
{
title: 'Babel',
category: 'Compiler',
route: '/library/babel.svg',
url: 'https://babeljs.io/'
title: "Babel",
category: "Compiler",
route: "/library/babel.svg",
url: "https://babeljs.io/",
},
{
title: 'Surrealdb',
category: 'Database',
route: '/library/surrealdb.svg',
url: 'https://surrealdb.com/'
title: "Surrealdb",
category: "Database",
route: "/library/surrealdb.svg",
url: "https://surrealdb.com/",
},
{
title: 'Jetbrains Space',
category: 'Software',
route: '/library/jetbrains-space.svg',
url: 'https://www.jetbrains.com/space/'
title: "Jetbrains Space",
category: "Software",
route: "/library/jetbrains-space.svg",
url: "https://www.jetbrains.com/space/",
},
{
title: 'Stimulus',
category: 'Framework',
route: '/library/stimulus.svg',
url: 'https://stimulus.hotwired.dev/'
title: "Stimulus",
category: "Framework",
route: "/library/stimulus.svg",
url: "https://stimulus.hotwired.dev/",
},
{
title: 'WindiCSS',
category: 'Framework',
route: '/library/windicss.svg',
url: 'https://windicss.org/'
title: "WindiCSS",
category: "Framework",
route: "/library/windicss.svg",
url: "https://windicss.org/",
},
{
title: 'Mastodon',
category: 'Social',
route: '/library/mastodon.svg',
url: 'https://joinmastodon.org/'
title: "Mastodon",
category: "Social",
route: "/library/mastodon.svg",
url: "https://joinmastodon.org/",
},
{
title: 'Upstash',
category: 'Database',
route: '/library/upstash.svg',
url: 'https://upstash.com/',
brandUrl: 'https://upstash.com/brand'
title: "Upstash",
category: "Database",
route: "/library/upstash.svg",
url: "https://upstash.com/",
brandUrl: "https://upstash.com/brand",
},
{
title: 'Storyblok',
category: 'CMS',
route: '/library/storyblok.svg',
url: 'https://www.storyblok.com/'
title: "Storyblok",
category: "CMS",
route: "/library/storyblok.svg",
url: "https://www.storyblok.com/",
},
{
title: 'Cloudflare Workers',
category: 'Software',
route: '/library/cloudflare-workers.svg',
url: 'https://workers.cloudflare.com/'
title: "Cloudflare Workers",
category: "Software",
route: "/library/cloudflare-workers.svg",
url: "https://workers.cloudflare.com/",
},
{
title: 'Cloudflare',
category: 'Software',
route: '/library/cloudflare.svg',
url: 'https://www.cloudflare.com/'
title: "Cloudflare",
category: "Software",
route: "/library/cloudflare.svg",
url: "https://www.cloudflare.com/",
},
{
title: 'Bing',
category: 'Browser',
route: '/library/bing.svg',
url: 'https://www.bing.com/'
title: "Bing",
category: "Browser",
route: "/library/bing.svg",
url: "https://www.bing.com/",
},
{
title: 'Cloudinary',
category: 'Software',
route: '/library/cloudinary.svg',
url: 'https://cloudinary.com/'
title: "Cloudinary",
category: "Software",
route: "/library/cloudinary.svg",
url: "https://cloudinary.com/",
},
{
title: 'Dart',
category: 'Language',
route: '/library/dart.svg',
url: 'https://dart.dev/'
title: "Dart",
category: "Language",
route: "/library/dart.svg",
url: "https://dart.dev/",
},
{
title: 'hCaptcha',
category: 'Software',
route: '/library/hcaptcha.svg',
url: 'https://www.hcaptcha.com/'
title: "hCaptcha",
category: "Software",
route: "/library/hcaptcha.svg",
url: "https://www.hcaptcha.com/",
},
{
title: 'Appwrite',
category: 'Software',
route: '/library/appwrite.svg',
url: 'https://appwrite.io/'
title: "Appwrite",
category: "Software",
route: "/library/appwrite.svg",
url: "https://appwrite.io/",
},
{
title: 'Loom',
category: 'Software',
route: '/library/loom.svg',
url: 'https://www.loom.com/'
title: "Loom",
category: "Software",
route: "/library/loom.svg",
url: "https://www.loom.com/",
},
{
title: 'Hulu',
category: 'Entertainment',
title: "Hulu",
category: "Entertainment",
route: {
light: '/library/hulu.svg',
dark: '/library/hulu-dark.svg'
light: "/library/hulu.svg",
dark: "/library/hulu-dark.svg",
},
url: 'https://www.hulu.com/'
url: "https://www.hulu.com/",
},
{
title: 'Stackblitz',
category: 'Software',
route: '/library/stackblitz.svg',
url: 'https://stackblitz.com/'
title: "Stackblitz",
category: "Software",
route: "/library/stackblitz.svg",
url: "https://stackblitz.com/",
},
{
title: 'Binance',
category: 'Crypto',
route: '/library/binance.svg',
url: 'https://binance.com/'
title: "Binance",
category: "Crypto",
route: "/library/binance.svg",
url: "https://binance.com/",
},
{
title: 'Messenger',
category: 'Social',
route: '/library/messenger.svg',
url: 'https://www.messenger.com/'
title: "Messenger",
category: "Social",
route: "/library/messenger.svg",
url: "https://www.messenger.com/",
},
{
title: 'NHost',
category: 'Hosting',
route: '/library/nhost.svg',
url: 'https://nhost.io/'
title: "NHost",
category: "Hosting",
route: "/library/nhost.svg",
url: "https://nhost.io/",
},
{
title: 'Medusa',
category: 'Software',
route: '/library/medusa.svg',
url: 'https://medusajs.com/'
title: "Medusa",
category: "Software",
route: "/library/medusa.svg",
url: "https://medusajs.com/",
},
{
title: 'WordPress',
category: ['Software', 'CMS'],
route: '/library/wordpress.svg',
url: 'https://wordpress.org/',
brandUrl: 'https://wordpress.org/about/logos/'
title: "WordPress",
category: ["Software", "CMS"],
route: "/library/wordpress.svg",
url: "https://wordpress.org/",
brandUrl: "https://wordpress.org/about/logos/",
},
{
title: 'Microsoft',
category: 'Software',
route: '/library/microsoft.svg',
url: 'https://www.microsoft.com/'
title: "Microsoft",
category: "Software",
route: "/library/microsoft.svg",
url: "https://www.microsoft.com/",
},
{
title: 'Elementor',
category: 'Software',
route: '/library/elementor.svg',
url: 'https://elementor.com/'
title: "Elementor",
category: "Software",
route: "/library/elementor.svg",
url: "https://elementor.com/",
},
{
title: 'Kick',
category: 'Entertainment',
title: "Kick",
category: "Entertainment",
route: {
light: '/library/kick-light.svg',
dark: '/library/kick-dark.svg'
light: "/library/kick-light.svg",
dark: "/library/kick-dark.svg",
},
url: 'https://kick.com/'
url: "https://kick.com/",
},
{
title: 'Prime video',
category: 'Entertainment',
route: '/library/prime-video.svg',
url: 'https://primevideo.com/'
title: "Prime video",
category: "Entertainment",
route: "/library/prime-video.svg",
url: "https://primevideo.com/",
},
{
title: 'Chrome',
category: 'Browser',
route: '/library/chrome.svg',
url: 'https://chrome.com/'
title: "Chrome",
category: "Browser",
route: "/library/chrome.svg",
url: "https://chrome.com/",
},
{
title: 'RxJS',
category: 'Library',
route: '/library/rxjs.svg',
url: 'https://rxjs.dev/'
title: "RxJS",
category: "Library",
route: "/library/rxjs.svg",
url: "https://rxjs.dev/",
},
{
title: 'Electron',
category: 'Library',
route: '/library/electron.svg',
url: 'https://www.electronjs.org'
title: "Electron",
category: "Library",
route: "/library/electron.svg",
url: "https://www.electronjs.org",
},
{
title: 'Redux',
category: 'Library',
route: '/library/redux.svg',
url: 'https://redux.js.org/'
title: "Redux",
category: "Library",
route: "/library/redux.svg",
url: "https://redux.js.org/",
},
{
title: 'Trust Wallet',
category: 'Crypto',
route: '/library/trust.svg',
url: 'https://trustwallet.com/'
title: "Trust Wallet",
category: "Crypto",
route: "/library/trust.svg",
url: "https://trustwallet.com/",
},
{
title: 'Php',
category: 'Language',
title: "Php",
category: "Language",
route: {
light: '/library/php.svg',
dark: '/library/php_dark.svg'
light: "/library/php.svg",
dark: "/library/php_dark.svg",
},
url: 'https://www.php.net/'
url: "https://www.php.net/",
},
{
title: 'Hugo',
category: 'Framework',
route: '/library/hugo.svg',
url: 'https://gohugo.io/'
title: "Hugo",
category: "Framework",
route: "/library/hugo.svg",
url: "https://gohugo.io/",
},
{
title: 'Sass',
category: 'Language',
route: '/library/sass.svg',
url: 'https://sass-lang.com/'
title: "Sass",
category: "Language",
route: "/library/sass.svg",
url: "https://sass-lang.com/",
},
{
title: 'Arc',
category: 'Browser',
route: '/library/arc_browser.svg',
url: 'https://arc.net/'
title: "Arc",
category: "Browser",
route: "/library/arc_browser.svg",
url: "https://arc.net/",
},
{
title: 'Pinia',
category: 'Library',
route: '/library/pinia.svg',
url: 'https://pinia.vuejs.org/'
title: "Pinia",
category: "Library",
route: "/library/pinia.svg",
url: "https://pinia.vuejs.org/",
},
{
title: 'Neon',
category: 'Database',
route: '/library/neon.svg',
url: 'https://neon.tech/'
title: "Neon",
category: "Database",
route: "/library/neon.svg",
url: "https://neon.tech/",
},
{
title: 'Infojobs',
category: 'Social',
route: '/library/infojobs-logo.svg',
url: 'https://www.infojobs.net/'
title: "Infojobs",
category: "Social",
route: "/library/infojobs-logo.svg",
url: "https://www.infojobs.net/",
},
{
title: 'Linear',
category: 'Software',
route: '/library/linear.svg',
url: 'https://linear.app/'
title: "Linear",
category: "Software",
route: "/library/linear.svg",
url: "https://linear.app/",
},
{
title: 'Tor',
category: 'Browser',
route: '/library/tor.svg',
url: 'https://www.torproject.org/'
title: "Tor",
category: "Browser",
route: "/library/tor.svg",
url: "https://www.torproject.org/",
},
{
title: 'Codesandbox',
category: 'Software',
route: '/library/codesandbox-square.svg',
url: 'https://codesandbox.io/'
title: "Codesandbox",
category: "Software",
route: "/library/codesandbox-square.svg",
url: "https://codesandbox.io/",
},
{
title: 'Skype',
category: 'Social',
route: '/library/skype.svg',
url: 'https://www.skype.com/'
title: "Skype",
category: "Social",
route: "/library/skype.svg",
url: "https://www.skype.com/",
},
{
title: 'Tauri',
category: 'Library',
route: '/library/tauri.svg',
url: 'https://tauri.app/'
title: "Tauri",
category: "Library",
route: "/library/tauri.svg",
url: "https://tauri.app/",
},
{
title: 'WebKit',
category: 'Software',
route: '/library/webkit.svg',
url: 'https://webkit.org/'
title: "WebKit",
category: "Software",
route: "/library/webkit.svg",
url: "https://webkit.org/",
},
{
title: 'DuckDuckGo',
category: ['Software', 'Browser'],
route: '/library/duckduckgo.svg',
wordmark: '/library/duckduckgo-wordmark.svg',
url: 'https://duckduckgo.com/'
title: "DuckDuckGo",
category: ["Software", "Browser"],
route: "/library/duckduckgo.svg",
wordmark: "/library/duckduckgo-wordmark.svg",
url: "https://duckduckgo.com/",
},
{
title: 'Obsidian',
category: 'Software',
route: '/library/obsidian.svg',
url: 'https://obsidian.md/',
brandUrl: 'https://obsidian.md/brand'
title: "Obsidian",
category: "Software",
route: "/library/obsidian.svg",
url: "https://obsidian.md/",
brandUrl: "https://obsidian.md/brand",
},
{
title: 'Zod',
category: 'Library',
route: '/library/zod.svg',
url: 'https://zod.dev/'
title: "Zod",
category: "Library",
route: "/library/zod.svg",
url: "https://zod.dev/",
},
{
title: 'Valibot',
category: 'Library',
route: '/library/valibot.svg',
title: "Valibot",
category: "Library",
route: "/library/valibot.svg",
wordmark: {
light: '/library/valibot-wordmark-light.svg',
dark: '/library/valibot-wordmark-dark.svg'
light: "/library/valibot-wordmark-light.svg",
dark: "/library/valibot-wordmark-dark.svg",
},
url: 'https://valibot.dev'
url: "https://valibot.dev",
},
{
title: 'Dreamweaver',
category: 'Software',
route: '/library/dw.svg',
url: 'https://www.adobe.com/products/dreamweaver.html'
title: "Dreamweaver",
category: "Software",
route: "/library/dw.svg",
url: "https://www.adobe.com/products/dreamweaver.html",
},
{
title: 'OpenAI',
category: 'AI',
title: "OpenAI",
category: "AI",
route: {
light: '/library/openai.svg',
dark: '/library/openai_dark.svg'
light: "/library/openai.svg",
dark: "/library/openai_dark.svg",
},
wordmark: {
light: '/library/openai_wordmark_light.svg',
dark: '/library/openai_wordmark_dark.svg'
light: "/library/openai_wordmark_light.svg",
dark: "/library/openai_wordmark_dark.svg",
},
url: 'https://openai.com/',
brandUrl: 'https://openai.com/brand/'
url: "https://openai.com/",
brandUrl: "https://openai.com/brand/",
},
{
title: 'Threads',
category: 'Social',
title: "Threads",
category: "Social",
route: {
light: '/library/threads.svg',
dark: '/library/threads_dark.svg'
light: "/library/threads.svg",
dark: "/library/threads_dark.svg",
},
url: 'https://threads.net/'
url: "https://threads.net/",
},
{
title: 'Instagram',
category: 'Social',
title: "Instagram",
category: "Social",
route: {
light: '/library/instagram.svg',
dark: '/library/instagram_dark.svg'
light: "/library/instagram.svg",
dark: "/library/instagram_dark.svg",
},
url: 'https://www.instagram.com/',
brandUrl: 'https://about.instagram.com/brand'
url: "https://www.instagram.com/",
brandUrl: "https://about.instagram.com/brand",
},
{
title: 'VueUse',
category: 'Library',
route: '/library/vueuse.svg',
url: 'https://vueuse.org/'
title: "VueUse",
category: "Library",
route: "/library/vueuse.svg",
url: "https://vueuse.org/",
},
{
title: 'Microsoft SQL Server ',
category: 'Database',
route: '/library/sql-server.svg',
url: 'https://www.microsoft.com/en-us/sql-server/'
title: "Microsoft SQL Server ",
category: "Database",
route: "/library/sql-server.svg",
url: "https://www.microsoft.com/en-us/sql-server/",
},
{
title: 'Hono',
category: 'Framework',
route: '/library/hono.svg',
url: 'https://hono.dev/'
title: "Hono",
category: "Framework",
route: "/library/hono.svg",
url: "https://hono.dev/",
},
{
title: 'Million',
category: 'Library',
route: '/library/million.svg',
url: 'https://million.dev/'
title: "Million",
category: "Library",
route: "/library/million.svg",
url: "https://million.dev/",
},
{
title: 'PandaCSS',
category: 'Library',
route: '/library/pandacss.svg',
url: 'https://panda-css.com/'
title: "PandaCSS",
category: "Library",
route: "/library/pandacss.svg",
url: "https://panda-css.com/",
},
{
title: 'Pulumi',
category: 'Software',
route: '/library/pulumi.svg',
url: 'https://www.pulumi.com/'
title: "Pulumi",
category: "Software",
route: "/library/pulumi.svg",
url: "https://www.pulumi.com/",
},
{
title: 'FastAPI',
category: 'Framework',
route: '/library/fastapi.svg',
url: 'https://fastapi.tiangolo.com/'
title: "FastAPI",
category: "Framework",
route: "/library/fastapi.svg",
url: "https://fastapi.tiangolo.com/",
},
{
title: 'Codium',
category: 'AI',
route: '/library/codium.svg',
url: 'https://www.codium.ai/'
title: "Codium",
category: "AI",
route: "/library/codium.svg",
url: "https://www.codium.ai/",
},
{
title: 'Crossplane',
category: 'Framework',
route: '/library/crossplane.svg',
url: 'https://crossplane.io/'
title: "Crossplane",
category: "Framework",
route: "/library/crossplane.svg",
url: "https://crossplane.io/",
},
{
title: 'Volta',
category: 'Software',
title: "Volta",
category: "Software",
route: {
light: '/library/volta-dark.svg',
dark: '/library/volta-light.svg'
light: "/library/volta-dark.svg",
dark: "/library/volta-light.svg",
},
url: 'https://volta.net/'
url: "https://volta.net/",
},
{
title: 'Typesense',
category: 'Software',
route: '/library/typesense.svg',
url: 'https://typesense.org/'
title: "Typesense",
category: "Software",
route: "/library/typesense.svg",
url: "https://typesense.org/",
},
{
title: 'Bitcoin',
category: 'Crypto',
route: '/library/btc.svg',
url: 'https://bitcoin.org/'
title: "Bitcoin",
category: "Crypto",
route: "/library/btc.svg",
url: "https://bitcoin.org/",
},
{
title: 'Ethereum',
category: 'Crypto',
route: '/library/eth.svg',
url: 'https://ethereum.org/'
title: "Ethereum",
category: "Crypto",
route: "/library/eth.svg",
url: "https://ethereum.org/",
},
{
title: 'Solana',
category: 'Crypto',
route: '/library/sol.svg',
url: 'https://solana.com/'
title: "Solana",
category: "Crypto",
route: "/library/sol.svg",
url: "https://solana.com/",
},
{
title: 'Dogecoin',
category: 'Crypto',
route: '/library/doge.svg',
url: 'https://dogecoin.com/'
title: "Dogecoin",
category: "Crypto",
route: "/library/doge.svg",
url: "https://dogecoin.com/",
},
{
title: 'XRP',
category: 'Crypto',
route: '/library/xrp.svg',
url: 'https://xrpl.org/'
title: "XRP",
category: "Crypto",
route: "/library/xrp.svg",
url: "https://xrpl.org/",
},
{
title: 'BNB',
category: 'Crypto',
route: '/library/bnb.svg',
url: 'https://www.bnbchain.org/'
title: "BNB",
category: "Crypto",
route: "/library/bnb.svg",
url: "https://www.bnbchain.org/",
},
{
title: 'Link',
category: 'Crypto',
route: '/library/link.svg',
title: "Link",
category: "Crypto",
route: "/library/link.svg",
wordmark: {
light: '/library/link-wordmark-light.svg',
dark: '/library/link-wordmark-dark.svg'
light: "/library/link-wordmark-light.svg",
dark: "/library/link-wordmark-dark.svg",
},
url: 'https://chain.link/'
url: "https://chain.link/",
},
{
title: 'Polygon',
category: 'Crypto',
route: '/library/matic.svg',
url: 'https://polygon.technology/'
title: "Polygon",
category: "Crypto",
route: "/library/matic.svg",
url: "https://polygon.technology/",
},
{
title: 'Algorand',
category: 'Crypto',
route: '/library/algorand.svg',
url: 'https://algorand.org/'
title: "Algorand",
category: "Crypto",
route: "/library/algorand.svg",
url: "https://algorand.org/",
},
{
title: 'Tether',
category: 'Crypto',
route: '/library/tether.svg',
url: 'https://tether.to/'
title: "Tether",
category: "Crypto",
route: "/library/tether.svg",
url: "https://tether.to/",
},
{
title: 'X (formerly Twitter)',
category: 'Social',
title: "X (formerly Twitter)",
category: "Social",
route: {
light: '/library/x.svg',
dark: '/library/x_dark.svg'
light: "/library/x.svg",
dark: "/library/x_dark.svg",
},
url: 'https://x.com',
brandUrl: 'https://about.x.com/en/who-we-are/brand-toolkit'
url: "https://x.com",
brandUrl: "https://about.x.com/en/who-we-are/brand-toolkit",
},
{
title: 'Adobe',
category: 'Design',
route: '/library/adobe.svg',
url: 'https://www.adobe.com/'
title: "Adobe",
category: "Design",
route: "/library/adobe.svg",
url: "https://www.adobe.com/",
},
{
title: 'After Effects',
category: 'Design',
route: '/library/after-effects.svg',
url: 'https://www.adobe.com/products/aftereffects'
title: "After Effects",
category: "Design",
route: "/library/after-effects.svg",
url: "https://www.adobe.com/products/aftereffects",
},
{
title: 'Canva',
category: 'Design',
route: '/library/canva.svg',
url: 'https://www.canva.com/'
title: "Canva",
category: "Design",
route: "/library/canva.svg",
url: "https://www.canva.com/",
},
{
title: 'Illustrator',
category: 'Design',
route: '/library/illustrator.svg',
url: 'https://www.adobe.com/products/illustrator'
title: "Illustrator",
category: "Design",
route: "/library/illustrator.svg",
url: "https://www.adobe.com/products/illustrator",
},
{
title: 'InDesign',
category: 'Design',
route: '/library/indesign.svg',
url: 'https://www.adobe.com/products/indesign'
title: "InDesign",
category: "Design",
route: "/library/indesign.svg",
url: "https://www.adobe.com/products/indesign",
},
{
title: 'Lightroom',
category: 'Design',
route: '/library/lightroom.svg',
url: 'https://www.adobe.com/products/photoshop-lightroom'
title: "Lightroom",
category: "Design",
route: "/library/lightroom.svg",
url: "https://www.adobe.com/products/photoshop-lightroom",
},
{
title: 'Photoshop',
category: 'Design',
route: '/library/photoshop.svg',
url: 'https://www.adobe.com/products/photoshop'
title: "Photoshop",
category: "Design",
route: "/library/photoshop.svg",
url: "https://www.adobe.com/products/photoshop",
},
{
title: 'Premiere',
category: 'Design',
route: '/library/premiere.svg',
url: 'https://www.adobe.com/products/premiere'
title: "Premiere",
category: "Design",
route: "/library/premiere.svg",
url: "https://www.adobe.com/products/premiere",
},
{
title: 'VK',
category: 'Social',
route: '/library/vk.svg',
url: 'https://vk.com'
title: "VK",
category: "Social",
route: "/library/vk.svg",
url: "https://vk.com",
},
{
title: 'Hoppscotch',
category: 'Software',
route: '/library/hoppscotch.svg',
url: 'https://hoppscotch.com',
brandUrl: 'https://hoppscotch.com/brand'
title: "Hoppscotch",
category: "Software",
route: "/library/hoppscotch.svg",
url: "https://hoppscotch.com",
brandUrl: "https://hoppscotch.com/brand",
},
{
title: 'Opera',
category: 'Browser',
route: '/library/opera.svg',
url: 'https://www.opera.com',
brandUrl: 'https://brand.opera.com/'
title: "Opera",
category: "Browser",
route: "/library/opera.svg",
url: "https://www.opera.com",
brandUrl: "https://brand.opera.com/",
},
{
title: 'Salesforce',
category: 'Software',
route: '/library/salesforce.svg',
url: 'https://www.salesforce.com',
brandUrl: 'https://brand.salesforce.com/'
title: "Salesforce",
category: "Software",
route: "/library/salesforce.svg",
url: "https://www.salesforce.com",
brandUrl: "https://brand.salesforce.com/",
},
{
title: 'Unreal Engine',
category: 'Software',
title: "Unreal Engine",
category: "Software",
route: {
light: '/library/unreal_engine.svg',
dark: '/library/unreal_engine_dark.svg'
light: "/library/unreal_engine.svg",
dark: "/library/unreal_engine_dark.svg",
},
url: 'https://www.unrealengine.com/'
url: "https://www.unrealengine.com/",
},
{
title: 'Godot Engine',
category: 'Software',
route: '/library/godot_engine.svg',
url: 'https://godotengine.org/'
title: "Godot Engine",
category: "Software",
route: "/library/godot_engine.svg",
url: "https://godotengine.org/",
},
{
title: 'Datadog',
category: 'Software',
route: '/library/datadog.svg',
url: 'https://www.datadoghq.com/'
title: "Datadog",
category: "Software",
route: "/library/datadog.svg",
url: "https://www.datadoghq.com/",
},
{
title: 'Tron',
category: 'Crypto',
route: '/library/tron.svg',
url: 'https://tron.network/'
title: "Tron",
category: "Crypto",
route: "/library/tron.svg",
url: "https://tron.network/",
},
{
title: 'Randevum',
category: 'Software',
route: '/library/randevum.svg',
url: 'https://www.randevum.co'
title: "Randevum",
category: "Software",
route: "/library/randevum.svg",
url: "https://www.randevum.co",
},
{
title: 'Chromium',
category: 'Browser',
route: '/library/chromium.svg',
url: 'https://www.chromium.org'
title: "Chromium",
category: "Browser",
route: "/library/chromium.svg",
url: "https://www.chromium.org",
},
{
title: 'Edge',
category: 'Browser',
route: '/library/edge.svg',
url: 'https://www.microsoft.com/en-us/edge'
title: "Edge",
category: "Browser",
route: "/library/edge.svg",
url: "https://www.microsoft.com/en-us/edge",
},
{
title: 'Safari',
category: 'Browser',
route: '/library/safari.svg',
url: 'https://www.apple.com/safari'
title: "Safari",
category: "Browser",
route: "/library/safari.svg",
url: "https://www.apple.com/safari",
},
{
title: 'Vivaldi',
category: 'Browser',
route: '/library/vivaldi.svg',
url: 'https://vivaldi.com'
title: "Vivaldi",
category: "Browser",
route: "/library/vivaldi.svg",
url: "https://vivaldi.com",
},
{
title: 'Beacon',
category: 'Software',
route: '/library/Beacon-Logo.svg',
url: 'https://www.beacon.com'
title: "Beacon",
category: "Software",
route: "/library/Beacon-Logo.svg",
url: "https://www.beacon.com",
},
{
title: 'Affinity Designer',
category: 'Design',
route: '/library/affinity_designer.svg',
url: 'https://affinity.serif.com/en-us/designer/'
title: "Affinity Designer",
category: "Design",
route: "/library/affinity_designer.svg",
url: "https://affinity.serif.com/en-us/designer/",
},
{
title: 'Affinity Photo',
category: 'Software',
route: '/library/affinity_photo.svg',
url: 'https://affinity.serif.com/en-us/photo/'
title: "Affinity Photo",
category: "Software",
route: "/library/affinity_photo.svg",
url: "https://affinity.serif.com/en-us/photo/",
},
{
title: 'Affinity Publisher',
category: 'Software',
route: '/library/affinity_publisher.svg',
url: 'https://affinity.serif.com/en-us/publisher/'
title: "Affinity Publisher",
category: "Software",
route: "/library/affinity_publisher.svg",
url: "https://affinity.serif.com/en-us/publisher/",
},
{
title: 'Roblox',
category: 'Software',
title: "Roblox",
category: "Software",
route: {
dark: '/library/roblox.svg',
light: '/library/roblox_light.svg'
dark: "/library/roblox.svg",
light: "/library/roblox_light.svg",
},
url: 'https://www.roblox.com/'
url: "https://www.roblox.com/",
},
{
title: 'Stately.ai',
category: 'Software',
title: "Stately.ai",
category: "Software",
route: {
light: '/library/stately.svg',
dark: '/library/stately_dark.svg'
light: "/library/stately.svg",
dark: "/library/stately_dark.svg",
},
url: 'https://stately.ai/'
url: "https://stately.ai/",
},
{
title: 'XState',
category: 'Library',
title: "XState",
category: "Library",
route: {
light: '/library/xstate.svg',
dark: '/library/xstate_dark.svg'
light: "/library/xstate.svg",
dark: "/library/xstate_dark.svg",
},
url: 'https://github.com/statelyai/xstate'
url: "https://github.com/statelyai/xstate",
},
{
title: 'Hashnode',
category: 'Social',
route: '/library/hashnode.svg',
url: 'https://hashnode.com'
title: "Hashnode",
category: "Social",
route: "/library/hashnode.svg",
url: "https://hashnode.com",
},
{
title: 'Rowy',
category: 'CMS',
route: '/library/rowy.svg',
url: 'https://www.rowy.io/'
title: "Rowy",
category: "CMS",
route: "/library/rowy.svg",
url: "https://www.rowy.io/",
},
{
title: 'Cal.com',
category: 'Software',
title: "Cal.com",
category: "Software",
route: {
light: '/library/cal.svg',
dark: '/library/cal_dark.svg'
light: "/library/cal.svg",
dark: "/library/cal_dark.svg",
},
url: 'https://cal.com',
brandUrl: 'https://design.cal.com/'
url: "https://cal.com",
brandUrl: "https://design.cal.com/",
},
{
title: 'Calendly',
category: 'Software',
route: '/library/calendly.svg',
url: 'https://calendly.com/'
title: "Calendly",
category: "Software",
route: "/library/calendly.svg",
url: "https://calendly.com/",
},
{
title: 'Mintlify',
category: 'Software',
route: '/library/mintlify.svg',
url: 'https://mintlify.com/'
title: "Mintlify",
category: "Software",
route: "/library/mintlify.svg",
url: "https://mintlify.com/",
},
{
title: 'Patreon',
category: 'Social',
title: "Patreon",
category: "Social",
route: {
light: '/library/patreon.svg',
dark: '/library/patreon_dark.svg'
light: "/library/patreon.svg",
dark: "/library/patreon_dark.svg",
},
url: 'https://www.patreon.com/'
url: "https://www.patreon.com/",
},
{
title: 'Peerlist',
category: 'Social',
route: '/library/peerlist.svg',
url: 'https://www.peerlist.io/'
title: "Peerlist",
category: "Social",
route: "/library/peerlist.svg",
url: "https://www.peerlist.io/",
},
{
title: 'Product Hunt',
category: 'Software',
route: '/library/producthunt.svg',
url: 'https://www.producthunt.com/'
title: "Product Hunt",
category: "Software",
route: "/library/producthunt.svg",
url: "https://www.producthunt.com/",
},
{
title: 'Remotion',
category: 'Framework',
route: '/library/remotion.svg',
url: 'https://www.remotion.dev/'
title: "Remotion",
category: "Framework",
route: "/library/remotion.svg",
url: "https://www.remotion.dev/",
},
{
title: 'Warp',
category: 'Software',
route: '/library/warp.svg',
url: 'https://www.warp.dev/'
title: "Warp",
category: "Software",
route: "/library/warp.svg",
url: "https://www.warp.dev/",
},
{
title: 'SST',
category: 'Framework',
route: '/library/sst.svg',
url: 'https://sst.dev/'
title: "SST",
category: "Framework",
route: "/library/sst.svg",
url: "https://sst.dev/",
},
{
title: 'Documenso',
category: 'Software',
title: "Documenso",
category: "Software",
route: {
light: '/library/documenso.svg',
dark: '/library/documenso_dark.svg'
light: "/library/documenso.svg",
dark: "/library/documenso_dark.svg",
},
url: 'https://documenso.com'
url: "https://documenso.com",
},
{
title: 'Bash',
category: 'Language',
title: "Bash",
category: "Language",
route: {
light: '/library/bash.svg',
dark: '/library/bash_dark.svg'
light: "/library/bash.svg",
dark: "/library/bash_dark.svg",
},
url: 'https://www.gnu.org/software/bash/'
url: "https://www.gnu.org/software/bash/",
},
{
title: 'C',
category: 'Language',
route: '/library/c.svg',
url: 'https://en.wikipedia.org/wiki/C_(programming_language)'
title: "C",
category: "Language",
route: "/library/c.svg",
url: "https://en.wikipedia.org/wiki/C_(programming_language)",
},
{
title: 'C++',
category: 'Language',
route: '/library/c-plusplus.svg',
url: 'https://en.wikipedia.org/wiki/C%2B%2B'
title: "C++",
category: "Language",
route: "/library/c-plusplus.svg",
url: "https://en.wikipedia.org/wiki/C%2B%2B",
},
{
title: 'Cobol',
category: 'Language',
route: '/library/cobol.svg',
url: 'https://en.wikipedia.org/wiki/COBOL'
title: "Cobol",
category: "Language",
route: "/library/cobol.svg",
url: "https://en.wikipedia.org/wiki/COBOL",
},
{
title: 'Fortran',
category: 'Language',
route: '/library/fortran.svg',
url: 'https://fortran-lang.org/'
title: "Fortran",
category: "Language",
route: "/library/fortran.svg",
url: "https://fortran-lang.org/",
},
{
title: 'Haskell',
category: 'Language',
route: '/library/haskell.svg',
url: 'https://www.haskell.org/'
title: "Haskell",
category: "Language",
route: "/library/haskell.svg",
url: "https://www.haskell.org/",
},
{
title: 'matlab',
category: 'Language',
route: '/library/matlab.svg',
url: 'https://www.mathworks.com/products/matlab.html'
title: "matlab",
category: "Language",
route: "/library/matlab.svg",
url: "https://www.mathworks.com/products/matlab.html",
},
{
title: 'R',
category: 'Language',
title: "R",
category: "Language",
route: {
light: '/library/r.svg',
dark: '/library/r_dark.svg'
light: "/library/r.svg",
dark: "/library/r_dark.svg",
},
url: 'https://www.r-project.org/'
url: "https://www.r-project.org/",
},
{
title: 'Rust',
category: 'Language',
title: "Rust",
category: "Language",
route: {
light: '/library/rust.svg',
dark: '/library/rust_dark.svg'
light: "/library/rust.svg",
dark: "/library/rust_dark.svg",
},
url: 'https://www.rust-lang.org/'
url: "https://www.rust-lang.org/",
},
{
title: 'Zig',
category: 'Language',
route: '/library/zig.svg',
url: 'https://ziglang.org/'
title: "Zig",
category: "Language",
route: "/library/zig.svg",
url: "https://ziglang.org/",
},
{
title: 'Instatus',
category: 'Software',
title: "Instatus",
category: "Software",
route: {
light: '/library/instatus.svg',
dark: '/library/instatus_dark.svg'
light: "/library/instatus.svg",
dark: "/library/instatus_dark.svg",
},
url: 'https://instatus.com'
url: "https://instatus.com",
},
{
title: 'Front',
category: 'Software',
route: '/library/front.svg',
url: 'https://front.com'
title: "Front",
category: "Software",
route: "/library/front.svg",
url: "https://front.com",
},
{
title: 'Monero',
category: 'Crypto',
route: '/library/monero.svg',
url: 'https://www.getmonero.org/'
title: "Monero",
category: "Crypto",
route: "/library/monero.svg",
url: "https://www.getmonero.org/",
},
{
title: 'Axiom',
category: 'Software',
title: "Axiom",
category: "Software",
route: {
dark: '/library/axiom-dark.svg',
light: '/library/axiom-light.svg'
dark: "/library/axiom-dark.svg",
light: "/library/axiom-light.svg",
},
wordmark: {
light: '/library/axiom-wordmark-light.svg',
dark: '/library/axiom-wordmark-dark.svg'
light: "/library/axiom-wordmark-light.svg",
dark: "/library/axiom-wordmark-dark.svg",
},
url: 'https://axiom.co/'
url: "https://axiom.co/",
},
{
title: 'Django',
category: 'Framework',
route: '/library/django.svg',
url: 'https://www.djangoproject.com/',
brandUrl: 'https://www.djangoproject.com/community/logos/'
title: "Django",
category: "Framework",
route: "/library/django.svg",
url: "https://www.djangoproject.com/",
brandUrl: "https://www.djangoproject.com/community/logos/",
},
{
title: 'Zeabur',
category: 'Hosting',
title: "Zeabur",
category: "Hosting",
route: {
light: '/library/zeabur-light.svg',
dark: '/library/zeabur-dark.svg'
light: "/library/zeabur-light.svg",
dark: "/library/zeabur-dark.svg",
},
wordmark: {
light: '/library/zeabur_wordmark_light.svg',
dark: '/library/zeabur_wordmark_dark.svg'
light: "/library/zeabur_wordmark_light.svg",
dark: "/library/zeabur_wordmark_dark.svg",
},
url: 'https://zeabur.com/'
url: "https://zeabur.com/",
},
{
title: 'MetaMask',
category: 'Crypto',
route: '/library/metamask.svg',
url: 'https://metamask.io/'
title: "MetaMask",
category: "Crypto",
route: "/library/metamask.svg",
url: "https://metamask.io/",
},
{
title: 'shadcn/ui',
category: 'Library',
title: "shadcn/ui",
category: "Library",
route: {
light: '/library/shadcn-ui.svg',
dark: '/library/shadcn-ui_dark.svg'
light: "/library/shadcn-ui.svg",
dark: "/library/shadcn-ui_dark.svg",
},
url: 'https://ui.shadcn.com/'
url: "https://ui.shadcn.com/",
},
{
title: 'putio',
category: 'Software',
route: '/library/putio.svg',
url: 'https://put.io/'
title: "putio",
category: "Software",
route: "/library/putio.svg",
url: "https://put.io/",
},
{
title: 'Pinterest',
category: 'Social',
route: '/library/pinterest.svg',
url: 'https://pinterest.com/'
title: "Pinterest",
category: "Social",
route: "/library/pinterest.svg",
url: "https://pinterest.com/",
},
{
title: 'Reflex',
category: 'Software',
title: "Reflex",
category: "Software",
route: {
light: '/library/reflex-dark.svg',
dark: '/library/reflex-light.svg'
light: "/library/reflex-dark.svg",
dark: "/library/reflex-light.svg",
},
url: 'https://reflex.dev/'
url: "https://reflex.dev/",
},
{
title: 'Stripe',
category: ['Software', 'Payment'],
route: '/library/stripe.svg',
url: 'https://stripe.com/'
title: "Stripe",
category: ["Software", "Payment"],
route: "/library/stripe.svg",
url: "https://stripe.com/",
},
{
title: 'Linux',
category: 'Software',
route: '/library/linux.svg',
url: 'https://www.linux.org/'
title: "Linux",
category: "Software",
route: "/library/linux.svg",
url: "https://www.linux.org/",
},
{
title: 'XD',
category: 'Design',
route: '/library/adobe-xd.svg',
url: 'https://www.adobe.com/products/xd'
title: "XD",
category: "Design",
route: "/library/adobe-xd.svg",
url: "https://www.adobe.com/products/xd",
},
{
title: 'Axure',
category: 'Design',
route: '/library/axure.svg',
url: 'https://www.axure.com/'
title: "Axure",
category: "Design",
route: "/library/axure.svg",
url: "https://www.axure.com/",
},
{
title: 'Penpot',
category: 'Design',
title: "Penpot",
category: "Design",
route: {
light: '/library/penpot.svg',
dark: '/library/penpot_dark.svg'
light: "/library/penpot.svg",
dark: "/library/penpot_dark.svg",
},
url: 'https://penpot.app/'
url: "https://penpot.app/",
},
{
title: 'Sketch',
category: 'Design',
title: "Sketch",
category: "Design",
route: {
light: '/library/sketch_light.svg',
dark: '/library/sketch.svg'
light: "/library/sketch_light.svg",
dark: "/library/sketch.svg",
},
url: 'https://www.sketch.com/'
url: "https://www.sketch.com/",
},
{
title: 'Gimp',
category: 'Design',
route: '/library/gimp.svg',
url: 'https://www.gimp.org/'
title: "Gimp",
category: "Design",
route: "/library/gimp.svg",
url: "https://www.gimp.org/",
},
{
title: 'Ubuntu',
category: 'Software',
route: '/library/ubuntu.svg',
url: 'https://ubuntu.com/',
brandUrl: 'https://design.ubuntu.com/brand'
title: "Ubuntu",
category: "Software",
route: "/library/ubuntu.svg",
url: "https://ubuntu.com/",
brandUrl: "https://design.ubuntu.com/brand",
},
{
title: 'Cypress',
category: 'Framework',
route: '/library/cypress.svg',
url: 'https://www.cypress.io/'
title: "Cypress",
category: "Framework",
route: "/library/cypress.svg",
url: "https://www.cypress.io/",
},
{
title: 'Reddit',
category: 'Social',
route: '/library/reddit.svg',
url: 'https://www.reddit.com/',
brandUrl: 'https://redditinc.com/brand'
title: "Reddit",
category: "Social",
route: "/library/reddit.svg",
url: "https://www.reddit.com/",
brandUrl: "https://redditinc.com/brand",
},
{
title: 'JetBrains WebStorm',
category: 'Software',
route: '/library/webstorm.svg',
url: 'https://www.jetbrains.com/webstorm/'
title: "JetBrains WebStorm",
category: "Software",
route: "/library/webstorm.svg",
url: "https://www.jetbrains.com/webstorm/",
},
{
title: 'JetBrains PyCharm',
category: 'Software',
route: '/library/pycharm.svg',
url: 'https://www.jetbrains.com/pycharm/'
title: "JetBrains PyCharm",
category: "Software",
route: "/library/pycharm.svg",
url: "https://www.jetbrains.com/pycharm/",
},
{
title: 'JetBrains Fleet',
category: 'Software',
route: '/library/fleet.svg',
url: 'https://www.jetbrains.com/fleet/'
title: "JetBrains Fleet",
category: "Software",
route: "/library/fleet.svg",
url: "https://www.jetbrains.com/fleet/",
},
{
title: 'JetBrains RubyMine',
category: 'Software',
route: '/library/rubymine.svg',
url: 'https://www.jetbrains.com/ruby/'
title: "JetBrains RubyMine",
category: "Software",
route: "/library/rubymine.svg",
url: "https://www.jetbrains.com/ruby/",
},
{
title: 'JetBrains PhpStorm',
category: 'Software',
route: '/library/phpstorm.svg',
url: 'https://www.jetbrains.com/phpstorm/'
title: "JetBrains PhpStorm",
category: "Software",
route: "/library/phpstorm.svg",
url: "https://www.jetbrains.com/phpstorm/",
},
{
title: 'Monkeytype',
category: 'Software',
route: '/library/monkeytype.svg',
title: "Monkeytype",
category: "Software",
route: "/library/monkeytype.svg",
wordmark: {
dark: '/library/monkeytype-wordmark-dark.svg',
light: '/library/monkeytype-wordmark-light.svg'
dark: "/library/monkeytype-wordmark-dark.svg",
light: "/library/monkeytype-wordmark-light.svg",
},
url: 'https://monkeytype.com/'
url: "https://monkeytype.com/",
},
{
title: 'PyCharm',
category: 'Software',
route: '/library/pycharm.svg',
url: 'https://www.jetbrains.com/pycharm/'
title: "PyCharm",
category: "Software",
route: "/library/pycharm.svg",
url: "https://www.jetbrains.com/pycharm/",
},
{
title: 'Shopify',
category: 'CMS',
route: '/library/shopify.svg',
title: "Shopify",
category: "CMS",
route: "/library/shopify.svg",
wordmark: {
dark: '/library/shopify-wordmark-dark.svg',
light: '/library/shopify-wordmark-light.svg'
dark: "/library/shopify-wordmark-dark.svg",
light: "/library/shopify-wordmark-light.svg",
},
url: 'https://www.shopify.com',
brandUrl: 'https://www.shopify.com/brand-assets'
url: "https://www.shopify.com",
brandUrl: "https://www.shopify.com/brand-assets",
},
{
title: 'Webflow',
category: 'CMS',
route: '/library/webflow.svg',
title: "Webflow",
category: "CMS",
route: "/library/webflow.svg",
wordmark: {
dark: '/library/webflow-wordmark-dark.svg',
light: '/library/webflow-wordmark-light.svg'
dark: "/library/webflow-wordmark-dark.svg",
light: "/library/webflow-wordmark-light.svg",
},
url: 'https://www.webflow.com',
brandUrl: 'https://brand-at.webflow.io/resources'
url: "https://www.webflow.com",
brandUrl: "https://brand-at.webflow.io/resources",
},
{
title: 'Sanity',
category: 'CMS',
route: '/library/sanity.svg',
url: 'https://www.sanity.io'
title: "Sanity",
category: "CMS",
route: "/library/sanity.svg",
url: "https://www.sanity.io",
},
{
title: 'sky',
category: 'Entertainment',
route: '/library/sky.svg',
url: 'https://www.sky.com'
title: "sky",
category: "Entertainment",
route: "/library/sky.svg",
url: "https://www.sky.com",
},
{
title: 'Airbnb',
category: 'Software',
route: '/library/airbnb.svg',
wordmark: '/library/airbnb-wordmark.svg',
url: 'https://www.airbnb.com'
title: "Airbnb",
category: "Software",
route: "/library/airbnb.svg",
wordmark: "/library/airbnb-wordmark.svg",
url: "https://www.airbnb.com",
},
{
title: 'Uber',
category: 'Software',
title: "Uber",
category: "Software",
route: {
light: '/library/uber_light.svg',
dark: '/library/uber_dark.svg'
light: "/library/uber_light.svg",
dark: "/library/uber_dark.svg",
},
url: 'https://www.uber.com',
brandUrl: 'https://brand.uber.com/'
url: "https://www.uber.com",
brandUrl: "https://brand.uber.com/",
},
{
title: 'Gmail',
category: ['Google', 'Software'],
route: '/library/gmail.svg',
url: 'https://www.gmail.com'
title: "Gmail",
category: ["Google", "Software"],
route: "/library/gmail.svg",
url: "https://www.gmail.com",
},
{
title: 'Outlook',
category: 'Software',
route: '/library/outlook.svg',
url: 'https://www.outlook.com'
title: "Outlook",
category: "Software",
route: "/library/outlook.svg",
url: "https://www.outlook.com",
},
{
title: 'Slack',
category: 'Software',
route: '/library/slack.svg',
wordmark: '/library/slack-wordmark.svg',
url: 'https://www.slack.com'
title: "Slack",
category: "Software",
route: "/library/slack.svg",
wordmark: "/library/slack-wordmark.svg",
url: "https://www.slack.com",
},
{
title: 'Snapchat',
category: 'Software',
route: '/library/snapchat.svg',
url: 'https://www.snapchat.com'
title: "Snapchat",
category: "Software",
route: "/library/snapchat.svg",
url: "https://www.snapchat.com",
},
{
title: 'Ebay',
category: 'Software',
route: '/library/ebay.svg',
url: 'https://www.ebay.com'
title: "Ebay",
category: "Software",
route: "/library/ebay.svg",
url: "https://www.ebay.com",
},
{
title: 'IBM',
category: 'Software',
route: '/library/ibm.svg',
url: 'https://www.ibm.com'
title: "IBM",
category: "Software",
route: "/library/ibm.svg",
url: "https://www.ibm.com",
},
{
title: 'TrustPilot',
category: 'Software',
route: '/library/trustpilot.svg',
url: 'https://www.trustpilot.com'
title: "TrustPilot",
category: "Software",
route: "/library/trustpilot.svg",
url: "https://www.trustpilot.com",
},
{
title: 'Raycast',
category: 'Software',
route: '/library/raycast.svg',
title: "Raycast",
category: "Software",
route: "/library/raycast.svg",
wordmark: {
light: '/library/raycast-wordmark-light.svg',
dark: '/library/raycast-wordmark-dark.svg'
light: "/library/raycast-wordmark-light.svg",
dark: "/library/raycast-wordmark-dark.svg",
},
url: 'https://raycast.com/'
url: "https://raycast.com/",
},
{
title: 'Flow Launcher',
category: ['Software', 'Devtool'],
route: '/library/FlowLauncher.svg',
url: 'https://www.flowlauncher.com/'
title: "Flow Launcher",
category: ["Software", "Devtool"],
route: "/library/FlowLauncher.svg",
url: "https://www.flowlauncher.com/",
},
{
title: 'Hack The Box',
category: 'Cybersecurity',
route: '/library/hack-the-box.svg',
title: "Hack The Box",
category: "Cybersecurity",
route: "/library/hack-the-box.svg",
wordmark: {
light: '/library/hack-the-box-wordmark-light.svg',
dark: '/library/hack-the-box-wordmark-dark.svg'
light: "/library/hack-the-box-wordmark-light.svg",
dark: "/library/hack-the-box-wordmark-dark.svg",
},
url: 'https://www.hackthebox.com/'
url: "https://www.hackthebox.com/",
},
{
title: 'Procure',
category: 'Marketplace',
route: '/library/procure.svg',
url: 'https://procure.biz/'
title: "Procure",
category: "Marketplace",
route: "/library/procure.svg",
url: "https://procure.biz/",
},
{
title: 'Julia',
category: 'Language',
route: '/library/julia.svg',
url: 'https://julialang.org/'
title: "Julia",
category: "Language",
route: "/library/julia.svg",
url: "https://julialang.org/",
},
{
title: 'SWC',
category: 'Compiler',
route: '/library/swc.svg',
url: 'https://swc.rs/'
title: "SWC",
category: "Compiler",
route: "/library/swc.svg",
url: "https://swc.rs/",
},
{
title: 'PlayStation',
category: 'Software',
route: '/library/playstation.svg',
url: 'https://www.playstation.com/'
title: "PlayStation",
category: "Software",
route: "/library/playstation.svg",
url: "https://www.playstation.com/",
},
{
title: 'Xbox',
category: 'Software',
route: '/library/xbox.svg',
url: 'https://www.xbox.com/'
title: "Xbox",
category: "Software",
route: "/library/xbox.svg",
url: "https://www.xbox.com/",
},
{
title: 'Cody',
category: 'AI',
route: '/library/cody.svg',
url: 'https://about.sourcegraph.com/'
title: "Cody",
category: "AI",
route: "/library/cody.svg",
url: "https://about.sourcegraph.com/",
},
{
title: 'Sourcegraph',
category: 'AI',
route: '/library/sourcegraph.svg',
url: 'https://about.sourcegraph.com/'
title: "Sourcegraph",
category: "AI",
route: "/library/sourcegraph.svg",
url: "https://about.sourcegraph.com/",
},
{
title: 'Perplexity AI',
category: 'AI',
route: '/library/perplexity.svg',
title: "Perplexity AI",
category: "AI",
route: "/library/perplexity.svg",
wordmark: {
light: '/library/perplexity_wordmark_light.svg',
dark: '/library/perplexity_wordmark_dark.svg'
light: "/library/perplexity_wordmark_light.svg",
dark: "/library/perplexity_wordmark_dark.svg",
},
url: 'https://perplexity.ai/'
url: "https://perplexity.ai/",
},
{
title: 'Spring',
category: 'Framework',
route: '/library/spring.svg',
url: 'https://spring.io/'
title: "Spring",
category: "Framework",
route: "/library/spring.svg",
url: "https://spring.io/",
},
{
title: 'Directus',
category: 'CMS',
route: '/library/directus.svg',
url: 'https://directus.io/'
title: "Directus",
category: "CMS",
route: "/library/directus.svg",
url: "https://directus.io/",
},
{
title: 'Pnpm',
category: 'Software',
title: "Pnpm",
category: "Software",
route: {
light: '/library/pnpm.svg',
dark: '/library/pnpm_dark.svg'
light: "/library/pnpm.svg",
dark: "/library/pnpm_dark.svg",
},
wordmark: {
light: '/library/pnpm_wordmark_light.svg',
dark: '/library/pnpm_wordmark_dark.svg'
light: "/library/pnpm_wordmark_light.svg",
dark: "/library/pnpm_wordmark_dark.svg",
},
url: 'https://pnpm.io/'
url: "https://pnpm.io/",
},
{
title: 'Emacs',
category: 'Software',
route: '/library/emacs.svg',
url: 'https://www.gnu.org/software/emacs/'
title: "Emacs",
category: "Software",
route: "/library/emacs.svg",
url: "https://www.gnu.org/software/emacs/",
},
{
title: 'Svgl',
category: 'Library',
route: '/library/svgl.svg',
url: 'https://svgl.app'
title: "Svgl",
category: "Library",
route: "/library/svgl.svg",
url: "https://svgl.app",
},
{
title: 'Google Idx',
category: ['Software', 'Google'],
route: '/library/google-idx.svg',
url: 'https://idx.dev/'
title: "Google Idx",
category: ["Software", "Google"],
route: "/library/google-idx.svg",
url: "https://idx.dev/",
},
{
title: 'Remix',
category: 'Framework',
title: "Remix",
category: "Framework",
route: {
light: '/library/remix_light.svg',
dark: '/library/remix_dark.svg'
light: "/library/remix_light.svg",
dark: "/library/remix_dark.svg",
},
wordmark: {
light: '/library/remix_wordmark_light.svg',
dark: '/library/remix_wordmark_dark.svg'
light: "/library/remix_wordmark_light.svg",
dark: "/library/remix_wordmark_dark.svg",
},
url: 'https://remix.run/',
brandUrl: 'https://remix.run/brand'
url: "https://remix.run/",
brandUrl: "https://remix.run/brand",
},
{
title: 'Steam',
category: 'Software',
route: '/library/steam.svg',
url: 'https://store.steampowered.com/'
title: "Steam",
category: "Software",
route: "/library/steam.svg",
url: "https://store.steampowered.com/",
},
{
title: 'Tabby',
category: 'Software',
route: '/library/tabby.svg',
url: 'https://tabby.sh/'
title: "Tabby",
category: "Software",
route: "/library/tabby.svg",
url: "https://tabby.sh/",
},
{
title: '1Password',
category: 'Software',
title: "1Password",
category: "Software",
route: {
light: '/library/1password-light.svg',
dark: '/library/1password-dark.svg'
light: "/library/1password-light.svg",
dark: "/library/1password-dark.svg",
},
url: 'https://1password.com'
url: "https://1password.com",
},
{
title: 'Flask',
category: 'Framework',
title: "Flask",
category: "Framework",
route: {
light: '/library/flask-light.svg',
dark: '/library/flask-dark.svg'
light: "/library/flask-light.svg",
dark: "/library/flask-dark.svg",
},
wordmark: {
light: '/library/flask-wordmark-light.svg',
dark: '/library/flask-wordmark-dark.svg'
light: "/library/flask-wordmark-light.svg",
dark: "/library/flask-wordmark-dark.svg",
},
url: 'https://flask.palletsprojects.com/'
url: "https://flask.palletsprojects.com/",
},
{
title: 'Alacritty',
category: 'Software',
route: '/library/alacritty.svg',
url: 'https://alacritty.org'
title: "Alacritty",
category: "Software",
route: "/library/alacritty.svg",
url: "https://alacritty.org",
},
{
title: 'Qt',
category: 'Software',
route: '/library/qt.svg',
url: 'https://www.qt.io/'
title: "Qt",
category: "Software",
route: "/library/qt.svg",
url: "https://www.qt.io/",
},
{
title: 'Bitwarden',
category: ['Software', 'Authentication'],
route: '/library/bitwarden.svg',
url: 'https://bitwarden.com/',
brandUrl: 'https://bitwarden.com/brand/'
title: "Bitwarden",
category: ["Software", "Authentication"],
route: "/library/bitwarden.svg",
url: "https://bitwarden.com/",
brandUrl: "https://bitwarden.com/brand/",
},
{
title: 'Voicemod',
category: 'Entertainment',
title: "Voicemod",
category: "Entertainment",
route: {
light: '/library/voicemod_light.svg',
dark: '/library/voicemod_dark.svg'
light: "/library/voicemod_light.svg",
dark: "/library/voicemod_dark.svg",
},
url: 'https://voicemod.net/'
url: "https://voicemod.net/",
},
{
title: 'Neovim',
category: 'Software',
route: '/library/neovim.svg',
url: 'https://neovim.io/'
title: "Neovim",
category: "Software",
route: "/library/neovim.svg",
url: "https://neovim.io/",
},
{
title: 'Pitch',
category: 'Design',
route: '/library/pitch.svg',
url: 'https://pitch.com'
title: "Pitch",
category: "Design",
route: "/library/pitch.svg",
url: "https://pitch.com",
},
{
title: 'Biomejs',
category: 'Compiler',
route: '/library/biomejs.svg',
url: 'https://biomejs.dev/'
title: "Biomejs",
category: "Compiler",
route: "/library/biomejs.svg",
url: "https://biomejs.dev/",
},
{
title: 'Gradio',
category: 'Software',
route: '/library/gradio.svg',
url: 'https://www.gradio.app/'
title: "Gradio",
category: "Software",
route: "/library/gradio.svg",
url: "https://www.gradio.app/",
},
{
title: 'Meta',
category: 'Social',
route: '/library/meta.svg',
url: 'https://about.meta.com/es/',
brandUrl: 'https://about.meta.com/brand/resources/'
title: "Meta",
category: "Social",
route: "/library/meta.svg",
url: "https://about.meta.com/es/",
brandUrl: "https://about.meta.com/brand/resources/",
},
{
title: 'Stability AI',
category: 'AI',
route: '/library/stability-ai.svg',
url: 'https://stability.ai/'
title: "Stability AI",
category: "AI",
route: "/library/stability-ai.svg",
url: "https://stability.ai/",
},
{
title: 'Google PaLM',
category: ['AI', 'Google'],
route: '/library/google-palm.svg',
url: 'https://ai.google/discover/palm2/'
title: "Google PaLM",
category: ["AI", "Google"],
route: "/library/google-palm.svg",
url: "https://ai.google/discover/palm2/",
},
{
title: 'Android',
category: 'Software',
route: '/library/android-icon.svg',
url: 'https://www.android.com/'
title: "Android",
category: "Software",
route: "/library/android-icon.svg",
url: "https://www.android.com/",
},
{
title: 'Sentry',
category: 'Software',
route: '/library/sentry.svg',
url: 'https://sentry.io/',
brandUrl: 'https://sentry.io/branding/'
title: "Sentry",
category: "Software",
route: "/library/sentry.svg",
url: "https://sentry.io/",
brandUrl: "https://sentry.io/branding/",
},
{
title: 'Grafana',
category: 'Software',
route: '/library/grafana.svg',
url: 'https://grafana.com/'
title: "Grafana",
category: "Software",
route: "/library/grafana.svg",
url: "https://grafana.com/",
},
{
title: 'Notion',
category: 'Software',
route: '/library/notion.svg',
url: 'https://notion.so/'
title: "Notion",
category: "Software",
route: "/library/notion.svg",
url: "https://notion.so/",
},
{
title: 'Litecoin',
category: 'Crypto',
route: '/library/litecoin.svg',
url: 'https://litecoin.org/'
title: "Litecoin",
category: "Crypto",
route: "/library/litecoin.svg",
url: "https://litecoin.org/",
},
{
title: 'ElysiaJS',
category: 'Framework',
route: '/library/elysiajs.svg',
url: 'https://elysiajs.com/'
title: "ElysiaJS",
category: "Framework",
route: "/library/elysiajs.svg",
url: "https://elysiajs.com/",
},
{
title: 'TensorFlow',
category: 'Library',
route: '/library/tensorflow.svg',
url: 'https://www.tensorflow.org/'
title: "TensorFlow",
category: "Library",
route: "/library/tensorflow.svg",
url: "https://www.tensorflow.org/",
},
{
title: 'Midday',
category: 'AI',
route: '/library/midday.svg',
url: 'https://midday.ai/'
title: "Midday",
category: "AI",
route: "/library/midday.svg",
url: "https://midday.ai/",
},
{
title: 'C#',
category: 'Language',
route: '/library/csharp.svg',
url: 'https://dotnet.microsoft.com/languages/csharp'
title: "C#",
category: "Language",
route: "/library/csharp.svg",
url: "https://dotnet.microsoft.com/languages/csharp",
},
{
title: 'Replicate',
category: 'AI',
title: "Replicate",
category: "AI",
route: {
light: '/library/replicate_light.svg',
dark: '/library/replicate_dark.svg'
light: "/library/replicate_light.svg",
dark: "/library/replicate_dark.svg",
},
wordmark: {
light: '/library/replicate-wordmark_light.svg',
dark: '/library/replicate-wordmark_dark.svg'
light: "/library/replicate-wordmark_light.svg",
dark: "/library/replicate-wordmark_dark.svg",
},
url: 'https://replicate.com/'
url: "https://replicate.com/",
},
{
title: 'Markdown',
category: 'Language',
title: "Markdown",
category: "Language",
route: {
light: '/library/markdown-light.svg',
dark: '/library/markdown-dark.svg'
light: "/library/markdown-light.svg",
dark: "/library/markdown-dark.svg",
},
url: 'https://www.markdownguide.org/'
url: "https://www.markdownguide.org/",
},
{
title: 'Radix UI',
category: 'Library',
title: "Radix UI",
category: "Library",
route: {
light: '/library/radix-ui_light.svg',
dark: '/library/radix-ui_dark.svg'
light: "/library/radix-ui_light.svg",
dark: "/library/radix-ui_dark.svg",
},
url: 'https://www.radix-ui.com/'
url: "https://www.radix-ui.com/",
},
{
title: 'Web.dev',
category: 'Education',
route: '/library/webdev.svg',
url: 'https://web.dev/'
title: "Web.dev",
category: "Education",
route: "/library/webdev.svg",
url: "https://web.dev/",
},
{
title: 'SWR',
category: 'Library',
title: "SWR",
category: "Library",
route: {
light: '/library/swr-light.svg',
dark: '/library/swr-dark.svg'
light: "/library/swr-light.svg",
dark: "/library/swr-dark.svg",
},
url: 'https://swr.vercel.app/'
url: "https://swr.vercel.app/",
},
{
title: 'Refine',
category: 'Framework',
title: "Refine",
category: "Framework",
route: {
light: '/library/refine_dark.svg',
dark: '/library/refine_light.svg'
light: "/library/refine_dark.svg",
dark: "/library/refine_light.svg",
},
url: 'https://refine.dev/'
url: "https://refine.dev/",
},
{
title: 'Youtube Music',
category: ['Google', 'Music'],
route: '/library/youtube_music.svg',
title: "Youtube Music",
category: ["Google", "Music"],
route: "/library/youtube_music.svg",
wordmark: {
light: '/library/youtube_music_wordmark_light.svg',
dark: '/library/youtube_music_wordmark_dark.svg'
light: "/library/youtube_music_wordmark_light.svg",
dark: "/library/youtube_music_wordmark_dark.svg",
},
url: 'https://music.youtube.com/'
url: "https://music.youtube.com/",
},
{
title: 'TIDAL',
category: 'Music',
title: "TIDAL",
category: "Music",
route: {
light: '/library/tidal_light.svg',
dark: '/library/tidal_dark.svg'
light: "/library/tidal_light.svg",
dark: "/library/tidal_dark.svg",
},
wordmark: {
light: '/library/tidal_wordmark_light.svg',
dark: '/library/tidal_wordmark_dark.svg'
light: "/library/tidal_wordmark_light.svg",
dark: "/library/tidal_wordmark_dark.svg",
},
url: 'https://tidal.com/'
url: "https://tidal.com/",
},
{
title: 'OBS',
category: 'Software',
route: '/library/obs.svg',
url: 'https://obsproject.com/'
title: "OBS",
category: "Software",
route: "/library/obs.svg",
url: "https://obsproject.com/",
},
{
title: 'Stack Overflow',
category: 'Software',
route: '/library/stackoverflow.svg',
wordmark: '/library/stackoverflow_wordmark.svg',
url: 'https://stackoverflow.com/',
brandUrl: 'https://stackoverflow.design/brand/'
title: "Stack Overflow",
category: "Software",
route: "/library/stackoverflow.svg",
wordmark: "/library/stackoverflow_wordmark.svg",
url: "https://stackoverflow.com/",
brandUrl: "https://stackoverflow.design/brand/",
},
{
title: 'TikTok',
category: 'Social',
route: '/library/tiktok.svg',
url: 'https://www.tiktok.com/'
title: "TikTok",
category: "Social",
route: "/library/tiktok.svg",
url: "https://www.tiktok.com/",
},
{
title: 'Ngrok',
category: 'Software',
title: "Ngrok",
category: "Software",
route: {
dark: '/library/ngrok-dark.svg',
light: '/library/ngrok-light.svg'
dark: "/library/ngrok-dark.svg",
light: "/library/ngrok-light.svg",
},
url: 'https://ngrok.com'
url: "https://ngrok.com",
},
{
title: 'Lemon Squeezy',
category: 'Software',
route: '/library/lemonsqueezy.svg',
url: 'https://www.lemonsqueezy.com'
title: "Lemon Squeezy",
category: "Software",
route: "/library/lemonsqueezy.svg",
url: "https://www.lemonsqueezy.com",
},
{
title: 'Asana',
category: 'Software',
route: '/library/asana-logo.svg',
title: "Asana",
category: "Software",
route: "/library/asana-logo.svg",
wordmark: {
dark: '/library/asana-wordmark-dark.svg',
light: '/library/asana-wordmark-light.svg'
dark: "/library/asana-wordmark-dark.svg",
light: "/library/asana-wordmark-light.svg",
},
url: 'https://asana.com'
url: "https://asana.com",
},
{
title: 'UpLeveled',
category: 'Education',
route: '/library/upleveled.svg',
wordmark: '/library/upleveled-wordmark.svg',
url: 'https://upleveled.io/'
title: "UpLeveled",
category: "Education",
route: "/library/upleveled.svg",
wordmark: "/library/upleveled-wordmark.svg",
url: "https://upleveled.io/",
},
{
title: 'Zoom',
category: 'Software',
route: '/library/zoom.svg',
url: 'https://zoom.us/'
title: "Zoom",
category: "Software",
route: "/library/zoom.svg",
url: "https://zoom.us/",
},
{
title: 'Tina',
category: 'CMS',
route: '/library/tina.svg',
wordmark: '/library/tina_wordmark.svg',
url: 'https://tina.io/'
title: "Tina",
category: "CMS",
route: "/library/tina.svg",
wordmark: "/library/tina_wordmark.svg",
url: "https://tina.io/",
},
{
title: 'Next.js',
category: ['Framework', 'Vercel'],
route: '/library/nextjs_icon_dark.svg',
title: "Next.js",
category: ["Framework", "Vercel"],
route: "/library/nextjs_icon_dark.svg",
wordmark: {
light: '/library/nextjs_logo_light.svg',
dark: '/library/nextjs_logo_dark.svg'
light: "/library/nextjs_logo_light.svg",
dark: "/library/nextjs_logo_dark.svg",
},
url: 'https://nextjs.org/'
url: "https://nextjs.org/",
},
{
title: 'Mistral AI',
category: 'AI',
route: '/library/mistral-ai_logo.svg',
wordmark: '/library/mistral-ai_wordmark.svg',
url: 'https://mistral.ai/'
title: "Mistral AI",
category: "AI",
route: "/library/mistral-ai_logo.svg",
wordmark: "/library/mistral-ai_wordmark.svg",
url: "https://mistral.ai/",
},
{
title: 'Hugging Face',
category: 'AI',
route: '/library/hugging_face.svg',
url: 'https://huggingface.co/',
brandUrl: 'https://huggingface.co/brand'
title: "Hugging Face",
category: "AI",
route: "/library/hugging_face.svg",
url: "https://huggingface.co/",
brandUrl: "https://huggingface.co/brand",
},
{
title: 'Node.js',
category: 'Library',
route: '/library/nodejs.svg',
url: 'https://nodejs.org/',
brandUrl: 'https://nodejs.org/en/about/branding'
title: "Node.js",
category: "Library",
route: "/library/nodejs.svg",
url: "https://nodejs.org/",
brandUrl: "https://nodejs.org/en/about/branding",
},
{
title: 'Raindrop.io',
category: 'Software',
route: '/library/raindrop.svg',
url: 'https://raindrop.io/'
title: "Raindrop.io",
category: "Software",
route: "/library/raindrop.svg",
url: "https://raindrop.io/",
},
{
title: 'Microsoft Todo',
category: 'Software',
route: '/library/microsoft-todo.svg',
url: 'https://to-do.office.com/'
title: "Microsoft Todo",
category: "Software",
route: "/library/microsoft-todo.svg",
url: "https://to-do.office.com/",
},
{
title: 'Manifest',
category: ['Software', 'AI', 'Database'],
route: '/library/manifest.svg',
url: 'https://manifest.build',
brandUrl: 'https://manifest.build/brand-assets'
title: "Manifest",
category: ["Software", "AI", "Database"],
route: "/library/manifest.svg",
url: "https://manifest.build",
brandUrl: "https://manifest.build/brand-assets",
},
{
title: 'Supabase',
category: 'Database',
route: '/library/supabase.svg',
url: 'https://supabase.com/',
title: "Supabase",
category: "Database",
route: "/library/supabase.svg",
url: "https://supabase.com/",
wordmark: {
light: '/library/supabase_wordmark_light.svg',
dark: '/library/supabase_wordmark_dark.svg'
light: "/library/supabase_wordmark_light.svg",
dark: "/library/supabase_wordmark_dark.svg",
},
brandUrl: 'https://supabase.com/brand-assets'
brandUrl: "https://supabase.com/brand-assets",
},
{
title: 'Gleam',
category: 'Language',
route: '/library/gleam.svg',
url: 'https://gleam.run/'
title: "Gleam",
category: "Language",
route: "/library/gleam.svg",
url: "https://gleam.run/",
},
{
title: 'Flowbite',
category: 'Framework',
route: '/library/flowbite.svg',
url: 'https://flowbite.com/'
title: "Flowbite",
category: "Framework",
route: "/library/flowbite.svg",
url: "https://flowbite.com/",
},
{
title: 'Hume AI',
category: 'AI',
route: '/library/hume-ai.svg',
url: 'https://hume.ai/'
title: "Hume AI",
category: "AI",
route: "/library/hume-ai.svg",
url: "https://hume.ai/",
},
{
title: 'Resend',
category: 'Software',
url: 'https://resend.com/',
title: "Resend",
category: "Software",
url: "https://resend.com/",
route: {
light: '/library/resend-icon-black.svg',
dark: '/library/resend-icon-white.svg'
light: "/library/resend-icon-black.svg",
dark: "/library/resend-icon-white.svg",
},
wordmark: {
light: '/library/resend-wordmark-black.svg',
dark: '/library/resend-wordmark-white.svg'
light: "/library/resend-wordmark-black.svg",
dark: "/library/resend-wordmark-white.svg",
},
brandUrl: 'https://resend.com/brand'
brandUrl: "https://resend.com/brand",
},
{
title: 'Layers',
category: 'Design',
title: "Layers",
category: "Design",
route: {
light: '/library/layers_light.svg',
dark: '/library/layers_dark.svg'
light: "/library/layers_light.svg",
dark: "/library/layers_dark.svg",
},
url: 'https://layers.to/'
url: "https://layers.to/",
},
{
title: 'Exome',
category: 'Library',
route: '/library/exome.svg',
url: 'https://exome.dev/'
title: "Exome",
category: "Library",
route: "/library/exome.svg",
url: "https://exome.dev/",
},
{
title: 'Poper',
category: 'AI',
route: '/library/poper.svg',
url: 'https://www.poper.ai'
title: "Poper",
category: "AI",
route: "/library/poper.svg",
url: "https://www.poper.ai",
},
{
title: 'Dub',
category: 'Software',
title: "Dub",
category: "Software",
route: {
light: '/library/dub.svg',
dark: '/library/dub_dark_logo.svg'
light: "/library/dub.svg",
dark: "/library/dub_dark_logo.svg",
},
wordmark: {
light: '/library/dub_light_wordmark.svg',
dark: '/library/dub_dark_wordmark.svg'
light: "/library/dub_light_wordmark.svg",
dark: "/library/dub_dark_wordmark.svg",
},
url: 'https://dub.co',
brandUrl: 'https://dub.co/brand'
url: "https://dub.co",
brandUrl: "https://dub.co/brand",
},
{
title: 'Turso',
category: ['Database', 'Software'],
title: "Turso",
category: ["Database", "Software"],
route: {
light: '/library/turso-light.svg',
dark: '/library/turso-dark.svg'
light: "/library/turso-light.svg",
dark: "/library/turso-dark.svg",
},
wordmark: {
light: '/library/turso-wordmark-light.svg',
dark: '/library/turso-wordmark-dark.svg'
light: "/library/turso-wordmark-light.svg",
dark: "/library/turso-wordmark-dark.svg",
},
url: 'https://turso.tech'
url: "https://turso.tech",
},
{
title: 'RelaGit',
category: 'Software',
title: "RelaGit",
category: "Software",
route: {
light: '/library/relagit-icon-light.svg',
dark: '/library/relagit-icon-dark.svg'
light: "/library/relagit-icon-light.svg",
dark: "/library/relagit-icon-dark.svg",
},
wordmark: {
light: '/library/relagit-wordmark-light.svg',
dark: '/library/relagit-wordmark-dark.svg'
light: "/library/relagit-wordmark-light.svg",
dark: "/library/relagit-wordmark-dark.svg",
},
url: 'https://rela.dev'
url: "https://rela.dev",
},
{
title: 'T3 Stack',
category: 'Framework',
title: "T3 Stack",
category: "Framework",
route: {
light: '/library/t3-dark.svg',
dark: '/library/t3-light.svg'
light: "/library/t3-dark.svg",
dark: "/library/t3-light.svg",
},
url: 'https://create.t3.gg/'
url: "https://create.t3.gg/",
},
{
title: 'Apple Music',
category: 'Music',
route: '/library/apple-music-icon.svg',
title: "Apple Music",
category: "Music",
route: "/library/apple-music-icon.svg",
wordmark: {
light: '/library/apple-music-wordmark-light.svg',
dark: '/library/apple-music-wordmark-dark.svg'
light: "/library/apple-music-wordmark-light.svg",
dark: "/library/apple-music-wordmark-dark.svg",
},
url: 'https://music.apple.com/'
url: "https://music.apple.com/",
},
{
title: 'YGeeker',
category: 'Software',
route: '/library/ygeeker.svg',
url: 'https://www.ygeeker.com'
title: "YGeeker",
category: "Software",
route: "/library/ygeeker.svg",
url: "https://www.ygeeker.com",
},
{
title: 'PostCSS',
category: 'Compiler',
route: '/library/postcss.svg',
wordmark: '/library/postcss_wordmark.svg',
url: 'https://postcss.org/'
title: "PostCSS",
category: "Compiler",
route: "/library/postcss.svg",
wordmark: "/library/postcss_wordmark.svg",
url: "https://postcss.org/",
},
{
title: 'SVG',
category: ['Language', 'Design'],
route: '/library/svg.svg',
wordmark: '/library/svg_wordmark.svg',
url: 'https://www.w3.org/TR/SVG/'
title: "SVG",
category: ["Language", "Design"],
route: "/library/svg.svg",
wordmark: "/library/svg_wordmark.svg",
url: "https://www.w3.org/TR/SVG/",
},
{
title: 'Todoist',
category: 'Software',
route: '/library/todoist.svg',
wordmark: '/library/todoist-wordmark.svg',
url: 'https://todoist.com/'
title: "Todoist",
category: "Software",
route: "/library/todoist.svg",
wordmark: "/library/todoist-wordmark.svg",
url: "https://todoist.com/",
},
{
title: 'Apidog',
category: 'Software',
route: '/library/apidog.svg',
url: 'https://apidog.com/'
title: "Apidog",
category: "Software",
route: "/library/apidog.svg",
url: "https://apidog.com/",
},
{
title: 'Chart.js',
category: 'Library',
route: '/library/chartjs.svg',
url: 'https://www.chartjs.org/'
title: "Chart.js",
category: "Library",
route: "/library/chartjs.svg",
url: "https://www.chartjs.org/",
},
{
title: 'JSON Schema',
category: 'Library',
route: '/library/json-schema.svg',
url: 'https://json-schema.org/'
title: "JSON Schema",
category: "Library",
route: "/library/json-schema.svg",
url: "https://json-schema.org/",
},
{
title: 'v0',
category: 'Vercel',
title: "v0",
category: "Vercel",
route: {
light: '/library/v0_light.svg',
dark: '/library/v0_dark.svg'
light: "/library/v0_light.svg",
dark: "/library/v0_dark.svg",
},
url: 'https://v0.dev/'
url: "https://v0.dev/",
},
{
title: 'Bento',
category: 'Software',
route: '/library/bento.svg',
url: 'https://bento.me/home'
title: "Bento",
category: "Software",
route: "/library/bento.svg",
url: "https://bento.me/home",
},
{
title: 'Firebase',
category: ['Hosting', 'Google'],
route: '/library/firebase.svg',
wordmark: '/library/firebase-wordmark.svg',
url: 'https://firebase.google.com/'
title: "Firebase",
category: ["Hosting", "Google"],
route: "/library/firebase.svg",
wordmark: "/library/firebase-wordmark.svg",
url: "https://firebase.google.com/",
},
{
title: 'Prettier',
category: 'Library',
title: "Prettier",
category: "Library",
route: {
light: '/library/prettier-icon-light.svg',
dark: '/library/prettier-icon-dark.svg'
light: "/library/prettier-icon-light.svg",
dark: "/library/prettier-icon-dark.svg",
},
url: 'https://prettier.io/'
url: "https://prettier.io/",
},
{
title: 'Leap Wallet',
category: ['Crypto', 'Software', 'Payment'],
route: '/library/leap-wallet.svg',
title: "Leap Wallet",
category: ["Crypto", "Software", "Payment"],
route: "/library/leap-wallet.svg",
wordmark: {
light: '/library/leap-wallet-wordmark-light.svg',
dark: '/library/leap-wallet-wordmark-dark.svg'
light: "/library/leap-wallet-wordmark-light.svg",
dark: "/library/leap-wallet-wordmark-dark.svg",
},
url: 'https://leapwallet.io/'
url: "https://leapwallet.io/",
},
{
title: 'Nx',
category: ['Devtool', 'Monorepo'],
title: "Nx",
category: ["Devtool", "Monorepo"],
route: {
light: '/library/nx_light.svg',
dark: '/library/nx_dark.svg'
light: "/library/nx_light.svg",
dark: "/library/nx_dark.svg",
},
url: 'https://nx.dev'
url: "https://nx.dev",
},
{
title: 'Google Colaboratory',
category: ['Google', 'Software'],
route: '/library/Google_Colaboratory.svg',
url: 'https://colab.research.google.com/'
title: "Google Colaboratory",
category: ["Google", "Software"],
route: "/library/Google_Colaboratory.svg",
url: "https://colab.research.google.com/",
},
{
title: 'Raspberry PI',
category: ['Hardware', 'Software'],
route: '/library/raspberry_pi.svg',
url: 'https://www.raspberrypi.com/'
title: "Raspberry PI",
category: ["Hardware", "Software"],
route: "/library/raspberry_pi.svg",
url: "https://www.raspberrypi.com/",
},
{
title: 'Vite',
category: ['Devtool', 'VoidZero'],
route: '/library/vitejs.svg',
url: 'https://vitejs.dev'
title: "Vite",
category: ["Devtool", "VoidZero"],
route: "/library/vitejs.svg",
url: "https://vitejs.dev",
},
{
title: 'Vitest',
category: ['Framework', 'VoidZero'],
route: '/library/vitest.svg',
url: 'https://vitest.dev/'
title: "Vitest",
category: ["Framework", "VoidZero"],
route: "/library/vitest.svg",
url: "https://vitest.dev/",
},
{
title: 'Oxc',
category: ['Devtool', 'VoidZero'],
route: '/library/oxc.svg',
url: 'https://oxc.rs/'
title: "Oxc",
category: ["Devtool", "VoidZero"],
route: "/library/oxc.svg",
url: "https://oxc.rs/",
},
{
title: 'Rolldown',
category: ['Compiler', 'VoidZero'],
route: '/library/rolldown.svg',
url: 'https://rolldown.rs/'
title: "Rolldown",
category: ["Compiler", "VoidZero"],
route: "/library/rolldown.svg",
url: "https://rolldown.rs/",
},
{
title: 'ManzDev',
category: ['Community'],
route: '/library/manzdev.svg',
url: 'https://manz.dev/'
title: "ManzDev",
category: ["Community"],
route: "/library/manzdev.svg",
url: "https://manz.dev/",
},
{
title: 'Afordin',
category: ['Community'],
title: "Afordin",
category: ["Community"],
route: {
light: '/library/afordin-light.svg',
dark: '/library/afordin-dark.svg'
light: "/library/afordin-light.svg",
dark: "/library/afordin-dark.svg",
},
url: 'https://github.com/Afordin'
url: "https://github.com/Afordin",
},
{
title: 'MediaWiki',
category: ['Software', 'CMS'],
route: '/library/mediawiki.svg',
title: "MediaWiki",
category: ["Software", "CMS"],
route: "/library/mediawiki.svg",
wordmark: {
light: '/library/mediawiki-wordmark-light.svg',
dark: '/library/mediawiki-wordmark-dark.svg'
light: "/library/mediawiki-wordmark-light.svg",
dark: "/library/mediawiki-wordmark-dark.svg",
},
url: 'https://www.mediawiki.org/'
url: "https://www.mediawiki.org/",
},
{
title: 'Carrd',
category: ['Social'],
route: '/library/carrd.svg',
url: 'https://carrd.co/'
title: "Carrd",
category: ["Social"],
route: "/library/carrd.svg",
url: "https://carrd.co/",
},
{
title: 'Claude AI',
category: 'AI',
route: '/library/claude-ai-icon.svg',
title: "Claude AI",
category: "AI",
route: "/library/claude-ai-icon.svg",
wordmark: {
light: '/library/claude-ai-wordmark-icon_light.svg',
dark: '/library/claude-ai-wordmark-icon_dark.svg'
light: "/library/claude-ai-wordmark-icon_light.svg",
dark: "/library/claude-ai-wordmark-icon_dark.svg",
},
url: 'https://claude.ai/'
url: "https://claude.ai/",
},
{
title: 'UnoCSS',
category: 'Devtool',
route: '/library/unocss.svg',
url: 'https://unocss.dev/'
title: "UnoCSS",
category: "Devtool",
route: "/library/unocss.svg",
url: "https://unocss.dev/",
},
{
title: 'tRPC',
category: 'Framework',
route: '/library/trpc.svg',
title: "tRPC",
category: "Framework",
route: "/library/trpc.svg",
wordmark: {
light: '/library/trpc_wordmark_light.svg',
dark: 'library/trpc_wordmark_dark.svg'
light: "/library/trpc_wordmark_light.svg",
dark: "library/trpc_wordmark_dark.svg",
},
url: 'https://trpc.io/'
url: "https://trpc.io/",
},
{
title: 'Bluesky',
category: 'Social',
route: '/library/bluesky.svg',
url: 'https://blueskyweb.xyz/'
title: "Bluesky",
category: "Social",
route: "/library/bluesky.svg",
url: "https://blueskyweb.xyz/",
},
{
title: 'Drizzle ORM',
category: ['Library', 'Database'],
title: "Drizzle ORM",
category: ["Library", "Database"],
route: {
light: '/library/drizzle-orm_light.svg',
dark: '/library/drizzle-orm_dark.svg'
light: "/library/drizzle-orm_light.svg",
dark: "/library/drizzle-orm_dark.svg",
},
url: 'https://orm.drizzle.team/'
url: "https://orm.drizzle.team/",
},
{
title: 'daily.dev',
category: ['Social', 'Community'],
title: "daily.dev",
category: ["Social", "Community"],
route: {
light: '/library/daily-dev-ligth.svg',
dark: '/library/daily-dev-dark.svg'
light: "/library/daily-dev-ligth.svg",
dark: "/library/daily-dev-dark.svg",
},
url: 'https://daily.dev/'
url: "https://daily.dev/",
},
{
title: 'Polars',
category: 'Library',
route: '/library/polars-logo.svg',
url: 'https://pola.rs/'
title: "Polars",
category: "Library",
route: "/library/polars-logo.svg",
url: "https://pola.rs/",
},
{
title: 'Zed',
category: 'Software',
title: "Zed",
category: "Software",
route: {
light: '/library/zed-logo.svg',
dark: '/library/zed-logo_dark.svg'
light: "/library/zed-logo.svg",
dark: "/library/zed-logo_dark.svg",
},
url: 'https://zed.dev/'
url: "https://zed.dev/",
},
{
title: 'Polar',
category: ['Software', 'Payment'],
title: "Polar",
category: ["Software", "Payment"],
route: {
light: '/library/polar-sh_light.svg',
dark: '/library/polar-sh_dark.svg'
light: "/library/polar-sh_light.svg",
dark: "/library/polar-sh_dark.svg",
},
url: 'https://polar.sh/'
url: "https://polar.sh/",
},
{
title: 'bolt',
category: 'Devtool',
title: "bolt",
category: "Devtool",
route: {
light: '/library/bolt-new.svg',
dark: '/library/bolt-new_dark.svg'
light: "/library/bolt-new.svg",
dark: "/library/bolt-new_dark.svg",
},
url: 'https://bolt.new/'
url: "https://bolt.new/",
},
{
title: 'JSON',
category: 'Language',
route: '/library/json.svg',
url: 'https://json.org/'
title: "JSON",
category: "Language",
route: "/library/json.svg",
url: "https://json.org/",
},
{
title: 'nuqs',
category: 'Library',
title: "nuqs",
category: "Library",
route: {
light: '/library/nuqs.svg',
dark: '/library/nuqs_dark.svg'
light: "/library/nuqs.svg",
dark: "/library/nuqs_dark.svg",
},
wordmark: {
light: '/library/nuqs-wordmark.svg',
dark: '/library/nuqs-wordmark_dark.svg'
light: "/library/nuqs-wordmark.svg",
dark: "/library/nuqs-wordmark_dark.svg",
},
url: 'https://nuqs.47ng.com/'
url: "https://nuqs.47ng.com/",
},
{
title: 'SoundCloud',
category: 'Music',
title: "SoundCloud",
category: "Music",
route: {
light: '/library/soundcloud-logo.svg',
dark: '/library/soundcloud-logo_dark.svg'
light: "/library/soundcloud-logo.svg",
dark: "/library/soundcloud-logo_dark.svg",
},
wordmark: {
light: '/library/soundcloud-wordmark.svg',
dark: 'library/soundcloud-wordmark_dark.svg'
light: "/library/soundcloud-wordmark.svg",
dark: "library/soundcloud-wordmark_dark.svg",
},
url: 'https://soundcloud.com/'
url: "https://soundcloud.com/",
},
{
title: 'Mermaid',
category: ['Library'],
title: "Mermaid",
category: ["Library"],
route: {
light: '/library/mermaid-logo-light.svg',
dark: '/library/mermaid-logo-dark.svg'
light: "/library/mermaid-logo-light.svg",
dark: "/library/mermaid-logo-dark.svg",
},
url: 'https://mermaid.js.org/'
url: "https://mermaid.js.org/",
},
{
title: 'Home Assistant',
category: ['IoT', 'Software'],
route: '/library/home-assistant.svg',
title: "Home Assistant",
category: ["IoT", "Software"],
route: "/library/home-assistant.svg",
wordmark: {
light: '/library/home-assistant-wordmark.svg',
dark: '/library/home-assistant-wordmark-dark.svg'
light: "/library/home-assistant-wordmark.svg",
dark: "/library/home-assistant-wordmark-dark.svg",
},
url: 'https://github.com/home-assistant/assets/tree/master/logo'
url: "https://github.com/home-assistant/assets/tree/master/logo",
},
{
title: 'UXAnaRangel',
category: ['Community'],
title: "UXAnaRangel",
category: ["Community"],
route: {
light: '/library/uxanarangel-light.svg',
dark: '/library/uxanarangel-dark.svg'
light: "/library/uxanarangel-light.svg",
dark: "/library/uxanarangel-dark.svg",
},
url: 'https://uxanarangel.com/'
url: "https://uxanarangel.com/",
},
{
title: 'UXCorpRangel',
category: ['Community'],
title: "UXCorpRangel",
category: ["Community"],
route: {
light: '/library/uxcorprangel-light.svg',
dark: '/library/uxcorprangel-dark.svg'
light: "/library/uxcorprangel-light.svg",
dark: "/library/uxcorprangel-dark.svg",
},
url: 'https://github.com/UXCorpRangel/'
url: "https://github.com/UXCorpRangel/",
},
{
title: 'PostHog',
category: 'Devtool',
route: '/library/posthog.svg',
title: "PostHog",
category: "Devtool",
route: "/library/posthog.svg",
wordmark: {
light: '/library/posthog-wordmark.svg',
dark: '/library/posthog-wordmark_dark.svg'
light: "/library/posthog-wordmark.svg",
dark: "/library/posthog-wordmark_dark.svg",
},
url: 'https://posthog.com/',
brandUrl: 'https://posthog.com/handbook/company/brand-assets'
url: "https://posthog.com/",
brandUrl: "https://posthog.com/handbook/company/brand-assets",
},
{
title: 'PowerToys',
category: 'Software',
route: '/library/powertoys.svg',
url: 'https://learn.microsoft.com/en-us/windows/powertoys/'
title: "PowerToys",
category: "Software",
route: "/library/powertoys.svg",
url: "https://learn.microsoft.com/en-us/windows/powertoys/",
},
{
title: 'PowerShell',
category: 'Language',
route: '/library/powershell.svg',
url: 'https://learn.microsoft.com/en-us/powershell/'
title: "PowerShell",
category: "Language",
route: "/library/powershell.svg",
url: "https://learn.microsoft.com/en-us/powershell/",
},
{
title: 'Lottielab',
category: 'Design',
route: '/library/lottielab.svg',
url: 'https://www.lottielab.com/'
title: "Lottielab",
category: "Design",
route: "/library/lottielab.svg",
url: "https://www.lottielab.com/",
},
{
title: 'TanStack',
category: ['Software', 'Library'],
route: '/library/tanstack.svg',
url: 'https://tanstack.com/'
title: "TanStack",
category: ["Software", "Library"],
route: "/library/tanstack.svg",
url: "https://tanstack.com/",
},
{
title: 'TypeGPU',
category: ['Software', 'Library'],
title: "TypeGPU",
category: ["Software", "Library"],
route: {
light: '/library/typegpu-light.svg',
dark: '/library/typegpu-dark.svg'
light: "/library/typegpu-light.svg",
dark: "/library/typegpu-dark.svg",
},
wordmark: {
light: '/library/typegpu-wordmark-light.svg',
dark: '/library/typegpu-wordmark-dark.svg'
light: "/library/typegpu-wordmark-light.svg",
dark: "/library/typegpu-wordmark-dark.svg",
},
url: 'https://typegpu.com'
url: "https://typegpu.com",
},
{
title: 'dotenv',
category: ['Config', 'Library', 'Devtool'],
route: '/library/dotenv.svg',
url: 'https://github.com/motdotla/dotenv'
title: "dotenv",
category: ["Config", "Library", "Devtool"],
route: "/library/dotenv.svg",
url: "https://github.com/motdotla/dotenv",
},
{
title: 'dotenvx',
category: ['Secrets', 'Config', 'Devtool'],
route: '/library/dotenvx.svg',
url: 'https://dotenvx.com'
title: "dotenvx",
category: ["Secrets", "Config", "Devtool"],
route: "/library/dotenvx.svg",
url: "https://dotenvx.com",
},
{
title: 'Motion',
category: 'Library',
title: "Motion",
category: "Library",
route: {
light: '/library/motion.svg',
dark: '/library/motion_dark.svg'
light: "/library/motion.svg",
dark: "/library/motion_dark.svg",
},
url: 'https://motion.dev/'
url: "https://motion.dev/",
},
{
title: 'Keycloak',
category: 'Authentication',
route: '/library/keycloak.svg',
url: 'https://keycloak.org'
title: "Keycloak",
category: "Authentication",
route: "/library/keycloak.svg",
url: "https://keycloak.org",
},
{
title: 'DeepSeek',
category: 'AI',
route: '/library/deepseek.svg',
wordmark: '/library/deepseek_wordmark.svg',
url: 'https://deepseek.com/'
title: "DeepSeek",
category: "AI",
route: "/library/deepseek.svg",
wordmark: "/library/deepseek_wordmark.svg",
url: "https://deepseek.com/",
},
{
title: 'Shiki',
category: 'Library',
route: '/library/shiki.svg',
url: 'https://shiki.style/'
title: "Shiki",
category: "Library",
route: "/library/shiki.svg",
url: "https://shiki.style/",
},
{
title: 'Dropbox',
category: ['Hosting', 'Software'],
route: '/library/dropbox.svg',
title: "Dropbox",
category: ["Hosting", "Software"],
route: "/library/dropbox.svg",
wordmark: {
light: '/library/dropbox_wordmark.svg',
dark: '/library/dropbox_wordmark_dark.svg'
light: "/library/dropbox_wordmark.svg",
dark: "/library/dropbox_wordmark_dark.svg",
},
url: 'https://www.dropbox.com/',
brandUrl: 'https://brand.dropbox.com/'
url: "https://www.dropbox.com/",
brandUrl: "https://brand.dropbox.com/",
},
{
title: 'Open WebUI',
category: ['AI', 'Software'],
route: '/library/openwebui.svg',
url: 'https://openwebui.com/'
title: "Open WebUI",
category: ["AI", "Software"],
route: "/library/openwebui.svg",
url: "https://openwebui.com/",
},
{
title: 'Base UI',
category: 'Library',
title: "Base UI",
category: "Library",
route: {
light: '/library/base-ui.svg',
dark: '/library/base-ui-dark.svg'
light: "/library/base-ui.svg",
dark: "/library/base-ui-dark.svg",
},
url: 'https://base-ui.com/'
url: "https://base-ui.com/",
},
{
title: 'Vercel',
category: ['Hosting', 'Vercel'],
title: "Vercel",
category: ["Hosting", "Vercel"],
route: {
light: '/library/vercel.svg',
dark: '/library/vercel_dark.svg'
light: "/library/vercel.svg",
dark: "/library/vercel_dark.svg",
},
wordmark: {
light: '/library/vercel_wordmark.svg',
dark: '/library/vercel_wordmark_dark.svg'
light: "/library/vercel_wordmark.svg",
dark: "/library/vercel_wordmark_dark.svg",
},
brandUrl: 'https://vercel.com/geist/brands',
url: 'https://vercel.com/'
brandUrl: "https://vercel.com/geist/brands",
url: "https://vercel.com/",
},
{
title: 'Model Context Protocol',
category: ['AI', 'Framework'],
title: "Model Context Protocol",
category: ["AI", "Framework"],
route: {
light: '/library/model-context-protocol-light.svg',
dark: '/library/model-context-protocol-dark.svg'
light: "/library/model-context-protocol-light.svg",
dark: "/library/model-context-protocol-dark.svg",
},
wordmark: {
light: '/library/model-context-protocol-wordmark-light.svg',
dark: '/library/model-context-protocol-wordmark-dark.svg'
light: "/library/model-context-protocol-wordmark-light.svg",
dark: "/library/model-context-protocol-wordmark-dark.svg",
},
url: 'https://modelcontextprotocol.io/'
url: "https://modelcontextprotocol.io/",
},
{
title: 'Socket.io',
category: 'Software',
title: "Socket.io",
category: "Software",
route: {
dark: '/library/socketio-dark.svg',
light: '/library/socketio-light.svg'
dark: "/library/socketio-dark.svg",
light: "/library/socketio-light.svg",
},
url: 'https://socket.io/'
url: "https://socket.io/",
},
{
title: 'Ant Design',
category: 'Library',
route: '/library/ant-design-dark-theme.svg',
url: 'https://ant.design/'
title: "Ant Design",
category: "Library",
route: "/library/ant-design-dark-theme.svg",
url: "https://ant.design/",
},
{
title: 'VSCodium',
category: 'Software',
route: '/library/vscodium.svg',
url: 'https://vscodium.com/'
title: "VSCodium",
category: "Software",
route: "/library/vscodium.svg",
url: "https://vscodium.com/",
},
{
title: 'Zen Browser',
category: 'Browser',
title: "Zen Browser",
category: "Browser",
route: {
light: '/library/zen-browser-light.svg',
dark: '/library/zen-browser-dark.svg'
light: "/library/zen-browser-light.svg",
dark: "/library/zen-browser-dark.svg",
},
wordmark: {
light: '/library/zen-browser-wordmark-light.svg',
dark: '/library/zen-browser-wordmark-dark.svg'
light: "/library/zen-browser-wordmark-light.svg",
dark: "/library/zen-browser-wordmark-dark.svg",
},
url: 'https://zen-browser.app/'
url: "https://zen-browser.app/",
},
{
title: 'Gemini',
category: ['Google', 'AI'],
route: '/library/gemini.svg',
wordmark: '/library/gemini_wordmark.svg',
url: 'https://gemini.google.com/'
title: "Gemini",
category: ["Google", "AI"],
route: "/library/gemini.svg",
wordmark: "/library/gemini_wordmark.svg",
url: "https://gemini.google.com/",
},
{
title: 'xAI (Grok)',
category: ['AI'],
title: "xAI (Grok)",
category: ["AI"],
route: {
light: '/library/xai_light.svg',
dark: '/library/xai_dark.svg'
light: "/library/xai_light.svg",
dark: "/library/xai_dark.svg",
},
url: 'https://grok.com/'
url: "https://grok.com/",
},
{
title: 'Qwen',
category: ['AI'],
title: "Qwen",
category: ["AI"],
route: {
light: '/library/qwen_light.svg',
dark: '/library/qwen_dark.svg'
light: "/library/qwen_light.svg",
dark: "/library/qwen_dark.svg",
},
url: 'https://chat.qwenlm.ai/'
url: "https://chat.qwenlm.ai/",
},
{
title: 'Inflection AI',
category: 'AI',
title: "Inflection AI",
category: "AI",
route: {
light: '/library/inflectionai_light.svg',
dark: '/library/inflectionai_dark.svg'
light: "/library/inflectionai_light.svg",
dark: "/library/inflectionai_dark.svg",
},
wordmark: {
light: '/library/inflectionai_wordmark_light.svg',
dark: '/library/inflectionai_wordmark_dark.svg'
light: "/library/inflectionai_wordmark_light.svg",
dark: "/library/inflectionai_wordmark_dark.svg",
},
url: 'https://inflection.ai/'
url: "https://inflection.ai/",
},
{
title: 'D3.js',
category: 'Library',
route: '/library/D3.svg',
url: 'https://d3js.org/'
title: "D3.js",
category: "Library",
route: "/library/D3.svg",
url: "https://d3js.org/",
},
{
title: 'Anthropic',
category: 'AI',
title: "Anthropic",
category: "AI",
route: {
light: '/library/anthropic_black.svg',
dark: '/library/anthropic_white.svg'
light: "/library/anthropic_black.svg",
dark: "/library/anthropic_white.svg",
},
wordmark: {
light: '/library/anthropic_black_wordmark.svg',
dark: '/library/anthropic_white_wordmark.svg'
light: "/library/anthropic_black_wordmark.svg",
dark: "/library/anthropic_white_wordmark.svg",
},
url: 'https://www.anthropic.com/'
url: "https://www.anthropic.com/",
},
{
title: 'Replit',
category: 'AI',
route: '/library/replit.svg',
title: "Replit",
category: "AI",
route: "/library/replit.svg",
wordmark: {
light: '/library/replit-wordmark-light.svg',
dark: '/library/replit-wordmark-dark.svg'
light: "/library/replit-wordmark-light.svg",
dark: "/library/replit-wordmark-dark.svg",
},
url: 'https://replit.com/',
brandUrl: 'https://replit.com/brandkit'
url: "https://replit.com/",
brandUrl: "https://replit.com/brandkit",
},
{
title: 'Magic UI',
category: 'Library',
route: '/library/magicui.svg',
url: 'https://magicui.design/'
title: "Magic UI",
category: "Library",
route: "/library/magicui.svg",
url: "https://magicui.design/",
},
{
title: 'Web Components',
category: 'Library',
route: '/library/webcomponents.svg',
url: 'https://www.webcomponents.org/'
title: "Web Components",
category: "Library",
route: "/library/webcomponents.svg",
url: "https://www.webcomponents.org/",
},
{
title: 'Designali',
category: ['Software', 'Design'],
route: '/library/designali.svg',
url: 'https://designali.in'
title: "Designali",
category: ["Software", "Design"],
route: "/library/designali.svg",
url: "https://designali.in",
},
{
title: 'CurseForge',
category: ['Marketplace', 'Community'],
title: "CurseForge",
category: ["Marketplace", "Community"],
route: {
light: '/library/curseforge.svg',
dark: '/library/curseforge-dark.svg'
light: "/library/curseforge.svg",
dark: "/library/curseforge-dark.svg",
},
wordmark: {
light: '/library/curseforge-wordmark.svg',
dark: '/library/curseforge-wordmark-dark.svg'
light: "/library/curseforge-wordmark.svg",
dark: "/library/curseforge-wordmark-dark.svg",
},
url: 'https://curseforge.com/',
url: "https://curseforge.com/",
brandUrl:
'https://www.figma.com/file/YYn36CxVpcT6aPKDXIH9JG/CurseForge-Brandbook?type=design&node-id=0-1&t=dvC0gPtyP36PQdsi-0'
"https://www.figma.com/file/YYn36CxVpcT6aPKDXIH9JG/CurseForge-Brandbook?type=design&node-id=0-1&t=dvC0gPtyP36PQdsi-0",
},
{
title: 'Cursor',
category: ['Software'],
title: "Cursor",
category: ["Software"],
route: {
light: '/library/cursor_light.svg',
dark: '/library/cursor_dark.svg'
light: "/library/cursor_light.svg",
dark: "/library/cursor_dark.svg",
},
wordmark: {
light: '/library/cursor_wordmark_light.svg',
dark: '/library/cursor_wordmark_dark.svg'
light: "/library/cursor_wordmark_light.svg",
dark: "/library/cursor_wordmark_dark.svg",
},
url: 'https://www.cursor.com'
url: "https://www.cursor.com",
},
{
title: 'Ghostty',
category: ['Software'],
route: '/library/ghostty.svg',
title: "Ghostty",
category: ["Software"],
route: "/library/ghostty.svg",
wordmark: {
dark: '/library/ghostty_wordmark_dark.svg',
light: '/library/ghostty_wordmark_light.svg'
dark: "/library/ghostty_wordmark_dark.svg",
light: "/library/ghostty_wordmark_light.svg",
},
url: 'https://ghostty.org/'
url: "https://ghostty.org/",
},
{
title: 'Better Auth',
category: ['Authentication', 'Library'],
title: "Better Auth",
category: ["Authentication", "Library"],
route: {
light: '/library/better-auth_light.svg',
dark: '/library/better-auth_dark.svg'
light: "/library/better-auth_light.svg",
dark: "/library/better-auth_dark.svg",
},
wordmark: {
dark: '/library/better-auth_wordmark_dark.svg',
light: '/library/better-auth_wordmark_light.svg'
dark: "/library/better-auth_wordmark_dark.svg",
light: "/library/better-auth_wordmark_light.svg",
},
url: 'https://www.better-auth.com/'
url: "https://www.better-auth.com/",
},
{
title: 'Buy Me a Coffee',
category: ['Software'],
route: '/library/bmc.svg',
brandUrl: 'https://buymeacoffee.com/brand',
url: 'https://buymeacoffee.com/'
title: "Buy Me a Coffee",
category: ["Software"],
route: "/library/bmc.svg",
brandUrl: "https://buymeacoffee.com/brand",
url: "https://buymeacoffee.com/",
},
{
title: 'GitHub',
category: 'Software',
title: "GitHub",
category: "Software",
route: {
light: '/library/github_light.svg',
dark: '/library/github_dark.svg'
light: "/library/github_light.svg",
dark: "/library/github_dark.svg",
},
wordmark: {
light: '/library/github_wordmark_light.svg',
dark: '/library/github_wordmark_dark.svg'
light: "/library/github_wordmark_light.svg",
dark: "/library/github_wordmark_dark.svg",
},
url: 'https://github.com/',
brandUrl: 'https://brand.github.com/'
url: "https://github.com/",
brandUrl: "https://brand.github.com/",
},
{
title: 'Firebase Studio',
category: ['AI', 'Google'],
route: '/library/firebase-studio.svg',
url: 'https://firebase.studio/'
title: "Firebase Studio",
category: ["AI", "Google"],
route: "/library/firebase-studio.svg",
url: "https://firebase.studio/",
},
{
title: 'HeroUI',
category: 'Library',
title: "HeroUI",
category: "Library",
route: {
light: '/library/heroui_black.svg',
dark: '/library/heroui_light.svg'
light: "/library/heroui_black.svg",
dark: "/library/heroui_light.svg",
},
url: 'https://www.heroui.com/'
url: "https://www.heroui.com/",
},
{
title: 'Convex',
category: ['Database', 'Software'],
route: '/library/convex.svg',
title: "Convex",
category: ["Database", "Software"],
route: "/library/convex.svg",
wordmark: {
light: '/library/convex_wordmark_light.svg',
dark: '/library/convex_wordmark_dark.svg'
light: "/library/convex_wordmark_light.svg",
dark: "/library/convex_wordmark_dark.svg",
},
url: 'https://www.convex.dev/'
url: "https://www.convex.dev/",
},
{
title: 'Clerk',
category: ['Software', 'Authentication'],
title: "Clerk",
category: ["Software", "Authentication"],
route: {
light: '/library/clerk-light.svg',
dark: '/library/clerk-dark.svg'
light: "/library/clerk-light.svg",
dark: "/library/clerk-dark.svg",
},
wordmark: {
light: '/library/clerk-wordmark-light.svg',
dark: '/library/clerk-wordmark-dark.svg'
light: "/library/clerk-wordmark-light.svg",
dark: "/library/clerk-wordmark-dark.svg",
},
url: 'https://clerk.com/',
brandUrl: 'https://clerk.com/design'
url: "https://clerk.com/",
brandUrl: "https://clerk.com/design",
},
{
title: 'Terraform',
category: ['Software', 'Language', 'IaC'],
route: '/library/terraform.svg',
url: 'https://terraform.io',
brandUrl: 'https://brand.hashicorp.com'
title: "Terraform",
category: ["Software", "Language", "IaC"],
route: "/library/terraform.svg",
url: "https://terraform.io",
brandUrl: "https://brand.hashicorp.com",
},
{
title: 'Rspack',
category: 'Compiler',
route: '/library/rspack.svg',
url: 'https://rspack.rs/'
title: "Rspack",
category: "Compiler",
route: "/library/rspack.svg",
url: "https://rspack.rs/",
},
{
title: 'Rsbuild',
category: ['Devtool', 'Compiler'],
route: '/library/rsbuild.svg',
url: 'https://rsbuild.rs'
title: "Rsbuild",
category: ["Devtool", "Compiler"],
route: "/library/rsbuild.svg",
url: "https://rsbuild.rs",
},
{
title: 'React Wheel Picker',
category: 'Library',
title: "React Wheel Picker",
category: "Library",
route: {
light: '/library/react-wheel-picker_light.svg',
dark: '/library/react-wheel-picker_dark.svg'
light: "/library/react-wheel-picker_light.svg",
dark: "/library/react-wheel-picker_dark.svg",
},
url: 'https://react-wheel-picker.chanhdai.com'
url: "https://react-wheel-picker.chanhdai.com",
},
{
title: 'cPanel',
category: 'Software',
route: '/library/cP_orange.svg',
wordmark: '/library/cPanel_orange_wordmark.svg',
url: 'https://cpanel.net/',
brandUrl: 'https://cpanel.net/company/cpanel-brand-guide/'
title: "cPanel",
category: "Software",
route: "/library/cP_orange.svg",
wordmark: "/library/cPanel_orange_wordmark.svg",
url: "https://cpanel.net/",
brandUrl: "https://cpanel.net/company/cpanel-brand-guide/",
},
{
title: 'Lovable',
category: 'AI',
route: '/library/lovable.svg',
url: 'https://lovable.dev/',
brandUrl: 'https://lovable.dev/brand'
title: "Lovable",
category: "AI",
route: "/library/lovable.svg",
url: "https://lovable.dev/",
brandUrl: "https://lovable.dev/brand",
},
{
title: 'Mocha',
category: 'AI',
title: "Mocha",
category: "AI",
route: {
light: '/library/mocha-light.svg',
dark: '/library/mocha-dark.svg'
light: "/library/mocha-light.svg",
dark: "/library/mocha-dark.svg",
},
wordmark: {
light: '/library/mocha-light_wordmark.svg',
dark: '/library/mocha-dark_wordmark.svg'
light: "/library/mocha-light_wordmark.svg",
dark: "/library/mocha-dark_wordmark.svg",
},
url: 'https://getmocha.com/'
url: "https://getmocha.com/",
},
{
title: 'OpenRouter',
category: 'AI',
title: "OpenRouter",
category: "AI",
route: {
light: '/library/openrouter_light.svg',
dark: '/library/openrouter_dark.svg'
light: "/library/openrouter_light.svg",
dark: "/library/openrouter_dark.svg",
},
url: 'https://openrouter.ai/'
url: "https://openrouter.ai/",
},
{
title: 'OpenHunts',
category: ['Platform', 'Community'],
route: '/library/openhunts.svg',
url: 'https://openhunts.com'
title: "OpenHunts",
category: ["Platform", "Community"],
route: "/library/openhunts.svg",
url: "https://openhunts.com",
},
{
title: 'Kokonut UI',
category: 'Library',
title: "Kokonut UI",
category: "Library",
route: {
light: '/library/kokonutui-light.svg',
dark: '/library/kokonutui-dark.svg'
light: "/library/kokonutui-light.svg",
dark: "/library/kokonutui-dark.svg",
},
url: 'https://kokonutui.com/'
url: "https://kokonutui.com/",
},
{
title: 'Google Cloud',
category: ['Google', 'Hosting'],
route: '/library/google-cloud.svg',
url: 'https://cloud.google.com/'
title: "Google Cloud",
category: ["Google", "Hosting"],
route: "/library/google-cloud.svg",
url: "https://cloud.google.com/",
},
{
title: 'Effect TS',
category: 'Library',
title: "Effect TS",
category: "Library",
route: {
light: '/library/effect_light.svg',
dark: '/library/effect_dark.svg'
light: "/library/effect_light.svg",
dark: "/library/effect_dark.svg",
},
url: 'https://effect.website/',
url: "https://effect.website/",
brandUrl:
'https://sparkling-lancer-5bd.notion.site/Effect-logo-guidelines-14280adbc6354eaa8bd173e1bc0128a4'
"https://sparkling-lancer-5bd.notion.site/Effect-logo-guidelines-14280adbc6354eaa8bd173e1bc0128a4",
},
{
title: 'Ark UI',
category: 'Library',
route: '/library/ark-ui.svg',
url: 'https://ark-ui.com/'
title: "Ark UI",
category: "Library",
route: "/library/ark-ui.svg",
url: "https://ark-ui.com/",
},
{
title: 'Mantine',
category: 'Library',
route: '/library/mantine.svg',
url: 'https://mantine.dev'
title: "Mantine",
category: "Library",
route: "/library/mantine.svg",
url: "https://mantine.dev",
},
{
title: 'ESLint',
category: 'Library',
route: '/library/eslint.svg',
url: 'https://eslint.org/'
title: "ESLint",
category: "Library",
route: "/library/eslint.svg",
url: "https://eslint.org/",
},
{
title: 'PlainSignal',
category: 'Analytics',
route: '/library/plainsignal.svg',
url: 'https://plainsignal.com/'
title: "PlainSignal",
category: "Analytics",
route: "/library/plainsignal.svg",
url: "https://plainsignal.com/",
},
{
title: 'Heptabase',
category: 'Software',
route: '/library/heptabase.svg',
url: 'https://heptabase.com/'
}
title: "Heptabase",
category: "Software",
route: "/library/heptabase.svg",
url: "https://heptabase.com/",
},
];
+20 -11
View File
@@ -148,17 +148,26 @@ https://api.svgl.app/svg/adobe.svg
```html
// Returns:
<svg width="91" height="80" viewBox="0 0 91 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_906_1839)">
<path d="M56.9686 0H90.4318V80L56.9686 0Z" fill="#EB1000"/>
<path d="M33.4632 0H0V80L33.4632 0Z" fill="#EB1000"/>
<path d="M45.1821 29.4668L66.5199 80.0002H52.5657L46.1982 63.9461H30.6182L45.1821 29.4668Z" fill="#EB1000"/>
</g>
<defs>
<clipPath id="clip0_906_1839">
<rect width="90.4318" height="80" fill="white"/>
</clipPath>
</defs>
<svg
width="91"
height="80"
viewBox="0 0 91 80"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<g clip-path="url(#clip0_906_1839)">
<path d="M56.9686 0H90.4318V80L56.9686 0Z" fill="#EB1000" />
<path d="M33.4632 0H0V80L33.4632 0Z" fill="#EB1000" />
<path
d="M45.1821 29.4668L66.5199 80.0002H52.5657L46.1982 63.9461H30.6182L45.1821 29.4668Z"
fill="#EB1000"
/>
</g>
<defs>
<clipPath id="clip0_906_1839">
<rect width="90.4318" height="80" fill="white" />
</clipPath>
</defs>
</svg>
```
+18 -15
View File
@@ -1,37 +1,40 @@
declare const SITE_URL: string
declare const SITE_URL: string;
figma.showUI(`<script>window.location.href = '${SITE_URL}'</script>`, {
width: 400,
height: 700,
})
});
figma.ui.onmessage = async (message, props) => {
if (!SITE_URL.includes(props.origin)) {
return
return;
}
switch (message.type) {
case 'EVAL': {
const fn = eval.call(null, message.code)
case "EVAL": {
const fn = eval.call(null, message.code);
try {
const result = await fn(figma, message.params)
const result = await fn(figma, message.params);
figma.ui.postMessage({
type: 'EVAL_RESULT',
type: "EVAL_RESULT",
result,
id: message.id,
})
});
} catch (e) {
figma.ui.postMessage({
type: 'EVAL_REJECT',
error: typeof e === 'string' ? e : e && typeof e === 'object' && 'message' in e ? e.message : null,
type: "EVAL_REJECT",
error:
typeof e === "string"
? e
: e && typeof e === "object" && "message" in e
? e.message
: null,
id: message.id,
})
});
}
break
break;
}
}
}
};
+3 -3
View File
@@ -7,12 +7,12 @@ export function copyToClipboard(value: string) {
// @ts-ignore
window.copy(value);
} else {
const area = document.createElement('textarea');
const area = document.createElement("textarea");
document.body.appendChild(area);
area.value = value;
// area.focus();
area.select();
const result = document.execCommand('copy');
const result = document.execCommand("copy");
document.body.removeChild(area);
if (!result) {
throw new Error();
@@ -23,4 +23,4 @@ export function copyToClipboard(value: string) {
return false;
}
return true;
}
}
+37 -23
View File
@@ -23,7 +23,7 @@
* ```
*/
class FigmaAPI {
private id = 0
private id = 0;
/**
* Run a function in the Figma plugin context. The function cannot reference
@@ -31,50 +31,64 @@ class FigmaAPI {
* serializable. If you need to pass in variables, you can do so by passing
* them as the second parameter.
*/
run<T, U>(fn: (figma: PluginAPI, params: U) => Promise<T> | T, params?: U): Promise<T> {
run<T, U>(
fn: (figma: PluginAPI, params: U) => Promise<T> | T,
params?: U,
): Promise<T> {
return new Promise((resolve, reject) => {
const id = this.id++
const id = this.id++;
const cb = (event: MessageEvent) => {
if (event.origin !== 'https://www.figma.com' && event.origin !== 'https://staging.figma.com') {
return
if (
event.origin !== "https://www.figma.com" &&
event.origin !== "https://staging.figma.com"
) {
return;
}
if (event.data.pluginMessage?.type === 'EVAL_RESULT') {
if (event.data.pluginMessage?.type === "EVAL_RESULT") {
if (event.data.pluginMessage.id === id) {
window.removeEventListener('message', cb)
resolve(event.data.pluginMessage.result)
window.removeEventListener("message", cb);
resolve(event.data.pluginMessage.result);
}
}
if (event.data.pluginMessage?.type === 'EVAL_REJECT') {
if (event.data.pluginMessage?.type === "EVAL_REJECT") {
if (event.data.pluginMessage.id === id) {
window.removeEventListener('message', cb)
const message = event.data.pluginMessage.error
reject(new Error(typeof message === 'string' ? message : 'An error occurred in FigmaAPI.run()'))
window.removeEventListener("message", cb);
const message = event.data.pluginMessage.error;
reject(
new Error(
typeof message === "string"
? message
: "An error occurred in FigmaAPI.run()",
),
);
}
}
}
window.addEventListener('message', cb)
};
window.addEventListener("message", cb);
const msg = {
pluginMessage: {
type: 'EVAL',
type: "EVAL",
code: fn.toString(),
id,
params,
},
pluginId: '*',
}
pluginId: "*",
};
;['https://www.figma.com', 'https://staging.figma.com'].forEach((origin) => {
["https://www.figma.com", "https://staging.figma.com"].forEach(
(origin) => {
try {
parent.postMessage(msg, origin)
parent.postMessage(msg, origin);
} catch (e) {
console.error(e)
console.error(e);
}
})
})
},
);
});
}
}
export const figmaAPI = new FigmaAPI()
export const figmaAPI = new FigmaAPI();
+10 -10
View File
@@ -1,22 +1,22 @@
import { figmaAPI } from './figma-api'
import { figmaAPI } from "./figma-api";
export async function insertSVG(svgString: string) {
if (!svgString) return
if (!svgString) return;
figmaAPI.run(
async (figma, { svgString }: { svgString: string }) => {
const node = figma.createNodeFromSvg(svgString)
const selectedNode = figma.currentPage.selection[0]
const node = figma.createNodeFromSvg(svgString);
const selectedNode = figma.currentPage.selection[0];
if (selectedNode) {
node.x = selectedNode.x + selectedNode.width + 20
node.y = selectedNode.y
node.x = selectedNode.x + selectedNode.width + 20;
node.y = selectedNode.y;
}
figma.currentPage.appendChild(node)
figma.currentPage.selection = [node]
figma.viewport.scrollAndZoomIntoView([node])
figma.currentPage.appendChild(node);
figma.currentPage.selection = [node];
figma.viewport.scrollAndZoomIntoView([node]);
},
{ svgString },
)
);
}
-14
View File
@@ -1,14 +0,0 @@
import { describe, it, expect } from 'vitest';
import { svgs } from './data/svgs';
describe('Get svgs by category', () => {
it('should have a category named "Social"', () => {
expect(svgs.find((svg) => svg.category === 'Social')).toBeDefined();
});
});
describe('Get a specific svg', () => {
it('should have a svg named "Discord"', () => {
expect(svgs.find((svg) => svg.title === 'Discord')).toBeDefined();
});
});
-5
View File
@@ -1,5 +0,0 @@
<script lang="ts">
import { redirect } from '@sveltejs/kit';
redirect(301, '/');
</script>
+8 -103
View File
@@ -1,107 +1,12 @@
<script lang="ts">
import { page } from '$app/stores';
import "../app.css";
import favicon from "$lib/assets/favicon.svg";
// Global styles:
import '@/styles/app.css';
import { cn } from '@/utils/cn';
import { ModeWatcher, mode } from 'mode-watcher';
// Categories:
import type { tCategory } from '@/types/categories';
import { svgs } from '@/data/svgs';
import { getCategories } from '@/data';
// Toaster:
import { Toaster } from 'svelte-sonner';
// Components for all pages:
import Transition from '@/components/transition.svelte';
import Warning from '@/components/warning.svelte';
// Layout:
import Navbar from '@/components/navbar.svelte';
import { sidebarCategoryCountStyles } from '@/ui/styles';
import { sidebarItemStyles } from '@/ui/styles';
// Get category counts:
const categories: tCategory[] = getCategories();
let categoryCounts: Record<string, number> = {};
categories.forEach((category) => {
categoryCounts[category] = svgs.filter((svg) => svg.category.includes(category)).length;
});
// Get main pathname:
$: pathname = $page.url.pathname;
let { children } = $props();
</script>
<ModeWatcher />
<Navbar currentPath={pathname} />
<main>
<aside
class={cn(
'z-50 w-full overflow-y-auto overflow-x-hidden',
'dark:border-neutral-800 md:fixed md:left-0 md:h-[calc(100vh-63px)] md:w-56 md:pb-0',
'bg-white dark:bg-neutral-900',
'opacity-95 backdrop-blur-md',
'border-b border-neutral-200 dark:border-neutral-800 md:border-r'
)}
>
<div class="md:px-3 md:py-6">
<nav
class="flex items-center space-x-1 overflow-y-auto px-6 pb-2 pt-2 md:mb-3 md:flex-col md:space-x-0 md:space-y-1 md:overflow-y-visible md:px-0 md:pt-0"
>
<a
href="/"
class={cn(
sidebarItemStyles,
pathname === '/'
? 'bg-neutral-200 font-medium text-dark dark:bg-neutral-700/30 dark:text-white'
: ''
)}
data-sveltekit-preload-data>All</a
>
<!-- Order alfabetically: -->
{#each categories.sort() as category}
<a
href={`/directory/${category.toLowerCase()}`}
data-sveltekit-preload-data
class={cn(
sidebarItemStyles,
pathname === `/directory/${category.toLowerCase()}`
? 'bg-neutral-200 font-medium text-dark dark:bg-neutral-700/30 dark:text-white'
: ''
)}
>
<span>{category}</span>
<span
class={cn(
sidebarCategoryCountStyles,
pathname === `/directory/${category.toLowerCase()}`
? 'border-neutral-300 dark:border-neutral-700'
: '',
'hidden font-mono text-xs md:inline'
)}>{categoryCounts[category]}</span
>
</a>
{/each}
</nav>
</div>
</aside>
<div class="ml-0 pb-6 md:ml-56">
<Warning />
<Transition {pathname}>
<slot />
</Transition>
<Toaster
position="bottom-right"
theme={$mode}
class="toaster group"
toastOptions={{
classes: {
toast: 'group toast dark:group-[.toaster]:bg-neutral-900 group-[.toaster]:font-sans',
description: 'group-[.toast]:text-xs font-mono'
}
}}
/>
</div>
</main>
<svelte:head>
<link rel="icon" href={favicon} />
</svelte:head>
{@render children?.()}
+5 -171
View File
@@ -1,171 +1,5 @@
<script lang="ts">
import type { iSVG } from '@/types/svg';
import { cn } from '@/utils/cn';
import { onMount } from 'svelte';
import { queryParam } from 'sveltekit-search-params';
import Fuse from 'fuse.js';
// Get all svgs:
import { svgsData } from '@/data';
const allSvgs = JSON.parse(JSON.stringify(svgsData));
// Cache sorted arrays
const latestSorted = [...allSvgs].sort((a, b) => b.id! - a.id!);
const alphabeticallySorted = [...allSvgs].sort((a, b) => a.title.localeCompare(b.title));
// Fuzzy search setup:
const fuse = new Fuse<iSVG>(allSvgs, {
keys: ['title'],
threshold: 0.35,
ignoreLocation: true,
isCaseSensitive: false,
shouldSort: true
});
// Components:
import Search from '@/components/search.svelte';
import Container from '@/components/container.svelte';
import SvgCard from '@/components/svgCard.svelte';
import Grid from '@/components/grid.svelte';
import NotFound from '@/components/notFound.svelte';
// URL params
const searchParam = queryParam('search');
// Icons:
import { ArrowDown, ArrowDownUpIcon, ArrowUpDownIcon, TrashIcon } from 'lucide-svelte';
import { buttonStyles } from '@/ui/styles';
let sorted: boolean = false;
let showAll: boolean = false;
// Search:
let searchTerm = '';
let filteredSvgs: iSVG[] = [];
let displaySvgs: iSVG[] = [];
let maxDisplay = 24;
const updateDisplaySvgs = () => {
displaySvgs = showAll ? filteredSvgs : filteredSvgs.slice(0, maxDisplay);
};
// Hybrid search strategy:
// - Simple string matching for queries < 3 chars
// - Fuzzy search for longer queries (handle typos and partial matches)
const searchSvgs = () => {
$searchParam = searchTerm || null;
if (!searchTerm) {
filteredSvgs = sorted ? alphabeticallySorted : latestSorted;
updateDisplaySvgs();
return;
}
if (searchTerm.length < 3) {
filteredSvgs = allSvgs.filter((svg: iSVG) =>
svg.title.toLowerCase().includes(searchTerm.toLowerCase())
);
} else {
filteredSvgs = fuse.search(searchTerm).map((result) => result.item);
}
updateDisplaySvgs();
};
// Clear search:
const clearSearch = () => {
searchTerm = '';
// Use current sort state to determine order
filteredSvgs = sorted ? alphabeticallySorted : latestSorted;
updateDisplaySvgs();
};
// Sort:
const sort = () => {
sorted = !sorted;
filteredSvgs = sorted ? alphabeticallySorted : latestSorted;
updateDisplaySvgs();
};
onMount(() => {
if ($searchParam) {
searchTerm = $searchParam;
}
searchSvgs();
});
$: {
if (showAll || filteredSvgs) {
updateDisplaySvgs();
}
}
</script>
<svelte:head>
<title>A beautiful library with SVG logos - Svgl</title>
</svelte:head>
<Search
bind:searchTerm
on:input={searchSvgs}
clearSearch={() => clearSearch()}
placeholder={`Search ${allSvgs.length} logos...`}
/>
<Container>
<div class={cn('mb-4 flex items-center justify-end', searchTerm.length > 0 && 'justify-between')}>
{#if searchTerm.length > 0}
<button
class={cn(
'flex items-center justify-center space-x-1 rounded-md py-1.5 text-sm font-medium opacity-80 transition-opacity hover:opacity-100',
filteredSvgs.length === 0 && 'hidden'
)}
on:click={() => clearSearch()}
>
<TrashIcon size={16} strokeWidth={2} class="mr-1" />
<span>Clear results</span>
</button>
{/if}
<button
class={cn(
'flex items-center justify-center space-x-1 rounded-md py-1.5 text-sm font-medium opacity-80 transition-opacity hover:opacity-100',
filteredSvgs.length === 0 && 'hidden'
)}
on:click={() => sort()}
>
{#if sorted}
<ArrowDownUpIcon size={16} strokeWidth={2} class="mr-1" />
{:else}
<ArrowUpDownIcon size={16} strokeWidth={2} class="mr-1" />
{/if}
<span>{sorted ? 'Sort by latest' : 'Sort A-Z'}</span>
</button>
</div>
<Grid>
{#each displaySvgs as svg}
<SvgCard svgInfo={svg} {searchTerm} />
{/each}
</Grid>
{#if filteredSvgs.length > maxDisplay && !showAll}
<div class="mt-4 flex items-center justify-center">
<button
class={buttonStyles}
on:click={() => {
showAll = true;
updateDisplaySvgs();
}}
>
<div class="relative flex items-center space-x-2">
<ArrowDown size={16} strokeWidth={2} />
<span>Load All SVGs</span>
<span class="opacity-70">
({filteredSvgs.length - maxDisplay} more)
</span>
</div>
</button>
</div>
{/if}
{#if filteredSvgs.length === 0}
<NotFound notFoundTerm={searchTerm} />
{/if}
</Container>
<h1>Welcome to SvelteKit</h1>
<p>
Visit <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> to read the
documentation
</p>
-50
View File
@@ -1,50 +0,0 @@
<script>
import { cn } from '@/utils/cn';
export let data;
</script>
<svelte:head>
<title>{data.meta.title} - SVGL</title>
<meta property="og:type" content="article" />
<meta property="og:title" content={data.meta.title} />
<meta property="og:description" content={data.meta.description} />
</svelte:head>
<section
class="bg-white bg-[url('/images/hero-pattern_light.svg')] dark:bg-neutral-900 dark:bg-[url('/images/hero-pattern_dark.svg')]"
>
<div class="relative z-10 mx-auto max-w-screen-xl px-4 py-8 text-center lg:py-20">
<div class="flex items-center justify-center space-x-4 text-center">
<h1
class="mb-4 text-4xl font-bold leading-none tracking-tight text-neutral-900 dark:text-white md:text-5xl lg:text-6xl"
>
API Reference
</h1>
<span class="relative inline-block overflow-hidden rounded-full p-[1px] shadow-sm">
<span
class="absolute inset-[-1000%] animate-[spin_4s_linear_infinite] bg-[conic-gradient(from_90deg_at_50%_50%,#f4f4f5_0%,#f4f4f5_50%,#737373_100%)] dark:bg-[conic-gradient(from_90deg_at_50%_50%,#121212_0%,#121212_50%,#737373_100%)]"
/>
<div
class="inline-flex h-full w-full cursor-default items-center justify-center rounded-full border border-neutral-100 bg-neutral-100 px-3 py-1 font-mono text-xs font-medium backdrop-blur-3xl dark:border-neutral-800 dark:bg-neutral-900 dark:text-white"
>
v1
</div>
</span>
</div>
<p class="text-lg font-normal text-gray-500 dark:text-gray-200 sm:px-16 lg:px-48 lg:text-xl">
The API reference is a detailed documentation of all the endpoints available in the API.
</p>
</div>
</section>
<article
class={cn(
'prose dark:prose-invert',
'mx-auto max-w-3xl px-4 py-10',
'prose-h2:font-medium prose-h2:tracking-tight prose-h2:underline prose-h2:decoration-neutral-300 prose-h2:underline-offset-[6px] prose-h2:transition-opacity hover:prose-h2:opacity-70 dark:prose-h2:decoration-neutral-700/65',
'prose-pre:m-0 prose-pre:border prose-pre:border-neutral-200 dark:prose-pre:border dark:prose-pre:border-neutral-800/65',
'prose-inline-code:rounded prose-inline-code:border prose-inline-code:border-neutral-300 prose-inline-code:bg-neutral-200/50 prose-inline-code:p-[2px] prose-inline-code:font-mono prose-inline-code:dark:border-neutral-800 prose-inline-code:dark:bg-neutral-800/50'
)}
>
<svelte:component this={data.content} />
</article>
-14
View File
@@ -1,14 +0,0 @@
import { error } from '@sveltejs/kit';
export async function load() {
try {
const documentTitle = 'api';
const post = await import(`../../docs/${documentTitle}.md`);
return {
content: post.default,
meta: post.metadata
};
} catch (e) {
throw error(404, `Could not find this page`);
}
}
-37
View File
@@ -1,37 +0,0 @@
import type { RequestEvent } from '../$types';
import { transform } from '@svgr/core';
import { json, redirect } from '@sveltejs/kit';
import { ratelimit } from '@/server/redis';
// SVGR Plugins:
import svgrJSX from '@svgr/plugin-jsx';
export const GET = async () => {
return redirect(301, 'https://svgl.app/api');
};
export const POST = async ({ request }: RequestEvent) => {
try {
const body = await request.json();
const svgCode = body.code;
const typescript = body.typescript;
const name = body.name.replace(/[^a-zA-Z0-9]/g, '');
const jsCode = await transform(
svgCode,
{
plugins: [svgrJSX],
icon: true,
typescript: typescript
},
{ componentName: name }
);
return json({ data: jsCode }, { status: 200 });
} catch (error) {
return json({ error: `⚠️ api/svgs/svgr - Error: ${error}` }, { status: 500 });
}
};
@@ -1,16 +0,0 @@
<script>
import Container from '@/components/container.svelte';
import { ArrowLeft } from 'lucide-svelte';
</script>
<Container>
<a href="/">
<div
class="flex items-center space-x-2 duration-100 hover:text-neutral-500 dark:text-neutral-400 dark:hover:text-white group md:mt-2"
>
<ArrowLeft size={20} class="group-hover:-translate-x-[2px] group-hover:duration-200" />
<span>View all</span>
</div>
</a>
</Container>
<slot />
-67
View File
@@ -1,67 +0,0 @@
<script lang="ts">
import type { PageData } from './$types';
import type { iSVG } from '@/types/svg';
import { queryParam } from 'sveltekit-search-params';
export let data: PageData;
let svgsByCategory = data.svgs || [];
let category = data.category || '';
// Components:
import Container from '@/components/container.svelte';
import Grid from '@/components/grid.svelte';
import Search from '@/components/search.svelte';
import SvgCard from '@/components/svgCard.svelte';
import NotFound from '@/components/notFound.svelte';
// URL params
const searchParam = queryParam('search');
// Search:
let searchTerm = $searchParam || '';
let filteredSvgs: iSVG[] = [];
if (searchTerm.length === 0) {
filteredSvgs = svgsByCategory.sort((a: iSVG, b: iSVG) => {
return a.title.localeCompare(b.title);
});
}
const searchSvgs = () => {
$searchParam = searchTerm || null;
return (filteredSvgs = svgsByCategory.filter((svg: iSVG) => {
let svgTitle = svg.title.toLowerCase();
return svgTitle.includes(searchTerm.toLowerCase());
}));
};
const clearSearch = () => {
searchTerm = '';
searchSvgs();
};
if ($searchParam) {
searchSvgs();
}
</script>
<svelte:head>
<title>{category} logos - Svgl</title>
</svelte:head>
<Container>
<Search
bind:searchTerm
on:input={searchSvgs}
clearSearch={() => clearSearch()}
placeholder={`Search ${filteredSvgs.length} ${category} logos...`}
/>
<Grid>
{#each filteredSvgs as svg}
<SvgCard svgInfo={svg} {searchTerm} />
{/each}
</Grid>
{#if filteredSvgs.length === 0}
<NotFound notFoundTerm={searchTerm} />
{/if}
</Container>
-32
View File
@@ -1,32 +0,0 @@
import type { PageLoad, EntryGenerator } from './$types';
import type { iSVG } from '@/types/svg';
import { error } from '@sveltejs/kit';
import { svgs } from '@/data/svgs';
import { getCategoriesForDirectory } from '@/data';
export const entries: EntryGenerator = () => {
const categories = getCategoriesForDirectory();
return categories;
};
export const load = (async ({ params }) => {
const { slug } = params;
const svgsByCategory = svgs.filter((svg: iSVG) => {
if (Array.isArray(svg.category)) {
return svg.category.some((categoryItem) => categoryItem.toLowerCase() === slug.toLowerCase());
} else {
return svg.category.toLowerCase() === slug.toLowerCase();
}
});
if (svgsByCategory.length === 0) {
throw error(404, 'Category not found');
}
return {
category: slug,
svgs: svgsByCategory
};
}) satisfies PageLoad;
-16
View File
@@ -1,16 +0,0 @@
import { Redis } from '@upstash/redis';
import { Ratelimit } from '@upstash/ratelimit';
import { UPSTASH_REDIS_TOKEN, UPSTASH_REDIS_URL, SVGL_API_REQUESTS } from '$env/static/private';
const cleanUrl = UPSTASH_REDIS_URL.replace(/^['"]|['"]$/g, '').trim();
const redis = new Redis({
url: cleanUrl,
token: UPSTASH_REDIS_TOKEN
});
export const ratelimit = new Ratelimit({
redis: redis,
limiter: Ratelimit.slidingWindow(Number(SVGL_API_REQUESTS), '60s'),
analytics: true
});
-83
View File
@@ -1,83 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--sb-track-color: rgb(229 229 229 / 0.5);
--sb-thumb-color: #d4d4d4;
--sb-size: 10px;
}
.dark {
--sb-track-color: #171717;
--sb-thumb-color: #404040;
--sb-size: 10px;
}
}
@layer base {
body,
nav {
scrollbar-color: var(--sb-thumb-color) transparent;
}
body::-webkit-scrollbar {
width: var(--sb-size);
}
body::-webkit-scrollbar-track {
background: var(--sb-track-color);
}
body::-webkit-scrollbar-thumb {
background: var(--sb-thumb-color);
}
aside::-webkit-scrollbar {
width: var(--sb-size);
}
aside::-webkit-scrollbar-track {
background: var(--sb-track-color);
}
aside::-webkit-scrollbar-thumb {
background: var(--sb-thumb-color);
}
nav::-webkit-scrollbar {
width: var(--sb-size);
}
nav::-webkit-scrollbar-track {
background: var(--sb-track-color);
}
nav::-webkit-scrollbar-thumb {
background: var(--sb-thumb-color);
}
}
@font-face {
font-family: 'InterVariable';
src: url('/fonts/InterVariable.woff2') format('woff2');
font-weight: 100 900;
font-display: swap;
font-style: normal;
}
@font-face {
font-family: 'GeistMono';
src: url('/fonts/GeistMonoVariableVF.woff2') format('woff2');
font-display: swap;
}
html.dark .shiki,
html.dark .shiki span {
color: var(--shiki-dark) !important;
background-color: transparent !important;
font-style: var(--shiki-dark-font-style) !important;
font-weight: var(--shiki-dark-font-weight) !important;
text-decoration: var(--shiki-dark-text-decoration) !important;
}
+1
View File
@@ -0,0 +1 @@
@import "tailwindcss";
+1 -1
View File
@@ -6,7 +6,7 @@ interface AngularComponentParams {
export function getAngularCode(params: AngularComponentParams): string {
const updatedSvgContent = params.svgContent.replace(
/<svg([^>]*)>/,
`<svg$1 [attr.width]="size.width" [attr.height]="size.height">`
`<svg$1 [attr.width]="size.width" [attr.height]="size.height">`,
);
return `
+4 -4
View File
@@ -4,11 +4,11 @@ interface AstroComponentParams {
export function getAstroCode({ svgContent }: AstroComponentParams): string {
const cleanedSvg = svgContent
.replace(/\s*(width|height)="[^"]*"/gi, '')
.replace(/\s*(width|height)='[^']*'/gi, '')
.replace(/\s*(width|height)=\{[^}]*\}/gi, '')
.replace(/\s*(width|height)="[^"]*"/gi, "")
.replace(/\s*(width|height)='[^']*'/gi, "")
.replace(/\s*(width|height)=\{[^}]*\}/gi, "")
.replace(/<svg([^>]*)>/i, (match, attrs) => {
const cleanedAttrs = attrs.replace(/\s*\{?\.\.\.Astro\.props\}?\s*/i, '');
const cleanedAttrs = attrs.replace(/\s*\{?\.\.\.Astro\.props\}?\s*/i, "");
return `<svg ${cleanedAttrs} {...Astro.props}>`;
});
+5 -5
View File
@@ -5,15 +5,15 @@ interface ReactComponentParams {
}
export const getReactCode = async (
params: ReactComponentParams
params: ReactComponentParams,
): Promise<{ data?: string; error?: string }> => {
try {
const getCode = await fetch('/api/svgs/svgr', {
method: 'POST',
const getCode = await fetch("/api/svgs/svgr", {
method: "POST",
headers: {
'Content-Type': 'application/json'
"Content-Type": "application/json",
},
body: JSON.stringify(params)
body: JSON.stringify(params),
});
const data = await getCode.json();
return data;
+1 -1
View File
@@ -3,7 +3,7 @@ interface SourceParams {
}
export const getSource = async (params: SourceParams) => {
const response = await fetch(params.url || '');
const response = await fetch(params.url || "");
const content = await response.text();
return content;
};
+6 -3
View File
@@ -1,4 +1,4 @@
import { parseSvgContent } from '@/utils/parseSvgContent';
import { parseSvgContent } from "@/utils/parseSvgContent";
interface SvelteComponentParams {
lang: string;
@@ -6,8 +6,11 @@ interface SvelteComponentParams {
}
export const getSvelteCode = (params: SvelteComponentParams) => {
const { templateContent, componentStyle } = parseSvgContent(params.content, 'Svelte');
return `<script${params.lang ? ` lang="${params.lang}"` : ''}></script>
const { templateContent, componentStyle } = parseSvgContent(
params.content,
"Svelte",
);
return `<script${params.lang ? ` lang="${params.lang}"` : ""}></script>
${templateContent}
${componentStyle}
+6 -3
View File
@@ -1,4 +1,4 @@
import { parseSvgContent } from '@/utils/parseSvgContent';
import { parseSvgContent } from "@/utils/parseSvgContent";
interface VueComponentParams {
lang: string;
@@ -6,8 +6,11 @@ interface VueComponentParams {
}
export const getVueCode = (params: VueComponentParams) => {
const { templateContent, componentStyle } = parseSvgContent(params.content, 'Vue');
return `<script setup${params.lang ? ` lang="${params.lang}"` : ''}></script>
const { templateContent, componentStyle } = parseSvgContent(
params.content,
"Vue",
);
return `<script setup${params.lang ? ` lang="${params.lang}"` : ""}></script>
<template>
${templateContent}
</template>
+33 -33
View File
@@ -1,34 +1,34 @@
export type tCategory =
| 'All'
| 'AI'
| 'Software'
| 'Hardware'
| 'Library'
| 'Hosting'
| 'Framework'
| 'Devtool'
| 'Monorepo'
| 'CMS'
| 'Database'
| 'Compiler'
| 'Crypto'
| 'Cybersecurity'
| 'Social'
| 'Entertainment'
| 'Browser'
| 'Language'
| 'Education'
| 'Design'
| 'Community'
| 'Marketplace'
| 'Music'
| 'Vercel'
| 'Google'
| 'Payment'
| 'VoidZero'
| 'Authentication'
| 'IoT'
| 'Config'
| 'Secrets'
| 'IaC'
| 'Analytics';
| "All"
| "AI"
| "Software"
| "Hardware"
| "Library"
| "Hosting"
| "Framework"
| "Devtool"
| "Monorepo"
| "CMS"
| "Database"
| "Compiler"
| "Crypto"
| "Cybersecurity"
| "Social"
| "Entertainment"
| "Browser"
| "Language"
| "Education"
| "Design"
| "Community"
| "Marketplace"
| "Music"
| "Vercel"
| "Google"
| "Payment"
| "VoidZero"
| "Authentication"
| "IoT"
| "Config"
| "Secrets"
| "IaC"
| "Analytics";
+1 -1
View File
@@ -1,4 +1,4 @@
import type { tCategory } from './categories';
import type { tCategory } from "./categories";
export type ThemeOptions = {
dark: string;
-36
View File
@@ -1,36 +0,0 @@
<script lang="ts">
import { cn } from '@/utils/cn';
import { AlertTriangleIcon, CheckCircleIcon, InfoIcon, XCircleIcon } from 'lucide-svelte';
type iAlertType = 'success' | 'error' | 'warning' | 'info';
export let type: iAlertType = 'info';
const icons = {
success: CheckCircleIcon,
error: XCircleIcon,
warning: AlertTriangleIcon,
info: InfoIcon
};
</script>
<div
class={cn(
'flex items-center space-x-3 rounded-lg border px-3 py-2 text-sm dark:border-gray-700/20 dark:text-gray-200',
type === 'success' &&
'border-emerald-600/20 bg-emerald-100/50 text-emerald-900 selection:bg-emerald-500/20 dark:border-emerald-500/30 dark:bg-emerald-500/10 dark:text-emerald-200 dark:selection:bg-emerald-500/30',
type === 'error' &&
'border-red-600/20 bg-red-100/50 text-red-900 selection:bg-red-500/20 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200 dark:selection:bg-red-500/30',
type === 'warning' &&
'border-yellow-600/20 bg-yellow-100/50 text-yellow-900 selection:bg-yellow-500/20 dark:border-yellow-500/30 dark:bg-yellow-500/10 dark:text-yellow-200 dark:selection:bg-yellow-500/30',
type === 'info' &&
'border-blue-600/20 bg-blue-100/50 text-blue-900 selection:bg-blue-500/20 dark:border-blue-500/30 dark:bg-blue-500/10 dark:text-blue-200 dark:selection:bg-blue-500/30'
)}
>
{#if icons[type]}
<svelte:component this={icons[type]} class="flex-shrink-0" size={16} />
{/if}
<div>
<slot />
</div>
</div>
@@ -1,35 +0,0 @@
<script lang="ts">
import { ContextMenu as ContextMenuPrimitive } from 'bits-ui';
import { CheckIcon } from 'lucide-svelte';
import { cn } from '@/utils/cn';
type $$Props = ContextMenuPrimitive.CheckboxItemProps;
type $$Events = ContextMenuPrimitive.CheckboxItemEvents;
let className: $$Props['class'] = undefined;
export { className as class };
export let checked: $$Props['checked'] = undefined;
</script>
<ContextMenuPrimitive.CheckboxItem
bind:checked
class={cn(
'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
className
)}
{...$$restProps}
on:click
on:keydown
on:focusin
on:focusout
on:pointerdown
on:pointerleave
on:pointermove
>
<span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
<ContextMenuPrimitive.CheckboxIndicator>
<CheckIcon class="h-4 w-4" />
</ContextMenuPrimitive.CheckboxIndicator>
</span>
<slot />
</ContextMenuPrimitive.CheckboxItem>
@@ -1,25 +0,0 @@
<script lang="ts">
import { ContextMenu as ContextMenuPrimitive } from 'bits-ui';
import { cn } from '@/utils/cn';
import { flyAndScale } from '@/utils/flyAndScale';
type $$Props = ContextMenuPrimitive.ContentProps;
let className: $$Props['class'] = undefined;
export let transition: $$Props['transition'] = flyAndScale;
export let transitionConfig: $$Props['transitionConfig'] = undefined;
export { className as class };
</script>
<ContextMenuPrimitive.Content
{transition}
{transitionConfig}
class={cn(
'bg-white dark:bg-neutral-900 text-popover-foreground z-50 min-w-[8rem] rounded-md border border-neutral-200 dark:border-neutral-800 p-1 shadow-md focus:outline-none',
className
)}
{...$$restProps}
on:keydown
>
<slot />
</ContextMenuPrimitive.Content>
@@ -1,31 +0,0 @@
<script lang="ts">
import { ContextMenu as ContextMenuPrimitive } from 'bits-ui';
import { cn } from '@/utils/cn';
type $$Props = ContextMenuPrimitive.ItemProps & {
inset?: boolean;
};
type $$Events = ContextMenuPrimitive.ItemEvents;
let className: $$Props['class'] = undefined;
export let inset: $$Props['inset'] = undefined;
export { className as class };
</script>
<ContextMenuPrimitive.Item
class={cn(
'data-[highlighted]:bg-neutral-100 dark:data-[highlighted]:bg-neutral-800 data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 space-x-2',
inset && 'pl-8',
className
)}
{...$$restProps}
on:click
on:keydown
on:focusin
on:focusout
on:pointerdown
on:pointerleave
on:pointermove
>
<slot />
</ContextMenuPrimitive.Item>
@@ -1,19 +0,0 @@
<script lang="ts">
import { ContextMenu as ContextMenuPrimitive } from 'bits-ui';
import { cn } from '@/utils/cn';
type $$Props = ContextMenuPrimitive.LabelProps & {
inset?: boolean;
};
let className: $$Props['class'] = undefined;
export let inset: $$Props['inset'] = undefined;
export { className as class };
</script>
<ContextMenuPrimitive.Label
class={cn('text-foreground px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}
{...$$restProps}
>
<slot />
</ContextMenuPrimitive.Label>
-31
View File
@@ -1,31 +0,0 @@
import { ContextMenu as ContextMenuPrimitive } from 'bits-ui';
import Item from './context-menu-item.svelte';
import Label from './context-menu-label.svelte';
import Content from './context-menu-content.svelte';
import CheckboxItem from './context-menu-checkbox-item.svelte';
const Sub = ContextMenuPrimitive.Sub;
const Root = ContextMenuPrimitive.Root;
const Trigger = ContextMenuPrimitive.Trigger;
const Group = ContextMenuPrimitive.Group;
export {
Sub,
Root,
Item,
Label,
Group,
Trigger,
Content,
CheckboxItem,
//
Root as ContextMenu,
Sub as ContextMenuSub,
Item as ContextMenuItem,
Label as ContextMenuLabel,
Group as ContextMenuGroup,
Content as ContextMenuContent,
Trigger as ContextMenuTrigger,
CheckboxItem as ContextMenuCheckboxItem
};
-38
View File
@@ -1,38 +0,0 @@
<script lang="ts">
import { Dialog as DialogPrimitive } from 'bits-ui';
import * as Dialog from '@/ui/dialog';
import { cn } from '@/utils/cn';
import { X } from 'lucide-svelte';
import { flyAndScale } from '@/utils/flyAndScale';
type $$Props = DialogPrimitive.ContentProps;
let className: $$Props['class'] = undefined;
export let transition: $$Props['transition'] = flyAndScale;
export let transitionConfig: $$Props['transitionConfig'] = {
duration: 200
};
export { className as class };
</script>
<Dialog.Portal>
<Dialog.Overlay />
<DialogPrimitive.Content
{transition}
{transitionConfig}
class={cn(
'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] border border-neutral-200 dark:border-neutral-800 dark:bg-neutral-900 bg-white p-6 shadow-lg sm:rounded-lg md:w-full',
className
)}
{...$$restProps}
>
<slot />
<DialogPrimitive.Close
class="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"
>
<X class="h-4 w-4" />
<span class="sr-only">Close</span>
</DialogPrimitive.Close>
</DialogPrimitive.Content>
</Dialog.Portal>
-13
View File
@@ -1,13 +0,0 @@
<script lang="ts">
import { Dialog as DialogPrimitive } from 'bits-ui';
import { cn } from '@/utils/cn';
type $$Props = DialogPrimitive.DescriptionProps;
let className: $$Props['class'] = undefined;
export { className as class };
</script>
<DialogPrimitive.Description class={cn('text-sm opacity-70 mb-2', className)} {...$$restProps}>
<slot />
</DialogPrimitive.Description>
-16
View File
@@ -1,16 +0,0 @@
<script lang="ts">
import { cn } from '@/utils/cn';
import type { HTMLAttributes } from 'svelte/elements';
type $$Props = HTMLAttributes<HTMLDivElement>;
let className: $$Props['class'] = undefined;
export { className as class };
</script>
<div
class={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}
{...$$restProps}
>
<slot />
</div>
-13
View File
@@ -1,13 +0,0 @@
<script lang="ts">
import { cn } from '@/utils/cn';
import type { HTMLAttributes } from 'svelte/elements';
type $$Props = HTMLAttributes<HTMLDivElement>;
let className: $$Props['class'] = undefined;
export { className as class };
</script>
<div class={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...$$restProps}>
<slot />
</div>
-24
View File
@@ -1,24 +0,0 @@
<script lang="ts">
import { Dialog as DialogPrimitive } from 'bits-ui';
import { cn } from '@/utils/cn';
import { fade } from 'svelte/transition';
type $$Props = DialogPrimitive.OverlayProps;
let className: $$Props['class'] = undefined;
export let transition: $$Props['transition'] = fade;
export let transitionConfig: $$Props['transitionConfig'] = {
duration: 150
};
export { className as class };
</script>
<DialogPrimitive.Overlay
{transition}
{transitionConfig}
class={cn(
'fixed inset-0 z-50 bg-neutral-100/80 dark:bg-neutral-900/80 backdrop-blur-sm',
className
)}
{...$$restProps}
/>
-8
View File
@@ -1,8 +0,0 @@
<script lang="ts">
import { Dialog as DialogPrimitive } from 'bits-ui';
type $$Props = DialogPrimitive.PortalProps;
</script>
<DialogPrimitive.Portal {...$$restProps}>
<slot />
</DialogPrimitive.Portal>
-16
View File
@@ -1,16 +0,0 @@
<script lang="ts">
import { Dialog as DialogPrimitive } from 'bits-ui';
import { cn } from '@/utils/cn';
type $$Props = DialogPrimitive.TitleProps;
let className: $$Props['class'] = undefined;
export { className as class };
</script>
<DialogPrimitive.Title
class={cn('text-lg font-semibold leading-none tracking-tight', className)}
{...$$restProps}
>
<slot />
</DialogPrimitive.Title>
-34
View File
@@ -1,34 +0,0 @@
import { Dialog as DialogPrimitive } from 'bits-ui';
const Root = DialogPrimitive.Root;
const Trigger = DialogPrimitive.Trigger;
import Title from './dialog-title.svelte';
import Portal from './dialog-portal.svelte';
import Footer from './dialog-footer.svelte';
import Header from './dialog-header.svelte';
import Overlay from './dialog-overlay.svelte';
import Content from './dialog-content.svelte';
import Description from './dialog-description.svelte';
export {
Root,
Title,
Portal,
Footer,
Header,
Trigger,
Overlay,
Content,
Description,
//
Root as Dialog,
Title as DialogTitle,
Portal as DialogPortal,
Footer as DialogFooter,
Header as DialogHeader,
Trigger as DialogTrigger,
Overlay as DialogOverlay,
Content as DialogContent,
Description as DialogDescription
};
-16
View File
@@ -1,16 +0,0 @@
import { Popover as PopoverPrimitive } from 'bits-ui';
import Content from './popover-content.svelte';
const Root = PopoverPrimitive.Root;
const Trigger = PopoverPrimitive.Trigger;
const Close = PopoverPrimitive.Close;
export {
Root,
Content,
Trigger,
Close,
Root as Popover,
Content as PopoverContent,
Trigger as PopoverTrigger,
Close as PopoverClose
};
-29
View File
@@ -1,29 +0,0 @@
<script lang="ts">
import { Popover as PopoverPrimitive } from 'bits-ui';
import { cn } from '@/utils/cn';
import { flyAndScale } from '@/utils/flyAndScale';
type $$Props = PopoverPrimitive.ContentProps;
let className: $$Props['class'] = undefined;
export let transition: $$Props['transition'] = flyAndScale;
export let transitionConfig: $$Props['transitionConfig'] = undefined;
export let align: $$Props['align'] = 'center';
export let sideOffset: $$Props['sideOffset'] = 4;
export { className as class };
</script>
<PopoverPrimitive.Content
{transition}
{transitionConfig}
{align}
{sideOffset}
{...$$restProps}
class={cn(
'z-50 w-auto max-w-96 rounded-md border border-neutral-200 bg-white p-3 shadow-md outline-none dark:border-neutral-800 dark:bg-neutral-900',
className
)}
>
<slot />
</PopoverPrimitive.Content>
-14
View File
@@ -1,14 +0,0 @@
export const buttonStyles =
'flex items-center space-x-2 relative h-10 rounded-full border border-neutral-200 dark:border-neutral-800 bg-transparent px-4 text-neutral-950 dark:text-white hover:bg-neutral-200/50 dark:hover:bg-neutral-800/50 focus:outline-none focus:ring-1 focus:ring-neutral-300 dark:focus:ring-neutral-700 transition-colors duration-100 disabled:opacity-50 disabled:cursor-not-allowed';
export const inputStyles =
'w-full border-b border-neutral-300 bg-white p-3 px-11 placeholder-neutral-500 focus:outline-none focus:ring-1 focus:ring-neutral-300 dark:border-neutral-800 dark:bg-neutral-900 dark:focus:ring-neutral-700';
export const badgeStyles =
'inline-flex items-center px-2.5 py-0.5 rounded-full font-medium bg-neutral-100 dark:bg-neutral-800/50 border border-neutral-200 dark:border-neutral-800 text-neutral-600 dark:text-neutral-400 text-xs font-mono hover:underline hover:bg-neutral-200 dark:hover:bg-neutral-700/50 transition-colors duration-100';
export const sidebarItemStyles =
'flex w-full items-center space-x-3 justify-between rounded-md p-2 transition-none duration-100 text-neutral-600 hover:text-dark dark:hover:text-white dark:text-neutral-400 hover:bg-neutral-200 dark:hover:bg-neutral-700/40 text-sm';
export const sidebarCategoryCountStyles =
'px-2.5 py-0.5 rounded-full font-medium bg-neutral-100 dark:bg-neutral-800/50 border border-neutral-200 dark:border-neutral-800 text-neutral-600 dark:text-neutral-400 text-xs font-mono';
-18
View File
@@ -1,18 +0,0 @@
import { Tabs as TabsPrimitive } from 'bits-ui';
import Content from './tabs-content.svelte';
import List from './tabs-list.svelte';
import Trigger from './tabs-trigger.svelte';
const Root = TabsPrimitive.Root;
export {
Root,
Content,
List,
Trigger,
//
Root as Tabs,
Content as TabsContent,
List as TabsList,
Trigger as TabsTrigger
};
-21
View File
@@ -1,21 +0,0 @@
<script lang="ts">
import { Tabs as TabsPrimitive } from 'bits-ui';
import { cn } from '@/utils/cn';
type $$Props = TabsPrimitive.ContentProps;
let className: $$Props['class'] = undefined;
export let value: $$Props['value'];
export { className as class };
</script>
<TabsPrimitive.Content
class={cn(
'focus-visible:ring-ring mt-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2',
className
)}
{value}
{...$$restProps}
>
<slot />
</TabsPrimitive.Content>
-16
View File
@@ -1,16 +0,0 @@
<script lang="ts">
import { Tabs as TabsPrimitive } from 'bits-ui';
import { cn } from '@/utils/cn';
type $$Props = TabsPrimitive.ListProps;
let className: $$Props['class'] = undefined;
export { className as class };
</script>
<TabsPrimitive.List
class={cn('mb-2 flex flex-wrap items-center justify-center rounded-lg', className)}
{...$$restProps}
>
<slot />
</TabsPrimitive.List>
-25
View File
@@ -1,25 +0,0 @@
<script lang="ts">
import { Tabs as TabsPrimitive } from 'bits-ui';
import { cn } from '@/utils/cn';
type $$Props = TabsPrimitive.TriggerProps;
type $$Events = TabsPrimitive.TriggerEvents;
let className: $$Props['class'] = undefined;
export let value: $$Props['value'];
export { className as class };
</script>
<TabsPrimitive.Trigger
class={cn(
'inline-flex items-center justify-center whitespace-nowrap rounded-md px-2.5 py-1 text-sm font-medium text-neutral-500 transition-all hover:bg-neutral-300/40 hover:text-black focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-200 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-neutral-300/40 data-[state=active]:text-black data-[state=active]:shadow dark:text-neutral-400 dark:hover:bg-neutral-800/40 dark:hover:text-white dark:focus-visible:ring-neutral-800 dark:data-[state=active]:bg-neutral-800/40 dark:data-[state=active]:text-white',
className
)}
{value}
{...$$restProps}
on:click
on:keydown
on:focus
>
<slot />
</TabsPrimitive.Trigger>
-15
View File
@@ -1,15 +0,0 @@
const MIMETYPE = 'text/plain';
export const clipboard = async (content: string) => {
try {
const clipboardItem = new ClipboardItem({
[MIMETYPE]: new Blob([content], { type: MIMETYPE })
});
setTimeout(async () => {
await navigator.clipboard.write([clipboardItem]);
}, 200);
} catch (error) {
await navigator.clipboard.writeText(content);
}
};
-6
View File
@@ -1,6 +0,0 @@
import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
-43
View File
@@ -1,43 +0,0 @@
import { cubicOut } from 'svelte/easing';
import type { TransitionConfig } from 'svelte/transition';
type FlyAndScaleParams = {
y?: number;
x?: number;
start?: number;
duration?: number;
};
export const flyAndScale = (
node: Element,
params: FlyAndScaleParams = { y: -8, x: 0, start: 0.95, duration: 150 }
): TransitionConfig => {
const style = getComputedStyle(node);
const transform = style.transform === 'none' ? '' : style.transform;
const scaleConversion = (valueA: number, scaleA: [number, number], scaleB: [number, number]) => {
const [minA, maxA] = scaleA;
const [minB, maxB] = scaleB;
const percentage = (valueA - minA) / (maxA - minA);
const valueB = percentage * (maxB - minB) + minB;
return valueB;
};
const styleToString = (style: Record<string, number | string | undefined>): string => {
return Object.keys(style).reduce((str, key) => {
if (style[key] === undefined) return str;
return str + key + ':' + style[key] + ';';
}, '');
};
return {
duration: params.duration ?? 200,
delay: 0,
css: (t) => {
const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]);
const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]);
const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]);
return styleToString({
transform: transform + 'translate3d(' + x + 'px, ' + y + 'px, 0) scale(' + scale + ')',
opacity: t
});
},
easing: cubicOut
};
};
-10
View File
@@ -1,10 +0,0 @@
export async function fetchGitHubStars() {
const res = await fetch('https://api.github.com/repos/pheralb/svgl');
const response = await res.json();
const starsFormated =
response.stargazers_count > 1000
? `${(response.stargazers_count / 1000).toFixed(1)}K`
: response.stargazers_count;
return starsFormated;
}
-26
View File
@@ -1,26 +0,0 @@
export const parseSvgContent = (content: string, framework: 'Vue' | 'Svelte') => {
if (content.includes('<?xml')) {
content = content.replace(/<\?xml[^>]*\?>/i, '');
}
// Regular expression to match <style> tags in the SVG content
const styleTagRegex = /<style[^>]*>([\s\S]*?)<\/style>/gi;
// Extract styles and store them in an array
const styles = [];
let matched;
while ((matched = styleTagRegex.exec(content)) !== null) {
styles.push(matched[1]); // Add the style content (not including the style tag)
}
// Remove <style> tags from the SVG content
const templateContent = content.replace(styleTagRegex, '');
const componentStyle = styles.length
? `<style${framework === 'Vue' ? ' scoped' : ''}>\n${styles.join('\n')}\n</style>`
: '';
return {
componentStyle,
templateContent
};
};
-21
View File
@@ -1,21 +0,0 @@
import { optimize } from 'svgo';
export const getPrefixFromSvgUrl = (svgUrl: string) => {
return svgUrl.split('/').pop()!.replace('.svg', '').split('-').join('_');
};
export const prefixSvgIds = (content: string, prefix: string): string => {
const result = optimize(content, {
plugins: [
{
name: 'prefixIds',
params: {
prefix
}
}
],
multipass: false
});
return (result as { data: string }).data;
};
+11 -17
View File
@@ -1,25 +1,19 @@
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
import { mdsvex } from "mdsvex";
import adapter from "@sveltejs/adapter-auto";
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
// ☁️ Adapter:
import adapter from '@sveltejs/adapter-node';
// 📦 Extensions:
import { mdsvex } from 'mdsvex';
// 📄 Markdown Config:
import { mdsvexOptions } from './markdown.config.js';
// 🧡 Svelte config:
/** @type {import('@sveltejs/kit').Config} */
const config = {
extensions: ['.svelte', '.md'],
preprocess: [vitePreprocess(), mdsvex(mdsvexOptions)],
// Consult https://svelte.dev/docs/kit/integrations
// for more information about preprocessors
preprocess: [vitePreprocess(), mdsvex()],
kit: {
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
// See https://svelte.dev/docs/kit/adapters for more information about adapters.
adapter: adapter(),
alias: {
'@': './src/*'
}
}
},
extensions: [".svelte", ".svx"],
};
export default config;
-71
View File
@@ -1,71 +0,0 @@
import type { Config } from 'tailwindcss';
// Plugins:
import plugin from 'tailwindcss/plugin';
import defaultTheme from 'tailwindcss/defaultTheme';
import twTypography from '@tailwindcss/typography';
const config = {
darkMode: 'class',
content: ['./src/**/*.{html,js,svelte,ts}'],
theme: {
extend: {
typography: {
DEFAULT: {
css: {
'code::before': {
content: '""'
},
'code::after': {
content: '""'
},
'h1 a': {
'text-decoration': 'none'
},
'h2 a': {
'text-decoration': 'none'
},
blockquote: {
'font-style': 'normal'
}
}
},
quoteless: {
css: {
'blockquote p:first-of-type::before': { content: 'none' },
'blockquote p:first-of-type::after': { content: 'none' }
}
}
},
colors: {
dark: '#161616',
light: '#f5f5f5'
},
fontFamily: {
sans: ['InterVariable', ...defaultTheme.fontFamily.sans],
mono: ['GeistMono', ...defaultTheme.fontFamily.mono]
},
fontSize: {
mini: '14px'
}
}
},
plugins: [
twTypography,
({ addUtilities }) => {
addUtilities({
'.text-balance': {
'text-wrap': 'balance'
}
});
},
plugin(function ({ addVariant }) {
addVariant(
'prose-inline-code',
'&.prose :where(:not(pre)>code):not(:where([class~="not-prose"] *))'
);
})
]
} satisfies Config;
export default config;
+6 -1
View File
@@ -9,6 +9,11 @@
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"types": ["@figma/plugin-typings"]
"moduleResolution": "bundler"
}
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
//
// To make changes to top-level options such as include and exclude, we recommend extending
// the generated config; see https://svelte.dev/docs/kit/configuration#typescript
}
-39
View File
@@ -1,39 +0,0 @@
{
"headers": [
{
"source": "/:all*(ttf|otf|woff|woff2)",
"headers": [
{
"key": "Cache-Control",
"value": "public, max-age=31536000, immutable"
}
]
}
],
"redirects": [
{
"source": "/git",
"destination": "https://github.com/pheralb/svgl"
},
{
"source": "/raycast",
"destination": "https://www.raycast.com/1weiho/svgl"
},
{
"source": "/vscode",
"destination": "https://marketplace.visualstudio.com/items?itemName=EsteveSegura.svgl"
},
{
"source": "/figma",
"destination": "https://www.figma.com/community/plugin/1320306989350693206/svgl"
},
{
"source": "/terminal",
"destination": "https://github.com/sujjeee/svgls"
},
{
"source": "/badges",
"destination": "https://svgl-badge.vercel.app/"
}
]
}
+4 -6
View File
@@ -1,9 +1,7 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vitest/config';
import tailwindcss from "@tailwindcss/vite";
import { sveltekit } from "@sveltejs/kit/vite";
import { defineConfig } from "vite";
export default defineConfig({
plugins: [sveltekit()],
test: {
include: ['src/**/*.{test,spec}.{js,ts}']
}
plugins: [tailwindcss(), sveltekit()],
});