diff --git a/examples/example-sveltekit/.gitignore b/examples/example-sveltekit/.gitignore new file mode 100644 index 000000000..3b462cb0c --- /dev/null +++ b/examples/example-sveltekit/.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/examples/example-sveltekit/.npmrc b/examples/example-sveltekit/.npmrc new file mode 100644 index 000000000..b6f27f135 --- /dev/null +++ b/examples/example-sveltekit/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/examples/example-sveltekit/README.md b/examples/example-sveltekit/README.md new file mode 100644 index 000000000..75842c404 --- /dev/null +++ b/examples/example-sveltekit/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/examples/example-sveltekit/package.json b/examples/example-sveltekit/package.json new file mode 100644 index 000000000..cdb2add9c --- /dev/null +++ b/examples/example-sveltekit/package.json @@ -0,0 +1,27 @@ +{ + "name": "example-sveltekit", + "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" + }, + "dependencies": { + "@stylexjs/stylex": "0.17.5" + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^7.0.0", + "@sveltejs/kit": "^2.49.1", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "svelte": "^5.45.6", + "svelte-check": "^4.3.4", + "typescript": "^5.9.3", + "vite": "^7.2.6", + "@stylexjs/unplugin": "0.17.5" + } +} diff --git a/examples/example-sveltekit/src/app.css b/examples/example-sveltekit/src/app.css new file mode 100644 index 000000000..e69de29bb diff --git a/examples/example-sveltekit/src/app.d.ts b/examples/example-sveltekit/src/app.d.ts new file mode 100644 index 000000000..520c4217a --- /dev/null +++ b/examples/example-sveltekit/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/examples/example-sveltekit/src/app.html b/examples/example-sveltekit/src/app.html new file mode 100644 index 000000000..f273cc58f --- /dev/null +++ b/examples/example-sveltekit/src/app.html @@ -0,0 +1,11 @@ + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/examples/example-sveltekit/src/lib/assets/favicon.svg b/examples/example-sveltekit/src/lib/assets/favicon.svg new file mode 100644 index 000000000..cc5dc66a3 --- /dev/null +++ b/examples/example-sveltekit/src/lib/assets/favicon.svg @@ -0,0 +1 @@ +svelte-logo \ No newline at end of file diff --git a/examples/example-sveltekit/src/lib/attrs.ts b/examples/example-sveltekit/src/lib/attrs.ts new file mode 100644 index 000000000..3f97cfea1 --- /dev/null +++ b/examples/example-sveltekit/src/lib/attrs.ts @@ -0,0 +1,24 @@ +import type * as stylex from '@stylexjs/stylex'; + +/** + * Translates stylex.props to fit svelte attributes. + * @example + *
+ */ +export function attrs({ className, 'data-style-src': dataStyleSrc, style }: ReturnType) { + const result: {class?: string, style?: string, 'data-style-src'?: string} = {}; + // Convert className to class + if (className != null && className !== '') { + result.class = className; + } + // Convert style object to string + if (style != null && Object.keys(style).length > 0) { + result.style = Object.keys(style) + .map((key) => `${key}:${style[key]};`) + .join(''); + } + if (dataStyleSrc != null && dataStyleSrc !== '') { + result['data-style-src'] = dataStyleSrc; + } + return result; +} \ No newline at end of file diff --git a/examples/example-sveltekit/src/lib/index.ts b/examples/example-sveltekit/src/lib/index.ts new file mode 100644 index 000000000..602c42fdd --- /dev/null +++ b/examples/example-sveltekit/src/lib/index.ts @@ -0,0 +1,3 @@ +// place files you want to import through the `$lib` alias in this folder. + +export * from "./attrs"; \ No newline at end of file diff --git a/examples/example-sveltekit/src/routes/+layout.svelte b/examples/example-sveltekit/src/routes/+layout.svelte new file mode 100644 index 000000000..c11c24b78 --- /dev/null +++ b/examples/example-sveltekit/src/routes/+layout.svelte @@ -0,0 +1,19 @@ + + + + + {#if import.meta.env.DEV} + + {/if} + + +{@render children()} diff --git a/examples/example-sveltekit/src/routes/+page.svelte b/examples/example-sveltekit/src/routes/+page.svelte new file mode 100644 index 000000000..8eecaf4f8 --- /dev/null +++ b/examples/example-sveltekit/src/routes/+page.svelte @@ -0,0 +1,30 @@ + + + +
+
Content
+
\ No newline at end of file diff --git a/examples/example-sveltekit/static/robots.txt b/examples/example-sveltekit/static/robots.txt new file mode 100644 index 000000000..b6dd6670c --- /dev/null +++ b/examples/example-sveltekit/static/robots.txt @@ -0,0 +1,3 @@ +# allow crawling everything by default +User-agent: * +Disallow: diff --git a/examples/example-sveltekit/svelte.config.js b/examples/example-sveltekit/svelte.config.js new file mode 100644 index 000000000..d1afe2a94 --- /dev/null +++ b/examples/example-sveltekit/svelte.config.js @@ -0,0 +1,24 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +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/examples/example-sveltekit/tsconfig.json b/examples/example-sveltekit/tsconfig.json new file mode 100644 index 000000000..2c2ed3c4d --- /dev/null +++ b/examples/example-sveltekit/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/examples/example-sveltekit/vite.config.ts b/examples/example-sveltekit/vite.config.ts new file mode 100644 index 000000000..0160b0e15 --- /dev/null +++ b/examples/example-sveltekit/vite.config.ts @@ -0,0 +1,23 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; +import stylex from '@stylexjs/unplugin'; + +export default defineConfig({ + plugins: [ + sveltekit(), + // @ts-expect-error - ignore for now + { + ...stylex.vite({ + useCSSLayers: true, + enableFontSizePxToRem: true, + }), + enforce: undefined, + }, + ], +}); diff --git a/packages/@stylexjs/unplugin/src/index.js b/packages/@stylexjs/unplugin/src/index.js index 74fc3adb6..fd5b7c5ad 100644 --- a/packages/@stylexjs/unplugin/src/index.js +++ b/packages/@stylexjs/unplugin/src/index.js @@ -425,7 +425,7 @@ const unpluginInstance = createUnplugin((userOptions = {}, metaOptions) => { // Core code transform async transform(code, id) { // Only handle JS-like files; avoid parsing CSS/JSON/etc - const JS_LIKE_RE = /\.[cm]?[jt]sx?(\?|$)/; + const JS_LIKE_RE = /\.([cm]?[jt]sx?|svelte)(\?|$)/; if (!JS_LIKE_RE.test(id)) return null; if (!shouldHandle(code)) return null; diff --git a/packages/docs/content/docs/learn/installation/vite/meta.json b/packages/docs/content/docs/learn/installation/vite/meta.json index 2549f93b3..04ad28f0c 100644 --- a/packages/docs/content/docs/learn/installation/vite/meta.json +++ b/packages/docs/content/docs/learn/installation/vite/meta.json @@ -4,6 +4,7 @@ "./vite-react.mdx", "./vite-rsc.mdx", "./react-router.mdx", + "./sveltekit.mdx", "./redwoodsdk.mdx", "./waku.mdx" ] diff --git a/packages/docs/content/docs/learn/installation/vite/sveltekit.mdx b/packages/docs/content/docs/learn/installation/vite/sveltekit.mdx new file mode 100644 index 000000000..34f4acfd6 --- /dev/null +++ b/packages/docs/content/docs/learn/installation/vite/sveltekit.mdx @@ -0,0 +1,57 @@ +--- +title: 'SvelteKit' +--- + +[`examples/example-sveltekit`](https://github.com/facebook/stylex/tree/main/examples/example-sveltekit) +uses SvelteKit with StyleX compiled by `@stylexjs/unplugin`. + +## Vite configuration + +```ts title="vite.config.ts" +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; +import stylex from '@stylexjs/unplugin'; + +export default defineConfig({ + plugins: [ + sveltekit(), + { + ...stylex.vite({ + useCSSLayers: true, + }), + enforce: undefined, + }, + ], +}); +``` + +## CSS entrypoint + +Ensure that there is one CSS file that is imported from your root layout +component. + +## CSS Link and Hot Reloading during development + +Ensure that the virtual CSS file and script for hot reloading styles are part of +your bundle to enable hot reloading during development. + +In your root `+layout.svelte` file, add the following to the script tag and ``: + +```svelte title="src/routes/+layout.svelte" + + + + {#if import.meta.env.DEV} + + {/if} + + +{@render children()} +``` diff --git a/yarn.lock b/yarn.lock index 3ef1a270b..00c8954ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3554,7 +3554,7 @@ "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/remapping@^2.3.5": +"@jridgewell/remapping@^2.3.4", "@jridgewell/remapping@^2.3.5": version "2.3.5" resolved "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz" integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== @@ -3575,7 +3575,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": version "1.5.5" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz" integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== @@ -5158,6 +5158,53 @@ "@storybook/global" "^5.0.0" "@storybook/react-dom-shim" "9.1.16" +"@sveltejs/acorn-typescript@^1.0.5": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.8.tgz#69c746a7c232094c117c50dedbd1279fc64887b7" + integrity sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA== + +"@sveltejs/adapter-auto@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@sveltejs/adapter-auto/-/adapter-auto-7.0.0.tgz#e3f257a0d1be3383f6cd0c146aed8d470b33a7fe" + integrity sha512-ImDWaErTOCkRS4Gt+5gZuymKFBobnhChXUZ9lhUZLahUgvA4OOvRzi3sahzYgbxGj5nkA6OV0GAW378+dl/gyw== + +"@sveltejs/kit@^2.49.1": + version "2.49.4" + resolved "https://registry.yarnpkg.com/@sveltejs/kit/-/kit-2.49.4.tgz#f1ddd9e5592a05efb8c93d061e1ee890c11473a8" + integrity sha512-JFtOqDoU0DI/+QSG8qnq5bKcehVb3tCHhOG4amsSYth5/KgO4EkJvi42xSAiyKmXAAULW1/Zdb6lkgGEgSxdZg== + 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" + +"@sveltejs/vite-plugin-svelte-inspector@^5.0.0": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz#81302822c29d530cfe707c795cca014ef00e9c1e" + integrity sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig== + dependencies: + obug "^2.1.0" + +"@sveltejs/vite-plugin-svelte@^6.2.1": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.4.tgz#f3a1dac0eba70a053bd750e1a15f7fb1ae71fa4f" + integrity sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA== + dependencies: + "@sveltejs/vite-plugin-svelte-inspector" "^5.0.0" + deepmerge "^4.3.1" + magic-string "^0.30.21" + obug "^2.1.0" + vitefu "^1.1.1" + "@svgr/babel-plugin-add-jsx-attribute@^6.5.1": version "6.5.1" resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz" @@ -5522,6 +5569,11 @@ dependencies: "@types/node" "*" +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== + "@types/debug@^4.0.0": version "4.1.12" resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" @@ -5569,7 +5621,7 @@ dependencies: "@types/estree" "*" -"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.6", "@types/estree@^1.0.8": +"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.5", "@types/estree@^1.0.6", "@types/estree@^1.0.8": version "1.0.8" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== @@ -6951,7 +7003,7 @@ acorn@8.14.0: resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== -acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.15.0, acorn@^8.9.0: +acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.12.1, acorn@^8.14.0, acorn@^8.14.1, acorn@^8.15.0, acorn@^8.9.0: version "8.15.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== @@ -7232,7 +7284,7 @@ aria-query@5.3.0: dependencies: dequal "^2.0.3" -aria-query@^5.0.0, aria-query@^5.3.2: +aria-query@^5.0.0, aria-query@^5.3.1, aria-query@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz" integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== @@ -8192,7 +8244,7 @@ chokidar@^3.4.2, chokidar@^3.5.3, chokidar@^3.6.0: optionalDependencies: fsevents "~2.3.2" -chokidar@^4.0.3, chokidar@~4.0.0: +chokidar@^4.0.1, chokidar@^4.0.3, chokidar@~4.0.0: version "4.0.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== @@ -8626,6 +8678,11 @@ cookie@0.7.1: resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== +cookie@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + cookie@^0.7.1: version "0.7.2" resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz" @@ -9310,6 +9367,11 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" +devalue@^5.3.2, devalue@^5.5.0: + version "5.6.1" + resolved "https://registry.yarnpkg.com/devalue/-/devalue-5.6.1.tgz#f4c0a6e71d1a2bc50c02f9ca3c54ecafeb6a0445" + integrity sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A== + devlop@^1.0.0, devlop@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz" @@ -10241,6 +10303,11 @@ eslint@^9.36.0, eslint@^9.39.1: natural-compare "^1.4.0" optionator "^0.9.3" +esm-env@^1.2.1, esm-env@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/esm-env/-/esm-env-1.2.2.tgz#263c9455c55861f41618df31b20cb571fc20b75e" + integrity sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA== + esniff@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz" @@ -10281,6 +10348,13 @@ esquery@^1.4.0, esquery@^1.4.2, esquery@^1.5.0: dependencies: estraverse "^5.1.0" +esrap@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/esrap/-/esrap-2.2.1.tgz#cbe28fe94cd7c75b158609d602f5e345bae21259" + integrity sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" @@ -12603,7 +12677,7 @@ is-reference@1.2.1: dependencies: "@types/estree" "*" -is-reference@^3.0.2: +is-reference@^3.0.2, is-reference@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz" integrity sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw== @@ -13617,6 +13691,11 @@ local-pkg@^1.0.0: pkg-types "^2.3.0" quansync "^0.2.11" +locate-character@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974" + integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" @@ -13785,7 +13864,7 @@ lz-string@^1.4.4, lz-string@^1.5.0: resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== -magic-string@0.30.21, magic-string@^0.30.0, magic-string@^0.30.17, magic-string@^0.30.19, magic-string@^0.30.21, magic-string@^0.30.3, magic-string@~0.30.17: +magic-string@0.30.21, magic-string@^0.30.0, magic-string@^0.30.11, magic-string@^0.30.17, magic-string@^0.30.19, magic-string@^0.30.21, magic-string@^0.30.3, magic-string@^0.30.5, magic-string@~0.30.17: version "0.30.21" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz" integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== @@ -14763,6 +14842,11 @@ mlly@^1.7.4: pkg-types "^1.3.1" ufo "^1.6.1" +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + mrmime@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz" @@ -15097,7 +15181,7 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -obug@^2.1.1: +obug@^2.1.0, obug@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz" integrity sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ== @@ -17315,6 +17399,13 @@ rxjs@^7.5.4: dependencies: tslib "^2.1.0" +sade@^1.7.4, sade@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz" @@ -17881,7 +17972,7 @@ sirv@^2.0.3: mrmime "^2.0.0" totalist "^3.0.0" -sirv@^3.0.1: +sirv@^3.0.0, sirv@^3.0.1: version "3.0.2" resolved "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz" integrity sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g== @@ -18574,6 +18665,38 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +svelte-check@^4.3.4: + version "4.3.5" + resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-4.3.5.tgz#2e9e05eca63fdb5523a37c666f47614d36c11212" + integrity sha512-e4VWZETyXaKGhpkxOXP+B/d0Fp/zKViZoJmneZWe/05Y2aqSKj3YN2nLfYPJBQ87WEiY4BQCQ9hWGu9mPT1a1Q== + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + chokidar "^4.0.1" + fdir "^6.2.0" + picocolors "^1.0.0" + sade "^1.7.4" + +svelte@^5.45.6: + version "5.46.3" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-5.46.3.tgz#70234f0d44e92d3e0b199c5b5d2db07178ac6b7d" + integrity sha512-Y5juST3x+/ySty5tYJCVWa6Corkxpt25bUZQHqOceg9xfMUtDsFx6rCsG6cYf1cA6vzDi66HIvaki0byZZX95A== + 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" + svg-parser@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" @@ -19735,6 +19858,20 @@ vite@^7.2.0: optionalDependencies: fsevents "~2.3.3" +vite@^7.2.6: + version "7.3.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.3.1.tgz#7f6cfe8fb9074138605e822a75d9d30b814d6507" + integrity sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA== + dependencies: + esbuild "^0.27.0" + fdir "^6.5.0" + picomatch "^4.0.3" + postcss "^8.5.6" + rollup "^4.43.0" + tinyglobby "^0.2.15" + optionalDependencies: + fsevents "~2.3.3" + vitefu@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz" @@ -20501,7 +20638,7 @@ youch@4.1.0-beta.10: cookie "^1.0.2" youch-core "^0.3.3" -zimmerframe@^1.0.0: +zimmerframe@^1.0.0, zimmerframe@^1.1.2: version "1.1.4" resolved "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz" integrity sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==