├── src-tauri
├── build.rs
├── .gitignore
├── icons
│ ├── 32x32.png
│ ├── icon.icns
│ ├── icon.ico
│ ├── icon.png
│ ├── 128x128.png
│ ├── 128x128@2x.png
│ ├── StoreLogo.png
│ ├── Square30x30Logo.png
│ ├── Square44x44Logo.png
│ ├── Square71x71Logo.png
│ ├── Square89x89Logo.png
│ ├── Square107x107Logo.png
│ ├── Square142x142Logo.png
│ ├── Square150x150Logo.png
│ ├── Square284x284Logo.png
│ └── Square310x310Logo.png
├── tauri.macos.conf.json
├── tauri.linux.conf.json
├── tauri.windows.conf.json
├── Cargo.toml
├── tauri.conf.json
└── src
│ └── main.rs
├── app-icon.png
├── images
├── 1.png
├── 2.png
└── 3.png
├── src
├── lib
│ ├── icon.png
│ ├── components
│ │ └── ui
│ │ │ ├── index.ts
│ │ │ ├── label
│ │ │ ├── index.ts
│ │ │ └── label.svelte
│ │ │ ├── card
│ │ │ ├── card-content.svelte
│ │ │ ├── card-footer.svelte
│ │ │ ├── card-header.svelte
│ │ │ ├── card-description.svelte
│ │ │ ├── card.svelte
│ │ │ ├── card-title.svelte
│ │ │ └── index.ts
│ │ │ ├── dropdown-menu
│ │ │ ├── dropdown-menu-radio-group.svelte
│ │ │ ├── dropdown-menu-shortcut.svelte
│ │ │ ├── dropdown-menu-separator.svelte
│ │ │ ├── dropdown-menu-label.svelte
│ │ │ ├── dropdown-menu-content.svelte
│ │ │ ├── dropdown-menu-sub-content.svelte
│ │ │ ├── dropdown-menu-item.svelte
│ │ │ ├── dropdown-menu-sub-trigger.svelte
│ │ │ ├── dropdown-menu-radio-item.svelte
│ │ │ ├── dropdown-menu-checkbox-item.svelte
│ │ │ └── index.ts
│ │ │ ├── table
│ │ │ ├── table-body.svelte
│ │ │ ├── table-caption.svelte
│ │ │ ├── table-footer.svelte
│ │ │ ├── table-cell.svelte
│ │ │ ├── table.svelte
│ │ │ ├── table-head.svelte
│ │ │ ├── table-header.svelte
│ │ │ ├── table-row.svelte
│ │ │ └── index.ts
│ │ │ ├── button
│ │ │ ├── button.svelte
│ │ │ └── index.ts
│ │ │ ├── input
│ │ │ ├── index.ts
│ │ │ └── input.svelte
│ │ │ └── Downloader.svelte
│ ├── downloads.ts
│ └── utils.ts
├── routes
│ ├── +layout.ts
│ ├── url
│ │ └── +page.svelte
│ ├── +page.svelte
│ └── +layout.svelte
├── app.html
├── app.pcss
└── app.d.ts
├── static
└── favicon.png
├── .prettierignore
├── postcss.config.js
├── .gitignore
├── vite.config.ts
├── tailwind.config.ts
├── .prettierrc
├── components.json
├── postcss.config.cjs
├── install-macos.sh
├── install-linux.sh
├── install-windows.bat
├── tsconfig.json
├── svelte.config.js
├── README.md
├── package.json
├── tailwind.config.js
├── .github
└── workflows
│ ├── test.yml
│ └── release.yml
├── LICENSE
└── pnpm-lock.yaml
/src-tauri/build.rs:
--------------------------------------------------------------------------------
1 | fn main() {
2 | tauri_build::build()
3 | }
4 |
--------------------------------------------------------------------------------
/app-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/app-icon.png
--------------------------------------------------------------------------------
/images/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/images/1.png
--------------------------------------------------------------------------------
/images/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/images/2.png
--------------------------------------------------------------------------------
/images/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/images/3.png
--------------------------------------------------------------------------------
/src/lib/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src/lib/icon.png
--------------------------------------------------------------------------------
/src/routes/+layout.ts:
--------------------------------------------------------------------------------
1 | export const prerender = true;
2 | export const ssr = false;
3 |
--------------------------------------------------------------------------------
/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/static/favicon.png
--------------------------------------------------------------------------------
/src-tauri/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | # will have compiled files and executables
3 | /target/
--------------------------------------------------------------------------------
/src-tauri/icons/32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/32x32.png
--------------------------------------------------------------------------------
/src-tauri/icons/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/icon.icns
--------------------------------------------------------------------------------
/src-tauri/icons/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/icon.ico
--------------------------------------------------------------------------------
/src-tauri/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/icon.png
--------------------------------------------------------------------------------
/src-tauri/icons/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/128x128.png
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # Ignore files for PNPM, NPM and YARN
2 | pnpm-lock.yaml
3 | package-lock.json
4 | yarn.lock
5 |
--------------------------------------------------------------------------------
/src-tauri/icons/128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/128x128@2x.png
--------------------------------------------------------------------------------
/src-tauri/icons/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/StoreLogo.png
--------------------------------------------------------------------------------
/src/lib/components/ui/index.ts:
--------------------------------------------------------------------------------
1 | import Downloader from './Downloader.svelte';
2 |
3 | export { Downloader };
4 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {}
5 | }
6 | };
7 |
--------------------------------------------------------------------------------
/src-tauri/icons/Square30x30Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/Square30x30Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square44x44Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/Square44x44Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square71x71Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/Square71x71Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square89x89Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/Square89x89Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square107x107Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/Square107x107Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square142x142Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/Square142x142Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square150x150Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/Square150x150Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square284x284Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/Square284x284Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square310x310Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chientrm/xtuber/HEAD/src-tauri/icons/Square310x310Logo.png
--------------------------------------------------------------------------------
/src/lib/components/ui/label/index.ts:
--------------------------------------------------------------------------------
1 | import Root from "./label.svelte";
2 |
3 | export {
4 | Root,
5 | //
6 | Root as Label,
7 | };
8 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 | vite.config.js.timestamp-*
10 | vite.config.ts.timestamp-*
11 | ffmpeg*
12 | yt-dlp*
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 | import Icons from 'unplugin-icons/vite';
3 | import { defineConfig } from 'vite';
4 |
5 | export default defineConfig({
6 | plugins: [sveltekit(), Icons({ compiler: 'svelte' })]
7 | });
8 |
--------------------------------------------------------------------------------
/src-tauri/tauri.macos.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "tauri": {
3 | "bundle": {
4 | "resources": [
5 | "yt-dlp/yt-dlp_macos",
6 | "ffmpeg/ffmpeg-x86_64-apple-darwin"
7 | ]
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/src-tauri/tauri.linux.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "tauri": {
3 | "bundle": {
4 | "resources": [
5 | "yt-dlp/yt-dlp_linux",
6 | "ffmpeg/ffmpeg-x86_64-unknown-linux-gnu"
7 | ]
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/src-tauri/tauri.windows.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "tauri": {
3 | "bundle": {
4 | "resources": [
5 | "yt-dlp/yt-dlp.exe",
6 | "ffmpeg/ffmpeg-x86_64-pc-windows-msvc.exe"
7 | ]
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from 'tailwindcss';
2 |
3 | export default {
4 | content: ['./src/**/*.{html,js,svelte,ts}'],
5 |
6 | theme: {
7 | extend: {}
8 | },
9 |
10 | plugins: [require('@tailwindcss/typography')]
11 | } as Config;
12 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": true,
3 | "singleQuote": true,
4 | "trailingComma": "none",
5 | "printWidth": 100,
6 | "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
7 | "overrides": [
8 | {
9 | "files": "*.svelte",
10 | "options": {
11 | "parser": "svelte"
12 | }
13 | }
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://shadcn-svelte.com/schema.json",
3 | "style": "default",
4 | "tailwind": {
5 | "config": "tailwind.config.js",
6 | "css": "src/app.pcss",
7 | "baseColor": "slate"
8 | },
9 | "aliases": {
10 | "components": "$lib/components",
11 | "utils": "$lib/utils"
12 | },
13 | "typescript": true
14 | }
--------------------------------------------------------------------------------
/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | const tailwindcss = require('tailwindcss');
2 | const autoprefixer = require('autoprefixer');
3 |
4 | const config = {
5 | plugins: [
6 | //Some plugins, like tailwindcss/nesting, need to run before Tailwind,
7 | tailwindcss(),
8 | //But others, like autoprefixer, need to run after,
9 | autoprefixer
10 | ]
11 | };
12 |
13 | module.exports = config;
14 |
--------------------------------------------------------------------------------
/install-macos.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | mkdir -p src-tauri/ffmpeg
4 | wget https://www.osxexperts.net/ffmpeg7intel.zip
5 | unzip ffmpeg7intel.zip
6 | mv ffmpeg src-tauri/ffmpeg/ffmpeg-x86_64-apple-darwin
7 | mkdir -p src-tauri/yt-dlp
8 | wget https://github.com/yt-dlp/yt-dlp/releases/download/2024.04.09/yt-dlp_macos -O src-tauri/yt-dlp/yt-dlp_macos
9 | chmod +x src-tauri/ffmpeg/*
10 | chmod +x src-tauri/yt-dlp/*
--------------------------------------------------------------------------------
/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/lib/components/ui/card/card-content.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/lib/components/ui/card/card-footer.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/lib/components/ui/card/card-header.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/lib/components/ui/card/card-description.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/lib/components/ui/table/table-body.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/lib/components/ui/table/table-caption.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/lib/components/ui/table/table-footer.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/lib/components/ui/card/card.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
15 |
--------------------------------------------------------------------------------
/src/lib/components/ui/table/table-cell.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
17 |
18 | |
19 |
--------------------------------------------------------------------------------
/src/lib/components/ui/table/table.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
16 |
--------------------------------------------------------------------------------
/install-linux.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | mkdir -p src-tauri/ffmpeg
4 | wget https://github.com/yt-dlp/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz
5 | tar -xf ffmpeg-master-latest-linux64-gpl.tar.xz
6 | mv ffmpeg-master-latest-linux64-gpl/bin/ffmpeg src-tauri/ffmpeg/ffmpeg-x86_64-unknown-linux-gnu
7 | mkdir -p src-tauri/yt-dlp
8 | wget https://github.com/yt-dlp/yt-dlp/releases/download/2024.04.09/yt-dlp_linux -O src-tauri/yt-dlp/yt-dlp_linux
9 | chmod +x src-tauri/ffmpeg/*
10 | chmod +x src-tauri/yt-dlp/*
--------------------------------------------------------------------------------
/src/lib/components/ui/table/table-head.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
18 |
19 | |
20 |
--------------------------------------------------------------------------------
/src/lib/components/ui/table/table-header.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/install-windows.bat:
--------------------------------------------------------------------------------
1 | mkdir -p src-tauri/ffmpeg
2 | Invoke-WebRequest -Uri https://github.com/yt-dlp/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip -OutFile "ffmpeg-master-latest-win64-gpl.zip"
3 | unzip ffmpeg-master-latest-win64-gpl.zip
4 | mv ffmpeg-master-latest-win64-gpl/bin/ffmpeg.exe src-tauri/ffmpeg/ffmpeg-x86_64-pc-windows-msvc.exe
5 | mkdir -p src-tauri/yt-dlp
6 | Invoke-WebRequest -Uri https://github.com/yt-dlp/yt-dlp/releases/download/2024.04.09/yt-dlp.exe -OutFile "src-tauri/yt-dlp/yt-dlp.exe"
7 | chmod +x src-tauri/ffmpeg/*
8 | chmod +x src-tauri/yt-dlp/*
--------------------------------------------------------------------------------
/src/lib/components/ui/table/table-row.svelte:
--------------------------------------------------------------------------------
1 |
12 |
13 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/lib/components/ui/label/label.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte:
--------------------------------------------------------------------------------
1 |
13 |
14 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/lib/components/ui/card/card-title.svelte:
--------------------------------------------------------------------------------
1 |
14 |
15 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/lib/components/ui/card/index.ts:
--------------------------------------------------------------------------------
1 | import Root from "./card.svelte";
2 | import Content from "./card-content.svelte";
3 | import Description from "./card-description.svelte";
4 | import Footer from "./card-footer.svelte";
5 | import Header from "./card-header.svelte";
6 | import Title from "./card-title.svelte";
7 |
8 | export {
9 | Root,
10 | Content,
11 | Description,
12 | Footer,
13 | Header,
14 | Title,
15 | //
16 | Root as Card,
17 | Content as CardContent,
18 | Description as CardDescription,
19 | Footer as CardFooter,
20 | Header as CardHeader,
21 | Title as CardTitle,
22 | };
23 |
24 | export type HeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
25 |
--------------------------------------------------------------------------------
/src/lib/components/ui/table/index.ts:
--------------------------------------------------------------------------------
1 | import Root from "./table.svelte";
2 | import Body from "./table-body.svelte";
3 | import Caption from "./table-caption.svelte";
4 | import Cell from "./table-cell.svelte";
5 | import Footer from "./table-footer.svelte";
6 | import Head from "./table-head.svelte";
7 | import Header from "./table-header.svelte";
8 | import Row from "./table-row.svelte";
9 |
10 | export {
11 | Root,
12 | Body,
13 | Caption,
14 | Cell,
15 | Footer,
16 | Head,
17 | Header,
18 | Row,
19 | //
20 | Root as Table,
21 | Body as TableBody,
22 | Caption as TableCaption,
23 | Cell as TableCell,
24 | Footer as TableFooter,
25 | Head as TableHead,
26 | Header as TableHeader,
27 | Row as TableRow,
28 | };
29 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./.svelte-kit/tsconfig.json",
3 | "compilerOptions": {
4 | "allowJs": true,
5 | "checkJs": true,
6 | "esModuleInterop": true,
7 | "forceConsistentCasingInFileNames": true,
8 | "resolveJsonModule": true,
9 | "skipLibCheck": true,
10 | "sourceMap": true,
11 | "strict": true,
12 | "moduleResolution": "bundler"
13 | }
14 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
15 | // except $lib which is handled by https://kit.svelte.dev/docs/configuration#files
16 | //
17 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
18 | // from the referenced tsconfig.json - TypeScript does not merge them in
19 | }
20 |
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | import adapter from '@sveltejs/adapter-static';
2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
3 |
4 | /** @type {import('@sveltejs/kit').Config} */
5 | const config = {
6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors
7 | // for more information about preprocessors
8 | preprocess: [vitePreprocess({})],
9 |
10 | kit: {
11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter.
13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters.
14 | adapter: adapter()
15 | }
16 | };
17 |
18 | export default config;
19 |
--------------------------------------------------------------------------------
/src/lib/components/ui/button/button.svelte:
--------------------------------------------------------------------------------
1 |
15 |
16 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/routes/url/+page.svelte:
--------------------------------------------------------------------------------
1 |
15 |
16 | {#await invoking}
17 |
18 |
19 |
20 | {:then video}
21 | {#if video}
22 |
23 | {/if}
24 | {:catch _}
25 | Invalid video
26 | {/await}
27 |
--------------------------------------------------------------------------------
/src-tauri/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "app"
3 | version = "0.1.0"
4 | description = "A Tauri App"
5 | authors = ["you"]
6 | license = ""
7 | repository = ""
8 | default-run = "app"
9 | edition = "2021"
10 | rust-version = "1.60"
11 |
12 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
13 |
14 | [build-dependencies]
15 | tauri-build = { version = "1.5.1", features = [] }
16 |
17 | [dependencies]
18 | open = "5.1.2"
19 | tauri = { version = "1.6.1", features = [ "updater", "api-all"] }
20 | youtube_dl = "0.10.0"
21 |
22 | [features]
23 | # this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled.
24 | # If you use cargo directly instead of tauri's cli you can use this feature flag to switch between tauri's `dev` and `build` modes.
25 | # DO NOT REMOVE!!
26 | custom-protocol = [ "tauri/custom-protocol" ]
27 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte:
--------------------------------------------------------------------------------
1 |
14 |
15 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/lib/components/ui/input/index.ts:
--------------------------------------------------------------------------------
1 | import Root from "./input.svelte";
2 |
3 | export type FormInputEvent = T & {
4 | currentTarget: EventTarget & HTMLInputElement;
5 | };
6 | export type InputEvents = {
7 | blur: FormInputEvent;
8 | change: FormInputEvent;
9 | click: FormInputEvent;
10 | focus: FormInputEvent;
11 | focusin: FormInputEvent;
12 | focusout: FormInputEvent;
13 | keydown: FormInputEvent;
14 | keypress: FormInputEvent;
15 | keyup: FormInputEvent;
16 | mouseover: FormInputEvent;
17 | mouseenter: FormInputEvent;
18 | mouseleave: FormInputEvent;
19 | mousemove: FormInputEvent;
20 | paste: FormInputEvent;
21 | input: FormInputEvent;
22 | wheel: FormInputEvent;
23 | };
24 |
25 | export {
26 | Root,
27 | //
28 | Root as Input,
29 | };
30 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte:
--------------------------------------------------------------------------------
1 |
16 |
17 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte:
--------------------------------------------------------------------------------
1 |
14 |
15 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # XTuber - Simple YouTube Downloader
2 |
3 | 
4 | 
5 |
6 |
7 |
8 | [Releases](https://github.com/chientrm/xtuber/releases)
9 |
10 | 
11 |
12 | ## Development
13 |
14 | - Install [Tauri](https://tauri.app/v1/guides/getting-started/prerequisites)
15 | - Download yt-dlp and ffmpeg using script:
16 |
17 | - For MacOS: `install-macos.sh`
18 | - For Linux: `install-linux.sh`
19 | - For Windows: `install-windows.bat`
20 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte:
--------------------------------------------------------------------------------
1 |
15 |
16 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte:
--------------------------------------------------------------------------------
1 |
13 |
14 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte:
--------------------------------------------------------------------------------
1 |
13 |
14 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/src/lib/components/ui/input/input.svelte:
--------------------------------------------------------------------------------
1 |
17 |
18 |
43 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "xtuber",
3 | "version": "0.0.1",
4 | "private": true,
5 | "scripts": {
6 | "dev": "vite dev",
7 | "build": "vite build",
8 | "preview": "vite preview",
9 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
10 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
11 | "lint": "prettier --check .",
12 | "format": "prettier --write ."
13 | },
14 | "devDependencies": {
15 | "@iconify/json": "^2.2.199",
16 | "@sveltejs/adapter-static": "^3.0.1",
17 | "@sveltejs/kit": "^2.0.0",
18 | "@sveltejs/vite-plugin-svelte": "^3.0.0",
19 | "@tailwindcss/typography": "^0.5.14",
20 | "@tauri-apps/cli": "^1.6.2",
21 | "autoprefixer": "^10.4.20",
22 | "postcss": "^8.4.32",
23 | "postcss-load-config": "^5.0.2",
24 | "prettier": "^3.1.1",
25 | "prettier-plugin-svelte": "^3.1.2",
26 | "prettier-plugin-tailwindcss": "^0.6.5",
27 | "svelte": "^4.2.7",
28 | "svelte-check": "^3.6.0",
29 | "tailwindcss": "^3.4.9",
30 | "tslib": "^2.4.1",
31 | "typescript": "^5.0.0",
32 | "unplugin-icons": "^0.18.5",
33 | "vite": "^5.0.3"
34 | },
35 | "type": "module",
36 | "dependencies": {
37 | "@tauri-apps/api": "^1.6.0",
38 | "bits-ui": "^0.21.2",
39 | "clsx": "^2.1.0",
40 | "cmdk-sv": "^0.0.17",
41 | "lucide-svelte": "^0.446.0",
42 | "svelte-sonner": "^0.3.22",
43 | "tailwind-merge": "^2.2.2",
44 | "tailwind-variants": "^0.2.1",
45 | "tauri-plugin-upload-api": "github:tauri-apps/tauri-plugin-upload#v1"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/lib/components/ui/dropdown-menu/index.ts:
--------------------------------------------------------------------------------
1 | import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
2 | import Item from "./dropdown-menu-item.svelte";
3 | import Label from "./dropdown-menu-label.svelte";
4 | import Content from "./dropdown-menu-content.svelte";
5 | import Shortcut from "./dropdown-menu-shortcut.svelte";
6 | import RadioItem from "./dropdown-menu-radio-item.svelte";
7 | import Separator from "./dropdown-menu-separator.svelte";
8 | import RadioGroup from "./dropdown-menu-radio-group.svelte";
9 | import SubContent from "./dropdown-menu-sub-content.svelte";
10 | import SubTrigger from "./dropdown-menu-sub-trigger.svelte";
11 | import CheckboxItem from "./dropdown-menu-checkbox-item.svelte";
12 |
13 | const Sub = DropdownMenuPrimitive.Sub;
14 | const Root = DropdownMenuPrimitive.Root;
15 | const Trigger = DropdownMenuPrimitive.Trigger;
16 | const Group = DropdownMenuPrimitive.Group;
17 |
18 | export {
19 | Sub,
20 | Root,
21 | Item,
22 | Label,
23 | Group,
24 | Trigger,
25 | Content,
26 | Shortcut,
27 | Separator,
28 | RadioItem,
29 | SubContent,
30 | SubTrigger,
31 | RadioGroup,
32 | CheckboxItem,
33 | //
34 | Root as DropdownMenu,
35 | Sub as DropdownMenuSub,
36 | Item as DropdownMenuItem,
37 | Label as DropdownMenuLabel,
38 | Group as DropdownMenuGroup,
39 | Content as DropdownMenuContent,
40 | Trigger as DropdownMenuTrigger,
41 | Shortcut as DropdownMenuShortcut,
42 | RadioItem as DropdownMenuRadioItem,
43 | Separator as DropdownMenuSeparator,
44 | RadioGroup as DropdownMenuRadioGroup,
45 | SubContent as DropdownMenuSubContent,
46 | SubTrigger as DropdownMenuSubTrigger,
47 | CheckboxItem as DropdownMenuCheckboxItem,
48 | };
49 |
--------------------------------------------------------------------------------
/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 | Downloads.
11 |
12 |
13 | Thumbnail
14 | Title
15 | Quality
16 | Download
17 |
18 |
19 |
20 | {#each $downloads as { video, videoFormat, downloaded, folder, payload }}
21 |
22 |
23 |
24 |
25 |
26 | {video.title}
27 |
28 | {payload ?? ''}
29 |
30 |
31 | {#if videoFormat}
32 | {videoFormat.format_note}
33 | {:else}
34 | Audio only
35 | {/if}
36 |
37 |
38 | {#if downloaded}
39 |
42 | {:else}
43 |
47 | {/if}
48 |
49 |
50 | {/each}
51 |
52 |
53 |
--------------------------------------------------------------------------------
/src/lib/components/ui/button/index.ts:
--------------------------------------------------------------------------------
1 | import { type VariantProps, tv } from "tailwind-variants";
2 | import type { Button as ButtonPrimitive } from "bits-ui";
3 | import Root from "./button.svelte";
4 |
5 | const buttonVariants = tv({
6 | base: "ring-offset-background focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
7 | variants: {
8 | variant: {
9 | default: "bg-primary text-primary-foreground hover:bg-primary/90",
10 | destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
11 | outline:
12 | "border-input bg-background hover:bg-accent hover:text-accent-foreground border",
13 | secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
14 | ghost: "hover:bg-accent hover:text-accent-foreground",
15 | link: "text-primary underline-offset-4 hover:underline",
16 | },
17 | size: {
18 | default: "h-10 px-4 py-2",
19 | sm: "h-9 rounded-md px-3",
20 | lg: "h-11 rounded-md px-8",
21 | icon: "h-10 w-10",
22 | },
23 | },
24 | defaultVariants: {
25 | variant: "default",
26 | size: "default",
27 | },
28 | });
29 |
30 | type Variant = VariantProps["variant"];
31 | type Size = VariantProps["size"];
32 |
33 | type Props = ButtonPrimitive.Props & {
34 | variant?: Variant;
35 | size?: Size;
36 | };
37 |
38 | type Events = ButtonPrimitive.Events;
39 |
40 | export {
41 | Root,
42 | type Props,
43 | type Events,
44 | //
45 | Root as Button,
46 | type Props as ButtonProps,
47 | type Events as ButtonEvents,
48 | buttonVariants,
49 | };
50 |
--------------------------------------------------------------------------------
/src/lib/downloads.ts:
--------------------------------------------------------------------------------
1 | import { goto } from '$app/navigation';
2 | import { listen, type UnlistenFn } from '@tauri-apps/api/event';
3 | import { invoke } from '@tauri-apps/api/tauri';
4 | import { toast } from 'svelte-sonner';
5 | import { writable } from 'svelte/store';
6 |
7 | let index = 0;
8 |
9 | interface Download {
10 | video: YouTube.Video;
11 | videoFormat?: YouTube.Format;
12 | downloaded: boolean;
13 | folder: string;
14 | payload?: string;
15 | }
16 |
17 | export const downloads = writable([]);
18 |
19 | const unlistenFns: UnlistenFn[] = [];
20 |
21 | export const download = async (
22 | folder: string,
23 | video: YouTube.Video,
24 | videoFormat?: YouTube.Format
25 | ) => {
26 | const download: Download = {
27 | video,
28 | videoFormat,
29 | downloaded: false,
30 | folder
31 | };
32 | downloads.update((items) => [download, ...items]);
33 | const { id } = video;
34 | const fid = videoFormat?.format_id
35 | ? `${videoFormat.format_id}+bestaudio[ext=m4a]`
36 | : 'bestaudio[ext=m4a]';
37 | toast.info(`${video.title} downloading`, {
38 | action: { label: 'See downloads', onClick: () => goto('/') }
39 | });
40 | const key = index.toString();
41 | const unlistenFn = await listen(key, ({ payload }) => {
42 | if (payload === 'done') {
43 | download.downloaded = true;
44 | downloads.update((items) => items);
45 | toast.success(`${video.title} downloaded`, {
46 | action: { label: 'Open folder', onClick: () => invoke('open_dir', { folder }) }
47 | });
48 | } else {
49 | download.payload = payload;
50 | downloads.update((items) => items);
51 | }
52 | });
53 | await invoke('download', { id, fid, folder, key });
54 | index++;
55 | unlistenFns.push(unlistenFn);
56 | };
57 |
58 | export const stopListen = () => unlistenFns.map((f) => f());
59 |
--------------------------------------------------------------------------------
/src/lib/components/ui/Downloader.svelte:
--------------------------------------------------------------------------------
1 |
31 |
32 |
33 |
Downloads
34 |
35 | {#each formats as format}
36 |
40 | {/each}
41 |
42 |
46 |
47 |
48 |
49 | {video.title}
50 |
51 |

52 |
53 |
--------------------------------------------------------------------------------
/src/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from "clsx";
2 | import { twMerge } from "tailwind-merge";
3 | import { cubicOut } from "svelte/easing";
4 | import type { TransitionConfig } from "svelte/transition";
5 |
6 | export function cn(...inputs: ClassValue[]) {
7 | return twMerge(clsx(inputs));
8 | }
9 |
10 | type FlyAndScaleParams = {
11 | y?: number;
12 | x?: number;
13 | start?: number;
14 | duration?: number;
15 | };
16 |
17 | export const flyAndScale = (
18 | node: Element,
19 | params: FlyAndScaleParams = { y: -8, x: 0, start: 0.95, duration: 150 }
20 | ): TransitionConfig => {
21 | const style = getComputedStyle(node);
22 | const transform = style.transform === "none" ? "" : style.transform;
23 |
24 | const scaleConversion = (
25 | valueA: number,
26 | scaleA: [number, number],
27 | scaleB: [number, number]
28 | ) => {
29 | const [minA, maxA] = scaleA;
30 | const [minB, maxB] = scaleB;
31 |
32 | const percentage = (valueA - minA) / (maxA - minA);
33 | const valueB = percentage * (maxB - minB) + minB;
34 |
35 | return valueB;
36 | };
37 |
38 | const styleToString = (
39 | style: Record
40 | ): string => {
41 | return Object.keys(style).reduce((str, key) => {
42 | if (style[key] === undefined) return str;
43 | return str + `${key}:${style[key]};`;
44 | }, "");
45 | };
46 |
47 | return {
48 | duration: params.duration ?? 200,
49 | delay: 0,
50 | css: (t) => {
51 | const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]);
52 | const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]);
53 | const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]);
54 |
55 | return styleToString({
56 | transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`,
57 | opacity: t
58 | });
59 | },
60 | easing: cubicOut
61 | };
62 | };
--------------------------------------------------------------------------------
/src/app.pcss:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | :root {
7 | --background: 0 0% 100%;
8 | --foreground: 222.2 84% 4.9%;
9 |
10 | --muted: 210 40% 96.1%;
11 | --muted-foreground: 215.4 16.3% 46.9%;
12 |
13 | --popover: 0 0% 100%;
14 | --popover-foreground: 222.2 84% 4.9%;
15 |
16 | --card: 0 0% 100%;
17 | --card-foreground: 222.2 84% 4.9%;
18 |
19 | --border: 214.3 31.8% 91.4%;
20 | --input: 214.3 31.8% 91.4%;
21 |
22 | --primary: 222.2 47.4% 11.2%;
23 | --primary-foreground: 210 40% 98%;
24 |
25 | --secondary: 210 40% 96.1%;
26 | --secondary-foreground: 222.2 47.4% 11.2%;
27 |
28 | --accent: 210 40% 96.1%;
29 | --accent-foreground: 222.2 47.4% 11.2%;
30 |
31 | --destructive: 0 72.2% 50.6%;
32 | --destructive-foreground: 210 40% 98%;
33 |
34 | --ring: 222.2 84% 4.9%;
35 |
36 | --radius: 0.5rem;
37 | }
38 |
39 | .dark {
40 | --background: 222.2 84% 4.9%;
41 | --foreground: 210 40% 98%;
42 |
43 | --muted: 217.2 32.6% 17.5%;
44 | --muted-foreground: 215 20.2% 65.1%;
45 |
46 | --popover: 222.2 84% 4.9%;
47 | --popover-foreground: 210 40% 98%;
48 |
49 | --card: 222.2 84% 4.9%;
50 | --card-foreground: 210 40% 98%;
51 |
52 | --border: 217.2 32.6% 17.5%;
53 | --input: 217.2 32.6% 17.5%;
54 |
55 | --primary: 210 40% 98%;
56 | --primary-foreground: 222.2 47.4% 11.2%;
57 |
58 | --secondary: 217.2 32.6% 17.5%;
59 | --secondary-foreground: 210 40% 98%;
60 |
61 | --accent: 217.2 32.6% 17.5%;
62 | --accent-foreground: 210 40% 98%;
63 |
64 | --destructive: 0 62.8% 30.6%;
65 | --destructive-foreground: 210 40% 98%;
66 |
67 | --ring: 212.7 26.8% 83.9%;
68 | }
69 | }
70 |
71 | @layer base {
72 | * {
73 | @apply border-border;
74 | }
75 | body {
76 | @apply bg-background text-foreground;
77 | }
78 | }
--------------------------------------------------------------------------------
/src-tauri/tauri.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../node_modules/@tauri-apps/cli/schema.json",
3 | "build": {
4 | "beforeBuildCommand": "npm run build",
5 | "beforeDevCommand": "npm run dev",
6 | "devPath": "http://localhost:5173",
7 | "distDir": "../build"
8 | },
9 | "package": {
10 | "productName": "XTuber"
11 | },
12 | "tauri": {
13 | "allowlist": {
14 | "all": true
15 | },
16 | "bundle": {
17 | "active": true,
18 | "category": "DeveloperTool",
19 | "copyright": "",
20 | "deb": {
21 | "depends": []
22 | },
23 | "externalBin": [],
24 | "icon": [
25 | "icons/32x32.png",
26 | "icons/128x128.png",
27 | "icons/128x128@2x.png",
28 | "icons/icon.icns",
29 | "icons/icon.ico"
30 | ],
31 | "identifier": "com.chientrm.xtuber",
32 | "longDescription": "",
33 | "macOS": {
34 | "entitlements": null,
35 | "exceptionDomain": "",
36 | "frameworks": [],
37 | "providerShortName": null,
38 | "signingIdentity": null
39 | },
40 | "shortDescription": "",
41 | "targets": "all",
42 | "windows": {
43 | "certificateThumbprint": null,
44 | "digestAlgorithm": "sha256",
45 | "timestampUrl": ""
46 | }
47 | },
48 | "security": {
49 | "csp": null
50 | },
51 | "updater": {
52 | "active": true,
53 | "endpoints": [
54 | "https://github.com/chientrm/xtuber/releases/latest/download/latest.json"
55 | ],
56 | "dialog": true,
57 | "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDJFNDc1QjI0MTg3MDFDODkKUldTSkhIQVlKRnRITHVIb2wrWG9XWVhtVWhKcmNuQlZFdUJUWXFaOHljZkFyeVRJYU4vSWpYQlAK"
58 | },
59 | "windows": [
60 | {
61 | "minWidth": 720,
62 | "minHeight": 480,
63 | "width": 720,
64 | "height": 480,
65 | "fullscreen": false,
66 | "resizable": true,
67 | "title": "XTuber"
68 | }
69 | ]
70 | }
71 | }
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | import { fontFamily } from "tailwindcss/defaultTheme";
2 |
3 | /** @type {import('tailwindcss').Config} */
4 | const config = {
5 | darkMode: ["class"],
6 | content: ["./src/**/*.{html,js,svelte,ts}"],
7 | safelist: ["dark"],
8 | theme: {
9 | container: {
10 | center: true,
11 | padding: "2rem",
12 | screens: {
13 | "2xl": "1400px"
14 | }
15 | },
16 | extend: {
17 | colors: {
18 | border: "hsl(var(--border) / )",
19 | input: "hsl(var(--input) / )",
20 | ring: "hsl(var(--ring) / )",
21 | background: "hsl(var(--background) / )",
22 | foreground: "hsl(var(--foreground) / )",
23 | primary: {
24 | DEFAULT: "hsl(var(--primary) / )",
25 | foreground: "hsl(var(--primary-foreground) / )"
26 | },
27 | secondary: {
28 | DEFAULT: "hsl(var(--secondary) / )",
29 | foreground: "hsl(var(--secondary-foreground) / )"
30 | },
31 | destructive: {
32 | DEFAULT: "hsl(var(--destructive) / )",
33 | foreground: "hsl(var(--destructive-foreground) / )"
34 | },
35 | muted: {
36 | DEFAULT: "hsl(var(--muted) / )",
37 | foreground: "hsl(var(--muted-foreground) / )"
38 | },
39 | accent: {
40 | DEFAULT: "hsl(var(--accent) / )",
41 | foreground: "hsl(var(--accent-foreground) / )"
42 | },
43 | popover: {
44 | DEFAULT: "hsl(var(--popover) / )",
45 | foreground: "hsl(var(--popover-foreground) / )"
46 | },
47 | card: {
48 | DEFAULT: "hsl(var(--card) / )",
49 | foreground: "hsl(var(--card-foreground) / )"
50 | }
51 | },
52 | borderRadius: {
53 | lg: "var(--radius)",
54 | md: "calc(var(--radius) - 2px)",
55 | sm: "calc(var(--radius) - 4px)"
56 | },
57 | fontFamily: {
58 | sans: [...fontFamily.sans]
59 | }
60 | }
61 | },
62 | };
63 |
64 | export default config;
65 |
--------------------------------------------------------------------------------
/src/routes/+layout.svelte:
--------------------------------------------------------------------------------
1 |
27 |
28 |
29 |
30 |
33 |
34 |
35 |
36 | XTuber
37 |
38 | {$downloads.length}
39 |
40 |
41 |
42 |
43 |
47 |
48 |
49 |
53 |
54 |
55 | X
56 | Newsletter
58 |
59 | GitHub
60 |
61 |
62 | Version:
63 | {#await getVersion()}
64 | ...
65 | {:then version}
66 | {version}
67 | {/await}
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: test
2 |
3 | on:
4 | workflow_dispatch:
5 |
6 | jobs:
7 | publish-tauri:
8 | permissions:
9 | contents: write
10 | strategy:
11 | fail-fast: false
12 | matrix:
13 | platform: [macos-latest, ubuntu-20.04, windows-latest]
14 |
15 | runs-on: ${{ matrix.platform }}
16 | steps:
17 | - uses: actions/checkout@v4
18 | with:
19 | lfs: true
20 | fetch-depth: 0
21 | - name: ubuntu-20.04
22 | if: matrix.platform == 'ubuntu-20.04'
23 | run: |
24 | mkdir -p src-tauri/ffmpeg
25 | wget https://github.com/yt-dlp/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz
26 | tar -xf ffmpeg-master-latest-linux64-gpl.tar.xz
27 | mv ffmpeg-master-latest-linux64-gpl/bin/ffmpeg src-tauri/ffmpeg/ffmpeg-x86_64-unknown-linux-gnu
28 | mkdir -p src-tauri/yt-dlp
29 | wget https://github.com/yt-dlp/yt-dlp/releases/download/2024.04.09/yt-dlp_linux -O src-tauri/yt-dlp/yt-dlp_linux
30 | # - name: ubuntu-20.04/arm64
31 | # if: ${{ (matrix.platform == 'ubuntu-20.04/arm64') && (matrix.arch == 'arm64') }}
32 | # run: |
33 | # mkdir -p src-tauri/ffmpeg
34 | # wget https://github.com/yt-dlp/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linuxarm64-gpl.tar.xz
35 | # tar -xf ffmpeg-master-latest-linuxarm64-gpl.tar.xz
36 | # mv ffmpeg-master-latest-linuxarm64-gpl/bin/ffmpeg src-tauri/ffmpeg/ffmpeg-arm-unknown-linux-gnu
37 | - name: windows-latest
38 | if: matrix.platform == 'windows-latest'
39 | run: |
40 | mkdir -p src-tauri/ffmpeg
41 | Invoke-WebRequest -Uri https://github.com/yt-dlp/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip -OutFile "ffmpeg-master-latest-win64-gpl.zip"
42 | unzip ffmpeg-master-latest-win64-gpl.zip
43 | mv ffmpeg-master-latest-win64-gpl/bin/ffmpeg.exe src-tauri/ffmpeg/ffmpeg-x86_64-pc-windows-msvc.exe
44 | mkdir -p src-tauri/yt-dlp
45 | Invoke-WebRequest -Uri https://github.com/yt-dlp/yt-dlp/releases/download/2024.04.09/yt-dlp.exe -OutFile "src-tauri/yt-dlp/yt-dlp.exe"
46 | # - name: windows-latest/arm64
47 | # if: ${{ (matrix.platform == 'windows-latest/arm64') && (matrix.arch == 'arm64') }}
48 | # run: |
49 | # mkdir -p src-tauri/ffmpeg
50 | # Invoke-WebRequest -Uri https://github.com/yt-dlp/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-winarm64-gpl.zip -OutFile "ffmpeg-master-latest-winarm64-gpl.zip"
51 | # unzip ffmpeg-master-latest-winarm64-gpl.zip
52 | # mv ffmpeg-master-latest-winarm64-gpl/bin/ffmpeg.exe src-tauri/ffmpeg/ffmpeg-arm-windows-mvsc.exe
53 | - name: macos-latest
54 | if: matrix.platform == 'macos-latest'
55 | run: |
56 | mkdir -p src-tauri/ffmpeg
57 | wget https://www.osxexperts.net/ffmpeg7intel.zip
58 | unzip ffmpeg7intel.zip
59 | mv ffmpeg src-tauri/ffmpeg/ffmpeg-x86_64-apple-darwin
60 | mkdir -p src-tauri/yt-dlp
61 | wget https://github.com/yt-dlp/yt-dlp/releases/download/2024.04.09/yt-dlp_macos -O src-tauri/yt-dlp/yt-dlp_macos
62 | # - name: macos-latest/arm64
63 | # if: ${{ (matrix.platform == 'macos-latest/arm64') && (matrix.arch == 'arm64') }}
64 | # run: |
65 | # mkdir -p src-tauri/ffmpeg
66 | # wget https://www.osxexperts.net/ffmpeg7arm.zip
67 | # unzip ffmpeg7arm.zip
68 | # mv ffmpeg src-tauri/ffmpeg/ffmpeg-arm-unknown-linux-gnu
69 | - run: chmod +x src-tauri/ffmpeg/*
70 | - run: chmod +x src-tauri/yt-dlp/*
71 | - run: ls src-tauri/ffmpeg
72 | - run: ls src-tauri/yt-dlp
73 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | push:
5 | tags:
6 | - '*'
7 |
8 | jobs:
9 | prepare:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - id: get_tag
13 | run: echo ::set-output name=TAG::${GITHUB_REF/refs\/tags\//}
14 | outputs:
15 | TAG: ${{ steps.get_tag.outputs.TAG }}
16 | publish-tauri:
17 | permissions:
18 | contents: write
19 | strategy:
20 | fail-fast: false
21 | matrix:
22 | platform: [macos-latest, ubuntu-20.04, windows-latest]
23 |
24 | runs-on: ${{ matrix.platform }}
25 | needs: prepare
26 | steps:
27 | - uses: actions/checkout@v4
28 | with:
29 | lfs: true
30 | fetch-depth: 0
31 | - name: Install Rust
32 | uses: dtolnay/rust-toolchain@stable
33 | - name: Setup node
34 | uses: actions/setup-node@v4
35 | with:
36 | node-version: 20
37 |
38 | - name: Setup and run pnpm install
39 | uses: pnpm/action-setup@v4
40 | with:
41 | version: 9
42 | run_install: |
43 | - recursive: true
44 | args: [--frozen-lockfile, --strict-peer-dependencies]
45 |
46 | - name: Install dependencies (ubuntu only)
47 | if: matrix.platform == 'ubuntu-20.04'
48 | run: |
49 | sudo apt-get update
50 | sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf
51 | - run: cd src-tauri && cargo install cargo-bump --locked && cargo bump ${{ needs.prepare.outputs.TAG }}
52 | - name: ubuntu-20.04
53 | if: matrix.platform == 'ubuntu-20.04'
54 | run: |
55 | mkdir -p src-tauri/ffmpeg
56 | wget https://github.com/yt-dlp/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz
57 | tar -xf ffmpeg-master-latest-linux64-gpl.tar.xz
58 | mv ffmpeg-master-latest-linux64-gpl/bin/ffmpeg src-tauri/ffmpeg/ffmpeg-x86_64-unknown-linux-gnu
59 | mkdir -p src-tauri/yt-dlp
60 | wget https://github.com/yt-dlp/yt-dlp/releases/download/2024.04.09/yt-dlp_linux -O src-tauri/yt-dlp/yt-dlp_linux
61 | - name: windows-latest
62 | if: matrix.platform == 'windows-latest'
63 | run: |
64 | mkdir -p src-tauri/ffmpeg
65 | Invoke-WebRequest -Uri https://github.com/yt-dlp/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip -OutFile "ffmpeg-master-latest-win64-gpl.zip"
66 | unzip ffmpeg-master-latest-win64-gpl.zip
67 | mv ffmpeg-master-latest-win64-gpl/bin/ffmpeg.exe src-tauri/ffmpeg/ffmpeg-x86_64-pc-windows-msvc.exe
68 | mkdir -p src-tauri/yt-dlp
69 | Invoke-WebRequest -Uri https://github.com/yt-dlp/yt-dlp/releases/download/2024.04.09/yt-dlp.exe -OutFile "src-tauri/yt-dlp/yt-dlp.exe"
70 | - name: macos-latest
71 | if: matrix.platform == 'macos-latest'
72 | run: |
73 | mkdir -p src-tauri/ffmpeg
74 | wget https://www.osxexperts.net/ffmpeg7intel.zip
75 | unzip ffmpeg7intel.zip
76 | mv ffmpeg src-tauri/ffmpeg/ffmpeg-x86_64-apple-darwin
77 | mkdir -p src-tauri/yt-dlp
78 | wget https://github.com/yt-dlp/yt-dlp/releases/download/2024.04.09/yt-dlp_macos -O src-tauri/yt-dlp/yt-dlp_macos
79 | - run: chmod +x src-tauri/ffmpeg/*
80 | - run: chmod +x src-tauri/yt-dlp/*
81 | - name: Build and upload a GitHub release
82 | uses: tauri-apps/tauri-action@v0
83 | env:
84 | TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
85 | TAURI_KEY_PASSWORD:
86 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
87 | with:
88 | tagName: __VERSION__
89 | releaseName: 'XTuber __VERSION__'
90 | releaseBody: |
91 | New features and bug fixes.
92 | releaseDraft: false
93 | prerelease: false
94 | includeUpdaterJson: true
95 |
--------------------------------------------------------------------------------
/src-tauri/src/main.rs:
--------------------------------------------------------------------------------
1 | // Prevents additional console window on Windows in release, DO NOT REMOVE!!
2 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
3 |
4 | use open;
5 | #[cfg(target_os = "windows")]
6 | use std::os::windows::process::CommandExt;
7 | use std::{
8 | io::{BufRead, BufReader},
9 | path::PathBuf,
10 | process::{Command, Stdio},
11 | thread,
12 | };
13 | use tauri::{Manager, State, Window};
14 | use youtube_dl::{SingleVideo, YoutubeDl};
15 |
16 | #[cfg(target_os = "windows")]
17 | const CREATE_NO_WINDOW: u32 = 0x08000000;
18 |
19 | struct AppState {
20 | ytdlp: PathBuf,
21 | ffmpeg: PathBuf,
22 | }
23 |
24 | #[tauri::command]
25 | async fn get_info(id: &str, state: State<'_, AppState>) -> Result {
26 | let url = format!("https://youtube.com/watch?v={}", id);
27 | let output = YoutubeDl::new(url)
28 | .youtube_dl_path(&state.ytdlp)
29 | .socket_timeout("15")
30 | .run()
31 | .map_err(|e| format!("youtube_dl error: {}", e))?;
32 | let video = output
33 | .into_single_video()
34 | .ok_or_else(|| "Failed to get video info".to_string())?;
35 | Ok(video)
36 | }
37 |
38 | #[tauri::command]
39 | fn download(
40 | id: &str,
41 | fid: &str,
42 | folder: &str,
43 | key: &str,
44 | state: State<'_, AppState>,
45 | window: Window,
46 | ) -> Result<(), String> {
47 | let url = format!("https://youtube.com/watch?v={}", id);
48 | let mut command = Command::new(&state.ytdlp);
49 | #[cfg(target_os = "windows")]
50 | command.creation_flags(CREATE_NO_WINDOW);
51 | let mut child = command
52 | .arg("--force-overwrites")
53 | .arg("--socket-timeout")
54 | .arg("15")
55 | .arg("-f")
56 | .arg(fid)
57 | .arg(url)
58 | .arg("--ffmpeg-location")
59 | .arg(state.ffmpeg.clone())
60 | .arg("-q")
61 | .arg("--progress")
62 | .arg("--no-warnings")
63 | .arg("--newline")
64 | .arg("--progress-template")
65 | .arg(
66 | "%(progress._percent_str)s of %(progress._total_bytes_str)s at %(progress._speed_str)s",
67 | )
68 | .current_dir(folder)
69 | .stdout(Stdio::piped())
70 | .spawn()
71 | .expect("Failed to execute command");
72 | let stdout = BufReader::new(child.stdout.take().unwrap());
73 | let key = key.to_string();
74 | thread::spawn(move || {
75 | for line in stdout.lines() {
76 | let _ = window.emit(&key, line.unwrap());
77 | }
78 | let _ = window.emit(&key, "done");
79 | });
80 | Ok(())
81 | }
82 |
83 | #[tauri::command]
84 | fn open_dir(folder: &str) -> Result<(), String> {
85 | let _ = open::that(folder);
86 | Ok(())
87 | }
88 |
89 | fn main() {
90 | tauri::Builder::default()
91 | .setup(|app| {
92 | let path_resolver = app.path_resolver();
93 | #[cfg(target_os = "linux")]
94 | let ytdlp = path_resolver
95 | .resolve_resource("yt-dlp/yt-dlp_linux")
96 | .expect("Failed to get yt-dlp");
97 | #[cfg(target_os = "macos")]
98 | let ytdlp = path_resolver
99 | .resolve_resource("yt-dlp/yt-dlp_macos")
100 | .expect("Failed to get yt-dlp");
101 | #[cfg(target_os = "windows")]
102 | let ytdlp = path_resolver
103 | .resolve_resource("yt-dlp/yt-dlp.exe")
104 | .expect("Failed to get yt-dlp");
105 | #[cfg(target_os = "linux")]
106 | let ffmpeg = path_resolver
107 | .resolve_resource("ffmpeg/ffmpeg-x86_64-unknown-linux-gnu")
108 | .expect("Failed to get ffmpeg");
109 | #[cfg(target_os = "macos")]
110 | let ffmpeg = path_resolver
111 | .resolve_resource("ffmpeg/ffmpeg-x86_64-apple-darwin")
112 | .expect("Failed to get ffmpeg");
113 | #[cfg(target_os = "windows")]
114 | let ffmpeg = path_resolver
115 | .resolve_resource("ffmpeg/ffmpeg-x86_64-pc-windows-msvc.exe")
116 | .expect("Failed to get ffmpeg");
117 | let state = AppState { ytdlp, ffmpeg };
118 | app.manage(state);
119 | Ok(())
120 | })
121 | .invoke_handler(tauri::generate_handler![get_info, download, open_dir])
122 | .run(tauri::generate_context!())
123 | .expect("error while running tauri application");
124 | }
125 |
--------------------------------------------------------------------------------
/src/app.d.ts:
--------------------------------------------------------------------------------
1 | import 'unplugin-icons/types/svelte';
2 | // See https://kit.svelte.dev/docs/types#app
3 | // for information about these interfaces
4 | declare global {
5 | namespace App {
6 | // interface Error {}
7 | // interface Locals {}
8 | // interface PageData {}
9 | // interface PageState {}
10 | // interface Platform {}
11 | }
12 |
13 | namespace YouTube {
14 | interface Video {
15 | abr: number;
16 | acodec: Acodec;
17 | age_limit: number;
18 | album: null;
19 | album_artist: null;
20 | album_type: null;
21 | alt_title: null;
22 | artist: null;
23 | asr: number;
24 | automatic_captions: { [key: string]: AutomaticCaption[] };
25 | average_rating: null;
26 | categories: string[];
27 | channel: string;
28 | channel_id: string;
29 | channel_url: string;
30 | chapter: null;
31 | chapter_id: null;
32 | chapter_number: null;
33 | chapters: Chapter[];
34 | comment_count: number;
35 | comments: null;
36 | container: null;
37 | creator: null;
38 | description: string;
39 | disc_number: null;
40 | dislike_count: null;
41 | display_id: string;
42 | downloader_options: null;
43 | duration: number;
44 | duration_string: string;
45 | end_time: null;
46 | episode: null;
47 | episode_id: null;
48 | episode_number: null;
49 | epoch: number;
50 | ext: VideoEXT;
51 | extractor: string;
52 | extractor_key: string;
53 | filesize: null;
54 | filesize_approx: number;
55 | format: string;
56 | format_id: string;
57 | format_note: string;
58 | formats: Format[];
59 | fps: number;
60 | fragment_base_url: null;
61 | fragments: null;
62 | genre: null;
63 | heatmap: null;
64 | height: number;
65 | http_headers: null;
66 | id: string;
67 | is_live: boolean;
68 | language: Language;
69 | language_preference: null;
70 | license: string;
71 | like_count: number;
72 | location: null;
73 | manifest_url: null;
74 | no_resume: null;
75 | player_url: null;
76 | playlist: null;
77 | playlist_id: null;
78 | playlist_index: null;
79 | playlist_title: null;
80 | playlist_uploader: null;
81 | playlist_uploader_id: null;
82 | preference: null;
83 | protocol: string;
84 | quality: null;
85 | release_date: null;
86 | release_year: null;
87 | repost_count: null;
88 | requested_subtitles: null;
89 | resolution: string;
90 | season: null;
91 | season_id: null;
92 | season_number: null;
93 | series: null;
94 | source_preference: null;
95 | start_time: null;
96 | stretched_ratio: null;
97 | subtitles: Subtitles;
98 | tags: string[];
99 | tbr: number;
100 | thumbnail: string;
101 | thumbnails: Thumbnail[];
102 | timestamp: null;
103 | title: string;
104 | track: null;
105 | track_id: null;
106 | track_number: null;
107 | upload_date: string;
108 | uploader: string;
109 | uploader_id: string;
110 | uploader_url: string;
111 | url: null;
112 | vbr: number;
113 | vcodec: string;
114 | view_count: number;
115 | webpage_url: string;
116 | width: number;
117 | }
118 |
119 | enum Acodec {
120 | Mp4A402 = 'mp4a.40.2',
121 | Mp4A405 = 'mp4a.40.5',
122 | Opus = 'opus'
123 | }
124 |
125 | interface AutomaticCaption {
126 | data: null;
127 | ext: AutomaticCaptionEXT;
128 | url: string;
129 | }
130 |
131 | enum AutomaticCaptionEXT {
132 | Json3 = 'json3',
133 | Srv1 = 'srv1',
134 | Srv2 = 'srv2',
135 | Srv3 = 'srv3',
136 | Ttml = 'ttml',
137 | Vtt = 'vtt'
138 | }
139 |
140 | interface Chapter {
141 | end_time: number;
142 | start_time: number;
143 | title: string;
144 | }
145 |
146 | enum VideoEXT {
147 | M4A = 'm4a',
148 | Mhtml = 'mhtml',
149 | Mp4 = 'mp4',
150 | Webm = 'webm'
151 | }
152 |
153 | interface Format {
154 | abr: number | null;
155 | acodec: Acodec | null;
156 | asr: number | null;
157 | container: Container | null;
158 | downloader_options: DownloaderOptions | null;
159 | ext: VideoEXT;
160 | filesize: number | null;
161 | filesize_approx: number | null;
162 | format: string;
163 | format_id: string;
164 | format_note: null | string;
165 | fps: number | null;
166 | fragment_base_url: null;
167 | fragments: Fragment[] | null;
168 | height: number | null;
169 | http_headers: HTTPHeaders;
170 | language: Language | null;
171 | language_preference: number | null;
172 | manifest_url: null | string;
173 | no_resume: null;
174 | player_url: null;
175 | preference: null;
176 | protocol: Protocol;
177 | quality: number | null;
178 | resolution: string;
179 | source_preference: number | null;
180 | stretched_ratio: null;
181 | tbr: number | null;
182 | url: string;
183 | vbr: number | null;
184 | vcodec: null | string;
185 | width: number | null;
186 | }
187 |
188 | enum Container {
189 | M4ADash = 'm4a_dash',
190 | Mp4Dash = 'mp4_dash',
191 | WebmDash = 'webm_dash'
192 | }
193 |
194 | interface DownloaderOptions {
195 | http_chunk_size: number;
196 | }
197 |
198 | interface Fragment {
199 | duration: number;
200 | filesize: null;
201 | path: null;
202 | url: string;
203 | }
204 |
205 | interface HTTPHeaders {
206 | Accept: Accept;
207 | 'Accept-Language': AcceptLanguage;
208 | 'Sec-Fetch-Mode': SECFetchMode;
209 | 'User-Agent': string;
210 | }
211 |
212 | enum Accept {
213 | TextHTMLApplicationXHTMLXMLApplicationXMLQ09Q08 = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
214 | }
215 |
216 | enum AcceptLanguage {
217 | EnUsEnQ05 = 'en-us,en;q=0.5'
218 | }
219 |
220 | enum SECFetchMode {
221 | Navigate = 'navigate'
222 | }
223 |
224 | enum Language {
225 | Vi = 'vi'
226 | }
227 |
228 | enum Protocol {
229 | HTTPS = 'https',
230 | M3U8Native = 'm3u8_native',
231 | Mhtml = 'mhtml'
232 | }
233 |
234 | interface Subtitles {}
235 |
236 | interface Thumbnail {
237 | filesize: null;
238 | height: number | null;
239 | id: string;
240 | preference: number;
241 | url: string;
242 | width: number | null;
243 | }
244 | }
245 | }
246 |
247 | export {};
248 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 |
635 | Copyright (C)
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | Copyright (C)
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | '@tauri-apps/api':
12 | specifier: ^1.6.0
13 | version: 1.6.0
14 | bits-ui:
15 | specifier: ^0.21.2
16 | version: 0.21.2(svelte@4.2.12)
17 | clsx:
18 | specifier: ^2.1.0
19 | version: 2.1.0
20 | cmdk-sv:
21 | specifier: ^0.0.17
22 | version: 0.0.17(svelte@4.2.12)
23 | lucide-svelte:
24 | specifier: ^0.446.0
25 | version: 0.446.0(svelte@4.2.12)
26 | svelte-sonner:
27 | specifier: ^0.3.22
28 | version: 0.3.22(svelte@4.2.12)
29 | tailwind-merge:
30 | specifier: ^2.2.2
31 | version: 2.2.2
32 | tailwind-variants:
33 | specifier: ^0.2.1
34 | version: 0.2.1(tailwindcss@3.4.13)
35 | tauri-plugin-upload-api:
36 | specifier: github:tauri-apps/tauri-plugin-upload#v1
37 | version: https://codeload.github.com/tauri-apps/tauri-plugin-upload/tar.gz/56d958697109d854bca19050403b017c9a28b434
38 | devDependencies:
39 | '@iconify/json':
40 | specifier: ^2.2.199
41 | version: 2.2.199
42 | '@sveltejs/adapter-static':
43 | specifier: ^3.0.1
44 | version: 3.0.1(@sveltejs/kit@2.5.5(@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@5.2.8))(svelte@4.2.12)(vite@5.2.8))
45 | '@sveltejs/kit':
46 | specifier: ^2.0.0
47 | version: 2.5.5(@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@5.2.8))(svelte@4.2.12)(vite@5.2.8)
48 | '@sveltejs/vite-plugin-svelte':
49 | specifier: ^3.0.0
50 | version: 3.0.2(svelte@4.2.12)(vite@5.2.8)
51 | '@tailwindcss/typography':
52 | specifier: ^0.5.14
53 | version: 0.5.15(tailwindcss@3.4.13)
54 | '@tauri-apps/cli':
55 | specifier: ^1.6.2
56 | version: 1.6.2
57 | autoprefixer:
58 | specifier: ^10.4.20
59 | version: 10.4.20(postcss@8.4.38)
60 | postcss:
61 | specifier: ^8.4.32
62 | version: 8.4.38
63 | postcss-load-config:
64 | specifier: ^5.0.2
65 | version: 5.0.3(jiti@2.0.0)(postcss@8.4.38)
66 | prettier:
67 | specifier: ^3.1.1
68 | version: 3.2.5
69 | prettier-plugin-svelte:
70 | specifier: ^3.1.2
71 | version: 3.2.2(prettier@3.2.5)(svelte@4.2.12)
72 | prettier-plugin-tailwindcss:
73 | specifier: ^0.6.5
74 | version: 0.6.8(prettier-plugin-svelte@3.2.2(prettier@3.2.5)(svelte@4.2.12))(prettier@3.2.5)
75 | svelte:
76 | specifier: ^4.2.7
77 | version: 4.2.12
78 | svelte-check:
79 | specifier: ^3.6.0
80 | version: 3.6.9(postcss-load-config@5.0.3(jiti@2.0.0)(postcss@8.4.38))(postcss@8.4.38)(svelte@4.2.12)
81 | tailwindcss:
82 | specifier: ^3.4.9
83 | version: 3.4.13
84 | tslib:
85 | specifier: ^2.4.1
86 | version: 2.6.2
87 | typescript:
88 | specifier: ^5.0.0
89 | version: 5.4.4
90 | unplugin-icons:
91 | specifier: ^0.18.5
92 | version: 0.18.5
93 | vite:
94 | specifier: ^5.0.3
95 | version: 5.2.8
96 |
97 | packages:
98 |
99 | '@alloc/quick-lru@5.2.0':
100 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
101 | engines: {node: '>=10'}
102 |
103 | '@ampproject/remapping@2.3.0':
104 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
105 | engines: {node: '>=6.0.0'}
106 |
107 | '@antfu/install-pkg@0.1.1':
108 | resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==}
109 |
110 | '@antfu/install-pkg@0.3.2':
111 | resolution: {integrity: sha512-FFYqME8+UHlPnRlX/vn+8cTD4Wo/nG/lzRxpABs3XANBmdJdNImVz3QvjNAE/W3PSCNbG387FOz8o5WelnWOlg==}
112 |
113 | '@antfu/utils@0.7.7':
114 | resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==}
115 |
116 | '@babel/runtime@7.24.4':
117 | resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==}
118 | engines: {node: '>=6.9.0'}
119 |
120 | '@esbuild/aix-ppc64@0.20.2':
121 | resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
122 | engines: {node: '>=12'}
123 | cpu: [ppc64]
124 | os: [aix]
125 |
126 | '@esbuild/android-arm64@0.20.2':
127 | resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
128 | engines: {node: '>=12'}
129 | cpu: [arm64]
130 | os: [android]
131 |
132 | '@esbuild/android-arm@0.20.2':
133 | resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
134 | engines: {node: '>=12'}
135 | cpu: [arm]
136 | os: [android]
137 |
138 | '@esbuild/android-x64@0.20.2':
139 | resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
140 | engines: {node: '>=12'}
141 | cpu: [x64]
142 | os: [android]
143 |
144 | '@esbuild/darwin-arm64@0.20.2':
145 | resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
146 | engines: {node: '>=12'}
147 | cpu: [arm64]
148 | os: [darwin]
149 |
150 | '@esbuild/darwin-x64@0.20.2':
151 | resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
152 | engines: {node: '>=12'}
153 | cpu: [x64]
154 | os: [darwin]
155 |
156 | '@esbuild/freebsd-arm64@0.20.2':
157 | resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
158 | engines: {node: '>=12'}
159 | cpu: [arm64]
160 | os: [freebsd]
161 |
162 | '@esbuild/freebsd-x64@0.20.2':
163 | resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
164 | engines: {node: '>=12'}
165 | cpu: [x64]
166 | os: [freebsd]
167 |
168 | '@esbuild/linux-arm64@0.20.2':
169 | resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
170 | engines: {node: '>=12'}
171 | cpu: [arm64]
172 | os: [linux]
173 |
174 | '@esbuild/linux-arm@0.20.2':
175 | resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
176 | engines: {node: '>=12'}
177 | cpu: [arm]
178 | os: [linux]
179 |
180 | '@esbuild/linux-ia32@0.20.2':
181 | resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
182 | engines: {node: '>=12'}
183 | cpu: [ia32]
184 | os: [linux]
185 |
186 | '@esbuild/linux-loong64@0.20.2':
187 | resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
188 | engines: {node: '>=12'}
189 | cpu: [loong64]
190 | os: [linux]
191 |
192 | '@esbuild/linux-mips64el@0.20.2':
193 | resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
194 | engines: {node: '>=12'}
195 | cpu: [mips64el]
196 | os: [linux]
197 |
198 | '@esbuild/linux-ppc64@0.20.2':
199 | resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
200 | engines: {node: '>=12'}
201 | cpu: [ppc64]
202 | os: [linux]
203 |
204 | '@esbuild/linux-riscv64@0.20.2':
205 | resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
206 | engines: {node: '>=12'}
207 | cpu: [riscv64]
208 | os: [linux]
209 |
210 | '@esbuild/linux-s390x@0.20.2':
211 | resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
212 | engines: {node: '>=12'}
213 | cpu: [s390x]
214 | os: [linux]
215 |
216 | '@esbuild/linux-x64@0.20.2':
217 | resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
218 | engines: {node: '>=12'}
219 | cpu: [x64]
220 | os: [linux]
221 |
222 | '@esbuild/netbsd-x64@0.20.2':
223 | resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
224 | engines: {node: '>=12'}
225 | cpu: [x64]
226 | os: [netbsd]
227 |
228 | '@esbuild/openbsd-x64@0.20.2':
229 | resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
230 | engines: {node: '>=12'}
231 | cpu: [x64]
232 | os: [openbsd]
233 |
234 | '@esbuild/sunos-x64@0.20.2':
235 | resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
236 | engines: {node: '>=12'}
237 | cpu: [x64]
238 | os: [sunos]
239 |
240 | '@esbuild/win32-arm64@0.20.2':
241 | resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
242 | engines: {node: '>=12'}
243 | cpu: [arm64]
244 | os: [win32]
245 |
246 | '@esbuild/win32-ia32@0.20.2':
247 | resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
248 | engines: {node: '>=12'}
249 | cpu: [ia32]
250 | os: [win32]
251 |
252 | '@esbuild/win32-x64@0.20.2':
253 | resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
254 | engines: {node: '>=12'}
255 | cpu: [x64]
256 | os: [win32]
257 |
258 | '@floating-ui/core@1.6.0':
259 | resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==}
260 |
261 | '@floating-ui/dom@1.6.3':
262 | resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==}
263 |
264 | '@floating-ui/utils@0.2.1':
265 | resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==}
266 |
267 | '@iconify/json@2.2.199':
268 | resolution: {integrity: sha512-dmdbHES8HmvGYwdbse8g7ZO4Grvi35NGuaVA8+R5alkf1Ky6Y6atlzQJPhj7a6UN/+gM5qOzQ3Tcc6Fna7Rv5A==}
269 |
270 | '@iconify/types@2.0.0':
271 | resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
272 |
273 | '@iconify/utils@2.1.22':
274 | resolution: {integrity: sha512-6UHVzTVXmvO8uS6xFF+L/QTSpTzA/JZxtgU+KYGFyDYMEObZ1bu/b5l+zNJjHy+0leWjHI+C0pXlzGvv3oXZMA==}
275 |
276 | '@internationalized/date@3.5.2':
277 | resolution: {integrity: sha512-vo1yOMUt2hzp63IutEaTUxROdvQg1qlMRsbCvbay2AK2Gai7wIgCyK5weEX3nHkiLgo4qCXHijFNC/ILhlRpOQ==}
278 |
279 | '@isaacs/cliui@8.0.2':
280 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
281 | engines: {node: '>=12'}
282 |
283 | '@jridgewell/gen-mapping@0.3.5':
284 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
285 | engines: {node: '>=6.0.0'}
286 |
287 | '@jridgewell/resolve-uri@3.1.2':
288 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
289 | engines: {node: '>=6.0.0'}
290 |
291 | '@jridgewell/set-array@1.2.1':
292 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
293 | engines: {node: '>=6.0.0'}
294 |
295 | '@jridgewell/sourcemap-codec@1.4.15':
296 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
297 |
298 | '@jridgewell/trace-mapping@0.3.25':
299 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
300 |
301 | '@melt-ui/svelte@0.61.2':
302 | resolution: {integrity: sha512-BHkD9G31zQBToA4euDRBgTQRvWxT9scufOVCXgDO6HKTvyxFspbWT2bgiSFqAK4BbAGDn9Ao36Q8F9O71KN4OQ==}
303 | peerDependencies:
304 | svelte: '>=3 <5'
305 |
306 | '@melt-ui/svelte@0.76.2':
307 | resolution: {integrity: sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==}
308 | peerDependencies:
309 | svelte: '>=3 <5'
310 |
311 | '@nodelib/fs.scandir@2.1.5':
312 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
313 | engines: {node: '>= 8'}
314 |
315 | '@nodelib/fs.stat@2.0.5':
316 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
317 | engines: {node: '>= 8'}
318 |
319 | '@nodelib/fs.walk@1.2.8':
320 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
321 | engines: {node: '>= 8'}
322 |
323 | '@pkgjs/parseargs@0.11.0':
324 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
325 | engines: {node: '>=14'}
326 |
327 | '@polka/url@1.0.0-next.25':
328 | resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
329 |
330 | '@rollup/rollup-android-arm-eabi@4.14.1':
331 | resolution: {integrity: sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==}
332 | cpu: [arm]
333 | os: [android]
334 |
335 | '@rollup/rollup-android-arm64@4.14.1':
336 | resolution: {integrity: sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==}
337 | cpu: [arm64]
338 | os: [android]
339 |
340 | '@rollup/rollup-darwin-arm64@4.14.1':
341 | resolution: {integrity: sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==}
342 | cpu: [arm64]
343 | os: [darwin]
344 |
345 | '@rollup/rollup-darwin-x64@4.14.1':
346 | resolution: {integrity: sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==}
347 | cpu: [x64]
348 | os: [darwin]
349 |
350 | '@rollup/rollup-linux-arm-gnueabihf@4.14.1':
351 | resolution: {integrity: sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==}
352 | cpu: [arm]
353 | os: [linux]
354 |
355 | '@rollup/rollup-linux-arm64-gnu@4.14.1':
356 | resolution: {integrity: sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==}
357 | cpu: [arm64]
358 | os: [linux]
359 |
360 | '@rollup/rollup-linux-arm64-musl@4.14.1':
361 | resolution: {integrity: sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==}
362 | cpu: [arm64]
363 | os: [linux]
364 |
365 | '@rollup/rollup-linux-powerpc64le-gnu@4.14.1':
366 | resolution: {integrity: sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==}
367 | cpu: [ppc64le]
368 | os: [linux]
369 |
370 | '@rollup/rollup-linux-riscv64-gnu@4.14.1':
371 | resolution: {integrity: sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==}
372 | cpu: [riscv64]
373 | os: [linux]
374 |
375 | '@rollup/rollup-linux-s390x-gnu@4.14.1':
376 | resolution: {integrity: sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==}
377 | cpu: [s390x]
378 | os: [linux]
379 |
380 | '@rollup/rollup-linux-x64-gnu@4.14.1':
381 | resolution: {integrity: sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==}
382 | cpu: [x64]
383 | os: [linux]
384 |
385 | '@rollup/rollup-linux-x64-musl@4.14.1':
386 | resolution: {integrity: sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==}
387 | cpu: [x64]
388 | os: [linux]
389 |
390 | '@rollup/rollup-win32-arm64-msvc@4.14.1':
391 | resolution: {integrity: sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==}
392 | cpu: [arm64]
393 | os: [win32]
394 |
395 | '@rollup/rollup-win32-ia32-msvc@4.14.1':
396 | resolution: {integrity: sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==}
397 | cpu: [ia32]
398 | os: [win32]
399 |
400 | '@rollup/rollup-win32-x64-msvc@4.14.1':
401 | resolution: {integrity: sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==}
402 | cpu: [x64]
403 | os: [win32]
404 |
405 | '@sveltejs/adapter-static@3.0.1':
406 | resolution: {integrity: sha512-6lMvf7xYEJ+oGeR5L8DFJJrowkefTK6ZgA4JiMqoClMkKq0s6yvsd3FZfCFvX1fQ0tpCD7fkuRVHsnUVgsHyNg==}
407 | peerDependencies:
408 | '@sveltejs/kit': ^2.0.0
409 |
410 | '@sveltejs/kit@2.5.5':
411 | resolution: {integrity: sha512-ULe3PB00q4+wYRL+IS5FDPsCEVnhEITofm7b9Yz8malcH3r1SAnW/JJ6T13hIMeu8QNRIuVQWo+P4+2VklbnLQ==}
412 | engines: {node: '>=18.13'}
413 | hasBin: true
414 | peerDependencies:
415 | '@sveltejs/vite-plugin-svelte': ^3.0.0
416 | svelte: ^4.0.0 || ^5.0.0-next.0
417 | vite: ^5.0.3
418 |
419 | '@sveltejs/vite-plugin-svelte-inspector@2.0.0':
420 | resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==}
421 | engines: {node: ^18.0.0 || >=20}
422 | peerDependencies:
423 | '@sveltejs/vite-plugin-svelte': ^3.0.0
424 | svelte: ^4.0.0 || ^5.0.0-next.0
425 | vite: ^5.0.0
426 |
427 | '@sveltejs/vite-plugin-svelte@3.0.2':
428 | resolution: {integrity: sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==}
429 | engines: {node: ^18.0.0 || >=20}
430 | peerDependencies:
431 | svelte: ^4.0.0 || ^5.0.0-next.0
432 | vite: ^5.0.0
433 |
434 | '@swc/helpers@0.5.8':
435 | resolution: {integrity: sha512-lruDGw3pnfM3wmZHeW7JuhkGQaJjPyiKjxeGhdmfoOT53Ic9qb5JLDNaK2HUdl1zLDeX28H221UvKjfdvSLVMg==}
436 |
437 | '@tailwindcss/typography@0.5.15':
438 | resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==}
439 | peerDependencies:
440 | tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20'
441 |
442 | '@tauri-apps/api@1.5.3':
443 | resolution: {integrity: sha512-zxnDjHHKjOsrIzZm6nO5Xapb/BxqUq1tc7cGkFXsFkGTsSWgCPH1D8mm0XS9weJY2OaR73I3k3S+b7eSzJDfqA==}
444 | engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'}
445 |
446 | '@tauri-apps/api@1.6.0':
447 | resolution: {integrity: sha512-rqI++FWClU5I2UBp4HXFvl+sBWkdigBkxnpJDQUWttNyG7IZP4FwQGhTNL5EOw0vI8i6eSAJ5frLqO7n7jbJdg==}
448 | engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'}
449 |
450 | '@tauri-apps/cli-darwin-arm64@1.6.2':
451 | resolution: {integrity: sha512-6mdRyf9DaLqlZvj8kZB09U3rwY+dOHSGzTZ7+GDg665GJb17f4cb30e8dExj6/aghcsOie9EGpgiURcDUvLNSQ==}
452 | engines: {node: '>= 10'}
453 | cpu: [arm64]
454 | os: [darwin]
455 |
456 | '@tauri-apps/cli-darwin-x64@1.6.2':
457 | resolution: {integrity: sha512-PLxZY5dn38H3R9VRmBN/l0ZDB5JFanCwlK4rmpzDQPPg3tQmbu5vjSCP6TVj5U6aLKsj79kFyULblPr5Dn9+vw==}
458 | engines: {node: '>= 10'}
459 | cpu: [x64]
460 | os: [darwin]
461 |
462 | '@tauri-apps/cli-linux-arm-gnueabihf@1.6.2':
463 | resolution: {integrity: sha512-xnpj4BLeeGOh5I/ewCQlYJZwHH0CBNBN+4q8BNWNQ9MKkjN9ST366RmHRzl2ANNgWwijOPxyce7GiUmvuH8Atw==}
464 | engines: {node: '>= 10'}
465 | cpu: [arm]
466 | os: [linux]
467 |
468 | '@tauri-apps/cli-linux-arm64-gnu@1.6.2':
469 | resolution: {integrity: sha512-uaiRE0vE2P+tdsCngfKt+7yKr3VZXIq/t3w01DzSdnBgHSp0zmRsRR4AhZt7ibvoEgA8GzBP+eSHJdFNZsTU9w==}
470 | engines: {node: '>= 10'}
471 | cpu: [arm64]
472 | os: [linux]
473 |
474 | '@tauri-apps/cli-linux-arm64-musl@1.6.2':
475 | resolution: {integrity: sha512-o9JunVrMrhqTBLrdvEbS64W0bo1dPm0lxX51Mx+6x9SmbDjlEWGgaAHC3iKLK9khd5Yu1uO1e+8TJltAcScvmw==}
476 | engines: {node: '>= 10'}
477 | cpu: [arm64]
478 | os: [linux]
479 |
480 | '@tauri-apps/cli-linux-x64-gnu@1.6.2':
481 | resolution: {integrity: sha512-jL9f+o61DdQmNYKIt2Q3BA8YJ+hyC5+GdNxqDf7j5SoQ85j//YfUWbmp9ZgsPHVBxgSGZVvgGMNvf64Ykp0buQ==}
482 | engines: {node: '>= 10'}
483 | cpu: [x64]
484 | os: [linux]
485 |
486 | '@tauri-apps/cli-linux-x64-musl@1.6.2':
487 | resolution: {integrity: sha512-xsa4Pu9YMHKAX0J8pIoXfN/uhvAAAoECZDixDhWw8zi57VZ4QX28ycqolS+NscdD9NAGSgHk45MpBZWdvRtvjQ==}
488 | engines: {node: '>= 10'}
489 | cpu: [x64]
490 | os: [linux]
491 |
492 | '@tauri-apps/cli-win32-arm64-msvc@1.6.2':
493 | resolution: {integrity: sha512-eJtUOx2UFhJpCCkm5M5+4Co9JbjvgIHTdyS/hTSZfOEdT58CNEGVJXMA39FsSZXYoxYPE+9K7Km6haMozSmlxw==}
494 | engines: {node: '>= 10'}
495 | cpu: [arm64]
496 | os: [win32]
497 |
498 | '@tauri-apps/cli-win32-ia32-msvc@1.6.2':
499 | resolution: {integrity: sha512-9Jwx3PrhNw3VKOgPISRRXPkvoEAZP+7rFRHXIo49dvlHy2E/o9qpWi1IntE33HWeazP6KhvsCjvXB2Ai4eGooA==}
500 | engines: {node: '>= 10'}
501 | cpu: [ia32]
502 | os: [win32]
503 |
504 | '@tauri-apps/cli-win32-x64-msvc@1.6.2':
505 | resolution: {integrity: sha512-5Z+ZjRFJE8MXghJe1UXvGephY5ZcgVhiTI9yuMi9xgX3CEaAXASatyXllzsvGJ9EDaWMEpa0PHjAzi7LBAWROw==}
506 | engines: {node: '>= 10'}
507 | cpu: [x64]
508 | os: [win32]
509 |
510 | '@tauri-apps/cli@1.6.2':
511 | resolution: {integrity: sha512-zpfZdxhm20s7d/Uejpg/T3a9sqLVe3Ih2ztINfy8v6iLw9Ohowkb9g+agZffYKlEWfOSpmCy69NFyBLj7OZL0A==}
512 | engines: {node: '>= 10'}
513 | hasBin: true
514 |
515 | '@types/cookie@0.6.0':
516 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
517 |
518 | '@types/estree@1.0.5':
519 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
520 |
521 | '@types/pug@2.0.10':
522 | resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==}
523 |
524 | acorn@8.11.3:
525 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
526 | engines: {node: '>=0.4.0'}
527 | hasBin: true
528 |
529 | ansi-regex@5.0.1:
530 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
531 | engines: {node: '>=8'}
532 |
533 | ansi-regex@6.0.1:
534 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
535 | engines: {node: '>=12'}
536 |
537 | ansi-styles@4.3.0:
538 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
539 | engines: {node: '>=8'}
540 |
541 | ansi-styles@6.2.1:
542 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
543 | engines: {node: '>=12'}
544 |
545 | any-promise@1.3.0:
546 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
547 |
548 | anymatch@3.1.3:
549 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
550 | engines: {node: '>= 8'}
551 |
552 | arg@5.0.2:
553 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
554 |
555 | aria-query@5.3.0:
556 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
557 |
558 | autoprefixer@10.4.20:
559 | resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
560 | engines: {node: ^10 || ^12 || >=14}
561 | hasBin: true
562 | peerDependencies:
563 | postcss: ^8.1.0
564 |
565 | axobject-query@4.0.0:
566 | resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==}
567 |
568 | balanced-match@1.0.2:
569 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
570 |
571 | binary-extensions@2.3.0:
572 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
573 | engines: {node: '>=8'}
574 |
575 | bits-ui@0.21.2:
576 | resolution: {integrity: sha512-tDOvNdJ+uC/VWlzCZ6Pwv3enQJBw1D7leUfdIqg8WvqcDHnvn3fk4V3Y9VmpMOPnl+xTaiKxSiVpO/Dh8wD6jA==}
577 | peerDependencies:
578 | svelte: ^4.0.0
579 |
580 | bits-ui@0.9.9:
581 | resolution: {integrity: sha512-LkdkyTtpXdkjBzPZJVJgpcre4fut6DONoprMfadHFo82HNUhph+02CxDjYEcZcThb5z4YjSxMlCYvQPZm+YtfQ==}
582 | peerDependencies:
583 | svelte: ^4.0.0
584 |
585 | brace-expansion@1.1.11:
586 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
587 |
588 | brace-expansion@2.0.1:
589 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
590 |
591 | braces@3.0.2:
592 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
593 | engines: {node: '>=8'}
594 |
595 | browserslist@4.24.0:
596 | resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==}
597 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
598 | hasBin: true
599 |
600 | buffer-crc32@0.2.13:
601 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
602 |
603 | callsites@3.1.0:
604 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
605 | engines: {node: '>=6'}
606 |
607 | camelcase-css@2.0.1:
608 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
609 | engines: {node: '>= 6'}
610 |
611 | caniuse-lite@1.0.30001664:
612 | resolution: {integrity: sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==}
613 |
614 | chokidar@3.6.0:
615 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
616 | engines: {node: '>= 8.10.0'}
617 |
618 | clsx@2.1.0:
619 | resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==}
620 | engines: {node: '>=6'}
621 |
622 | cmdk-sv@0.0.17:
623 | resolution: {integrity: sha512-28QTrK1tT1TSNoGq9MVnzjeLNNjCgjmsM8c2HJfDpRt9t+GD+9m3wX/WdAPaP9jdoNYU0SSdZVdgsGgpaSQOYQ==}
624 | peerDependencies:
625 | svelte: ^4.0.0
626 |
627 | code-red@1.0.4:
628 | resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
629 |
630 | color-convert@2.0.1:
631 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
632 | engines: {node: '>=7.0.0'}
633 |
634 | color-name@1.1.4:
635 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
636 |
637 | commander@4.1.1:
638 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
639 | engines: {node: '>= 6'}
640 |
641 | concat-map@0.0.1:
642 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
643 |
644 | cookie@0.6.0:
645 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
646 | engines: {node: '>= 0.6'}
647 |
648 | cross-spawn@7.0.3:
649 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
650 | engines: {node: '>= 8'}
651 |
652 | css-tree@2.3.1:
653 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
654 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
655 |
656 | cssesc@3.0.0:
657 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
658 | engines: {node: '>=4'}
659 | hasBin: true
660 |
661 | debug@4.3.4:
662 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
663 | engines: {node: '>=6.0'}
664 | peerDependencies:
665 | supports-color: '*'
666 | peerDependenciesMeta:
667 | supports-color:
668 | optional: true
669 |
670 | deepmerge@4.3.1:
671 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
672 | engines: {node: '>=0.10.0'}
673 |
674 | dequal@2.0.3:
675 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
676 | engines: {node: '>=6'}
677 |
678 | detect-indent@6.1.0:
679 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
680 | engines: {node: '>=8'}
681 |
682 | devalue@4.3.2:
683 | resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==}
684 |
685 | didyoumean@1.2.2:
686 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
687 |
688 | dlv@1.1.3:
689 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
690 |
691 | eastasianwidth@0.2.0:
692 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
693 |
694 | electron-to-chromium@1.5.29:
695 | resolution: {integrity: sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==}
696 |
697 | emoji-regex@8.0.0:
698 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
699 |
700 | emoji-regex@9.2.2:
701 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
702 |
703 | es6-promise@3.3.1:
704 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
705 |
706 | esbuild@0.20.2:
707 | resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
708 | engines: {node: '>=12'}
709 | hasBin: true
710 |
711 | escalade@3.2.0:
712 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
713 | engines: {node: '>=6'}
714 |
715 | esm-env@1.0.0:
716 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==}
717 |
718 | estree-walker@3.0.3:
719 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
720 |
721 | execa@5.1.1:
722 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
723 | engines: {node: '>=10'}
724 |
725 | execa@8.0.1:
726 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
727 | engines: {node: '>=16.17'}
728 |
729 | fast-glob@3.3.2:
730 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
731 | engines: {node: '>=8.6.0'}
732 |
733 | fastq@1.17.1:
734 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
735 |
736 | fill-range@7.0.1:
737 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
738 | engines: {node: '>=8'}
739 |
740 | find-up@5.0.0:
741 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
742 | engines: {node: '>=10'}
743 |
744 | focus-trap@7.5.4:
745 | resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==}
746 |
747 | foreground-child@3.1.1:
748 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
749 | engines: {node: '>=14'}
750 |
751 | fraction.js@4.3.7:
752 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
753 |
754 | fs.realpath@1.0.0:
755 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
756 |
757 | fsevents@2.3.3:
758 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
759 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
760 | os: [darwin]
761 |
762 | function-bind@1.1.2:
763 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
764 |
765 | get-stream@6.0.1:
766 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
767 | engines: {node: '>=10'}
768 |
769 | get-stream@8.0.1:
770 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
771 | engines: {node: '>=16'}
772 |
773 | glob-parent@5.1.2:
774 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
775 | engines: {node: '>= 6'}
776 |
777 | glob-parent@6.0.2:
778 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
779 | engines: {node: '>=10.13.0'}
780 |
781 | glob@10.3.12:
782 | resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==}
783 | engines: {node: '>=16 || 14 >=14.17'}
784 | hasBin: true
785 |
786 | glob@7.2.3:
787 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
788 |
789 | globalyzer@0.1.0:
790 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
791 |
792 | globrex@0.1.2:
793 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
794 |
795 | graceful-fs@4.2.11:
796 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
797 |
798 | hasown@2.0.2:
799 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
800 | engines: {node: '>= 0.4'}
801 |
802 | human-signals@2.1.0:
803 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
804 | engines: {node: '>=10.17.0'}
805 |
806 | human-signals@5.0.0:
807 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
808 | engines: {node: '>=16.17.0'}
809 |
810 | import-fresh@3.3.0:
811 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
812 | engines: {node: '>=6'}
813 |
814 | import-meta-resolve@4.0.0:
815 | resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==}
816 |
817 | inflight@1.0.6:
818 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
819 |
820 | inherits@2.0.4:
821 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
822 |
823 | is-binary-path@2.1.0:
824 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
825 | engines: {node: '>=8'}
826 |
827 | is-core-module@2.13.1:
828 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
829 |
830 | is-extglob@2.1.1:
831 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
832 | engines: {node: '>=0.10.0'}
833 |
834 | is-fullwidth-code-point@3.0.0:
835 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
836 | engines: {node: '>=8'}
837 |
838 | is-glob@4.0.3:
839 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
840 | engines: {node: '>=0.10.0'}
841 |
842 | is-number@7.0.0:
843 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
844 | engines: {node: '>=0.12.0'}
845 |
846 | is-reference@3.0.2:
847 | resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}
848 |
849 | is-stream@2.0.1:
850 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
851 | engines: {node: '>=8'}
852 |
853 | is-stream@3.0.0:
854 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
855 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
856 |
857 | isexe@2.0.0:
858 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
859 |
860 | jackspeak@2.3.6:
861 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
862 | engines: {node: '>=14'}
863 |
864 | jiti@1.21.0:
865 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
866 | hasBin: true
867 |
868 | jiti@2.0.0:
869 | resolution: {integrity: sha512-CJ7e7Abb779OTRv3lomfp7Mns/Sy1+U4pcAx5VbjxCZD5ZM/VJaXPpPjNKjtSvWQy/H86E49REXR34dl1JEz9w==}
870 | hasBin: true
871 |
872 | jsonc-parser@3.2.1:
873 | resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==}
874 |
875 | kleur@4.1.5:
876 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
877 | engines: {node: '>=6'}
878 |
879 | kolorist@1.8.0:
880 | resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
881 |
882 | lilconfig@2.1.0:
883 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
884 | engines: {node: '>=10'}
885 |
886 | lilconfig@3.1.1:
887 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==}
888 | engines: {node: '>=14'}
889 |
890 | lines-and-columns@1.2.4:
891 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
892 |
893 | local-pkg@0.5.0:
894 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
895 | engines: {node: '>=14'}
896 |
897 | locate-character@3.0.0:
898 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
899 |
900 | locate-path@6.0.0:
901 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
902 | engines: {node: '>=10'}
903 |
904 | lodash.castarray@4.4.0:
905 | resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
906 |
907 | lodash.isplainobject@4.0.6:
908 | resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
909 |
910 | lodash.merge@4.6.2:
911 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
912 |
913 | lru-cache@10.2.0:
914 | resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==}
915 | engines: {node: 14 || >=16.14}
916 |
917 | lucide-svelte@0.446.0:
918 | resolution: {integrity: sha512-ofx/Ykes1q1/sb0t4weezIt0SrMZd4x5Ox1APeR/ZgAHB7taXHqEExS9aGVImFqS35CfnjNGUqMr16/GwTd2lQ==}
919 | peerDependencies:
920 | svelte: ^3 || ^4 || ^5.0.0-next.42
921 |
922 | magic-string@0.30.9:
923 | resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==}
924 | engines: {node: '>=12'}
925 |
926 | mdn-data@2.0.30:
927 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
928 |
929 | merge-stream@2.0.0:
930 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
931 |
932 | merge2@1.4.1:
933 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
934 | engines: {node: '>= 8'}
935 |
936 | micromatch@4.0.5:
937 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
938 | engines: {node: '>=8.6'}
939 |
940 | mimic-fn@2.1.0:
941 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
942 | engines: {node: '>=6'}
943 |
944 | mimic-fn@4.0.0:
945 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
946 | engines: {node: '>=12'}
947 |
948 | min-indent@1.0.1:
949 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
950 | engines: {node: '>=4'}
951 |
952 | minimatch@3.1.2:
953 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
954 |
955 | minimatch@9.0.4:
956 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
957 | engines: {node: '>=16 || 14 >=14.17'}
958 |
959 | minimist@1.2.8:
960 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
961 |
962 | minipass@7.0.4:
963 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
964 | engines: {node: '>=16 || 14 >=14.17'}
965 |
966 | mkdirp@0.5.6:
967 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
968 | hasBin: true
969 |
970 | mlly@1.6.1:
971 | resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==}
972 |
973 | mri@1.2.0:
974 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
975 | engines: {node: '>=4'}
976 |
977 | mrmime@2.0.0:
978 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
979 | engines: {node: '>=10'}
980 |
981 | ms@2.1.2:
982 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
983 |
984 | mz@2.7.0:
985 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
986 |
987 | nanoid@3.3.7:
988 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
989 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
990 | hasBin: true
991 |
992 | nanoid@4.0.2:
993 | resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==}
994 | engines: {node: ^14 || ^16 || >=18}
995 | hasBin: true
996 |
997 | nanoid@5.0.7:
998 | resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==}
999 | engines: {node: ^18 || >=20}
1000 | hasBin: true
1001 |
1002 | node-releases@2.0.18:
1003 | resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
1004 |
1005 | normalize-path@3.0.0:
1006 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1007 | engines: {node: '>=0.10.0'}
1008 |
1009 | normalize-range@0.1.2:
1010 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
1011 | engines: {node: '>=0.10.0'}
1012 |
1013 | npm-run-path@4.0.1:
1014 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
1015 | engines: {node: '>=8'}
1016 |
1017 | npm-run-path@5.3.0:
1018 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
1019 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1020 |
1021 | object-assign@4.1.1:
1022 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1023 | engines: {node: '>=0.10.0'}
1024 |
1025 | object-hash@3.0.0:
1026 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
1027 | engines: {node: '>= 6'}
1028 |
1029 | once@1.4.0:
1030 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1031 |
1032 | onetime@5.1.2:
1033 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
1034 | engines: {node: '>=6'}
1035 |
1036 | onetime@6.0.0:
1037 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
1038 | engines: {node: '>=12'}
1039 |
1040 | p-limit@3.1.0:
1041 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1042 | engines: {node: '>=10'}
1043 |
1044 | p-locate@5.0.0:
1045 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1046 | engines: {node: '>=10'}
1047 |
1048 | parent-module@1.0.1:
1049 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1050 | engines: {node: '>=6'}
1051 |
1052 | path-exists@4.0.0:
1053 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1054 | engines: {node: '>=8'}
1055 |
1056 | path-is-absolute@1.0.1:
1057 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1058 | engines: {node: '>=0.10.0'}
1059 |
1060 | path-key@3.1.1:
1061 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1062 | engines: {node: '>=8'}
1063 |
1064 | path-key@4.0.0:
1065 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
1066 | engines: {node: '>=12'}
1067 |
1068 | path-parse@1.0.7:
1069 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1070 |
1071 | path-scurry@1.10.2:
1072 | resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==}
1073 | engines: {node: '>=16 || 14 >=14.17'}
1074 |
1075 | pathe@1.1.2:
1076 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
1077 |
1078 | periscopic@3.1.0:
1079 | resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
1080 |
1081 | picocolors@1.0.0:
1082 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1083 |
1084 | picocolors@1.1.0:
1085 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
1086 |
1087 | picomatch@2.3.1:
1088 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1089 | engines: {node: '>=8.6'}
1090 |
1091 | pify@2.3.0:
1092 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
1093 | engines: {node: '>=0.10.0'}
1094 |
1095 | pirates@4.0.6:
1096 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
1097 | engines: {node: '>= 6'}
1098 |
1099 | pkg-types@1.0.3:
1100 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
1101 |
1102 | postcss-import@15.1.0:
1103 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
1104 | engines: {node: '>=14.0.0'}
1105 | peerDependencies:
1106 | postcss: ^8.0.0
1107 |
1108 | postcss-js@4.0.1:
1109 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
1110 | engines: {node: ^12 || ^14 || >= 16}
1111 | peerDependencies:
1112 | postcss: ^8.4.21
1113 |
1114 | postcss-load-config@4.0.2:
1115 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
1116 | engines: {node: '>= 14'}
1117 | peerDependencies:
1118 | postcss: '>=8.0.9'
1119 | ts-node: '>=9.0.0'
1120 | peerDependenciesMeta:
1121 | postcss:
1122 | optional: true
1123 | ts-node:
1124 | optional: true
1125 |
1126 | postcss-load-config@5.0.3:
1127 | resolution: {integrity: sha512-90pBBI5apUVruIEdCxZic93Wm+i9fTrp7TXbgdUCH+/L+2WnfpITSpq5dFU/IPvbv7aNiMlQISpUkAm3fEcvgQ==}
1128 | engines: {node: '>= 18'}
1129 | peerDependencies:
1130 | jiti: '>=1.21.0'
1131 | postcss: '>=8.0.9'
1132 | peerDependenciesMeta:
1133 | jiti:
1134 | optional: true
1135 | postcss:
1136 | optional: true
1137 |
1138 | postcss-nested@6.0.1:
1139 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
1140 | engines: {node: '>=12.0'}
1141 | peerDependencies:
1142 | postcss: ^8.2.14
1143 |
1144 | postcss-selector-parser@6.0.10:
1145 | resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
1146 | engines: {node: '>=4'}
1147 |
1148 | postcss-selector-parser@6.0.16:
1149 | resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==}
1150 | engines: {node: '>=4'}
1151 |
1152 | postcss-value-parser@4.2.0:
1153 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1154 |
1155 | postcss@8.4.38:
1156 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
1157 | engines: {node: ^10 || ^12 || >=14}
1158 |
1159 | prettier-plugin-svelte@3.2.2:
1160 | resolution: {integrity: sha512-ZzzE/wMuf48/1+Lf2Ffko0uDa6pyCfgHV6+uAhtg2U0AAXGrhCSW88vEJNAkAxW5qyrFY1y1zZ4J8TgHrjW++Q==}
1161 | peerDependencies:
1162 | prettier: ^3.0.0
1163 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
1164 |
1165 | prettier-plugin-tailwindcss@0.6.8:
1166 | resolution: {integrity: sha512-dGu3kdm7SXPkiW4nzeWKCl3uoImdd5CTZEJGxyypEPL37Wj0HT2pLqjrvSei1nTeuQfO4PUfjeW5cTUNRLZ4sA==}
1167 | engines: {node: '>=14.21.3'}
1168 | peerDependencies:
1169 | '@ianvs/prettier-plugin-sort-imports': '*'
1170 | '@prettier/plugin-pug': '*'
1171 | '@shopify/prettier-plugin-liquid': '*'
1172 | '@trivago/prettier-plugin-sort-imports': '*'
1173 | '@zackad/prettier-plugin-twig-melody': '*'
1174 | prettier: ^3.0
1175 | prettier-plugin-astro: '*'
1176 | prettier-plugin-css-order: '*'
1177 | prettier-plugin-import-sort: '*'
1178 | prettier-plugin-jsdoc: '*'
1179 | prettier-plugin-marko: '*'
1180 | prettier-plugin-multiline-arrays: '*'
1181 | prettier-plugin-organize-attributes: '*'
1182 | prettier-plugin-organize-imports: '*'
1183 | prettier-plugin-sort-imports: '*'
1184 | prettier-plugin-style-order: '*'
1185 | prettier-plugin-svelte: '*'
1186 | peerDependenciesMeta:
1187 | '@ianvs/prettier-plugin-sort-imports':
1188 | optional: true
1189 | '@prettier/plugin-pug':
1190 | optional: true
1191 | '@shopify/prettier-plugin-liquid':
1192 | optional: true
1193 | '@trivago/prettier-plugin-sort-imports':
1194 | optional: true
1195 | '@zackad/prettier-plugin-twig-melody':
1196 | optional: true
1197 | prettier-plugin-astro:
1198 | optional: true
1199 | prettier-plugin-css-order:
1200 | optional: true
1201 | prettier-plugin-import-sort:
1202 | optional: true
1203 | prettier-plugin-jsdoc:
1204 | optional: true
1205 | prettier-plugin-marko:
1206 | optional: true
1207 | prettier-plugin-multiline-arrays:
1208 | optional: true
1209 | prettier-plugin-organize-attributes:
1210 | optional: true
1211 | prettier-plugin-organize-imports:
1212 | optional: true
1213 | prettier-plugin-sort-imports:
1214 | optional: true
1215 | prettier-plugin-style-order:
1216 | optional: true
1217 | prettier-plugin-svelte:
1218 | optional: true
1219 |
1220 | prettier@3.2.5:
1221 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==}
1222 | engines: {node: '>=14'}
1223 | hasBin: true
1224 |
1225 | queue-microtask@1.2.3:
1226 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1227 |
1228 | read-cache@1.0.0:
1229 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1230 |
1231 | readdirp@3.6.0:
1232 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1233 | engines: {node: '>=8.10.0'}
1234 |
1235 | regenerator-runtime@0.14.1:
1236 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
1237 |
1238 | resolve-from@4.0.0:
1239 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1240 | engines: {node: '>=4'}
1241 |
1242 | resolve@1.22.8:
1243 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
1244 | hasBin: true
1245 |
1246 | reusify@1.0.4:
1247 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1248 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1249 |
1250 | rimraf@2.7.1:
1251 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
1252 | hasBin: true
1253 |
1254 | rollup@4.14.1:
1255 | resolution: {integrity: sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==}
1256 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1257 | hasBin: true
1258 |
1259 | run-parallel@1.2.0:
1260 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1261 |
1262 | sade@1.8.1:
1263 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1264 | engines: {node: '>=6'}
1265 |
1266 | sander@0.5.1:
1267 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
1268 |
1269 | set-cookie-parser@2.6.0:
1270 | resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
1271 |
1272 | shebang-command@2.0.0:
1273 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1274 | engines: {node: '>=8'}
1275 |
1276 | shebang-regex@3.0.0:
1277 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1278 | engines: {node: '>=8'}
1279 |
1280 | signal-exit@3.0.7:
1281 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1282 |
1283 | signal-exit@4.1.0:
1284 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1285 | engines: {node: '>=14'}
1286 |
1287 | sirv@2.0.4:
1288 | resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
1289 | engines: {node: '>= 10'}
1290 |
1291 | sorcery@0.11.0:
1292 | resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==}
1293 | hasBin: true
1294 |
1295 | source-map-js@1.2.0:
1296 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
1297 | engines: {node: '>=0.10.0'}
1298 |
1299 | string-width@4.2.3:
1300 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1301 | engines: {node: '>=8'}
1302 |
1303 | string-width@5.1.2:
1304 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1305 | engines: {node: '>=12'}
1306 |
1307 | strip-ansi@6.0.1:
1308 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1309 | engines: {node: '>=8'}
1310 |
1311 | strip-ansi@7.1.0:
1312 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1313 | engines: {node: '>=12'}
1314 |
1315 | strip-final-newline@2.0.0:
1316 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
1317 | engines: {node: '>=6'}
1318 |
1319 | strip-final-newline@3.0.0:
1320 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
1321 | engines: {node: '>=12'}
1322 |
1323 | strip-indent@3.0.0:
1324 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
1325 | engines: {node: '>=8'}
1326 |
1327 | sucrase@3.35.0:
1328 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
1329 | engines: {node: '>=16 || 14 >=14.17'}
1330 | hasBin: true
1331 |
1332 | supports-preserve-symlinks-flag@1.0.0:
1333 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1334 | engines: {node: '>= 0.4'}
1335 |
1336 | svelte-check@3.6.9:
1337 | resolution: {integrity: sha512-hDQrk3L0osX07djQyMiXocKysTLfusqi8AriNcCiQxhQR49/LonYolcUGMtZ0fbUR8HTR198Prrgf52WWU9wEg==}
1338 | hasBin: true
1339 | peerDependencies:
1340 | svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
1341 |
1342 | svelte-hmr@0.15.3:
1343 | resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==}
1344 | engines: {node: ^12.20 || ^14.13.1 || >= 16}
1345 | peerDependencies:
1346 | svelte: ^3.19.0 || ^4.0.0
1347 |
1348 | svelte-preprocess@5.1.3:
1349 | resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==}
1350 | engines: {node: '>= 16.0.0', pnpm: ^8.0.0}
1351 | peerDependencies:
1352 | '@babel/core': ^7.10.2
1353 | coffeescript: ^2.5.1
1354 | less: ^3.11.3 || ^4.0.0
1355 | postcss: ^7 || ^8
1356 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
1357 | pug: ^3.0.0
1358 | sass: ^1.26.8
1359 | stylus: ^0.55.0
1360 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
1361 | svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
1362 | typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0'
1363 | peerDependenciesMeta:
1364 | '@babel/core':
1365 | optional: true
1366 | coffeescript:
1367 | optional: true
1368 | less:
1369 | optional: true
1370 | postcss:
1371 | optional: true
1372 | postcss-load-config:
1373 | optional: true
1374 | pug:
1375 | optional: true
1376 | sass:
1377 | optional: true
1378 | stylus:
1379 | optional: true
1380 | sugarss:
1381 | optional: true
1382 | typescript:
1383 | optional: true
1384 |
1385 | svelte-sonner@0.3.22:
1386 | resolution: {integrity: sha512-1AEBl7rTP4oeMAmBmkcvoHNOwB8gPzz73RYApcY8pyDwbjBewU8ATnXV8N42omV1sQvtSX/X0o5A1nfkN3T6cg==}
1387 | peerDependencies:
1388 | svelte: '>=3 <5'
1389 |
1390 | svelte@4.2.12:
1391 | resolution: {integrity: sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==}
1392 | engines: {node: '>=16'}
1393 |
1394 | tabbable@6.2.0:
1395 | resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
1396 |
1397 | tailwind-merge@2.2.2:
1398 | resolution: {integrity: sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==}
1399 |
1400 | tailwind-variants@0.2.1:
1401 | resolution: {integrity: sha512-2xmhAf4UIc3PijOUcJPA1LP4AbxhpcHuHM2C26xM0k81r0maAO6uoUSHl3APmvHZcY5cZCY/bYuJdfFa4eGoaw==}
1402 | engines: {node: '>=16.x', pnpm: '>=7.x'}
1403 | peerDependencies:
1404 | tailwindcss: '*'
1405 |
1406 | tailwindcss@3.4.13:
1407 | resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==}
1408 | engines: {node: '>=14.0.0'}
1409 | hasBin: true
1410 |
1411 | tauri-plugin-upload-api@https://codeload.github.com/tauri-apps/tauri-plugin-upload/tar.gz/56d958697109d854bca19050403b017c9a28b434:
1412 | resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-upload/tar.gz/56d958697109d854bca19050403b017c9a28b434}
1413 | version: 0.0.0
1414 |
1415 | thenify-all@1.6.0:
1416 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1417 | engines: {node: '>=0.8'}
1418 |
1419 | thenify@3.3.1:
1420 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1421 |
1422 | tiny-glob@0.2.9:
1423 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
1424 |
1425 | to-regex-range@5.0.1:
1426 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1427 | engines: {node: '>=8.0'}
1428 |
1429 | totalist@3.0.1:
1430 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
1431 | engines: {node: '>=6'}
1432 |
1433 | ts-interface-checker@0.1.13:
1434 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1435 |
1436 | tslib@2.6.2:
1437 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
1438 |
1439 | typescript@5.4.4:
1440 | resolution: {integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==}
1441 | engines: {node: '>=14.17'}
1442 | hasBin: true
1443 |
1444 | ufo@1.5.3:
1445 | resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==}
1446 |
1447 | unplugin-icons@0.18.5:
1448 | resolution: {integrity: sha512-KVNAohXbZ7tVcG1C3p6QaC7wU9Qrj7etv4XvsMMJAxr5LccQZ+Iuv5LOIv/7GtqXaGN1BuFCqRO1ErsHEgEXdQ==}
1449 | peerDependencies:
1450 | '@svgr/core': '>=7.0.0'
1451 | '@svgx/core': ^1.0.1
1452 | '@vue/compiler-sfc': ^3.0.2 || ^2.7.0
1453 | vue-template-compiler: ^2.6.12
1454 | vue-template-es2015-compiler: ^1.9.0
1455 | peerDependenciesMeta:
1456 | '@svgr/core':
1457 | optional: true
1458 | '@svgx/core':
1459 | optional: true
1460 | '@vue/compiler-sfc':
1461 | optional: true
1462 | vue-template-compiler:
1463 | optional: true
1464 | vue-template-es2015-compiler:
1465 | optional: true
1466 |
1467 | unplugin@1.10.1:
1468 | resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==}
1469 | engines: {node: '>=14.0.0'}
1470 |
1471 | update-browserslist-db@1.1.1:
1472 | resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
1473 | hasBin: true
1474 | peerDependencies:
1475 | browserslist: '>= 4.21.0'
1476 |
1477 | util-deprecate@1.0.2:
1478 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1479 |
1480 | vite@5.2.8:
1481 | resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==}
1482 | engines: {node: ^18.0.0 || >=20.0.0}
1483 | hasBin: true
1484 | peerDependencies:
1485 | '@types/node': ^18.0.0 || >=20.0.0
1486 | less: '*'
1487 | lightningcss: ^1.21.0
1488 | sass: '*'
1489 | stylus: '*'
1490 | sugarss: '*'
1491 | terser: ^5.4.0
1492 | peerDependenciesMeta:
1493 | '@types/node':
1494 | optional: true
1495 | less:
1496 | optional: true
1497 | lightningcss:
1498 | optional: true
1499 | sass:
1500 | optional: true
1501 | stylus:
1502 | optional: true
1503 | sugarss:
1504 | optional: true
1505 | terser:
1506 | optional: true
1507 |
1508 | vitefu@0.2.5:
1509 | resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
1510 | peerDependencies:
1511 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0
1512 | peerDependenciesMeta:
1513 | vite:
1514 | optional: true
1515 |
1516 | webpack-sources@3.2.3:
1517 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
1518 | engines: {node: '>=10.13.0'}
1519 |
1520 | webpack-virtual-modules@0.6.1:
1521 | resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==}
1522 |
1523 | which@2.0.2:
1524 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1525 | engines: {node: '>= 8'}
1526 | hasBin: true
1527 |
1528 | wrap-ansi@7.0.0:
1529 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1530 | engines: {node: '>=10'}
1531 |
1532 | wrap-ansi@8.1.0:
1533 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1534 | engines: {node: '>=12'}
1535 |
1536 | wrappy@1.0.2:
1537 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1538 |
1539 | yaml@2.4.1:
1540 | resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==}
1541 | engines: {node: '>= 14'}
1542 | hasBin: true
1543 |
1544 | yocto-queue@0.1.0:
1545 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1546 | engines: {node: '>=10'}
1547 |
1548 | snapshots:
1549 |
1550 | '@alloc/quick-lru@5.2.0': {}
1551 |
1552 | '@ampproject/remapping@2.3.0':
1553 | dependencies:
1554 | '@jridgewell/gen-mapping': 0.3.5
1555 | '@jridgewell/trace-mapping': 0.3.25
1556 |
1557 | '@antfu/install-pkg@0.1.1':
1558 | dependencies:
1559 | execa: 5.1.1
1560 | find-up: 5.0.0
1561 |
1562 | '@antfu/install-pkg@0.3.2':
1563 | dependencies:
1564 | execa: 8.0.1
1565 |
1566 | '@antfu/utils@0.7.7': {}
1567 |
1568 | '@babel/runtime@7.24.4':
1569 | dependencies:
1570 | regenerator-runtime: 0.14.1
1571 |
1572 | '@esbuild/aix-ppc64@0.20.2':
1573 | optional: true
1574 |
1575 | '@esbuild/android-arm64@0.20.2':
1576 | optional: true
1577 |
1578 | '@esbuild/android-arm@0.20.2':
1579 | optional: true
1580 |
1581 | '@esbuild/android-x64@0.20.2':
1582 | optional: true
1583 |
1584 | '@esbuild/darwin-arm64@0.20.2':
1585 | optional: true
1586 |
1587 | '@esbuild/darwin-x64@0.20.2':
1588 | optional: true
1589 |
1590 | '@esbuild/freebsd-arm64@0.20.2':
1591 | optional: true
1592 |
1593 | '@esbuild/freebsd-x64@0.20.2':
1594 | optional: true
1595 |
1596 | '@esbuild/linux-arm64@0.20.2':
1597 | optional: true
1598 |
1599 | '@esbuild/linux-arm@0.20.2':
1600 | optional: true
1601 |
1602 | '@esbuild/linux-ia32@0.20.2':
1603 | optional: true
1604 |
1605 | '@esbuild/linux-loong64@0.20.2':
1606 | optional: true
1607 |
1608 | '@esbuild/linux-mips64el@0.20.2':
1609 | optional: true
1610 |
1611 | '@esbuild/linux-ppc64@0.20.2':
1612 | optional: true
1613 |
1614 | '@esbuild/linux-riscv64@0.20.2':
1615 | optional: true
1616 |
1617 | '@esbuild/linux-s390x@0.20.2':
1618 | optional: true
1619 |
1620 | '@esbuild/linux-x64@0.20.2':
1621 | optional: true
1622 |
1623 | '@esbuild/netbsd-x64@0.20.2':
1624 | optional: true
1625 |
1626 | '@esbuild/openbsd-x64@0.20.2':
1627 | optional: true
1628 |
1629 | '@esbuild/sunos-x64@0.20.2':
1630 | optional: true
1631 |
1632 | '@esbuild/win32-arm64@0.20.2':
1633 | optional: true
1634 |
1635 | '@esbuild/win32-ia32@0.20.2':
1636 | optional: true
1637 |
1638 | '@esbuild/win32-x64@0.20.2':
1639 | optional: true
1640 |
1641 | '@floating-ui/core@1.6.0':
1642 | dependencies:
1643 | '@floating-ui/utils': 0.2.1
1644 |
1645 | '@floating-ui/dom@1.6.3':
1646 | dependencies:
1647 | '@floating-ui/core': 1.6.0
1648 | '@floating-ui/utils': 0.2.1
1649 |
1650 | '@floating-ui/utils@0.2.1': {}
1651 |
1652 | '@iconify/json@2.2.199':
1653 | dependencies:
1654 | '@iconify/types': 2.0.0
1655 | pathe: 1.1.2
1656 |
1657 | '@iconify/types@2.0.0': {}
1658 |
1659 | '@iconify/utils@2.1.22':
1660 | dependencies:
1661 | '@antfu/install-pkg': 0.1.1
1662 | '@antfu/utils': 0.7.7
1663 | '@iconify/types': 2.0.0
1664 | debug: 4.3.4
1665 | kolorist: 1.8.0
1666 | local-pkg: 0.5.0
1667 | mlly: 1.6.1
1668 | transitivePeerDependencies:
1669 | - supports-color
1670 |
1671 | '@internationalized/date@3.5.2':
1672 | dependencies:
1673 | '@swc/helpers': 0.5.8
1674 |
1675 | '@isaacs/cliui@8.0.2':
1676 | dependencies:
1677 | string-width: 5.1.2
1678 | string-width-cjs: string-width@4.2.3
1679 | strip-ansi: 7.1.0
1680 | strip-ansi-cjs: strip-ansi@6.0.1
1681 | wrap-ansi: 8.1.0
1682 | wrap-ansi-cjs: wrap-ansi@7.0.0
1683 |
1684 | '@jridgewell/gen-mapping@0.3.5':
1685 | dependencies:
1686 | '@jridgewell/set-array': 1.2.1
1687 | '@jridgewell/sourcemap-codec': 1.4.15
1688 | '@jridgewell/trace-mapping': 0.3.25
1689 |
1690 | '@jridgewell/resolve-uri@3.1.2': {}
1691 |
1692 | '@jridgewell/set-array@1.2.1': {}
1693 |
1694 | '@jridgewell/sourcemap-codec@1.4.15': {}
1695 |
1696 | '@jridgewell/trace-mapping@0.3.25':
1697 | dependencies:
1698 | '@jridgewell/resolve-uri': 3.1.2
1699 | '@jridgewell/sourcemap-codec': 1.4.15
1700 |
1701 | '@melt-ui/svelte@0.61.2(svelte@4.2.12)':
1702 | dependencies:
1703 | '@floating-ui/core': 1.6.0
1704 | '@floating-ui/dom': 1.6.3
1705 | '@internationalized/date': 3.5.2
1706 | dequal: 2.0.3
1707 | focus-trap: 7.5.4
1708 | nanoid: 4.0.2
1709 | svelte: 4.2.12
1710 |
1711 | '@melt-ui/svelte@0.76.2(svelte@4.2.12)':
1712 | dependencies:
1713 | '@floating-ui/core': 1.6.0
1714 | '@floating-ui/dom': 1.6.3
1715 | '@internationalized/date': 3.5.2
1716 | dequal: 2.0.3
1717 | focus-trap: 7.5.4
1718 | nanoid: 5.0.7
1719 | svelte: 4.2.12
1720 |
1721 | '@nodelib/fs.scandir@2.1.5':
1722 | dependencies:
1723 | '@nodelib/fs.stat': 2.0.5
1724 | run-parallel: 1.2.0
1725 |
1726 | '@nodelib/fs.stat@2.0.5': {}
1727 |
1728 | '@nodelib/fs.walk@1.2.8':
1729 | dependencies:
1730 | '@nodelib/fs.scandir': 2.1.5
1731 | fastq: 1.17.1
1732 |
1733 | '@pkgjs/parseargs@0.11.0':
1734 | optional: true
1735 |
1736 | '@polka/url@1.0.0-next.25': {}
1737 |
1738 | '@rollup/rollup-android-arm-eabi@4.14.1':
1739 | optional: true
1740 |
1741 | '@rollup/rollup-android-arm64@4.14.1':
1742 | optional: true
1743 |
1744 | '@rollup/rollup-darwin-arm64@4.14.1':
1745 | optional: true
1746 |
1747 | '@rollup/rollup-darwin-x64@4.14.1':
1748 | optional: true
1749 |
1750 | '@rollup/rollup-linux-arm-gnueabihf@4.14.1':
1751 | optional: true
1752 |
1753 | '@rollup/rollup-linux-arm64-gnu@4.14.1':
1754 | optional: true
1755 |
1756 | '@rollup/rollup-linux-arm64-musl@4.14.1':
1757 | optional: true
1758 |
1759 | '@rollup/rollup-linux-powerpc64le-gnu@4.14.1':
1760 | optional: true
1761 |
1762 | '@rollup/rollup-linux-riscv64-gnu@4.14.1':
1763 | optional: true
1764 |
1765 | '@rollup/rollup-linux-s390x-gnu@4.14.1':
1766 | optional: true
1767 |
1768 | '@rollup/rollup-linux-x64-gnu@4.14.1':
1769 | optional: true
1770 |
1771 | '@rollup/rollup-linux-x64-musl@4.14.1':
1772 | optional: true
1773 |
1774 | '@rollup/rollup-win32-arm64-msvc@4.14.1':
1775 | optional: true
1776 |
1777 | '@rollup/rollup-win32-ia32-msvc@4.14.1':
1778 | optional: true
1779 |
1780 | '@rollup/rollup-win32-x64-msvc@4.14.1':
1781 | optional: true
1782 |
1783 | '@sveltejs/adapter-static@3.0.1(@sveltejs/kit@2.5.5(@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@5.2.8))(svelte@4.2.12)(vite@5.2.8))':
1784 | dependencies:
1785 | '@sveltejs/kit': 2.5.5(@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@5.2.8))(svelte@4.2.12)(vite@5.2.8)
1786 |
1787 | '@sveltejs/kit@2.5.5(@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@5.2.8))(svelte@4.2.12)(vite@5.2.8)':
1788 | dependencies:
1789 | '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.12)(vite@5.2.8)
1790 | '@types/cookie': 0.6.0
1791 | cookie: 0.6.0
1792 | devalue: 4.3.2
1793 | esm-env: 1.0.0
1794 | import-meta-resolve: 4.0.0
1795 | kleur: 4.1.5
1796 | magic-string: 0.30.9
1797 | mrmime: 2.0.0
1798 | sade: 1.8.1
1799 | set-cookie-parser: 2.6.0
1800 | sirv: 2.0.4
1801 | svelte: 4.2.12
1802 | tiny-glob: 0.2.9
1803 | vite: 5.2.8
1804 |
1805 | '@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@5.2.8))(svelte@4.2.12)(vite@5.2.8)':
1806 | dependencies:
1807 | '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.12)(vite@5.2.8)
1808 | debug: 4.3.4
1809 | svelte: 4.2.12
1810 | vite: 5.2.8
1811 | transitivePeerDependencies:
1812 | - supports-color
1813 |
1814 | '@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@5.2.8)':
1815 | dependencies:
1816 | '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.12)(vite@5.2.8))(svelte@4.2.12)(vite@5.2.8)
1817 | debug: 4.3.4
1818 | deepmerge: 4.3.1
1819 | kleur: 4.1.5
1820 | magic-string: 0.30.9
1821 | svelte: 4.2.12
1822 | svelte-hmr: 0.15.3(svelte@4.2.12)
1823 | vite: 5.2.8
1824 | vitefu: 0.2.5(vite@5.2.8)
1825 | transitivePeerDependencies:
1826 | - supports-color
1827 |
1828 | '@swc/helpers@0.5.8':
1829 | dependencies:
1830 | tslib: 2.6.2
1831 |
1832 | '@tailwindcss/typography@0.5.15(tailwindcss@3.4.13)':
1833 | dependencies:
1834 | lodash.castarray: 4.4.0
1835 | lodash.isplainobject: 4.0.6
1836 | lodash.merge: 4.6.2
1837 | postcss-selector-parser: 6.0.10
1838 | tailwindcss: 3.4.13
1839 |
1840 | '@tauri-apps/api@1.5.3': {}
1841 |
1842 | '@tauri-apps/api@1.6.0': {}
1843 |
1844 | '@tauri-apps/cli-darwin-arm64@1.6.2':
1845 | optional: true
1846 |
1847 | '@tauri-apps/cli-darwin-x64@1.6.2':
1848 | optional: true
1849 |
1850 | '@tauri-apps/cli-linux-arm-gnueabihf@1.6.2':
1851 | optional: true
1852 |
1853 | '@tauri-apps/cli-linux-arm64-gnu@1.6.2':
1854 | optional: true
1855 |
1856 | '@tauri-apps/cli-linux-arm64-musl@1.6.2':
1857 | optional: true
1858 |
1859 | '@tauri-apps/cli-linux-x64-gnu@1.6.2':
1860 | optional: true
1861 |
1862 | '@tauri-apps/cli-linux-x64-musl@1.6.2':
1863 | optional: true
1864 |
1865 | '@tauri-apps/cli-win32-arm64-msvc@1.6.2':
1866 | optional: true
1867 |
1868 | '@tauri-apps/cli-win32-ia32-msvc@1.6.2':
1869 | optional: true
1870 |
1871 | '@tauri-apps/cli-win32-x64-msvc@1.6.2':
1872 | optional: true
1873 |
1874 | '@tauri-apps/cli@1.6.2':
1875 | optionalDependencies:
1876 | '@tauri-apps/cli-darwin-arm64': 1.6.2
1877 | '@tauri-apps/cli-darwin-x64': 1.6.2
1878 | '@tauri-apps/cli-linux-arm-gnueabihf': 1.6.2
1879 | '@tauri-apps/cli-linux-arm64-gnu': 1.6.2
1880 | '@tauri-apps/cli-linux-arm64-musl': 1.6.2
1881 | '@tauri-apps/cli-linux-x64-gnu': 1.6.2
1882 | '@tauri-apps/cli-linux-x64-musl': 1.6.2
1883 | '@tauri-apps/cli-win32-arm64-msvc': 1.6.2
1884 | '@tauri-apps/cli-win32-ia32-msvc': 1.6.2
1885 | '@tauri-apps/cli-win32-x64-msvc': 1.6.2
1886 |
1887 | '@types/cookie@0.6.0': {}
1888 |
1889 | '@types/estree@1.0.5': {}
1890 |
1891 | '@types/pug@2.0.10': {}
1892 |
1893 | acorn@8.11.3: {}
1894 |
1895 | ansi-regex@5.0.1: {}
1896 |
1897 | ansi-regex@6.0.1: {}
1898 |
1899 | ansi-styles@4.3.0:
1900 | dependencies:
1901 | color-convert: 2.0.1
1902 |
1903 | ansi-styles@6.2.1: {}
1904 |
1905 | any-promise@1.3.0: {}
1906 |
1907 | anymatch@3.1.3:
1908 | dependencies:
1909 | normalize-path: 3.0.0
1910 | picomatch: 2.3.1
1911 |
1912 | arg@5.0.2: {}
1913 |
1914 | aria-query@5.3.0:
1915 | dependencies:
1916 | dequal: 2.0.3
1917 |
1918 | autoprefixer@10.4.20(postcss@8.4.38):
1919 | dependencies:
1920 | browserslist: 4.24.0
1921 | caniuse-lite: 1.0.30001664
1922 | fraction.js: 4.3.7
1923 | normalize-range: 0.1.2
1924 | picocolors: 1.1.0
1925 | postcss: 8.4.38
1926 | postcss-value-parser: 4.2.0
1927 |
1928 | axobject-query@4.0.0:
1929 | dependencies:
1930 | dequal: 2.0.3
1931 |
1932 | balanced-match@1.0.2: {}
1933 |
1934 | binary-extensions@2.3.0: {}
1935 |
1936 | bits-ui@0.21.2(svelte@4.2.12):
1937 | dependencies:
1938 | '@internationalized/date': 3.5.2
1939 | '@melt-ui/svelte': 0.76.2(svelte@4.2.12)
1940 | nanoid: 5.0.7
1941 | svelte: 4.2.12
1942 |
1943 | bits-ui@0.9.9(svelte@4.2.12):
1944 | dependencies:
1945 | '@melt-ui/svelte': 0.61.2(svelte@4.2.12)
1946 | nanoid: 5.0.7
1947 | svelte: 4.2.12
1948 |
1949 | brace-expansion@1.1.11:
1950 | dependencies:
1951 | balanced-match: 1.0.2
1952 | concat-map: 0.0.1
1953 |
1954 | brace-expansion@2.0.1:
1955 | dependencies:
1956 | balanced-match: 1.0.2
1957 |
1958 | braces@3.0.2:
1959 | dependencies:
1960 | fill-range: 7.0.1
1961 |
1962 | browserslist@4.24.0:
1963 | dependencies:
1964 | caniuse-lite: 1.0.30001664
1965 | electron-to-chromium: 1.5.29
1966 | node-releases: 2.0.18
1967 | update-browserslist-db: 1.1.1(browserslist@4.24.0)
1968 |
1969 | buffer-crc32@0.2.13: {}
1970 |
1971 | callsites@3.1.0: {}
1972 |
1973 | camelcase-css@2.0.1: {}
1974 |
1975 | caniuse-lite@1.0.30001664: {}
1976 |
1977 | chokidar@3.6.0:
1978 | dependencies:
1979 | anymatch: 3.1.3
1980 | braces: 3.0.2
1981 | glob-parent: 5.1.2
1982 | is-binary-path: 2.1.0
1983 | is-glob: 4.0.3
1984 | normalize-path: 3.0.0
1985 | readdirp: 3.6.0
1986 | optionalDependencies:
1987 | fsevents: 2.3.3
1988 |
1989 | clsx@2.1.0: {}
1990 |
1991 | cmdk-sv@0.0.17(svelte@4.2.12):
1992 | dependencies:
1993 | bits-ui: 0.9.9(svelte@4.2.12)
1994 | nanoid: 5.0.7
1995 | svelte: 4.2.12
1996 |
1997 | code-red@1.0.4:
1998 | dependencies:
1999 | '@jridgewell/sourcemap-codec': 1.4.15
2000 | '@types/estree': 1.0.5
2001 | acorn: 8.11.3
2002 | estree-walker: 3.0.3
2003 | periscopic: 3.1.0
2004 |
2005 | color-convert@2.0.1:
2006 | dependencies:
2007 | color-name: 1.1.4
2008 |
2009 | color-name@1.1.4: {}
2010 |
2011 | commander@4.1.1: {}
2012 |
2013 | concat-map@0.0.1: {}
2014 |
2015 | cookie@0.6.0: {}
2016 |
2017 | cross-spawn@7.0.3:
2018 | dependencies:
2019 | path-key: 3.1.1
2020 | shebang-command: 2.0.0
2021 | which: 2.0.2
2022 |
2023 | css-tree@2.3.1:
2024 | dependencies:
2025 | mdn-data: 2.0.30
2026 | source-map-js: 1.2.0
2027 |
2028 | cssesc@3.0.0: {}
2029 |
2030 | debug@4.3.4:
2031 | dependencies:
2032 | ms: 2.1.2
2033 |
2034 | deepmerge@4.3.1: {}
2035 |
2036 | dequal@2.0.3: {}
2037 |
2038 | detect-indent@6.1.0: {}
2039 |
2040 | devalue@4.3.2: {}
2041 |
2042 | didyoumean@1.2.2: {}
2043 |
2044 | dlv@1.1.3: {}
2045 |
2046 | eastasianwidth@0.2.0: {}
2047 |
2048 | electron-to-chromium@1.5.29: {}
2049 |
2050 | emoji-regex@8.0.0: {}
2051 |
2052 | emoji-regex@9.2.2: {}
2053 |
2054 | es6-promise@3.3.1: {}
2055 |
2056 | esbuild@0.20.2:
2057 | optionalDependencies:
2058 | '@esbuild/aix-ppc64': 0.20.2
2059 | '@esbuild/android-arm': 0.20.2
2060 | '@esbuild/android-arm64': 0.20.2
2061 | '@esbuild/android-x64': 0.20.2
2062 | '@esbuild/darwin-arm64': 0.20.2
2063 | '@esbuild/darwin-x64': 0.20.2
2064 | '@esbuild/freebsd-arm64': 0.20.2
2065 | '@esbuild/freebsd-x64': 0.20.2
2066 | '@esbuild/linux-arm': 0.20.2
2067 | '@esbuild/linux-arm64': 0.20.2
2068 | '@esbuild/linux-ia32': 0.20.2
2069 | '@esbuild/linux-loong64': 0.20.2
2070 | '@esbuild/linux-mips64el': 0.20.2
2071 | '@esbuild/linux-ppc64': 0.20.2
2072 | '@esbuild/linux-riscv64': 0.20.2
2073 | '@esbuild/linux-s390x': 0.20.2
2074 | '@esbuild/linux-x64': 0.20.2
2075 | '@esbuild/netbsd-x64': 0.20.2
2076 | '@esbuild/openbsd-x64': 0.20.2
2077 | '@esbuild/sunos-x64': 0.20.2
2078 | '@esbuild/win32-arm64': 0.20.2
2079 | '@esbuild/win32-ia32': 0.20.2
2080 | '@esbuild/win32-x64': 0.20.2
2081 |
2082 | escalade@3.2.0: {}
2083 |
2084 | esm-env@1.0.0: {}
2085 |
2086 | estree-walker@3.0.3:
2087 | dependencies:
2088 | '@types/estree': 1.0.5
2089 |
2090 | execa@5.1.1:
2091 | dependencies:
2092 | cross-spawn: 7.0.3
2093 | get-stream: 6.0.1
2094 | human-signals: 2.1.0
2095 | is-stream: 2.0.1
2096 | merge-stream: 2.0.0
2097 | npm-run-path: 4.0.1
2098 | onetime: 5.1.2
2099 | signal-exit: 3.0.7
2100 | strip-final-newline: 2.0.0
2101 |
2102 | execa@8.0.1:
2103 | dependencies:
2104 | cross-spawn: 7.0.3
2105 | get-stream: 8.0.1
2106 | human-signals: 5.0.0
2107 | is-stream: 3.0.0
2108 | merge-stream: 2.0.0
2109 | npm-run-path: 5.3.0
2110 | onetime: 6.0.0
2111 | signal-exit: 4.1.0
2112 | strip-final-newline: 3.0.0
2113 |
2114 | fast-glob@3.3.2:
2115 | dependencies:
2116 | '@nodelib/fs.stat': 2.0.5
2117 | '@nodelib/fs.walk': 1.2.8
2118 | glob-parent: 5.1.2
2119 | merge2: 1.4.1
2120 | micromatch: 4.0.5
2121 |
2122 | fastq@1.17.1:
2123 | dependencies:
2124 | reusify: 1.0.4
2125 |
2126 | fill-range@7.0.1:
2127 | dependencies:
2128 | to-regex-range: 5.0.1
2129 |
2130 | find-up@5.0.0:
2131 | dependencies:
2132 | locate-path: 6.0.0
2133 | path-exists: 4.0.0
2134 |
2135 | focus-trap@7.5.4:
2136 | dependencies:
2137 | tabbable: 6.2.0
2138 |
2139 | foreground-child@3.1.1:
2140 | dependencies:
2141 | cross-spawn: 7.0.3
2142 | signal-exit: 4.1.0
2143 |
2144 | fraction.js@4.3.7: {}
2145 |
2146 | fs.realpath@1.0.0: {}
2147 |
2148 | fsevents@2.3.3:
2149 | optional: true
2150 |
2151 | function-bind@1.1.2: {}
2152 |
2153 | get-stream@6.0.1: {}
2154 |
2155 | get-stream@8.0.1: {}
2156 |
2157 | glob-parent@5.1.2:
2158 | dependencies:
2159 | is-glob: 4.0.3
2160 |
2161 | glob-parent@6.0.2:
2162 | dependencies:
2163 | is-glob: 4.0.3
2164 |
2165 | glob@10.3.12:
2166 | dependencies:
2167 | foreground-child: 3.1.1
2168 | jackspeak: 2.3.6
2169 | minimatch: 9.0.4
2170 | minipass: 7.0.4
2171 | path-scurry: 1.10.2
2172 |
2173 | glob@7.2.3:
2174 | dependencies:
2175 | fs.realpath: 1.0.0
2176 | inflight: 1.0.6
2177 | inherits: 2.0.4
2178 | minimatch: 3.1.2
2179 | once: 1.4.0
2180 | path-is-absolute: 1.0.1
2181 |
2182 | globalyzer@0.1.0: {}
2183 |
2184 | globrex@0.1.2: {}
2185 |
2186 | graceful-fs@4.2.11: {}
2187 |
2188 | hasown@2.0.2:
2189 | dependencies:
2190 | function-bind: 1.1.2
2191 |
2192 | human-signals@2.1.0: {}
2193 |
2194 | human-signals@5.0.0: {}
2195 |
2196 | import-fresh@3.3.0:
2197 | dependencies:
2198 | parent-module: 1.0.1
2199 | resolve-from: 4.0.0
2200 |
2201 | import-meta-resolve@4.0.0: {}
2202 |
2203 | inflight@1.0.6:
2204 | dependencies:
2205 | once: 1.4.0
2206 | wrappy: 1.0.2
2207 |
2208 | inherits@2.0.4: {}
2209 |
2210 | is-binary-path@2.1.0:
2211 | dependencies:
2212 | binary-extensions: 2.3.0
2213 |
2214 | is-core-module@2.13.1:
2215 | dependencies:
2216 | hasown: 2.0.2
2217 |
2218 | is-extglob@2.1.1: {}
2219 |
2220 | is-fullwidth-code-point@3.0.0: {}
2221 |
2222 | is-glob@4.0.3:
2223 | dependencies:
2224 | is-extglob: 2.1.1
2225 |
2226 | is-number@7.0.0: {}
2227 |
2228 | is-reference@3.0.2:
2229 | dependencies:
2230 | '@types/estree': 1.0.5
2231 |
2232 | is-stream@2.0.1: {}
2233 |
2234 | is-stream@3.0.0: {}
2235 |
2236 | isexe@2.0.0: {}
2237 |
2238 | jackspeak@2.3.6:
2239 | dependencies:
2240 | '@isaacs/cliui': 8.0.2
2241 | optionalDependencies:
2242 | '@pkgjs/parseargs': 0.11.0
2243 |
2244 | jiti@1.21.0: {}
2245 |
2246 | jiti@2.0.0:
2247 | optional: true
2248 |
2249 | jsonc-parser@3.2.1: {}
2250 |
2251 | kleur@4.1.5: {}
2252 |
2253 | kolorist@1.8.0: {}
2254 |
2255 | lilconfig@2.1.0: {}
2256 |
2257 | lilconfig@3.1.1: {}
2258 |
2259 | lines-and-columns@1.2.4: {}
2260 |
2261 | local-pkg@0.5.0:
2262 | dependencies:
2263 | mlly: 1.6.1
2264 | pkg-types: 1.0.3
2265 |
2266 | locate-character@3.0.0: {}
2267 |
2268 | locate-path@6.0.0:
2269 | dependencies:
2270 | p-locate: 5.0.0
2271 |
2272 | lodash.castarray@4.4.0: {}
2273 |
2274 | lodash.isplainobject@4.0.6: {}
2275 |
2276 | lodash.merge@4.6.2: {}
2277 |
2278 | lru-cache@10.2.0: {}
2279 |
2280 | lucide-svelte@0.446.0(svelte@4.2.12):
2281 | dependencies:
2282 | svelte: 4.2.12
2283 |
2284 | magic-string@0.30.9:
2285 | dependencies:
2286 | '@jridgewell/sourcemap-codec': 1.4.15
2287 |
2288 | mdn-data@2.0.30: {}
2289 |
2290 | merge-stream@2.0.0: {}
2291 |
2292 | merge2@1.4.1: {}
2293 |
2294 | micromatch@4.0.5:
2295 | dependencies:
2296 | braces: 3.0.2
2297 | picomatch: 2.3.1
2298 |
2299 | mimic-fn@2.1.0: {}
2300 |
2301 | mimic-fn@4.0.0: {}
2302 |
2303 | min-indent@1.0.1: {}
2304 |
2305 | minimatch@3.1.2:
2306 | dependencies:
2307 | brace-expansion: 1.1.11
2308 |
2309 | minimatch@9.0.4:
2310 | dependencies:
2311 | brace-expansion: 2.0.1
2312 |
2313 | minimist@1.2.8: {}
2314 |
2315 | minipass@7.0.4: {}
2316 |
2317 | mkdirp@0.5.6:
2318 | dependencies:
2319 | minimist: 1.2.8
2320 |
2321 | mlly@1.6.1:
2322 | dependencies:
2323 | acorn: 8.11.3
2324 | pathe: 1.1.2
2325 | pkg-types: 1.0.3
2326 | ufo: 1.5.3
2327 |
2328 | mri@1.2.0: {}
2329 |
2330 | mrmime@2.0.0: {}
2331 |
2332 | ms@2.1.2: {}
2333 |
2334 | mz@2.7.0:
2335 | dependencies:
2336 | any-promise: 1.3.0
2337 | object-assign: 4.1.1
2338 | thenify-all: 1.6.0
2339 |
2340 | nanoid@3.3.7: {}
2341 |
2342 | nanoid@4.0.2: {}
2343 |
2344 | nanoid@5.0.7: {}
2345 |
2346 | node-releases@2.0.18: {}
2347 |
2348 | normalize-path@3.0.0: {}
2349 |
2350 | normalize-range@0.1.2: {}
2351 |
2352 | npm-run-path@4.0.1:
2353 | dependencies:
2354 | path-key: 3.1.1
2355 |
2356 | npm-run-path@5.3.0:
2357 | dependencies:
2358 | path-key: 4.0.0
2359 |
2360 | object-assign@4.1.1: {}
2361 |
2362 | object-hash@3.0.0: {}
2363 |
2364 | once@1.4.0:
2365 | dependencies:
2366 | wrappy: 1.0.2
2367 |
2368 | onetime@5.1.2:
2369 | dependencies:
2370 | mimic-fn: 2.1.0
2371 |
2372 | onetime@6.0.0:
2373 | dependencies:
2374 | mimic-fn: 4.0.0
2375 |
2376 | p-limit@3.1.0:
2377 | dependencies:
2378 | yocto-queue: 0.1.0
2379 |
2380 | p-locate@5.0.0:
2381 | dependencies:
2382 | p-limit: 3.1.0
2383 |
2384 | parent-module@1.0.1:
2385 | dependencies:
2386 | callsites: 3.1.0
2387 |
2388 | path-exists@4.0.0: {}
2389 |
2390 | path-is-absolute@1.0.1: {}
2391 |
2392 | path-key@3.1.1: {}
2393 |
2394 | path-key@4.0.0: {}
2395 |
2396 | path-parse@1.0.7: {}
2397 |
2398 | path-scurry@1.10.2:
2399 | dependencies:
2400 | lru-cache: 10.2.0
2401 | minipass: 7.0.4
2402 |
2403 | pathe@1.1.2: {}
2404 |
2405 | periscopic@3.1.0:
2406 | dependencies:
2407 | '@types/estree': 1.0.5
2408 | estree-walker: 3.0.3
2409 | is-reference: 3.0.2
2410 |
2411 | picocolors@1.0.0: {}
2412 |
2413 | picocolors@1.1.0: {}
2414 |
2415 | picomatch@2.3.1: {}
2416 |
2417 | pify@2.3.0: {}
2418 |
2419 | pirates@4.0.6: {}
2420 |
2421 | pkg-types@1.0.3:
2422 | dependencies:
2423 | jsonc-parser: 3.2.1
2424 | mlly: 1.6.1
2425 | pathe: 1.1.2
2426 |
2427 | postcss-import@15.1.0(postcss@8.4.38):
2428 | dependencies:
2429 | postcss: 8.4.38
2430 | postcss-value-parser: 4.2.0
2431 | read-cache: 1.0.0
2432 | resolve: 1.22.8
2433 |
2434 | postcss-js@4.0.1(postcss@8.4.38):
2435 | dependencies:
2436 | camelcase-css: 2.0.1
2437 | postcss: 8.4.38
2438 |
2439 | postcss-load-config@4.0.2(postcss@8.4.38):
2440 | dependencies:
2441 | lilconfig: 3.1.1
2442 | yaml: 2.4.1
2443 | optionalDependencies:
2444 | postcss: 8.4.38
2445 |
2446 | postcss-load-config@5.0.3(jiti@2.0.0)(postcss@8.4.38):
2447 | dependencies:
2448 | lilconfig: 3.1.1
2449 | yaml: 2.4.1
2450 | optionalDependencies:
2451 | jiti: 2.0.0
2452 | postcss: 8.4.38
2453 |
2454 | postcss-nested@6.0.1(postcss@8.4.38):
2455 | dependencies:
2456 | postcss: 8.4.38
2457 | postcss-selector-parser: 6.0.16
2458 |
2459 | postcss-selector-parser@6.0.10:
2460 | dependencies:
2461 | cssesc: 3.0.0
2462 | util-deprecate: 1.0.2
2463 |
2464 | postcss-selector-parser@6.0.16:
2465 | dependencies:
2466 | cssesc: 3.0.0
2467 | util-deprecate: 1.0.2
2468 |
2469 | postcss-value-parser@4.2.0: {}
2470 |
2471 | postcss@8.4.38:
2472 | dependencies:
2473 | nanoid: 3.3.7
2474 | picocolors: 1.0.0
2475 | source-map-js: 1.2.0
2476 |
2477 | prettier-plugin-svelte@3.2.2(prettier@3.2.5)(svelte@4.2.12):
2478 | dependencies:
2479 | prettier: 3.2.5
2480 | svelte: 4.2.12
2481 |
2482 | prettier-plugin-tailwindcss@0.6.8(prettier-plugin-svelte@3.2.2(prettier@3.2.5)(svelte@4.2.12))(prettier@3.2.5):
2483 | dependencies:
2484 | prettier: 3.2.5
2485 | optionalDependencies:
2486 | prettier-plugin-svelte: 3.2.2(prettier@3.2.5)(svelte@4.2.12)
2487 |
2488 | prettier@3.2.5: {}
2489 |
2490 | queue-microtask@1.2.3: {}
2491 |
2492 | read-cache@1.0.0:
2493 | dependencies:
2494 | pify: 2.3.0
2495 |
2496 | readdirp@3.6.0:
2497 | dependencies:
2498 | picomatch: 2.3.1
2499 |
2500 | regenerator-runtime@0.14.1: {}
2501 |
2502 | resolve-from@4.0.0: {}
2503 |
2504 | resolve@1.22.8:
2505 | dependencies:
2506 | is-core-module: 2.13.1
2507 | path-parse: 1.0.7
2508 | supports-preserve-symlinks-flag: 1.0.0
2509 |
2510 | reusify@1.0.4: {}
2511 |
2512 | rimraf@2.7.1:
2513 | dependencies:
2514 | glob: 7.2.3
2515 |
2516 | rollup@4.14.1:
2517 | dependencies:
2518 | '@types/estree': 1.0.5
2519 | optionalDependencies:
2520 | '@rollup/rollup-android-arm-eabi': 4.14.1
2521 | '@rollup/rollup-android-arm64': 4.14.1
2522 | '@rollup/rollup-darwin-arm64': 4.14.1
2523 | '@rollup/rollup-darwin-x64': 4.14.1
2524 | '@rollup/rollup-linux-arm-gnueabihf': 4.14.1
2525 | '@rollup/rollup-linux-arm64-gnu': 4.14.1
2526 | '@rollup/rollup-linux-arm64-musl': 4.14.1
2527 | '@rollup/rollup-linux-powerpc64le-gnu': 4.14.1
2528 | '@rollup/rollup-linux-riscv64-gnu': 4.14.1
2529 | '@rollup/rollup-linux-s390x-gnu': 4.14.1
2530 | '@rollup/rollup-linux-x64-gnu': 4.14.1
2531 | '@rollup/rollup-linux-x64-musl': 4.14.1
2532 | '@rollup/rollup-win32-arm64-msvc': 4.14.1
2533 | '@rollup/rollup-win32-ia32-msvc': 4.14.1
2534 | '@rollup/rollup-win32-x64-msvc': 4.14.1
2535 | fsevents: 2.3.3
2536 |
2537 | run-parallel@1.2.0:
2538 | dependencies:
2539 | queue-microtask: 1.2.3
2540 |
2541 | sade@1.8.1:
2542 | dependencies:
2543 | mri: 1.2.0
2544 |
2545 | sander@0.5.1:
2546 | dependencies:
2547 | es6-promise: 3.3.1
2548 | graceful-fs: 4.2.11
2549 | mkdirp: 0.5.6
2550 | rimraf: 2.7.1
2551 |
2552 | set-cookie-parser@2.6.0: {}
2553 |
2554 | shebang-command@2.0.0:
2555 | dependencies:
2556 | shebang-regex: 3.0.0
2557 |
2558 | shebang-regex@3.0.0: {}
2559 |
2560 | signal-exit@3.0.7: {}
2561 |
2562 | signal-exit@4.1.0: {}
2563 |
2564 | sirv@2.0.4:
2565 | dependencies:
2566 | '@polka/url': 1.0.0-next.25
2567 | mrmime: 2.0.0
2568 | totalist: 3.0.1
2569 |
2570 | sorcery@0.11.0:
2571 | dependencies:
2572 | '@jridgewell/sourcemap-codec': 1.4.15
2573 | buffer-crc32: 0.2.13
2574 | minimist: 1.2.8
2575 | sander: 0.5.1
2576 |
2577 | source-map-js@1.2.0: {}
2578 |
2579 | string-width@4.2.3:
2580 | dependencies:
2581 | emoji-regex: 8.0.0
2582 | is-fullwidth-code-point: 3.0.0
2583 | strip-ansi: 6.0.1
2584 |
2585 | string-width@5.1.2:
2586 | dependencies:
2587 | eastasianwidth: 0.2.0
2588 | emoji-regex: 9.2.2
2589 | strip-ansi: 7.1.0
2590 |
2591 | strip-ansi@6.0.1:
2592 | dependencies:
2593 | ansi-regex: 5.0.1
2594 |
2595 | strip-ansi@7.1.0:
2596 | dependencies:
2597 | ansi-regex: 6.0.1
2598 |
2599 | strip-final-newline@2.0.0: {}
2600 |
2601 | strip-final-newline@3.0.0: {}
2602 |
2603 | strip-indent@3.0.0:
2604 | dependencies:
2605 | min-indent: 1.0.1
2606 |
2607 | sucrase@3.35.0:
2608 | dependencies:
2609 | '@jridgewell/gen-mapping': 0.3.5
2610 | commander: 4.1.1
2611 | glob: 10.3.12
2612 | lines-and-columns: 1.2.4
2613 | mz: 2.7.0
2614 | pirates: 4.0.6
2615 | ts-interface-checker: 0.1.13
2616 |
2617 | supports-preserve-symlinks-flag@1.0.0: {}
2618 |
2619 | svelte-check@3.6.9(postcss-load-config@5.0.3(jiti@2.0.0)(postcss@8.4.38))(postcss@8.4.38)(svelte@4.2.12):
2620 | dependencies:
2621 | '@jridgewell/trace-mapping': 0.3.25
2622 | chokidar: 3.6.0
2623 | fast-glob: 3.3.2
2624 | import-fresh: 3.3.0
2625 | picocolors: 1.0.0
2626 | sade: 1.8.1
2627 | svelte: 4.2.12
2628 | svelte-preprocess: 5.1.3(postcss-load-config@5.0.3(jiti@2.0.0)(postcss@8.4.38))(postcss@8.4.38)(svelte@4.2.12)(typescript@5.4.4)
2629 | typescript: 5.4.4
2630 | transitivePeerDependencies:
2631 | - '@babel/core'
2632 | - coffeescript
2633 | - less
2634 | - postcss
2635 | - postcss-load-config
2636 | - pug
2637 | - sass
2638 | - stylus
2639 | - sugarss
2640 |
2641 | svelte-hmr@0.15.3(svelte@4.2.12):
2642 | dependencies:
2643 | svelte: 4.2.12
2644 |
2645 | svelte-preprocess@5.1.3(postcss-load-config@5.0.3(jiti@2.0.0)(postcss@8.4.38))(postcss@8.4.38)(svelte@4.2.12)(typescript@5.4.4):
2646 | dependencies:
2647 | '@types/pug': 2.0.10
2648 | detect-indent: 6.1.0
2649 | magic-string: 0.30.9
2650 | sorcery: 0.11.0
2651 | strip-indent: 3.0.0
2652 | svelte: 4.2.12
2653 | optionalDependencies:
2654 | postcss: 8.4.38
2655 | postcss-load-config: 5.0.3(jiti@2.0.0)(postcss@8.4.38)
2656 | typescript: 5.4.4
2657 |
2658 | svelte-sonner@0.3.22(svelte@4.2.12):
2659 | dependencies:
2660 | svelte: 4.2.12
2661 |
2662 | svelte@4.2.12:
2663 | dependencies:
2664 | '@ampproject/remapping': 2.3.0
2665 | '@jridgewell/sourcemap-codec': 1.4.15
2666 | '@jridgewell/trace-mapping': 0.3.25
2667 | '@types/estree': 1.0.5
2668 | acorn: 8.11.3
2669 | aria-query: 5.3.0
2670 | axobject-query: 4.0.0
2671 | code-red: 1.0.4
2672 | css-tree: 2.3.1
2673 | estree-walker: 3.0.3
2674 | is-reference: 3.0.2
2675 | locate-character: 3.0.0
2676 | magic-string: 0.30.9
2677 | periscopic: 3.1.0
2678 |
2679 | tabbable@6.2.0: {}
2680 |
2681 | tailwind-merge@2.2.2:
2682 | dependencies:
2683 | '@babel/runtime': 7.24.4
2684 |
2685 | tailwind-variants@0.2.1(tailwindcss@3.4.13):
2686 | dependencies:
2687 | tailwind-merge: 2.2.2
2688 | tailwindcss: 3.4.13
2689 |
2690 | tailwindcss@3.4.13:
2691 | dependencies:
2692 | '@alloc/quick-lru': 5.2.0
2693 | arg: 5.0.2
2694 | chokidar: 3.6.0
2695 | didyoumean: 1.2.2
2696 | dlv: 1.1.3
2697 | fast-glob: 3.3.2
2698 | glob-parent: 6.0.2
2699 | is-glob: 4.0.3
2700 | jiti: 1.21.0
2701 | lilconfig: 2.1.0
2702 | micromatch: 4.0.5
2703 | normalize-path: 3.0.0
2704 | object-hash: 3.0.0
2705 | picocolors: 1.0.0
2706 | postcss: 8.4.38
2707 | postcss-import: 15.1.0(postcss@8.4.38)
2708 | postcss-js: 4.0.1(postcss@8.4.38)
2709 | postcss-load-config: 4.0.2(postcss@8.4.38)
2710 | postcss-nested: 6.0.1(postcss@8.4.38)
2711 | postcss-selector-parser: 6.0.16
2712 | resolve: 1.22.8
2713 | sucrase: 3.35.0
2714 | transitivePeerDependencies:
2715 | - ts-node
2716 |
2717 | tauri-plugin-upload-api@https://codeload.github.com/tauri-apps/tauri-plugin-upload/tar.gz/56d958697109d854bca19050403b017c9a28b434:
2718 | dependencies:
2719 | '@tauri-apps/api': 1.5.3
2720 |
2721 | thenify-all@1.6.0:
2722 | dependencies:
2723 | thenify: 3.3.1
2724 |
2725 | thenify@3.3.1:
2726 | dependencies:
2727 | any-promise: 1.3.0
2728 |
2729 | tiny-glob@0.2.9:
2730 | dependencies:
2731 | globalyzer: 0.1.0
2732 | globrex: 0.1.2
2733 |
2734 | to-regex-range@5.0.1:
2735 | dependencies:
2736 | is-number: 7.0.0
2737 |
2738 | totalist@3.0.1: {}
2739 |
2740 | ts-interface-checker@0.1.13: {}
2741 |
2742 | tslib@2.6.2: {}
2743 |
2744 | typescript@5.4.4: {}
2745 |
2746 | ufo@1.5.3: {}
2747 |
2748 | unplugin-icons@0.18.5:
2749 | dependencies:
2750 | '@antfu/install-pkg': 0.3.2
2751 | '@antfu/utils': 0.7.7
2752 | '@iconify/utils': 2.1.22
2753 | debug: 4.3.4
2754 | kolorist: 1.8.0
2755 | local-pkg: 0.5.0
2756 | unplugin: 1.10.1
2757 | transitivePeerDependencies:
2758 | - supports-color
2759 |
2760 | unplugin@1.10.1:
2761 | dependencies:
2762 | acorn: 8.11.3
2763 | chokidar: 3.6.0
2764 | webpack-sources: 3.2.3
2765 | webpack-virtual-modules: 0.6.1
2766 |
2767 | update-browserslist-db@1.1.1(browserslist@4.24.0):
2768 | dependencies:
2769 | browserslist: 4.24.0
2770 | escalade: 3.2.0
2771 | picocolors: 1.1.0
2772 |
2773 | util-deprecate@1.0.2: {}
2774 |
2775 | vite@5.2.8:
2776 | dependencies:
2777 | esbuild: 0.20.2
2778 | postcss: 8.4.38
2779 | rollup: 4.14.1
2780 | optionalDependencies:
2781 | fsevents: 2.3.3
2782 |
2783 | vitefu@0.2.5(vite@5.2.8):
2784 | optionalDependencies:
2785 | vite: 5.2.8
2786 |
2787 | webpack-sources@3.2.3: {}
2788 |
2789 | webpack-virtual-modules@0.6.1: {}
2790 |
2791 | which@2.0.2:
2792 | dependencies:
2793 | isexe: 2.0.0
2794 |
2795 | wrap-ansi@7.0.0:
2796 | dependencies:
2797 | ansi-styles: 4.3.0
2798 | string-width: 4.2.3
2799 | strip-ansi: 6.0.1
2800 |
2801 | wrap-ansi@8.1.0:
2802 | dependencies:
2803 | ansi-styles: 6.2.1
2804 | string-width: 5.1.2
2805 | strip-ansi: 7.1.0
2806 |
2807 | wrappy@1.0.2: {}
2808 |
2809 | yaml@2.4.1: {}
2810 |
2811 | yocto-queue@0.1.0: {}
2812 |
--------------------------------------------------------------------------------