diff --git a/.gitignore b/.gitignore
index dcf6569..f2e10db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,4 +55,8 @@ TODO.md
.aider*
# dist folder
-dist/
\ No newline at end of file
+dist/
+
+# bak folder
+_svelte_tmp
+src_bak
\ No newline at end of file
diff --git a/index.html b/index.html
index 9a78244..535322b 100644
--- a/index.html
+++ b/index.html
@@ -1,16 +1,13 @@
-
-
-
-
- Tauri App
-
-
-
-
-
-
-
-
+
+
+
+
+ svelte-tmp
+
+
+
+
+
diff --git a/package.json b/package.json
index 0a2a465..b774f4e 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,7 @@
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
+ "check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json",
"tauri": "tauri"
},
"dependencies": {
@@ -16,7 +17,12 @@
},
"devDependencies": {
"@tauri-apps/cli": "^2",
- "typescript": "~5.6.2",
- "vite": "^6.0.3"
+ "typescript": "~5.9.3",
+ "vite": "^7.3.1",
+ "@sveltejs/vite-plugin-svelte": "^6.2.1",
+ "@tsconfig/svelte": "^5.0.6",
+ "@types/node": "^24.10.1",
+ "svelte": "^5.45.2",
+ "svelte-check": "^4.3.4"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2deadcb..336cca4 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -18,174 +18,205 @@ importers:
specifier: ^2
version: 2.5.3
devDependencies:
+ '@sveltejs/vite-plugin-svelte':
+ specifier: ^6.2.1
+ version: 6.2.4(svelte@5.53.5)(vite@7.3.1(@types/node@24.10.15))
'@tauri-apps/cli':
specifier: ^2
version: 2.10.0
+ '@tsconfig/svelte':
+ specifier: ^5.0.6
+ version: 5.0.8
+ '@types/node':
+ specifier: ^24.10.1
+ version: 24.10.15
+ svelte:
+ specifier: ^5.45.2
+ version: 5.53.5
+ svelte-check:
+ specifier: ^4.3.4
+ version: 4.4.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3)
typescript:
- specifier: ~5.6.2
- version: 5.6.3
+ specifier: ~5.9.3
+ version: 5.9.3
vite:
- specifier: ^6.0.3
- version: 6.4.1
+ specifier: ^7.3.1
+ version: 7.3.1(@types/node@24.10.15)
packages:
- '@esbuild/aix-ppc64@0.25.12':
- resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
+ '@esbuild/aix-ppc64@0.27.3':
+ resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.25.12':
- resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
+ '@esbuild/android-arm64@0.27.3':
+ resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.25.12':
- resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
+ '@esbuild/android-arm@0.27.3':
+ resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.25.12':
- resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
+ '@esbuild/android-x64@0.27.3':
+ resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.25.12':
- resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
+ '@esbuild/darwin-arm64@0.27.3':
+ resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.12':
- resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
+ '@esbuild/darwin-x64@0.27.3':
+ resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.25.12':
- resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
+ '@esbuild/freebsd-arm64@0.27.3':
+ resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.12':
- resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
+ '@esbuild/freebsd-x64@0.27.3':
+ resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.25.12':
- resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
+ '@esbuild/linux-arm64@0.27.3':
+ resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.25.12':
- resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
+ '@esbuild/linux-arm@0.27.3':
+ resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.25.12':
- resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
+ '@esbuild/linux-ia32@0.27.3':
+ resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.25.12':
- resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
+ '@esbuild/linux-loong64@0.27.3':
+ resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.25.12':
- resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
+ '@esbuild/linux-mips64el@0.27.3':
+ resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.25.12':
- resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
+ '@esbuild/linux-ppc64@0.27.3':
+ resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.12':
- resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
+ '@esbuild/linux-riscv64@0.27.3':
+ resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.25.12':
- resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
+ '@esbuild/linux-s390x@0.27.3':
+ resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.25.12':
- resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
+ '@esbuild/linux-x64@0.27.3':
+ resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.25.12':
- resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
+ '@esbuild/netbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.12':
- resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
+ '@esbuild/netbsd-x64@0.27.3':
+ resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.12':
- resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
+ '@esbuild/openbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.12':
- resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
+ '@esbuild/openbsd-x64@0.27.3':
+ resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.25.12':
- resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
+ '@esbuild/openharmony-arm64@0.27.3':
+ resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.25.12':
- resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
+ '@esbuild/sunos-x64@0.27.3':
+ resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.25.12':
- resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
+ '@esbuild/win32-arm64@0.27.3':
+ resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.25.12':
- resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
+ '@esbuild/win32-ia32@0.27.3':
+ resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.25.12':
- resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
+ '@esbuild/win32-x64@0.27.3':
+ resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
'@picocss/pico@2.1.1':
resolution: {integrity: sha512-kIDugA7Ps4U+2BHxiNHmvgPIQDWPDU4IeU6TNRdvXQM1uZX+FibqDQT2xUOnnO2yq/LUHcwnGlu1hvf4KfXnMg==}
@@ -327,6 +358,26 @@ packages:
cpu: [x64]
os: [win32]
+ '@sveltejs/acorn-typescript@1.0.9':
+ resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==}
+ peerDependencies:
+ acorn: ^8.9.0
+
+ '@sveltejs/vite-plugin-svelte-inspector@5.0.2':
+ resolution: {integrity: sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==}
+ engines: {node: ^20.19 || ^22.12 || >=24}
+ peerDependencies:
+ '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0
+ svelte: ^5.0.0
+ vite: ^6.3.0 || ^7.0.0
+
+ '@sveltejs/vite-plugin-svelte@6.2.4':
+ resolution: {integrity: sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==}
+ engines: {node: ^20.19 || ^22.12 || >=24}
+ peerDependencies:
+ svelte: ^5.0.0
+ vite: ^6.3.0 || ^7.0.0
+
'@tauri-apps/api@2.10.1':
resolution: {integrity: sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw==}
@@ -409,14 +460,57 @@ packages:
'@tauri-apps/plugin-opener@2.5.3':
resolution: {integrity: sha512-CCcUltXMOfUEArbf3db3kCE7Ggy1ExBEBl51Ko2ODJ6GDYHRp1nSNlQm5uNCFY5k7/ufaK5Ib3Du/Zir19IYQQ==}
+ '@tsconfig/svelte@5.0.8':
+ resolution: {integrity: sha512-UkNnw1/oFEfecR8ypyHIQuWYdkPvHiwcQ78sh+ymIiYoF+uc5H1UBetbjyqT+vgGJ3qQN6nhucJviX6HesWtKQ==}
+
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
- esbuild@0.25.12:
- resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
+ '@types/node@24.10.15':
+ resolution: {integrity: sha512-BgjLoRuSr0MTI5wA6gMw9Xy0sFudAaUuvrnjgGx9wZ522fYYLA5SYJ+1Y30vTcJEG+DRCyDHx/gzQVfofYzSdg==}
+
+ '@types/trusted-types@2.0.7':
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+
+ acorn@8.16.0:
+ resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ aria-query@5.3.1:
+ resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==}
+ engines: {node: '>= 0.4'}
+
+ axobject-query@4.1.0:
+ resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
+ engines: {node: '>= 0.4'}
+
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ devalue@5.6.3:
+ resolution: {integrity: sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==}
+
+ esbuild@0.27.3:
+ resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
engines: {node: '>=18'}
hasBin: true
+ esm-env@1.2.2:
+ resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
+
+ esrap@2.2.3:
+ resolution: {integrity: sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==}
+
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -431,11 +525,27 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
+ is-reference@3.0.3:
+ resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
+
+ locate-character@3.0.0:
+ resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
+
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ obug@2.1.1:
+ resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -447,37 +557,60 @@ packages:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
rollup@4.58.0:
resolution: {integrity: sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ sade@1.8.1:
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+ engines: {node: '>=6'}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ svelte-check@4.4.4:
+ resolution: {integrity: sha512-F1pGqXc710Oi/wTI4d/x7d6lgPwwfx1U6w3Q35n4xsC2e8C/yN2sM1+mWxjlMcpAfWucjlq4vPi+P4FZ8a14sQ==}
+ engines: {node: '>= 18.0.0'}
+ hasBin: true
+ peerDependencies:
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ typescript: '>=5.0.0'
+
+ svelte@5.53.5:
+ resolution: {integrity: sha512-YkqERnF05g8KLdDZwZrF8/i1eSbj6Eoat8Jjr2IfruZz9StLuBqo8sfCSzjosNKd+ZrQ8DkKZDjpO5y3ht1Pow==}
+ engines: {node: '>=18'}
+
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
- typescript@5.6.3:
- resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
hasBin: true
- vite@6.4.1:
- resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+
+ vite@7.3.1:
+ resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
- '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ '@types/node': ^20.19.0 || >=22.12.0
jiti: '>=1.21.0'
- less: '*'
+ less: ^4.0.0
lightningcss: ^1.21.0
- sass: '*'
- sass-embedded: '*'
- stylus: '*'
- sugarss: '*'
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
@@ -505,86 +638,116 @@ packages:
yaml:
optional: true
+ vitefu@1.1.2:
+ resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==}
+ peerDependencies:
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0
+ peerDependenciesMeta:
+ vite:
+ optional: true
+
+ zimmerframe@1.1.4:
+ resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==}
+
snapshots:
- '@esbuild/aix-ppc64@0.25.12':
+ '@esbuild/aix-ppc64@0.27.3':
optional: true
- '@esbuild/android-arm64@0.25.12':
+ '@esbuild/android-arm64@0.27.3':
optional: true
- '@esbuild/android-arm@0.25.12':
+ '@esbuild/android-arm@0.27.3':
optional: true
- '@esbuild/android-x64@0.25.12':
+ '@esbuild/android-x64@0.27.3':
optional: true
- '@esbuild/darwin-arm64@0.25.12':
+ '@esbuild/darwin-arm64@0.27.3':
optional: true
- '@esbuild/darwin-x64@0.25.12':
+ '@esbuild/darwin-x64@0.27.3':
optional: true
- '@esbuild/freebsd-arm64@0.25.12':
+ '@esbuild/freebsd-arm64@0.27.3':
optional: true
- '@esbuild/freebsd-x64@0.25.12':
+ '@esbuild/freebsd-x64@0.27.3':
optional: true
- '@esbuild/linux-arm64@0.25.12':
+ '@esbuild/linux-arm64@0.27.3':
optional: true
- '@esbuild/linux-arm@0.25.12':
+ '@esbuild/linux-arm@0.27.3':
optional: true
- '@esbuild/linux-ia32@0.25.12':
+ '@esbuild/linux-ia32@0.27.3':
optional: true
- '@esbuild/linux-loong64@0.25.12':
+ '@esbuild/linux-loong64@0.27.3':
optional: true
- '@esbuild/linux-mips64el@0.25.12':
+ '@esbuild/linux-mips64el@0.27.3':
optional: true
- '@esbuild/linux-ppc64@0.25.12':
+ '@esbuild/linux-ppc64@0.27.3':
optional: true
- '@esbuild/linux-riscv64@0.25.12':
+ '@esbuild/linux-riscv64@0.27.3':
optional: true
- '@esbuild/linux-s390x@0.25.12':
+ '@esbuild/linux-s390x@0.27.3':
optional: true
- '@esbuild/linux-x64@0.25.12':
+ '@esbuild/linux-x64@0.27.3':
optional: true
- '@esbuild/netbsd-arm64@0.25.12':
+ '@esbuild/netbsd-arm64@0.27.3':
optional: true
- '@esbuild/netbsd-x64@0.25.12':
+ '@esbuild/netbsd-x64@0.27.3':
optional: true
- '@esbuild/openbsd-arm64@0.25.12':
+ '@esbuild/openbsd-arm64@0.27.3':
optional: true
- '@esbuild/openbsd-x64@0.25.12':
+ '@esbuild/openbsd-x64@0.27.3':
optional: true
- '@esbuild/openharmony-arm64@0.25.12':
+ '@esbuild/openharmony-arm64@0.27.3':
optional: true
- '@esbuild/sunos-x64@0.25.12':
+ '@esbuild/sunos-x64@0.27.3':
optional: true
- '@esbuild/win32-arm64@0.25.12':
+ '@esbuild/win32-arm64@0.27.3':
optional: true
- '@esbuild/win32-ia32@0.25.12':
+ '@esbuild/win32-ia32@0.27.3':
optional: true
- '@esbuild/win32-x64@0.25.12':
+ '@esbuild/win32-x64@0.27.3':
optional: true
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
'@picocss/pico@2.1.1': {}
'@rollup/rollup-android-arm-eabi@4.58.0':
@@ -662,6 +825,27 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.58.0':
optional: true
+ '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)':
+ dependencies:
+ acorn: 8.16.0
+
+ '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.5)(vite@7.3.1(@types/node@24.10.15)))(svelte@5.53.5)(vite@7.3.1(@types/node@24.10.15))':
+ dependencies:
+ '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.5)(vite@7.3.1(@types/node@24.10.15))
+ obug: 2.1.1
+ svelte: 5.53.5
+ vite: 7.3.1(@types/node@24.10.15)
+
+ '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.5)(vite@7.3.1(@types/node@24.10.15))':
+ dependencies:
+ '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.5)(vite@7.3.1(@types/node@24.10.15)))(svelte@5.53.5)(vite@7.3.1(@types/node@24.10.15))
+ deepmerge: 4.3.1
+ magic-string: 0.30.21
+ obug: 2.1.1
+ svelte: 5.53.5
+ vite: 7.3.1(@types/node@24.10.15)
+ vitefu: 1.1.2(vite@7.3.1(@types/node@24.10.15))
+
'@tauri-apps/api@2.10.1': {}
'@tauri-apps/cli-darwin-arm64@2.10.0':
@@ -715,36 +899,66 @@ snapshots:
dependencies:
'@tauri-apps/api': 2.10.1
+ '@tsconfig/svelte@5.0.8': {}
+
'@types/estree@1.0.8': {}
- esbuild@0.25.12:
+ '@types/node@24.10.15':
+ dependencies:
+ undici-types: 7.16.0
+
+ '@types/trusted-types@2.0.7': {}
+
+ acorn@8.16.0: {}
+
+ aria-query@5.3.1: {}
+
+ axobject-query@4.1.0: {}
+
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
+ clsx@2.1.1: {}
+
+ deepmerge@4.3.1: {}
+
+ devalue@5.6.3: {}
+
+ esbuild@0.27.3:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.12
- '@esbuild/android-arm': 0.25.12
- '@esbuild/android-arm64': 0.25.12
- '@esbuild/android-x64': 0.25.12
- '@esbuild/darwin-arm64': 0.25.12
- '@esbuild/darwin-x64': 0.25.12
- '@esbuild/freebsd-arm64': 0.25.12
- '@esbuild/freebsd-x64': 0.25.12
- '@esbuild/linux-arm': 0.25.12
- '@esbuild/linux-arm64': 0.25.12
- '@esbuild/linux-ia32': 0.25.12
- '@esbuild/linux-loong64': 0.25.12
- '@esbuild/linux-mips64el': 0.25.12
- '@esbuild/linux-ppc64': 0.25.12
- '@esbuild/linux-riscv64': 0.25.12
- '@esbuild/linux-s390x': 0.25.12
- '@esbuild/linux-x64': 0.25.12
- '@esbuild/netbsd-arm64': 0.25.12
- '@esbuild/netbsd-x64': 0.25.12
- '@esbuild/openbsd-arm64': 0.25.12
- '@esbuild/openbsd-x64': 0.25.12
- '@esbuild/openharmony-arm64': 0.25.12
- '@esbuild/sunos-x64': 0.25.12
- '@esbuild/win32-arm64': 0.25.12
- '@esbuild/win32-ia32': 0.25.12
- '@esbuild/win32-x64': 0.25.12
+ '@esbuild/aix-ppc64': 0.27.3
+ '@esbuild/android-arm': 0.27.3
+ '@esbuild/android-arm64': 0.27.3
+ '@esbuild/android-x64': 0.27.3
+ '@esbuild/darwin-arm64': 0.27.3
+ '@esbuild/darwin-x64': 0.27.3
+ '@esbuild/freebsd-arm64': 0.27.3
+ '@esbuild/freebsd-x64': 0.27.3
+ '@esbuild/linux-arm': 0.27.3
+ '@esbuild/linux-arm64': 0.27.3
+ '@esbuild/linux-ia32': 0.27.3
+ '@esbuild/linux-loong64': 0.27.3
+ '@esbuild/linux-mips64el': 0.27.3
+ '@esbuild/linux-ppc64': 0.27.3
+ '@esbuild/linux-riscv64': 0.27.3
+ '@esbuild/linux-s390x': 0.27.3
+ '@esbuild/linux-x64': 0.27.3
+ '@esbuild/netbsd-arm64': 0.27.3
+ '@esbuild/netbsd-x64': 0.27.3
+ '@esbuild/openbsd-arm64': 0.27.3
+ '@esbuild/openbsd-x64': 0.27.3
+ '@esbuild/openharmony-arm64': 0.27.3
+ '@esbuild/sunos-x64': 0.27.3
+ '@esbuild/win32-arm64': 0.27.3
+ '@esbuild/win32-ia32': 0.27.3
+ '@esbuild/win32-x64': 0.27.3
+
+ esm-env@1.2.2: {}
+
+ esrap@2.2.3:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
@@ -753,8 +967,22 @@ snapshots:
fsevents@2.3.3:
optional: true
+ is-reference@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ locate-character@3.0.0: {}
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ mri@1.2.0: {}
+
nanoid@3.3.11: {}
+ obug@2.1.1: {}
+
picocolors@1.1.1: {}
picomatch@4.0.3: {}
@@ -765,6 +993,8 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ readdirp@4.1.2: {}
+
rollup@4.58.0:
dependencies:
'@types/estree': 1.0.8
@@ -796,22 +1026,66 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.58.0
fsevents: 2.3.3
+ sade@1.8.1:
+ dependencies:
+ mri: 1.2.0
+
source-map-js@1.2.1: {}
+ svelte-check@4.4.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ chokidar: 4.0.3
+ fdir: 6.5.0(picomatch@4.0.3)
+ picocolors: 1.1.1
+ sade: 1.8.1
+ svelte: 5.53.5
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - picomatch
+
+ svelte@5.53.5:
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0)
+ '@types/estree': 1.0.8
+ '@types/trusted-types': 2.0.7
+ acorn: 8.16.0
+ aria-query: 5.3.1
+ axobject-query: 4.1.0
+ clsx: 2.1.1
+ devalue: 5.6.3
+ esm-env: 1.2.2
+ esrap: 2.2.3
+ is-reference: 3.0.3
+ locate-character: 3.0.0
+ magic-string: 0.30.21
+ zimmerframe: 1.1.4
+
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
- typescript@5.6.3: {}
+ typescript@5.9.3: {}
- vite@6.4.1:
+ undici-types@7.16.0: {}
+
+ vite@7.3.1(@types/node@24.10.15):
dependencies:
- esbuild: 0.25.12
+ esbuild: 0.27.3
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
rollup: 4.58.0
tinyglobby: 0.2.15
optionalDependencies:
+ '@types/node': 24.10.15
fsevents: 2.3.3
+
+ vitefu@1.1.2(vite@7.3.1(@types/node@24.10.15)):
+ optionalDependencies:
+ vite: 7.3.1(@types/node@24.10.15)
+
+ zimmerframe@1.1.4: {}
diff --git a/public/vite.svg b/public/vite.svg
new file mode 100644
index 0000000..e7b8dfb
--- /dev/null
+++ b/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/App.svelte b/src/App.svelte
new file mode 100644
index 0000000..f75b68a
--- /dev/null
+++ b/src/App.svelte
@@ -0,0 +1,47 @@
+
+
+
+
+ Vite + Svelte
+
+
+
+
+
+
+ Check out SvelteKit, the official Svelte app framework powered by Vite!
+
+
+
+ Click on the Vite and Svelte logos to learn more
+
+
+
+
diff --git a/src/app.css b/src/app.css
new file mode 100644
index 0000000..61ba367
--- /dev/null
+++ b/src/app.css
@@ -0,0 +1,79 @@
+:root {
+ font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+ font-weight: 400;
+
+ color-scheme: light dark;
+ color: rgba(255, 255, 255, 0.87);
+ background-color: #242424;
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+a {
+ font-weight: 500;
+ color: #646cff;
+ text-decoration: inherit;
+}
+a:hover {
+ color: #535bf2;
+}
+
+body {
+ margin: 0;
+ display: flex;
+ place-items: center;
+ min-width: 320px;
+ min-height: 100vh;
+}
+
+h1 {
+ font-size: 3.2em;
+ line-height: 1.1;
+}
+
+.card {
+ padding: 2em;
+}
+
+#app {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 2rem;
+ text-align: center;
+}
+
+button {
+ border-radius: 8px;
+ border: 1px solid transparent;
+ padding: 0.6em 1.2em;
+ font-size: 1em;
+ font-weight: 500;
+ font-family: inherit;
+ background-color: #1a1a1a;
+ cursor: pointer;
+ transition: border-color 0.25s;
+}
+button:hover {
+ border-color: #646cff;
+}
+button:focus,
+button:focus-visible {
+ outline: 4px auto -webkit-focus-ring-color;
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+ a:hover {
+ color: #747bff;
+ }
+ button {
+ background-color: #f9f9f9;
+ }
+}
diff --git a/src/app/dom.ts b/src/app/dom.ts
deleted file mode 100644
index 7dbd002..0000000
--- a/src/app/dom.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export function getMainContainer(): HTMLElement | null {
- return document.querySelector(".container");
-}
-
-export function getDiv(id: string): HTMLElement | null {
- return document.getElementById(id);
-}
diff --git a/src/app/init.ts b/src/app/init.ts
deleted file mode 100644
index 27b537a..0000000
--- a/src/app/init.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import {initCountdownController} from "../features/countdown/controller";
-import {getDiv} from "./dom";
-
-export async function initApp(): Promise {
- const countdownContainer = getDiv("countdown-container");
- if (countdownContainer) {
- await initCountdownController(countdownContainer);
- }
-}
diff --git a/src/assets/svelte.svg b/src/assets/svelte.svg
new file mode 100644
index 0000000..c5e0848
--- /dev/null
+++ b/src/assets/svelte.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/features/countdown/api.ts b/src/features/countdown/api.ts
deleted file mode 100644
index 96c3cb2..0000000
--- a/src/features/countdown/api.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import {invokeCommand} from "../../shared/tauri/invoke";
-import {CountdownCommand, CountdownSnapshot, CountdownState, Duration} from "./types";
-import {millisToDuration} from "./helper.ts";
-
-type CountdownSnapshotDto = {
- id: number;
- label: string;
- duration: number;
- state: CountdownState;
- start_epoch_ms: number | null;
- target_epoch_ms: number | null;
-};
-
-export async function fetchCountdownSnapshot(): Promise {
- let temp = await invokeCommand("countdown_snapshot");
- const duration: Duration = millisToDuration(temp.duration);
- return {
- id: temp.id,
- label: temp.label,
- duration: duration,
- state: temp.state,
- start_epoch: temp.start_epoch_ms !== null ? new Date(temp.start_epoch_ms) : null,
- target_epoch: temp.target_epoch_ms !== null ? new Date(temp.target_epoch_ms) : null,
- };
-}
-
-async function invokeCountdownCommand(command: CountdownCommand): Promise {
- await invokeCommand(command);
-}
-
-export async function startCountdown(): Promise {
- await invokeCountdownCommand("countdown_start");
-}
-
-export async function pauseCountdown(): Promise {
- await invokeCountdownCommand("countdown_pause");
-}
-
-export async function resumeCountdown(): Promise {
- await invokeCountdownCommand("countdown_resume");
-}
-
-export async function resetCountdown(): Promise {
- await invokeCountdownCommand("countdown_reset");
-}
diff --git a/src/features/countdown/controller.ts b/src/features/countdown/controller.ts
deleted file mode 100644
index 025d1d9..0000000
--- a/src/features/countdown/controller.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import {
- fetchCountdownSnapshot,
- pauseCountdown,
- resetCountdown,
- resumeCountdown,
- startCountdown,
-} from "./api";
-import { createCountdownView } from "./view";
-
-export async function initCountdownController(container: HTMLElement): Promise {
- const view = createCountdownView(container);
-
- const refreshSnapshot = async (): Promise => {
- try {
- const snapshot = await fetchCountdownSnapshot();
- view.setSnapshot(snapshot);
- } catch (error) {
- view.setError(`snapshot error: ${String(error)}`);
- }
- };
-
- const runAction = async (action: () => Promise): Promise => {
- try {
- await action();
- await refreshSnapshot();
- } catch (error) {
- view.setError(`command error: ${String(error)}`);
- }
- };
-
- view.onStart(() => {
- void runAction(startCountdown);
- });
- view.onPause(() => {
- void runAction(pauseCountdown);
- });
- view.onResume(() => {
- void runAction(resumeCountdown);
- });
- view.onReset(() => {
- void runAction(resetCountdown);
- });
- view.onRefresh(() => {
- void refreshSnapshot();
- });
-
- await refreshSnapshot();
-}
diff --git a/src/features/countdown/helper.ts b/src/features/countdown/helper.ts
deleted file mode 100644
index 317e3ab..0000000
--- a/src/features/countdown/helper.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {Duration} from "./types.ts";
-
-export function millisToDuration(millis: number): Duration {
- return {
- hours: Math.floor(millis / 3600000),
- minutes: Math.floor((millis % 3600000) / 60000),
- seconds: Math.floor((millis % 60000) / 1000),
- millis: millis % 1000,
- }
-}
-
-export function formatDuration(duration: Duration): string {
- return `${duration.hours.toString().padStart(2, '0')}:${duration.minutes.toString().padStart(2, '0')}:${duration.seconds.toString().padStart(2, '0')}.${duration.millis.toString().padStart(3, '0')}`;
-}
\ No newline at end of file
diff --git a/src/features/countdown/types.ts b/src/features/countdown/types.ts
deleted file mode 100644
index 9d92a47..0000000
--- a/src/features/countdown/types.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-export type CountdownState = "Idle" | "Running" | "Paused" | "Finished";
-
-export type Duration = {
- hours: number;
- minutes: number;
- seconds: number;
- millis: number;
-}
-
-export type CountdownSnapshot = {
- id: number;
- label: string;
- duration: Duration;
- state: CountdownState;
- start_epoch: Date | null;
- target_epoch: Date | null;
-}
-
-export type CountdownCommand =
- | "countdown_start"
- | "countdown_pause"
- | "countdown_resume"
- | "countdown_reset";
diff --git a/src/features/countdown/view.ts b/src/features/countdown/view.ts
deleted file mode 100644
index 7dff44e..0000000
--- a/src/features/countdown/view.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import {formatDuration} from "./helper.ts";
-import {CountdownSnapshot} from "./types.ts";
-
-export type CountdownView = {
- onStart: (handler: () => void) => void;
- onResume: (handler: () => void) => void;
- onPause: (handler: () => void) => void;
- onReset: (handler: () => void) => void;
- onRefresh: (handler: () => void) => void;
- setSnapshot: (snapshot: CountdownSnapshot) => void;
- setError: (message: string) => void;
-};
-
-function makeButton(label: string): HTMLButtonElement {
- const button = document.createElement("button");
- button.id = "cd-btn-" + label.toLowerCase();
- button.className = "countdown-btn"
- button.type = "button";
- button.textContent = label;
- return button;
-}
-
-export function createCountdownView(container: HTMLElement): CountdownView {
- const panel = document.createElement("section");
- panel.className = "countdown-panel";
-
- const title = document.createElement("h2");
- title.textContent = "Countdown Controls";
-
- const actions = document.createElement("div");
- actions.className = "countdown-actions";
-
- const startButton = makeButton("Start");
- const resumeButton = makeButton("Resume");
- const pauseButton = makeButton("Pause");
- const resetButton = makeButton("Reset");
- const refreshButton = makeButton("Refresh");
-
- actions.append(startButton, resumeButton, pauseButton, resetButton, refreshButton);
-
- const summary = document.createElement("p");
- summary.className = "countdown-summary";
- summary.textContent = "Waiting for snapshot...";
-
- const error = document.createElement("p");
- error.className = "countdown-error";
-
- const snapshot = document.createElement("pre");
- snapshot.className = "countdown-snapshot";
-
- panel.append(title, actions, summary, error, snapshot);
- container.appendChild(panel);
-
- return {
- onStart(handler) {
- startButton.addEventListener("click", handler);
- },
- onResume(handler) {
- resumeButton.addEventListener("click", handler);
- },
- onPause(handler) {
- pauseButton.addEventListener("click", handler);
- },
- onReset(handler) {
- resetButton.addEventListener("click", handler);
- },
- onRefresh(handler) {
- refreshButton.addEventListener("click", handler);
- },
- setSnapshot(value) {
- error.textContent = "";
- summary.textContent = `State: ${value.state} | Remaining: ${formatDuration(value.duration)}`;
- snapshot.textContent = JSON.stringify(value, null, 2);
- },
- setError(message) {
- error.textContent = message;
- },
- };
-}
diff --git a/src/lib/Counter.svelte b/src/lib/Counter.svelte
new file mode 100644
index 0000000..37d75ce
--- /dev/null
+++ b/src/lib/Counter.svelte
@@ -0,0 +1,10 @@
+
+
+
diff --git a/src/main.ts b/src/main.ts
index f321e1a..664a057 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,6 +1,9 @@
-import "./styles.css";
-import { initApp } from "./app/init";
+import { mount } from 'svelte'
+import './app.css'
+import App from './App.svelte'
-window.addEventListener("DOMContentLoaded", () => {
- void initApp();
-});
+const app = mount(App, {
+ target: document.getElementById('app')!,
+})
+
+export default app
diff --git a/src/shared/tauri/invoke.ts b/src/shared/tauri/invoke.ts
deleted file mode 100644
index 980ffab..0000000
--- a/src/shared/tauri/invoke.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { invoke } from "@tauri-apps/api/core";
-
-export async function invokeCommand(
- command: string,
- payload?: Record
-): Promise {
- return invoke(command, payload);
-}
diff --git a/src/styles.css b/src/styles.css
deleted file mode 100644
index e17ad14..0000000
--- a/src/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@import "@picocss/pico/css/pico.classless.jade.min.css";
-@import "./styles/base.css";
-@import "./styles/countdown.css";
\ No newline at end of file
diff --git a/src/styles/base.css b/src/styles/base.css
deleted file mode 100644
index 4fb733e..0000000
--- a/src/styles/base.css
+++ /dev/null
@@ -1,16 +0,0 @@
-:root {
- --pico-border-radius: 0.5rem;
- --pico-typography-spacing-vertical: 1.5rem;
- --pico-form-element-spacing-vertical: 1rem;
- --pico-form-element-spacing-horizontal: 1.25rem;
-}
-
-h1 {
- --pico-font-family: Pacifico, cursive;
- --pico-font-weight: 400;
- --pico-typography-spacing-vertical: 0.5rem;
-}
-
-button {
- --pico-font-weight: 700;
-}
\ No newline at end of file
diff --git a/src/styles/countdown.css b/src/styles/countdown.css
deleted file mode 100644
index 5153b8f..0000000
--- a/src/styles/countdown.css
+++ /dev/null
@@ -1,10 +0,0 @@
-.countdown-actions {
- display: flex;
- gap: 0.5rem;
-}
-
-.countdown-error {
- min-height: 1.25rem;
- color: #b00020;
- margin: 0.25rem 0;
-}
diff --git a/svelte.config.js b/svelte.config.js
new file mode 100644
index 0000000..96b3455
--- /dev/null
+++ b/svelte.config.js
@@ -0,0 +1,8 @@
+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
+
+/** @type {import("@sveltejs/vite-plugin-svelte").SvelteConfig} */
+export default {
+ // Consult https://svelte.dev/docs#compile-time-svelte-preprocess
+ // for more information about preprocessors
+ preprocess: vitePreprocess(),
+}
diff --git a/tsconfig.app.json b/tsconfig.app.json
new file mode 100644
index 0000000..31c18cf
--- /dev/null
+++ b/tsconfig.app.json
@@ -0,0 +1,21 @@
+{
+ "extends": "@tsconfig/svelte/tsconfig.json",
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "target": "ES2022",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "types": ["svelte", "vite/client"],
+ "noEmit": true,
+ /**
+ * Typecheck JS in `.svelte` and `.js` files by default.
+ * Disable checkJs if you'd like to use dynamic types in JS.
+ * Note that setting allowJs false does not prevent the use
+ * of JS in `.svelte` files.
+ */
+ "allowJs": true,
+ "checkJs": true,
+ "moduleDetection": "force"
+ },
+ "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"]
+}
diff --git a/tsconfig.json b/tsconfig.json
index 75abdef..1ffef60 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,23 +1,7 @@
{
- "compilerOptions": {
- "target": "ES2020",
- "useDefineForClassFields": true,
- "module": "ESNext",
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
- "skipLibCheck": true,
-
- /* Bundler mode */
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
- "resolveJsonModule": true,
- "isolatedModules": true,
- "noEmit": true,
-
- /* Linting */
- "strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true
- },
- "include": ["src"]
+ "files": [],
+ "references": [
+ { "path": "./tsconfig.app.json" },
+ { "path": "./tsconfig.node.json" }
+ ]
}
diff --git a/tsconfig.node.json b/tsconfig.node.json
new file mode 100644
index 0000000..8a67f62
--- /dev/null
+++ b/tsconfig.node.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+ "target": "ES2023",
+ "lib": ["ES2023"],
+ "module": "ESNext",
+ "types": ["node"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "erasableSyntaxOnly": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/vite.config.ts b/vite.config.ts
index fc3fe85..d3a444a 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,11 +1,13 @@
import { defineConfig } from "vite";
+import { svelte } from '@sveltejs/vite-plugin-svelte';
-// @ts-expect-error process is a nodejs global
const host = process.env.TAURI_DEV_HOST;
// https://vite.dev/config/
export default defineConfig(async () => ({
+ "plugins": [svelte()],
+
// Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
//
// 1. prevent Vite from obscuring rust errors
@@ -17,10 +19,10 @@ export default defineConfig(async () => ({
host: host || false,
hmr: host
? {
- protocol: "ws",
- host,
- port: 1421,
- }
+ protocol: "ws",
+ host,
+ port: 1421,
+ }
: undefined,
watch: {
// 3. tell Vite to ignore watching `src-tauri`