diff --git a/.gitignore b/.gitignore
index e35aa33..b2b5556 100644
--- a/.gitignore
+++ b/.gitignore
@@ -228,6 +228,7 @@ dist
# website: https://kit.svelte.dev/
.svelte-kit/
+test-results/
package
public/
\ No newline at end of file
diff --git a/.husky/pre-push b/.husky/pre-push
index 327ffd0..d39ef50 100644
--- a/.husky/pre-push
+++ b/.husky/pre-push
@@ -1,2 +1,3 @@
pnpm lint
pnpm build
+pnpm test
diff --git a/.prettierrc b/.prettierrc
index 2053683..f2dc2c2 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -4,7 +4,7 @@
"importOrderSeparation": true,
"importOrderSortSpecifiers": true,
"importOrderParserPlugins": ["typescript", "decorators-legacy"],
- "importOrder": ["^~/(.*)$", "^[./]"],
+ "importOrder": ["^$app/(.*)$", "^lib/(.*)$", "^~/(.*)$", "^[./]"],
"useTabs": false,
"singleQuote": true,
"trailingComma": "all",
diff --git a/e2e/demo.test.ts b/e2e/demo.test.ts
new file mode 100644
index 0000000..0ab7ad2
--- /dev/null
+++ b/e2e/demo.test.ts
@@ -0,0 +1,6 @@
+import { expect, test } from '@playwright/test';
+
+test('home page has expected span', async ({ page }) => {
+ await page.goto('/');
+ await expect(page.locator('span')).toBeVisible();
+});
diff --git a/eslint.config.js b/eslint.config.js
index d939609..b0700d1 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -9,13 +9,13 @@ import svelteConfig from './svelte.config.js';
export default [
{ files: ['src/**/*.{ts}'] },
{ languageOptions: { globals: globals.browser } },
- { ignores: ['commitlint.config.cjs'] },
pluginJs.configs.recommended,
...tseslint.configs.recommended,
...tseslint.configs.strict,
eslintConfigPrettier,
...svelte.configs.recommended,
+ ...svelte.configs.prettier,
{
files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'],
diff --git a/index.html b/index.html
deleted file mode 100644
index 1a1cff7..0000000
--- a/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
- Vite + Svelte + TS
-
-
-
-
-
-
diff --git a/messages/en.json b/messages/en.json
new file mode 100644
index 0000000..97efb22
--- /dev/null
+++ b/messages/en.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "https://inlang.com/schema/inlang-message-format",
+ "hello_world": "Hello, {name} from en!"
+}
diff --git a/messages/fr.json b/messages/fr.json
new file mode 100644
index 0000000..45f5fef
--- /dev/null
+++ b/messages/fr.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "https://inlang.com/schema/inlang-message-format",
+ "hello_world": "Hello, {name} from fr!"
+}
diff --git a/package.json b/package.json
index 2a1535f..8c127c6 100644
--- a/package.json
+++ b/package.json
@@ -38,17 +38,19 @@
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
- "check": "svelte-check --tsconfig tsconfig.app.json && tsc -p tsconfig.node.json",
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"lint": "prettier --check . && eslint --format=pretty src",
"format": "prettier --write . && eslint --fix --format=pretty src",
+ "test": "pnpm run test:unit --run",
+ "test:unit": "vitest",
+ "test:e2e": "playwright test",
"changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r . --include-path '.'",
"release": "cliff-jumper",
"prepare": "husky"
},
- "dependencies": {
- "monaco-editor": "0.55.1"
- },
"devDependencies": {
+ "@alexanderniebuhr/prettier-plugin-unocss": "^0.0.4",
"@commitlint/cli": "^19.8.0",
"@commitlint/config-conventional": "^19.8.0",
"@eslint/js": "^9.23.0",
@@ -56,14 +58,20 @@
"@iconify-json/ic": "^1.2.4",
"@iconify-json/material-icon-theme": "^1.2.27",
"@iconify-json/solar": "^1.2.4",
+ "@inlang/paraglide-js": "^2.8.0",
"@nanoforge-dev/actions": "^1.0.2",
+ "@playwright/test": "^1.57.0",
+ "@sveltejs/adapter-auto": "^7.0.0",
+ "@sveltejs/kit": "^2.49.4",
"@sveltejs/vite-plugin-svelte": "^5.0.3",
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
"@tsconfig/svelte": "^5.0.4",
+ "@unocss/extractor-svelte": "^66.5.12",
"@unocss/preset-icons": "^66.5.1",
"@unocss/preset-web-fonts": "66.1.0-beta.6",
"@unocss/preset-wind4": "^66.5.1",
"@unocss/svelte-scoped": "66.1.0-beta.6",
+ "@vitest/browser-playwright": "^4.0.17",
"eslint": "^9.23.0",
"eslint-config-prettier": "^10.1.1",
"eslint-formatter-pretty": "^7.0.0",
@@ -75,16 +83,19 @@
"globals": "^16.0.0",
"husky": "^9.1.7",
"lint-staged": "^15.5.0",
+ "monaco-editor": "^0.55.1",
+ "playwright": "^1.57.0",
"prettier": "^3.5.3",
"prettier-plugin-svelte": "^3.3.3",
"svelte": "^5.20.2",
"svelte-check": "^4.1.4",
- "svelte-routing": "^2.13.0",
"svelte-sonner": "^1.0.5",
"typescript": "~5.7.2",
"typescript-eslint": "^8.27.0",
"unocss": "66.1.0-beta.6",
- "vite": "6.3.4"
+ "vite": "6.3.4",
+ "vitest": "^4.0.17",
+ "vitest-browser-svelte": "^2.0.1"
},
"packageManager": "pnpm@10.6.2",
"engines": {
diff --git a/playwright.config.ts b/playwright.config.ts
new file mode 100644
index 0000000..e1a161a
--- /dev/null
+++ b/playwright.config.ts
@@ -0,0 +1,6 @@
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ webServer: { command: 'npm run build && npm run preview', port: 4173 },
+ testDir: 'e2e',
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 432470e..be0f504 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,11 +7,10 @@ settings:
importers:
.:
- dependencies:
- monaco-editor:
- specifier: 0.55.1
- version: 0.55.1
devDependencies:
+ '@alexanderniebuhr/prettier-plugin-unocss':
+ specifier: ^0.0.4
+ version: 0.0.4
'@commitlint/cli':
specifier: ^19.8.0
version: 19.8.1(@types/node@25.0.5)(typescript@5.7.3)
@@ -33,9 +32,21 @@ importers:
'@iconify-json/solar':
specifier: ^1.2.4
version: 1.2.5
+ '@inlang/paraglide-js':
+ specifier: ^2.8.0
+ version: 2.8.0
'@nanoforge-dev/actions':
specifier: ^1.0.2
version: 1.0.2
+ '@playwright/test':
+ specifier: ^1.57.0
+ version: 1.57.0
+ '@sveltejs/adapter-auto':
+ specifier: ^7.0.0
+ version: 7.0.0(@sveltejs/kit@2.49.4(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.7.3)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)))
+ '@sveltejs/kit':
+ specifier: ^2.49.4
+ version: 2.49.4(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.7.3)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))
'@sveltejs/vite-plugin-svelte':
specifier: ^5.0.3
version: 5.1.1(svelte@5.46.1)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))
@@ -45,6 +56,9 @@ importers:
'@tsconfig/svelte':
specifier: ^5.0.4
version: 5.0.6
+ '@unocss/extractor-svelte':
+ specifier: ^66.5.12
+ version: 66.5.12
'@unocss/preset-icons':
specifier: ^66.5.1
version: 66.5.12
@@ -57,6 +71,9 @@ importers:
'@unocss/svelte-scoped':
specifier: 66.1.0-beta.6
version: 66.1.0-beta.6
+ '@vitest/browser-playwright':
+ specifier: ^4.0.17
+ version: 4.0.17(playwright@1.57.0)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))(vitest@4.0.17)
eslint:
specifier: ^9.23.0
version: 9.39.2(jiti@2.6.1)
@@ -90,6 +107,12 @@ importers:
lint-staged:
specifier: ^15.5.0
version: 15.5.2
+ monaco-editor:
+ specifier: ^0.55.1
+ version: 0.55.1
+ playwright:
+ specifier: ^1.57.0
+ version: 1.57.0
prettier:
specifier: ^3.5.3
version: 3.7.4
@@ -102,9 +125,6 @@ importers:
svelte-check:
specifier: ^4.1.4
version: 4.3.5(picomatch@4.0.3)(svelte@5.46.1)(typescript@5.7.3)
- svelte-routing:
- specifier: ^2.13.0
- version: 2.13.0
svelte-sonner:
specifier: ^1.0.5
version: 1.0.7(svelte@5.46.1)
@@ -120,6 +140,12 @@ importers:
vite:
specifier: 6.3.4
version: 6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)
+ vitest:
+ specifier: ^4.0.17
+ version: 4.0.17(@types/node@25.0.5)(@vitest/browser-playwright@4.0.17)(jiti@2.6.1)(yaml@2.8.2)
+ vitest-browser-svelte:
+ specifier: ^2.0.1
+ version: 2.0.1(svelte@5.46.1)(vitest@4.0.17)
packages:
@@ -141,6 +167,9 @@ packages:
'@actions/io@2.0.0':
resolution: {integrity: sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg==}
+ '@alexanderniebuhr/prettier-plugin-unocss@0.0.4':
+ resolution: {integrity: sha512-uuuNFjp+WNGsP7V5C7F7uot4a8imccsRf9DYXuQquzXzxLEfzWfqYy/cZUNUk4+fOpLbXGlPUxrJvPAcPau0Ow==}
+
'@ampproject/remapping@2.3.0':
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
@@ -528,6 +557,17 @@ packages:
'@iconify/utils@3.1.0':
resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==}
+ '@inlang/paraglide-js@2.8.0':
+ resolution: {integrity: sha512-ataaSmV53zz+tIr+KJLdC3tTB1uikS79hvtLlZk2ikbGRB/kcyQeg+lsqzjsXCAvy0/O28ucCRjxbHsTzOVQVg==}
+ hasBin: true
+
+ '@inlang/recommend-sherlock@0.2.1':
+ resolution: {integrity: sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg==}
+
+ '@inlang/sdk@2.6.0':
+ resolution: {integrity: sha512-f4iVHVXyzOi0CXlXSAT7XPrReLBaVXy/po/qrOPf2OHh+hUwyD1bDx2EYC5KgrZ16z3ylWfqWVuc7o4l7/tuUQ==}
+ engines: {node: '>=18.0.0'}
+
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
@@ -544,6 +584,13 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@lix-js/sdk@0.4.7':
+ resolution: {integrity: sha512-pRbW+joG12L0ULfMiWYosIW0plmW4AsUdiPCp+Z8rAsElJ+wJ6in58zhD3UwUcd4BNcpldEGjg6PdA7e0RgsDQ==}
+ engines: {node: '>=18'}
+
+ '@lix-js/server-protocol-schema@0.1.1':
+ resolution: {integrity: sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ==}
+
'@nanoforge-dev/actions@1.0.2':
resolution: {integrity: sha512-LLlqow0omtoEETYejCLEAiPoLdxTYhonezUxvZvORbdb7or+DUjfIYFgZAxfcX9TNt+oE6wXPrAcOlOauvWkLg==}
engines: {node: 24.11.0}
@@ -636,6 +683,11 @@ packages:
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ '@playwright/test@1.57.0':
+ resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
@@ -799,15 +851,46 @@ packages:
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
+ '@sinclair/typebox@0.31.28':
+ resolution: {integrity: sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ==}
+
'@sindresorhus/merge-streams@4.0.0':
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
+ '@sqlite.org/sqlite-wasm@3.48.0-build4':
+ resolution: {integrity: sha512-hI6twvUkzOmyGZhQMza1gpfqErZxXRw6JEsiVjUbo7tFanVD+8Oil0Ih3l2nGzHdxPI41zFmfUQG7GHqhciKZQ==}
+ hasBin: true
+
+ '@standard-schema/spec@1.1.0':
+ resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+
'@sveltejs/acorn-typescript@1.0.8':
resolution: {integrity: sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==}
peerDependencies:
acorn: ^8.9.0
+ '@sveltejs/adapter-auto@7.0.0':
+ resolution: {integrity: sha512-ImDWaErTOCkRS4Gt+5gZuymKFBobnhChXUZ9lhUZLahUgvA4OOvRzi3sahzYgbxGj5nkA6OV0GAW378+dl/gyw==}
+ peerDependencies:
+ '@sveltejs/kit': ^2.0.0
+
+ '@sveltejs/kit@2.49.4':
+ resolution: {integrity: sha512-JFtOqDoU0DI/+QSG8qnq5bKcehVb3tCHhOG4amsSYth5/KgO4EkJvi42xSAiyKmXAAULW1/Zdb6lkgGEgSxdZg==}
+ engines: {node: '>=18.13'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.0.0
+ '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ typescript: ^5.3.3
+ vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ typescript:
+ optional: true
+
'@sveltejs/vite-plugin-svelte-inspector@4.0.1':
resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22}
@@ -867,9 +950,18 @@ packages:
'@tsconfig/svelte@5.0.6':
resolution: {integrity: sha512-yGxYL0I9eETH1/DR9qVJey4DAsCdeau4a9wYPKuXfEhm8lFO8wg+LLYJjIpAm6Fw7HSlhepPhYPDop75485yWQ==}
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
'@types/conventional-commits-parser@5.0.2':
resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==}
+ '@types/cookie@0.6.0':
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
'@types/eslint@9.6.1':
resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
@@ -967,6 +1059,9 @@ packages:
resolution: {integrity: sha512-jLAxHSgMCEhIjCwOwfENtFM3gevU4QDQeaG4VVEYGFJ/oj27JJrl/j6HlUBdhFiR0Q7yf6QFCXlKTP/+put0/Q==}
engines: {node: '>=14'}
+ '@unocss/core@0.25.1':
+ resolution: {integrity: sha512-YYX40KA2rhsm6aTKTGpE0bi9E7RoAcuqMo/L+f6DmBSwtTXdflckoa903rxgOa6HOLH9fXgOJP9jHt3O/5ysPA==}
+
'@unocss/core@66.1.0-beta.6':
resolution: {integrity: sha512-TQLxpBZPl6m4HhS6/FMr0Vbn22tGWgbGPyfJyjTSYY/LTug42aIUPnTQnqFSRwGiUnBfp3+oAhG/t/lZ6U74tw==}
@@ -979,6 +1074,9 @@ packages:
'@unocss/extractor-arbitrary-variants@66.5.12':
resolution: {integrity: sha512-UGzHhLaaSu/YT0rmXtdoE1ttLvwWsI/RVTwNNy3QnL/y4Hvmo7T1MtG5Ri5btfqfDWPzrQLQiTvI8loGCD8lFQ==}
+ '@unocss/extractor-svelte@66.5.12':
+ resolution: {integrity: sha512-BXCTtmdr8Ydj+NKwk5pHOyq/duqSKFXbp39uAf7NuM9GykY6vAZ3wnzt92yyOzo2mOPeNTI2VB2Opz2hT672QQ==}
+
'@unocss/inspector@66.1.0-beta.6':
resolution: {integrity: sha512-YjK017dGMtN8Q067d9n9aCKFXGB8jD13PomKmKOWs3YfmPQE1qQjqQUXH4Zf/jhGMvaB72BHevqctLRHguHfww==}
@@ -997,6 +1095,9 @@ packages:
'@unocss/preset-icons@66.5.12':
resolution: {integrity: sha512-3bgkN8tTrcOSGuBcJSDrtDfBt7WU3chFjfw7zo4ign+Z0L6qANB2O62AOdOMJOxKjlppJ6a8AceHthhPZP2PDA==}
+ '@unocss/preset-mini@0.25.1':
+ resolution: {integrity: sha512-NBfa2/t0TIAT//L8OVskDDQJ3OREjLwDzWMBNO86rvM0VPCIBvCmkKuFR3zxQcWK+aegISeScJA9Zcdk3qJjHA==}
+
'@unocss/preset-mini@66.1.0-beta.6':
resolution: {integrity: sha512-MoF32nio5jzKi40VOeOU4k2uZvYUm2GKIxTRZ8C8mb7bFFphoMQD0/Pfr9oWpNC7jl7msuKt8i4xUknK5GAVDQ==}
@@ -1006,6 +1107,9 @@ packages:
'@unocss/preset-typography@66.1.0-beta.6':
resolution: {integrity: sha512-M6o4oXUMXo6RmclqsnUCXYJCW9cBJYYZcl4M2ofejNkCaqplAwWvc7X7TPvUjcURfwHf+CiXx42DXB0k+FCmlA==}
+ '@unocss/preset-uno@0.25.1':
+ resolution: {integrity: sha512-e5lvCF5GD52nD/7l/k4TJedw5AgsVGTs/6rKxE9DP0G5oGszKjx+oHLzoYvCP2aQAcallnZ/CxXTbOvqCQCVxQ==}
+
'@unocss/preset-uno@66.1.0-beta.6':
resolution: {integrity: sha512-zFvQ8sxSGcHoZBkMNngQIdQTFJgoNx5UosydUynLMzs86NFkwd/BAcS2cZBy+buLiuqV1oM2uSyxjLeAqury8g==}
@@ -1021,6 +1125,9 @@ packages:
'@unocss/preset-wind4@66.5.12':
resolution: {integrity: sha512-JVddnLJ6NOk7hOXA0Y8SYbQEu+JpURbE9o/IHVCkRClVRkE81b9KgJf7WQa/8KIr1O20wRRFdt9QRH4m3pZJ/A==}
+ '@unocss/preset-wind@0.25.1':
+ resolution: {integrity: sha512-y5gkCCNiGsonqI8OOmtMVXgEMjPDtr+ihxnS3oDptYR4CcBE1cREhLgZocChHHQNEMN9Qx2GsoMN9l6RsoExiA==}
+
'@unocss/preset-wind@66.1.0-beta.6':
resolution: {integrity: sha512-1H1YH5OQTGG3mFo54BZELkKWO4iE0UgH4W2+RdnWHEKYIpXImk8JtAkiO5iK0gJafoSQjx592fZ70krQKmNamQ==}
@@ -1055,6 +1162,46 @@ packages:
peerDependencies:
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0
+ '@vitest/browser-playwright@4.0.17':
+ resolution: {integrity: sha512-CE9nlzslHX6Qz//MVrjpulTC9IgtXTbJ+q7Rx1HD+IeSOWv4NHIRNHPA6dB4x01d9paEqt+TvoqZfmgq40DxEQ==}
+ peerDependencies:
+ playwright: '*'
+ vitest: 4.0.17
+
+ '@vitest/browser@4.0.17':
+ resolution: {integrity: sha512-cgf2JZk2fv5or3efmOrRJe1V9Md89BPgz4ntzbf84yAb+z2hW6niaGFinl9aFzPZ1q3TGfWZQWZ9gXTFThs2Qw==}
+ peerDependencies:
+ vitest: 4.0.17
+
+ '@vitest/expect@4.0.17':
+ resolution: {integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==}
+
+ '@vitest/mocker@4.0.17':
+ resolution: {integrity: sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@4.0.17':
+ resolution: {integrity: sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==}
+
+ '@vitest/runner@4.0.17':
+ resolution: {integrity: sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==}
+
+ '@vitest/snapshot@4.0.17':
+ resolution: {integrity: sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==}
+
+ '@vitest/spy@4.0.17':
+ resolution: {integrity: sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==}
+
+ '@vitest/utils@4.0.17':
+ resolution: {integrity: sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==}
+
'@vue/compiler-core@3.5.26':
resolution: {integrity: sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==}
@@ -1144,6 +1291,13 @@ packages:
array-ify@1.0.0:
resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
+ array-timsort@1.0.3:
+ resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
axobject-query@4.1.0:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
@@ -1182,6 +1336,10 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
+ chai@6.2.2:
+ resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
+ engines: {node: '>=18'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -1224,6 +1382,10 @@ packages:
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
commander@13.1.0:
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
engines: {node: '>=18'}
@@ -1232,6 +1394,10 @@ packages:
resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
engines: {node: '>=20'}
+ comment-json@4.5.1:
+ resolution: {integrity: sha512-taEtr3ozUmOB7it68Jll7s0Pwm+aoiHyXKrEC8SEodL4rNpdfDLqa7PfBlrgFoCNNdR8ImL+muti5IGvktJAAg==}
+ engines: {node: '>= 6'}
+
compare-func@2.0.0:
resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
@@ -1244,6 +1410,10 @@ packages:
confbox@0.2.2:
resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
+ consola@3.4.0:
+ resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
consola@3.4.2:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
@@ -1279,6 +1449,13 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
+ engines: {node: '>= 0.6'}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
cosmiconfig-typescript-loader@6.2.0:
resolution: {integrity: sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==}
engines: {node: '>=v18'}
@@ -1328,6 +1505,14 @@ packages:
supports-color:
optional: true
+ dedent@1.5.1:
+ resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -1378,6 +1563,9 @@ packages:
error-ex@1.3.4:
resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
esbuild@0.25.12:
resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
engines: {node: '>=18'}
@@ -1470,6 +1658,11 @@ packages:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
esquery@1.7.0:
resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
engines: {node: '>=0.10'}
@@ -1488,6 +1681,9 @@ packages:
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
@@ -1503,6 +1699,10 @@ packages:
resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==}
engines: {node: ^18.19.0 || >=20.5.0}
+ expect-type@1.3.0:
+ resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
+ engines: {node: '>=12.0.0'}
+
exsolve@1.0.8:
resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
@@ -1575,6 +1775,11 @@ packages:
flowbite@3.1.2:
resolution: {integrity: sha512-MkwSgbbybCYgMC+go6Da5idEKUFfMqc/AmSjm/2ZbdmvoKf5frLPq/eIhXc9P+rC8t9boZtUXzHDgt5whZ6A/Q==}
+ fsevents@2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -1679,6 +1884,10 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ human-id@4.1.3:
+ resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==}
+ hasBin: true
+
human-signals@5.0.0:
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
engines: {node: '>=16.17.0'}
@@ -1700,6 +1909,10 @@ packages:
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'}
+ import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
@@ -1794,6 +2007,9 @@ packages:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
+ js-sha256@0.11.1:
+ resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -1821,6 +2037,11 @@ packages:
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
jsonparse@1.3.1:
resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
engines: {'0': node >= 0.2.0}
@@ -1838,6 +2059,10 @@ packages:
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+ kysely@0.27.6:
+ resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==}
+ engines: {node: '>=14.0.0'}
+
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
@@ -2003,6 +2228,9 @@ packages:
resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
engines: {node: '>=18'}
+ obug@2.1.1:
+ resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+
ofetch@1.5.1:
resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
@@ -2093,16 +2321,34 @@ packages:
engines: {node: '>=0.10'}
hasBin: true
+ pixelmatch@7.1.0:
+ resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==}
+ hasBin: true
+
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
pkg-types@2.3.0:
resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
+ playwright-core@1.57.0:
+ resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ playwright@1.57.0:
+ resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
plur@5.1.0:
resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ pngjs@7.0.0:
+ resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==}
+ engines: {node: '>=14.19.0'}
+
postcss-load-config@3.1.4:
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
engines: {node: '>= 10'}
@@ -2149,6 +2395,11 @@ packages:
prettier: ^3.0.0
svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
+ prettier@2.5.1:
+ resolution: {integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
prettier@3.7.4:
resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
engines: {node: '>=14'}
@@ -2223,6 +2474,9 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ set-cookie-parser@2.7.2:
+ resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -2231,6 +2485,9 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
@@ -2259,6 +2516,17 @@ packages:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
+ sqlite-wasm-kysely@0.3.0:
+ resolution: {integrity: sha512-TzjBNv7KwRw6E3pdKdlRyZiTmUIE0UttT/Sl56MVwVARl/u5gp978KepazCJZewFUnlWHz9i3NQd4kOtP/Afdg==}
+ peerDependencies:
+ kysely: '*'
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@3.10.0:
+ resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
@@ -2328,9 +2596,6 @@ packages:
svelte:
optional: true
- svelte-routing@2.13.0:
- resolution: {integrity: sha512-/NTxqTwLc7Dq306hARJrH2HLXOBtKd7hu8nxgoFDlK0AC4SOKnzisiX/9m8Uksei1QAWtlAEdF91YphNM8iDMg==}
-
svelte-sonner@1.0.7:
resolution: {integrity: sha512-1EUFYmd7q/xfs2qCHwJzGPh9n5VJ3X6QjBN10fof2vxgy8fYE7kVfZ7uGnd7i6fQaWIr5KvXcwYXE/cmTEjk5A==}
peerDependencies:
@@ -2367,6 +2632,9 @@ packages:
through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
tinyexec@1.0.2:
resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
engines: {node: '>=18'}
@@ -2375,6 +2643,10 @@ packages:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
+ tinyrainbow@3.0.3:
+ resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
+ engines: {node: '>=14.0.0'}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -2455,12 +2727,27 @@ packages:
resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==}
engines: {node: '>=18.12.0'}
+ unplugin@2.3.11:
+ resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
+ engines: {node: '>=18.12.0'}
+
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ urlpattern-polyfill@10.1.0:
+ resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==}
+
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ uuid@10.0.0:
+ resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
+ hasBin: true
+
+ uuid@13.0.0:
+ resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==}
+ hasBin: true
+
vite@6.3.4:
resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
@@ -2509,6 +2796,46 @@ packages:
vite:
optional: true
+ vitest-browser-svelte@2.0.1:
+ resolution: {integrity: sha512-z7GFio7vxaOolY+xwPUMEKuwL4KcPzB8+bepA9F0Phqag/TJ4j7IAGSwm4Y/FBh7KznsP+7aEIllMay0qDpFXw==}
+ peerDependencies:
+ svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0
+ vitest: ^4.0.0
+
+ vitest@4.0.17:
+ resolution: {integrity: sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==}
+ engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@opentelemetry/api': ^1.9.0
+ '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
+ '@vitest/browser-playwright': 4.0.17
+ '@vitest/browser-preview': 4.0.17
+ '@vitest/browser-webdriverio': 4.0.17
+ '@vitest/ui': 4.0.17
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-preview':
+ optional: true
+ '@vitest/browser-webdriverio':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
vue-flow-layout@0.1.1:
resolution: {integrity: sha512-JdgRRUVrN0Y2GosA0M68DEbKlXMqJ7FQgsK8CjQD2vxvNSqAU6PZEpi4cfcTVtfM2GVOMjHo7GKKLbXxOBqDqA==}
peerDependencies:
@@ -2522,11 +2849,19 @@ packages:
typescript:
optional: true
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
@@ -2542,6 +2877,18 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ ws@8.19.0:
+ resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -2611,6 +2958,12 @@ snapshots:
'@actions/io@2.0.0': {}
+ '@alexanderniebuhr/prettier-plugin-unocss@0.0.4':
+ dependencies:
+ '@unocss/preset-uno': 0.25.1
+ import-fresh: 3.3.0
+ prettier: 2.5.1
+
'@ampproject/remapping@2.3.0':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
@@ -2996,6 +3349,32 @@ snapshots:
'@iconify/types': 2.0.0
mlly: 1.8.0
+ '@inlang/paraglide-js@2.8.0':
+ dependencies:
+ '@inlang/recommend-sherlock': 0.2.1
+ '@inlang/sdk': 2.6.0
+ commander: 11.1.0
+ consola: 3.4.0
+ json5: 2.2.3
+ unplugin: 2.3.11
+ urlpattern-polyfill: 10.1.0
+ transitivePeerDependencies:
+ - babel-plugin-macros
+
+ '@inlang/recommend-sherlock@0.2.1':
+ dependencies:
+ comment-json: 4.5.1
+
+ '@inlang/sdk@2.6.0':
+ dependencies:
+ '@lix-js/sdk': 0.4.7
+ '@sinclair/typebox': 0.31.28
+ kysely: 0.27.6
+ sqlite-wasm-kysely: 0.3.0(kysely@0.27.6)
+ uuid: 13.0.0
+ transitivePeerDependencies:
+ - babel-plugin-macros
+
'@jridgewell/gen-mapping@0.3.13':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -3015,6 +3394,20 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@lix-js/sdk@0.4.7':
+ dependencies:
+ '@lix-js/server-protocol-schema': 0.1.1
+ dedent: 1.5.1
+ human-id: 4.1.3
+ js-sha256: 0.11.1
+ kysely: 0.27.6
+ sqlite-wasm-kysely: 0.3.0(kysely@0.27.6)
+ uuid: 10.0.0
+ transitivePeerDependencies:
+ - babel-plugin-macros
+
+ '@lix-js/server-protocol-schema@0.1.1': {}
+
'@nanoforge-dev/actions@1.0.2':
dependencies:
'@actions/core': 2.0.2
@@ -3129,6 +3522,10 @@ snapshots:
'@pkgr/core@0.2.9': {}
+ '@playwright/test@1.57.0':
+ dependencies:
+ playwright: 1.57.0
+
'@polka/url@1.0.0-next.29': {}
'@popperjs/core@2.11.8': {}
@@ -3236,12 +3633,43 @@ snapshots:
'@sec-ant/readable-stream@0.4.1': {}
+ '@sinclair/typebox@0.31.28': {}
+
'@sindresorhus/merge-streams@4.0.0': {}
+ '@sqlite.org/sqlite-wasm@3.48.0-build4': {}
+
+ '@standard-schema/spec@1.1.0': {}
+
'@sveltejs/acorn-typescript@1.0.8(acorn@8.15.0)':
dependencies:
acorn: 8.15.0
+ '@sveltejs/adapter-auto@7.0.0(@sveltejs/kit@2.49.4(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.7.3)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)))':
+ dependencies:
+ '@sveltejs/kit': 2.49.4(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.7.3)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))
+
+ '@sveltejs/kit@2.49.4(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.7.3)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0)
+ '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.46.1)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))
+ '@types/cookie': 0.6.0
+ acorn: 8.15.0
+ cookie: 0.6.0
+ devalue: 5.6.1
+ esm-env: 1.2.2
+ kleur: 4.1.5
+ magic-string: 0.30.21
+ mrmime: 2.0.1
+ sade: 1.8.1
+ set-cookie-parser: 2.7.2
+ sirv: 3.0.2
+ svelte: 5.46.1
+ vite: 6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)
+ optionalDependencies:
+ typescript: 5.7.3
+
'@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))':
dependencies:
'@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.46.1)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))
@@ -3301,10 +3729,19 @@ snapshots:
'@tsconfig/svelte@5.0.6': {}
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
'@types/conventional-commits-parser@5.0.2':
dependencies:
'@types/node': 25.0.5
+ '@types/cookie@0.6.0': {}
+
+ '@types/deep-eql@4.0.2': {}
+
'@types/eslint@9.6.1':
dependencies:
'@types/estree': 1.0.8
@@ -3447,6 +3884,8 @@ snapshots:
'@unocss/core': 66.1.0-beta.6
unconfig: 7.4.2
+ '@unocss/core@0.25.1': {}
+
'@unocss/core@66.1.0-beta.6': {}
'@unocss/core@66.5.12': {}
@@ -3459,6 +3898,8 @@ snapshots:
dependencies:
'@unocss/core': 66.5.12
+ '@unocss/extractor-svelte@66.5.12': {}
+
'@unocss/inspector@66.1.0-beta.6(vue@3.5.26(typescript@5.7.3))':
dependencies:
'@unocss/core': 66.1.0-beta.6
@@ -3497,6 +3938,10 @@ snapshots:
'@unocss/core': 66.5.12
ofetch: 1.5.1
+ '@unocss/preset-mini@0.25.1':
+ dependencies:
+ '@unocss/core': 0.25.1
+
'@unocss/preset-mini@66.1.0-beta.6':
dependencies:
'@unocss/core': 66.1.0-beta.6
@@ -3513,6 +3958,12 @@ snapshots:
'@unocss/preset-mini': 66.1.0-beta.6
'@unocss/rule-utils': 66.1.0-beta.6
+ '@unocss/preset-uno@0.25.1':
+ dependencies:
+ '@unocss/core': 0.25.1
+ '@unocss/preset-mini': 0.25.1
+ '@unocss/preset-wind': 0.25.1
+
'@unocss/preset-uno@66.1.0-beta.6':
dependencies:
'@unocss/core': 66.1.0-beta.6
@@ -3541,6 +3992,11 @@ snapshots:
'@unocss/extractor-arbitrary-variants': 66.5.12
'@unocss/rule-utils': 66.5.12
+ '@unocss/preset-wind@0.25.1':
+ dependencies:
+ '@unocss/core': 0.25.1
+ '@unocss/preset-mini': 0.25.1
+
'@unocss/preset-wind@66.1.0-beta.6':
dependencies:
'@unocss/core': 66.1.0-beta.6
@@ -3598,6 +4054,75 @@ snapshots:
transitivePeerDependencies:
- vue
+ '@vitest/browser-playwright@4.0.17(playwright@1.57.0)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))(vitest@4.0.17)':
+ dependencies:
+ '@vitest/browser': 4.0.17(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))(vitest@4.0.17)
+ '@vitest/mocker': 4.0.17(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))
+ playwright: 1.57.0
+ tinyrainbow: 3.0.3
+ vitest: 4.0.17(@types/node@25.0.5)(@vitest/browser-playwright@4.0.17)(jiti@2.6.1)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - bufferutil
+ - msw
+ - utf-8-validate
+ - vite
+
+ '@vitest/browser@4.0.17(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))(vitest@4.0.17)':
+ dependencies:
+ '@vitest/mocker': 4.0.17(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))
+ '@vitest/utils': 4.0.17
+ magic-string: 0.30.21
+ pixelmatch: 7.1.0
+ pngjs: 7.0.0
+ sirv: 3.0.2
+ tinyrainbow: 3.0.3
+ vitest: 4.0.17(@types/node@25.0.5)(@vitest/browser-playwright@4.0.17)(jiti@2.6.1)(yaml@2.8.2)
+ ws: 8.19.0
+ transitivePeerDependencies:
+ - bufferutil
+ - msw
+ - utf-8-validate
+ - vite
+
+ '@vitest/expect@4.0.17':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@types/chai': 5.2.3
+ '@vitest/spy': 4.0.17
+ '@vitest/utils': 4.0.17
+ chai: 6.2.2
+ tinyrainbow: 3.0.3
+
+ '@vitest/mocker@4.0.17(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))':
+ dependencies:
+ '@vitest/spy': 4.0.17
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)
+
+ '@vitest/pretty-format@4.0.17':
+ dependencies:
+ tinyrainbow: 3.0.3
+
+ '@vitest/runner@4.0.17':
+ dependencies:
+ '@vitest/utils': 4.0.17
+ pathe: 2.0.3
+
+ '@vitest/snapshot@4.0.17':
+ dependencies:
+ '@vitest/pretty-format': 4.0.17
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
+ '@vitest/spy@4.0.17': {}
+
+ '@vitest/utils@4.0.17':
+ dependencies:
+ '@vitest/pretty-format': 4.0.17
+ tinyrainbow: 3.0.3
+
'@vue/compiler-core@3.5.26':
dependencies:
'@babel/parser': 7.28.5
@@ -3713,6 +4238,10 @@ snapshots:
array-ify@1.0.0: {}
+ array-timsort@1.0.3: {}
+
+ assertion-error@2.0.1: {}
+
axobject-query@4.1.0: {}
balanced-match@1.0.2: {}
@@ -3742,6 +4271,8 @@ snapshots:
callsites@3.1.0: {}
+ chai@6.2.2: {}
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -3790,10 +4321,18 @@ snapshots:
colorette@2.0.20: {}
+ commander@11.1.0: {}
+
commander@13.1.0: {}
commander@14.0.2: {}
+ comment-json@4.5.1:
+ dependencies:
+ array-timsort: 1.0.3
+ core-util-is: 1.0.3
+ esprima: 4.0.1
+
compare-func@2.0.0:
dependencies:
array-ify: 1.0.0
@@ -3805,6 +4344,8 @@ snapshots:
confbox@0.2.2: {}
+ consola@3.4.0: {}
+
consola@3.4.2: {}
conventional-changelog-angular@7.0.0:
@@ -3838,6 +4379,10 @@ snapshots:
conventional-commits-parser: 6.2.1
meow: 13.2.0
+ cookie@0.6.0: {}
+
+ core-util-is@1.0.3: {}
+
cosmiconfig-typescript-loader@6.2.0(@types/node@25.0.5)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3):
dependencies:
'@types/node': 25.0.5
@@ -3877,6 +4422,8 @@ snapshots:
dependencies:
ms: 2.1.3
+ dedent@1.5.1: {}
+
deep-is@0.1.4: {}
deepmerge@4.3.1: {}
@@ -3913,6 +4460,8 @@ snapshots:
dependencies:
is-arrayish: 0.2.1
+ es-module-lexer@1.7.0: {}
+
esbuild@0.25.12:
optionalDependencies:
'@esbuild/aix-ppc64': 0.25.12
@@ -4067,6 +4616,8 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.1
+ esprima@4.0.1: {}
+
esquery@1.7.0:
dependencies:
estraverse: 5.3.0
@@ -4083,6 +4634,10 @@ snapshots:
estree-walker@2.0.2: {}
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
esutils@2.0.3: {}
eventemitter3@5.0.1: {}
@@ -4114,6 +4669,8 @@ snapshots:
strip-final-newline: 4.0.0
yoctocolors: 2.1.2
+ expect-type@1.3.0: {}
+
exsolve@1.0.8: {}
fast-content-type-parse@2.0.1: {}
@@ -4202,6 +4759,9 @@ snapshots:
transitivePeerDependencies:
- rollup
+ fsevents@2.3.2:
+ optional: true
+
fsevents@2.3.3:
optional: true
@@ -4283,6 +4843,8 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ human-id@4.1.3: {}
+
human-signals@5.0.0: {}
human-signals@8.0.1: {}
@@ -4293,6 +4855,11 @@ snapshots:
ignore@7.0.5: {}
+ import-fresh@3.3.0:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
@@ -4358,6 +4925,8 @@ snapshots:
jiti@2.6.1: {}
+ js-sha256@0.11.1: {}
+
js-tokens@4.0.0: {}
js-yaml@4.1.1:
@@ -4376,6 +4945,8 @@ snapshots:
json-stable-stringify-without-jsonify@1.0.1: {}
+ json5@2.2.3: {}
+
jsonparse@1.3.1: {}
keyv@4.5.4:
@@ -4388,6 +4959,8 @@ snapshots:
kolorist@1.8.0: {}
+ kysely@0.27.6: {}
+
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
@@ -4542,6 +5115,8 @@ snapshots:
path-key: 4.0.0
unicorn-magic: 0.3.0
+ obug@2.1.1: {}
+
ofetch@1.5.1:
dependencies:
destr: 2.0.5
@@ -4622,6 +5197,10 @@ snapshots:
pidtree@0.6.0: {}
+ pixelmatch@7.1.0:
+ dependencies:
+ pngjs: 7.0.0
+
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
@@ -4634,10 +5213,20 @@ snapshots:
exsolve: 1.0.8
pathe: 2.0.3
+ playwright-core@1.57.0: {}
+
+ playwright@1.57.0:
+ dependencies:
+ playwright-core: 1.57.0
+ optionalDependencies:
+ fsevents: 2.3.2
+
plur@5.1.0:
dependencies:
irregular-plurals: 3.5.0
+ pngjs@7.0.0: {}
+
postcss-load-config@3.1.4(postcss@8.5.6):
dependencies:
lilconfig: 2.1.0
@@ -4675,6 +5264,8 @@ snapshots:
prettier: 3.7.4
svelte: 5.46.1
+ prettier@2.5.1: {}
+
prettier@3.7.4: {}
pretty-ms@9.3.0:
@@ -4756,12 +5347,16 @@ snapshots:
semver@7.7.3: {}
+ set-cookie-parser@2.7.2: {}
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
shebang-regex@3.0.0: {}
+ siginfo@2.0.0: {}
+
signal-exit@4.1.0: {}
sirv@3.0.2:
@@ -4786,6 +5381,15 @@ snapshots:
split2@4.2.0: {}
+ sqlite-wasm-kysely@0.3.0(kysely@0.27.6):
+ dependencies:
+ '@sqlite.org/sqlite-wasm': 3.48.0-build4
+ kysely: 0.27.6
+
+ stackback@0.0.2: {}
+
+ std-env@3.10.0: {}
+
string-argv@0.3.2: {}
string-width@4.2.3:
@@ -4855,8 +5459,6 @@ snapshots:
optionalDependencies:
svelte: 5.46.1
- svelte-routing@2.13.0: {}
-
svelte-sonner@1.0.7(svelte@5.46.1):
dependencies:
runed: 0.28.0(svelte@5.46.1)
@@ -4898,6 +5500,8 @@ snapshots:
through@2.3.8: {}
+ tinybench@2.9.0: {}
+
tinyexec@1.0.2: {}
tinyglobby@0.2.15:
@@ -4905,6 +5509,8 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
+ tinyrainbow@3.0.3: {}
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -4996,12 +5602,25 @@ snapshots:
pathe: 2.0.3
picomatch: 4.0.3
+ unplugin@2.3.11:
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ acorn: 8.15.0
+ picomatch: 4.0.3
+ webpack-virtual-modules: 0.6.2
+
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
+ urlpattern-polyfill@10.1.0: {}
+
util-deprecate@1.0.2: {}
+ uuid@10.0.0: {}
+
+ uuid@13.0.0: {}
+
vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2):
dependencies:
esbuild: 0.25.12
@@ -5020,6 +5639,49 @@ snapshots:
optionalDependencies:
vite: 6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)
+ vitest-browser-svelte@2.0.1(svelte@5.46.1)(vitest@4.0.17):
+ dependencies:
+ svelte: 5.46.1
+ vitest: 4.0.17(@types/node@25.0.5)(@vitest/browser-playwright@4.0.17)(jiti@2.6.1)(yaml@2.8.2)
+
+ vitest@4.0.17(@types/node@25.0.5)(@vitest/browser-playwright@4.0.17)(jiti@2.6.1)(yaml@2.8.2):
+ dependencies:
+ '@vitest/expect': 4.0.17
+ '@vitest/mocker': 4.0.17(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))
+ '@vitest/pretty-format': 4.0.17
+ '@vitest/runner': 4.0.17
+ '@vitest/snapshot': 4.0.17
+ '@vitest/spy': 4.0.17
+ '@vitest/utils': 4.0.17
+ es-module-lexer: 1.7.0
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ obug: 2.1.1
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 1.0.2
+ tinyglobby: 0.2.15
+ tinyrainbow: 3.0.3
+ vite: 6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 25.0.5
+ '@vitest/browser-playwright': 4.0.17(playwright@1.57.0)(vite@6.3.4(@types/node@25.0.5)(jiti@2.6.1)(yaml@2.8.2))(vitest@4.0.17)
+ transitivePeerDependencies:
+ - jiti
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - terser
+ - tsx
+ - yaml
+
vue-flow-layout@0.1.1(vue@3.5.26(typescript@5.7.3)):
dependencies:
vue: 3.5.26(typescript@5.7.3)
@@ -5034,10 +5696,17 @@ snapshots:
optionalDependencies:
typescript: 5.7.3
+ webpack-virtual-modules@0.6.2: {}
+
which@2.0.2:
dependencies:
isexe: 2.0.0
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
word-wrap@1.2.5: {}
wrap-ansi@7.0.0:
@@ -5054,6 +5723,8 @@ snapshots:
wrappy@1.0.2: {}
+ ws@8.19.0: {}
+
y18n@5.0.8: {}
yaml@1.10.2: {}
diff --git a/project.inlang/settings.json b/project.inlang/settings.json
new file mode 100644
index 0000000..f135c20
--- /dev/null
+++ b/project.inlang/settings.json
@@ -0,0 +1,12 @@
+{
+ "$schema": "https://inlang.com/schema/project-settings",
+ "modules": [
+ "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js",
+ "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@2/dist/index.js"
+ ],
+ "plugin.inlang.messageFormat": {
+ "pathPattern": "./messages/{locale}.json"
+ },
+ "baseLocale": "en",
+ "locales": ["en", "fr"]
+}
diff --git a/src/App.svelte b/src/App.svelte
deleted file mode 100644
index c6cf38a..0000000
--- a/src/App.svelte
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
- {#each Object.keys(routes) as route (route)}
-
-
-
- {/each}
-
-
diff --git a/src/app.css b/src/app.css
index 6779202..7f2621f 100644
--- a/src/app.css
+++ b/src/app.css
@@ -19,4 +19,6 @@
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
+
+ @apply color-neutral-200 bg-neutral-900;
}
diff --git a/src/app.d.ts b/src/app.d.ts
new file mode 100644
index 0000000..520c421
--- /dev/null
+++ b/src/app.d.ts
@@ -0,0 +1,13 @@
+// See https://svelte.dev/docs/kit/types#app.d.ts
+// for information about these interfaces
+declare global {
+ namespace App {
+ // interface Error {}
+ // interface Locals {}
+ // interface PageData {}
+ // interface PageState {}
+ // interface Platform {}
+ }
+}
+
+export {};
diff --git a/src/app.html b/src/app.html
new file mode 100644
index 0000000..6bf0857
--- /dev/null
+++ b/src/app.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ %sveltekit.head%
+
+
+ %sveltekit.body%
+
+
diff --git a/src/components/Menu/MenuButton.svelte b/src/components/Menu/MenuButton.svelte
deleted file mode 100644
index 2e259c4..0000000
--- a/src/components/Menu/MenuButton.svelte
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- {title}
-
-
- {@render children?.()}
-
diff --git a/src/components/Menu/MenuItem.svelte b/src/components/Menu/MenuItem.svelte
deleted file mode 100644
index 4358039..0000000
--- a/src/components/Menu/MenuItem.svelte
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
- {@render children?.()}
-
diff --git a/src/components/Widget/ScreenView/ScreenViewWidget.svelte b/src/components/Widget/ScreenView/ScreenViewWidget.svelte
deleted file mode 100644
index 7055e05..0000000
--- a/src/components/Widget/ScreenView/ScreenViewWidget.svelte
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/src/demo.spec.ts b/src/demo.spec.ts
new file mode 100644
index 0000000..e2efa47
--- /dev/null
+++ b/src/demo.spec.ts
@@ -0,0 +1,5 @@
+import { expect, it } from 'vitest';
+
+it('expect 1 + 2 = 3', async () => {
+ expect(1 + 2).equal(3);
+});
diff --git a/src/hooks.server.ts b/src/hooks.server.ts
new file mode 100644
index 0000000..917ce46
--- /dev/null
+++ b/src/hooks.server.ts
@@ -0,0 +1,13 @@
+import { paraglideMiddleware } from '$lib/paraglide/server';
+import type { Handle } from '@sveltejs/kit';
+
+const handleParaglide: Handle = ({ event, resolve }) =>
+ paraglideMiddleware(event.request, ({ request, locale }) => {
+ event.request = request;
+
+ return resolve(event, {
+ transformPageChunk: ({ html }) => html.replace('%paraglide.lang%', locale),
+ });
+ });
+
+export const handle: Handle = handleParaglide;
diff --git a/src/hooks.ts b/src/hooks.ts
new file mode 100644
index 0000000..e75600b
--- /dev/null
+++ b/src/hooks.ts
@@ -0,0 +1,3 @@
+import { deLocalizeUrl } from '$lib/paraglide/runtime';
+
+export const reroute = (request) => deLocalizeUrl(request.url).pathname;
diff --git a/src/assets/logo.png b/src/lib/assets/logo.png
similarity index 100%
rename from src/assets/logo.png
rename to src/lib/assets/logo.png
diff --git a/src/assets/svelte.svg b/src/lib/assets/svelte.svg
similarity index 100%
rename from src/assets/svelte.svg
rename to src/lib/assets/svelte.svg
diff --git a/src/components/Entity/Components/types.ts b/src/lib/components/Entity/Components/types.ts
similarity index 100%
rename from src/components/Entity/Components/types.ts
rename to src/lib/components/Entity/Components/types.ts
diff --git a/src/components/Entity/types.ts b/src/lib/components/Entity/types.ts
similarity index 100%
rename from src/components/Entity/types.ts
rename to src/lib/components/Entity/types.ts
diff --git a/src/components/Menu/MenuBar.svelte b/src/lib/components/Menu/MenuBar.svelte
similarity index 96%
rename from src/components/Menu/MenuBar.svelte
rename to src/lib/components/Menu/MenuBar.svelte
index cd21820..0800a5d 100644
--- a/src/components/Menu/MenuBar.svelte
+++ b/src/lib/components/Menu/MenuBar.svelte
@@ -3,7 +3,7 @@
import MenuItem from './MenuItem.svelte';
-
+
Save
Export
diff --git a/src/lib/components/Menu/MenuButton.svelte b/src/lib/components/Menu/MenuButton.svelte
new file mode 100644
index 0000000..31ddc26
--- /dev/null
+++ b/src/lib/components/Menu/MenuButton.svelte
@@ -0,0 +1,32 @@
+
+
+
+
+ {title}
+
+
+ {@render children?.()}
+
+
diff --git a/src/lib/components/Menu/MenuItem.svelte b/src/lib/components/Menu/MenuItem.svelte
new file mode 100644
index 0000000..940db92
--- /dev/null
+++ b/src/lib/components/Menu/MenuItem.svelte
@@ -0,0 +1,19 @@
+
+
+
+
+
+ {@render children?.()}
+
+
diff --git a/src/components/Panel/Layout.svelte b/src/lib/components/Panel/Layout.svelte
similarity index 100%
rename from src/components/Panel/Layout.svelte
rename to src/lib/components/Panel/Layout.svelte
diff --git a/src/components/Panel/Panel.svelte b/src/lib/components/Panel/Panel.svelte
similarity index 100%
rename from src/components/Panel/Panel.svelte
rename to src/lib/components/Panel/Panel.svelte
diff --git a/src/components/Panel/Widget.svelte b/src/lib/components/Panel/Widget.svelte
similarity index 79%
rename from src/components/Panel/Widget.svelte
rename to src/lib/components/Panel/Widget.svelte
index ee94cea..46426c0 100644
--- a/src/components/Panel/Widget.svelte
+++ b/src/lib/components/Panel/Widget.svelte
@@ -14,7 +14,7 @@
diff --git a/src/components/Panel/WidgetResizeBar.svelte b/src/lib/components/Panel/WidgetResizeBar.svelte
similarity index 93%
rename from src/components/Panel/WidgetResizeBar.svelte
rename to src/lib/components/Panel/WidgetResizeBar.svelte
index 4cf47f3..520b159 100644
--- a/src/components/Panel/WidgetResizeBar.svelte
+++ b/src/lib/components/Panel/WidgetResizeBar.svelte
@@ -8,6 +8,7 @@
let { direction, onResize, onDragStart, onDragEnd }: Props = $props();
+ // svelte-ignore state_referenced_locally
const isHorizontal = direction === 'row';
let isDragging = $state(false);
let startPos = $state(0);
@@ -90,7 +91,7 @@
-
+
{#each tabs as tab, index (tab)}
import { onMount, onDestroy } from 'svelte';
- import * as monaco from 'monaco-editor';
+
import { codeExample } from '../../demo/code-example';
let value = codeExample;
let container: HTMLDivElement;
- let editor: monaco.editor.IStandaloneCodeEditor;
+ let editor: any;
+
+ onMount(async () => {
+ const monaco = await import('monaco-editor');
- onMount(() => {
editor = monaco.editor.create(container, {
value,
language: 'typescript',
diff --git a/src/components/Widget/ComponentsInspector/ComponentValueEditor.svelte b/src/lib/components/Widget/ComponentsInspector/ComponentValueEditor.svelte
similarity index 72%
rename from src/components/Widget/ComponentsInspector/ComponentValueEditor.svelte
rename to src/lib/components/Widget/ComponentsInspector/ComponentValueEditor.svelte
index 5ac055f..4b94c44 100644
--- a/src/components/Widget/ComponentsInspector/ComponentValueEditor.svelte
+++ b/src/lib/components/Widget/ComponentsInspector/ComponentValueEditor.svelte
@@ -11,7 +11,7 @@
(open = !open)}
>
{#each Object.entries(component.values) as [key, value] (key)}
-
+
{key}
{#if typeof value === 'string'}
-
+
{:else if typeof value === 'number'}
{:else if typeof value === 'object' && value !== null}
-
+
{#if 'x' in value}
-
x
+
x
@@ -55,9 +55,9 @@
{/if}
{#if 'y' in value}
-
y
+
y
@@ -65,9 +65,9 @@
{/if}
{#if 'z' in value}
-
z
+
z
diff --git a/src/components/Widget/ComponentsInspector/ComponentsInspectorWidget.svelte b/src/lib/components/Widget/ComponentsInspector/ComponentsInspectorWidget.svelte
similarity index 59%
rename from src/components/Widget/ComponentsInspector/ComponentsInspectorWidget.svelte
rename to src/lib/components/Widget/ComponentsInspector/ComponentsInspectorWidget.svelte
index 94b907f..308392d 100644
--- a/src/components/Widget/ComponentsInspector/ComponentsInspectorWidget.svelte
+++ b/src/lib/components/Widget/ComponentsInspector/ComponentsInspectorWidget.svelte
@@ -3,13 +3,13 @@
import { components } from '../../demo/components';
-
+
{#each components as component (component.type)}
{/each}
-
+
Add component
diff --git a/src/components/Widget/ContentBrowser/ContentBrowserItemCard.svelte b/src/lib/components/Widget/ContentBrowser/ContentBrowserItemCard.svelte
similarity index 82%
rename from src/components/Widget/ContentBrowser/ContentBrowserItemCard.svelte
rename to src/lib/components/Widget/ContentBrowser/ContentBrowserItemCard.svelte
index efcb437..b3e8a6a 100644
--- a/src/components/Widget/ContentBrowser/ContentBrowserItemCard.svelte
+++ b/src/lib/components/Widget/ContentBrowser/ContentBrowserItemCard.svelte
@@ -9,7 +9,7 @@
select([item.id])}
>
diff --git a/src/components/Widget/ContentBrowser/ContentBrowserWidget.svelte b/src/lib/components/Widget/ContentBrowser/ContentBrowserWidget.svelte
similarity index 74%
rename from src/components/Widget/ContentBrowser/ContentBrowserWidget.svelte
rename to src/lib/components/Widget/ContentBrowser/ContentBrowserWidget.svelte
index d34243f..6dc89a8 100644
--- a/src/components/Widget/ContentBrowser/ContentBrowserWidget.svelte
+++ b/src/lib/components/Widget/ContentBrowser/ContentBrowserWidget.svelte
@@ -21,26 +21,26 @@
let selectedContent = $derived(findRecursive(items, selected.at(-1) || ''));
-
-
+
+
{#each items as item (item)}
(selected = ids)} bind:selected />
{/each}
-
-
+
+
{#each selected as id, index (id)}
(selected = selected.slice(0, selected.indexOf(id) + 1))}
>{findRecursive(items, id)?.name || 'unknown'}
{#if index + 1 < selected.length}
-
+
{/if}
{/each}
-
+
{#if selectedContent && selectedContent.children}
{#each selectedContent.children as item (item)}
-
+
Add Entity
-
+
{#each entities as entity (entity.id)}
(selected = [id])} bind:selected />
{/each}
diff --git a/src/components/Widget/EntitiesTree/EntityItem.svelte b/src/lib/components/Widget/EntitiesTree/EntityItem.svelte
similarity index 100%
rename from src/components/Widget/EntitiesTree/EntityItem.svelte
rename to src/lib/components/Widget/EntitiesTree/EntityItem.svelte
diff --git a/src/components/Widget/OutputLog/OutputLogWidget.svelte b/src/lib/components/Widget/OutputLog/OutputLogWidget.svelte
similarity index 73%
rename from src/components/Widget/OutputLog/OutputLogWidget.svelte
rename to src/lib/components/Widget/OutputLog/OutputLogWidget.svelte
index 289cffe..f31a2f7 100644
--- a/src/components/Widget/OutputLog/OutputLogWidget.svelte
+++ b/src/lib/components/Widget/OutputLog/OutputLogWidget.svelte
@@ -28,24 +28,24 @@
};
-
+
-
+
{#each filteredLogs as log (log.id)}
-
+
[{log.time}]
{#if log.source}
-
+
[{log.source}]
{/if}
@@ -57,7 +57,7 @@
{/each}
{#if filteredLogs.length === 0}
- No logs matching your search
+ No logs matching your search
{/if}
diff --git a/src/lib/components/Widget/ScreenView/ScreenViewWidget.svelte b/src/lib/components/Widget/ScreenView/ScreenViewWidget.svelte
new file mode 100644
index 0000000..f91c1c1
--- /dev/null
+++ b/src/lib/components/Widget/ScreenView/ScreenViewWidget.svelte
@@ -0,0 +1,3 @@
+
diff --git a/src/components/Widget/widgets.ts b/src/lib/components/Widget/widgets.ts
similarity index 100%
rename from src/components/Widget/widgets.ts
rename to src/lib/components/Widget/widgets.ts
diff --git a/src/components/demo/code-example.ts b/src/lib/components/demo/code-example.ts
similarity index 100%
rename from src/components/demo/code-example.ts
rename to src/lib/components/demo/code-example.ts
diff --git a/src/components/demo/components.ts b/src/lib/components/demo/components.ts
similarity index 100%
rename from src/components/demo/components.ts
rename to src/lib/components/demo/components.ts
diff --git a/src/components/demo/entities.ts b/src/lib/components/demo/entities.ts
similarity index 100%
rename from src/components/demo/entities.ts
rename to src/lib/components/demo/entities.ts
diff --git a/src/components/demo/logs.ts b/src/lib/components/demo/logs.ts
similarity index 100%
rename from src/components/demo/logs.ts
rename to src/lib/components/demo/logs.ts
diff --git a/src/components/demo/tabs.ts b/src/lib/components/demo/tabs.ts
similarity index 100%
rename from src/components/demo/tabs.ts
rename to src/lib/components/demo/tabs.ts
diff --git a/src/components/utils.ts b/src/lib/components/utils.ts
similarity index 100%
rename from src/components/utils.ts
rename to src/lib/components/utils.ts
diff --git a/src/main.ts b/src/main.ts
deleted file mode 100644
index d3a30a7..0000000
--- a/src/main.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { mount } from 'svelte';
-import 'uno.css';
-
-import App from './App.svelte';
-import './app.css';
-
-const app = mount(App, {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- target: document.getElementById('app')!,
-});
-
-export default app;
diff --git a/src/routes.ts b/src/routes.ts
deleted file mode 100644
index 5d4211e..0000000
--- a/src/routes.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import Home from './routes/Home.svelte';
-
-export const routes: Record
= {
- '/': Home,
-};
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
new file mode 100644
index 0000000..2394612
--- /dev/null
+++ b/src/routes/+layout.svelte
@@ -0,0 +1,8 @@
+
+
+{@render children()}
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
new file mode 100644
index 0000000..ef24d60
--- /dev/null
+++ b/src/routes/+page.svelte
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Jump Out
+
+
+
+
+
+
+
+
diff --git a/src/routes/+page.ts b/src/routes/+page.ts
new file mode 100644
index 0000000..a72419a
--- /dev/null
+++ b/src/routes/+page.ts
@@ -0,0 +1,3 @@
+// since there's no dynamic data here, we can prerender
+// it so that it gets served as a static asset in production
+export const prerender = true;
diff --git a/src/routes/Home.svelte b/src/routes/Home.svelte
deleted file mode 100644
index 7f1ea5b..0000000
--- a/src/routes/Home.svelte
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Jump Out
-
-
-
-
-
-
-
-
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
deleted file mode 100644
index 4078e74..0000000
--- a/src/vite-env.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-///
-///
diff --git a/static/favicon.svg b/static/favicon.svg
new file mode 100644
index 0000000..cc5dc66
--- /dev/null
+++ b/static/favicon.svg
@@ -0,0 +1 @@
+svelte-logo
\ No newline at end of file
diff --git a/static/robots.txt b/static/robots.txt
new file mode 100644
index 0000000..b6dd667
--- /dev/null
+++ b/static/robots.txt
@@ -0,0 +1,3 @@
+# allow crawling everything by default
+User-agent: *
+Disallow:
diff --git a/svelte.config.js b/svelte.config.js
index 152ba42..34a3fc2 100644
--- a/svelte.config.js
+++ b/svelte.config.js
@@ -1,10 +1,15 @@
+import adapter from '@sveltejs/adapter-auto';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
import UnoCSS from '@unocss/svelte-scoped/preprocess';
+/** @type {import('@sveltejs/kit').Config} */
export default {
preprocess: [vitePreprocess(), UnoCSS()],
onwarn: (warning, handler) => {
if (['css_unused_selector'].includes(warning.code)) return;
handler(warning);
},
+ kit: {
+ adapter: adapter(),
+ },
};
diff --git a/tsconfig.app.json b/tsconfig.app.json
deleted file mode 100644
index 0d30217..0000000
--- a/tsconfig.app.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/tsconfig.json",
- "extends": "@tsconfig/svelte/tsconfig.json",
- "compilerOptions": {
- "target": "ESNext",
- "useDefineForClassFields": true,
- "module": "ESNext",
- "resolveJsonModule": true,
- "allowJs": true,
- "checkJs": true,
- "isolatedModules": true,
- "moduleDetection": "force"
- },
- "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"]
-}
diff --git a/tsconfig.json b/tsconfig.json
index 2ebc5ad..c7b9df5 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,5 +1,20 @@
{
- "$schema": "https://json.schemastore.org/tsconfig.json",
- "files": [],
- "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }]
+ "extends": "./.svelte-kit/tsconfig.json",
+ "compilerOptions": {
+ "rewriteRelativeImportExtensions": true,
+ "allowJs": true,
+ "checkJs": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "sourceMap": true,
+ "strict": true,
+ "moduleResolution": "bundler"
+ }
+ // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
+ // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
+ //
+ // To make changes to top-level options such as include and exclude, we recommend extending
+ // the generated config; see https://svelte.dev/docs/kit/configuration#typescript
}
diff --git a/tsconfig.node.json b/tsconfig.node.json
deleted file mode 100644
index 8c97dfe..0000000
--- a/tsconfig.node.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/tsconfig.json",
- "compilerOptions": {
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
- "target": "ES2022",
- "lib": ["ES2023"],
- "module": "ESNext",
- "skipLibCheck": true,
-
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
- "isolatedModules": true,
- "moduleDetection": "force",
- "noEmit": true,
-
- "strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true,
- "noUncheckedSideEffectImports": true
- },
- "include": ["vite.config.ts"]
-}
diff --git a/vite.config.ts b/vite.config.ts
index 52b2ef2..2256b96 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,8 +1,44 @@
-import { svelte } from '@sveltejs/vite-plugin-svelte';
+import { paraglideVitePlugin } from '@inlang/paraglide-js';
+import { sveltekit } from '@sveltejs/kit/vite';
+import extractorSvelte from '@unocss/extractor-svelte';
+import { playwright } from '@vitest/browser-playwright';
import UnoCSS from 'unocss/vite';
-import { defineConfig } from 'vite';
+import { defineConfig } from 'vitest/config';
// https://vite.dev/config/
export default defineConfig({
- plugins: [UnoCSS(), svelte()],
+ plugins: [
+ UnoCSS({
+ extractors: [extractorSvelte()],
+ }),
+ sveltekit(),
+ paraglideVitePlugin({ project: './project.inlang', outdir: './src/lib/paraglide' }),
+ ],
+ test: {
+ expect: { requireAssertions: true },
+ projects: [
+ {
+ extends: './vite.config.ts',
+ test: {
+ name: 'client',
+ browser: {
+ enabled: true,
+ provider: playwright(),
+ instances: [{ browser: 'chromium', headless: true }],
+ },
+ include: ['src/**/*.svelte.{test,spec}.{js,ts}'],
+ exclude: ['src/lib/server/**'],
+ },
+ },
+ {
+ extends: './vite.config.ts',
+ test: {
+ name: 'server',
+ environment: 'node',
+ include: ['src/**/*.{test,spec}.{js,ts}'],
+ exclude: ['src/**/*.svelte.{test,spec}.{js,ts}'],
+ },
+ },
+ ],
+ },
});