diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml
index 6926b0c50d..ac3434c11d 100644
--- a/.github/workflows/copilot-setup-steps.yml
+++ b/.github/workflows/copilot-setup-steps.yml
@@ -21,7 +21,8 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
- node-version: 20
+ node-version: 22
+
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Install dependencies
diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml
index 73a4883e68..ac1d7e7828 100644
--- a/.github/workflows/e2e.yml
+++ b/.github/workflows/e2e.yml
@@ -16,7 +16,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v3
with:
- node-version: 20
+ node-version: 22
- name: Install pnpm
uses: pnpm/action-setup@v4
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index bc66240f01..5171904f97 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -22,7 +22,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v3
with:
- node-version: 20
+ node-version: 22
- name: Install pnpm
uses: pnpm/action-setup@v4
@@ -44,3 +44,5 @@ jobs:
- name: Build Console
run: pnpm run build
+ env:
+ NODE_OPTIONS: --max-old-space-size=8192
diff --git a/package.json b/package.json
index 6ad42d4e89..642d1c3953 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "@appwrite/console",
"type": "module",
"engines": {
- "node": ">=20"
+ "node": ">=22.0.0"
},
"scripts": {
"dev": "vite dev",
@@ -24,13 +24,15 @@
"@ai-sdk/svelte": "^1.1.24",
"@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@f3cd1df",
"@appwrite.io/pink-icons": "0.25.0",
- "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@5b26bb8",
+ "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@865e2fc",
"@appwrite.io/pink-legacy": "^1.0.3",
- "@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@34802a6",
+ "@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@865e2fc",
"@faker-js/faker": "^9.9.0",
"@popperjs/core": "^2.11.8",
"@sentry/sveltekit": "^10.25.0",
"@stripe/stripe-js": "^3.5.0",
+ "@threlte/core": "^8.3.1",
+ "@threlte/extras": "^9.7.1",
"ai": "^2.2.37",
"analytics": "^0.8.19",
"cron-parser": "^4.9.0",
@@ -47,6 +49,7 @@
"react-dom": "^19.2.0",
"remarkable": "^2.0.1",
"svelte-confetti": "^1.4.0",
+ "three": "^0.181.2",
"svelte-reparent": "^0.0.1",
"tippy.js": "^6.3.7"
},
@@ -99,5 +102,5 @@
"svelte-preprocess"
]
},
- "packageManager": "pnpm@10.21.0"
+ "packageManager": "pnpm@10.25.0"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5ed0a373c5..4da0887066 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -18,14 +18,14 @@ importers:
specifier: 0.25.0
version: 0.25.0
'@appwrite.io/pink-icons-svelte':
- specifier: https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@5b26bb8
- version: https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@5b26bb8(svelte@5.45.6)
+ specifier: https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@865e2fc
+ version: https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@865e2fc(svelte@5.45.6)
'@appwrite.io/pink-legacy':
specifier: ^1.0.3
version: 1.0.3
'@appwrite.io/pink-svelte':
- specifier: https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@34802a6
- version: https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@34802a6(svelte@5.45.6)
+ specifier: https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@865e2fc
+ version: https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@865e2fc(svelte@5.45.6)
'@faker-js/faker':
specifier: ^9.9.0
version: 9.9.0
@@ -38,6 +38,12 @@ importers:
'@stripe/stripe-js':
specifier: ^3.5.0
version: 3.5.0
+ '@threlte/core':
+ specifier: ^8.3.1
+ version: 8.3.1(svelte@5.45.6)(three@0.181.2)
+ '@threlte/extras':
+ specifier: ^9.7.1
+ version: 9.7.1(@types/three@0.182.0)(svelte@5.45.6)(three@0.181.2)
ai:
specifier: ^2.2.37
version: 2.2.37(react@19.2.1)(solid-js@1.9.10)(svelte@5.45.6)(vue@3.5.25(typescript@5.9.3))
@@ -89,6 +95,9 @@ importers:
svelte-reparent:
specifier: ^0.0.1
version: 0.0.1(svelte@5.45.6)
+ three:
+ specifier: ^0.181.2
+ version: 0.181.2
tippy.js:
specifier: ^6.3.7
version: 6.3.7
@@ -283,8 +292,8 @@ packages:
peerDependencies:
svelte: ^4.0.0
- '@appwrite.io/pink-icons-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@5b26bb8':
- resolution: {tarball: https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@5b26bb8}
+ '@appwrite.io/pink-icons-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@865e2fc':
+ resolution: {tarball: https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@865e2fc}
version: 2.0.0-RC.1
peerDependencies:
svelte: ^4.0.0
@@ -298,8 +307,8 @@ packages:
'@appwrite.io/pink-legacy@1.0.3':
resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==}
- '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@34802a6':
- resolution: {tarball: https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@34802a6}
+ '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@865e2fc':
+ resolution: {tarball: https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@865e2fc}
version: 2.0.0-RC.2
peerDependencies:
svelte: ^4.0.0
@@ -411,6 +420,9 @@ packages:
resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
engines: {node: '>=18'}
+ '@dimforge/rapier3d-compat@0.12.0':
+ resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==}
+
'@esbuild/aix-ppc64@0.25.12':
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
engines: {node: '>=18'}
@@ -1322,6 +1334,26 @@ packages:
peerDependencies:
'@testing-library/dom': '>=7.21.4'
+ '@threejs-kit/instanced-sprite-mesh@2.5.1':
+ resolution: {integrity: sha512-pmt1ALRhbHhCJQTj2FuthH6PeLIeaM4hOuS2JO3kWSwlnvx/9xuUkjFR3JOi/myMqsH7pSsLIROSaBxDfttjeA==}
+ peerDependencies:
+ three: '>=0.170.0'
+
+ '@threlte/core@8.3.1':
+ resolution: {integrity: sha512-qKjjNCQ+40hyeBcfOMh/8ef5x/j5PG5Wmo/L9Ye0aDCcdD6fCewWxfp7tV/J3CxPzX1dEp1JGK7sjyc7ntZSrg==}
+ peerDependencies:
+ svelte: '>=5'
+ three: '>=0.160'
+
+ '@threlte/extras@9.7.1':
+ resolution: {integrity: sha512-SGm59HDCdHxADFHuweHfFDknwubkCPodyK0pbfsVtOWWOX26gE2xfK7aKolh6YFDiPAjWjGxN0jIgkNbbr1ohg==}
+ peerDependencies:
+ svelte: '>=5'
+ three: '>=0.160'
+
+ '@tweenjs/tween.js@23.1.3':
+ resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==}
+
'@types/aria-query@5.0.4':
resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
@@ -1379,12 +1411,21 @@ packages:
'@types/remarkable@2.0.8':
resolution: {integrity: sha512-eKXqPZfpQl1kOADjdKchHrp2gwn9qMnGXhH/AtZe0UrklzhGJkawJo/Y/D0AlWcdWoWamFNIum8+/nkAISQVGg==}
+ '@types/stats.js@0.17.4':
+ resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==}
+
'@types/tedious@4.0.14':
resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==}
+ '@types/three@0.182.0':
+ resolution: {integrity: sha512-WByN9V3Sbwbe2OkWuSGyoqQO8Du6yhYaXtXLoA5FkKTUJorZ+yOHBZ35zUUPQXlAKABZmbYp5oAqpA4RBjtJ/Q==}
+
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+ '@types/webxr@0.5.24':
+ resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==}
+
'@typescript-eslint/eslint-plugin@8.48.1':
resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1510,6 +1551,9 @@ packages:
'@vue/shared@3.5.25':
resolution: {integrity: sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==}
+ '@webgpu/types@0.1.68':
+ resolution: {integrity: sha512-3ab1B59Ojb6RwjOspYLsTpCzbNB3ZaamIAxBMmvnNkiDoLTZUOBXZ9p5nAYVEkQlDdf6qAZWi1pqj9+ypiqznA==}
+
acorn-import-attributes@1.9.5:
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
peerDependencies:
@@ -1632,6 +1676,9 @@ packages:
resolution: {integrity: sha512-ZCQ9GEWl73BVm8bu5Fts8nt7MHdbt5vY9bP6WGnUh+r3l8M7CgfyTlwsgCbMC66BNxPr6Xoce3j66Ms5YUQTNA==}
hasBin: true
+ bidi-js@1.0.3:
+ resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
+
binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
@@ -1671,6 +1718,12 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
+ camera-controls@3.1.2:
+ resolution: {integrity: sha512-xkxfpG2ECZ6Ww5/9+kf4mfg1VEYAoe9aDSY+IwF0UEs7qEzwy0aVRfs2grImIECs/PoBtWFrh7RXsQkwG922JA==}
+ engines: {node: '>=22.0.0', npm: '>=10.5.1'}
+ peerDependencies:
+ three: '>=0.126.1'
+
caniuse-lite@1.0.30001759:
resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==}
@@ -1960,6 +2013,9 @@ packages:
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ diet-sprite@0.0.1:
+ resolution: {integrity: sha512-zSHI2WDAn1wJqJYxcmjWfJv3Iw8oL9reQIbEyx2x2/EZ4/qmUTIo8/5qOCurnAcq61EwtJJaZ0XTy2NRYqpB5A==}
+
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
@@ -1977,6 +2033,9 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
+ earcut@2.2.4:
+ resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==}
+
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
@@ -2517,6 +2576,12 @@ packages:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
+ maath@0.10.8:
+ resolution: {integrity: sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g==}
+ peerDependencies:
+ '@types/three': '>=0.134.0'
+ three: '>=0.134.0'
+
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
@@ -2535,6 +2600,9 @@ packages:
mdast-util-to-hast@13.2.1:
resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
+ meshoptimizer@0.22.0:
+ resolution: {integrity: sha512-IebiK79sqIy+E4EgOr+CAw+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg==}
+
micromark-util-character@2.1.1:
resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
@@ -2572,6 +2640,9 @@ packages:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
module-details-from-path@1.0.4:
resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==}
@@ -2868,6 +2939,10 @@ packages:
engines: {node: '>= 6.0.0'}
hasBin: true
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
require-in-the-middle@8.0.1:
resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==}
engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'}
@@ -3172,6 +3247,29 @@ packages:
the-new-css-reset@1.11.3:
resolution: {integrity: sha512-61SB81vu9foUyEIqoU1CeqxrdlsVjJojj/CBXoG8BdvlKFsllB0Rza63DblnRqH+3uttPj3FGWo7+c9nu7MT+A==}
+ three-instanced-uniforms-mesh@0.52.4:
+ resolution: {integrity: sha512-YwDBy05hfKZQtU+Rp0KyDf9yH4GxfhxMbVt9OYruxdgLfPwmDG5oAbGoW0DrKtKZSM3BfFcCiejiOHCjFBTeng==}
+ peerDependencies:
+ three: '>=0.125.0'
+
+ three-mesh-bvh@0.9.3:
+ resolution: {integrity: sha512-LaxfvQpF+At96fS90GnQxHpff9bu78UL5eooJNxYyBbyiWrOBpjRx+5yn/+Dj2lQVhz5A/jHqwpVchYYnz/hWQ==}
+ peerDependencies:
+ three: '>= 0.159.0'
+
+ three-perf@1.0.11:
+ resolution: {integrity: sha512-OgBpZjwL+csQKGKZjpkH/QHdbGFMxqngMbSEJeSnVNfXDYd6On7WHNv/GhUZH4YxIpNMwMahBWrNnsJvnbSJHQ==}
+ peerDependencies:
+ three: '>=0.170'
+
+ three-viewport-gizmo@2.2.0:
+ resolution: {integrity: sha512-Jo9Liur1rUmdKk75FZumLU/+hbF+RtJHi1qsKZpntjKlCYScK6tjbYoqvJ9M+IJphrlQJF5oReFW7Sambh0N4Q==}
+ peerDependencies:
+ three: '>=0.162.0 <1.0.0'
+
+ three@0.181.2:
+ resolution: {integrity: sha512-k/CjiZ80bYss6Qs7/ex1TBlPD11whT9oKfT8oTGiHa34W4JRd1NiH/Tr1DbHWQ2/vMUypxksLnF2CfmlmM5XFQ==}
+
tiny-glob@0.2.9:
resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
@@ -3239,6 +3337,19 @@ packages:
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+ troika-three-text@0.52.4:
+ resolution: {integrity: sha512-V50EwcYGruV5rUZ9F4aNsrytGdKcXKALjEtQXIOBfhVoZU9VAqZNIoGQ3TMiooVqFAbR1w15T+f+8gkzoFzawg==}
+ peerDependencies:
+ three: '>=0.125.0'
+
+ troika-three-utils@0.52.4:
+ resolution: {integrity: sha512-NORAStSVa/BDiG52Mfudk4j1FG4jC4ILutB3foPnfGbOeIs9+G5vZLa0pnmnaftZUGm4UwSoqEpWdqvC7zms3A==}
+ peerDependencies:
+ three: '>=0.125.0'
+
+ troika-worker-utils@0.52.0:
+ resolution: {integrity: sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==}
+
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
engines: {node: '>=18.12'}
@@ -3254,6 +3365,9 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ tweakpane@3.1.10:
+ resolution: {integrity: sha512-rqwnl/pUa7+inhI2E9ayGTqqP0EPOOn/wVvSWjZsRbZUItzNShny7pzwL3hVlaN4m9t/aZhsP0aFQ9U5VVR2VQ==}
+
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
@@ -3407,6 +3521,9 @@ packages:
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
engines: {node: '>=18'}
+ webgl-sdf-generator@1.1.1:
+ resolution: {integrity: sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==}
+
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@@ -3605,7 +3722,7 @@ snapshots:
dependencies:
svelte: 5.45.6
- '@appwrite.io/pink-icons-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@5b26bb8(svelte@5.45.6)':
+ '@appwrite.io/pink-icons-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@865e2fc(svelte@5.45.6)':
dependencies:
svelte: 5.45.6
@@ -3618,7 +3735,7 @@ snapshots:
'@appwrite.io/pink-icons': 1.0.0
the-new-css-reset: 1.11.3
- '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@34802a6(svelte@5.45.6)':
+ '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@865e2fc(svelte@5.45.6)':
dependencies:
'@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.45.6)
'@floating-ui/dom': 1.7.4
@@ -3768,6 +3885,8 @@ snapshots:
'@csstools/css-tokenizer@3.0.4': {}
+ '@dimforge/rapier3d-compat@0.12.0': {}
+
'@esbuild/aix-ppc64@0.25.12':
optional: true
@@ -4678,6 +4797,38 @@ snapshots:
dependencies:
'@testing-library/dom': 10.4.1
+ '@threejs-kit/instanced-sprite-mesh@2.5.1(@types/three@0.182.0)(three@0.181.2)':
+ dependencies:
+ diet-sprite: 0.0.1
+ earcut: 2.2.4
+ maath: 0.10.8(@types/three@0.182.0)(three@0.181.2)
+ three: 0.181.2
+ three-instanced-uniforms-mesh: 0.52.4(three@0.181.2)
+ troika-three-utils: 0.52.4(three@0.181.2)
+ transitivePeerDependencies:
+ - '@types/three'
+
+ '@threlte/core@8.3.1(svelte@5.45.6)(three@0.181.2)':
+ dependencies:
+ mitt: 3.0.1
+ svelte: 5.45.6
+ three: 0.181.2
+
+ '@threlte/extras@9.7.1(@types/three@0.182.0)(svelte@5.45.6)(three@0.181.2)':
+ dependencies:
+ '@threejs-kit/instanced-sprite-mesh': 2.5.1(@types/three@0.182.0)(three@0.181.2)
+ camera-controls: 3.1.2(three@0.181.2)
+ svelte: 5.45.6
+ three: 0.181.2
+ three-mesh-bvh: 0.9.3(three@0.181.2)
+ three-perf: 1.0.11(three@0.181.2)
+ three-viewport-gizmo: 2.2.0(three@0.181.2)
+ troika-three-text: 0.52.4(three@0.181.2)
+ transitivePeerDependencies:
+ - '@types/three'
+
+ '@tweenjs/tween.js@23.1.3': {}
+
'@types/aria-query@5.0.4': {}
'@types/chai@5.2.3':
@@ -4738,12 +4889,26 @@ snapshots:
'@types/remarkable@2.0.8': {}
+ '@types/stats.js@0.17.4': {}
+
'@types/tedious@4.0.14':
dependencies:
'@types/node': 24.10.1
+ '@types/three@0.182.0':
+ dependencies:
+ '@dimforge/rapier3d-compat': 0.12.0
+ '@tweenjs/tween.js': 23.1.3
+ '@types/stats.js': 0.17.4
+ '@types/webxr': 0.5.24
+ '@webgpu/types': 0.1.68
+ fflate: 0.8.2
+ meshoptimizer: 0.22.0
+
'@types/unist@3.0.3': {}
+ '@types/webxr@0.5.24': {}
+
'@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
@@ -4945,6 +5110,8 @@ snapshots:
'@vue/shared@3.5.25': {}
+ '@webgpu/types@0.1.68': {}
+
acorn-import-attributes@1.9.5(acorn@8.15.0):
dependencies:
acorn: 8.15.0
@@ -5054,6 +5221,10 @@ snapshots:
baseline-browser-mapping@2.9.4: {}
+ bidi-js@1.0.3:
+ dependencies:
+ require-from-string: 2.0.2
+
binary-extensions@2.3.0: {}
brace-expansion@1.1.12:
@@ -5098,6 +5269,10 @@ snapshots:
callsites@3.1.0: {}
+ camera-controls@3.1.2(three@0.181.2):
+ dependencies:
+ three: 0.181.2
+
caniuse-lite@1.0.30001759: {}
ccount@2.0.1: {}
@@ -5412,6 +5587,8 @@ snapshots:
dependencies:
dequal: 2.0.3
+ diet-sprite@0.0.1: {}
+
dlv@1.1.3: {}
dom-accessibility-api@0.5.16: {}
@@ -5426,6 +5603,8 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
+ earcut@2.2.4: {}
+
eastasianwidth@0.2.0: {}
echarts@5.6.0:
@@ -5998,6 +6177,11 @@ snapshots:
lz-string@1.5.0: {}
+ maath@0.10.8(@types/three@0.182.0)(three@0.181.2):
+ dependencies:
+ '@types/three': 0.182.0
+ three: 0.181.2
+
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -6024,6 +6208,8 @@ snapshots:
unist-util-visit: 5.0.0
vfile: 6.0.3
+ meshoptimizer@0.22.0: {}
+
micromark-util-character@2.1.1:
dependencies:
micromark-util-symbol: 2.0.1
@@ -6061,6 +6247,8 @@ snapshots:
minipass@7.1.2: {}
+ mitt@3.0.1: {}
+
module-details-from-path@1.0.4: {}
mri@1.2.0: {}
@@ -6309,6 +6497,8 @@ snapshots:
argparse: 1.0.10
autolinker: 3.16.2
+ require-from-string@2.0.2: {}
+
require-in-the-middle@8.0.1:
dependencies:
debug: 4.4.3
@@ -6644,6 +6834,27 @@ snapshots:
the-new-css-reset@1.11.3: {}
+ three-instanced-uniforms-mesh@0.52.4(three@0.181.2):
+ dependencies:
+ three: 0.181.2
+ troika-three-utils: 0.52.4(three@0.181.2)
+
+ three-mesh-bvh@0.9.3(three@0.181.2):
+ dependencies:
+ three: 0.181.2
+
+ three-perf@1.0.11(three@0.181.2):
+ dependencies:
+ three: 0.181.2
+ troika-three-text: 0.52.4(three@0.181.2)
+ tweakpane: 3.1.10
+
+ three-viewport-gizmo@2.2.0(three@0.181.2):
+ dependencies:
+ three: 0.181.2
+
+ three@0.181.2: {}
+
tiny-glob@0.2.9:
dependencies:
globalyzer: 0.1.0
@@ -6700,6 +6911,20 @@ snapshots:
trim-lines@3.0.1: {}
+ troika-three-text@0.52.4(three@0.181.2):
+ dependencies:
+ bidi-js: 1.0.3
+ three: 0.181.2
+ troika-three-utils: 0.52.4(three@0.181.2)
+ troika-worker-utils: 0.52.0
+ webgl-sdf-generator: 1.1.1
+
+ troika-three-utils@0.52.4(three@0.181.2):
+ dependencies:
+ three: 0.181.2
+
+ troika-worker-utils@0.52.0: {}
+
ts-api-utils@2.1.0(typescript@5.9.3):
dependencies:
typescript: 5.9.3
@@ -6710,6 +6935,8 @@ snapshots:
tslib@2.8.1: {}
+ tweakpane@3.1.10: {}
+
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
@@ -6880,6 +7107,8 @@ snapshots:
dependencies:
xml-name-validator: 5.0.0
+ webgl-sdf-generator@1.1.1: {}
+
webidl-conversions@3.0.1: {}
webidl-conversions@7.0.0: {}
diff --git a/src/lib/components/billing/paymentModal.svelte b/src/lib/components/billing/paymentModal.svelte
index 92aec21a80..e881cd93ef 100644
--- a/src/lib/components/billing/paymentModal.svelte
+++ b/src/lib/components/billing/paymentModal.svelte
@@ -1,8 +1,13 @@
+
+
+
+
+
+
+

+
+
+
diff --git a/src/lib/components/promos/imagine.svg b/src/lib/components/promos/imagine.svg
new file mode 100644
index 0000000000..58e33f62c3
--- /dev/null
+++ b/src/lib/components/promos/imagine.svg
@@ -0,0 +1,61 @@
+
diff --git a/src/lib/components/promos/shader.svelte b/src/lib/components/promos/shader.svelte
new file mode 100644
index 0000000000..15ce230403
--- /dev/null
+++ b/src/lib/components/promos/shader.svelte
@@ -0,0 +1,109 @@
+
+
+
+
+
+
diff --git a/src/lib/components/promos/threlte/shaders/noise.glsl b/src/lib/components/promos/threlte/shaders/noise.glsl
new file mode 100644
index 0000000000..dea577c656
--- /dev/null
+++ b/src/lib/components/promos/threlte/shaders/noise.glsl
@@ -0,0 +1,166 @@
+//
+// psrddnoise3.glsl
+//
+// Authors: Stefan Gustavson (stefan.gustavson@gmail.com)
+// and Ian McEwan (ijm567@gmail.com)
+// Version 2021-12-02, published under the MIT license (see below)
+//
+// Copyright (c) 2021 Stefan Gustavson and Ian McEwan.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+//
+
+vec4 permute(vec4 i) {
+ vec4 im = mod(i, 289.0);
+ return mod(((im*34.0)+10.0)*im, 289.0);
+}
+
+float psrddnoise(vec3 x, vec3 period, float alpha, out vec3 gradient,
+ out vec3 dg, out vec3 dg2)
+{
+ const mat3 M = mat3(0.0, 1.0, 1.0,
+ 1.0, 0.0, 1.0,
+ 1.0, 1.0, 0.0);
+
+ const mat3 Mi = mat3(-0.5, 0.5, 0.5,
+ 0.5,-0.5, 0.5,
+ 0.5, 0.5,-0.5);
+
+ vec3 uvw;
+ uvw = M * x;
+
+ vec3 i0 = floor(uvw);
+ vec3 f0 = fract(uvw);
+
+ vec3 g_ = step(f0.xyx, f0.yzz);
+ vec3 l_ = 1.0 - g_;
+ vec3 g = vec3(l_.z, g_.xy);
+ vec3 l = vec3(l_.xy, g_.z);
+ vec3 o1 = min( g, l );
+ vec3 o2 = max( g, l );
+
+ vec3 i1 = i0 + o1;
+ vec3 i2 = i0 + o2;
+ vec3 i3 = i0 + vec3(1.0);
+
+ vec3 v0, v1, v2, v3;
+
+ v0 = Mi * i0;
+ v1 = Mi * i1;
+ v2 = Mi * i2;
+ v3 = Mi * i3;
+
+ vec3 x0 = x - v0;
+ vec3 x1 = x - v1;
+ vec3 x2 = x - v2;
+ vec3 x3 = x - v3;
+
+ if(any(greaterThan(period, vec3(0.0)))) {
+ vec4 vx = vec4(v0.x, v1.x, v2.x, v3.x);
+ vec4 vy = vec4(v0.y, v1.y, v2.y, v3.y);
+ vec4 vz = vec4(v0.z, v1.z, v2.z, v3.z);
+ if(period.x > 0.0) vx = mod(vx, period.x);
+ if(period.y > 0.0) vy = mod(vy, period.y);
+ if(period.z > 0.0) vz = mod(vz, period.z);
+ i0 = M * vec3(vx.x, vy.x, vz.x);
+ i1 = M * vec3(vx.y, vy.y, vz.y);
+ i2 = M * vec3(vx.z, vy.z, vz.z);
+ i3 = M * vec3(vx.w, vy.w, vz.w);
+ i0 = floor(i0 + 0.5);
+ i1 = floor(i1 + 0.5);
+ i2 = floor(i2 + 0.5);
+ i3 = floor(i3 + 0.5);
+ }
+
+ vec4 hash = permute( permute( permute(
+ vec4(i0.z, i1.z, i2.z, i3.z ))
+ + vec4(i0.y, i1.y, i2.y, i3.y ))
+ + vec4(i0.x, i1.x, i2.x, i3.x ));
+
+ vec4 theta = hash * 3.883222077;
+ vec4 sz = hash * -0.006920415 + 0.996539792;
+ vec4 psi = hash * 0.108705628 ;
+
+ vec4 Ct = cos(theta);
+ vec4 St = sin(theta);
+ vec4 sz_prime = sqrt( 1.0 - sz*sz );
+
+ vec4 gx, gy, gz;
+
+ if(alpha != 0.0) {
+ vec4 Sp = sin(psi);
+ vec4 Cp = cos(psi);
+
+ vec4 px = Ct * sz_prime;
+ vec4 py = St * sz_prime;
+ vec4 pz = sz;
+
+ vec4 Ctp = St*Sp - Ct*Cp;
+ vec4 qx = mix( Ctp*St, Sp, sz);
+ vec4 qy = mix(-Ctp*Ct, Cp, sz);
+ vec4 qz = -(py*Cp + px*Sp);
+
+ vec4 Sa = vec4(sin(alpha));
+ vec4 Ca = vec4(cos(alpha));
+
+ gx = Ca * px + Sa * qx;
+ gy = Ca * py + Sa * qy;
+ gz = Ca * pz + Sa * qz;
+ }
+ else {
+ gx = Ct * sz_prime;
+ gy = St * sz_prime;
+ gz = sz;
+ }
+
+ vec3 g0 = vec3(gx.x, gy.x, gz.x);
+ vec3 g1 = vec3(gx.y, gy.y, gz.y);
+ vec3 g2 = vec3(gx.z, gy.z, gz.z);
+ vec3 g3 = vec3(gx.w, gy.w, gz.w);
+
+ vec4 w = 0.5 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3));
+ w = max(w, 0.0);
+ vec4 w2 = w * w;
+ vec4 w3 = w2 * w;
+
+ vec4 gdotx = vec4(dot(g0,x0), dot(g1,x1), dot(g2,x2), dot(g3,x3));
+
+ float n = dot(w3, gdotx);
+
+ vec4 dw = -6.0 * w2 * gdotx;
+ vec3 dn0 = w3.x * g0 + dw.x * x0;
+ vec3 dn1 = w3.y * g1 + dw.y * x1;
+ vec3 dn2 = w3.z * g2 + dw.z * x2;
+ vec3 dn3 = w3.w * g3 + dw.w * x3;
+ gradient = 39.5 * (dn0 + dn1 + dn2 + dn3);
+
+ vec4 dw2 = 24.0 * w * gdotx;
+ vec3 dga0 = dw2.x * x0 * x0 - 6.0 * w2.x * (gdotx.x + 2.0 * g0 * x0);
+ vec3 dga1 = dw2.y * x1 * x1 - 6.0 * w2.y * (gdotx.y + 2.0 * g1 * x1);
+ vec3 dga2 = dw2.z * x2 * x2 - 6.0 * w2.z * (gdotx.z + 2.0 * g2 * x2);
+ vec3 dga3 = dw2.w * x3 * x3 - 6.0 * w2.w * (gdotx.w + 2.0 * g3 * x3);
+ dg = 35.0 * (dga0 + dga1 + dga2 + dga3);
+ vec3 dgb0 = dw2.x * x0 * x0.yzx - 6.0 * w2.x * (g0 * x0.yzx + g0.yzx * x0);
+ vec3 dgb1 = dw2.y * x1 * x1.yzx - 6.0 * w2.y * (g1 * x1.yzx + g1.yzx * x1);
+ vec3 dgb2 = dw2.z * x2 * x2.yzx - 6.0 * w2.z * (g2 * x2.yzx + g2.yzx * x2);
+ vec3 dgb3 = dw2.w * x3 * x3.yzx - 6.0 * w2.w * (g3 * x3.yzx + g3.yzx * x3);
+ dg2 = 39.5 * (dgb0 + dgb1 + dgb2 + dgb3);
+
+ return 39.5 * n;
+}
diff --git a/src/lib/components/sidebar.svelte b/src/lib/components/sidebar.svelte
index 5a95eeda1b..026901f1e5 100644
--- a/src/lib/components/sidebar.svelte
+++ b/src/lib/components/sidebar.svelte
@@ -309,7 +309,7 @@
{/if}
- {:else if $isSmallViewport}
+ {:else if $isTabletViewport}
diff --git a/src/lib/layout/shell.svelte b/src/lib/layout/shell.svelte
index 3dd1fd2109..7d2f4f04af 100644
--- a/src/lib/layout/shell.svelte
+++ b/src/lib/layout/shell.svelte
@@ -178,7 +178,8 @@
$: subNavigation = $page.data.subNavigation;
- $: isProjectPage = $page.route?.id?.includes('project-');
+ $: shouldRenderSidebar = !$isNewWizardStatusOpen && showSideNavigation;
+ $: hasSidebarSpace = shouldRenderSidebar && !$isTabletViewport && !!selectedProject;
$: {
if ($isSidebarOpen) {
@@ -210,7 +211,7 @@
{/if}
- {#if !$isNewWizardStatusOpen && isProjectPage}
+ {#if shouldRenderSidebar}
+ class:icons-content={state === 'icons' && selectedProject}
+ class:no-sidebar={!hasSidebarSpace}>