diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3b462cb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,23 @@
+node_modules
+
+# Output
+.output
+.vercel
+.netlify
+.wrangler
+/.svelte-kit
+/build
+
+# OS
+.DS_Store
+Thumbs.db
+
+# Env
+.env
+.env.*
+!.env.example
+!.env.test
+
+# Vite
+vite.config.js.timestamp-*
+vite.config.ts.timestamp-*
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000..b6f27f1
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1 @@
+engine-strict=true
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..75842c4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+# sv
+
+Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli).
+
+## Creating a project
+
+If you're seeing this, you've probably already done this step. Congrats!
+
+```sh
+# create a new project in the current directory
+npx sv create
+
+# create a new project in my-app
+npx sv create my-app
+```
+
+## Developing
+
+Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
+
+```sh
+npm run dev
+
+# or start the server and open the app in a new browser tab
+npm run dev -- --open
+```
+
+## Building
+
+To create a production version of your app:
+
+```sh
+npm run build
+```
+
+You can preview the production build with `npm run preview`.
+
+> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment.
diff --git a/app/package.json b/app/package.json
new file mode 100644
index 0000000..2d2a025
--- /dev/null
+++ b/app/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "stickers-app",
+ "version": "0.0.1",
+ "type": "module",
+ "scripts": {
+ "dev": "vite dev",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "devDependencies": {
+ "@sveltejs/adapter-auto": "^4.0.0",
+ "@sveltejs/kit": "^2.21.0",
+ "@sveltejs/vite-plugin-svelte": "^5.0.0",
+ "svelte": "^5.0.0",
+ "vite": "^6.0.0"
+ }
+}
diff --git a/app/src/app.html b/app/src/app.html
new file mode 100644
index 0000000..40b3466
--- /dev/null
+++ b/app/src/app.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ %sveltekit.head%
+
+
+ %sveltekit.body%
+
+
diff --git a/app/src/routes/+page.svelte b/app/src/routes/+page.svelte
new file mode 100644
index 0000000..e69de29
diff --git a/app/svelte.config.js b/app/svelte.config.js
new file mode 100644
index 0000000..b42b17b
--- /dev/null
+++ b/app/svelte.config.js
@@ -0,0 +1,10 @@
+import adapter from '@sveltejs/adapter-auto';
+
+/** @type {import('@sveltejs/kit').Config} */
+const config = {
+ kit: {
+ adapter: adapter()
+ }
+};
+
+export default config;
diff --git a/app/vite.config.js b/app/vite.config.js
new file mode 100644
index 0000000..3406f32
--- /dev/null
+++ b/app/vite.config.js
@@ -0,0 +1,6 @@
+import { sveltekit } from '@sveltejs/kit/vite';
+import { defineConfig } from 'vite';
+
+export default defineConfig({
+ plugins: [sveltekit()]
+});
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..4307231
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1640 @@
+{
+ "name": "stickers",
+ "version": "0.0.1",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "stickers",
+ "version": "0.0.1",
+ "dependencies": {
+ "flubber": "^0.4.2"
+ },
+ "devDependencies": {
+ "@sveltejs/adapter-auto": "^7.0.0",
+ "@sveltejs/kit": "^2.48.5",
+ "@sveltejs/vite-plugin-svelte": "^6.2.1",
+ "svelte": "^5.43.8",
+ "svelte-check": "^4.3.4",
+ "typescript": "^5.9.3",
+ "vite": "^7.2.2"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@polka/url": {
+ "version": "1.0.0-next.29",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
+ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz",
+ "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz",
+ "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz",
+ "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz",
+ "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz",
+ "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz",
+ "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz",
+ "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz",
+ "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz",
+ "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz",
+ "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz",
+ "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz",
+ "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz",
+ "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz",
+ "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz",
+ "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz",
+ "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz",
+ "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz",
+ "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz",
+ "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz",
+ "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz",
+ "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz",
+ "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@standard-schema/spec": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
+ "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sveltejs/acorn-typescript": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.8.tgz",
+ "integrity": "sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^8.9.0"
+ }
+ },
+ "node_modules/@sveltejs/adapter-auto": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-7.0.0.tgz",
+ "integrity": "sha512-ImDWaErTOCkRS4Gt+5gZuymKFBobnhChXUZ9lhUZLahUgvA4OOvRzi3sahzYgbxGj5nkA6OV0GAW378+dl/gyw==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@sveltejs/kit": "^2.0.0"
+ }
+ },
+ "node_modules/@sveltejs/kit": {
+ "version": "2.49.1",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.49.1.tgz",
+ "integrity": "sha512-vByReCTTdlNM80vva8alAQC80HcOiHLkd8XAxIiKghKSHcqeNfyhp3VsYAV8VSiPKu4Jc8wWCfsZNAIvd1uCqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@standard-schema/spec": "^1.0.0",
+ "@sveltejs/acorn-typescript": "^1.0.5",
+ "@types/cookie": "^0.6.0",
+ "acorn": "^8.14.1",
+ "cookie": "^0.6.0",
+ "devalue": "^5.3.2",
+ "esm-env": "^1.2.2",
+ "kleur": "^4.1.5",
+ "magic-string": "^0.30.5",
+ "mrmime": "^2.0.0",
+ "sade": "^1.8.1",
+ "set-cookie-parser": "^2.6.0",
+ "sirv": "^3.0.0"
+ },
+ "bin": {
+ "svelte-kit": "svelte-kit.js"
+ },
+ "engines": {
+ "node": ">=18.13"
+ },
+ "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",
+ "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0"
+ },
+ "peerDependenciesMeta": {
+ "@opentelemetry/api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@sveltejs/vite-plugin-svelte": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz",
+ "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0",
+ "debug": "^4.4.1",
+ "deepmerge": "^4.3.1",
+ "magic-string": "^0.30.17",
+ "vitefu": "^1.1.1"
+ },
+ "engines": {
+ "node": "^20.19 || ^22.12 || >=24"
+ },
+ "peerDependencies": {
+ "svelte": "^5.0.0",
+ "vite": "^6.3.0 || ^7.0.0"
+ }
+ },
+ "node_modules/@sveltejs/vite-plugin-svelte-inspector": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.1.tgz",
+ "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.1"
+ },
+ "engines": {
+ "node": "^20.19 || ^22.12 || >=24"
+ },
+ "peerDependencies": {
+ "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0",
+ "svelte": "^5.0.0",
+ "vite": "^6.3.0 || ^7.0.0"
+ }
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "license": "MIT"
+ },
+ "node_modules/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/d3-array": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+ "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/d3-polygon": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz",
+ "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/devalue": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.5.0.tgz",
+ "integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/earcut": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
+ "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==",
+ "license": "ISC"
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.12",
+ "@esbuild/android-arm": "0.25.12",
+ "@esbuild/android-arm64": "0.25.12",
+ "@esbuild/android-x64": "0.25.12",
+ "@esbuild/darwin-arm64": "0.25.12",
+ "@esbuild/darwin-x64": "0.25.12",
+ "@esbuild/freebsd-arm64": "0.25.12",
+ "@esbuild/freebsd-x64": "0.25.12",
+ "@esbuild/linux-arm": "0.25.12",
+ "@esbuild/linux-arm64": "0.25.12",
+ "@esbuild/linux-ia32": "0.25.12",
+ "@esbuild/linux-loong64": "0.25.12",
+ "@esbuild/linux-mips64el": "0.25.12",
+ "@esbuild/linux-ppc64": "0.25.12",
+ "@esbuild/linux-riscv64": "0.25.12",
+ "@esbuild/linux-s390x": "0.25.12",
+ "@esbuild/linux-x64": "0.25.12",
+ "@esbuild/netbsd-arm64": "0.25.12",
+ "@esbuild/netbsd-x64": "0.25.12",
+ "@esbuild/openbsd-arm64": "0.25.12",
+ "@esbuild/openbsd-x64": "0.25.12",
+ "@esbuild/openharmony-arm64": "0.25.12",
+ "@esbuild/sunos-x64": "0.25.12",
+ "@esbuild/win32-arm64": "0.25.12",
+ "@esbuild/win32-ia32": "0.25.12",
+ "@esbuild/win32-x64": "0.25.12"
+ }
+ },
+ "node_modules/esm-env": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
+ "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/esrap": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.1.tgz",
+ "integrity": "sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/flubber": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/flubber/-/flubber-0.4.2.tgz",
+ "integrity": "sha512-79RkJe3rA4nvRCVc2uXjj7U/BAUq84TS3KHn6c0Hr9K64vhj83ZNLUziNx4pJoBumSPhOl5VjH+Z0uhi+eE8Uw==",
+ "license": "MIT",
+ "dependencies": {
+ "d3-array": "^1.2.0",
+ "d3-polygon": "^1.0.3",
+ "earcut": "^2.1.1",
+ "svg-path-properties": "^0.2.1",
+ "svgpath": "^2.2.1",
+ "topojson-client": "^3.0.0"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/is-reference": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
+ "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.6"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/locate-character": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
+ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz",
+ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.53.3",
+ "@rollup/rollup-android-arm64": "4.53.3",
+ "@rollup/rollup-darwin-arm64": "4.53.3",
+ "@rollup/rollup-darwin-x64": "4.53.3",
+ "@rollup/rollup-freebsd-arm64": "4.53.3",
+ "@rollup/rollup-freebsd-x64": "4.53.3",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.53.3",
+ "@rollup/rollup-linux-arm-musleabihf": "4.53.3",
+ "@rollup/rollup-linux-arm64-gnu": "4.53.3",
+ "@rollup/rollup-linux-arm64-musl": "4.53.3",
+ "@rollup/rollup-linux-loong64-gnu": "4.53.3",
+ "@rollup/rollup-linux-ppc64-gnu": "4.53.3",
+ "@rollup/rollup-linux-riscv64-gnu": "4.53.3",
+ "@rollup/rollup-linux-riscv64-musl": "4.53.3",
+ "@rollup/rollup-linux-s390x-gnu": "4.53.3",
+ "@rollup/rollup-linux-x64-gnu": "4.53.3",
+ "@rollup/rollup-linux-x64-musl": "4.53.3",
+ "@rollup/rollup-openharmony-arm64": "4.53.3",
+ "@rollup/rollup-win32-arm64-msvc": "4.53.3",
+ "@rollup/rollup-win32-ia32-msvc": "4.53.3",
+ "@rollup/rollup-win32-x64-gnu": "4.53.3",
+ "@rollup/rollup-win32-x64-msvc": "4.53.3",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/sade": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mri": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/set-cookie-parser": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
+ "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/sirv": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
+ "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@polka/url": "^1.0.0-next.24",
+ "mrmime": "^2.0.0",
+ "totalist": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svelte": {
+ "version": "5.45.5",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.45.5.tgz",
+ "integrity": "sha512-2074U+vObO5Zs8/qhxtBwdi6ZXNIhEBTzNmUFjiZexLxTdt9vq96D/0pnQELl6YcpLMD7pZ2dhXKByfGS8SAdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/remapping": "^2.3.4",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@sveltejs/acorn-typescript": "^1.0.5",
+ "@types/estree": "^1.0.5",
+ "acorn": "^8.12.1",
+ "aria-query": "^5.3.1",
+ "axobject-query": "^4.1.0",
+ "clsx": "^2.1.1",
+ "devalue": "^5.5.0",
+ "esm-env": "^1.2.1",
+ "esrap": "^2.2.1",
+ "is-reference": "^3.0.3",
+ "locate-character": "^3.0.0",
+ "magic-string": "^0.30.11",
+ "zimmerframe": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/svelte-check": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.4.tgz",
+ "integrity": "sha512-DVWvxhBrDsd+0hHWKfjP99lsSXASeOhHJYyuKOFYJcP7ThfSCKgjVarE8XfuMWpS5JV3AlDf+iK1YGGo2TACdw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "chokidar": "^4.0.1",
+ "fdir": "^6.2.0",
+ "picocolors": "^1.0.0",
+ "sade": "^1.7.4"
+ },
+ "bin": {
+ "svelte-check": "bin/svelte-check"
+ },
+ "engines": {
+ "node": ">= 18.0.0"
+ },
+ "peerDependencies": {
+ "svelte": "^4.0.0 || ^5.0.0-next.0",
+ "typescript": ">=5.0.0"
+ }
+ },
+ "node_modules/svg-path-properties": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/svg-path-properties/-/svg-path-properties-0.2.2.tgz",
+ "integrity": "sha512-GmrB+b6woz6CCdQe6w1GHs/1lt25l7SR5hmhF8jRdarpv/OgjLyuQygLu1makJapixeb1aQhP/Oa1iKi93o/aQ==",
+ "license": "ISC"
+ },
+ "node_modules/svgpath": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/svgpath/-/svgpath-2.6.0.tgz",
+ "integrity": "sha512-OIWR6bKzXvdXYyO4DK/UWa1VA1JeKq8E+0ug2DG98Y/vOmMpfZNj+TIG988HjfYSqtcy/hFOtZq/n/j5GSESNg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/fontello/svg2ttf?sponsor=1"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/topojson-client": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz",
+ "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==",
+ "license": "ISC",
+ "dependencies": {
+ "commander": "2"
+ },
+ "bin": {
+ "topo2geo": "bin/topo2geo",
+ "topomerge": "bin/topomerge",
+ "topoquantize": "bin/topoquantize"
+ }
+ },
+ "node_modules/totalist": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/vite": {
+ "version": "7.2.6",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.6.tgz",
+ "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.25.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitefu": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz",
+ "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==",
+ "dev": true,
+ "license": "MIT",
+ "workspaces": [
+ "tests/deps/*",
+ "tests/projects/*",
+ "tests/projects/workspace/packages/*"
+ ],
+ "peerDependencies": {
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/zimmerframe": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz",
+ "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==",
+ "dev": true,
+ "license": "MIT"
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..027ad5e
--- /dev/null
+++ b/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "stickers",
+ "private": true,
+ "version": "0.0.1",
+ "type": "module",
+ "scripts": {
+ "dev": "vite dev",
+ "build": "vite build",
+ "preview": "vite preview",
+ "prepare": "svelte-kit sync || echo ''",
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
+ },
+ "devDependencies": {
+ "@sveltejs/adapter-auto": "^7.0.0",
+ "@sveltejs/kit": "^2.48.5",
+ "@sveltejs/vite-plugin-svelte": "^6.2.1",
+ "svelte": "^5.43.8",
+ "svelte-check": "^4.3.4",
+ "typescript": "^5.9.3",
+ "vite": "^7.2.2"
+ },
+ "dependencies": {
+ "flubber": "^0.4.2"
+ }
+}
diff --git a/src/app.d.ts b/src/app.d.ts
new file mode 100644
index 0000000..da08e6d
--- /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..f273cc5
--- /dev/null
+++ b/src/app.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+ %sveltekit.head%
+
+
+ %sveltekit.body%
+
+
diff --git a/src/lib/assets/favicon.svg b/src/lib/assets/favicon.svg
new file mode 100644
index 0000000..38c2a68
--- /dev/null
+++ b/src/lib/assets/favicon.svg
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/lib/assets/fonts/DepartureMono-Regular.woff b/src/lib/assets/fonts/DepartureMono-Regular.woff
new file mode 100644
index 0000000..b7bb672
Binary files /dev/null and b/src/lib/assets/fonts/DepartureMono-Regular.woff differ
diff --git a/src/lib/components/Peelable.svelte b/src/lib/components/Peelable.svelte
new file mode 100644
index 0000000..8fa1558
--- /dev/null
+++ b/src/lib/components/Peelable.svelte
@@ -0,0 +1,290 @@
+
+
+
+
+ {#if topContent}
+ {@render topContent()}
+ {/if}
+
+
+ {#if backContent}
+ {@render backContent()}
+ {/if}
+
+
+ {#if bottomContent}
+ {@render bottomContent()}
+ {/if}
+
+
+
+
diff --git a/src/lib/index.ts b/src/lib/index.ts
new file mode 100644
index 0000000..856f2b6
--- /dev/null
+++ b/src/lib/index.ts
@@ -0,0 +1 @@
+// place files you want to import through the `$lib` alias in this folder.
diff --git a/src/lib/peel.js b/src/lib/peel.js
new file mode 100644
index 0000000..c288db3
--- /dev/null
+++ b/src/lib/peel.js
@@ -0,0 +1,987 @@
+(function(win) {
+ var PRECISION = 1e2;
+ var VENDOR_PREFIXES = ['webkit','moz', ''];
+ var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
+ var CSS_PREFIX = 'peel-';
+ var clipProperty, transformProperty, boxShadowProperty, filterProperty;
+ var backgroundGradientSupport;
+ var docEl = document.documentElement;
+ var style = docEl.style;
+
+ function getCssProperty(name) {
+ var prefix, str;
+ for (var i = 0; i < VENDOR_PREFIXES.length; i++) {
+ prefix = VENDOR_PREFIXES[i];
+ str = prefix ? prefix + capitalize(name) : name;
+ if (str in style) {
+ return str;
+ }
+ }
+ }
+
+ function setCssProperties() {
+ clipProperty = getCssProperty('clipPath');
+ transformProperty = getCssProperty('transform');
+ boxShadowProperty = getCssProperty('boxShadow');
+ filterProperty = getCssProperty('filter');
+ setBackgroundGradientSupport();
+ Peel.supported = !!(clipProperty && transformProperty);
+ Peel.effectsSupported = backgroundGradientSupport;
+ }
+
+ function setBackgroundGradientSupport() {
+ var el = document.createElement('div');
+ var style = el.style;
+ style.cssText = 'background:linear-gradient(45deg,,white);';
+ backgroundGradientSupport = (style.backgroundImage || '').indexOf('gradient') > -1;
+ }
+
+ function round(n) {
+ return Math.round(n * PRECISION) / PRECISION;
+ }
+
+ function clamp(n) {
+ return Math.max(0, Math.min(1, n));
+ }
+
+ function normalize(n, min, max) {
+ return (n - min) / (max - min);
+ }
+
+ function distribute(t, mult) {
+ return (mult || 1) * 2 * (.5 - Math.abs(t - .5));
+ }
+
+ function capitalize(str) {
+ return str.slice(0,1).toUpperCase() + str.slice(1);
+ }
+
+ function camelize(str) {
+ return str.replace(/-(\w)/g, function(a, b) {
+ return b.toUpperCase();
+ });
+ }
+
+ function prefix(str) {
+ return CSS_PREFIX + str;
+ }
+
+ function setCSSClip(el, clip) {
+ el.style[clipProperty] = clip;
+ }
+
+ function setTransform(el, t) {
+ el.style[transformProperty] = t;
+ }
+
+ function setBoxShadow(el, x, y, blur, spread, intensity) {
+ el.style[boxShadowProperty] = getShadowCss(x, y, blur, spread, intensity);
+ }
+
+ function setDropShadow(el, x, y, blur, intensity) {
+ el.style[filterProperty] = 'drop-shadow(' + getShadowCss(x, y, blur, null, intensity) + ')';
+ }
+
+ function getShadowCss(x, y, blur, spread, intensity) {
+ return round(x) + 'px ' +
+ round(y) + 'px ' +
+ round(blur) + 'px ' +
+ (spread ? round(spread) + 'px ' : '') +
+ 'rgba(0,0,0,' + round(intensity) + ')';
+ }
+
+ function setOpacity(el, t) {
+ el.style.opacity = t;
+ }
+
+ function setBackgroundGradient(el, rotation, stops) {
+ if (!backgroundGradientSupport) return;
+ var css;
+ if (stops.length === 0) {
+ css = 'none';
+ } else {
+ css = 'linear-gradient(' + round(rotation) + 'deg,' + stops.join(',') + ')';
+ }
+ el.style.backgroundImage = css;
+ }
+
+ function addEvent(el, type, fn) {
+ el.addEventListener(type, fn)
+ }
+
+ function removeEvent(el, type, fn) {
+ el.removeEventListener(type, fn);
+ }
+
+ function getEventCoordinates(evt, el) {
+ var pos = evt.changedTouches ? evt.changedTouches[0] : evt;
+ return {
+ 'x': pos.clientX - el.offsetLeft + window.scrollX,
+ 'y': pos.clientY - el.offsetTop + window.scrollY
+ }
+ }
+
+ function bindWithEvent(fn, scope, arg1, arg2) {
+ return function(evt) {
+ fn.call(scope, evt, arg1, arg2);
+ }
+ }
+
+ function getBlackStop(a, pos) {
+ return getColorStop(0, 0, 0, a, pos);
+ }
+
+ function getWhiteStop(a, pos) {
+ return getColorStop(255, 255, 255, a, pos);
+ }
+
+ function getColorStop(r, g, b, a, pos) {
+ a = round(clamp(a));
+ return 'rgba('+ r +','+ g +','+ b +','+ a +') ' + round(pos * 100) + '%';
+ }
+
+ function getElement(obj, node) {
+ if (typeof obj === 'string') {
+ obj = (node || document).querySelector(obj);
+ }
+ return obj;
+ }
+
+ function createElement(parent, className) {
+ var el = document.createElement('div');
+ addClass(el, className);
+ parent.appendChild(el);
+ return el;
+ }
+
+ function removeClass(el, str) {
+ el.classList.remove(str);
+ }
+
+ function addClass(el, str) {
+ el.classList.add(str);
+ }
+
+ function getZIndex(el) {
+ return el.style.zIndex;
+ }
+
+ function setZIndex(el, index) {
+ el.style.zIndex = index;
+ }
+
+ function createSVGElement(tag, parent, attributes) {
+ parent = parent || docEl;
+ var el = document.createElementNS(SVG_NAMESPACE, tag);
+ parent.appendChild(el);
+ for (var key in attributes) {
+ if (!attributes.hasOwnProperty(key)) continue;
+ setSVGAttribute(el, key, attributes[key]);
+ }
+ return el;
+ }
+
+ function setSVGAttribute(el, key, value) {
+ el.setAttributeNS(null, key, value);
+ }
+
+ function Peel (el, opt) {
+ this.setOptions(opt);
+ this.el = getElement(el, docEl);
+ this.constraints = [];
+ this.events = [];
+ this.setupLayers();
+ this.setupDimensions();
+ this.setCorner(this.getOption('corner'));
+ this.setMode(this.getOption('mode'));
+ this.init();
+ }
+
+ Peel.Corners = {
+ TOP_LEFT: 0x0,
+ TOP_RIGHT: 0x1,
+ BOTTOM_LEFT: 0x2,
+ BOTTOM_RIGHT: 0x3
+ }
+
+ Peel.Defaults = {
+ 'topShadow': true,
+ 'topShadowBlur': 5,
+ 'topShadowAlpha': .5,
+ 'topShadowOffsetX': 0,
+ 'topShadowOffsetY': 1,
+ 'topShadowCreatesShape': true,
+ 'backReflection': false,
+ 'backReflectionSize': .02,
+ 'backReflectionOffset': 0,
+ 'backReflectionAlpha': .15,
+ 'backReflectionDistribute': true,
+ 'backShadow': true,
+ 'backShadowSize': .04,
+ 'backShadowOffset': 0,
+ 'backShadowAlpha': .1,
+ 'backShadowDistribute': true,
+ 'bottomShadow': true,
+ 'bottomShadowSize': 1.5,
+ 'bottomShadowOffset': 0,
+ 'bottomShadowDarkAlpha': .7,
+ 'bottomShadowLightAlpha': .1,
+ 'bottomShadowDistribute': true,
+ 'setPeelOnInit': true,
+ 'clippingBoxScale': 4,
+ 'flipConstraintOffset': 5,
+ 'dragPreventsDefault': true
+ }
+
+ Peel.prototype.setCorner = function() {
+ var args = arguments;
+ if (args[0] === undefined) {
+ args = [Peel.Corners.BOTTOM_RIGHT];
+ } else if (args[0].length) {
+ args = args[0];
+ }
+ this.corner = this.getPointOrCorner(args);
+ }
+
+ Peel.prototype.setMode = function(mode) {
+ if (mode === 'book') {
+ this.addPeelConstraint(Peel.Corners.BOTTOM_LEFT);
+ this.addPeelConstraint(Peel.Corners.TOP_LEFT);
+ this.setOption('backReflection', false);
+ this.setOption('backShadowDistribute', false);
+ this.setOption('bottomShadowDistribute', false);
+ } else if (mode === 'calendar') {
+ this.addPeelConstraint(Peel.Corners.TOP_RIGHT);
+ this.addPeelConstraint(Peel.Corners.TOP_LEFT);
+ }
+ }
+
+ Peel.prototype.setPeelPath = function(x1, y1) {
+ var args = arguments, p1, p2, c1, c2;
+ p1 = new Point(x1, y1);
+ if (args.length === 4) {
+ p2 = new Point(args[2], args[3]);
+ this.path = new LineSegment(p1, p2);
+ } else if (args.length === 8) {
+ c1 = new Point(args[2], args[3]);
+ c2 = new Point(args[4], args[5]);
+ p2 = new Point(args[6], args[7]);
+ this.path = new BezierCurve(p1, c1, c2, p2);
+ }
+ }
+
+ Peel.prototype.handleDrag = function(fn, el) {
+ this.dragHandler = fn;
+ this.setupDragEvents(el);
+ }
+
+ Peel.prototype.handlePress = function(fn, el) {
+ this.pressHandler = fn;
+ this.setupDragEvents(el);
+ }
+
+ Peel.prototype.setupDragEvents = function(el) {
+ var self = this, isDragging, moveName, endName;
+ if (this.dragEventsSetup) {
+ return;
+ }
+ el = el || this.el;
+
+ function dragStart (touch, evt) {
+ if (self.getOption('dragPreventsDefault')) {
+ evt.preventDefault();
+ }
+ moveName = touch ? 'touchmove' : 'mousemove';
+ endName = touch ? 'touchend' : 'mouseup';
+ addEvent(docEl, moveName, dragMove);
+ addEvent(docEl, endName, dragEnd);
+ isDragging = false;
+ }
+
+ function dragMove (evt) {
+ if (self.dragHandler) {
+ callHandler(self.dragHandler, evt);
+ }
+ isDragging = true;
+ }
+
+ function dragEnd(evt) {
+ if (!isDragging && self.pressHandler) {
+ callHandler(self.pressHandler, evt);
+ }
+ removeEvent(docEl, moveName, dragMove);
+ removeEvent(docEl, endName, dragEnd);
+ }
+
+ function callHandler(fn, evt) {
+ var coords = getEventCoordinates(evt, self.el);
+ fn.call(self, evt, coords.x, coords.y);
+ }
+
+ this.addEvent(el, 'mousedown', dragStart.bind(this, false));
+ this.addEvent(el, 'touchstart', dragStart.bind(this, true));
+ this.dragEventsSetup = true;
+ }
+
+ Peel.prototype.removeEvents = function() {
+ this.events.forEach(function(e, i) {
+ removeEvent(e.el, e.type, e.handler);
+ });
+ this.events = [];
+ }
+
+ Peel.prototype.setTimeAlongPath = function(t) {
+ t = clamp(t);
+ var point = this.path.getPointForTime(t);
+ this.timeAlongPath = t;
+ this.setPeelPosition(point.x, point.y);
+ }
+
+ Peel.prototype.setFadeThreshold = function(n) {
+ this.fadeThreshold = n;
+ }
+
+ Peel.prototype.setPeelPosition = function() {
+ var pos = this.getPointOrCorner(arguments);
+ pos = this.getConstrainedPeelPosition(pos);
+ if (!pos) {
+ return;
+ }
+ this.peelLineSegment = this.getPeelLineSegment(pos);
+ this.peelLineRotation = this.peelLineSegment.getAngle();
+ this.setClipping();
+ this.setBackTransform(pos);
+ this.setEffects();
+ }
+
+ Peel.prototype.addPeelConstraint = function() {
+ var p = this.getPointOrCorner(arguments);
+ var radius = this.corner.subtract(p).getLength();
+ this.constraints.push(new Circle(p, radius));
+ this.calculateFlipConstraint();
+ }
+
+ Peel.prototype.setOption = function(key, value) {
+ this.options[key] = value;
+ }
+
+ Peel.prototype.getOption = function(key) {
+ return this.options[camelize(key)];
+ }
+
+ Peel.prototype.getAmountClipped = function() {
+ var topArea = this.getTopClipArea();
+ var totalArea = this.width * this.height;
+ return normalize(topArea, totalArea, 0);
+ }
+
+ Peel.prototype.addEvent = function(el, type, fn) {
+ addEvent(el, type, fn);
+ this.events.push({
+ el: el,
+ type: type,
+ handler: fn
+ });
+ return fn;
+ }
+
+ Peel.prototype.getTopClipArea = function() {
+ var top = new Polygon();
+ this.elementBox.forEach(function(side) {
+ this.distributeLineByPeelLine(side, top);
+ }, this);
+ return Polygon.getArea(top.getPoints());
+ }
+
+ Peel.prototype.calculateFlipConstraint = function() {
+ var corner = this.corner, arr = this.constraints.concat();
+ this.flipConstraint = arr.sort(function(a, b) {
+ var aY = corner.y - a.center.y;
+ var bY = corner.y - b.center.y;
+ return a - b;
+ })[0];
+ }
+
+ Peel.prototype.dragStart = function(evt, type, fn) {}
+
+ Peel.prototype.fireHandler = function(evt, fn) {
+ var coords = getEventCoordinates(evt, this.el);
+ fn.call(this, evt, coords.x, coords.y);
+ }
+
+ Peel.prototype.setClipping = function() {
+ var top = new Polygon();
+ var back = new Polygon();
+ this.clippingBox.forEach(function(side) {
+ this.distributeLineByPeelLine(side, top, back);
+ }, this);
+ this.topClip.setPoints(top.getPoints());
+ this.backClip.setPoints(back.getPoints());
+ }
+
+ Peel.prototype.distributeLineByPeelLine = function(seg, poly1, poly2) {
+ var intersect = this.peelLineSegment.getIntersectPoint(seg);
+ this.distributePointByPeelLine(seg.p1, poly1, poly2);
+ this.distributePointByPeelLine(intersect, poly1, poly2);
+ }
+
+ Peel.prototype.distributePointByPeelLine = function(p, poly1, poly2) {
+ if (!p) return;
+ var d = this.peelLineSegment.getPointDeterminant(p);
+ if (d <= 0) {
+ poly1.addPoint(p);
+ }
+ if (d >= 0 && poly2) {
+ poly2.addPoint(this.flipPointHorizontally(p));
+ }
+ }
+
+ Peel.prototype.setOptions = function(opt) {
+ var options = opt || {}, defaults = Peel.Defaults;
+ for (var key in defaults) {
+ if (!defaults.hasOwnProperty(key) || key in options) {
+ continue;
+ }
+ options[key] = defaults[key];
+ }
+ this.options = options;
+ }
+
+ Peel.prototype.findOrCreateLayer = function(id, parent, zIndex) {
+ var optId = id + '-element';
+ var domId = prefix(id);
+ var el = getElement(this.getOption(optId) || '.' + domId, parent);
+ if (!el) {
+ el = createElement(parent, domId);
+ }
+ addClass(el, prefix('layer'));
+ setZIndex(el, zIndex);
+ return el;
+ }
+
+ Peel.prototype.getPointOrCorner = function(args) {
+ if (args.length === 2) {
+ return new Point(args[0], args[1]);
+ } else if(typeof args[0] === 'number') {
+ return this.getCornerPoint(args[0]);
+ }
+ return args[0];
+ }
+
+ Peel.prototype.getCornerPoint = function(id) {
+ var x = +!!(id & 1) * this.width;
+ var y = +!!(id & 2) * this.height;
+ return new Point(x, y);
+ }
+
+ Peel.prototype.getOptionalShape = function() {
+ var shapes = ['rect', 'polygon', 'path', 'circle'], found;
+ shapes.some(function(type) {
+ var attr = this.getOption(type), obj;
+ if (attr) {
+ obj = {};
+ obj.attributes = attr;
+ obj.type = type;
+ found = obj;
+ }
+ return found;
+ }, this);
+ return found;
+ }
+
+ Peel.prototype.setupLayers = function() {
+ var shape = this.getOptionalShape();
+ var topInnerLayer = this.topLayer = this.findOrCreateLayer('top', this.el, 2);
+ var backInnerLayer = this.backLayer = this.findOrCreateLayer('back', this.el, 3);
+ this.bottomLayer = this.findOrCreateLayer('bottom', this.el, 1);
+
+ if (shape) {
+ this.topLayer = this.wrapShapeLayer(this.topLayer, 'top-outer-clip');
+ this.backLayer = this.wrapShapeLayer(this.backLayer, 'back-outer-clip');
+ this.topShapeClip = new SVGClip(topInnerLayer, shape);
+ this.backShapeClip = new SVGClip(backInnerLayer, shape);
+ this.bottomShapeClip = new SVGClip(this.bottomLayer, shape);
+ if (this.getOption('topShadowCreatesShape')) {
+ this.topShadowElement = this.setupDropShadow(shape, topInnerLayer);
+ }
+ } else {
+ this.topShadowElement = this.findOrCreateLayer('top-shadow', topInnerLayer, 1);
+ }
+
+ this.topClip = new SVGClip(this.topLayer);
+ this.backClip = new SVGClip(this.backLayer);
+ this.backShadowElement = this.findOrCreateLayer('back-shadow', backInnerLayer, 1);
+ this.backReflectionElement = this.findOrCreateLayer('back-reflection', backInnerLayer, 2);
+ this.bottomShadowElement = this.findOrCreateLayer('bottom-shadow', this.bottomLayer, 1);
+ this.usesBoxShadow = !shape;
+ }
+
+ Peel.prototype.setupDropShadow = function(shape, parent) {
+ var svg = createSVGElement('svg', parent, {
+ 'class': prefix('layer')
+ });
+ createSVGElement(shape.type, svg, shape.attributes);
+ return svg;
+ }
+
+ Peel.prototype.wrapShapeLayer = function(el, id) {
+ var zIndex = getZIndex(el);
+ addClass(el, prefix('shape-layer'));
+ var outerLayer = this.findOrCreateLayer(id, this.el, zIndex);
+ outerLayer.appendChild(el);
+ return outerLayer;
+ }
+
+ Peel.prototype.setupDimensions = function() {
+ this.width = this.el.offsetWidth;
+ this.height = this.el.offsetHeight;
+ this.center = new Point(this.width / 2, this.height / 2);
+ this.elementBox = this.getScaledBox(1);
+ this.clippingBox = this.getScaledBox(this.getOption('clippingBoxScale'));
+ }
+
+ Peel.prototype.getScaledBox = function(scale) {
+ var brScale = scale;
+ var tlScale = scale - 1;
+ var tl = new Point(-this.width * tlScale, -this.height * tlScale);
+ var tr = new Point( this.width * brScale, -this.height * tlScale);
+ var br = new Point( this.width * brScale, this.height * brScale);
+ var bl = new Point(-this.width * tlScale, this.height * brScale);
+ return [
+ new LineSegment(tl, tr),
+ new LineSegment(tr, br),
+ new LineSegment(br, bl),
+ new LineSegment(bl, tl)
+ ];
+ }
+
+ Peel.prototype.getConstrainedPeelPosition = function(pos) {
+ this.constraints.forEach(function(area) {
+ var offset = this.getFlipConstraintOffset(area, pos);
+ if (offset) {
+ area = new Circle(area.center, area.radius - offset);
+ }
+ pos = area.constrainPoint(pos);
+ }, this);
+ return pos;
+ }
+
+ Peel.prototype.getFlipConstraintOffset = function(area, pos) {
+ var offset = this.getOption('flipConstraintOffset');
+ if (area === this.flipConstraint && offset) {
+ var cornerToCenter = this.corner.subtract(this.center);
+ var cornerToConstraint = this.corner.subtract(area.center);
+ var baseAngle = cornerToConstraint.getAngle();
+ var nCornerToConstraint = cornerToConstraint.rotate(-baseAngle);
+ var nPosToConstraint = pos.subtract(area.center).rotate(-baseAngle);
+ if (cornerToCenter.x * cornerToCenter.y < 0) {
+ nPosToConstraint.y *= -1;
+ }
+ if (nPosToConstraint.x > 0 && nPosToConstraint.y > 0) {
+ return normalize(nPosToConstraint.getAngle(), 45, 0) * offset;
+ }
+ }
+ }
+
+ Peel.prototype.getPeelLineSegment = function(point) {
+ var halfToCorner = this.corner.subtract(point).scale(.5);
+ var midpoint = point.add(halfToCorner);
+ if (halfToCorner.x === 0 && halfToCorner.y === 0) {
+ halfToCorner = point.subtract(this.center);
+ }
+ var l = halfToCorner.getLength()
+ var mult = (Math.max(this.width, this.height) / l) * 10;
+ var half = halfToCorner.rotate(-90).scale(mult);
+ var p1 = midpoint.add(half);
+ var p2 = midpoint.subtract(half);
+ return new LineSegment(p1, p2);
+ }
+
+ Peel.prototype.setBackTransform = function(pos) {
+ var mirroredCorner = this.flipPointHorizontally(this.corner);
+ var r = (this.peelLineRotation - 90) * 2;
+ var t = pos.subtract(mirroredCorner.rotate(r));
+ var css = 'translate('+ round(t.x) +'px, '+ round(t.y) +'px) rotate('+ round(r) +'deg)';
+ setTransform(this.backLayer, css);
+ setTransform(this.topShadowElement, css);
+ }
+
+ Peel.prototype.getPeelLineDistance = function() {
+ var cornerId, opposingCornerId, corner, opposingCorner;
+ if (this.peelLineRotation < 90) {
+ cornerId = Peel.Corners.TOP_RIGHT;
+ opposingCornerId = Peel.Corners.BOTTOM_LEFT;
+ } else if (this.peelLineRotation < 180) {
+ cornerId = Peel.Corners.BOTTOM_RIGHT;
+ opposingCornerId = Peel.Corners.TOP_LEFT;
+ } else if (this.peelLineRotation < 270) {
+ cornerId = Peel.Corners.BOTTOM_LEFT;
+ opposingCornerId = Peel.Corners.TOP_RIGHT;
+ } else if (this.peelLineRotation < 360) {
+ cornerId = Peel.Corners.TOP_LEFT;
+ opposingCornerId = Peel.Corners.BOTTOM_RIGHT;
+ }
+ corner = this.getCornerPoint(cornerId);
+ opposingCorner = this.getCornerPoint(opposingCornerId);
+ var cornerToCorner = new LineSegment(corner, opposingCorner).scale(2);
+ var intersect = this.peelLineSegment.getIntersectPoint(cornerToCorner);
+ if (!intersect) {
+ return 2;
+ }
+ var distanceToPeelLine = corner.subtract(intersect).getLength();
+ var totalDistance = corner.subtract(opposingCorner).getLength();
+ return (distanceToPeelLine / totalDistance);
+ }
+
+ Peel.prototype.setEffects = function() {
+ var t = this.getPeelLineDistance();
+ this.setTopShadow(t);
+ this.setBackShadow(t);
+ this.setBackReflection(t);
+ this.setBottomShadow(t);
+ this.setFade();
+ }
+
+ Peel.prototype.setTopShadow = function(t) {
+ if (!this.getOption('topShadow')) {
+ return;
+ }
+ var sBlur = this.getOption('topShadowBlur');
+ var sX = this.getOption('topShadowOffsetX');
+ var sY = this.getOption('topShadowOffsetY');
+ var alpha = this.getOption('topShadowAlpha');
+ var sAlpha = this.exponential(t, 5, alpha);
+ if (this.usesBoxShadow) {
+ setBoxShadow(this.topShadowElement, sX, sY, sBlur, 0, sAlpha);
+ } else {
+ setDropShadow(this.topShadowElement, sX, sY, sBlur, sAlpha);
+ }
+ }
+
+ Peel.prototype.distributeOrLinear = function(n, dist, mult) {
+ if (dist) {
+ return distribute(n, mult);
+ } else {
+ return n * mult;
+ }
+ }
+
+ Peel.prototype.exponential = function(n, exp, mult) {
+ return mult * clamp(Math.pow(1 + n, exp) - 1);
+ }
+
+ Peel.prototype.setBackReflection = function(t) {
+ var stops = [];
+ if (this.canSetLinearEffect('backReflection', t)) {
+ var rDistribute = this.getOption('backReflectionDistribute');
+ var rSize = this.getOption('backReflectionSize');
+ var rOffset = this.getOption('backReflectionOffset');
+ var rAlpha = this.getOption('backReflectionAlpha');
+ var reflectionSize = this.distributeOrLinear(t, rDistribute, rSize);
+ var rStop = t - rOffset;
+ var rMid = rStop - reflectionSize;
+ var rStart = rMid - reflectionSize;
+ stops.push(getWhiteStop(0, 0));
+ stops.push(getWhiteStop(0, rStart));
+ stops.push(getWhiteStop(rAlpha, rMid));
+ stops.push(getWhiteStop(0, rStop));
+ }
+ setBackgroundGradient(this.backReflectionElement, 180 - this.peelLineRotation, stops);
+ }
+
+ Peel.prototype.setBackShadow = function(t) {
+ var stops = [];
+ if (this.canSetLinearEffect('backShadow', t)) {
+ var sSize = this.getOption('backShadowSize');
+ var sOffset = this.getOption('backShadowOffset');
+ var sAlpha = this.getOption('backShadowAlpha');
+ var sDistribute = this.getOption('backShadowDistribute');
+ var shadowSize = this.distributeOrLinear(t, sDistribute, sSize);
+ var shadowStop = t - sOffset;
+ var shadowMid = shadowStop - shadowSize;
+ var shadowStart = shadowMid - shadowSize;
+ stops.push(getBlackStop(0, 0));
+ stops.push(getBlackStop(0, shadowStart));
+ stops.push(getBlackStop(sAlpha, shadowMid));
+ stops.push(getBlackStop(sAlpha, shadowStop));
+ }
+ setBackgroundGradient(this.backShadowElement, 180 - this.peelLineRotation, stops);
+ }
+
+ Peel.prototype.setBottomShadow = function(t) {
+ var stops = [];
+ if (this.canSetLinearEffect('bottomShadow', t)) {
+ var sSize = this.getOption('bottomShadowSize');
+ var offset = this.getOption('bottomShadowOffset');
+ var darkAlpha = this.getOption('bottomShadowDarkAlpha');
+ var lightAlpha = this.getOption('bottomShadowLightAlpha');
+ var sDistribute = this.getOption('bottomShadowDistribute');
+ var darkShadowStart = t - (.025 - offset);
+ var midShadowStart = darkShadowStart - (this.distributeOrLinear(t, sDistribute, .03) * sSize) - offset;
+ var lightShadowStart = midShadowStart - ((.02 * sSize) - offset);
+ stops = [
+ getBlackStop(0, 0),
+ getBlackStop(0, lightShadowStart),
+ getBlackStop(lightAlpha, midShadowStart),
+ getBlackStop(lightAlpha, darkShadowStart),
+ getBlackStop(darkAlpha, t)
+ ];
+ }
+ setBackgroundGradient(this.bottomShadowElement, this.peelLineRotation + 180, stops);
+ }
+
+ Peel.prototype.canSetLinearEffect = function(name, t) {
+ return this.getOption(name) && t > 0;
+ }
+
+ Peel.prototype.setFade = function() {
+ var threshold = this.fadeThreshold, opacity = 1, n;
+ if (threshold) {
+ if (this.timeAlongPath !== undefined) {
+ n = this.timeAlongPath;
+ } else {
+ n = this.getAmountClipped();
+ }
+ if (n > threshold) {
+ opacity = (1 - n) / (1 - threshold);
+ }
+ setOpacity(this.topLayer, opacity);
+ setOpacity(this.backLayer, opacity);
+ setOpacity(this.bottomShadowElement, opacity);
+ }
+ }
+
+ Peel.prototype.flipPointHorizontally = function(p) {
+ return new Point(p.x - ((p.x - this.center.x) * 2), p.y);
+ }
+
+ Peel.prototype.init = function() {
+ if (this.getOption('setPeelOnInit')) {
+ this.setPeelPosition(this.corner);
+ }
+ addClass(this.el, prefix('ready'));
+ }
+
+ function SVGClip (el, shape) {
+ this.el = el;
+ this.shape = SVGClip.createClipPath(el, shape || {
+ 'type': 'polygon'
+ });
+ setTransform(this.el, 'translate(0px,0px)');
+ }
+
+ SVGClip.getDefs = function() {
+ if (!this.defs) {
+ this.svg = createSVGElement('svg', null, {
+ 'class': prefix('svg-clip-element')
+ });
+ this.defs = createSVGElement('defs', this.svg);
+ }
+ return this.defs;
+ }
+
+ SVGClip.createClipPath = function(el, obj) {
+ var id = SVGClip.getId();
+ var clipPath = createSVGElement('clipPath', this.getDefs());
+ var svgEl = createSVGElement(obj.type, clipPath, obj.attributes);
+ setSVGAttribute(clipPath, 'id', id);
+ setCSSClip(el, 'url(#' + id + ')');
+ return svgEl;
+ }
+
+ SVGClip.getId = function() {
+ if (!SVGClip.id) {
+ SVGClip.id = 1;
+ }
+ return 'svg-clip-' + SVGClip.id++;
+ }
+
+ SVGClip.prototype.setPoints = function(points) {
+ var str = points.map(function(p) {
+ return round(p.x) + ',' + round(p.y);
+ }).join(' ');
+ setSVGAttribute(this.shape, 'points', str);
+ }
+
+ function Circle (center, radius) {
+ this.center = center;
+ this.radius = radius;
+ }
+
+ Circle.prototype.containsPoint = function(p) {
+ if(this.boundingRectContainsPoint(p)) {
+ var dx = this.center.x - p.x;
+ var dy = this.center.y - p.y;
+ dx *= dx;
+ dy *= dy;
+ var distanceSquared = dx + dy;
+ var radiusSquared = this.radius * this.radius;
+ return distanceSquared <= radiusSquared;
+ }
+ return false;
+ }
+
+ Circle.prototype.boundingRectContainsPoint = function(p) {
+ return p.x >= this.center.x - this.radius && p.x <= this.center.x + this.radius &&
+ p.y >= this.center.y - this.radius && p.y <= this.center.y + this.radius;
+ }
+
+ Circle.prototype.constrainPoint = function(p) {
+ if (!this.containsPoint(p)) {
+ var rotation = p.subtract(this.center).getAngle();
+ p = this.center.add(new Point(this.radius, 0).rotate(rotation));
+ }
+ return p;
+ }
+
+ function Polygon() {
+ this.points = [];
+ }
+
+ Polygon.getArea = function(points) {
+ var sum1 = 0, sum2 = 0;
+ points.forEach(function(p, i, arr) {
+ var next = arr[(i + 1) % arr.length];
+ sum1 += (p.x * next.y);
+ sum2 += (p.y * next.x);
+ });
+ return (sum1 - sum2) / 2;
+ }
+
+ Polygon.prototype.addPoint = function(point) {
+ this.points.push(point);
+ }
+
+ Polygon.prototype.getPoints = function() {
+ return this.points;
+ }
+
+ function BezierCurve (p1, c1, c2, p2) {
+ this.p1 = p1;
+ this.c1 = c1;
+ this.p2 = p2;
+ this.c2 = c2;
+ }
+
+ BezierCurve.prototype.getPointForTime = function(t) {
+ var b0 = Math.pow(1 - t, 3);
+ var b1 = 3 * t * Math.pow(1 - t, 2);
+ var b2 = 3 * Math.pow(t, 2) * (1 - t);
+ var b3 = Math.pow(t, 3);
+ var x = (b0 * this.p1.x) + (b1 * this.c1.x) + (b2 * this.c2.x) + (b3 * this.p2.x)
+ var y = (b0 * this.p1.y) + (b1 * this.c1.y) + (b2 * this.c2.y) + (b3 * this.p2.y)
+ return new Point(x, y);
+ }
+
+ function LineSegment (p1, p2) {
+ this.p1 = p1;
+ this.p2 = p2;
+ }
+
+ LineSegment.EPSILON = 1e-6;
+
+ LineSegment.prototype.getPointForTime = function(t) {
+ return this.p1.add(this.getVector().scale(t));
+ }
+
+ LineSegment.prototype.scale = function(n) {
+ var half = 1 + (n / 2);
+ var p1 = this.p1.add(this.p2.subtract(this.p1).scale(n));
+ var p2 = this.p2.add(this.p1.subtract(this.p2).scale(n));
+ return new LineSegment(p1, p2);
+ }
+
+ LineSegment.prototype.getPointDeterminant = function(p) {
+ var d = ((p.x - this.p1.x) * (this.p2.y - this.p1.y)) - ((p.y - this.p1.y) * (this.p2.x - this.p1.x));
+ if (d > -LineSegment.EPSILON && d < LineSegment.EPSILON) {
+ d = 0;
+ }
+ return d;
+ }
+
+ LineSegment.prototype.getIntersectPoint = function(seg2) {
+ var seg1 = this;
+ function crossProduct(p1, p2) {
+ return p1.x * p2.y - p1.y * p2.x;
+ }
+ var r = seg1.p2.subtract(seg1.p1);
+ var s = seg2.p2.subtract(seg2.p1);
+ var uNumerator = crossProduct(seg2.p1.subtract(seg1.p1), r);
+ var denominator = crossProduct(r, s);
+ if (denominator == 0) {
+ return null;
+ }
+ var u = uNumerator / denominator;
+ var t = crossProduct(seg2.p1.subtract(seg1.p1), s) / denominator;
+ if ((t >= 0) && (t <= 1) && (u >= 0) && (u <= 1)) {
+ return seg1.p1.add(r.scale(t));
+ }
+ return null;
+ }
+
+ LineSegment.prototype.getAngle = function() {
+ return this.getVector().getAngle();
+ }
+
+ LineSegment.prototype.getVector = function() {
+ if (!this.vector) {
+ this.vector = this.p2.subtract(this.p1);
+ }
+ return this.vector;
+ }
+
+ function Point (x, y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ Point.DEGREES_IN_RADIANS = 180 / Math.PI;
+
+ Point.degToRad = function(deg) {
+ return deg / Point.DEGREES_IN_RADIANS;
+ };
+
+ Point.radToDeg = function(rad) {
+ var deg = rad * Point.DEGREES_IN_RADIANS;
+ while(deg < 0) deg += 360;
+ return deg;
+ };
+
+ Point.vector = function(deg, len) {
+ var rad = Point.degToRad(deg);
+ return new Point(Math.cos(rad) * len, Math.sin(rad) * len);
+ };
+
+ Point.prototype.add = function(p) {
+ return new Point(this.x + p.x, this.y + p.y);
+ };
+
+ Point.prototype.subtract = function(p) {
+ return new Point(this.x - p.x, this.y - p.y);
+ };
+
+ Point.prototype.scale = function(n) {
+ return new Point(this.x * n, this.y * n);
+ };
+
+ Point.prototype.getLength = function() {
+ return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));
+ };
+
+ Point.prototype.getAngle = function() {
+ return Point.radToDeg(Math.atan2(this.y, this.x));
+ };
+
+ Point.prototype.setAngle = function(deg) {
+ return Point.vector(deg, this.getLength());
+ };
+
+ Point.prototype.rotate = function(deg) {
+ return this.setAngle(this.getAngle() + deg);
+ };
+
+ setCssProperties();
+ win.Peel = Peel;
+})(typeof window !== 'undefined' ? window : {});
+
+export default typeof window !== 'undefined' ? window.Peel : null;
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
new file mode 100644
index 0000000..9cebde5
--- /dev/null
+++ b/src/routes/+layout.svelte
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+{@render children()}
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
new file mode 100644
index 0000000..822ccfc
--- /dev/null
+++ b/src/routes/+page.svelte
@@ -0,0 +1,114 @@
+
+
+
+
Stickers
+
+
Manage everything sticky! Get free stickers for signing up, hack or trade to earn rare stickers and certify your collection.
+
+
+
+ {#snippet topContent()}
+ Sign in!
+ {/snippet}
+ {#snippet backContent()}
+
+ {/snippet}
+ {#snippet bottomContent()}
+
+
+
+ {/snippet}
+
+
*footer joke here
+
+
+
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
new file mode 100644
index 0000000..1295460
--- /dev/null
+++ b/svelte.config.js
@@ -0,0 +1,18 @@
+import adapter from '@sveltejs/adapter-auto';
+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
+
+/** @type {import('@sveltejs/kit').Config} */
+const config = {
+ // Consult https://svelte.dev/docs/kit/integrations
+ // for more information about preprocessors
+ preprocess: vitePreprocess(),
+
+ kit: {
+ // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
+ // If your environment is not supported, or you settled on a specific environment, switch out the adapter.
+ // See https://svelte.dev/docs/kit/adapters for more information about adapters.
+ adapter: adapter()
+ }
+};
+
+export default config;
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..2c2ed3c
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "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/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..bbf8c7d
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,6 @@
+import { sveltekit } from '@sveltejs/kit/vite';
+import { defineConfig } from 'vite';
+
+export default defineConfig({
+ plugins: [sveltekit()]
+});