├── .npmrc
├── src
├── types
│ └── index.d.ts
├── routes
│ ├── +page.ts
│ ├── weekdata
│ │ ├── +page.ts
│ │ └── +page.svelte
│ ├── +page.svelte
│ └── +layout.svelte
├── favicon.ico
├── lib
│ ├── assets
│ │ ├── icon.png
│ │ ├── favicon.png
│ │ ├── icon-square.png
│ │ ├── icon-square-1240.png
│ │ ├── close.svg
│ │ └── ic_fluent_timer_24_filled.svg
│ ├── components
│ │ ├── caption.svelte
│ │ ├── title.svelte
│ │ ├── stat.svelte
│ │ ├── graph.svelte
│ │ └── activityGraph.svelte
│ ├── helpers
│ │ ├── date.ts
│ │ └── color.ts
│ ├── data.ts
│ ├── stores.ts
│ └── islands
│ │ ├── adjustDialog.svelte
│ │ ├── week.svelte
│ │ └── day.svelte
├── app.html
├── app.d.ts
├── hooks.server.ts
└── app.css
├── Images
├── icon.png
└── activity-tracker.png
├── src-tauri
├── .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
├── src
│ ├── threads.rs
│ ├── records.rs
│ ├── threads
│ │ ├── adjustment_thread.rs
│ │ ├── data_thread.rs
│ │ └── event_thread.rs
│ ├── week_stats.rs
│ ├── throttle.rs
│ ├── data.rs
│ ├── day_record_file.rs
│ ├── week_data.rs
│ ├── main.rs
│ └── day_record.rs
├── build.rs
├── Cargo.toml
└── tauri.conf.json
├── .vscode
├── extensions.json
└── settings.json
├── .prettierrc
├── .eslintignore
├── .prettierignore
├── vite.config.ts
├── .eslintrc.cjs
├── svelte.config.js
├── tsconfig.json
├── .gitignore
├── .github
└── workflows
│ └── publish.yml
├── package.json
├── README.md
└── pnpm-lock.yaml
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/src/types/index.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'days-of-week';
--------------------------------------------------------------------------------
/src/routes/+page.ts:
--------------------------------------------------------------------------------
1 | export const prerender = true;
2 |
--------------------------------------------------------------------------------
/src/routes/weekdata/+page.ts:
--------------------------------------------------------------------------------
1 | export const prerender = true;
2 |
--------------------------------------------------------------------------------
/Images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/Images/icon.png
--------------------------------------------------------------------------------
/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src/favicon.ico
--------------------------------------------------------------------------------
/src/lib/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src/lib/assets/icon.png
--------------------------------------------------------------------------------
/src-tauri/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | # will have compiled files and executables
3 | /target/
4 |
5 |
--------------------------------------------------------------------------------
/src-tauri/icons/32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/32x32.png
--------------------------------------------------------------------------------
/src-tauri/icons/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/icon.icns
--------------------------------------------------------------------------------
/src-tauri/icons/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/icon.ico
--------------------------------------------------------------------------------
/src-tauri/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/icon.png
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"]
3 | }
4 |
--------------------------------------------------------------------------------
/Images/activity-tracker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/Images/activity-tracker.png
--------------------------------------------------------------------------------
/src-tauri/icons/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/128x128.png
--------------------------------------------------------------------------------
/src/lib/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src/lib/assets/favicon.png
--------------------------------------------------------------------------------
/src-tauri/icons/128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/128x128@2x.png
--------------------------------------------------------------------------------
/src-tauri/icons/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/StoreLogo.png
--------------------------------------------------------------------------------
/src/lib/assets/icon-square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src/lib/assets/icon-square.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square30x30Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/Square30x30Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square44x44Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/Square44x44Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square71x71Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/Square71x71Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square89x89Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/Square89x89Logo.png
--------------------------------------------------------------------------------
/src/lib/assets/icon-square-1240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src/lib/assets/icon-square-1240.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square107x107Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/Square107x107Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square142x142Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/Square142x142Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square150x150Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/Square150x150Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square284x284Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/Square284x284Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square310x310Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheRolfFR/activity-tracker/HEAD/src-tauri/icons/Square310x310Logo.png
--------------------------------------------------------------------------------
/src-tauri/src/threads.rs:
--------------------------------------------------------------------------------
1 | mod adjustment_thread;
2 | pub use adjustment_thread::*;
3 |
4 | mod data_thread;
5 | pub use data_thread::*;
6 |
7 | mod event_thread;
8 | pub use event_thread::*;
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": true,
3 | "singleQuote": true,
4 | "trailingComma": "none",
5 | "printWidth": 100,
6 | "pluginSearchDirs": ["."],
7 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
8 | }
9 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 |
10 | # Ignore files for PNPM, NPM and YARN
11 | pnpm-lock.yaml
12 | package-lock.json
13 | yarn.lock
14 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 |
10 | # Ignore files for PNPM, NPM and YARN
11 | pnpm-lock.yaml
12 | package-lock.json
13 | yarn.lock
14 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 | import type { UserConfig } from 'vite';
3 |
4 | const config: UserConfig = {
5 | plugins: [
6 | sveltekit(),
7 | ]
8 | };
9 |
10 | export default config;
11 |
--------------------------------------------------------------------------------
/src-tauri/src/records.rs:
--------------------------------------------------------------------------------
1 | use serde::{Serialize, Deserialize};
2 | use ts_rs::TS;
3 |
4 | use crate::data::MeasureCount;
5 |
6 | #[derive(Debug, Clone, Copy, Default, TS, Serialize, Deserialize)]
7 | pub struct Record {
8 | pub clicks: MeasureCount,
9 | pub inputs: MeasureCount
10 | }
--------------------------------------------------------------------------------
/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Actibity tracker
6 |
7 | %sveltekit.head%
8 |
9 |
10 |
11 | %sveltekit.body%
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/lib/components/caption.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://kit.svelte.dev/docs/types#app
2 | // for information about these interfaces
3 | // and what to do when importing types
4 | declare namespace App {
5 | interface Locals {
6 | userid: string;
7 | }
8 |
9 | // interface PageData {}
10 |
11 | // interface Error {}
12 |
13 | // interface Platform {}
14 | }
15 |
--------------------------------------------------------------------------------
/src/lib/helpers/date.ts:
--------------------------------------------------------------------------------
1 | function padTo2Digits(num: number|string) {
2 | return String(num).padStart(2, '0');
3 | }
4 |
5 | const getHour = (s: number) => {
6 | const now = new Date(s*1000);
7 |
8 | return padTo2Digits(now.getHours())
9 | + 'h' + padTo2Digits(now.getMinutes());
10 | };
11 |
12 | export { getHour, padTo2Digits };
--------------------------------------------------------------------------------
/src/lib/assets/close.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/lib/assets/ic_fluent_timer_24_filled.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/lib/components/title.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/hooks.server.ts:
--------------------------------------------------------------------------------
1 | import type { Handle } from '@sveltejs/kit';
2 |
3 | export const handle: Handle = async ({ event, resolve }) => {
4 | let userid = event.cookies.get('userid');
5 |
6 | if (!userid) {
7 | // if this is the first time the user has visited this app,
8 | // set a cookie so that we recognise them when they return
9 | userid = crypto.randomUUID();
10 | event.cookies.set('userid', userid, { path: '/' });
11 | }
12 |
13 | event.locals.userid = userid;
14 |
15 | return resolve(event);
16 | };
17 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parser: '@typescript-eslint/parser',
4 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'],
5 | plugins: ['svelte3', '@typescript-eslint'],
6 | ignorePatterns: ['*.cjs'],
7 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
8 | settings: {
9 | 'svelte3/typescript': () => require('typescript')
10 | },
11 | parserOptions: {
12 | sourceType: 'module',
13 | ecmaVersion: 2020
14 | },
15 | env: {
16 | browser: true,
17 | es2017: true,
18 | node: true
19 | }
20 | };
21 |
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | import adapter from '@sveltejs/adapter-static'; // This was changed from adapter-auto
2 | import preprocess from 'svelte-preprocess';
3 |
4 | /** @type {import('@sveltejs/kit').Config} */
5 | const config = {
6 | // Consult https://github.com/sveltejs/svelte-preprocess
7 | // for more information about preprocessors
8 | preprocess: preprocess(),
9 |
10 | kit: {
11 | adapter: adapter(),
12 | alias: {
13 | '$src/*': './src/*',
14 | '$bindings/*': './src-tauri/bindings/*',
15 | '$components/*': './src/lib/components/*'
16 | }
17 | }
18 | };
19 |
20 | export default config;
21 |
--------------------------------------------------------------------------------
/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 | "typeRoots":["src/types/index.d.ts"]
13 | }
14 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
15 | //
16 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
17 | // from the referenced tsconfig.json - TypeScript does not merge them in
18 | }
19 |
--------------------------------------------------------------------------------
/src-tauri/src/threads/adjustment_thread.rs:
--------------------------------------------------------------------------------
1 | use std::sync::mpsc::{Receiver, Sender};
2 |
3 | use log::error;
4 |
5 | use super::DataMessage;
6 |
7 | pub fn adjustment_thread(adj_rcv: Receiver, evt_send: Sender) {
8 | loop {
9 | match adj_rcv.recv() {
10 | Ok(adj) => {
11 | if let Err(err_send) = evt_send.send(DataMessage::Adjustement(adj)) {
12 | error!("Failed to send async adjustment: {err_send}");
13 | }
14 | },
15 | Err(err) => {
16 | error!("Failed to received adjustment in thread: {err}");
17 | }
18 | };
19 | }
20 | }
--------------------------------------------------------------------------------
/src-tauri/build.rs:
--------------------------------------------------------------------------------
1 | use std::process::Command;
2 |
3 | fn main() {
4 | let commit_hash_output = Command::new("git").args(&["rev-parse", "--short", "HEAD"]).output().unwrap();
5 | let commit_hash = String::from_utf8(commit_hash_output.stdout).unwrap();
6 | println!("cargo:rustc-env=GIT_HASH={}", commit_hash);
7 |
8 | let commit_date_output = Command::new("git").args(&["-c", "log.showSignature=false", "log", "-1", "--date=format:\"%Y.%m.%d\"", "--format=\"%ad\""]).output().unwrap();
9 | let commit_date = String::from_utf8(commit_date_output.stdout).unwrap().replace("\"", "");
10 | println!("cargo:rustc-env=GIT_DATE={}", commit_date);
11 | tauri_build::build()
12 | }
13 |
--------------------------------------------------------------------------------
/src/app.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | position: relative;
4 | }
5 | html,
6 | body, body > div {
7 | overflow: hidden;
8 | background: transparent;
9 | height: 100vh;
10 | }
11 |
12 | .pointer {
13 | cursor: pointer;
14 | }
15 |
16 | body > div {
17 | display: flex;
18 | flex-direction: column;
19 | }
20 | ::-webkit-scrollbar {
21 | width: 5px;
22 | height: 5px;
23 | }
24 | ::-webkit-scrollbar-thumb {
25 | box-shadow: inset 0 0 6px rgba(0,0,0,.3);
26 | border-radius: 3px;
27 | background-color: #555;
28 | }
29 |
30 | .flex {
31 | display: flex;
32 | flex: 1 1 auto;
33 | align-items: flex-start;
34 | justify-content: stretch;
35 | margin: -5px;
36 | }
37 | .flex > * {
38 | margin: 5px;
39 | flex-grow: 1;
40 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 | .vercel
10 | .output
11 |
12 | ### VisualStudioCode ###
13 | .vscode/*
14 | !.vscode/settings.json
15 | !.vscode/tasks.json
16 | !.vscode/launch.json
17 | !.vscode/extensions.json
18 | !.vscode/*.code-snippets
19 |
20 | # Local History for Visual Studio Code
21 | .history/
22 |
23 | # Built Visual Studio Code Extensions
24 | *.vsix
25 |
26 | ### VisualStudioCode Patch ###
27 | # Ignore all local history of files
28 | .history
29 | .ionide
30 |
31 | # Support for Project snippet scope
32 | .vscode/*.code-snippets
33 |
34 | # Ignore code-workspaces
35 | *.code-workspace
36 |
37 | # rust TS bindings
38 | src-tauri/bindings
39 |
40 | Images/icon.psd
41 |
--------------------------------------------------------------------------------
/src-tauri/src/week_stats.rs:
--------------------------------------------------------------------------------
1 | use std::collections::hash_map::ValuesMut;
2 | use ts_rs::TS;
3 |
4 | use crate::day_record::DayRecord;
5 |
6 | #[derive(Debug, Clone, serde::Serialize, serde::Deserialize, TS)]
7 | #[ts(export)]
8 | pub struct WeekStats {
9 | #[ts(type = "number")]
10 | pub done: u64
11 | }
12 |
13 | impl<'a> From> for WeekStats {
14 | fn from(values: ValuesMut) -> Self {
15 | let stats = values.into_iter().fold(WeekStats {
16 | done: 0
17 | }, |mut acc,cur| {
18 | let stats = cur.get_stats();
19 | let secs = stats.duration.as_secs();
20 | acc.done += secs;
21 | acc
22 | });
23 |
24 | stats
25 | }
26 | }
--------------------------------------------------------------------------------
/src/lib/components/stat.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
{title}
15 | {#if typeof(detail) === "string" }
16 |
17 |
{detail}
18 | {/if}
19 |
20 |
{time}
21 |
22 |
23 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "files.exclude": {
3 | "**/.git": true,
4 | "**/.svn": true,
5 | "**/.hg": true,
6 | "**/CVS": true,
7 | "**/.DS_Store": true,
8 | "**/Thumbs.db": true,
9 | "**/__pycache__": true,
10 | "**/.idea": true,
11 | "**/.classpath": true,
12 | "**/.project": true,
13 | "**/.settings": true,
14 | "**/.factorypath": true,
15 | "**/node_modules": false
16 | },
17 | "json.schemas": [{
18 | "fileMatch": [
19 | "tauri.conf.json",
20 | ],
21 | "url": "https://raw.githubusercontent.com/tauri-apps/tauri/1.2/tooling/cli/schema.json"
22 | }],
23 | "rust-analyzer.server.extraEnv": {
24 | "CARGO_TARGET_DIR": "${workspaceFolder}/src-tauri/target/analyzer"
25 | },
26 | "rust-analyzer.cargo.targetDir": "${workspaceFolder}/src-tauri/target/analyzer"
27 | }
--------------------------------------------------------------------------------
/src/lib/data.ts:
--------------------------------------------------------------------------------
1 | import type { DayPayload } from './../../src-tauri/bindings/DayPayload';
2 | import type { DayStats } from '$bindings/DayStats';
3 | import type { WeekStats } from '$bindings/WeekStats';
4 | import type { ActivitySeries } from "$bindings/ActivitySeries";
5 | import type { Measure } from "$bindings/Measure";
6 |
7 | export interface Activity {
8 | clicks_per_minute: number,
9 | click_series: ActivitySeries,
10 | inputs_per_minute: number,
11 | input_series: ActivitySeries,
12 | adjusted: number
13 | }
14 |
15 | export interface ActivityPeriod {
16 | start: number,
17 | end?: number,
18 | level: Activity
19 | }
20 |
21 | export interface ActDur {
22 | count: number,
23 | from: number,
24 | to: number
25 | }
26 |
27 | export interface Payload {
28 | activity: Activity,
29 | today: number,
30 | week_payload: DayPayload[],
31 | week_stats: WeekStats,
32 | today_stats: DayStats,
33 | version: string
34 | }
35 |
36 | export type WeekActivity = Array;
37 |
--------------------------------------------------------------------------------
/src/lib/stores.ts:
--------------------------------------------------------------------------------
1 | import { writable, type Writable } from 'svelte/store';
2 |
3 | function isBrowser() {
4 | return typeof(localStorage) != 'undefined' && typeof(window) != 'undefined'
5 | }
6 |
7 | function createStore(key: string, default_value: T, parse: (v: string) => T, obj: (v: Writable) => V): V {
8 | let initial: T;
9 | if(isBrowser()) {
10 | const val = localStorage.getItem(key);
11 | initial = val ? parse(val) : default_value;
12 | } else {
13 | initial = default_value;
14 | }
15 |
16 | const my_writable = writable(initial);
17 | my_writable.subscribe(v => {
18 | if (isBrowser()) {
19 | localStorage.setItem(key, String(v));
20 | }
21 | });
22 | return obj(my_writable);
23 | }
24 |
25 | // 2250 = 37h30 in minutes
26 | export const total_store = createStore('TOTAL_HOURS', 2250, v => {
27 | return Number.parseInt(v, 10)
28 | }, writable => {
29 | const { subscribe, set } = writable;
30 |
31 | return {
32 | subscribe,
33 | set
34 | }
35 | });
--------------------------------------------------------------------------------
/src-tauri/src/throttle.rs:
--------------------------------------------------------------------------------
1 | use std::time::{Duration, Instant};
2 |
3 | pub struct Throttle {
4 | // settings
5 | duration: Duration,
6 | executions: usize,
7 |
8 | // inner data
9 | instant: Instant,
10 | count: usize
11 | }
12 |
13 | impl Throttle {
14 | /// Creates new Throttle
15 | pub(crate) fn new(duration: Duration, executions: usize) -> Self {
16 | return Self {
17 | duration,
18 | executions,
19 | instant: Instant::now(),
20 | count: 0usize
21 | }
22 | }
23 |
24 | /// Updates and returns true if valid throttle
25 | pub(crate) fn update(&mut self) -> bool {
26 | let now = Instant::now();
27 |
28 | if now.duration_since(self.instant) < self.duration {
29 | if self.count < self.executions {
30 | self.count+=1;
31 | true
32 | } else {
33 | false
34 | }
35 | } else {
36 | // reset
37 | self.instant = now;
38 | self.count = 0;
39 | true
40 | }
41 | }
42 | }
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: "publish"
2 | on:
3 | push:
4 | paths:
5 | - 'src-tauri/tauri.conf.json'
6 | workflow_dispatch:
7 |
8 | jobs:
9 | build-tauri:
10 | strategy:
11 | fail-fast: false
12 | matrix:
13 | platform: [windows-latest]
14 |
15 | runs-on: ${{ matrix.platform }}
16 | steps:
17 | - uses: actions/checkout@v3
18 | - uses: pnpm/action-setup@v2
19 | with:
20 | version: 8
21 | - name: setup node
22 | uses: actions/setup-node@v3
23 | with:
24 | node-version: 18
25 | cache: 'pnpm'
26 | - name: install Rust stable
27 | uses: actions-rs/toolchain@v1
28 | with:
29 | toolchain: stable
30 | - name: install app dependencies and build it
31 | run: pnpm install && pnpm run build
32 | - uses: tauri-apps/tauri-action@v0
33 | env:
34 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
35 | with:
36 | args: --bundles nsis
37 | tagName: v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version
38 | releaseName: "Activity tracker v__VERSION__"
39 | releaseBody: "See the assets to download this version and install."
40 | releaseDraft: false
41 | prerelease: false
--------------------------------------------------------------------------------
/src-tauri/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "activity-tracker"
3 | version = "0.5.0"
4 | description = "A Tauri App"
5 | authors = ["you"]
6 | license = ""
7 | repository = ""
8 | edition = "2021"
9 | rust-version = "1.57"
10 |
11 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
12 |
13 | [build-dependencies]
14 | tauri-build = { version = "1.5.5", features = [] }
15 |
16 | [dependencies]
17 | serde_json = "1.0.128"
18 | rdev = "0.5.3"
19 | bounded-vec-deque = "0.1.1"
20 | serde = { version = "1.0.210", features = ["derive"] }
21 | tauri = { version = "1.8.0", features = ["api-all", "devtools", "system-tray"] }
22 | chrono = { version = "0.4.38", features = ["serde"] }
23 | window-vibrancy = "0.4"
24 | tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
25 | ts-rs = { version = "10.0.0", features = ["chrono-impl", "no-serde-warnings", "serde-compat"] }
26 | serde_with = "3.9.0"
27 | sorted-vec = "0.8.3"
28 | log = "0.4.22"
29 | simple-logging = "2.0.2"
30 |
31 | [features]
32 | # by default Tauri runs in production mode
33 | # when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL
34 | default = [ "custom-protocol" ]
35 | # this feature is used used for production builds where `devPath` points to the filesystem
36 | # DO NOT remove this
37 | custom-protocol = [ "tauri/custom-protocol" ]
38 |
--------------------------------------------------------------------------------
/src/lib/helpers/color.ts:
--------------------------------------------------------------------------------
1 | function rgbToHex(r: number, g: number, b: number) {
2 | return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
3 | }
4 |
5 | function hexToRgb(hex: string) {
6 | const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
7 | return result
8 | ? {
9 | r: parseInt(result[1], 16),
10 | g: parseInt(result[2], 16),
11 | b: parseInt(result[3], 16)
12 | }
13 | : null;
14 | }
15 |
16 | // returns an array of startColor, colors between according to steps, and endColor
17 | function colorRamp(startColor: string, endColor: string, steps: number) {
18 | const ramp = [];
19 |
20 | ramp.push(startColor);
21 |
22 | const startColorRgb = hexToRgb(startColor);
23 | const endColorRgb = hexToRgb(endColor);
24 |
25 | if(startColorRgb === null || endColorRgb === null) throw new Error('Failed to parse colors');
26 |
27 | const rInc = Math.round((endColorRgb.r - startColorRgb.r) / (steps + 1));
28 | const gInc = Math.round((endColorRgb.g - startColorRgb.g) / (steps + 1));
29 | const bInc = Math.round((endColorRgb.b - startColorRgb.b) / (steps + 1));
30 |
31 | for (let i = 0; i < steps; i++) {
32 | startColorRgb.r += rInc;
33 | startColorRgb.g += gInc;
34 | startColorRgb.b += bInc;
35 |
36 | ramp.push(rgbToHex(startColorRgb.r, startColorRgb.g, startColorRgb.b));
37 | }
38 | ramp.push(endColor);
39 |
40 | return ramp;
41 | }
42 |
43 | export { rgbToHex, hexToRgb, colorRamp }
--------------------------------------------------------------------------------
/src/lib/islands/adjustDialog.svelte:
--------------------------------------------------------------------------------
1 |
22 |
23 |
24 |
28 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src-tauri/src/threads/data_thread.rs:
--------------------------------------------------------------------------------
1 | use std::sync::mpsc::{Receiver, Sender};
2 |
3 | use log::error;
4 |
5 | use crate::{data::{ONE_SECOND, ONE_MINUTE}, throttle::Throttle, records::Record, week_data::{WeekData, Payload}};
6 |
7 | pub enum DataMessage {
8 | EventRecord(Record),
9 | Adjustement(i32)
10 | }
11 |
12 | pub fn data_thread(evt_rchan: Receiver, evt_schan: Sender) -> ! {
13 | let mut week_data: WeekData = WeekData::load();
14 |
15 | // once per minute
16 | let mut file_throttle = Throttle::new(ONE_MINUTE, 1);
17 | let mut ui_throttle = Throttle::new(ONE_SECOND, 1);
18 | let min_timeout = ONE_MINUTE.min(ONE_SECOND);
19 |
20 | loop {
21 | let res_message = evt_rchan.recv_timeout(min_timeout);
22 |
23 | // diverge and converge
24 | if let Ok(message) = res_message {
25 | match message {
26 | DataMessage::EventRecord(record) => {
27 | week_data.update_today(record);
28 | },
29 | DataMessage::Adjustement(adjusted) => {
30 | week_data.adjust_today(adjusted);
31 | }
32 | }
33 | }
34 |
35 | if ui_throttle.update() {
36 | if let Err(err) = evt_schan.send(week_data.to_payload()) {
37 | error!("Failed to send payload from data thread: {}", err);
38 | }
39 | }
40 |
41 | if file_throttle.update() {
42 | week_data.save();
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src-tauri/src/threads/event_thread.rs:
--------------------------------------------------------------------------------
1 | use rdev::{listen, Event, EventType::*};
2 | use std::{thread, sync::mpsc::Sender};
3 | use log::error;
4 |
5 | use crate::{records::Record, throttle::Throttle, data::ONE_SECOND};
6 |
7 | use super::DataMessage;
8 |
9 | pub fn event_thread(evt_schan: Sender) {
10 | let mut record = Record::default();
11 | let mut evt_throttle = Throttle::new(ONE_SECOND, 1);
12 | // event listener
13 | thread::spawn(move || {
14 | if let Err(err_listen) = listen(move |event: Event| {
15 | let modified = match event.event_type {
16 | KeyRelease(_) |
17 | ButtonRelease(_) |
18 | MouseMove { x: _, y: _ } |
19 | Wheel { delta_x: _, delta_y: _ } => false,
20 | KeyPress(_) => {
21 | record.inputs = record.inputs.saturating_add(1);
22 | true
23 | },
24 | ButtonPress(_) => {
25 | record.clicks = record.clicks.saturating_add(1);
26 | true
27 | }
28 | };
29 |
30 | if modified && evt_throttle.update() {
31 | if let Err(err_send) = evt_schan.send(DataMessage::EventRecord(record)) {
32 | error!("Failed to send record in data thread: {err_send}");
33 | }
34 | // reset
35 | record = Record::default();
36 | }
37 | }) {
38 | error!("Failed to listen in data thread: {:?}", err_listen);
39 | }
40 | });
41 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte",
3 | "version": "0.0.1",
4 | "scripts": {
5 | "dev": "vite dev",
6 | "build": "vite build",
7 | "preview": "vite preview",
8 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
9 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
10 | "lint": "prettier --check . && eslint .",
11 | "format": "prettier --write .",
12 | "bindings": "cd src-tauri && cargo test && cd .."
13 | },
14 | "devDependencies": {
15 | "@sveltejs/adapter-auto": "3.2.5",
16 | "@sveltejs/adapter-static": "3.0.5",
17 | "@sveltejs/kit": "2.5.28",
18 | "@sveltejs/vite-plugin-svelte": "^3.1.2",
19 | "@tauri-apps/cli": "1.6.2",
20 | "@types/cookie": "0.6.0",
21 | "@types/rollup-plugin-svelte-svg": "1.0.6",
22 | "@typescript-eslint/eslint-plugin": "8.6.0",
23 | "@typescript-eslint/parser": "8.6.0",
24 | "eslint": "9.11.0",
25 | "eslint-config-prettier": "9.1.0",
26 | "fluent-svelte": "1.6.0",
27 | "prettier": "3.3.3",
28 | "prettier-plugin-svelte": "3.2.6",
29 | "rollup-plugin-svelte-svg": "0.2.3",
30 | "svelte": "4.2.19",
31 | "svelte-check": "4.0.2",
32 | "svelte-preprocess": "6.0.2",
33 | "tslib": "2.7.0",
34 | "typescript": "5.6.2",
35 | "vite": "5.4.7"
36 | },
37 | "type": "module",
38 | "dependencies": {
39 | "@fontsource/fira-mono": "5.1.0",
40 | "@tauri-apps/api": "1.6.0",
41 | "days-of-week": "1.0.3",
42 | "eslint-plugin-svelte": "^2.44.0",
43 | "svelte-tiny-linked-charts": "1.6.1",
44 | "uuid": "10.0.0"
45 | },
46 | "pnpm": {
47 | "overrides": {
48 | "undici@<5.19.1": ">=5.19.1",
49 | "undici@>=2.0.0 <5.19.1": ">=5.19.1"
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src-tauri/src/data.rs:
--------------------------------------------------------------------------------
1 | use std::time::Duration;
2 |
3 | use chrono::{serde::ts_seconds, DateTime, Utc};
4 | use serde::{Serialize, Deserialize};
5 | use ts_rs::TS;
6 |
7 | #[derive(Debug, Clone, Serialize, Deserialize, TS)]
8 | #[ts(export)]
9 | pub struct ActivityLabels {
10 | pub x: String,
11 | pub y: String,
12 | }
13 |
14 |
15 | #[derive(Debug, Clone, Serialize, Deserialize)]
16 | pub struct ActivitySeries
17 | where
18 | T: Serialize + TS,
19 | {
20 | pub points: Vec,
21 | pub labels: ActivityLabels
22 | }
23 |
24 | pub type MeasureCount = u32;
25 | pub type MeasureDate = DateTime;
26 | pub type ClickMeasure = Measure;
27 | pub type InputMeasure = Measure;
28 | pub type AdjustedType = i32;
29 |
30 | #[derive(Debug, Clone, Serialize, Deserialize, TS)]
31 | #[ts(export, concrete(T = u32))]
32 | pub struct Measure
33 | where
34 | T: Serialize + Default + TS,
35 | {
36 | pub count: T,
37 | #[serde(with = "ts_seconds")]
38 | #[ts(type = "number")]
39 | pub date: DateTime
40 | }
41 |
42 | #[derive(Debug, Clone, Serialize, Deserialize)]
43 | pub struct Activity {
44 | pub clicks_per_minute: f64,
45 | pub click_series: ActivitySeries,
46 |
47 | pub inputs_per_minute: f64,
48 | pub input_series: ActivitySeries,
49 |
50 | pub adjusted: i32
51 | }
52 |
53 | pub const ONE_MINUTE: Duration = Duration::from_secs(60);
54 | pub const ONE_SECOND: Duration = Duration::from_secs(1);
55 | pub const FIVE_MINUTES: chrono::Duration = chrono::Duration::minutes(5);
56 |
57 | #[derive(Debug, Clone, Serialize, Deserialize)]
58 | pub struct ActivityPeriod {
59 | pub start: DateTime,
60 | pub end: Option>,
61 | pub level: Activity
62 | }
63 |
--------------------------------------------------------------------------------
/src-tauri/src/day_record_file.rs:
--------------------------------------------------------------------------------
1 | use std::{fs::File, path::PathBuf, io::Read};
2 |
3 | use chrono::Utc;
4 |
5 | use crate::{day_record::DayRecord, week_data::WeekData};
6 |
7 | pub struct DayRecordFile;
8 |
9 | impl DayRecordFile {
10 | fn today_index() -> u32 {
11 | WeekData::today_index()
12 | }
13 | fn path_activity_day(day_index: u32) -> PathBuf {
14 | std::env::temp_dir().join(format!("activity-tracker-{day_index}.json"))
15 | }
16 | fn path_activity_today() -> PathBuf {
17 | Self::path_activity_day(Self::today_index())
18 | }
19 |
20 | pub fn load_activity_day(day: u32) -> DayRecord {
21 | let path = Self::path_activity_day(day);
22 | let file: Option = File::open(path).ok();
23 | let mut buff = String::new();
24 |
25 | if let Some(mut f) = file {
26 | f.read_to_string(&mut buff).unwrap();
27 | match serde_json::from_str::(&buff) {
28 | Ok(val) => {
29 | if Utc::now().signed_duration_since(val.date).num_hours() >= 6*24 {
30 | DayRecord::new()
31 | } else {
32 | val
33 | }
34 | },
35 | Err(err) => {
36 | eprintln!("{}", &buff);
37 | eprintln!("{err}");
38 | panic!("Panicked while loading {day} activity");
39 | }
40 | }
41 | } else {
42 | DayRecord::new()
43 | }
44 | }
45 |
46 | pub fn save(day_record: DayRecord) {
47 | let path = Self::path_activity_today();
48 | std::fs::write(
49 | path,
50 | serde_json::to_string_pretty(&day_record).unwrap(),
51 | ).unwrap();
52 | }
53 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Activity Tracker
6 |
7 |
8 | Custom work activity tracker with Tauri, Rust and SvelteKit
9 |
10 |
11 |
12 |

13 |
14 |
15 | ## Technologies
16 |
17 | Front-end: Svelte and Fluent Svelte for visual components, svelte-tiny-linked-charts for charts visualization.
18 |
19 | Back-end: TypeScript bindings for Svelte are provided by the ts-rs crate.
20 | serde and serde_json for serialization. rdev for global input events.
21 | Massive use of MPSC channels in Rust code because data goes only one way.
22 |
23 | ## How to develop
24 |
25 | Recommended IDE Setup:
26 |
27 | - [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer)
28 |
29 | Prepare your environment: follow the guide from https://tauri.app/v1/guides/getting-started/prerequisites.
30 |
31 | Install JS and Rust dependencies
32 |
33 | ```
34 | pnpm install && cd src-tauri && cargo build
35 | ```
36 |
37 | Start dev command from root project
38 |
39 | ```
40 | cargo tauri dev
41 | ```
42 | depends on the package manager used to install tauri CLI.
43 |
--------------------------------------------------------------------------------
/src/routes/weekdata/+page.svelte:
--------------------------------------------------------------------------------
1 |
26 |
27 |
28 | {#each Object.entries(days_data) as [day_number, day]}
29 |
30 |
31 | {days.english[(Number.parseInt(day_number,10)+1)%7]}
32 |
33 |
34 | {#if day.time == 0}
35 |
36 | No data provided for this day
37 |
38 | {:else}
39 |
40 | {/if}
41 |
42 |
43 | {/each}
44 |
45 |
46 |
--------------------------------------------------------------------------------
/src/lib/islands/week.svelte:
--------------------------------------------------------------------------------
1 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/src-tauri/tauri.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "beforeDevCommand": "npm run dev",
4 | "beforeBuildCommand": "npm run bindings && npm run build",
5 | "devPath": "http://localhost:5173",
6 | "distDir": "../build/",
7 | "withGlobalTauri": true
8 | },
9 | "package": {
10 | "productName": "activity-tracker",
11 | "version": "0.9.0"
12 | },
13 | "tauri": {
14 | "allowlist": {
15 | "all": true
16 | },
17 | "bundle": {
18 | "active": true,
19 | "category": "DeveloperTool",
20 | "copyright": "",
21 | "deb": {
22 | "depends": []
23 | },
24 | "externalBin": [],
25 | "icon": [
26 | "icons/32x32.png",
27 | "icons/128x128.png",
28 | "icons/128x128@2x.png",
29 | "icons/icon.icns",
30 | "icons/icon.ico"
31 | ],
32 | "identifier": "com.therolf.activitytracker",
33 | "longDescription": "",
34 | "macOS": {
35 | "entitlements": null,
36 | "exceptionDomain": "",
37 | "frameworks": [],
38 | "providerShortName": null,
39 | "signingIdentity": null
40 | },
41 | "resources": [],
42 | "shortDescription": "",
43 | "targets": "all",
44 | "windows": {
45 | "certificateThumbprint": null,
46 | "digestAlgorithm": "sha256",
47 | "nsis": {
48 | "installMode": "both"
49 | },
50 | "timestampUrl": ""
51 | }
52 | },
53 | "security": {
54 | "csp": null
55 | },
56 | "systemTray": {
57 | "iconPath": "../src/lib/assets/icon.png",
58 | "iconAsTemplate": true
59 | },
60 | "updater": {
61 | "active": false
62 | },
63 | "windows": [
64 | {
65 | "fullscreen": false,
66 | "minHeight": 358,
67 | "height": 390,
68 | "resizable": true,
69 | "label": "main",
70 | "title": "Activity tracker",
71 | "width": 525,
72 | "decorations": false,
73 | "skipTaskbar": true,
74 | "theme": "Dark",
75 | "alwaysOnTop": true,
76 | "transparent": true,
77 | "url": "/",
78 | "visible": false
79 | },
80 | {
81 | "height": 500,
82 | "resizable": true,
83 | "title": "Activity tracker: Week data",
84 | "width": 1050,
85 | "label": "week_data",
86 | "transparent": true,
87 | "decorations": false,
88 | "skipTaskbar": false,
89 | "url": "/weekdata",
90 | "visible": false
91 | }
92 | ]
93 | },
94 | "$schema": "https://raw.githubusercontent.com/tauri-apps/tauri/dev/tooling/cli/schema.json"
95 | }
96 |
--------------------------------------------------------------------------------
/src/lib/components/graph.svelte:
--------------------------------------------------------------------------------
1 |
36 |
37 |
38 |
{title}
39 | {#if avg }
40 |
41 |
{avg.toFixed(2)}/min
42 | {/if}
43 |
44 |
45 |
46 | hovered = true }
49 | on:blur={ () => hovered = false }
50 | {labels}
51 | {values}
52 | {type}
53 | {width}
54 | fill={color}
55 | linked={uid}
56 | uid={uid}
57 | />
58 |
59 |
60 |
61 | {#if hasData}
62 | {#if hovered}
63 | Selected: :
64 | {:else}
65 | Last minute: {lastPoint.count} ({data.points.length})
66 | {/if}
67 | {/if}
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/src-tauri/src/week_data.rs:
--------------------------------------------------------------------------------
1 | use std::collections::HashMap;
2 |
3 | use chrono::{Local, Datelike};
4 | use log::error;
5 | use ts_rs::TS;
6 |
7 | use crate::{day_record::{DayRecord, DayStats}, records::Record, week_stats::WeekStats, data::Activity, day_record_file::DayRecordFile};
8 |
9 | pub struct WeekData {
10 | days: HashMap,
11 | last_dow: u32
12 | }
13 |
14 | #[derive(Debug, Clone, serde::Serialize, serde::Deserialize, TS)]
15 | #[ts(export)]
16 | pub struct DayPayload {
17 | #[ts(type="Activity")]
18 | activity: Activity,
19 | stats: DayStats,
20 | #[ts(type="number")]
21 | time: u64,
22 | adjusted: i32
23 | }
24 |
25 | #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
26 | pub struct Payload {
27 | activity: Activity,
28 | today: u32,
29 | today_stats: DayStats,
30 | week_stats: WeekStats,
31 | week_payload: HashMap,
32 | pub version: String
33 | }
34 |
35 | impl WeekData {
36 | pub fn today_index() -> u32 {
37 | Local::now().weekday().number_from_monday() - 1
38 | }
39 |
40 | fn get_today(&mut self) -> &mut DayRecord {
41 | let today_dow = Self::today_index();
42 |
43 | // new day here (I hope it will never happen)
44 | if self.last_dow != today_dow {
45 | if today_dow < self.last_dow {
46 | // new week
47 | self.days.clear();
48 | }
49 |
50 | // generally new day
51 | self.last_dow = today_dow;
52 | self.days.insert(today_dow, DayRecord::new());
53 | }
54 |
55 | if let Some(today) = self.days.get_mut(&today_dow) {
56 | today
57 | } else {
58 | error!("Failed to get today data");
59 | unreachable!("Failed to get today data");
60 | }
61 | }
62 |
63 | pub(crate) fn load() -> WeekData {
64 | // load previous days data and today data
65 | let today_dow = Self::today_index();
66 |
67 | let mut res = WeekData {
68 | days: HashMap::new(),
69 | last_dow: today_dow,
70 | };
71 |
72 |
73 | for dow in 0..=today_dow {
74 | res.days.insert(dow, DayRecordFile::load_activity_day(dow));
75 | }
76 |
77 | res
78 | }
79 |
80 | pub(crate) fn update_today(&mut self, record: Record) {
81 | let today = self.get_today();
82 |
83 | today.increase_click(record.clicks);
84 | today.increase_input(record.inputs);
85 | }
86 |
87 | /// Adjust time with desired value in minute
88 | pub(crate) fn adjust_today(&mut self, adjusted: i32) {
89 | let today = self.get_today();
90 |
91 | today.adjusted = adjusted;
92 | }
93 |
94 | pub(crate) fn to_payload(&mut self) -> Payload {
95 | let today = self.get_today();
96 | let act = today.get_activity();
97 |
98 | let today_stats = today.get_stats();
99 | let dur_secs = today_stats.duration.as_secs();
100 |
101 | let week_payload = self.days.iter().fold(HashMap::new(), |mut acc, (day, data)| {
102 | let stats = data.get_stats();
103 | let day_dur_secs = stats.duration.as_secs();
104 | let time = u64::div_ceil(day_dur_secs, 60);
105 |
106 | let this_day = DayPayload {
107 | activity: data.get_activity(),
108 | adjusted: data.adjusted,
109 | stats,
110 | time
111 | };
112 |
113 | acc.insert(day.clone(), this_day);
114 |
115 | return acc;
116 | });
117 |
118 | Payload {
119 | activity: act,
120 | today_stats,
121 | week_payload,
122 | today: (dur_secs/60u64) as u32,
123 | week_stats: WeekStats::from(self.days.values_mut()),
124 | version: String::new()
125 | }
126 | }
127 |
128 | pub(crate) fn save(&mut self) {
129 | let today = self.get_today().clone();
130 | DayRecordFile::save(today);
131 | }
132 | }
--------------------------------------------------------------------------------
/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 |
80 |
81 |
82 | Home
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | {#if activity}
98 |
99 |
104 |
105 |
106 |
112 |
113 | {/if}
114 |
115 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/src/lib/islands/day.svelte:
--------------------------------------------------------------------------------
1 |
82 |
83 |
84 |
85 |
visible = !visible}>
86 |
87 |
88 |
89 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/src/routes/+layout.svelte:
--------------------------------------------------------------------------------
1 |
45 |
46 |
47 |
48 |
51 |
52 | Activity tracker
53 | {version}
54 |
55 |
56 |
57 |
58 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
181 |
--------------------------------------------------------------------------------
/src-tauri/src/main.rs:
--------------------------------------------------------------------------------
1 | #![cfg_attr(
2 | all(not(debug_assertions), target_os = "windows"),
3 | windows_subsystem = "windows"
4 | )]
5 |
6 | use std::sync::mpsc::SyncSender;
7 | use std::sync::mpsc::sync_channel;
8 | use std::vec;
9 | use std::thread;
10 | use std::sync::mpsc::channel;
11 |
12 | use log::error;
13 | use log::{LevelFilter, info};
14 | use simple_logging;
15 | use tauri::{SystemTray, SystemTrayEvent};
16 | use tauri::{CustomMenuItem, SystemTrayMenu, SystemTrayMenuItem};
17 | use tauri::Manager;
18 | use tauri_plugin_window_state;
19 | use tauri_plugin_window_state::{AppHandleExt, StateFlags};
20 |
21 | use window_vibrancy;
22 |
23 | mod throttle;
24 |
25 | mod day_record;
26 | mod day_record_file;
27 | mod records;
28 |
29 | mod threads;
30 | use threads::*;
31 | use week_data::Payload;
32 |
33 | mod data;
34 | mod week_data;
35 | mod week_stats;
36 |
37 | #[tauri::command]
38 | fn open_week_window(app_handle: tauri::AppHandle) {
39 | let opened_window = app_handle.get_window("week_data");
40 | let window = match opened_window {
41 | None => {
42 | tauri::WindowBuilder::new(
43 | &app_handle,
44 | "week_data",
45 | tauri::WindowUrl::App("/week_data".into())
46 | ).build().unwrap();
47 | app_handle.get_window("week_data").unwrap()
48 | }
49 | Some(w) => w
50 | };
51 | window.show().unwrap();
52 | window.set_focus().unwrap();
53 | }
54 |
55 | #[tauri::command]
56 | fn adjust(val: i32, state: tauri::State>) {
57 | if let Err(err) = state.send(val) {
58 | error!("Failed to send adjustment: {err}");
59 | }
60 | }
61 |
62 | #[allow(dead_code)]
63 | #[tauri::command]
64 | fn open_menu_handle(window: tauri::Window) {
65 | if let Err(err) = window.menu_handle().show() {
66 | error!("Failed to open menu {err}");
67 | }
68 | }
69 |
70 | fn saved_states() -> StateFlags {
71 | StateFlags::VISIBLE|StateFlags::POSITION|StateFlags::SIZE
72 | }
73 |
74 | fn main() {
75 | //* Log
76 | simple_logging::log_to_file(
77 | std::env::temp_dir().join("activity-tracker.log"),
78 | LevelFilter::Trace
79 | ).unwrap();
80 |
81 | info!("Starting activity tracker...");
82 |
83 | let (evt_schan, evt_rchan) = channel::();
84 | let send_adj = evt_schan.clone();
85 | let (payload_schan, payload_rchan) = channel::();
86 | let (adj_schan, adj_rchan) = sync_channel::(1);
87 |
88 | thread::spawn(move || -> () {
89 | adjustment_thread(adj_rchan, send_adj);
90 | });
91 |
92 | event_thread(evt_schan);
93 |
94 | thread::spawn(move || -> () {
95 | data_thread(evt_rchan, payload_schan);
96 | });
97 |
98 | let quit = CustomMenuItem::new("quit".to_string(), "Quit");
99 | let week = CustomMenuItem::new("week_data".to_string(), "Week data");
100 | let hide = CustomMenuItem::new("hide".to_string(), "Hide");
101 | let tray_menu = SystemTrayMenu::new()
102 | .add_item(quit)
103 | .add_native_item(SystemTrayMenuItem::Separator)
104 | .add_item(hide)
105 | .add_item(week);
106 | let system_tray = SystemTray::new().with_menu(tray_menu);
107 |
108 | tauri::Builder::default()
109 | .manage(adj_schan)
110 | .invoke_handler(tauri::generate_handler![adjust, open_menu_handle, open_week_window])
111 | .plugin(tauri_plugin_window_state::Builder::default()
112 | .with_state_flags(saved_states())
113 | .build()
114 | )
115 | .system_tray(system_tray)
116 | .on_system_tray_event(|app, event| match event {
117 | SystemTrayEvent::LeftClick {
118 | ..
119 | } => {
120 | let opt_main_window = app.get_window("main");
121 |
122 | if let Some(main_window) = opt_main_window {
123 | if main_window.is_visible().unwrap() {
124 | main_window.hide().ok();
125 | } else {
126 | main_window.show().ok();
127 | }
128 | app.save_window_state(saved_states()).ok();
129 | }
130 | },
131 | SystemTrayEvent::MenuItemClick { id, .. } => {
132 | // get a handle to the clicked menu item
133 | // note that `tray_handle` can be called anywhere,
134 | // just get a `AppHandle` instance with `app.handle()` on the setup hook
135 | // and move it to another function or thread
136 | match id.as_str() {
137 | "quit" => {
138 | app.save_window_state(saved_states())
139 | .and_then(|_| -> Result<(), tauri_plugin_window_state::Error> {
140 | log::info!("Successully saved window state");
141 | Ok(())
142 | })
143 | .or_else(|_| -> Result<(), ()> {
144 | log::error!("Failed to save window state");
145 | Ok(())
146 | }).ok();
147 | app.exit(0);
148 | }
149 | "week_data" => {
150 | app.get_window("week_data")
151 | .and_then(|w| w.show().ok());
152 | }
153 | "hide" => {
154 | for w in app.windows().values() {
155 | w.hide().unwrap();
156 | }
157 | app.save_window_state(saved_states()).ok();
158 | }
159 | _ => {}
160 | }
161 | },
162 | _ => {}
163 | })
164 | .setup(move |app| {
165 |
166 | let main_window = app.get_window("main").unwrap();
167 |
168 | #[cfg(target_os = "windows")]
169 | {
170 | app.windows().values().for_each(|win| {
171 | window_vibrancy::apply_mica(win, Some(true))
172 | .or_else(|_| window_vibrancy::apply_acrylic(win, None))
173 | .ok();
174 | });
175 | }
176 |
177 | let ver = app.package_info().version.to_string();
178 | thread::spawn(move || {
179 | loop {
180 | match payload_rchan.recv() {
181 | Ok(mut payload) => {
182 | payload.version = format!("{}-{}-{}", ver, env!("GIT_HASH"), env!("GIT_DATE"));
183 | main_window.emit("activity", payload).ok();
184 | },
185 | Err(_) => {
186 | // nope do nothing
187 | },
188 | }
189 | }
190 | });
191 |
192 | Ok(())
193 | })
194 | .run(tauri::generate_context!())
195 | .expect("error while running tauri application");
196 | }
197 |
--------------------------------------------------------------------------------
/src/lib/components/activityGraph.svelte:
--------------------------------------------------------------------------------
1 |
141 |
142 |
143 | {#each hours as hour}
144 |
145 |
{padTo2Digits(hour)}
146 |
147 | {#each getShorts(hour) as short}
148 |
154 | {/each}
155 | {#each Array(60) as _ , i}
156 |
157 | {/each}
158 |
159 |
160 | {/each}
161 |
162 |
163 |
164 |
--------------------------------------------------------------------------------
/src-tauri/src/day_record.rs:
--------------------------------------------------------------------------------
1 | use std::{vec, collections::HashMap, ops::AddAssign, time::Duration};
2 | use crate::data::{Activity, ActivityLabels, ActivitySeries, AdjustedType, ClickMeasure, InputMeasure, Measure, MeasureCount, MeasureDate, FIVE_MINUTES};
3 |
4 | use chrono::{serde::ts_seconds, Utc};
5 | use serde::{self, Deserialize, Serialize};
6 | use serde_with::serde_as;
7 | use ts_rs::TS;
8 |
9 | #[derive(Debug, Clone, Serialize, Deserialize, TS, Default)]
10 | pub struct DayRecord {
11 | #[serde(with = "ts_seconds")]
12 | #[ts(type = "number")]
13 | pub date: MeasureDate,
14 | pub clicks: Vec,
15 | pub inputs: Vec,
16 | pub adjusted: AdjustedType
17 | }
18 |
19 | #[derive(Debug, Clone, Serialize, Deserialize, TS)]
20 | #[ts(export)]
21 | pub struct DayActivityStat {
22 | #[serde(with = "ts_seconds")]
23 | #[ts(type = "number")]
24 | pub from: MeasureDate,
25 | #[serde(with = "ts_seconds")]
26 | #[ts(type = "number")]
27 | pub to: MeasureDate,
28 | pub count: MeasureCount
29 | }
30 |
31 | #[derive(Serialize, Deserialize, Debug, Clone, TS)]
32 | #[serde_as]
33 | #[ts(export)]
34 | pub struct DayStats {
35 | pub activities: Vec,
36 | #[serde_as(as = "serde_with::DurationSeconds")]
37 | #[ts(type = "number")]
38 | pub duration: Duration
39 | }
40 |
41 | impl DayRecord {
42 | /// Creates new day record
43 | pub fn new() -> Self {
44 | Self {
45 | date: Utc::now(),
46 | ..Default::default()
47 | }
48 | }
49 |
50 | fn increase_or_insert(vec: &mut Vec>, val: T)
51 | where T: Serialize + Default + TS + AddAssign {
52 | let date = Utc::now();
53 | let minutes = date.timestamp()/60;
54 |
55 | let opt_last = vec.iter_mut().rev().find(|e| {
56 | minutes == e.date.timestamp()/60
57 | });
58 |
59 | if let Some(last) = opt_last {
60 | last.count += val;
61 | } else {
62 | vec.push(Measure:: {
63 | date: date,
64 | count: val
65 | });
66 | }
67 | }
68 |
69 | /// Increase latest click
70 | pub fn increase_click(&mut self, clicks: MeasureCount) {
71 | Self::increase_or_insert(&mut self.clicks, clicks);
72 | }
73 |
74 | /// Increase latest input
75 | pub fn increase_input(&mut self,inputs: MeasureCount) {
76 | Self::increase_or_insert(&mut self.inputs, inputs);
77 | }
78 |
79 | /// Computes stats from clicks and inputs
80 | pub fn get_stats(&self) -> DayStats {
81 | let clicks = self.clicks.clone();
82 | let inputs = self.inputs.clone();
83 |
84 | // get all timestamps
85 | let mut measures: HashMap = HashMap::new();
86 |
87 | //* count clicks
88 | for measure in clicks.iter() {
89 | let possible_count = measures.get_mut(&measure.date);
90 |
91 | if let Some(count) = possible_count {
92 | *count += measure.count;
93 | } else {
94 | measures.insert(measure.date, measure.count);
95 | }
96 | }
97 |
98 | //* count inputs
99 | for measure in inputs.iter() {
100 | let possible_count = measures.get_mut(&measure.date);
101 |
102 | if let Some(count) = possible_count {
103 | *count += measure.count;
104 | } else {
105 | measures.insert(measure.date, measure.count);
106 | }
107 | }
108 |
109 | let mut measures_dates: Vec::<(MeasureDate, MeasureCount)> = measures.into_iter().collect();
110 | measures_dates.sort_by(|a,b| a.0.cmp(&b.0));
111 |
112 | //* create activities
113 | let mut measures_dates_iter = measures_dates.into_iter();
114 | let opt_last_date = measures_dates_iter.next();
115 | let activities: Vec = match opt_last_date {
116 | None => {
117 | vec![] // zero
118 | },
119 | Some((last_date, last_count)) => {
120 | let mut act_vec = vec![];
121 | let mut from:MeasureDate = last_date.clone();
122 | let mut to: MeasureDate = last_date.clone();
123 | let mut count: MeasureCount = last_count;
124 |
125 | // two or plus
126 | for (cur_date, cur_count) in measures_dates_iter {
127 | if cur_date - to <= FIVE_MINUTES
128 | {
129 | to = cur_date;
130 | count += cur_count;
131 | }
132 | else
133 | {
134 | act_vec.push(DayActivityStat {
135 | from,
136 | to,
137 | count
138 | });
139 | from = cur_date;
140 | to = cur_date;
141 | count = cur_count;
142 | }
143 | }
144 |
145 | // one or plus
146 | act_vec.push(DayActivityStat {
147 | from,
148 | to,
149 | count
150 | });
151 |
152 | act_vec
153 | }
154 | };
155 |
156 | let mut duration: std::time::Duration = std::time::Duration::ZERO;
157 | for activity in activities.iter() {
158 | let act_duration_secs = (activity.to - activity.from).num_seconds();
159 | let us_act_duration_secs = u64::try_from(act_duration_secs).expect("activity.from > activity.to");
160 | duration += std::time::Duration::from_secs(us_act_duration_secs);
161 | }
162 |
163 | DayStats {
164 | activities,
165 | duration
166 | }
167 | }
168 |
169 | /// Creates act
170 | pub(crate) fn get_activity(&self) -> Activity {
171 | let mut clicks = self.clicks.clone();
172 | let mut inputs = self.inputs.clone();
173 |
174 | clicks.sort_by(
175 | |a,b| b.date.cmp(&a.date)
176 | );
177 | let five_clicks = self.clicks.clone();
178 | let fold_clicks = five_clicks.iter().fold(
179 | (0u32,0u32),
180 | |acc, cur| (acc.0 + cur.count, acc.1 + 1)
181 | );
182 |
183 | inputs.sort_by(
184 | |a,b| b.date.cmp(&a.date)
185 | );
186 | let five_inputs = self.inputs.clone();
187 | let fold_inputs = five_inputs.iter().fold(
188 | (0u32,0u32),
189 | |acc, cur| (acc.0 + cur.count, acc.1 + 1)
190 | );
191 |
192 | Activity {
193 | clicks_per_minute: f64::from(fold_clicks.0) / f64::from(fold_clicks.1.max(1)),
194 | click_series: ActivitySeries {
195 | points: five_clicks,
196 | labels: ActivityLabels {
197 | x: "clicks".to_string(),
198 | y: "count".to_string()
199 | }
200 | },
201 | inputs_per_minute: f64::from(fold_inputs.0) / f64::from(fold_inputs.1.max(1)),
202 | input_series: ActivitySeries {
203 | points: five_inputs,
204 | labels: ActivityLabels {
205 | x: "inputs".to_string(),
206 | y: "count".to_string()
207 | }
208 | },
209 | adjusted: self.adjusted
210 | }
211 | }
212 | }
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | overrides:
8 | undici@<5.19.1: '>=5.19.1'
9 | undici@>=2.0.0 <5.19.1: '>=5.19.1'
10 |
11 | importers:
12 |
13 | .:
14 | dependencies:
15 | '@fontsource/fira-mono':
16 | specifier: 5.1.0
17 | version: 5.1.0
18 | '@tauri-apps/api':
19 | specifier: 1.6.0
20 | version: 1.6.0
21 | '@tauri-controls/svelte':
22 | specifier: 0.4.0
23 | version: 0.4.0(clsx@2.1.1)(svelte@4.2.19)(tailwind-merge@1.14.0)
24 | days-of-week:
25 | specifier: 1.0.3
26 | version: 1.0.3(prop-types@15.8.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)
27 | eslint-plugin-svelte:
28 | specifier: ^2.44.0
29 | version: 2.44.0(eslint@9.11.0)(svelte@4.2.19)
30 | svelte-tiny-linked-charts:
31 | specifier: 1.6.1
32 | version: 1.6.1(svelte@4.2.19)
33 | uuid:
34 | specifier: 10.0.0
35 | version: 10.0.0
36 | devDependencies:
37 | '@sveltejs/adapter-auto':
38 | specifier: 3.2.5
39 | version: 3.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))
40 | '@sveltejs/adapter-static':
41 | specifier: 3.0.5
42 | version: 3.0.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))
43 | '@sveltejs/kit':
44 | specifier: 2.5.28
45 | version: 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18))
46 | '@sveltejs/vite-plugin-svelte':
47 | specifier: ^3.1.2
48 | version: 3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18))
49 | '@tauri-apps/cli':
50 | specifier: 1.6.2
51 | version: 1.6.2
52 | '@types/cookie':
53 | specifier: 0.6.0
54 | version: 0.6.0
55 | '@types/rollup-plugin-svelte-svg':
56 | specifier: 1.0.6
57 | version: 1.0.6
58 | '@typescript-eslint/eslint-plugin':
59 | specifier: 8.6.0
60 | version: 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0)(typescript@5.6.2))(eslint@9.11.0)(typescript@5.6.2)
61 | '@typescript-eslint/parser':
62 | specifier: 8.6.0
63 | version: 8.6.0(eslint@9.11.0)(typescript@5.6.2)
64 | eslint:
65 | specifier: 9.11.0
66 | version: 9.11.0
67 | eslint-config-prettier:
68 | specifier: 9.1.0
69 | version: 9.1.0(eslint@9.11.0)
70 | fluent-svelte:
71 | specifier: 1.6.0
72 | version: 1.6.0
73 | prettier:
74 | specifier: 3.3.3
75 | version: 3.3.3
76 | prettier-plugin-svelte:
77 | specifier: 3.2.6
78 | version: 3.2.6(prettier@3.3.3)(svelte@4.2.19)
79 | rollup-plugin-svelte-svg:
80 | specifier: 0.2.3
81 | version: 0.2.3(svelte@4.2.19)
82 | svelte:
83 | specifier: 4.2.19
84 | version: 4.2.19
85 | svelte-check:
86 | specifier: 4.0.2
87 | version: 4.0.2(svelte@4.2.19)(typescript@5.6.2)
88 | svelte-preprocess:
89 | specifier: 6.0.2
90 | version: 6.0.2(postcss-load-config@3.1.4(postcss@8.4.47))(postcss@8.4.47)(svelte@4.2.19)(typescript@5.6.2)
91 | tslib:
92 | specifier: 2.7.0
93 | version: 2.7.0
94 | typescript:
95 | specifier: 5.6.2
96 | version: 5.6.2
97 | vite:
98 | specifier: 5.4.7
99 | version: 5.4.7(@types/node@18.7.18)
100 |
101 | packages:
102 |
103 | '@ampproject/remapping@2.3.0':
104 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
105 | engines: {node: '>=6.0.0'}
106 |
107 | '@esbuild/aix-ppc64@0.21.5':
108 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
109 | engines: {node: '>=12'}
110 | cpu: [ppc64]
111 | os: [aix]
112 |
113 | '@esbuild/android-arm64@0.21.5':
114 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
115 | engines: {node: '>=12'}
116 | cpu: [arm64]
117 | os: [android]
118 |
119 | '@esbuild/android-arm@0.21.5':
120 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
121 | engines: {node: '>=12'}
122 | cpu: [arm]
123 | os: [android]
124 |
125 | '@esbuild/android-x64@0.21.5':
126 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
127 | engines: {node: '>=12'}
128 | cpu: [x64]
129 | os: [android]
130 |
131 | '@esbuild/darwin-arm64@0.21.5':
132 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
133 | engines: {node: '>=12'}
134 | cpu: [arm64]
135 | os: [darwin]
136 |
137 | '@esbuild/darwin-x64@0.21.5':
138 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
139 | engines: {node: '>=12'}
140 | cpu: [x64]
141 | os: [darwin]
142 |
143 | '@esbuild/freebsd-arm64@0.21.5':
144 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
145 | engines: {node: '>=12'}
146 | cpu: [arm64]
147 | os: [freebsd]
148 |
149 | '@esbuild/freebsd-x64@0.21.5':
150 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
151 | engines: {node: '>=12'}
152 | cpu: [x64]
153 | os: [freebsd]
154 |
155 | '@esbuild/linux-arm64@0.21.5':
156 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
157 | engines: {node: '>=12'}
158 | cpu: [arm64]
159 | os: [linux]
160 |
161 | '@esbuild/linux-arm@0.21.5':
162 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
163 | engines: {node: '>=12'}
164 | cpu: [arm]
165 | os: [linux]
166 |
167 | '@esbuild/linux-ia32@0.21.5':
168 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
169 | engines: {node: '>=12'}
170 | cpu: [ia32]
171 | os: [linux]
172 |
173 | '@esbuild/linux-loong64@0.21.5':
174 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
175 | engines: {node: '>=12'}
176 | cpu: [loong64]
177 | os: [linux]
178 |
179 | '@esbuild/linux-mips64el@0.21.5':
180 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
181 | engines: {node: '>=12'}
182 | cpu: [mips64el]
183 | os: [linux]
184 |
185 | '@esbuild/linux-ppc64@0.21.5':
186 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
187 | engines: {node: '>=12'}
188 | cpu: [ppc64]
189 | os: [linux]
190 |
191 | '@esbuild/linux-riscv64@0.21.5':
192 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
193 | engines: {node: '>=12'}
194 | cpu: [riscv64]
195 | os: [linux]
196 |
197 | '@esbuild/linux-s390x@0.21.5':
198 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
199 | engines: {node: '>=12'}
200 | cpu: [s390x]
201 | os: [linux]
202 |
203 | '@esbuild/linux-x64@0.21.5':
204 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
205 | engines: {node: '>=12'}
206 | cpu: [x64]
207 | os: [linux]
208 |
209 | '@esbuild/netbsd-x64@0.21.5':
210 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
211 | engines: {node: '>=12'}
212 | cpu: [x64]
213 | os: [netbsd]
214 |
215 | '@esbuild/openbsd-x64@0.21.5':
216 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
217 | engines: {node: '>=12'}
218 | cpu: [x64]
219 | os: [openbsd]
220 |
221 | '@esbuild/sunos-x64@0.21.5':
222 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
223 | engines: {node: '>=12'}
224 | cpu: [x64]
225 | os: [sunos]
226 |
227 | '@esbuild/win32-arm64@0.21.5':
228 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
229 | engines: {node: '>=12'}
230 | cpu: [arm64]
231 | os: [win32]
232 |
233 | '@esbuild/win32-ia32@0.21.5':
234 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
235 | engines: {node: '>=12'}
236 | cpu: [ia32]
237 | os: [win32]
238 |
239 | '@esbuild/win32-x64@0.21.5':
240 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
241 | engines: {node: '>=12'}
242 | cpu: [x64]
243 | os: [win32]
244 |
245 | '@eslint-community/eslint-utils@4.4.0':
246 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
247 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
248 | peerDependencies:
249 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
250 |
251 | '@eslint-community/regexpp@4.11.1':
252 | resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==}
253 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
254 |
255 | '@eslint/config-array@0.18.0':
256 | resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
257 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
258 |
259 | '@eslint/eslintrc@3.1.0':
260 | resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
261 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
262 |
263 | '@eslint/js@9.11.0':
264 | resolution: {integrity: sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==}
265 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
266 |
267 | '@eslint/object-schema@2.1.4':
268 | resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
269 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
270 |
271 | '@eslint/plugin-kit@0.2.0':
272 | resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==}
273 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
274 |
275 | '@fontsource/fira-mono@5.1.0':
276 | resolution: {integrity: sha512-6+nftSKApXyN0I9FC5GJuG5TUCh+in5OehtrXRIsHJvq38Pm//oA1kZZYNdXv99JYzLzJ3lzsTAavmS+xGLGDw==}
277 |
278 | '@humanwhocodes/module-importer@1.0.1':
279 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
280 | engines: {node: '>=12.22'}
281 |
282 | '@humanwhocodes/retry@0.3.0':
283 | resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==}
284 | engines: {node: '>=18.18'}
285 |
286 | '@jridgewell/gen-mapping@0.3.5':
287 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
288 | engines: {node: '>=6.0.0'}
289 |
290 | '@jridgewell/resolve-uri@3.1.0':
291 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
292 | engines: {node: '>=6.0.0'}
293 |
294 | '@jridgewell/set-array@1.2.1':
295 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
296 | engines: {node: '>=6.0.0'}
297 |
298 | '@jridgewell/sourcemap-codec@1.5.0':
299 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
300 |
301 | '@jridgewell/trace-mapping@0.3.25':
302 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
303 |
304 | '@nodelib/fs.scandir@2.1.5':
305 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
306 | engines: {node: '>= 8'}
307 |
308 | '@nodelib/fs.stat@2.0.5':
309 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
310 | engines: {node: '>= 8'}
311 |
312 | '@nodelib/fs.walk@1.2.8':
313 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
314 | engines: {node: '>= 8'}
315 |
316 | '@polka/url@1.0.0-next.28':
317 | resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
318 |
319 | '@rollup/rollup-android-arm-eabi@4.22.4':
320 | resolution: {integrity: sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==}
321 | cpu: [arm]
322 | os: [android]
323 |
324 | '@rollup/rollup-android-arm64@4.22.4':
325 | resolution: {integrity: sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==}
326 | cpu: [arm64]
327 | os: [android]
328 |
329 | '@rollup/rollup-darwin-arm64@4.22.4':
330 | resolution: {integrity: sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==}
331 | cpu: [arm64]
332 | os: [darwin]
333 |
334 | '@rollup/rollup-darwin-x64@4.22.4':
335 | resolution: {integrity: sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==}
336 | cpu: [x64]
337 | os: [darwin]
338 |
339 | '@rollup/rollup-linux-arm-gnueabihf@4.22.4':
340 | resolution: {integrity: sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==}
341 | cpu: [arm]
342 | os: [linux]
343 |
344 | '@rollup/rollup-linux-arm-musleabihf@4.22.4':
345 | resolution: {integrity: sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==}
346 | cpu: [arm]
347 | os: [linux]
348 |
349 | '@rollup/rollup-linux-arm64-gnu@4.22.4':
350 | resolution: {integrity: sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==}
351 | cpu: [arm64]
352 | os: [linux]
353 |
354 | '@rollup/rollup-linux-arm64-musl@4.22.4':
355 | resolution: {integrity: sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==}
356 | cpu: [arm64]
357 | os: [linux]
358 |
359 | '@rollup/rollup-linux-powerpc64le-gnu@4.22.4':
360 | resolution: {integrity: sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==}
361 | cpu: [ppc64]
362 | os: [linux]
363 |
364 | '@rollup/rollup-linux-riscv64-gnu@4.22.4':
365 | resolution: {integrity: sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==}
366 | cpu: [riscv64]
367 | os: [linux]
368 |
369 | '@rollup/rollup-linux-s390x-gnu@4.22.4':
370 | resolution: {integrity: sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==}
371 | cpu: [s390x]
372 | os: [linux]
373 |
374 | '@rollup/rollup-linux-x64-gnu@4.22.4':
375 | resolution: {integrity: sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==}
376 | cpu: [x64]
377 | os: [linux]
378 |
379 | '@rollup/rollup-linux-x64-musl@4.22.4':
380 | resolution: {integrity: sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==}
381 | cpu: [x64]
382 | os: [linux]
383 |
384 | '@rollup/rollup-win32-arm64-msvc@4.22.4':
385 | resolution: {integrity: sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==}
386 | cpu: [arm64]
387 | os: [win32]
388 |
389 | '@rollup/rollup-win32-ia32-msvc@4.22.4':
390 | resolution: {integrity: sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==}
391 | cpu: [ia32]
392 | os: [win32]
393 |
394 | '@rollup/rollup-win32-x64-msvc@4.22.4':
395 | resolution: {integrity: sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==}
396 | cpu: [x64]
397 | os: [win32]
398 |
399 | '@sveltejs/adapter-auto@3.2.5':
400 | resolution: {integrity: sha512-27LR+uKccZ62lgq4N/hvyU2G+hTP9fxWEAfnZcl70HnyfAjMSsGk1z/SjAPXNCD1mVJIE7IFu3TQ8cQ/UH3c0A==}
401 | peerDependencies:
402 | '@sveltejs/kit': ^2.0.0
403 |
404 | '@sveltejs/adapter-static@3.0.5':
405 | resolution: {integrity: sha512-kFJR7RxeB6FBvrKZWAEzIALatgy11ISaaZbcPup8JdWUdrmmfUHHTJ738YHJTEfnCiiXi6aX8Q6ePY7tnSMD6Q==}
406 | peerDependencies:
407 | '@sveltejs/kit': ^2.0.0
408 |
409 | '@sveltejs/kit@2.5.28':
410 | resolution: {integrity: sha512-/O7pvFGBsQPcFa9UrW8eUC5uHTOXLsUp3SN0dY6YmRAL9nfPSrJsSJk//j5vMpinSshzUjteAFcfQTU+04Ka1w==}
411 | engines: {node: '>=18.13'}
412 | hasBin: true
413 | peerDependencies:
414 | '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1
415 | svelte: ^4.0.0 || ^5.0.0-next.0
416 | vite: ^5.0.3
417 |
418 | '@sveltejs/vite-plugin-svelte-inspector@2.1.0':
419 | resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==}
420 | engines: {node: ^18.0.0 || >=20}
421 | peerDependencies:
422 | '@sveltejs/vite-plugin-svelte': ^3.0.0
423 | svelte: ^4.0.0 || ^5.0.0-next.0
424 | vite: ^5.0.0
425 |
426 | '@sveltejs/vite-plugin-svelte@3.1.2':
427 | resolution: {integrity: sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==}
428 | engines: {node: ^18.0.0 || >=20}
429 | peerDependencies:
430 | svelte: ^4.0.0 || ^5.0.0-next.0
431 | vite: ^5.0.0
432 |
433 | '@tauri-apps/api@1.6.0':
434 | resolution: {integrity: sha512-rqI++FWClU5I2UBp4HXFvl+sBWkdigBkxnpJDQUWttNyG7IZP4FwQGhTNL5EOw0vI8i6eSAJ5frLqO7n7jbJdg==}
435 | engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'}
436 |
437 | '@tauri-apps/cli-darwin-arm64@1.6.2':
438 | resolution: {integrity: sha512-6mdRyf9DaLqlZvj8kZB09U3rwY+dOHSGzTZ7+GDg665GJb17f4cb30e8dExj6/aghcsOie9EGpgiURcDUvLNSQ==}
439 | engines: {node: '>= 10'}
440 | cpu: [arm64]
441 | os: [darwin]
442 |
443 | '@tauri-apps/cli-darwin-x64@1.6.2':
444 | resolution: {integrity: sha512-PLxZY5dn38H3R9VRmBN/l0ZDB5JFanCwlK4rmpzDQPPg3tQmbu5vjSCP6TVj5U6aLKsj79kFyULblPr5Dn9+vw==}
445 | engines: {node: '>= 10'}
446 | cpu: [x64]
447 | os: [darwin]
448 |
449 | '@tauri-apps/cli-linux-arm-gnueabihf@1.6.2':
450 | resolution: {integrity: sha512-xnpj4BLeeGOh5I/ewCQlYJZwHH0CBNBN+4q8BNWNQ9MKkjN9ST366RmHRzl2ANNgWwijOPxyce7GiUmvuH8Atw==}
451 | engines: {node: '>= 10'}
452 | cpu: [arm]
453 | os: [linux]
454 |
455 | '@tauri-apps/cli-linux-arm64-gnu@1.6.2':
456 | resolution: {integrity: sha512-uaiRE0vE2P+tdsCngfKt+7yKr3VZXIq/t3w01DzSdnBgHSp0zmRsRR4AhZt7ibvoEgA8GzBP+eSHJdFNZsTU9w==}
457 | engines: {node: '>= 10'}
458 | cpu: [arm64]
459 | os: [linux]
460 |
461 | '@tauri-apps/cli-linux-arm64-musl@1.6.2':
462 | resolution: {integrity: sha512-o9JunVrMrhqTBLrdvEbS64W0bo1dPm0lxX51Mx+6x9SmbDjlEWGgaAHC3iKLK9khd5Yu1uO1e+8TJltAcScvmw==}
463 | engines: {node: '>= 10'}
464 | cpu: [arm64]
465 | os: [linux]
466 |
467 | '@tauri-apps/cli-linux-x64-gnu@1.6.2':
468 | resolution: {integrity: sha512-jL9f+o61DdQmNYKIt2Q3BA8YJ+hyC5+GdNxqDf7j5SoQ85j//YfUWbmp9ZgsPHVBxgSGZVvgGMNvf64Ykp0buQ==}
469 | engines: {node: '>= 10'}
470 | cpu: [x64]
471 | os: [linux]
472 |
473 | '@tauri-apps/cli-linux-x64-musl@1.6.2':
474 | resolution: {integrity: sha512-xsa4Pu9YMHKAX0J8pIoXfN/uhvAAAoECZDixDhWw8zi57VZ4QX28ycqolS+NscdD9NAGSgHk45MpBZWdvRtvjQ==}
475 | engines: {node: '>= 10'}
476 | cpu: [x64]
477 | os: [linux]
478 |
479 | '@tauri-apps/cli-win32-arm64-msvc@1.6.2':
480 | resolution: {integrity: sha512-eJtUOx2UFhJpCCkm5M5+4Co9JbjvgIHTdyS/hTSZfOEdT58CNEGVJXMA39FsSZXYoxYPE+9K7Km6haMozSmlxw==}
481 | engines: {node: '>= 10'}
482 | cpu: [arm64]
483 | os: [win32]
484 |
485 | '@tauri-apps/cli-win32-ia32-msvc@1.6.2':
486 | resolution: {integrity: sha512-9Jwx3PrhNw3VKOgPISRRXPkvoEAZP+7rFRHXIo49dvlHy2E/o9qpWi1IntE33HWeazP6KhvsCjvXB2Ai4eGooA==}
487 | engines: {node: '>= 10'}
488 | cpu: [ia32]
489 | os: [win32]
490 |
491 | '@tauri-apps/cli-win32-x64-msvc@1.6.2':
492 | resolution: {integrity: sha512-5Z+ZjRFJE8MXghJe1UXvGephY5ZcgVhiTI9yuMi9xgX3CEaAXASatyXllzsvGJ9EDaWMEpa0PHjAzi7LBAWROw==}
493 | engines: {node: '>= 10'}
494 | cpu: [x64]
495 | os: [win32]
496 |
497 | '@tauri-apps/cli@1.6.2':
498 | resolution: {integrity: sha512-zpfZdxhm20s7d/Uejpg/T3a9sqLVe3Ih2ztINfy8v6iLw9Ohowkb9g+agZffYKlEWfOSpmCy69NFyBLj7OZL0A==}
499 | engines: {node: '>= 10'}
500 | hasBin: true
501 |
502 | '@tauri-controls/svelte@0.4.0':
503 | resolution: {integrity: sha512-5zSLCz/l90+mQt/6lDZHzbJdTOt4Qbe1Mv0DCzCnNcaDy0Bbl8gqSWDps6SrIF4oq1sZkJno0GFjwHnol/wKSw==}
504 | peerDependencies:
505 | clsx: ^2.0.0
506 | svelte: ^4.1.2
507 | tailwind-merge: ^1.14.0
508 |
509 | '@types/cookie@0.6.0':
510 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
511 |
512 | '@types/estree@1.0.5':
513 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
514 |
515 | '@types/estree@1.0.6':
516 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
517 |
518 | '@types/node@18.7.18':
519 | resolution: {integrity: sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==}
520 |
521 | '@types/rollup-plugin-svelte-svg@1.0.6':
522 | resolution: {integrity: sha512-CBqP8rU0u6VWSHwX3gJ2BPJXvt1e9PZccBo7m8Mc9PSQBB4zg31+zqj2VjYNz18BSzEou0hMWGjaTQ4fRMUyfQ==}
523 |
524 | '@types/svgo@2.6.4':
525 | resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
526 |
527 | '@typescript-eslint/eslint-plugin@8.6.0':
528 | resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==}
529 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
530 | peerDependencies:
531 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
532 | eslint: ^8.57.0 || ^9.0.0
533 | typescript: '*'
534 | peerDependenciesMeta:
535 | typescript:
536 | optional: true
537 |
538 | '@typescript-eslint/parser@8.6.0':
539 | resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==}
540 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
541 | peerDependencies:
542 | eslint: ^8.57.0 || ^9.0.0
543 | typescript: '*'
544 | peerDependenciesMeta:
545 | typescript:
546 | optional: true
547 |
548 | '@typescript-eslint/scope-manager@8.6.0':
549 | resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==}
550 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
551 |
552 | '@typescript-eslint/type-utils@8.6.0':
553 | resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==}
554 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
555 | peerDependencies:
556 | typescript: '*'
557 | peerDependenciesMeta:
558 | typescript:
559 | optional: true
560 |
561 | '@typescript-eslint/types@8.6.0':
562 | resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==}
563 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
564 |
565 | '@typescript-eslint/typescript-estree@8.6.0':
566 | resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==}
567 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
568 | peerDependencies:
569 | typescript: '*'
570 | peerDependenciesMeta:
571 | typescript:
572 | optional: true
573 |
574 | '@typescript-eslint/utils@8.6.0':
575 | resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==}
576 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
577 | peerDependencies:
578 | eslint: ^8.57.0 || ^9.0.0
579 |
580 | '@typescript-eslint/visitor-keys@8.6.0':
581 | resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==}
582 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
583 |
584 | acorn-jsx@5.3.2:
585 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
586 | peerDependencies:
587 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
588 |
589 | acorn@8.12.1:
590 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
591 | engines: {node: '>=0.4.0'}
592 | hasBin: true
593 |
594 | ajv@6.12.6:
595 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
596 |
597 | ansi-regex@5.0.1:
598 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
599 | engines: {node: '>=8'}
600 |
601 | ansi-styles@4.3.0:
602 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
603 | engines: {node: '>=8'}
604 |
605 | anymatch@3.1.2:
606 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
607 | engines: {node: '>= 8'}
608 |
609 | argparse@2.0.1:
610 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
611 |
612 | aria-query@5.3.2:
613 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
614 | engines: {node: '>= 0.4'}
615 |
616 | axobject-query@4.1.0:
617 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
618 | engines: {node: '>= 0.4'}
619 |
620 | balanced-match@1.0.2:
621 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
622 |
623 | binary-extensions@2.2.0:
624 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
625 | engines: {node: '>=8'}
626 |
627 | brace-expansion@1.1.11:
628 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
629 |
630 | brace-expansion@2.0.1:
631 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
632 |
633 | braces@3.0.2:
634 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
635 | engines: {node: '>=8'}
636 |
637 | callsites@3.1.0:
638 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
639 | engines: {node: '>=6'}
640 |
641 | chalk@4.1.2:
642 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
643 | engines: {node: '>=10'}
644 |
645 | chokidar@3.5.3:
646 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
647 | engines: {node: '>= 8.10.0'}
648 |
649 | clsx@2.1.1:
650 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
651 | engines: {node: '>=6'}
652 |
653 | code-red@1.0.4:
654 | resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
655 |
656 | color-convert@2.0.1:
657 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
658 | engines: {node: '>=7.0.0'}
659 |
660 | color-name@1.1.4:
661 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
662 |
663 | concat-map@0.0.1:
664 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
665 |
666 | cookie@0.6.0:
667 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
668 | engines: {node: '>= 0.6'}
669 |
670 | cross-spawn@7.0.3:
671 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
672 | engines: {node: '>= 8'}
673 |
674 | css-tree@2.3.1:
675 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
676 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
677 |
678 | cssesc@3.0.0:
679 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
680 | engines: {node: '>=4'}
681 | hasBin: true
682 |
683 | days-of-week@1.0.3:
684 | resolution: {integrity: sha512-FoZ2Op+Me4q9uS1HmhQSMIKUqIVswe7UstgK+cNbPO9MSzyWTOuHeYTvRTR20P4sBNa2WRKHcSKpfkCFYRq8Gg==}
685 | engines: {node: '>=8', npm: '>=5'}
686 | peerDependencies:
687 | prop-types: ^15.5.4
688 | react: ^15.0.0 || ^16.0.0
689 | react-dom: ^15.0.0 || ^16.0.0
690 |
691 | debug@4.3.4:
692 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
693 | engines: {node: '>=6.0'}
694 | peerDependencies:
695 | supports-color: '*'
696 | peerDependenciesMeta:
697 | supports-color:
698 | optional: true
699 |
700 | deep-is@0.1.4:
701 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
702 |
703 | deepmerge@4.3.1:
704 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
705 | engines: {node: '>=0.10.0'}
706 |
707 | devalue@5.0.0:
708 | resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==}
709 |
710 | esbuild@0.21.5:
711 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
712 | engines: {node: '>=12'}
713 | hasBin: true
714 |
715 | escape-string-regexp@4.0.0:
716 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
717 | engines: {node: '>=10'}
718 |
719 | eslint-compat-utils@0.5.1:
720 | resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==}
721 | engines: {node: '>=12'}
722 | peerDependencies:
723 | eslint: '>=6.0.0'
724 |
725 | eslint-config-prettier@9.1.0:
726 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
727 | hasBin: true
728 | peerDependencies:
729 | eslint: '>=7.0.0'
730 |
731 | eslint-plugin-svelte@2.44.0:
732 | resolution: {integrity: sha512-wav4MOs02vBb1WjvTCYItwJCxMkuk2Z4p+K/eyjL0N/z7ahXLP+0LtQQjiKc2ezuif7GnZLbD1F3o1VHzSvdVg==}
733 | engines: {node: ^14.17.0 || >=16.0.0}
734 | peerDependencies:
735 | eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0
736 | svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191
737 | peerDependenciesMeta:
738 | svelte:
739 | optional: true
740 |
741 | eslint-scope@7.2.2:
742 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
743 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
744 |
745 | eslint-scope@8.0.2:
746 | resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==}
747 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
748 |
749 | eslint-visitor-keys@3.3.0:
750 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
751 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
752 |
753 | eslint-visitor-keys@3.4.3:
754 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
755 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
756 |
757 | eslint-visitor-keys@4.0.0:
758 | resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==}
759 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
760 |
761 | eslint@9.11.0:
762 | resolution: {integrity: sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA==}
763 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
764 | hasBin: true
765 | peerDependencies:
766 | jiti: '*'
767 | peerDependenciesMeta:
768 | jiti:
769 | optional: true
770 |
771 | esm-env@1.0.0:
772 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==}
773 |
774 | espree@10.1.0:
775 | resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==}
776 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
777 |
778 | espree@9.6.1:
779 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
780 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
781 |
782 | esquery@1.6.0:
783 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
784 | engines: {node: '>=0.10'}
785 |
786 | esrecurse@4.3.0:
787 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
788 | engines: {node: '>=4.0'}
789 |
790 | estraverse@5.3.0:
791 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
792 | engines: {node: '>=4.0'}
793 |
794 | estree-walker@0.2.1:
795 | resolution: {integrity: sha512-6/I1dwNKk0N9iGOU3ydzAAurz4NPo/ttxZNCqgIVbWFvWyzWBSNonRrJ5CpjDuyBfmM7ENN7WCzUi9aT/UPXXQ==}
796 |
797 | estree-walker@3.0.3:
798 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
799 |
800 | esutils@2.0.3:
801 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
802 | engines: {node: '>=0.10.0'}
803 |
804 | fast-deep-equal@3.1.3:
805 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
806 |
807 | fast-glob@3.3.2:
808 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
809 | engines: {node: '>=8.6.0'}
810 |
811 | fast-json-stable-stringify@2.1.0:
812 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
813 |
814 | fast-levenshtein@2.0.6:
815 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
816 |
817 | fastq@1.13.0:
818 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
819 |
820 | fdir@6.3.0:
821 | resolution: {integrity: sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==}
822 | peerDependencies:
823 | picomatch: ^3 || ^4
824 | peerDependenciesMeta:
825 | picomatch:
826 | optional: true
827 |
828 | file-entry-cache@8.0.0:
829 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
830 | engines: {node: '>=16.0.0'}
831 |
832 | fill-range@7.0.1:
833 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
834 | engines: {node: '>=8'}
835 |
836 | find-up@5.0.0:
837 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
838 | engines: {node: '>=10'}
839 |
840 | flat-cache@4.0.1:
841 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
842 | engines: {node: '>=16'}
843 |
844 | flatted@3.3.1:
845 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
846 |
847 | fluent-svelte@1.6.0:
848 | resolution: {integrity: sha512-z+QUvfAzh3t0bpiURO6f2eciZPnPPwl1pZe+sAYM8A8vUDSAHH8D0U4+VT+OHA16PEAd2DYVdPyJqM27ly5lxQ==}
849 |
850 | focus-trap@6.9.4:
851 | resolution: {integrity: sha512-v2NTsZe2FF59Y+sDykKY+XjqZ0cPfhq/hikWVL88BqLivnNiEffAsac6rP6H45ff9wG9LL5ToiDqrLEP9GX9mw==}
852 |
853 | fsevents@2.3.2:
854 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
855 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
856 | os: [darwin]
857 |
858 | fsevents@2.3.3:
859 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
860 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
861 | os: [darwin]
862 |
863 | glob-parent@5.1.2:
864 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
865 | engines: {node: '>= 6'}
866 |
867 | glob-parent@6.0.2:
868 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
869 | engines: {node: '>=10.13.0'}
870 |
871 | globals@14.0.0:
872 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
873 | engines: {node: '>=18'}
874 |
875 | globalyzer@0.1.0:
876 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
877 |
878 | globrex@0.1.2:
879 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
880 |
881 | graphemer@1.4.0:
882 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
883 |
884 | has-flag@4.0.0:
885 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
886 | engines: {node: '>=8'}
887 |
888 | ignore@5.2.0:
889 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
890 | engines: {node: '>= 4'}
891 |
892 | ignore@5.3.2:
893 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
894 | engines: {node: '>= 4'}
895 |
896 | import-fresh@3.3.0:
897 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
898 | engines: {node: '>=6'}
899 |
900 | import-meta-resolve@4.1.0:
901 | resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
902 |
903 | imurmurhash@0.1.4:
904 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
905 | engines: {node: '>=0.8.19'}
906 |
907 | is-binary-path@2.1.0:
908 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
909 | engines: {node: '>=8'}
910 |
911 | is-extglob@2.1.1:
912 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
913 | engines: {node: '>=0.10.0'}
914 |
915 | is-glob@4.0.3:
916 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
917 | engines: {node: '>=0.10.0'}
918 |
919 | is-number@7.0.0:
920 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
921 | engines: {node: '>=0.12.0'}
922 |
923 | is-path-inside@3.0.3:
924 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
925 | engines: {node: '>=8'}
926 |
927 | is-reference@3.0.2:
928 | resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}
929 |
930 | isexe@2.0.0:
931 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
932 |
933 | js-tokens@4.0.0:
934 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
935 |
936 | js-yaml@4.1.0:
937 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
938 | hasBin: true
939 |
940 | json-buffer@3.0.1:
941 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
942 |
943 | json-schema-traverse@0.4.1:
944 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
945 |
946 | json-stable-stringify-without-jsonify@1.0.1:
947 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
948 |
949 | keyv@4.5.4:
950 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
951 |
952 | kleur@4.1.5:
953 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
954 | engines: {node: '>=6'}
955 |
956 | known-css-properties@0.34.0:
957 | resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==}
958 |
959 | levn@0.4.1:
960 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
961 | engines: {node: '>= 0.8.0'}
962 |
963 | lilconfig@2.1.0:
964 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
965 | engines: {node: '>=10'}
966 |
967 | locate-character@3.0.0:
968 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
969 |
970 | locate-path@6.0.0:
971 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
972 | engines: {node: '>=10'}
973 |
974 | lodash.merge@4.6.2:
975 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
976 |
977 | loose-envify@1.4.0:
978 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
979 | hasBin: true
980 |
981 | magic-string@0.30.11:
982 | resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
983 |
984 | mdn-data@2.0.30:
985 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
986 |
987 | merge2@1.4.1:
988 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
989 | engines: {node: '>= 8'}
990 |
991 | micromatch@4.0.5:
992 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
993 | engines: {node: '>=8.6'}
994 |
995 | minimatch@3.1.2:
996 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
997 |
998 | minimatch@9.0.5:
999 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1000 | engines: {node: '>=16 || 14 >=14.17'}
1001 |
1002 | mri@1.2.0:
1003 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1004 | engines: {node: '>=4'}
1005 |
1006 | mrmime@2.0.0:
1007 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
1008 | engines: {node: '>=10'}
1009 |
1010 | ms@2.1.2:
1011 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1012 |
1013 | nanoid@3.3.7:
1014 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
1015 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1016 | hasBin: true
1017 |
1018 | natural-compare@1.4.0:
1019 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1020 |
1021 | normalize-path@3.0.0:
1022 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1023 | engines: {node: '>=0.10.0'}
1024 |
1025 | object-assign@4.1.1:
1026 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1027 | engines: {node: '>=0.10.0'}
1028 |
1029 | optionator@0.9.4:
1030 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1031 | engines: {node: '>= 0.8.0'}
1032 |
1033 | p-limit@3.1.0:
1034 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1035 | engines: {node: '>=10'}
1036 |
1037 | p-locate@5.0.0:
1038 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1039 | engines: {node: '>=10'}
1040 |
1041 | parent-module@1.0.1:
1042 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1043 | engines: {node: '>=6'}
1044 |
1045 | path-exists@4.0.0:
1046 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1047 | engines: {node: '>=8'}
1048 |
1049 | path-key@3.1.1:
1050 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1051 | engines: {node: '>=8'}
1052 |
1053 | periscopic@3.1.0:
1054 | resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
1055 |
1056 | picocolors@1.0.0:
1057 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1058 |
1059 | picocolors@1.1.0:
1060 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
1061 |
1062 | picomatch@2.3.1:
1063 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1064 | engines: {node: '>=8.6'}
1065 |
1066 | postcss-load-config@3.1.4:
1067 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
1068 | engines: {node: '>= 10'}
1069 | peerDependencies:
1070 | postcss: '>=8.0.9'
1071 | ts-node: '>=9.0.0'
1072 | peerDependenciesMeta:
1073 | postcss:
1074 | optional: true
1075 | ts-node:
1076 | optional: true
1077 |
1078 | postcss-safe-parser@6.0.0:
1079 | resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
1080 | engines: {node: '>=12.0'}
1081 | peerDependencies:
1082 | postcss: ^8.3.3
1083 |
1084 | postcss-scss@4.0.9:
1085 | resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==}
1086 | engines: {node: '>=12.0'}
1087 | peerDependencies:
1088 | postcss: ^8.4.29
1089 |
1090 | postcss-selector-parser@6.1.2:
1091 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
1092 | engines: {node: '>=4'}
1093 |
1094 | postcss@8.4.47:
1095 | resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
1096 | engines: {node: ^10 || ^12 || >=14}
1097 |
1098 | prelude-ls@1.2.1:
1099 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1100 | engines: {node: '>= 0.8.0'}
1101 |
1102 | prettier-plugin-svelte@3.2.6:
1103 | resolution: {integrity: sha512-Y1XWLw7vXUQQZmgv1JAEiLcErqUniAF2wO7QJsw8BVMvpLET2dI5WpEIEJx1r11iHVdSMzQxivyfrH9On9t2IQ==}
1104 | peerDependencies:
1105 | prettier: ^3.0.0
1106 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
1107 |
1108 | prettier@3.3.3:
1109 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
1110 | engines: {node: '>=14'}
1111 | hasBin: true
1112 |
1113 | prop-types@15.8.1:
1114 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
1115 |
1116 | punycode@2.1.1:
1117 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
1118 | engines: {node: '>=6'}
1119 |
1120 | queue-microtask@1.2.3:
1121 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1122 |
1123 | react-dom@16.14.0:
1124 | resolution: {integrity: sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==}
1125 | peerDependencies:
1126 | react: ^16.14.0
1127 |
1128 | react-is@16.13.1:
1129 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
1130 |
1131 | react@16.14.0:
1132 | resolution: {integrity: sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==}
1133 | engines: {node: '>=0.10.0'}
1134 |
1135 | readdirp@3.6.0:
1136 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1137 | engines: {node: '>=8.10.0'}
1138 |
1139 | resolve-from@4.0.0:
1140 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1141 | engines: {node: '>=4'}
1142 |
1143 | reusify@1.0.4:
1144 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1145 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1146 |
1147 | rollup-plugin-svelte-svg@0.2.3:
1148 | resolution: {integrity: sha512-WH2KqihgVbcJT/PrjiJ/ipctrGueRdOLaaEuAIbXYqfsEzNb9krOVLyc5TL7to3cEKL6DiAa8IEe7IL1oqVolg==}
1149 | peerDependencies:
1150 | svelte: ^3.16.7
1151 |
1152 | rollup-pluginutils@1.5.2:
1153 | resolution: {integrity: sha512-SjdWWWO/CUoMpDy8RUbZ/pSpG68YHmhk5ROKNIoi2En9bJ8bTt3IhYi254RWiTclQmL7Awmrq+rZFOhZkJAHmQ==}
1154 |
1155 | rollup@2.78.1:
1156 | resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==}
1157 | engines: {node: '>=10.0.0'}
1158 | hasBin: true
1159 |
1160 | rollup@4.22.4:
1161 | resolution: {integrity: sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==}
1162 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1163 | hasBin: true
1164 |
1165 | run-parallel@1.2.0:
1166 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1167 |
1168 | sade@1.8.1:
1169 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1170 | engines: {node: '>=6'}
1171 |
1172 | scheduler@0.19.1:
1173 | resolution: {integrity: sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==}
1174 |
1175 | semver@7.6.3:
1176 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
1177 | engines: {node: '>=10'}
1178 | hasBin: true
1179 |
1180 | set-cookie-parser@2.7.0:
1181 | resolution: {integrity: sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==}
1182 |
1183 | shebang-command@2.0.0:
1184 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1185 | engines: {node: '>=8'}
1186 |
1187 | shebang-regex@3.0.0:
1188 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1189 | engines: {node: '>=8'}
1190 |
1191 | sirv@2.0.4:
1192 | resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
1193 | engines: {node: '>= 10'}
1194 |
1195 | source-map-js@1.0.2:
1196 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1197 | engines: {node: '>=0.10.0'}
1198 |
1199 | source-map-js@1.2.1:
1200 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1201 | engines: {node: '>=0.10.0'}
1202 |
1203 | strip-ansi@6.0.1:
1204 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1205 | engines: {node: '>=8'}
1206 |
1207 | strip-json-comments@3.1.1:
1208 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1209 | engines: {node: '>=8'}
1210 |
1211 | supports-color@7.2.0:
1212 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1213 | engines: {node: '>=8'}
1214 |
1215 | svelte-check@4.0.2:
1216 | resolution: {integrity: sha512-w2yqcG9ELJe2RJCnAvB7v0OgkHhL3czzz/tVoxGFfO6y4mOrF6QHCDhXijeXzsU7LVKEwWS3Qd9tza4JBuDxqA==}
1217 | engines: {node: '>= 18.0.0'}
1218 | hasBin: true
1219 | peerDependencies:
1220 | svelte: ^4.0.0 || ^5.0.0-next.0
1221 | typescript: '>=5.0.0'
1222 |
1223 | svelte-eslint-parser@0.41.1:
1224 | resolution: {integrity: sha512-08ndI6zTghzI8SuJAFpvMbA/haPSGn3xz19pjre19yYMw8Nw/wQJ2PrZBI/L8ijGTgtkWCQQiLLy+Z1tfaCwNA==}
1225 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1226 | peerDependencies:
1227 | svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191
1228 | peerDependenciesMeta:
1229 | svelte:
1230 | optional: true
1231 |
1232 | svelte-hmr@0.16.0:
1233 | resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==}
1234 | engines: {node: ^12.20 || ^14.13.1 || >= 16}
1235 | peerDependencies:
1236 | svelte: ^3.19.0 || ^4.0.0
1237 |
1238 | svelte-preprocess@6.0.2:
1239 | resolution: {integrity: sha512-OvDTLfaOkkhjprbDKO0SOCkjNYuHy16dbD4SpqbIi6QiabOMHxRT4km5/dzbFFkmW1L0E2INF3MFltG2pgOyKQ==}
1240 | engines: {node: '>= 18.0.0'}
1241 | peerDependencies:
1242 | '@babel/core': ^7.10.2
1243 | coffeescript: ^2.5.1
1244 | less: ^3.11.3 || ^4.0.0
1245 | postcss: ^7 || ^8
1246 | postcss-load-config: '>=3'
1247 | pug: ^3.0.0
1248 | sass: ^1.26.8
1249 | stylus: '>=0.55'
1250 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
1251 | svelte: ^4.0.0 || ^5.0.0-next.100 || ^5.0.0
1252 | typescript: ^5.0.0
1253 | peerDependenciesMeta:
1254 | '@babel/core':
1255 | optional: true
1256 | coffeescript:
1257 | optional: true
1258 | less:
1259 | optional: true
1260 | postcss:
1261 | optional: true
1262 | postcss-load-config:
1263 | optional: true
1264 | pug:
1265 | optional: true
1266 | sass:
1267 | optional: true
1268 | stylus:
1269 | optional: true
1270 | sugarss:
1271 | optional: true
1272 | typescript:
1273 | optional: true
1274 |
1275 | svelte-tiny-linked-charts@1.6.1:
1276 | resolution: {integrity: sha512-Ov+k5O/0NvHGUuuWTrfQ3hm2q5iKo7P1aYJ79c8epg8lYbOLdaQm6GST6tyiqTucPtyrNHo3G5gSOG2zT4Ca8A==}
1277 | peerDependencies:
1278 | svelte: ^4.0.0 || >= 5.0.0
1279 |
1280 | svelte@3.55.1:
1281 | resolution: {integrity: sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==}
1282 | engines: {node: '>= 8'}
1283 |
1284 | svelte@4.2.19:
1285 | resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==}
1286 | engines: {node: '>=16'}
1287 |
1288 | tabbable@5.3.3:
1289 | resolution: {integrity: sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==}
1290 |
1291 | tailwind-merge@1.14.0:
1292 | resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==}
1293 |
1294 | text-table@0.2.0:
1295 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
1296 |
1297 | tiny-glob@0.2.9:
1298 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
1299 |
1300 | to-regex-range@5.0.1:
1301 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1302 | engines: {node: '>=8.0'}
1303 |
1304 | totalist@3.0.0:
1305 | resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==}
1306 | engines: {node: '>=6'}
1307 |
1308 | ts-api-utils@1.3.0:
1309 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
1310 | engines: {node: '>=16'}
1311 | peerDependencies:
1312 | typescript: '>=4.2.0'
1313 |
1314 | tslib@2.7.0:
1315 | resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
1316 |
1317 | type-check@0.4.0:
1318 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1319 | engines: {node: '>= 0.8.0'}
1320 |
1321 | typescript@5.6.2:
1322 | resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
1323 | engines: {node: '>=14.17'}
1324 | hasBin: true
1325 |
1326 | uri-js@4.4.1:
1327 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1328 |
1329 | util-deprecate@1.0.2:
1330 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1331 |
1332 | uuid@10.0.0:
1333 | resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
1334 | hasBin: true
1335 |
1336 | vite@5.4.7:
1337 | resolution: {integrity: sha512-5l2zxqMEPVENgvzTuBpHer2awaetimj2BGkhBPdnwKbPNOlHsODU+oiazEZzLK7KhAnOrO+XGYJYn4ZlUhDtDQ==}
1338 | engines: {node: ^18.0.0 || >=20.0.0}
1339 | hasBin: true
1340 | peerDependencies:
1341 | '@types/node': ^18.0.0 || >=20.0.0
1342 | less: '*'
1343 | lightningcss: ^1.21.0
1344 | sass: '*'
1345 | sass-embedded: '*'
1346 | stylus: '*'
1347 | sugarss: '*'
1348 | terser: ^5.4.0
1349 | peerDependenciesMeta:
1350 | '@types/node':
1351 | optional: true
1352 | less:
1353 | optional: true
1354 | lightningcss:
1355 | optional: true
1356 | sass:
1357 | optional: true
1358 | sass-embedded:
1359 | optional: true
1360 | stylus:
1361 | optional: true
1362 | sugarss:
1363 | optional: true
1364 | terser:
1365 | optional: true
1366 |
1367 | vitefu@0.2.5:
1368 | resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
1369 | peerDependencies:
1370 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0
1371 | peerDependenciesMeta:
1372 | vite:
1373 | optional: true
1374 |
1375 | which@2.0.2:
1376 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1377 | engines: {node: '>= 8'}
1378 | hasBin: true
1379 |
1380 | word-wrap@1.2.5:
1381 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1382 | engines: {node: '>=0.10.0'}
1383 |
1384 | yaml@1.10.2:
1385 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
1386 | engines: {node: '>= 6'}
1387 |
1388 | yocto-queue@0.1.0:
1389 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1390 | engines: {node: '>=10'}
1391 |
1392 | snapshots:
1393 |
1394 | '@ampproject/remapping@2.3.0':
1395 | dependencies:
1396 | '@jridgewell/gen-mapping': 0.3.5
1397 | '@jridgewell/trace-mapping': 0.3.25
1398 |
1399 | '@esbuild/aix-ppc64@0.21.5':
1400 | optional: true
1401 |
1402 | '@esbuild/android-arm64@0.21.5':
1403 | optional: true
1404 |
1405 | '@esbuild/android-arm@0.21.5':
1406 | optional: true
1407 |
1408 | '@esbuild/android-x64@0.21.5':
1409 | optional: true
1410 |
1411 | '@esbuild/darwin-arm64@0.21.5':
1412 | optional: true
1413 |
1414 | '@esbuild/darwin-x64@0.21.5':
1415 | optional: true
1416 |
1417 | '@esbuild/freebsd-arm64@0.21.5':
1418 | optional: true
1419 |
1420 | '@esbuild/freebsd-x64@0.21.5':
1421 | optional: true
1422 |
1423 | '@esbuild/linux-arm64@0.21.5':
1424 | optional: true
1425 |
1426 | '@esbuild/linux-arm@0.21.5':
1427 | optional: true
1428 |
1429 | '@esbuild/linux-ia32@0.21.5':
1430 | optional: true
1431 |
1432 | '@esbuild/linux-loong64@0.21.5':
1433 | optional: true
1434 |
1435 | '@esbuild/linux-mips64el@0.21.5':
1436 | optional: true
1437 |
1438 | '@esbuild/linux-ppc64@0.21.5':
1439 | optional: true
1440 |
1441 | '@esbuild/linux-riscv64@0.21.5':
1442 | optional: true
1443 |
1444 | '@esbuild/linux-s390x@0.21.5':
1445 | optional: true
1446 |
1447 | '@esbuild/linux-x64@0.21.5':
1448 | optional: true
1449 |
1450 | '@esbuild/netbsd-x64@0.21.5':
1451 | optional: true
1452 |
1453 | '@esbuild/openbsd-x64@0.21.5':
1454 | optional: true
1455 |
1456 | '@esbuild/sunos-x64@0.21.5':
1457 | optional: true
1458 |
1459 | '@esbuild/win32-arm64@0.21.5':
1460 | optional: true
1461 |
1462 | '@esbuild/win32-ia32@0.21.5':
1463 | optional: true
1464 |
1465 | '@esbuild/win32-x64@0.21.5':
1466 | optional: true
1467 |
1468 | '@eslint-community/eslint-utils@4.4.0(eslint@9.11.0)':
1469 | dependencies:
1470 | eslint: 9.11.0
1471 | eslint-visitor-keys: 3.3.0
1472 |
1473 | '@eslint-community/regexpp@4.11.1': {}
1474 |
1475 | '@eslint/config-array@0.18.0':
1476 | dependencies:
1477 | '@eslint/object-schema': 2.1.4
1478 | debug: 4.3.4
1479 | minimatch: 3.1.2
1480 | transitivePeerDependencies:
1481 | - supports-color
1482 |
1483 | '@eslint/eslintrc@3.1.0':
1484 | dependencies:
1485 | ajv: 6.12.6
1486 | debug: 4.3.4
1487 | espree: 10.1.0
1488 | globals: 14.0.0
1489 | ignore: 5.2.0
1490 | import-fresh: 3.3.0
1491 | js-yaml: 4.1.0
1492 | minimatch: 3.1.2
1493 | strip-json-comments: 3.1.1
1494 | transitivePeerDependencies:
1495 | - supports-color
1496 |
1497 | '@eslint/js@9.11.0': {}
1498 |
1499 | '@eslint/object-schema@2.1.4': {}
1500 |
1501 | '@eslint/plugin-kit@0.2.0':
1502 | dependencies:
1503 | levn: 0.4.1
1504 |
1505 | '@fontsource/fira-mono@5.1.0': {}
1506 |
1507 | '@humanwhocodes/module-importer@1.0.1': {}
1508 |
1509 | '@humanwhocodes/retry@0.3.0': {}
1510 |
1511 | '@jridgewell/gen-mapping@0.3.5':
1512 | dependencies:
1513 | '@jridgewell/set-array': 1.2.1
1514 | '@jridgewell/sourcemap-codec': 1.5.0
1515 | '@jridgewell/trace-mapping': 0.3.25
1516 |
1517 | '@jridgewell/resolve-uri@3.1.0': {}
1518 |
1519 | '@jridgewell/set-array@1.2.1': {}
1520 |
1521 | '@jridgewell/sourcemap-codec@1.5.0': {}
1522 |
1523 | '@jridgewell/trace-mapping@0.3.25':
1524 | dependencies:
1525 | '@jridgewell/resolve-uri': 3.1.0
1526 | '@jridgewell/sourcemap-codec': 1.5.0
1527 |
1528 | '@nodelib/fs.scandir@2.1.5':
1529 | dependencies:
1530 | '@nodelib/fs.stat': 2.0.5
1531 | run-parallel: 1.2.0
1532 |
1533 | '@nodelib/fs.stat@2.0.5': {}
1534 |
1535 | '@nodelib/fs.walk@1.2.8':
1536 | dependencies:
1537 | '@nodelib/fs.scandir': 2.1.5
1538 | fastq: 1.13.0
1539 |
1540 | '@polka/url@1.0.0-next.28': {}
1541 |
1542 | '@rollup/rollup-android-arm-eabi@4.22.4':
1543 | optional: true
1544 |
1545 | '@rollup/rollup-android-arm64@4.22.4':
1546 | optional: true
1547 |
1548 | '@rollup/rollup-darwin-arm64@4.22.4':
1549 | optional: true
1550 |
1551 | '@rollup/rollup-darwin-x64@4.22.4':
1552 | optional: true
1553 |
1554 | '@rollup/rollup-linux-arm-gnueabihf@4.22.4':
1555 | optional: true
1556 |
1557 | '@rollup/rollup-linux-arm-musleabihf@4.22.4':
1558 | optional: true
1559 |
1560 | '@rollup/rollup-linux-arm64-gnu@4.22.4':
1561 | optional: true
1562 |
1563 | '@rollup/rollup-linux-arm64-musl@4.22.4':
1564 | optional: true
1565 |
1566 | '@rollup/rollup-linux-powerpc64le-gnu@4.22.4':
1567 | optional: true
1568 |
1569 | '@rollup/rollup-linux-riscv64-gnu@4.22.4':
1570 | optional: true
1571 |
1572 | '@rollup/rollup-linux-s390x-gnu@4.22.4':
1573 | optional: true
1574 |
1575 | '@rollup/rollup-linux-x64-gnu@4.22.4':
1576 | optional: true
1577 |
1578 | '@rollup/rollup-linux-x64-musl@4.22.4':
1579 | optional: true
1580 |
1581 | '@rollup/rollup-win32-arm64-msvc@4.22.4':
1582 | optional: true
1583 |
1584 | '@rollup/rollup-win32-ia32-msvc@4.22.4':
1585 | optional: true
1586 |
1587 | '@rollup/rollup-win32-x64-msvc@4.22.4':
1588 | optional: true
1589 |
1590 | '@sveltejs/adapter-auto@3.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))':
1591 | dependencies:
1592 | '@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18))
1593 | import-meta-resolve: 4.1.0
1594 |
1595 | '@sveltejs/adapter-static@3.0.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))':
1596 | dependencies:
1597 | '@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18))
1598 |
1599 | '@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18))':
1600 | dependencies:
1601 | '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18))
1602 | '@types/cookie': 0.6.0
1603 | cookie: 0.6.0
1604 | devalue: 5.0.0
1605 | esm-env: 1.0.0
1606 | import-meta-resolve: 4.1.0
1607 | kleur: 4.1.5
1608 | magic-string: 0.30.11
1609 | mrmime: 2.0.0
1610 | sade: 1.8.1
1611 | set-cookie-parser: 2.7.0
1612 | sirv: 2.0.4
1613 | svelte: 4.2.19
1614 | tiny-glob: 0.2.9
1615 | vite: 5.4.7(@types/node@18.7.18)
1616 |
1617 | '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18))':
1618 | dependencies:
1619 | '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18))
1620 | debug: 4.3.4
1621 | svelte: 4.2.19
1622 | vite: 5.4.7(@types/node@18.7.18)
1623 | transitivePeerDependencies:
1624 | - supports-color
1625 |
1626 | '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18))':
1627 | dependencies:
1628 | '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18)))(svelte@4.2.19)(vite@5.4.7(@types/node@18.7.18))
1629 | debug: 4.3.4
1630 | deepmerge: 4.3.1
1631 | kleur: 4.1.5
1632 | magic-string: 0.30.11
1633 | svelte: 4.2.19
1634 | svelte-hmr: 0.16.0(svelte@4.2.19)
1635 | vite: 5.4.7(@types/node@18.7.18)
1636 | vitefu: 0.2.5(vite@5.4.7(@types/node@18.7.18))
1637 | transitivePeerDependencies:
1638 | - supports-color
1639 |
1640 | '@tauri-apps/api@1.6.0': {}
1641 |
1642 | '@tauri-apps/cli-darwin-arm64@1.6.2':
1643 | optional: true
1644 |
1645 | '@tauri-apps/cli-darwin-x64@1.6.2':
1646 | optional: true
1647 |
1648 | '@tauri-apps/cli-linux-arm-gnueabihf@1.6.2':
1649 | optional: true
1650 |
1651 | '@tauri-apps/cli-linux-arm64-gnu@1.6.2':
1652 | optional: true
1653 |
1654 | '@tauri-apps/cli-linux-arm64-musl@1.6.2':
1655 | optional: true
1656 |
1657 | '@tauri-apps/cli-linux-x64-gnu@1.6.2':
1658 | optional: true
1659 |
1660 | '@tauri-apps/cli-linux-x64-musl@1.6.2':
1661 | optional: true
1662 |
1663 | '@tauri-apps/cli-win32-arm64-msvc@1.6.2':
1664 | optional: true
1665 |
1666 | '@tauri-apps/cli-win32-ia32-msvc@1.6.2':
1667 | optional: true
1668 |
1669 | '@tauri-apps/cli-win32-x64-msvc@1.6.2':
1670 | optional: true
1671 |
1672 | '@tauri-apps/cli@1.6.2':
1673 | optionalDependencies:
1674 | '@tauri-apps/cli-darwin-arm64': 1.6.2
1675 | '@tauri-apps/cli-darwin-x64': 1.6.2
1676 | '@tauri-apps/cli-linux-arm-gnueabihf': 1.6.2
1677 | '@tauri-apps/cli-linux-arm64-gnu': 1.6.2
1678 | '@tauri-apps/cli-linux-arm64-musl': 1.6.2
1679 | '@tauri-apps/cli-linux-x64-gnu': 1.6.2
1680 | '@tauri-apps/cli-linux-x64-musl': 1.6.2
1681 | '@tauri-apps/cli-win32-arm64-msvc': 1.6.2
1682 | '@tauri-apps/cli-win32-ia32-msvc': 1.6.2
1683 | '@tauri-apps/cli-win32-x64-msvc': 1.6.2
1684 |
1685 | '@tauri-controls/svelte@0.4.0(clsx@2.1.1)(svelte@4.2.19)(tailwind-merge@1.14.0)':
1686 | dependencies:
1687 | clsx: 2.1.1
1688 | svelte: 4.2.19
1689 | tailwind-merge: 1.14.0
1690 |
1691 | '@types/cookie@0.6.0': {}
1692 |
1693 | '@types/estree@1.0.5': {}
1694 |
1695 | '@types/estree@1.0.6': {}
1696 |
1697 | '@types/node@18.7.18': {}
1698 |
1699 | '@types/rollup-plugin-svelte-svg@1.0.6':
1700 | dependencies:
1701 | '@types/svgo': 2.6.4
1702 | rollup: 2.78.1
1703 | svelte: 3.55.1
1704 |
1705 | '@types/svgo@2.6.4':
1706 | dependencies:
1707 | '@types/node': 18.7.18
1708 |
1709 | '@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0)(typescript@5.6.2))(eslint@9.11.0)(typescript@5.6.2)':
1710 | dependencies:
1711 | '@eslint-community/regexpp': 4.11.1
1712 | '@typescript-eslint/parser': 8.6.0(eslint@9.11.0)(typescript@5.6.2)
1713 | '@typescript-eslint/scope-manager': 8.6.0
1714 | '@typescript-eslint/type-utils': 8.6.0(eslint@9.11.0)(typescript@5.6.2)
1715 | '@typescript-eslint/utils': 8.6.0(eslint@9.11.0)(typescript@5.6.2)
1716 | '@typescript-eslint/visitor-keys': 8.6.0
1717 | eslint: 9.11.0
1718 | graphemer: 1.4.0
1719 | ignore: 5.3.2
1720 | natural-compare: 1.4.0
1721 | ts-api-utils: 1.3.0(typescript@5.6.2)
1722 | optionalDependencies:
1723 | typescript: 5.6.2
1724 | transitivePeerDependencies:
1725 | - supports-color
1726 |
1727 | '@typescript-eslint/parser@8.6.0(eslint@9.11.0)(typescript@5.6.2)':
1728 | dependencies:
1729 | '@typescript-eslint/scope-manager': 8.6.0
1730 | '@typescript-eslint/types': 8.6.0
1731 | '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
1732 | '@typescript-eslint/visitor-keys': 8.6.0
1733 | debug: 4.3.4
1734 | eslint: 9.11.0
1735 | optionalDependencies:
1736 | typescript: 5.6.2
1737 | transitivePeerDependencies:
1738 | - supports-color
1739 |
1740 | '@typescript-eslint/scope-manager@8.6.0':
1741 | dependencies:
1742 | '@typescript-eslint/types': 8.6.0
1743 | '@typescript-eslint/visitor-keys': 8.6.0
1744 |
1745 | '@typescript-eslint/type-utils@8.6.0(eslint@9.11.0)(typescript@5.6.2)':
1746 | dependencies:
1747 | '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
1748 | '@typescript-eslint/utils': 8.6.0(eslint@9.11.0)(typescript@5.6.2)
1749 | debug: 4.3.4
1750 | ts-api-utils: 1.3.0(typescript@5.6.2)
1751 | optionalDependencies:
1752 | typescript: 5.6.2
1753 | transitivePeerDependencies:
1754 | - eslint
1755 | - supports-color
1756 |
1757 | '@typescript-eslint/types@8.6.0': {}
1758 |
1759 | '@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2)':
1760 | dependencies:
1761 | '@typescript-eslint/types': 8.6.0
1762 | '@typescript-eslint/visitor-keys': 8.6.0
1763 | debug: 4.3.4
1764 | fast-glob: 3.3.2
1765 | is-glob: 4.0.3
1766 | minimatch: 9.0.5
1767 | semver: 7.6.3
1768 | ts-api-utils: 1.3.0(typescript@5.6.2)
1769 | optionalDependencies:
1770 | typescript: 5.6.2
1771 | transitivePeerDependencies:
1772 | - supports-color
1773 |
1774 | '@typescript-eslint/utils@8.6.0(eslint@9.11.0)(typescript@5.6.2)':
1775 | dependencies:
1776 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.0)
1777 | '@typescript-eslint/scope-manager': 8.6.0
1778 | '@typescript-eslint/types': 8.6.0
1779 | '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2)
1780 | eslint: 9.11.0
1781 | transitivePeerDependencies:
1782 | - supports-color
1783 | - typescript
1784 |
1785 | '@typescript-eslint/visitor-keys@8.6.0':
1786 | dependencies:
1787 | '@typescript-eslint/types': 8.6.0
1788 | eslint-visitor-keys: 3.4.3
1789 |
1790 | acorn-jsx@5.3.2(acorn@8.12.1):
1791 | dependencies:
1792 | acorn: 8.12.1
1793 |
1794 | acorn@8.12.1: {}
1795 |
1796 | ajv@6.12.6:
1797 | dependencies:
1798 | fast-deep-equal: 3.1.3
1799 | fast-json-stable-stringify: 2.1.0
1800 | json-schema-traverse: 0.4.1
1801 | uri-js: 4.4.1
1802 |
1803 | ansi-regex@5.0.1: {}
1804 |
1805 | ansi-styles@4.3.0:
1806 | dependencies:
1807 | color-convert: 2.0.1
1808 |
1809 | anymatch@3.1.2:
1810 | dependencies:
1811 | normalize-path: 3.0.0
1812 | picomatch: 2.3.1
1813 |
1814 | argparse@2.0.1: {}
1815 |
1816 | aria-query@5.3.2: {}
1817 |
1818 | axobject-query@4.1.0: {}
1819 |
1820 | balanced-match@1.0.2: {}
1821 |
1822 | binary-extensions@2.2.0: {}
1823 |
1824 | brace-expansion@1.1.11:
1825 | dependencies:
1826 | balanced-match: 1.0.2
1827 | concat-map: 0.0.1
1828 |
1829 | brace-expansion@2.0.1:
1830 | dependencies:
1831 | balanced-match: 1.0.2
1832 |
1833 | braces@3.0.2:
1834 | dependencies:
1835 | fill-range: 7.0.1
1836 |
1837 | callsites@3.1.0: {}
1838 |
1839 | chalk@4.1.2:
1840 | dependencies:
1841 | ansi-styles: 4.3.0
1842 | supports-color: 7.2.0
1843 |
1844 | chokidar@3.5.3:
1845 | dependencies:
1846 | anymatch: 3.1.2
1847 | braces: 3.0.2
1848 | glob-parent: 5.1.2
1849 | is-binary-path: 2.1.0
1850 | is-glob: 4.0.3
1851 | normalize-path: 3.0.0
1852 | readdirp: 3.6.0
1853 | optionalDependencies:
1854 | fsevents: 2.3.2
1855 |
1856 | clsx@2.1.1: {}
1857 |
1858 | code-red@1.0.4:
1859 | dependencies:
1860 | '@jridgewell/sourcemap-codec': 1.5.0
1861 | '@types/estree': 1.0.6
1862 | acorn: 8.12.1
1863 | estree-walker: 3.0.3
1864 | periscopic: 3.1.0
1865 |
1866 | color-convert@2.0.1:
1867 | dependencies:
1868 | color-name: 1.1.4
1869 |
1870 | color-name@1.1.4: {}
1871 |
1872 | concat-map@0.0.1: {}
1873 |
1874 | cookie@0.6.0: {}
1875 |
1876 | cross-spawn@7.0.3:
1877 | dependencies:
1878 | path-key: 3.1.1
1879 | shebang-command: 2.0.0
1880 | which: 2.0.2
1881 |
1882 | css-tree@2.3.1:
1883 | dependencies:
1884 | mdn-data: 2.0.30
1885 | source-map-js: 1.0.2
1886 |
1887 | cssesc@3.0.0: {}
1888 |
1889 | days-of-week@1.0.3(prop-types@15.8.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0):
1890 | dependencies:
1891 | prop-types: 15.8.1
1892 | react: 16.14.0
1893 | react-dom: 16.14.0(react@16.14.0)
1894 |
1895 | debug@4.3.4:
1896 | dependencies:
1897 | ms: 2.1.2
1898 |
1899 | deep-is@0.1.4: {}
1900 |
1901 | deepmerge@4.3.1: {}
1902 |
1903 | devalue@5.0.0: {}
1904 |
1905 | esbuild@0.21.5:
1906 | optionalDependencies:
1907 | '@esbuild/aix-ppc64': 0.21.5
1908 | '@esbuild/android-arm': 0.21.5
1909 | '@esbuild/android-arm64': 0.21.5
1910 | '@esbuild/android-x64': 0.21.5
1911 | '@esbuild/darwin-arm64': 0.21.5
1912 | '@esbuild/darwin-x64': 0.21.5
1913 | '@esbuild/freebsd-arm64': 0.21.5
1914 | '@esbuild/freebsd-x64': 0.21.5
1915 | '@esbuild/linux-arm': 0.21.5
1916 | '@esbuild/linux-arm64': 0.21.5
1917 | '@esbuild/linux-ia32': 0.21.5
1918 | '@esbuild/linux-loong64': 0.21.5
1919 | '@esbuild/linux-mips64el': 0.21.5
1920 | '@esbuild/linux-ppc64': 0.21.5
1921 | '@esbuild/linux-riscv64': 0.21.5
1922 | '@esbuild/linux-s390x': 0.21.5
1923 | '@esbuild/linux-x64': 0.21.5
1924 | '@esbuild/netbsd-x64': 0.21.5
1925 | '@esbuild/openbsd-x64': 0.21.5
1926 | '@esbuild/sunos-x64': 0.21.5
1927 | '@esbuild/win32-arm64': 0.21.5
1928 | '@esbuild/win32-ia32': 0.21.5
1929 | '@esbuild/win32-x64': 0.21.5
1930 |
1931 | escape-string-regexp@4.0.0: {}
1932 |
1933 | eslint-compat-utils@0.5.1(eslint@9.11.0):
1934 | dependencies:
1935 | eslint: 9.11.0
1936 | semver: 7.6.3
1937 |
1938 | eslint-config-prettier@9.1.0(eslint@9.11.0):
1939 | dependencies:
1940 | eslint: 9.11.0
1941 |
1942 | eslint-plugin-svelte@2.44.0(eslint@9.11.0)(svelte@4.2.19):
1943 | dependencies:
1944 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.0)
1945 | '@jridgewell/sourcemap-codec': 1.5.0
1946 | eslint: 9.11.0
1947 | eslint-compat-utils: 0.5.1(eslint@9.11.0)
1948 | esutils: 2.0.3
1949 | known-css-properties: 0.34.0
1950 | postcss: 8.4.47
1951 | postcss-load-config: 3.1.4(postcss@8.4.47)
1952 | postcss-safe-parser: 6.0.0(postcss@8.4.47)
1953 | postcss-selector-parser: 6.1.2
1954 | semver: 7.6.3
1955 | svelte-eslint-parser: 0.41.1(svelte@4.2.19)
1956 | optionalDependencies:
1957 | svelte: 4.2.19
1958 | transitivePeerDependencies:
1959 | - ts-node
1960 |
1961 | eslint-scope@7.2.2:
1962 | dependencies:
1963 | esrecurse: 4.3.0
1964 | estraverse: 5.3.0
1965 |
1966 | eslint-scope@8.0.2:
1967 | dependencies:
1968 | esrecurse: 4.3.0
1969 | estraverse: 5.3.0
1970 |
1971 | eslint-visitor-keys@3.3.0: {}
1972 |
1973 | eslint-visitor-keys@3.4.3: {}
1974 |
1975 | eslint-visitor-keys@4.0.0: {}
1976 |
1977 | eslint@9.11.0:
1978 | dependencies:
1979 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.0)
1980 | '@eslint-community/regexpp': 4.11.1
1981 | '@eslint/config-array': 0.18.0
1982 | '@eslint/eslintrc': 3.1.0
1983 | '@eslint/js': 9.11.0
1984 | '@eslint/plugin-kit': 0.2.0
1985 | '@humanwhocodes/module-importer': 1.0.1
1986 | '@humanwhocodes/retry': 0.3.0
1987 | '@nodelib/fs.walk': 1.2.8
1988 | ajv: 6.12.6
1989 | chalk: 4.1.2
1990 | cross-spawn: 7.0.3
1991 | debug: 4.3.4
1992 | escape-string-regexp: 4.0.0
1993 | eslint-scope: 8.0.2
1994 | eslint-visitor-keys: 4.0.0
1995 | espree: 10.1.0
1996 | esquery: 1.6.0
1997 | esutils: 2.0.3
1998 | fast-deep-equal: 3.1.3
1999 | file-entry-cache: 8.0.0
2000 | find-up: 5.0.0
2001 | glob-parent: 6.0.2
2002 | ignore: 5.2.0
2003 | imurmurhash: 0.1.4
2004 | is-glob: 4.0.3
2005 | is-path-inside: 3.0.3
2006 | json-stable-stringify-without-jsonify: 1.0.1
2007 | lodash.merge: 4.6.2
2008 | minimatch: 3.1.2
2009 | natural-compare: 1.4.0
2010 | optionator: 0.9.4
2011 | strip-ansi: 6.0.1
2012 | text-table: 0.2.0
2013 | transitivePeerDependencies:
2014 | - supports-color
2015 |
2016 | esm-env@1.0.0: {}
2017 |
2018 | espree@10.1.0:
2019 | dependencies:
2020 | acorn: 8.12.1
2021 | acorn-jsx: 5.3.2(acorn@8.12.1)
2022 | eslint-visitor-keys: 4.0.0
2023 |
2024 | espree@9.6.1:
2025 | dependencies:
2026 | acorn: 8.12.1
2027 | acorn-jsx: 5.3.2(acorn@8.12.1)
2028 | eslint-visitor-keys: 3.4.3
2029 |
2030 | esquery@1.6.0:
2031 | dependencies:
2032 | estraverse: 5.3.0
2033 |
2034 | esrecurse@4.3.0:
2035 | dependencies:
2036 | estraverse: 5.3.0
2037 |
2038 | estraverse@5.3.0: {}
2039 |
2040 | estree-walker@0.2.1: {}
2041 |
2042 | estree-walker@3.0.3:
2043 | dependencies:
2044 | '@types/estree': 1.0.6
2045 |
2046 | esutils@2.0.3: {}
2047 |
2048 | fast-deep-equal@3.1.3: {}
2049 |
2050 | fast-glob@3.3.2:
2051 | dependencies:
2052 | '@nodelib/fs.stat': 2.0.5
2053 | '@nodelib/fs.walk': 1.2.8
2054 | glob-parent: 5.1.2
2055 | merge2: 1.4.1
2056 | micromatch: 4.0.5
2057 |
2058 | fast-json-stable-stringify@2.1.0: {}
2059 |
2060 | fast-levenshtein@2.0.6: {}
2061 |
2062 | fastq@1.13.0:
2063 | dependencies:
2064 | reusify: 1.0.4
2065 |
2066 | fdir@6.3.0: {}
2067 |
2068 | file-entry-cache@8.0.0:
2069 | dependencies:
2070 | flat-cache: 4.0.1
2071 |
2072 | fill-range@7.0.1:
2073 | dependencies:
2074 | to-regex-range: 5.0.1
2075 |
2076 | find-up@5.0.0:
2077 | dependencies:
2078 | locate-path: 6.0.0
2079 | path-exists: 4.0.0
2080 |
2081 | flat-cache@4.0.1:
2082 | dependencies:
2083 | flatted: 3.3.1
2084 | keyv: 4.5.4
2085 |
2086 | flatted@3.3.1: {}
2087 |
2088 | fluent-svelte@1.6.0:
2089 | dependencies:
2090 | focus-trap: 6.9.4
2091 | tabbable: 5.3.3
2092 |
2093 | focus-trap@6.9.4:
2094 | dependencies:
2095 | tabbable: 5.3.3
2096 |
2097 | fsevents@2.3.2:
2098 | optional: true
2099 |
2100 | fsevents@2.3.3:
2101 | optional: true
2102 |
2103 | glob-parent@5.1.2:
2104 | dependencies:
2105 | is-glob: 4.0.3
2106 |
2107 | glob-parent@6.0.2:
2108 | dependencies:
2109 | is-glob: 4.0.3
2110 |
2111 | globals@14.0.0: {}
2112 |
2113 | globalyzer@0.1.0: {}
2114 |
2115 | globrex@0.1.2: {}
2116 |
2117 | graphemer@1.4.0: {}
2118 |
2119 | has-flag@4.0.0: {}
2120 |
2121 | ignore@5.2.0: {}
2122 |
2123 | ignore@5.3.2: {}
2124 |
2125 | import-fresh@3.3.0:
2126 | dependencies:
2127 | parent-module: 1.0.1
2128 | resolve-from: 4.0.0
2129 |
2130 | import-meta-resolve@4.1.0: {}
2131 |
2132 | imurmurhash@0.1.4: {}
2133 |
2134 | is-binary-path@2.1.0:
2135 | dependencies:
2136 | binary-extensions: 2.2.0
2137 |
2138 | is-extglob@2.1.1: {}
2139 |
2140 | is-glob@4.0.3:
2141 | dependencies:
2142 | is-extglob: 2.1.1
2143 |
2144 | is-number@7.0.0: {}
2145 |
2146 | is-path-inside@3.0.3: {}
2147 |
2148 | is-reference@3.0.2:
2149 | dependencies:
2150 | '@types/estree': 1.0.6
2151 |
2152 | isexe@2.0.0: {}
2153 |
2154 | js-tokens@4.0.0: {}
2155 |
2156 | js-yaml@4.1.0:
2157 | dependencies:
2158 | argparse: 2.0.1
2159 |
2160 | json-buffer@3.0.1: {}
2161 |
2162 | json-schema-traverse@0.4.1: {}
2163 |
2164 | json-stable-stringify-without-jsonify@1.0.1: {}
2165 |
2166 | keyv@4.5.4:
2167 | dependencies:
2168 | json-buffer: 3.0.1
2169 |
2170 | kleur@4.1.5: {}
2171 |
2172 | known-css-properties@0.34.0: {}
2173 |
2174 | levn@0.4.1:
2175 | dependencies:
2176 | prelude-ls: 1.2.1
2177 | type-check: 0.4.0
2178 |
2179 | lilconfig@2.1.0: {}
2180 |
2181 | locate-character@3.0.0: {}
2182 |
2183 | locate-path@6.0.0:
2184 | dependencies:
2185 | p-locate: 5.0.0
2186 |
2187 | lodash.merge@4.6.2: {}
2188 |
2189 | loose-envify@1.4.0:
2190 | dependencies:
2191 | js-tokens: 4.0.0
2192 |
2193 | magic-string@0.30.11:
2194 | dependencies:
2195 | '@jridgewell/sourcemap-codec': 1.5.0
2196 |
2197 | mdn-data@2.0.30: {}
2198 |
2199 | merge2@1.4.1: {}
2200 |
2201 | micromatch@4.0.5:
2202 | dependencies:
2203 | braces: 3.0.2
2204 | picomatch: 2.3.1
2205 |
2206 | minimatch@3.1.2:
2207 | dependencies:
2208 | brace-expansion: 1.1.11
2209 |
2210 | minimatch@9.0.5:
2211 | dependencies:
2212 | brace-expansion: 2.0.1
2213 |
2214 | mri@1.2.0: {}
2215 |
2216 | mrmime@2.0.0: {}
2217 |
2218 | ms@2.1.2: {}
2219 |
2220 | nanoid@3.3.7: {}
2221 |
2222 | natural-compare@1.4.0: {}
2223 |
2224 | normalize-path@3.0.0: {}
2225 |
2226 | object-assign@4.1.1: {}
2227 |
2228 | optionator@0.9.4:
2229 | dependencies:
2230 | deep-is: 0.1.4
2231 | fast-levenshtein: 2.0.6
2232 | levn: 0.4.1
2233 | prelude-ls: 1.2.1
2234 | type-check: 0.4.0
2235 | word-wrap: 1.2.5
2236 |
2237 | p-limit@3.1.0:
2238 | dependencies:
2239 | yocto-queue: 0.1.0
2240 |
2241 | p-locate@5.0.0:
2242 | dependencies:
2243 | p-limit: 3.1.0
2244 |
2245 | parent-module@1.0.1:
2246 | dependencies:
2247 | callsites: 3.1.0
2248 |
2249 | path-exists@4.0.0: {}
2250 |
2251 | path-key@3.1.1: {}
2252 |
2253 | periscopic@3.1.0:
2254 | dependencies:
2255 | '@types/estree': 1.0.6
2256 | estree-walker: 3.0.3
2257 | is-reference: 3.0.2
2258 |
2259 | picocolors@1.0.0: {}
2260 |
2261 | picocolors@1.1.0: {}
2262 |
2263 | picomatch@2.3.1: {}
2264 |
2265 | postcss-load-config@3.1.4(postcss@8.4.47):
2266 | dependencies:
2267 | lilconfig: 2.1.0
2268 | yaml: 1.10.2
2269 | optionalDependencies:
2270 | postcss: 8.4.47
2271 |
2272 | postcss-safe-parser@6.0.0(postcss@8.4.47):
2273 | dependencies:
2274 | postcss: 8.4.47
2275 |
2276 | postcss-scss@4.0.9(postcss@8.4.47):
2277 | dependencies:
2278 | postcss: 8.4.47
2279 |
2280 | postcss-selector-parser@6.1.2:
2281 | dependencies:
2282 | cssesc: 3.0.0
2283 | util-deprecate: 1.0.2
2284 |
2285 | postcss@8.4.47:
2286 | dependencies:
2287 | nanoid: 3.3.7
2288 | picocolors: 1.1.0
2289 | source-map-js: 1.2.1
2290 |
2291 | prelude-ls@1.2.1: {}
2292 |
2293 | prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.19):
2294 | dependencies:
2295 | prettier: 3.3.3
2296 | svelte: 4.2.19
2297 |
2298 | prettier@3.3.3: {}
2299 |
2300 | prop-types@15.8.1:
2301 | dependencies:
2302 | loose-envify: 1.4.0
2303 | object-assign: 4.1.1
2304 | react-is: 16.13.1
2305 |
2306 | punycode@2.1.1: {}
2307 |
2308 | queue-microtask@1.2.3: {}
2309 |
2310 | react-dom@16.14.0(react@16.14.0):
2311 | dependencies:
2312 | loose-envify: 1.4.0
2313 | object-assign: 4.1.1
2314 | prop-types: 15.8.1
2315 | react: 16.14.0
2316 | scheduler: 0.19.1
2317 |
2318 | react-is@16.13.1: {}
2319 |
2320 | react@16.14.0:
2321 | dependencies:
2322 | loose-envify: 1.4.0
2323 | object-assign: 4.1.1
2324 | prop-types: 15.8.1
2325 |
2326 | readdirp@3.6.0:
2327 | dependencies:
2328 | picomatch: 2.3.1
2329 |
2330 | resolve-from@4.0.0: {}
2331 |
2332 | reusify@1.0.4: {}
2333 |
2334 | rollup-plugin-svelte-svg@0.2.3(svelte@4.2.19):
2335 | dependencies:
2336 | rollup-pluginutils: 1.5.2
2337 | svelte: 4.2.19
2338 |
2339 | rollup-pluginutils@1.5.2:
2340 | dependencies:
2341 | estree-walker: 0.2.1
2342 | minimatch: 3.1.2
2343 |
2344 | rollup@2.78.1:
2345 | optionalDependencies:
2346 | fsevents: 2.3.2
2347 |
2348 | rollup@4.22.4:
2349 | dependencies:
2350 | '@types/estree': 1.0.5
2351 | optionalDependencies:
2352 | '@rollup/rollup-android-arm-eabi': 4.22.4
2353 | '@rollup/rollup-android-arm64': 4.22.4
2354 | '@rollup/rollup-darwin-arm64': 4.22.4
2355 | '@rollup/rollup-darwin-x64': 4.22.4
2356 | '@rollup/rollup-linux-arm-gnueabihf': 4.22.4
2357 | '@rollup/rollup-linux-arm-musleabihf': 4.22.4
2358 | '@rollup/rollup-linux-arm64-gnu': 4.22.4
2359 | '@rollup/rollup-linux-arm64-musl': 4.22.4
2360 | '@rollup/rollup-linux-powerpc64le-gnu': 4.22.4
2361 | '@rollup/rollup-linux-riscv64-gnu': 4.22.4
2362 | '@rollup/rollup-linux-s390x-gnu': 4.22.4
2363 | '@rollup/rollup-linux-x64-gnu': 4.22.4
2364 | '@rollup/rollup-linux-x64-musl': 4.22.4
2365 | '@rollup/rollup-win32-arm64-msvc': 4.22.4
2366 | '@rollup/rollup-win32-ia32-msvc': 4.22.4
2367 | '@rollup/rollup-win32-x64-msvc': 4.22.4
2368 | fsevents: 2.3.3
2369 |
2370 | run-parallel@1.2.0:
2371 | dependencies:
2372 | queue-microtask: 1.2.3
2373 |
2374 | sade@1.8.1:
2375 | dependencies:
2376 | mri: 1.2.0
2377 |
2378 | scheduler@0.19.1:
2379 | dependencies:
2380 | loose-envify: 1.4.0
2381 | object-assign: 4.1.1
2382 |
2383 | semver@7.6.3: {}
2384 |
2385 | set-cookie-parser@2.7.0: {}
2386 |
2387 | shebang-command@2.0.0:
2388 | dependencies:
2389 | shebang-regex: 3.0.0
2390 |
2391 | shebang-regex@3.0.0: {}
2392 |
2393 | sirv@2.0.4:
2394 | dependencies:
2395 | '@polka/url': 1.0.0-next.28
2396 | mrmime: 2.0.0
2397 | totalist: 3.0.0
2398 |
2399 | source-map-js@1.0.2: {}
2400 |
2401 | source-map-js@1.2.1: {}
2402 |
2403 | strip-ansi@6.0.1:
2404 | dependencies:
2405 | ansi-regex: 5.0.1
2406 |
2407 | strip-json-comments@3.1.1: {}
2408 |
2409 | supports-color@7.2.0:
2410 | dependencies:
2411 | has-flag: 4.0.0
2412 |
2413 | svelte-check@4.0.2(svelte@4.2.19)(typescript@5.6.2):
2414 | dependencies:
2415 | '@jridgewell/trace-mapping': 0.3.25
2416 | chokidar: 3.5.3
2417 | fdir: 6.3.0
2418 | picocolors: 1.0.0
2419 | sade: 1.8.1
2420 | svelte: 4.2.19
2421 | typescript: 5.6.2
2422 | transitivePeerDependencies:
2423 | - picomatch
2424 |
2425 | svelte-eslint-parser@0.41.1(svelte@4.2.19):
2426 | dependencies:
2427 | eslint-scope: 7.2.2
2428 | eslint-visitor-keys: 3.4.3
2429 | espree: 9.6.1
2430 | postcss: 8.4.47
2431 | postcss-scss: 4.0.9(postcss@8.4.47)
2432 | optionalDependencies:
2433 | svelte: 4.2.19
2434 |
2435 | svelte-hmr@0.16.0(svelte@4.2.19):
2436 | dependencies:
2437 | svelte: 4.2.19
2438 |
2439 | svelte-preprocess@6.0.2(postcss-load-config@3.1.4(postcss@8.4.47))(postcss@8.4.47)(svelte@4.2.19)(typescript@5.6.2):
2440 | dependencies:
2441 | svelte: 4.2.19
2442 | optionalDependencies:
2443 | postcss: 8.4.47
2444 | postcss-load-config: 3.1.4(postcss@8.4.47)
2445 | typescript: 5.6.2
2446 |
2447 | svelte-tiny-linked-charts@1.6.1(svelte@4.2.19):
2448 | dependencies:
2449 | svelte: 4.2.19
2450 |
2451 | svelte@3.55.1: {}
2452 |
2453 | svelte@4.2.19:
2454 | dependencies:
2455 | '@ampproject/remapping': 2.3.0
2456 | '@jridgewell/sourcemap-codec': 1.5.0
2457 | '@jridgewell/trace-mapping': 0.3.25
2458 | '@types/estree': 1.0.6
2459 | acorn: 8.12.1
2460 | aria-query: 5.3.2
2461 | axobject-query: 4.1.0
2462 | code-red: 1.0.4
2463 | css-tree: 2.3.1
2464 | estree-walker: 3.0.3
2465 | is-reference: 3.0.2
2466 | locate-character: 3.0.0
2467 | magic-string: 0.30.11
2468 | periscopic: 3.1.0
2469 |
2470 | tabbable@5.3.3: {}
2471 |
2472 | tailwind-merge@1.14.0: {}
2473 |
2474 | text-table@0.2.0: {}
2475 |
2476 | tiny-glob@0.2.9:
2477 | dependencies:
2478 | globalyzer: 0.1.0
2479 | globrex: 0.1.2
2480 |
2481 | to-regex-range@5.0.1:
2482 | dependencies:
2483 | is-number: 7.0.0
2484 |
2485 | totalist@3.0.0: {}
2486 |
2487 | ts-api-utils@1.3.0(typescript@5.6.2):
2488 | dependencies:
2489 | typescript: 5.6.2
2490 |
2491 | tslib@2.7.0: {}
2492 |
2493 | type-check@0.4.0:
2494 | dependencies:
2495 | prelude-ls: 1.2.1
2496 |
2497 | typescript@5.6.2: {}
2498 |
2499 | uri-js@4.4.1:
2500 | dependencies:
2501 | punycode: 2.1.1
2502 |
2503 | util-deprecate@1.0.2: {}
2504 |
2505 | uuid@10.0.0: {}
2506 |
2507 | vite@5.4.7(@types/node@18.7.18):
2508 | dependencies:
2509 | esbuild: 0.21.5
2510 | postcss: 8.4.47
2511 | rollup: 4.22.4
2512 | optionalDependencies:
2513 | '@types/node': 18.7.18
2514 | fsevents: 2.3.3
2515 |
2516 | vitefu@0.2.5(vite@5.4.7(@types/node@18.7.18)):
2517 | optionalDependencies:
2518 | vite: 5.4.7(@types/node@18.7.18)
2519 |
2520 | which@2.0.2:
2521 | dependencies:
2522 | isexe: 2.0.0
2523 |
2524 | word-wrap@1.2.5: {}
2525 |
2526 | yaml@1.10.2: {}
2527 |
2528 | yocto-queue@0.1.0: {}
2529 |
--------------------------------------------------------------------------------