├── _examples ├── simple-mocking │ ├── .env │ ├── .env.test │ ├── .npmrc │ ├── src │ │ ├── lib │ │ │ └── index.ts │ │ ├── routes │ │ │ ├── +page.svelte │ │ │ └── +page.server.ts │ │ ├── data │ │ │ ├── index.ts │ │ │ └── __mocks__ │ │ │ │ └── index.ts │ │ ├── index.test.ts │ │ ├── app.d.ts │ │ └── app.html │ ├── static │ │ └── favicon.png │ ├── .gitignore │ ├── .eslintignore │ ├── .prettierignore │ ├── .prettierrc │ ├── vite.config.ts │ ├── playwright.config.ts │ ├── tests │ │ └── test.ts │ ├── tsconfig.json │ ├── plugin │ │ └── index.ts │ ├── .eslintrc.cjs │ ├── svelte.config.js │ ├── README.md │ └── package.json ├── webcomponents │ ├── .npmrc │ ├── dist │ │ ├── Button.js │ │ ├── Card.js │ │ └── Button-d256b521.js │ ├── static │ │ └── favicon.png │ ├── src │ │ ├── routes │ │ │ └── +page.svelte │ │ ├── index.test.ts │ │ ├── lib │ │ │ └── components │ │ │ │ ├── Button.svelte │ │ │ │ └── Card.svelte │ │ ├── app.d.ts │ │ └── app.html │ ├── .gitignore │ ├── .eslintignore │ ├── .prettierignore │ ├── tests │ │ └── test.ts │ ├── vite.config.ts │ ├── .prettierrc │ ├── playwright.config.ts │ ├── index.html │ ├── tsconfig.json │ ├── cl.vite.config.ts │ ├── .eslintrc.cjs │ ├── svelte.config.js │ ├── README.md │ └── package.json └── static-blog-with-data │ ├── src │ ├── routes │ │ ├── +layout.js │ │ ├── gallery │ │ │ ├── [image] │ │ │ │ ├── +page.server.js │ │ │ │ └── +page.svelte │ │ │ ├── +page.server.js │ │ │ └── +page.svelte │ │ ├── +page.svelte │ │ ├── +layout.svelte │ │ ├── blog │ │ │ └── [post] │ │ │ │ ├── +page.svelte │ │ │ │ └── +page.server.js │ │ └── +page.server.js │ ├── app.d.ts │ └── app.html │ ├── sanity │ ├── .eslintrc │ ├── static │ │ └── .gitkeep │ ├── sanity.cli.js │ ├── schemas │ │ ├── index.js │ │ ├── category.js │ │ ├── author.js │ │ ├── post.js │ │ └── blockContent.js │ ├── sanity.config.js │ ├── .gitignore │ ├── README.md │ └── package.json │ ├── static │ ├── js.png │ └── favicon.png │ ├── vite.config.js │ ├── .gitignore │ ├── README.md │ ├── svelte.config.js │ ├── package.json │ ├── jsconfig.json │ └── pnpm-lock.yaml ├── .npmrc ├── src ├── routes │ ├── (common-layout) │ │ ├── links │ │ │ ├── +page.js │ │ │ └── +page.svelte │ │ ├── styles.css │ │ ├── +layout.js │ │ ├── error-handling │ │ │ ├── +server.js │ │ │ └── +page.svelte │ │ ├── jsform │ │ │ ├── +page.server.ts │ │ │ └── +page.svelte │ │ ├── streaming │ │ │ ├── +server.js │ │ │ ├── +page.svelte │ │ │ └── +page.server.js │ │ ├── +layout.svelte │ │ ├── +page.svelte │ │ ├── dynamic-form │ │ │ ├── +page.server.ts │ │ │ └── +page.svelte │ │ └── loading-images │ │ │ └── +page.svelte │ └── (no-layout) │ │ ├── component-playground │ │ ├── +page.js │ │ ├── ButtonHouse.svelte │ │ └── +page.svelte │ │ └── hamburger-menu │ │ ├── +page.js │ │ ├── +page.svelte │ │ ├── +layout.svelte │ │ └── HamburgerNav.svelte ├── lib │ ├── types.d.ts │ ├── catty2.jpeg │ ├── helpers.js │ ├── hamburger.svg │ ├── Card.svelte │ ├── reset.css │ └── mvp.css ├── components │ ├── Pet.svelte │ ├── GrailAccordion │ │ ├── index.js │ │ ├── GrailAccordion.svelte │ │ └── GrailAccordionItem.svelte │ └── SharedButtons │ │ ├── types.ts │ │ ├── JSDocButton.svelte │ │ ├── JSDocButton.svelte.d.ts │ │ ├── Button.svelte │ │ └── CoolButton.svelte ├── app.d.ts ├── app.html └── hooks.server.js ├── static ├── catty1.jpeg └── favicon.png ├── tests ├── lib │ ├── CardSlot.svelte │ ├── __snapshots__ │ │ └── Card.svelte.test.js.snap │ └── Card.svelte.test.js └── routes │ └── links │ └── test.spec.js ├── .gitignore ├── .eslintignore ├── .prettierignore ├── vite.config.js ├── .vscode ├── settings.json └── launch.json ├── .prettierrc ├── .eslintrc.cjs ├── vitest.config.js ├── jsconfig.json ├── playwright.config.js ├── svelte.config.js ├── package.json └── README.md /_examples/simple-mocking/.env: -------------------------------------------------------------------------------- 1 | MOCKING=false -------------------------------------------------------------------------------- /_examples/simple-mocking/.env.test: -------------------------------------------------------------------------------- 1 | MOCKING=true -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | strict-peer-dependencies=false 3 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/links/+page.js: -------------------------------------------------------------------------------- 1 | export const prerender = true; 2 | -------------------------------------------------------------------------------- /_examples/simple-mocking/.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | resolution-mode=highest 3 | -------------------------------------------------------------------------------- /_examples/webcomponents/.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | resolution-mode=highest 3 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/routes/+layout.js: -------------------------------------------------------------------------------- 1 | export const prerender = true 2 | -------------------------------------------------------------------------------- /src/lib/types.d.ts: -------------------------------------------------------------------------------- 1 | export interface Pet { 2 | species: string 3 | age: number 4 | } 5 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@sanity/eslint-config-studio" 3 | } 4 | -------------------------------------------------------------------------------- /src/lib/catty2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/svelte-society/this-week-in-svelte/HEAD/src/lib/catty2.jpeg -------------------------------------------------------------------------------- /static/catty1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/svelte-society/this-week-in-svelte/HEAD/static/catty1.jpeg -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/svelte-society/this-week-in-svelte/HEAD/static/favicon.png -------------------------------------------------------------------------------- /_examples/simple-mocking/src/lib/index.ts: -------------------------------------------------------------------------------- 1 | // place files you want to import through the `$lib` alias in this folder. 2 | -------------------------------------------------------------------------------- /_examples/webcomponents/dist/Button.js: -------------------------------------------------------------------------------- 1 | import { B as f } from "./Button-d256b521.js"; 2 | export { 3 | f as default 4 | }; 5 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/styles.css: -------------------------------------------------------------------------------- 1 | a { 2 | font-weight: 400; 3 | color: #015192; 4 | text-decoration: underline; 5 | } 6 | -------------------------------------------------------------------------------- /tests/lib/CardSlot.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | My content 6 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/static/.gitkeep: -------------------------------------------------------------------------------- 1 | Files placed here will be served by the Sanity server under the `/static`-prefix 2 | -------------------------------------------------------------------------------- /src/lib/helpers.js: -------------------------------------------------------------------------------- 1 | export const uniqueId = (prefix = 'id') => { 2 | return prefix + Math.floor(Math.random() * 100) + Date.now() 3 | } 4 | -------------------------------------------------------------------------------- /_examples/simple-mocking/src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |
{JSON.stringify(data)}
-------------------------------------------------------------------------------- /_examples/simple-mocking/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/svelte-society/this-week-in-svelte/HEAD/_examples/simple-mocking/static/favicon.png -------------------------------------------------------------------------------- /_examples/webcomponents/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/svelte-society/this-week-in-svelte/HEAD/_examples/webcomponents/static/favicon.png -------------------------------------------------------------------------------- /_examples/static-blog-with-data/static/js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/svelte-society/this-week-in-svelte/HEAD/_examples/static-blog-with-data/static/js.png -------------------------------------------------------------------------------- /src/routes/(common-layout)/+layout.js: -------------------------------------------------------------------------------- 1 | /** @type {import('../$types').LayoutLoad} */ 2 | export async function load() { 3 | return { globalStyles: true } 4 | } 5 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/svelte-society/this-week-in-svelte/HEAD/_examples/static-blog-with-data/static/favicon.png -------------------------------------------------------------------------------- /_examples/simple-mocking/src/data/index.ts: -------------------------------------------------------------------------------- 1 | export function get_data() { 2 | return fetch('https://jsonplaceholder.typicode.com/todos/1').then((res) => res.json()); 3 | } 4 | -------------------------------------------------------------------------------- /_examples/simple-mocking/src/routes/+page.server.ts: -------------------------------------------------------------------------------- 1 | import { get_data } from '$data'; 2 | 3 | export function load() { 4 | return { 5 | post: get_data() 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /src/components/Pet.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |

Pet species: {data.species}
Pet age: {data.age}

7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | vite.config.js.timestamp-* 10 | vite.config.ts.timestamp-* 11 | -------------------------------------------------------------------------------- /src/components/GrailAccordion/index.js: -------------------------------------------------------------------------------- 1 | export { default as GrailAccordion } from './GrailAccordion.svelte' 2 | export { default as GrailAccordionItem } from './GrailAccordionItem.svelte' 3 | -------------------------------------------------------------------------------- /_examples/simple-mocking/src/data/__mocks__/index.ts: -------------------------------------------------------------------------------- 1 | export function get_data() { 2 | return { 3 | userId: 200, 4 | id: 123, 5 | title: 'TWIS is awesome', 6 | completed: true 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /_examples/webcomponents/src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | This is super awesome! 6 | -------------------------------------------------------------------------------- /src/routes/(no-layout)/component-playground/+page.js: -------------------------------------------------------------------------------- 1 | /** @type {import('./$types').PageLoad} */ 2 | export async function load({ parent }) { 3 | await parent() 4 | return { globalStyles: false } 5 | } 6 | -------------------------------------------------------------------------------- /_examples/simple-mocking/src/index.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect } from 'vitest'; 2 | 3 | describe('sum test', () => { 4 | it('adds 1 + 2 to equal 3', () => { 5 | expect(1 + 2).toBe(3); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/routes/gallery/[image]/+page.server.js: -------------------------------------------------------------------------------- 1 | /** @type {import('./$types').PageServerLoad} */ 2 | export async function load({ params }) { 3 | return { image: params.image } 4 | } 5 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/vite.config.js: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vite'; 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()] 6 | }); 7 | -------------------------------------------------------------------------------- /_examples/webcomponents/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | vite.config.js.timestamp-* 10 | vite.config.ts.timestamp-* 11 | -------------------------------------------------------------------------------- /_examples/webcomponents/src/index.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect } from 'vitest'; 2 | 3 | describe('sum test', () => { 4 | it('adds 1 + 2 to equal 3', () => { 5 | expect(1 + 2).toBe(3); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /_examples/simple-mocking/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | !.env 7 | !.env.* 8 | !.env.example 9 | vite.config.js.timestamp-* 10 | vite.config.ts.timestamp-* 11 | -------------------------------------------------------------------------------- /src/components/SharedButtons/types.ts: -------------------------------------------------------------------------------- 1 | import type { HTMLButtonAttributes } from 'svelte/elements' 2 | 3 | export interface SharedButtonProps 4 | extends HTMLButtonAttributes { 5 | kind: 'primary' | 'secondary' 6 | } 7 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/sanity.cli.js: -------------------------------------------------------------------------------- 1 | import {defineCliConfig} from 'sanity/cli' 2 | 3 | export default defineCliConfig({ 4 | api: { 5 | projectId: '8x8tz8wt', 6 | dataset: 'production' 7 | } 8 | }) 9 | -------------------------------------------------------------------------------- /src/lib/hamburger.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | vite.config.js.timestamp-* 10 | vite.config.ts.timestamp-* 11 | /data 12 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | {#each data.posts as post} 6 |

7 | {post.title} 8 |

9 | {/each} 10 | -------------------------------------------------------------------------------- /src/routes/(no-layout)/hamburger-menu/+page.js: -------------------------------------------------------------------------------- 1 | /** @type {import('./$types').PageLoad} */ 2 | export async function load({ parent }) { 3 | await parent() 4 | return { globalStyles: false } 5 | } 6 | 7 | export const prerender = true 8 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/routes/gallery/[image]/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |

Let's see an image!

7 | 8 | icon 9 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/README.md: -------------------------------------------------------------------------------- 1 | # Static blog with data 2 | 3 | A SvelteKit application using adapter-static and prerendered 4 | content fetched from a live database; that way you can 5 | control your data remotely, but serve a static blog. 6 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/error-handling/+server.js: -------------------------------------------------------------------------------- 1 | import { error } from '@sveltejs/kit' 2 | 3 | /** @type {import('./$types').RequestHandler} */ 4 | export async function POST() { 5 | throw error(400, "Can't let you do that, Svelte Star.") 6 | } 7 | -------------------------------------------------------------------------------- /_examples/webcomponents/.eslintignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /_examples/simple-mocking/.eslintignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /_examples/simple-mocking/.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /_examples/webcomponents/.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /src/components/SharedButtons/JSDocButton.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vitest/config'; 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()], 6 | test: { 7 | include: ['src/**/*.{test,spec}.{js,ts}'] 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/schemas/index.js: -------------------------------------------------------------------------------- 1 | import blockContent from './blockContent' 2 | import category from './category' 3 | import post from './post' 4 | import author from './author' 5 | 6 | export const schemaTypes = [post, author, category, blockContent] 7 | -------------------------------------------------------------------------------- /_examples/webcomponents/tests/test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from '@playwright/test'; 2 | 3 | test('index page has expected h1', async ({ page }) => { 4 | await page.goto('/'); 5 | await expect(page.getByRole('heading', { name: 'Welcome to SvelteKit' })).toBeVisible(); 6 | }); 7 | -------------------------------------------------------------------------------- /_examples/webcomponents/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vitest/config'; 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()], 6 | test: { 7 | include: ['src/**/*.{test,spec}.{js,ts}'] 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "[svelte]": { 3 | "editor.defaultFormatter": "svelte.svelte-vscode" 4 | }, 5 | "editor.rulers": [60, 80], 6 | "rewrap.wrappingColumn": 60, 7 | "editor.fontSize": 14, 8 | "debug.allowBreakpointsEverywhere": true, 9 | "editor.wordWrap": "bounded" 10 | } 11 | -------------------------------------------------------------------------------- /_examples/webcomponents/src/lib/components/Button.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface Platform {} 9 | } 10 | } 11 | 12 | export {} 13 | -------------------------------------------------------------------------------- /src/routes/(no-layout)/hamburger-menu/+page.svelte: -------------------------------------------------------------------------------- 1 |

About

2 | 3 |

This is where I would put my content. If I had any!

4 | 5 |

Food

6 | 7 |

A menu could go here.

8 | 9 |

Contact

10 | 11 |

An address could go here.

12 | -------------------------------------------------------------------------------- /_examples/simple-mocking/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 100, 6 | "plugins": ["prettier-plugin-svelte"], 7 | "pluginSearchDirs": ["."], 8 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 9 | } 10 | -------------------------------------------------------------------------------- /_examples/webcomponents/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 100, 6 | "plugins": ["prettier-plugin-svelte"], 7 | "pluginSearchDirs": ["."], 8 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 9 | } 10 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/jsform/+page.server.ts: -------------------------------------------------------------------------------- 1 | import type { Actions } from '@sveltejs/kit' 2 | 3 | export const actions: Actions = { 4 | default: async ({ request }) => { 5 | const data = await request.formData() 6 | 7 | console.log(data.get('pizza')) 8 | 9 | return { success: true } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /_examples/webcomponents/src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface Platform {} 9 | } 10 | } 11 | 12 | export {}; 13 | -------------------------------------------------------------------------------- /tests/lib/__snapshots__/Card.svelte.test.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`thing > mounts 1`] = `"
My content
"`; 4 | 5 | exports[`thing > renders purple 1`] = `"
"`; 6 | -------------------------------------------------------------------------------- /_examples/simple-mocking/src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface Platform {} 9 | } 10 | } 11 | 12 | export {}; 13 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "semi": false, 5 | "trailingComma": "none", 6 | "printWidth": 60, 7 | "plugins": ["prettier-plugin-svelte"], 8 | "pluginSearchDirs": ["."], 9 | "overrides": [ 10 | { 11 | "files": "*.svelte", 12 | "options": { "parser": "svelte" } 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface Platform {} 9 | } 10 | } 11 | 12 | export {}; 13 | -------------------------------------------------------------------------------- /_examples/simple-mocking/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vitest/config'; 3 | import { simple_mock } from './plugin'; 4 | 5 | export default defineConfig({ 6 | plugins: [sveltekit(), simple_mock()], 7 | test: { 8 | include: ['src/**/*.{test,spec}.{js,ts}'] 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/routes/gallery/+page.server.js: -------------------------------------------------------------------------------- 1 | import fs from 'node:fs' 2 | import path from 'node:path' 3 | 4 | /** @type {import('./$types').PageServerLoad} */ 5 | export async function load() { 6 | const images = fs.readdirSync(path.resolve('./static')) 7 | 8 | console.log({ images }) 9 | 10 | return { images } 11 | } 12 | -------------------------------------------------------------------------------- /_examples/webcomponents/playwright.config.ts: -------------------------------------------------------------------------------- 1 | import type { PlaywrightTestConfig } from '@playwright/test'; 2 | 3 | const config: PlaywrightTestConfig = { 4 | webServer: { 5 | command: 'npm run build && npm run preview', 6 | port: 4173 7 | }, 8 | testDir: 'tests', 9 | testMatch: /(.+\.)?(test|spec)\.[jt]s/ 10 | }; 11 | 12 | export default config; 13 | -------------------------------------------------------------------------------- /src/components/SharedButtons/JSDocButton.svelte.d.ts: -------------------------------------------------------------------------------- 1 | // Learn more: https://svelte.dev/docs/typescript#types-sveltecomponent 2 | import type { SvelteComponent } from 'svelte' 3 | import type { SharedButtonProps } from './types' 4 | 5 | interface $$Props extends SharedButtonProps {} 6 | 7 | export default class JSDocButton extends SvelteComponent {} 8 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ['eslint:recommended', 'prettier'], 4 | plugins: ['svelte3'], 5 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], 6 | parserOptions: { 7 | sourceType: 'module', 8 | ecmaVersion: 2020 9 | }, 10 | env: { 11 | browser: true, 12 | es2017: true, 13 | node: true 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /_examples/simple-mocking/playwright.config.ts: -------------------------------------------------------------------------------- 1 | import type { PlaywrightTestConfig } from '@playwright/test'; 2 | 3 | const config: PlaywrightTestConfig = { 4 | webServer: { 5 | command: 'pnpm run build --mode test && pnpm run preview', 6 | port: 4173 7 | }, 8 | testDir: 'tests', 9 | testMatch: /(.+\.)?(test|spec)\.[jt]s/ 10 | }; 11 | 12 | export default config; 13 | -------------------------------------------------------------------------------- /_examples/simple-mocking/tests/test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from '@playwright/test'; 2 | 3 | test('index page has expected h1', async ({ page }) => { 4 | await page.goto('/'); 5 | await expect( 6 | page.getByText( 7 | JSON.stringify({ 8 | userId: 200, 9 | id: 123, 10 | title: 'TWIS is awesome', 11 | completed: true 12 | }) 13 | ) 14 | ).toBeVisible(); 15 | }); 16 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/streaming/+server.js: -------------------------------------------------------------------------------- 1 | import { json } from '@sveltejs/kit'; 2 | 3 | /** @type {import('./$types').RequestHandler} */ 4 | export async function GET() { 5 | // fake delay 6 | const animals = await new Promise((res) => { 7 | setTimeout(() => res(['Cats', 'Dogs', 'Birds']), 5000); 8 | }); 9 | 10 | console.log({ animals }); 11 | 12 | return json(animals); 13 | } 14 | -------------------------------------------------------------------------------- /src/components/SharedButtons/Button.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | 12 | 18 | -------------------------------------------------------------------------------- /src/components/SharedButtons/CoolButton.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | 12 | 18 | -------------------------------------------------------------------------------- /_examples/simple-mocking/src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 | 2 | My blog 3 | 4 | 5 |

My blog!

6 | 7 |
8 | 9 |
10 | 11 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /_examples/webcomponents/src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | %sveltekit.head% 11 | 12 | 13 |
%sveltekit.body%
14 | 15 | 16 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/+layout.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | {#if $page.data.globalStyles} 9 | 10 | {/if} 11 | 12 | 13 |
Return home
14 | 15 |
16 | 17 |
18 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/routes/gallery/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |

Gallery

7 | 8 | {#each data.images as image} 9 | icon 12 | {/each} 13 | 14 | 20 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/routes/blog/[post]/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 |

{data.post.title}

8 | 9 | {#each data.post.body[0].children as copy} 10 |

{copy.text}

11 | {/each} 12 |
13 | 14 | 20 | -------------------------------------------------------------------------------- /src/routes/(no-layout)/component-playground/ButtonHouse.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 9 | 15 | 19 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/schemas/category.js: -------------------------------------------------------------------------------- 1 | import {defineField, defineType} from 'sanity' 2 | 3 | export default defineType({ 4 | name: 'category', 5 | title: 'Category', 6 | type: 'document', 7 | fields: [ 8 | defineField({ 9 | name: 'title', 10 | title: 'Title', 11 | type: 'string', 12 | }), 13 | defineField({ 14 | name: 'description', 15 | title: 'Description', 16 | type: 'text', 17 | }), 18 | ], 19 | }) 20 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/sanity.config.js: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'sanity' 2 | import {deskTool} from 'sanity/desk' 3 | import {visionTool} from '@sanity/vision' 4 | import {schemaTypes} from './schemas' 5 | 6 | export default defineConfig({ 7 | name: 'default', 8 | title: 'moccasin-reindeer', 9 | 10 | projectId: '8x8tz8wt', 11 | dataset: 'production', 12 | 13 | plugins: [deskTool(), visionTool()], 14 | 15 | schema: { 16 | types: schemaTypes, 17 | }, 18 | }) 19 | -------------------------------------------------------------------------------- /_examples/webcomponents/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /src/lib/Card.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
11 | 12 |
13 | 14 | 28 | -------------------------------------------------------------------------------- /src/hooks.server.js: -------------------------------------------------------------------------------- 1 | import { error } from '@sveltejs/kit' 2 | 3 | /** @type {import('@sveltejs/kit').Handle} */ 4 | export async function handle({ event, resolve }) { 5 | // throw error(400, 'Fake fatal error!') 6 | 7 | const response = await resolve(event) 8 | 9 | return response 10 | } 11 | 12 | /** @type {import('@sveltejs/kit').HandleServerError} */ 13 | export async function handleError({ error }) { 14 | console.error('Demo unhandled error!', error) 15 | 16 | return { 17 | message: 'Whoops!' 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /vitest.config.js: -------------------------------------------------------------------------------- 1 | /// 2 | import { defineConfig } from 'vite' 3 | import { svelte } from '@sveltejs/vite-plugin-svelte' 4 | 5 | export default defineConfig({ 6 | plugins: [svelte({ hot: !process.env.VITEST })], 7 | resolve: { 8 | alias: { 9 | $components: ['src/components'], 10 | '$components/*': ['src/components/*'], 11 | $lib: ['src/lib'], 12 | '$lib/*': ['src/lib/*'] 13 | } 14 | }, 15 | test: { 16 | environment: 'happy-dom', 17 | include: ['**/*.test.js'] 18 | } 19 | }) 20 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/streaming/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | Streaming with promises 8 | 9 | 10 |

Streaming with promises!

11 | 12 |

When JS is enabled, you'll see a preloader below:

13 | 14 | {#await data.streams.animals} 15 |

Loading...

16 | {:then animals} 17 | 22 | {/await} 23 | -------------------------------------------------------------------------------- /tests/routes/links/test.spec.js: -------------------------------------------------------------------------------- 1 | import { test, expect } from '@playwright/test' 2 | import { AxeBuilder } from '@axe-core/playwright' 3 | 4 | test.describe('links page', () => { 5 | // 2 6 | test('should not have any automatically detectable accessibility issues', async ({ 7 | page 8 | }) => { 9 | await page.goto('/links') // 3 10 | 11 | const accessibilityScanResults = await new AxeBuilder({ 12 | page 13 | }).analyze() // 4 14 | 15 | expect(accessibilityScanResults.violations).toEqual([]) // 5 16 | }) 17 | }) 18 | -------------------------------------------------------------------------------- /src/routes/(no-layout)/hamburger-menu/+layout.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | Hamburger menu demonstration 8 | 9 | 10 |
11 | 12 |
13 | 14 |
15 | 16 |
17 | 18 |
19 | There is where I would put my footer. If I had one! 20 |
21 | 22 | 28 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-static' 2 | 3 | /** @type {import('@sveltejs/kit').Config} */ 4 | const config = { 5 | kit: { 6 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 7 | // If your environment is not supported or you settled on a specific environment, switch out the adapter. 8 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 9 | adapter: adapter() 10 | } 11 | } 12 | 13 | export default config 14 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/streaming/+page.server.js: -------------------------------------------------------------------------------- 1 | /** @type {import('./$types').PageServerLoad} */ 2 | export async function load({ fetch, isDataRequest }) { 3 | let animals; 4 | let req = fetch('./streaming', { 5 | headers: { 6 | accept: 'application/json' 7 | } 8 | }); 9 | 10 | if (isDataRequest) { 11 | animals = req.then(async (val) => val.json()); 12 | } else { 13 | const res = await req; 14 | animals = await res.json(); 15 | } 16 | 17 | console.log('stream', animals); 18 | 19 | return { 20 | streams: { 21 | animals 22 | } 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # Dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # Compiled Sanity Studio 9 | /dist 10 | 11 | # Temporary Sanity runtime, generated by the CLI on every dev server start 12 | /.sanity 13 | 14 | # Logs 15 | /logs 16 | *.log 17 | 18 | # Coverage directory used by testing tools 19 | /coverage 20 | 21 | # Misc 22 | .DS_Store 23 | *.pem 24 | 25 | # Typescript 26 | *.tsbuildinfo 27 | 28 | # Dotenv and similar local-only files 29 | *.local 30 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/routes/+page.server.js: -------------------------------------------------------------------------------- 1 | import { dev } from '$app/environment' 2 | import { env } from '$env/dynamic/private' 3 | 4 | /** @type {import('./$types').PageServerLoad} */ 5 | export async function load() { 6 | const endpoint = `https://${env.PROJECT_ID}.api.sanity.io/v2021-10-21/data/query/${env.DATASET}?query=` 7 | 8 | const res = await fetch(endpoint + '*[_type == "post"]') 9 | 10 | const data = await res.json() 11 | if (dev) { 12 | console.log({ data: data.result }) 13 | console.log({ slug: data.result[0].slug }) 14 | } 15 | 16 | return { 17 | posts: data.result 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /_examples/simple-mocking/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true 12 | } 13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 14 | // 15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 16 | // from the referenced tsconfig.json - TypeScript does not merge them in 17 | } 18 | -------------------------------------------------------------------------------- /_examples/webcomponents/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true 12 | } 13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 14 | // 15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 16 | // from the referenced tsconfig.json - TypeScript does not merge them in 17 | } 18 | -------------------------------------------------------------------------------- /src/lib/reset.css: -------------------------------------------------------------------------------- 1 | /* 2 | Josh's Custom CSS Reset 3 | https://www.joshwcomeau.com/css/custom-css-reset/ 4 | */ 5 | *, 6 | *::before, 7 | *::after { 8 | box-sizing: border-box; 9 | } 10 | * { 11 | margin: 0; 12 | } 13 | body { 14 | line-height: 1.5; 15 | -webkit-font-smoothing: antialiased; 16 | } 17 | img, 18 | picture, 19 | video, 20 | canvas, 21 | svg { 22 | display: block; 23 | max-width: 100%; 24 | } 25 | input, 26 | button, 27 | textarea, 28 | select { 29 | font: inherit; 30 | } 31 | p, 32 | h1, 33 | h2, 34 | h3, 35 | h4, 36 | h5, 37 | h6 { 38 | overflow-wrap: break-word; 39 | } 40 | #root, 41 | #__next { 42 | isolation: isolate; 43 | } 44 | -------------------------------------------------------------------------------- /_examples/simple-mocking/plugin/index.ts: -------------------------------------------------------------------------------- 1 | import type { Plugin } from 'vite'; 2 | import { loadEnv, mergeConfig } from 'vite'; 3 | import { resolve } from 'node:path'; 4 | 5 | export function simple_mock() { 6 | return { 7 | name: 'vite-plugin-simple-mocks', 8 | enforce: 'post', 9 | config(config, { mode }) { 10 | const env = loadEnv(mode, process.cwd(), ''); 11 | if (env.MOCKING === 'true') { 12 | return mergeConfig(config, { 13 | resolve: { 14 | alias: { 15 | $data: resolve(process.cwd(), './src/data/__mocks__') 16 | } 17 | } 18 | }); 19 | } 20 | return config; 21 | } 22 | } satisfies Plugin; 23 | } 24 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true 12 | } 13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias and https://kit.svelte.dev/docs/configuration#files 14 | // 15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 16 | // from the referenced tsconfig.json - TypeScript does not merge them in 17 | } 18 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "static-blog-with-data", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "preview": "vite preview", 9 | "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json", 10 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch" 11 | }, 12 | "devDependencies": { 13 | "@sveltejs/adapter-static": "^2.0.1", 14 | "@sveltejs/kit": "^1.5.0", 15 | "svelte": "^3.54.0", 16 | "svelte-check": "^3.0.1", 17 | "typescript": "^5.0.0", 18 | "vite": "^4.2.0" 19 | }, 20 | "type": "module" 21 | } 22 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true 12 | } 13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias and https://kit.svelte.dev/docs/configuration#files 14 | // 15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 16 | // from the referenced tsconfig.json - TypeScript does not merge them in 17 | } 18 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/src/routes/blog/[post]/+page.server.js: -------------------------------------------------------------------------------- 1 | import { dev } from '$app/environment' 2 | import { env } from '$env/dynamic/private' 3 | 4 | /** @type {import('./$types').PageServerLoad} */ 5 | export async function load({ params }) { 6 | const endpoint = `https://${env.PROJECT_ID}.api.sanity.\ 7 | io/v2021-10-21/data/query/${env.DATASET}?query=` 8 | 9 | const res = await fetch( 10 | endpoint + `*[slug.current == "${params.post}"][0]` 11 | ) 12 | 13 | const data = await res.json() 14 | if (dev) { 15 | console.log({ 16 | data: data.result, 17 | body: JSON.stringify(data.result.body) 18 | }) 19 | } 20 | 21 | return { 22 | post: data.result 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /_examples/webcomponents/cl.vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import { svelte } from '@sveltejs/vite-plugin-svelte'; 3 | import { readdirSync } from 'node:fs'; 4 | 5 | const entries = readdirSync('./src/lib/components'); 6 | 7 | const entry = Object.fromEntries( 8 | entries.map((entry) => [entry.replace('.svelte', '.js'), `./src/lib/components/${entry}`]) 9 | ); 10 | export default defineConfig({ 11 | build: { 12 | lib: { 13 | entry, 14 | fileName(format, entryName) { 15 | return entryName; 16 | }, 17 | formats: ['es'] 18 | } 19 | }, 20 | plugins: [ 21 | svelte({ 22 | compilerOptions: { 23 | customElement: true 24 | } 25 | }) 26 | ] 27 | }); 28 | -------------------------------------------------------------------------------- /_examples/simple-mocking/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | 'eslint:recommended', 5 | 'plugin:@typescript-eslint/recommended', 6 | 'plugin:svelte/recommended', 7 | 'prettier' 8 | ], 9 | parser: '@typescript-eslint/parser', 10 | plugins: ['@typescript-eslint'], 11 | parserOptions: { 12 | sourceType: 'module', 13 | ecmaVersion: 2020, 14 | extraFileExtensions: ['.svelte'] 15 | }, 16 | env: { 17 | browser: true, 18 | es2017: true, 19 | node: true 20 | }, 21 | overrides: [ 22 | { 23 | files: ['*.svelte'], 24 | parser: 'svelte-eslint-parser', 25 | parserOptions: { 26 | parser: '@typescript-eslint/parser' 27 | } 28 | } 29 | ] 30 | }; 31 | -------------------------------------------------------------------------------- /_examples/webcomponents/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | 'eslint:recommended', 5 | 'plugin:@typescript-eslint/recommended', 6 | 'plugin:svelte/recommended', 7 | 'prettier' 8 | ], 9 | parser: '@typescript-eslint/parser', 10 | plugins: ['@typescript-eslint'], 11 | parserOptions: { 12 | sourceType: 'module', 13 | ecmaVersion: 2020, 14 | extraFileExtensions: ['.svelte'] 15 | }, 16 | env: { 17 | browser: true, 18 | es2017: true, 19 | node: true 20 | }, 21 | overrides: [ 22 | { 23 | files: ['*.svelte'], 24 | parser: 'svelte-eslint-parser', 25 | parserOptions: { 26 | parser: '@typescript-eslint/parser' 27 | } 28 | } 29 | ] 30 | }; 31 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/error-handling/+page.svelte: -------------------------------------------------------------------------------- 1 | 22 | 23 | 24 |

Error page!

25 | 26 | 29 | 30 |

Response goes here: {fetchedMessage}

31 | -------------------------------------------------------------------------------- /tests/lib/Card.svelte.test.js: -------------------------------------------------------------------------------- 1 | import { afterEach, describe, expect, it } from 'vitest' 2 | import { cleanup, render } from '@testing-library/svelte' 3 | import Card from '$lib/Card.svelte' 4 | import CardSlot from './CardSlot.svelte' 5 | 6 | describe('thing', () => { 7 | afterEach(() => cleanup()) 8 | 9 | it('mounts', () => { 10 | const { container } = render(CardSlot) 11 | console.log({ 12 | container, 13 | children: container.innerHTML 14 | }) 15 | expect(container).toBeTruthy() 16 | expect(container.innerHTML).toMatchSnapshot() 17 | }) 18 | 19 | it('renders purple', () => { 20 | // 21 | const { container } = render(Card, { kind: 'purple' }) 22 | expect(container.innerHTML).toMatchSnapshot() 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /_examples/webcomponents/svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto'; 2 | import { vitePreprocess } from '@sveltejs/kit/vite'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter. 13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 14 | adapter: adapter() 15 | } 16 | }; 17 | 18 | export default config; 19 | -------------------------------------------------------------------------------- /playwright.config.js: -------------------------------------------------------------------------------- 1 | import { devices } from '@playwright/test' 2 | 3 | /** @type {import('@playwright/test').PlaywrightTestConfig} */ 4 | const config = { 5 | projects: [ 6 | { 7 | name: 'chromium', 8 | use: { ...devices['Desktop Chrome'] } 9 | }, 10 | { 11 | name: 'firefox', 12 | use: { ...devices['Desktop Firefox'] } 13 | }, 14 | { 15 | name: 'webkit', 16 | use: { ...devices['Desktop Safari'] } 17 | }, 18 | /* Test against mobile viewports. */ 19 | { 20 | name: 'Mobile Chrome', 21 | use: { ...devices['Pixel 5'] } 22 | }, 23 | { 24 | name: 'Mobile Safari', 25 | use: { ...devices['iPhone 12'] } 26 | } 27 | ], 28 | webServer: { 29 | command: 'pnpm dev', 30 | port: 5173 31 | }, 32 | testDir: 'tests' 33 | } 34 | 35 | export default config 36 | -------------------------------------------------------------------------------- /_examples/simple-mocking/svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto'; 2 | import { vitePreprocess } from '@sveltejs/kit/vite'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter. 13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 14 | adapter: adapter(), 15 | alias: { 16 | $data: './src/data' 17 | } 18 | } 19 | }; 20 | 21 | export default config; 22 | -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto' 2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | kit: { 7 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 8 | // If your environment is not supported or you settled on a specific environment, switch out the adapter. 9 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 10 | adapter: adapter(), 11 | alias: { 12 | "$components": "src/components/*" 13 | } 14 | }, 15 | preprocess: [vitePreprocess()], 16 | compilerOptions: { 17 | sourcemap: 18 | process.env.NODE_ENV === 'development' ? true : false 19 | }, 20 | vitePlugin: true 21 | } 22 | 23 | export default config 24 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/README.md: -------------------------------------------------------------------------------- 1 | # Sanity Blogging Content Studio 2 | 3 | Congratulations, you have now installed the Sanity Content Studio, an open source real-time content editing environment connected to the Sanity backend. 4 | 5 | Now you can do the following things: 6 | 7 | - [Read “getting started” in the docs](https://www.sanity.io/docs/introduction/getting-started?utm_source=readme) 8 | - Check out the example frontend: [React/Next.js](https://github.com/sanity-io/tutorial-sanity-blog-react-next) 9 | - [Read the blog post about this template](https://www.sanity.io/blog/build-your-own-blog-with-sanity-and-next-js?utm_source=readme) 10 | - [Join the community Slack](https://slack.sanity.io/?utm_source=readme) 11 | - [Extend and build plugins](https://www.sanity.io/docs/content-studio/extending?utm_source=readme) 12 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Launch server", 9 | "request": "launch", 10 | "runtimeArgs": ["dev"], 11 | "runtimeExecutable": "pnpm", 12 | "skipFiles": ["/**"], 13 | "type": "node", 14 | "console": "integratedTerminal" 15 | }, 16 | 17 | { 18 | "type": "chrome", 19 | "request": "launch", 20 | "name": "Launch browser", 21 | "url": "http://127.0.0.1:5173", 22 | "webRoot": "${workspaceFolder}" 23 | } 24 | ], 25 | "compounds": [ 26 | { 27 | "name": "Both", 28 | "configurations": ["Launch server", "Launch browser"] 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/jsform/+page.svelte: -------------------------------------------------------------------------------- 1 | 22 | 23 | 24 | JS Form 25 | 26 | 27 |
28 | 29 | 30 | 31 |
32 | 33 |

{response}

34 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |

This week in Svelte

6 |

Demos

7 | 8 | {#if $navigating !== null} 9 |

Loading page...

10 | {/if} 11 | 12 | 40 | -------------------------------------------------------------------------------- /_examples/webcomponents/src/lib/components/Card.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 19 | 20 |
21 |

{title}{complex?.number}

22 |
23 | 24 |
25 | 26 |
27 |
28 | 29 | 48 | -------------------------------------------------------------------------------- /src/components/GrailAccordion/GrailAccordion.svelte: -------------------------------------------------------------------------------- 1 | 32 | 33 |
    34 | 35 | {#each data as item} 36 |
  • 37 | 40 |
    41 | {item.content} 42 |
    43 |
  • 44 | {/each} 45 |
    46 |
47 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "moccasin-reindeer", 3 | "private": true, 4 | "version": "1.0.0", 5 | "main": "package.json", 6 | "license": "UNLICENSED", 7 | "scripts": { 8 | "dev": "sanity dev", 9 | "start": "sanity start", 10 | "build": "sanity build", 11 | "deploy": "sanity deploy", 12 | "deploy-graphql": "sanity graphql deploy" 13 | }, 14 | "keywords": [ 15 | "sanity" 16 | ], 17 | "dependencies": { 18 | "@sanity/vision": "^3.0.0", 19 | "react": "^18.2.0", 20 | "react-dom": "^18.2.0", 21 | "react-is": "^18.2.0", 22 | "sanity": "^3.0.0", 23 | "styled-components": "^5.2.0" 24 | }, 25 | "devDependencies": { 26 | "@sanity/eslint-config-studio": "^2.0.1", 27 | "@types/react": "^18.0.25", 28 | "@types/styled-components": "^5.1.26", 29 | "eslint": "^8.6.0", 30 | "prettier": "^2.8.7", 31 | "typescript": "^4.0.0" 32 | }, 33 | "prettier": { 34 | "semi": false, 35 | "printWidth": 100, 36 | "bracketSpacing": false, 37 | "singleQuote": true 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /_examples/webcomponents/README.md: -------------------------------------------------------------------------------- 1 | # create-svelte 2 | 3 | Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). 4 | 5 | ## Creating a project 6 | 7 | If you're seeing this, you've probably already done this step. Congrats! 8 | 9 | ```bash 10 | # create a new project in the current directory 11 | npm create svelte@latest 12 | 13 | # create a new project in my-app 14 | npm create svelte@latest my-app 15 | ``` 16 | 17 | ## Developing 18 | 19 | Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: 20 | 21 | ```bash 22 | npm run dev 23 | 24 | # or start the server and open the app in a new browser tab 25 | npm run dev -- --open 26 | ``` 27 | 28 | ## Building 29 | 30 | To create a production version of your app: 31 | 32 | ```bash 33 | npm run build 34 | ``` 35 | 36 | You can preview the production build with `npm run preview`. 37 | 38 | > To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. 39 | -------------------------------------------------------------------------------- /_examples/simple-mocking/README.md: -------------------------------------------------------------------------------- 1 | # create-svelte 2 | 3 | Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). 4 | 5 | ## Creating a project 6 | 7 | If you're seeing this, you've probably already done this step. Congrats! 8 | 9 | ```bash 10 | # create a new project in the current directory 11 | npm create svelte@latest 12 | 13 | # create a new project in my-app 14 | npm create svelte@latest my-app 15 | ``` 16 | 17 | ## Developing 18 | 19 | Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: 20 | 21 | ```bash 22 | npm run dev 23 | 24 | # or start the server and open the app in a new browser tab 25 | npm run dev -- --open 26 | ``` 27 | 28 | ## Building 29 | 30 | To create a production version of your app: 31 | 32 | ```bash 33 | npm run build 34 | ``` 35 | 36 | You can preview the production build with `npm run preview`. 37 | 38 | > To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. 39 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/schemas/author.js: -------------------------------------------------------------------------------- 1 | import {defineField, defineType} from 'sanity' 2 | 3 | export default defineType({ 4 | name: 'author', 5 | title: 'Author', 6 | type: 'document', 7 | fields: [ 8 | defineField({ 9 | name: 'name', 10 | title: 'Name', 11 | type: 'string', 12 | }), 13 | defineField({ 14 | name: 'slug', 15 | title: 'Slug', 16 | type: 'slug', 17 | options: { 18 | source: 'name', 19 | maxLength: 96, 20 | }, 21 | }), 22 | defineField({ 23 | name: 'image', 24 | title: 'Image', 25 | type: 'image', 26 | options: { 27 | hotspot: true, 28 | }, 29 | }), 30 | defineField({ 31 | name: 'bio', 32 | title: 'Bio', 33 | type: 'array', 34 | of: [ 35 | { 36 | title: 'Block', 37 | type: 'block', 38 | styles: [{title: 'Normal', value: 'normal'}], 39 | lists: [], 40 | }, 41 | ], 42 | }), 43 | ], 44 | preview: { 45 | select: { 46 | title: 'name', 47 | media: 'image', 48 | }, 49 | }, 50 | }) 51 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "this-week-in-svelte", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "preview": "vite preview", 9 | "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json", 10 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch", 11 | "test:e2e": "playwright test", 12 | "test:unit": "vitest", 13 | "lint": "prettier --plugin-search-dir . --check . && eslint .", 14 | "format": "prettier --plugin-search-dir . --write ." 15 | }, 16 | "devDependencies": { 17 | "@axe-core/playwright": "^4.7.3", 18 | "@grail-ui/svelte": "^0.9.6", 19 | "@playwright/test": "^1.37.1", 20 | "@sveltejs/adapter-auto": "^2.1.0", 21 | "@sveltejs/kit": "^1.23.0", 22 | "@sveltejs/vite-plugin-svelte": "^2.4.5", 23 | "@testing-library/svelte": "^4.0.3", 24 | "eslint": "^8.47.0", 25 | "eslint-config-prettier": "^8.10.0", 26 | "eslint-plugin-svelte3": "^4.0.0", 27 | "happy-dom": "^10.11.0", 28 | "prettier": "^2.8.8", 29 | "prettier-plugin-svelte": "^2.10.1", 30 | "svelte": "^4.2.0", 31 | "svelte-check": "^3.5.0", 32 | "typescript": "^5.2.2", 33 | "vite": "^4.4.9", 34 | "vitest": "^0.34.2" 35 | }, 36 | "type": "module" 37 | } 38 | -------------------------------------------------------------------------------- /_examples/simple-mocking/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simple-mocking", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "preview": "vite preview", 9 | "test": "npm run test:integration && npm run test:unit", 10 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 11 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 12 | "lint": "prettier --plugin-search-dir . --check . && eslint .", 13 | "format": "prettier --plugin-search-dir . --write .", 14 | "test:integration": "playwright test", 15 | "test:unit": "vitest" 16 | }, 17 | "devDependencies": { 18 | "@playwright/test": "^1.28.1", 19 | "@sveltejs/adapter-auto": "^2.0.0", 20 | "@sveltejs/kit": "^1.20.4", 21 | "@typescript-eslint/eslint-plugin": "^5.45.0", 22 | "@typescript-eslint/parser": "^5.45.0", 23 | "eslint": "^8.28.0", 24 | "eslint-config-prettier": "^8.5.0", 25 | "eslint-plugin-svelte": "^2.30.0", 26 | "prettier": "^2.8.0", 27 | "prettier-plugin-svelte": "^2.10.1", 28 | "svelte": "^4.0.5", 29 | "svelte-check": "^3.4.3", 30 | "tslib": "^2.4.1", 31 | "typescript": "^5.0.0", 32 | "vite": "^4.4.2", 33 | "vitest": "^0.32.2" 34 | }, 35 | "type": "module" 36 | } 37 | -------------------------------------------------------------------------------- /_examples/webcomponents/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webcomponents", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "build:cl": "vite build -c cl.vite.config.ts", 9 | "preview": "vite preview", 10 | "test": "npm run test:integration && npm run test:unit", 11 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 12 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 13 | "lint": "prettier --plugin-search-dir . --check . && eslint .", 14 | "format": "prettier --plugin-search-dir . --write .", 15 | "test:integration": "playwright test", 16 | "test:unit": "vitest" 17 | }, 18 | "devDependencies": { 19 | "@playwright/test": "^1.28.1", 20 | "@sveltejs/adapter-auto": "^2.0.0", 21 | "@sveltejs/kit": "^1.20.4", 22 | "@typescript-eslint/eslint-plugin": "^5.45.0", 23 | "@typescript-eslint/parser": "^5.45.0", 24 | "eslint": "^8.28.0", 25 | "eslint-config-prettier": "^8.5.0", 26 | "eslint-plugin-svelte": "^2.30.0", 27 | "prettier": "^2.8.0", 28 | "prettier-plugin-svelte": "^2.10.1", 29 | "svelte": "^4.0.5", 30 | "svelte-check": "^3.4.3", 31 | "tslib": "^2.4.1", 32 | "typescript": "^5.0.0", 33 | "vite": "^4.4.2", 34 | "vitest": "^0.32.2" 35 | }, 36 | "type": "module", 37 | "dependencies": { 38 | "@sveltejs/vite-plugin-svelte": "^2.4.3" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/links/+page.svelte: -------------------------------------------------------------------------------- 1 | Links 2 | 3 |

Underlined links demonstration

4 | 5 |

6 | Look again at that dot. That's here. That's home. That's us. On it everyone you love, 9 | everyone you know 10 | , everyone you ever heard of, every human being who ever was, lived out their lives. 11 |

12 | 13 |

14 | Our posturings, our imagined self-importance, the delusion that we have some privileged position 15 | in the Universe, are challenged by this point of pale light. Our planet is a lonely speck in the 16 | great enveloping cosmic dark. In our obscurity, in all this vastness, there is no hint that help 17 | will come from elsewhere to save us from ourselves. 18 |

19 | 20 |

21 | The Earth is the only world known so far to harbor life. There is nowhere else, at least in the 22 | near future, to which our species could migrate. Visit, yes. Settle, not yet. 23 | Like it or not, for the moment the Earth is where we make our stand. 24 |

25 | 26 |

27 | It has been said that astronomy is a humbling and character-building experience. There is perhaps 28 | no better demonstration of the folly of human conceits than this distant image of our tiny world. 29 | To me, it underscores our responsibility to deal more kindly with one another, and to preserve and 30 | cherish the pale blue dot, the only home we've ever known. 31 |

32 | -------------------------------------------------------------------------------- /src/routes/(no-layout)/component-playground/+page.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | Component playground! 15 | 16 | 17 | How is this card? 18 | 19 | 20 | 25 | 26 |

Use this:

27 |
export { default as ComponentName } from './ComponentName.svelte'
28 |
29 |
30 |
31 | 32 | 34 | console.log(e.detail)} 35 | /> 36 | 37 |

Shared props examples.

38 | 39 | 40 | Cool button 41 | 42 | JSDoc Button 43 | 44 |

JSDoc 'as const' typing

45 | 46 | {#if true} 47 | {@const person = /** @type {const} */ ({ name: 'Piers' })} 48 |

Name is {person.name}

49 | {/if} 50 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/dynamic-form/+page.server.ts: -------------------------------------------------------------------------------- 1 | import { fail } from '@sveltejs/kit' 2 | import type { Actions } from './$types' 3 | 4 | export const actions: Actions = { 5 | addPet: async ({ request }) => { 6 | const formItems = await request.formData() 7 | 8 | const items = [...formItems.entries()] 9 | 10 | /** 11 | * The pets. 12 | */ 13 | let pets: string[] = Array.from( 14 | formItems.getAll('petname'), 15 | (el) => el.toString() 16 | ) 17 | pets.push('') 18 | 19 | return { items, pets } 20 | }, 21 | removePet: async ({ request, url }) => { 22 | const formItems = await request.formData() 23 | const pet = 24 | parseInt(String(url.searchParams.get('pet')), 10) || 0 25 | console.log({ pet }) 26 | 27 | const items = [...formItems.entries()] 28 | const pets = [...formItems.getAll('petname')] 29 | 30 | pets.splice(pet, 1) 31 | 32 | console.log('After removal', { pets }) 33 | 34 | return { items, pets } 35 | }, 36 | submit: async ({ request }) => { 37 | console.log('submitted!') 38 | 39 | const formData = await request.formData() 40 | const items: [string, any][] = [...formData.entries()] 41 | 42 | console.log({ items }) 43 | 44 | interface Errors { 45 | [key: string]: string 46 | } 47 | const errors: Errors = {} 48 | if (!formData.get('name')) { 49 | errors.name = 'Please fill your name' 50 | } 51 | if (Object.keys(errors).length > 0) { 52 | return fail(400, { 53 | success: false, 54 | items, 55 | errors 56 | }) 57 | } 58 | 59 | return { success: true, items } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/schemas/post.js: -------------------------------------------------------------------------------- 1 | import {defineField, defineType} from 'sanity' 2 | 3 | export default defineType({ 4 | name: 'post', 5 | title: 'Post', 6 | type: 'document', 7 | fields: [ 8 | defineField({ 9 | name: 'title', 10 | title: 'Title', 11 | type: 'string', 12 | }), 13 | defineField({ 14 | name: 'slug', 15 | title: 'Slug', 16 | type: 'slug', 17 | options: { 18 | source: 'title', 19 | maxLength: 96, 20 | }, 21 | }), 22 | defineField({ 23 | name: 'author', 24 | title: 'Author', 25 | type: 'reference', 26 | to: {type: 'author'}, 27 | }), 28 | defineField({ 29 | name: 'mainImage', 30 | title: 'Main image', 31 | type: 'image', 32 | options: { 33 | hotspot: true, 34 | }, 35 | }), 36 | defineField({ 37 | name: 'categories', 38 | title: 'Categories', 39 | type: 'array', 40 | of: [{type: 'reference', to: {type: 'category'}}], 41 | }), 42 | defineField({ 43 | name: 'publishedAt', 44 | title: 'Published at', 45 | type: 'datetime', 46 | }), 47 | defineField({ 48 | name: 'body', 49 | title: 'Body', 50 | type: 'blockContent', 51 | }), 52 | ], 53 | 54 | preview: { 55 | select: { 56 | title: 'title', 57 | author: 'author.name', 58 | media: 'mainImage', 59 | }, 60 | prepare(selection) { 61 | const {author} = selection 62 | return {...selection, subtitle: author && `by ${author}`} 63 | }, 64 | }, 65 | }) 66 | -------------------------------------------------------------------------------- /src/components/GrailAccordion/GrailAccordionItem.svelte: -------------------------------------------------------------------------------- 1 | 17 | 18 |
  • 19 | 22 |
    23 | {content} 24 |
    25 |
  • 26 | 27 | 70 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/loading-images/+page.svelte: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 23 |

    Pet samples

    24 | 25 | {#each pets as pet} 26 |

    Pet species: {pet.species}
    Pet age: {pet.age}

    27 | {/each} 28 | 29 |

    Some cat photos!

    30 | 31 |
    32 | A maine coon cat 37 |
    38 | Loaded as a static image!
    Photo by 39 | Alexander London 43 | on 44 | Unsplash 48 |
    49 |
    50 | 51 |
    52 | An orange cat 53 |
    54 | Loaded via import!
    Photo by 55 | Amber Kipp 59 | on 60 | Unsplash 64 |
    65 |
    66 | 67 | 73 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/sanity/schemas/blockContent.js: -------------------------------------------------------------------------------- 1 | import {defineType, defineArrayMember} from 'sanity' 2 | 3 | /** 4 | * This is the schema definition for the rich text fields used for 5 | * for this blog studio. When you import it in schemas.js it can be 6 | * reused in other parts of the studio with: 7 | * { 8 | * name: 'someName', 9 | * title: 'Some title', 10 | * type: 'blockContent' 11 | * } 12 | */ 13 | export default defineType({ 14 | title: 'Block Content', 15 | name: 'blockContent', 16 | type: 'array', 17 | of: [ 18 | defineArrayMember({ 19 | title: 'Block', 20 | type: 'block', 21 | // Styles let you set what your user can mark up blocks with. These 22 | // correspond with HTML tags, but you can set any title or value 23 | // you want and decide how you want to deal with it where you want to 24 | // use your content. 25 | styles: [ 26 | {title: 'Normal', value: 'normal'}, 27 | {title: 'H1', value: 'h1'}, 28 | {title: 'H2', value: 'h2'}, 29 | {title: 'H3', value: 'h3'}, 30 | {title: 'H4', value: 'h4'}, 31 | {title: 'Quote', value: 'blockquote'}, 32 | ], 33 | lists: [{title: 'Bullet', value: 'bullet'}], 34 | // Marks let you mark up inline text in the block editor. 35 | marks: { 36 | // Decorators usually describe a single property – e.g. a typographic 37 | // preference or highlighting by editors. 38 | decorators: [ 39 | {title: 'Strong', value: 'strong'}, 40 | {title: 'Emphasis', value: 'em'}, 41 | ], 42 | // Annotations can be any object structure – e.g. a link or a footnote. 43 | annotations: [ 44 | { 45 | title: 'URL', 46 | name: 'link', 47 | type: 'object', 48 | fields: [ 49 | { 50 | title: 'URL', 51 | name: 'href', 52 | type: 'url', 53 | }, 54 | ], 55 | }, 56 | ], 57 | }, 58 | }), 59 | // You can add additional types here. Note that you can't use 60 | // primitive types such as 'string' and 'number' in the same array 61 | // as a block type. 62 | defineArrayMember({ 63 | type: 'image', 64 | options: {hotspot: true}, 65 | }), 66 | ], 67 | }) 68 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # This Week in Svelte 2 | 3 | Live website: 4 | 5 | This repository is a collection of demos made for the "This Week in Svelte" 6 | livestream. 7 | 8 | - Join the [Svelte Discord](https://svelte.dev/chat). 9 | - Watch ["This Week in Svelte" on YouTube](https://youtube.com/playlist?list=PL8bMgX1kyZTiLCyvf8vF13sdnR4fhNl6v) 10 | 11 | Tools and features showcased in this repository: 12 | 13 | - Svelte 14 | - Underlined links 15 | - Static image loading and importing 16 | - SvelteKit 17 | - Streaming with promises 18 | - Form Actions with dynamic inputs 19 | - Error handling 20 | - Vitest 21 | - Testing library 22 | - Snapshot tests 23 | - Playwright 24 | - Full page accessibility testing 25 | 26 | Other examples: 27 | 28 | - [Static blog with live 29 | data](./_examples/static-blog-with-data/) 30 | - [Web Components made in Svelte](./_examples/webcomponents/) 31 | 32 | REPL links: 33 | 34 | - [Cross-component communication and focus management](https://svelte.dev/repl/773dd5b950394555955bf0c618bdb7cf?version=3.58.0) 35 | - [Svelte@3.58.0 container queries](https://svelte.dev/repl/8e9826d64dd243458c9c61dbdee1fd39?version=3.58.0) 36 | - [Prefers-reduced-motion](https://svelte.dev/repl/585ec05a69084f3cb77b25845c9e328b?version=3.58.0) 37 | - [Accessible button considerations](https://svelte.dev/repl/788110be6b62417b929fb7a856014e09?version=3.58.0) 38 | - [Toggle problem - with `setContext` and stores](https://svelte.dev/repl/f9523264e7de472685c6c56b8dfc8de0?version=3.58.0) 39 | - [Toggle problem - with `context=module`](https://svelte.dev/repl/0bed0640d35d464f80f2fcfbda0d1d79?version=3.58.0) 40 | - [Forwarding events](https://svelte.dev/repl/420ba8606b1148a0878c24f23c498917?version=3.58.0) 41 | - [Reactive deep object binding](https://svelte.dev/repl/357945f9985d4458992ff89070689fed?version=3.58.0) 42 | - [Skip links](https://www.sveltelab.dev/lqpb2gw177tgq9t) 43 | - [Navigation demo](https://www.sveltelab.dev/y65q2x6psxf3hk2) 44 | - [Markdown with mdsvex](https://www.sveltelab.dev/vcrn9v2tu26r6x8) 45 | - [No layout shift progressive enhancement Tabs](https://www.sveltelab.dev/5fb8n9qh3qd9see) 46 | - ["NoSSR component" by Paolo](https://www.sveltelab.dev/127sz4i474ph603) 47 | - ["Toggle Switch" by Enrico](https://svelte.dev/repl/43a1db77f9434391b41783ef4e414fd3?version=4.1.2) 48 | - ["Enhanced search" by Enrico](https://www.sveltelab.dev/7qfujs8m2rc51ew) 49 | - ["Bound functions" by Enrico](https://svelte.dev/repl/fd20327024254103a8acafe336277989?version=4.2.8) 50 | -------------------------------------------------------------------------------- /src/routes/(no-layout)/hamburger-menu/HamburgerNav.svelte: -------------------------------------------------------------------------------- 1 | 28 | 29 |
    30 |
    31 | 32 | {@html hamburgerIcon} Fancy restaurant 34 | menu 36 | 37 | 46 |
    47 | 48 | Fancy restaurant 49 | 50 | 62 |
    63 | 64 | 170 | -------------------------------------------------------------------------------- /src/routes/(common-layout)/dynamic-form/+page.svelte: -------------------------------------------------------------------------------- 1 | 42 | 43 | 44 | Dynamic form! 45 | 46 | 47 |

    Dynamic form

    48 | 49 | {#if dev} 50 |

    {JSON.stringify(form)}

    51 | {/if} 52 | 53 |
    62 | {#if form?.success === true} 63 |

    Review

    64 |
      65 | {#each form.items as [key, value], i} 66 | {#if key === 'petname'} 67 |
    • 68 | Pet name {i}: {value} 69 |
    • 70 | {:else} 71 |
    • {key}: {value}
    • 72 | {/if} 73 | {/each} 74 |
    75 | {/if} 76 | 77 | {#if form?.success === false} 78 |

    There were errors in your submission

    79 |
      80 | {#each Object.entries(errors) as [fieldname, message]} 81 |
    • {message}
    • 82 | {/each} 83 |
    84 | {/if} 85 |
    86 | 87 |
    93 | 97 | 103 | 110 | 111 | {#each pets as pet, i} 112 | {#if dev} 113 |

    Pets {JSON.stringify(pets)}

    114 |

    Pet {JSON.stringify(pet)}

    115 | {/if} 116 | 117 | 123 | 126 | {/each} 127 |
    128 | 133 | 134 |
    135 |
    136 | 137 | 160 | -------------------------------------------------------------------------------- /_examples/webcomponents/dist/Card.js: -------------------------------------------------------------------------------- 1 | import { c as y, S as z, i as A, f as j, s as D, a as F, b as G, B as H, e as g, t as k, d as b, g as I, h, j as E, k as c, m as J, l as q, u as K, n as L, o as M, p as B, q as C, r as O, v as N, w as P } from "./Button-d256b521.js"; 2 | function Q(s) { 3 | F(s, "svelte-1pwxk4p", "section.svelte-1pwxk4p{--padding:2rem;box-shadow:0 0 1rem 0 rgba(0 0 0 / 0.3);padding:var(--padding);font-family:sans-serif;border-radius:0.5rem}hr.svelte-1pwxk4p{margin-inline:calc(-1 * var(--padding));margin-block:var(--padding)}h1.svelte-1pwxk4p{margin:0}div.svelte-1pwxk4p{margin-block-start:var(--padding)}"); 4 | } 5 | function R(s) { 6 | let e; 7 | return { 8 | c() { 9 | e = k("Select"); 10 | }, 11 | m(l, u) { 12 | E(l, e, u); 13 | }, 14 | d(l) { 15 | l && O(e); 16 | } 17 | }; 18 | } 19 | function T(s) { 20 | var $; 21 | let e, l, u, p = ( 22 | /*complex*/ 23 | (($ = s[1]) == null ? void 0 : $.number) + "" 24 | ), f, m, d, a, w, _, i, o; 25 | const v = ( 26 | /*#slots*/ 27 | s[2].default 28 | ), n = G( 29 | v, 30 | s, 31 | /*$$scope*/ 32 | s[4], 33 | null 34 | ); 35 | return i = new H({ 36 | props: { 37 | $$slots: { default: [R] }, 38 | $$scope: { ctx: s } 39 | } 40 | }), i.$on( 41 | "click", 42 | /*click_handler*/ 43 | s[3] 44 | ), { 45 | c() { 46 | e = g("section"), l = g("h1"), u = k( 47 | /*title*/ 48 | s[0] 49 | ), f = k(p), m = b(), d = g("hr"), a = b(), n && n.c(), w = b(), _ = g("div"), I(i.$$.fragment), h(l, "class", "svelte-1pwxk4p"), h(d, "class", "svelte-1pwxk4p"), h(_, "class", "svelte-1pwxk4p"), h(e, "class", "svelte-1pwxk4p"); 50 | }, 51 | m(t, r) { 52 | E(t, e, r), c(e, l), c(l, u), c(l, f), c(e, m), c(e, d), c(e, a), n && n.m(e, null), c(e, w), c(e, _), J(i, _, null), o = !0; 53 | }, 54 | p(t, [r]) { 55 | var S; 56 | (!o || r & /*title*/ 57 | 1) && q( 58 | u, 59 | /*title*/ 60 | t[0] 61 | ), (!o || r & /*complex*/ 62 | 2) && p !== (p = /*complex*/ 63 | ((S = t[1]) == null ? void 0 : S.number) + "") && q(f, p), n && n.p && (!o || r & /*$$scope*/ 64 | 16) && K( 65 | n, 66 | v, 67 | t, 68 | /*$$scope*/ 69 | t[4], 70 | o ? M( 71 | v, 72 | /*$$scope*/ 73 | t[4], 74 | r, 75 | null 76 | ) : L( 77 | /*$$scope*/ 78 | t[4] 79 | ), 80 | null 81 | ); 82 | const x = {}; 83 | r & /*$$scope*/ 84 | 16 && (x.$$scope = { dirty: r, ctx: t }), i.$set(x); 85 | }, 86 | i(t) { 87 | o || (B(n, t), B(i.$$.fragment, t), o = !0); 88 | }, 89 | o(t) { 90 | C(n, t), C(i.$$.fragment, t), o = !1; 91 | }, 92 | d(t) { 93 | t && O(e), n && n.d(t), N(i); 94 | } 95 | }; 96 | } 97 | function U(s, e, l) { 98 | let { $$slots: u = {}, $$scope: p } = e, { title: f = "" } = e, { complex: m } = e; 99 | function d(a) { 100 | P.call(this, s, a); 101 | } 102 | return s.$$set = (a) => { 103 | "title" in a && l(0, f = a.title), "complex" in a && l(1, m = a.complex), "$$scope" in a && l(4, p = a.$$scope); 104 | }, [f, m, u, d, p]; 105 | } 106 | class V extends z { 107 | constructor(e) { 108 | super(), A(this, e, U, T, D, { title: 0, complex: 1 }, Q); 109 | } 110 | get title() { 111 | return this.$$.ctx[0]; 112 | } 113 | set title(e) { 114 | this.$$set({ title: e }), j(); 115 | } 116 | get complex() { 117 | return this.$$.ctx[1]; 118 | } 119 | set complex(e) { 120 | this.$$set({ complex: e }), j(); 121 | } 122 | } 123 | customElements.define("twis-card", y(V, { title: {}, complex: { type: "Object", reflect: !0 } }, ["default"], [], !0)); 124 | export { 125 | V as default 126 | }; 127 | -------------------------------------------------------------------------------- /src/lib/mvp.css: -------------------------------------------------------------------------------- 1 | /* MVP.css v1.12 - https://github.com/andybrewer/mvp */ 2 | 3 | :root { 4 | --active-brightness: 0.85; 5 | --border-radius: 5px; 6 | --box-shadow: 2px 2px 10px; 7 | --color-accent: #118bee15; 8 | --color-bg: #fff; 9 | --color-bg-secondary: #e9e9e9; 10 | --color-link: #118bee; 11 | --color-secondary: #920de9; 12 | --color-secondary-accent: #920de90b; 13 | --color-shadow: #f4f4f4; 14 | --color-table: #118bee; 15 | --color-text: #000; 16 | --color-text-secondary: #999; 17 | --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; 18 | --hover-brightness: 1.2; 19 | --justify-important: center; 20 | --justify-normal: left; 21 | --line-height: 1.5; 22 | --width-card: 285px; 23 | --width-card-medium: 460px; 24 | --width-card-wide: 800px; 25 | --width-content: 1080px; 26 | } 27 | 28 | @media (prefers-color-scheme: dark) { 29 | :root[color-mode="user"] { 30 | --color-accent: #0097fc4f; 31 | --color-bg: #333; 32 | --color-bg-secondary: #555; 33 | --color-link: #0097fc; 34 | --color-secondary: #e20de9; 35 | --color-secondary-accent: #e20de94f; 36 | --color-shadow: #bbbbbb20; 37 | --color-table: #0097fc; 38 | --color-text: #f7f7f7; 39 | --color-text-secondary: #aaa; 40 | } 41 | } 42 | 43 | /* Layout */ 44 | article aside { 45 | background: var(--color-secondary-accent); 46 | border-left: 4px solid var(--color-secondary); 47 | padding: 0.01rem 0.8rem; 48 | } 49 | 50 | body { 51 | background: var(--color-bg); 52 | color: var(--color-text); 53 | font-family: var(--font-family); 54 | line-height: var(--line-height); 55 | margin: 0; 56 | overflow-x: hidden; 57 | padding: 0; 58 | } 59 | 60 | footer, 61 | header, 62 | main { 63 | margin: 0 auto; 64 | max-width: var(--width-content); 65 | padding: 3rem 1rem; 66 | } 67 | 68 | hr { 69 | background-color: var(--color-bg-secondary); 70 | border: none; 71 | height: 1px; 72 | margin: 4rem 0; 73 | width: 100%; 74 | } 75 | 76 | section { 77 | display: flex; 78 | flex-wrap: wrap; 79 | justify-content: var(--justify-important); 80 | } 81 | 82 | section img, 83 | article img { 84 | max-width: 100%; 85 | } 86 | 87 | section pre { 88 | overflow: auto; 89 | } 90 | 91 | section aside { 92 | border: 1px solid var(--color-bg-secondary); 93 | border-radius: var(--border-radius); 94 | box-shadow: var(--box-shadow) var(--color-shadow); 95 | margin: 1rem; 96 | padding: 1.25rem; 97 | width: var(--width-card); 98 | } 99 | 100 | section aside:hover { 101 | box-shadow: var(--box-shadow) var(--color-bg-secondary); 102 | } 103 | 104 | [hidden] { 105 | display: none; 106 | } 107 | 108 | /* Headers */ 109 | article header, 110 | div header, 111 | main header { 112 | padding-top: 0; 113 | } 114 | 115 | header { 116 | text-align: var(--justify-important); 117 | } 118 | 119 | header a b, 120 | header a em, 121 | header a i, 122 | header a strong { 123 | margin-left: 0.5rem; 124 | margin-right: 0.5rem; 125 | } 126 | 127 | header nav img { 128 | margin: 1rem 0; 129 | } 130 | 131 | section header { 132 | padding-top: 0; 133 | width: 100%; 134 | } 135 | 136 | /* Nav */ 137 | nav { 138 | align-items: center; 139 | display: flex; 140 | font-weight: bold; 141 | justify-content: space-between; 142 | margin-bottom: 7rem; 143 | } 144 | 145 | nav ul { 146 | list-style: none; 147 | padding: 0; 148 | } 149 | 150 | nav ul li { 151 | display: inline-block; 152 | margin: 0 0.5rem; 153 | position: relative; 154 | text-align: left; 155 | } 156 | 157 | /* Nav Dropdown */ 158 | nav ul li:hover ul { 159 | display: block; 160 | } 161 | 162 | nav ul li ul { 163 | background: var(--color-bg); 164 | border: 1px solid var(--color-bg-secondary); 165 | border-radius: var(--border-radius); 166 | box-shadow: var(--box-shadow) var(--color-shadow); 167 | display: none; 168 | height: auto; 169 | left: -2px; 170 | padding: .5rem 1rem; 171 | position: absolute; 172 | top: 1.7rem; 173 | white-space: nowrap; 174 | width: auto; 175 | z-index: 1; 176 | } 177 | 178 | nav ul li ul::before { 179 | /* fill gap above to make mousing over them easier */ 180 | content: ""; 181 | position: absolute; 182 | left: 0; 183 | right: 0; 184 | top: -0.5rem; 185 | height: 0.5rem; 186 | } 187 | 188 | nav ul li ul li, 189 | nav ul li ul li a { 190 | display: block; 191 | } 192 | 193 | /* Typography */ 194 | code, 195 | samp { 196 | background-color: var(--color-accent); 197 | border-radius: var(--border-radius); 198 | color: var(--color-text); 199 | display: inline-block; 200 | margin: 0 0.1rem; 201 | padding: 0 0.5rem; 202 | } 203 | 204 | details { 205 | margin: 1.3rem 0; 206 | } 207 | 208 | details summary { 209 | font-weight: bold; 210 | cursor: pointer; 211 | } 212 | 213 | h1, 214 | h2, 215 | h3, 216 | h4, 217 | h5, 218 | h6 { 219 | line-height: var(--line-height); 220 | } 221 | 222 | mark { 223 | padding: 0.1rem; 224 | } 225 | 226 | ol li, 227 | ul li { 228 | padding: 0.2rem 0; 229 | } 230 | 231 | p { 232 | margin: 0.75rem 0; 233 | padding: 0; 234 | width: 100%; 235 | } 236 | 237 | pre { 238 | margin: 1rem 0; 239 | max-width: var(--width-card-wide); 240 | padding: 1rem 0; 241 | } 242 | 243 | pre code, 244 | pre samp { 245 | display: block; 246 | max-width: var(--width-card-wide); 247 | padding: 0.5rem 2rem; 248 | white-space: pre-wrap; 249 | } 250 | 251 | small { 252 | color: var(--color-text-secondary); 253 | } 254 | 255 | sup { 256 | background-color: var(--color-secondary); 257 | border-radius: var(--border-radius); 258 | color: var(--color-bg); 259 | font-size: xx-small; 260 | font-weight: bold; 261 | margin: 0.2rem; 262 | padding: 0.2rem 0.3rem; 263 | position: relative; 264 | top: -2px; 265 | } 266 | 267 | /* Links */ 268 | a { 269 | color: var(--color-link); 270 | display: inline-block; 271 | font-weight: bold; 272 | text-decoration: none; 273 | } 274 | 275 | a:active { 276 | filter: brightness(var(--active-brightness)); 277 | text-decoration: underline; 278 | } 279 | 280 | a:hover { 281 | filter: brightness(var(--hover-brightness)); 282 | text-decoration: underline; 283 | } 284 | 285 | a b, 286 | a em, 287 | a i, 288 | a strong, 289 | button, 290 | input[type="submit"] { 291 | border-radius: var(--border-radius); 292 | display: inline-block; 293 | font-size: medium; 294 | font-weight: bold; 295 | line-height: var(--line-height); 296 | margin: 0.5rem 0; 297 | padding: 1rem 2rem; 298 | } 299 | 300 | button, 301 | input[type="submit"] { 302 | font-family: var(--font-family); 303 | } 304 | 305 | button:active, 306 | input[type="submit"]:active { 307 | filter: brightness(var(--active-brightness)); 308 | } 309 | 310 | button:hover, 311 | input[type="submit"]:hover { 312 | cursor: pointer; 313 | filter: brightness(var(--hover-brightness)); 314 | } 315 | 316 | a b, 317 | a strong, 318 | button, 319 | input[type="submit"] { 320 | background-color: var(--color-link); 321 | border: 2px solid var(--color-link); 322 | color: var(--color-bg); 323 | } 324 | 325 | a em, 326 | a i { 327 | border: 2px solid var(--color-link); 328 | border-radius: var(--border-radius); 329 | color: var(--color-link); 330 | display: inline-block; 331 | padding: 1rem 2rem; 332 | } 333 | 334 | article aside a { 335 | color: var(--color-secondary); 336 | } 337 | 338 | /* Images */ 339 | figure { 340 | margin: 0; 341 | padding: 0; 342 | } 343 | 344 | figure img { 345 | max-width: 100%; 346 | } 347 | 348 | figure figcaption { 349 | color: var(--color-text-secondary); 350 | } 351 | 352 | /* Forms */ 353 | button:disabled, 354 | input:disabled { 355 | background: var(--color-bg-secondary); 356 | border-color: var(--color-bg-secondary); 357 | color: var(--color-text-secondary); 358 | cursor: not-allowed; 359 | } 360 | 361 | button[disabled]:hover, 362 | input[type="submit"][disabled]:hover { 363 | filter: none; 364 | } 365 | 366 | form { 367 | border: 1px solid var(--color-bg-secondary); 368 | border-radius: var(--border-radius); 369 | box-shadow: var(--box-shadow) var(--color-shadow); 370 | display: block; 371 | max-width: var(--width-card-wide); 372 | min-width: var(--width-card); 373 | padding: 1.5rem; 374 | text-align: var(--justify-normal); 375 | } 376 | 377 | form header { 378 | margin: 1.5rem 0; 379 | padding: 1.5rem 0; 380 | } 381 | 382 | input, 383 | label, 384 | select, 385 | textarea { 386 | display: block; 387 | font-size: inherit; 388 | max-width: var(--width-card-wide); 389 | } 390 | 391 | input[type="checkbox"], 392 | input[type="radio"] { 393 | display: inline-block; 394 | } 395 | 396 | input[type="checkbox"]+label, 397 | input[type="radio"]+label { 398 | display: inline-block; 399 | font-weight: normal; 400 | position: relative; 401 | top: 1px; 402 | } 403 | 404 | input[type="range"] { 405 | padding: 0.4rem 0; 406 | } 407 | 408 | input, 409 | select, 410 | textarea { 411 | border: 1px solid var(--color-bg-secondary); 412 | border-radius: var(--border-radius); 413 | margin-bottom: 1rem; 414 | padding: 0.4rem 0.8rem; 415 | } 416 | 417 | input[type="text"], 418 | textarea { 419 | width: calc(100% - 1.6rem); 420 | } 421 | 422 | input[readonly], 423 | textarea[readonly] { 424 | background-color: var(--color-bg-secondary); 425 | } 426 | 427 | label { 428 | font-weight: bold; 429 | margin-bottom: 0.2rem; 430 | } 431 | 432 | /* Popups */ 433 | dialog { 434 | border: 1px solid var(--color-bg-secondary); 435 | border-radius: var(--border-radius); 436 | box-shadow: var(--box-shadow) var(--color-shadow); 437 | position: fixed; 438 | top: 50%; 439 | left: 50%; 440 | transform: translate(-50%, -50%); 441 | width: 50%; 442 | z-index: 999; 443 | } 444 | 445 | /* Tables */ 446 | table { 447 | border: 1px solid var(--color-bg-secondary); 448 | border-radius: var(--border-radius); 449 | border-spacing: 0; 450 | display: inline-block; 451 | max-width: 100%; 452 | overflow-x: auto; 453 | padding: 0; 454 | white-space: nowrap; 455 | } 456 | 457 | table td, 458 | table th, 459 | table tr { 460 | padding: 0.4rem 0.8rem; 461 | text-align: var(--justify-important); 462 | } 463 | 464 | table thead { 465 | background-color: var(--color-table); 466 | border-collapse: collapse; 467 | border-radius: var(--border-radius); 468 | color: var(--color-bg); 469 | margin: 0; 470 | padding: 0; 471 | } 472 | 473 | table thead th:first-child { 474 | border-top-left-radius: var(--border-radius); 475 | } 476 | 477 | table thead th:last-child { 478 | border-top-right-radius: var(--border-radius); 479 | } 480 | 481 | table thead th:first-child, 482 | table tr td:first-child { 483 | text-align: var(--justify-normal); 484 | } 485 | 486 | table tr:nth-child(even) { 487 | background-color: var(--color-accent); 488 | } 489 | 490 | /* Quotes */ 491 | blockquote { 492 | display: block; 493 | font-size: x-large; 494 | line-height: var(--line-height); 495 | margin: 1rem auto; 496 | max-width: var(--width-card-medium); 497 | padding: 1.5rem 1rem; 498 | text-align: var(--justify-important); 499 | } 500 | 501 | blockquote footer { 502 | color: var(--color-text-secondary); 503 | display: block; 504 | font-size: small; 505 | line-height: var(--line-height); 506 | padding: 1.5rem 0; 507 | } 508 | -------------------------------------------------------------------------------- /_examples/webcomponents/dist/Button-d256b521.js: -------------------------------------------------------------------------------- 1 | var z = Object.defineProperty; 2 | var F = (e, t, n) => t in e ? z(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n; 3 | var l = (e, t, n) => (F(e, typeof t != "symbol" ? t + "" : t, n), n); 4 | function x() { 5 | } 6 | function b(e, t) { 7 | for (const n in t) 8 | e[n] = t[n]; 9 | return ( 10 | /** @type {T & S} */ 11 | e 12 | ); 13 | } 14 | function T(e) { 15 | return e(); 16 | } 17 | function S() { 18 | return /* @__PURE__ */ Object.create(null); 19 | } 20 | function y(e) { 21 | e.forEach(T); 22 | } 23 | function D(e) { 24 | return typeof e == "function"; 25 | } 26 | function G(e, t) { 27 | return e != e ? t == t : e !== t || e && typeof e == "object" || typeof e == "function"; 28 | } 29 | function K(e) { 30 | return Object.keys(e).length === 0; 31 | } 32 | function Q(e, t, n, s) { 33 | if (e) { 34 | const r = I(e, t, n, s); 35 | return e[0](r); 36 | } 37 | } 38 | function I(e, t, n, s) { 39 | return e[1] && s ? b(n.ctx.slice(), e[1](s(t))) : n.ctx; 40 | } 41 | function W(e, t, n, s) { 42 | if (e[2] && s) { 43 | const r = e[2](s(n)); 44 | if (t.dirty === void 0) 45 | return r; 46 | if (typeof r == "object") { 47 | const i = [], o = Math.max(t.dirty.length, r.length); 48 | for (let u = 0; u < o; u += 1) 49 | i[u] = t.dirty[u] | r[u]; 50 | return i; 51 | } 52 | return t.dirty | r; 53 | } 54 | return t.dirty; 55 | } 56 | function X(e, t, n, s, r, i) { 57 | if (r) { 58 | const o = I(t, n, s, i); 59 | e.p(o, r); 60 | } 61 | } 62 | function Y(e) { 63 | if (e.ctx.length > 32) { 64 | const t = [], n = e.ctx.length / 32; 65 | for (let s = 0; s < n; s++) 66 | t[s] = -1; 67 | return t; 68 | } 69 | return -1; 70 | } 71 | function Z(e) { 72 | const t = {}; 73 | for (const n in e) 74 | n[0] !== "$" && (t[n] = e[n]); 75 | return t; 76 | } 77 | function v(e, t) { 78 | const n = {}; 79 | t = new Set(t); 80 | for (const s in e) 81 | !t.has(s) && s[0] !== "$" && (n[s] = e[s]); 82 | return n; 83 | } 84 | function tt(e, t) { 85 | e.appendChild(t); 86 | } 87 | function et(e, t, n) { 88 | const s = nt(e); 89 | if (!s.getElementById(t)) { 90 | const r = j("style"); 91 | r.id = t, r.textContent = n, st(s, r); 92 | } 93 | } 94 | function nt(e) { 95 | if (!e) 96 | return document; 97 | const t = e.getRootNode ? e.getRootNode() : e.ownerDocument; 98 | return t && /** @type {ShadowRoot} */ 99 | t.host ? ( 100 | /** @type {ShadowRoot} */ 101 | t 102 | ) : e.ownerDocument; 103 | } 104 | function st(e, t) { 105 | return tt( 106 | /** @type {Document} */ 107 | e.head || e, 108 | t 109 | ), t.sheet; 110 | } 111 | function H(e, t, n) { 112 | e.insertBefore(t, n || null); 113 | } 114 | function O(e) { 115 | e.parentNode && e.parentNode.removeChild(e); 116 | } 117 | function j(e) { 118 | return document.createElement(e); 119 | } 120 | function rt(e) { 121 | return document.createTextNode(e); 122 | } 123 | function Nt() { 124 | return rt(" "); 125 | } 126 | function ot(e, t, n, s) { 127 | return e.addEventListener(t, n, s), () => e.removeEventListener(t, n, s); 128 | } 129 | function J(e, t, n) { 130 | n == null ? e.removeAttribute(t) : e.getAttribute(t) !== n && e.setAttribute(t, n); 131 | } 132 | const it = ["width", "height"]; 133 | function P(e, t) { 134 | const n = Object.getOwnPropertyDescriptors(e.__proto__); 135 | for (const s in t) 136 | t[s] == null ? e.removeAttribute(s) : s === "style" ? e.style.cssText = t[s] : s === "__value" ? e.value = e[s] = t[s] : n[s] && n[s].set && it.indexOf(s) === -1 ? e[s] = t[s] : J(e, s, t[s]); 137 | } 138 | function ct(e) { 139 | return Array.from(e.childNodes); 140 | } 141 | function Ct(e, t) { 142 | t = "" + t, e.data !== t && (e.data = /** @type {string} */ 143 | t); 144 | } 145 | function B(e, t, n) { 146 | e.classList.toggle(t, !!n); 147 | } 148 | function ut(e) { 149 | const t = {}; 150 | return e.childNodes.forEach( 151 | /** @param {Element} node */ 152 | (n) => { 153 | t[n.slot || "default"] = !0; 154 | } 155 | ), t; 156 | } 157 | let A; 158 | function g(e) { 159 | A = e; 160 | } 161 | function ft(e, t) { 162 | const n = e.$$.callbacks[t.type]; 163 | n && n.slice().forEach((s) => s.call(this, t)); 164 | } 165 | const h = [], M = []; 166 | let _ = []; 167 | const R = [], lt = /* @__PURE__ */ Promise.resolve(); 168 | let E = !1; 169 | function at() { 170 | E || (E = !0, lt.then(V)); 171 | } 172 | function k(e) { 173 | _.push(e); 174 | } 175 | const w = /* @__PURE__ */ new Set(); 176 | let d = 0; 177 | function V() { 178 | if (d !== 0) 179 | return; 180 | const e = A; 181 | do { 182 | try { 183 | for (; d < h.length; ) { 184 | const t = h[d]; 185 | d++, g(t), $t(t.$$); 186 | } 187 | } catch (t) { 188 | throw h.length = 0, d = 0, t; 189 | } 190 | for (g(null), h.length = 0, d = 0; M.length; ) 191 | M.pop()(); 192 | for (let t = 0; t < _.length; t += 1) { 193 | const n = _[t]; 194 | w.has(n) || (w.add(n), n()); 195 | } 196 | _.length = 0; 197 | } while (h.length); 198 | for (; R.length; ) 199 | R.pop()(); 200 | E = !1, w.clear(), g(e); 201 | } 202 | function $t(e) { 203 | if (e.fragment !== null) { 204 | e.update(), y(e.before_update); 205 | const t = e.dirty; 206 | e.dirty = [-1], e.fragment && e.fragment.p(e.ctx, t), e.after_update.forEach(k); 207 | } 208 | } 209 | function dt(e) { 210 | const t = [], n = []; 211 | _.forEach((s) => e.indexOf(s) === -1 ? t.push(s) : n.push(s)), n.forEach((s) => s()), _ = t; 212 | } 213 | const m = /* @__PURE__ */ new Set(); 214 | let ht; 215 | function q(e, t) { 216 | e && e.i && (m.delete(e), e.i(t)); 217 | } 218 | function _t(e, t, n, s) { 219 | if (e && e.o) { 220 | if (m.has(e)) 221 | return; 222 | m.add(e), ht.c.push(() => { 223 | m.delete(e), s && (n && e.d(1), s()); 224 | }), e.o(t); 225 | } else 226 | s && s(); 227 | } 228 | function gt(e, t) { 229 | const n = {}, s = {}, r = { $$scope: 1 }; 230 | let i = e.length; 231 | for (; i--; ) { 232 | const o = e[i], u = t[i]; 233 | if (u) { 234 | for (const f in o) 235 | f in u || (s[f] = 1); 236 | for (const f in u) 237 | r[f] || (n[f] = u[f], r[f] = 1); 238 | e[i] = u; 239 | } else 240 | for (const f in o) 241 | r[f] = 1; 242 | } 243 | for (const o in s) 244 | o in n || (n[o] = void 0); 245 | return n; 246 | } 247 | function St(e) { 248 | e && e.c(); 249 | } 250 | function mt(e, t, n) { 251 | const { fragment: s, after_update: r } = e.$$; 252 | s && s.m(t, n), k(() => { 253 | const i = e.$$.on_mount.map(T).filter(D); 254 | e.$$.on_destroy ? e.$$.on_destroy.push(...i) : y(i), e.$$.on_mount = []; 255 | }), r.forEach(k); 256 | } 257 | function pt(e, t) { 258 | const n = e.$$; 259 | n.fragment !== null && (dt(n.after_update), y(n.on_destroy), n.fragment && n.fragment.d(t), n.on_destroy = n.fragment = null, n.ctx = []); 260 | } 261 | function bt(e, t) { 262 | e.$$.dirty[0] === -1 && (h.push(e), at(), e.$$.dirty.fill(0)), e.$$.dirty[t / 31 | 0] |= 1 << t % 31; 263 | } 264 | function yt(e, t, n, s, r, i, o, u = [-1]) { 265 | const f = A; 266 | g(e); 267 | const c = e.$$ = { 268 | fragment: null, 269 | ctx: [], 270 | // state 271 | props: i, 272 | update: x, 273 | not_equal: r, 274 | bound: S(), 275 | // lifecycle 276 | on_mount: [], 277 | on_destroy: [], 278 | on_disconnect: [], 279 | before_update: [], 280 | after_update: [], 281 | context: new Map(t.context || (f ? f.$$.context : [])), 282 | // everything else 283 | callbacks: S(), 284 | dirty: u, 285 | skip_bound: !1, 286 | root: t.target || f.$$.root 287 | }; 288 | o && o(c.root); 289 | let a = !1; 290 | if (c.ctx = n ? n(e, t.props || {}, ($, L, ...N) => { 291 | const C = N.length ? N[0] : L; 292 | return c.ctx && r(c.ctx[$], c.ctx[$] = C) && (!c.skip_bound && c.bound[$] && c.bound[$](C), a && bt(e, $)), L; 293 | }) : [], c.update(), a = !0, y(c.before_update), c.fragment = s ? s(c.ctx) : !1, t.target) { 294 | if (t.hydrate) { 295 | const $ = ct(t.target); 296 | c.fragment && c.fragment.l($), $.forEach(O); 297 | } else 298 | c.fragment && c.fragment.c(); 299 | t.intro && q(e.$$.fragment), mt(e, t.target, t.anchor), V(); 300 | } 301 | g(f); 302 | } 303 | let U; 304 | typeof HTMLElement == "function" && (U = class extends HTMLElement { 305 | constructor(t, n, s) { 306 | super(); 307 | /** The Svelte component constructor */ 308 | l(this, "$$ctor"); 309 | /** Slots */ 310 | l(this, "$$s"); 311 | /** The Svelte component instance */ 312 | l(this, "$$c"); 313 | /** Whether or not the custom element is connected */ 314 | l(this, "$$cn", !1); 315 | /** Component props data */ 316 | l(this, "$$d", {}); 317 | /** `true` if currently in the process of reflecting component props back to attributes */ 318 | l(this, "$$r", !1); 319 | /** @type {Record} Props definition (name, reflected, type etc) */ 320 | l(this, "$$p_d", {}); 321 | /** @type {Record} Event listeners */ 322 | l(this, "$$l", {}); 323 | /** @type {Map} Event listener unsubscribe functions */ 324 | l(this, "$$l_u", /* @__PURE__ */ new Map()); 325 | this.$$ctor = t, this.$$s = n, s && this.attachShadow({ mode: "open" }); 326 | } 327 | addEventListener(t, n, s) { 328 | if (this.$$l[t] = this.$$l[t] || [], this.$$l[t].push(n), this.$$c) { 329 | const r = this.$$c.$on(t, n); 330 | this.$$l_u.set(n, r); 331 | } 332 | super.addEventListener(t, n, s); 333 | } 334 | removeEventListener(t, n, s) { 335 | if (super.removeEventListener(t, n, s), this.$$c) { 336 | const r = this.$$l_u.get(n); 337 | r && (r(), this.$$l_u.delete(n)); 338 | } 339 | } 340 | async connectedCallback() { 341 | if (this.$$cn = !0, !this.$$c) { 342 | let t = function(i) { 343 | return () => { 344 | let o; 345 | return { 346 | c: function() { 347 | o = j("slot"), i !== "default" && J(o, "name", i); 348 | }, 349 | /** 350 | * @param {HTMLElement} target 351 | * @param {HTMLElement} [anchor] 352 | */ 353 | m: function(c, a) { 354 | H(c, o, a); 355 | }, 356 | d: function(c) { 357 | c && O(o); 358 | } 359 | }; 360 | }; 361 | }; 362 | if (await Promise.resolve(), !this.$$cn) 363 | return; 364 | const n = {}, s = ut(this); 365 | for (const i of this.$$s) 366 | i in s && (n[i] = [t(i)]); 367 | for (const i of this.attributes) { 368 | const o = this.$$g_p(i.name); 369 | o in this.$$d || (this.$$d[o] = p(o, i.value, this.$$p_d, "toProp")); 370 | } 371 | this.$$c = new this.$$ctor({ 372 | target: this.shadowRoot || this, 373 | props: { 374 | ...this.$$d, 375 | $$slots: n, 376 | $$scope: { 377 | ctx: [] 378 | } 379 | } 380 | }); 381 | const r = () => { 382 | this.$$r = !0; 383 | for (const i in this.$$p_d) 384 | if (this.$$d[i] = this.$$c.$$.ctx[this.$$c.$$.props[i]], this.$$p_d[i].reflect) { 385 | const o = p( 386 | i, 387 | this.$$d[i], 388 | this.$$p_d, 389 | "toAttribute" 390 | ); 391 | o == null ? this.removeAttribute(i) : this.setAttribute(this.$$p_d[i].attribute || i, o); 392 | } 393 | this.$$r = !1; 394 | }; 395 | this.$$c.$$.after_update.push(r), r(); 396 | for (const i in this.$$l) 397 | for (const o of this.$$l[i]) { 398 | const u = this.$$c.$on(i, o); 399 | this.$$l_u.set(o, u); 400 | } 401 | this.$$l = {}; 402 | } 403 | } 404 | // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte 405 | // and setting attributes through setAttribute etc, this is helpful 406 | attributeChangedCallback(t, n, s) { 407 | var r; 408 | this.$$r || (t = this.$$g_p(t), this.$$d[t] = p(t, s, this.$$p_d, "toProp"), (r = this.$$c) == null || r.$set({ [t]: this.$$d[t] })); 409 | } 410 | disconnectedCallback() { 411 | this.$$cn = !1, Promise.resolve().then(() => { 412 | this.$$cn || (this.$$c.$destroy(), this.$$c = void 0); 413 | }); 414 | } 415 | $$g_p(t) { 416 | return Object.keys(this.$$p_d).find( 417 | (n) => this.$$p_d[n].attribute === t || !this.$$p_d[n].attribute && n.toLowerCase() === t 418 | ) || t; 419 | } 420 | }); 421 | function p(e, t, n, s) { 422 | var i; 423 | const r = (i = n[e]) == null ? void 0 : i.type; 424 | if (t = r === "Boolean" && typeof t != "boolean" ? t != null : t, !s || !n[e]) 425 | return t; 426 | if (s === "toAttribute") 427 | switch (r) { 428 | case "Object": 429 | case "Array": 430 | return t == null ? null : JSON.stringify(t); 431 | case "Boolean": 432 | return t ? "" : null; 433 | case "Number": 434 | return t ?? null; 435 | default: 436 | return t; 437 | } 438 | else 439 | switch (r) { 440 | case "Object": 441 | case "Array": 442 | return t && JSON.parse(t); 443 | case "Boolean": 444 | return t; 445 | case "Number": 446 | return t != null ? +t : t; 447 | default: 448 | return t; 449 | } 450 | } 451 | function wt(e, t, n, s, r, i) { 452 | let o = class extends U { 453 | constructor() { 454 | super(e, n, r), this.$$p_d = t; 455 | } 456 | static get observedAttributes() { 457 | return Object.keys(t).map( 458 | (u) => (t[u].attribute || u).toLowerCase() 459 | ); 460 | } 461 | }; 462 | return Object.keys(t).forEach((u) => { 463 | Object.defineProperty(o.prototype, u, { 464 | get() { 465 | return this.$$c && u in this.$$c ? this.$$c[u] : this.$$d[u]; 466 | }, 467 | set(f) { 468 | var c; 469 | f = p(u, f, t), this.$$d[u] = f, (c = this.$$c) == null || c.$set({ [u]: f }); 470 | } 471 | }); 472 | }), s.forEach((u) => { 473 | Object.defineProperty(o.prototype, u, { 474 | get() { 475 | var f; 476 | return (f = this.$$c) == null ? void 0 : f[u]; 477 | } 478 | }); 479 | }), i && (o = i(o)), e.element = /** @type {any} */ 480 | o, o; 481 | } 482 | class xt { 483 | constructor() { 484 | /** 485 | * ### PRIVATE API 486 | * 487 | * Do not use, may change at any time 488 | * 489 | * @type {any} 490 | */ 491 | l(this, "$$"); 492 | /** 493 | * ### PRIVATE API 494 | * 495 | * Do not use, may change at any time 496 | * 497 | * @type {any} 498 | */ 499 | l(this, "$$set"); 500 | } 501 | /** @returns {void} */ 502 | $destroy() { 503 | pt(this, 1), this.$destroy = x; 504 | } 505 | /** 506 | * @template {Extract} K 507 | * @param {K} type 508 | * @param {((e: Events[K]) => void) | null | undefined} callback 509 | * @returns {() => void} 510 | */ 511 | $on(t, n) { 512 | if (!D(n)) 513 | return x; 514 | const s = this.$$.callbacks[t] || (this.$$.callbacks[t] = []); 515 | return s.push(n), () => { 516 | const r = s.indexOf(n); 517 | r !== -1 && s.splice(r, 1); 518 | }; 519 | } 520 | /** 521 | * @param {Partial} props 522 | * @returns {void} 523 | */ 524 | $set(t) { 525 | this.$$set && !K(t) && (this.$$.skip_bound = !0, this.$$set(t), this.$$.skip_bound = !1); 526 | } 527 | } 528 | const Et = "4"; 529 | typeof window < "u" && (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(Et); 530 | function kt(e) { 531 | et(e, "svelte-1i5hxsb", "button.svelte-1i5hxsb{background-color:lightgreen;padding:0.5rem 1rem;border-radius:0.5rem;font-weight:bold;border:0}"); 532 | } 533 | function Ot(e) { 534 | let t, n, s, r; 535 | const i = ( 536 | /*#slots*/ 537 | e[2].default 538 | ), o = Q( 539 | i, 540 | e, 541 | /*$$scope*/ 542 | e[1], 543 | null 544 | ); 545 | let u = [ 546 | /*$$restProps*/ 547 | e[0] 548 | ], f = {}; 549 | for (let c = 0; c < u.length; c += 1) 550 | f = b(f, u[c]); 551 | return { 552 | c() { 553 | t = j("button"), o && o.c(), P(t, f), B(t, "svelte-1i5hxsb", !0); 554 | }, 555 | m(c, a) { 556 | H(c, t, a), o && o.m(t, null), t.autofocus && t.focus(), n = !0, s || (r = ot( 557 | t, 558 | "click", 559 | /*click_handler*/ 560 | e[3] 561 | ), s = !0); 562 | }, 563 | p(c, [a]) { 564 | o && o.p && (!n || a & /*$$scope*/ 565 | 2) && X( 566 | o, 567 | i, 568 | c, 569 | /*$$scope*/ 570 | c[1], 571 | n ? W( 572 | i, 573 | /*$$scope*/ 574 | c[1], 575 | a, 576 | null 577 | ) : Y( 578 | /*$$scope*/ 579 | c[1] 580 | ), 581 | null 582 | ), P(t, f = gt(u, [a & /*$$restProps*/ 583 | 1 && /*$$restProps*/ 584 | c[0]])), B(t, "svelte-1i5hxsb", !0); 585 | }, 586 | i(c) { 587 | n || (q(o, c), n = !0); 588 | }, 589 | o(c) { 590 | _t(o, c), n = !1; 591 | }, 592 | d(c) { 593 | c && O(t), o && o.d(c), s = !1, r(); 594 | } 595 | }; 596 | } 597 | function jt(e, t, n) { 598 | const s = []; 599 | let r = v(t, s), { $$slots: i = {}, $$scope: o } = t; 600 | function u(f) { 601 | ft.call(this, e, f); 602 | } 603 | return e.$$set = (f) => { 604 | t = b(b({}, t), Z(f)), n(0, r = v(t, s)), "$$scope" in f && n(1, o = f.$$scope); 605 | }, [r, o, i, u]; 606 | } 607 | class At extends xt { 608 | constructor(t) { 609 | super(), yt(this, t, jt, Ot, G, {}, kt); 610 | } 611 | } 612 | wt(At, {}, ["default"], [], !0); 613 | export { 614 | At as B, 615 | xt as S, 616 | et as a, 617 | Q as b, 618 | wt as c, 619 | Nt as d, 620 | j as e, 621 | V as f, 622 | St as g, 623 | J as h, 624 | yt as i, 625 | H as j, 626 | tt as k, 627 | Ct as l, 628 | mt as m, 629 | Y as n, 630 | W as o, 631 | q as p, 632 | _t as q, 633 | O as r, 634 | G as s, 635 | rt as t, 636 | X as u, 637 | pt as v, 638 | ft as w 639 | }; 640 | -------------------------------------------------------------------------------- /_examples/static-blog-with-data/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | devDependencies: 4 | '@sveltejs/adapter-static': 5 | specifier: ^2.0.1 6 | version: 2.0.1(@sveltejs/kit@1.14.0) 7 | '@sveltejs/kit': 8 | specifier: ^1.5.0 9 | version: 1.14.0(svelte@3.57.0)(vite@4.2.1) 10 | svelte: 11 | specifier: ^3.54.0 12 | version: 3.57.0 13 | svelte-check: 14 | specifier: ^3.0.1 15 | version: 3.1.4(svelte@3.57.0) 16 | typescript: 17 | specifier: ^5.0.0 18 | version: 5.0.2 19 | vite: 20 | specifier: ^4.2.0 21 | version: 4.2.1 22 | 23 | packages: 24 | 25 | /@esbuild/android-arm64@0.17.14: 26 | resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==} 27 | engines: {node: '>=12'} 28 | cpu: [arm64] 29 | os: [android] 30 | requiresBuild: true 31 | dev: true 32 | optional: true 33 | 34 | /@esbuild/android-arm@0.17.14: 35 | resolution: {integrity: sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==} 36 | engines: {node: '>=12'} 37 | cpu: [arm] 38 | os: [android] 39 | requiresBuild: true 40 | dev: true 41 | optional: true 42 | 43 | /@esbuild/android-x64@0.17.14: 44 | resolution: {integrity: sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==} 45 | engines: {node: '>=12'} 46 | cpu: [x64] 47 | os: [android] 48 | requiresBuild: true 49 | dev: true 50 | optional: true 51 | 52 | /@esbuild/darwin-arm64@0.17.14: 53 | resolution: {integrity: sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==} 54 | engines: {node: '>=12'} 55 | cpu: [arm64] 56 | os: [darwin] 57 | requiresBuild: true 58 | dev: true 59 | optional: true 60 | 61 | /@esbuild/darwin-x64@0.17.14: 62 | resolution: {integrity: sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==} 63 | engines: {node: '>=12'} 64 | cpu: [x64] 65 | os: [darwin] 66 | requiresBuild: true 67 | dev: true 68 | optional: true 69 | 70 | /@esbuild/freebsd-arm64@0.17.14: 71 | resolution: {integrity: sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==} 72 | engines: {node: '>=12'} 73 | cpu: [arm64] 74 | os: [freebsd] 75 | requiresBuild: true 76 | dev: true 77 | optional: true 78 | 79 | /@esbuild/freebsd-x64@0.17.14: 80 | resolution: {integrity: sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==} 81 | engines: {node: '>=12'} 82 | cpu: [x64] 83 | os: [freebsd] 84 | requiresBuild: true 85 | dev: true 86 | optional: true 87 | 88 | /@esbuild/linux-arm64@0.17.14: 89 | resolution: {integrity: sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==} 90 | engines: {node: '>=12'} 91 | cpu: [arm64] 92 | os: [linux] 93 | requiresBuild: true 94 | dev: true 95 | optional: true 96 | 97 | /@esbuild/linux-arm@0.17.14: 98 | resolution: {integrity: sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==} 99 | engines: {node: '>=12'} 100 | cpu: [arm] 101 | os: [linux] 102 | requiresBuild: true 103 | dev: true 104 | optional: true 105 | 106 | /@esbuild/linux-ia32@0.17.14: 107 | resolution: {integrity: sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==} 108 | engines: {node: '>=12'} 109 | cpu: [ia32] 110 | os: [linux] 111 | requiresBuild: true 112 | dev: true 113 | optional: true 114 | 115 | /@esbuild/linux-loong64@0.17.14: 116 | resolution: {integrity: sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==} 117 | engines: {node: '>=12'} 118 | cpu: [loong64] 119 | os: [linux] 120 | requiresBuild: true 121 | dev: true 122 | optional: true 123 | 124 | /@esbuild/linux-mips64el@0.17.14: 125 | resolution: {integrity: sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==} 126 | engines: {node: '>=12'} 127 | cpu: [mips64el] 128 | os: [linux] 129 | requiresBuild: true 130 | dev: true 131 | optional: true 132 | 133 | /@esbuild/linux-ppc64@0.17.14: 134 | resolution: {integrity: sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==} 135 | engines: {node: '>=12'} 136 | cpu: [ppc64] 137 | os: [linux] 138 | requiresBuild: true 139 | dev: true 140 | optional: true 141 | 142 | /@esbuild/linux-riscv64@0.17.14: 143 | resolution: {integrity: sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==} 144 | engines: {node: '>=12'} 145 | cpu: [riscv64] 146 | os: [linux] 147 | requiresBuild: true 148 | dev: true 149 | optional: true 150 | 151 | /@esbuild/linux-s390x@0.17.14: 152 | resolution: {integrity: sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==} 153 | engines: {node: '>=12'} 154 | cpu: [s390x] 155 | os: [linux] 156 | requiresBuild: true 157 | dev: true 158 | optional: true 159 | 160 | /@esbuild/linux-x64@0.17.14: 161 | resolution: {integrity: sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==} 162 | engines: {node: '>=12'} 163 | cpu: [x64] 164 | os: [linux] 165 | requiresBuild: true 166 | dev: true 167 | optional: true 168 | 169 | /@esbuild/netbsd-x64@0.17.14: 170 | resolution: {integrity: sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==} 171 | engines: {node: '>=12'} 172 | cpu: [x64] 173 | os: [netbsd] 174 | requiresBuild: true 175 | dev: true 176 | optional: true 177 | 178 | /@esbuild/openbsd-x64@0.17.14: 179 | resolution: {integrity: sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==} 180 | engines: {node: '>=12'} 181 | cpu: [x64] 182 | os: [openbsd] 183 | requiresBuild: true 184 | dev: true 185 | optional: true 186 | 187 | /@esbuild/sunos-x64@0.17.14: 188 | resolution: {integrity: sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==} 189 | engines: {node: '>=12'} 190 | cpu: [x64] 191 | os: [sunos] 192 | requiresBuild: true 193 | dev: true 194 | optional: true 195 | 196 | /@esbuild/win32-arm64@0.17.14: 197 | resolution: {integrity: sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==} 198 | engines: {node: '>=12'} 199 | cpu: [arm64] 200 | os: [win32] 201 | requiresBuild: true 202 | dev: true 203 | optional: true 204 | 205 | /@esbuild/win32-ia32@0.17.14: 206 | resolution: {integrity: sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==} 207 | engines: {node: '>=12'} 208 | cpu: [ia32] 209 | os: [win32] 210 | requiresBuild: true 211 | dev: true 212 | optional: true 213 | 214 | /@esbuild/win32-x64@0.17.14: 215 | resolution: {integrity: sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==} 216 | engines: {node: '>=12'} 217 | cpu: [x64] 218 | os: [win32] 219 | requiresBuild: true 220 | dev: true 221 | optional: true 222 | 223 | /@jridgewell/resolve-uri@3.1.0: 224 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 225 | engines: {node: '>=6.0.0'} 226 | dev: true 227 | 228 | /@jridgewell/sourcemap-codec@1.4.14: 229 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 230 | dev: true 231 | 232 | /@jridgewell/trace-mapping@0.3.17: 233 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} 234 | dependencies: 235 | '@jridgewell/resolve-uri': 3.1.0 236 | '@jridgewell/sourcemap-codec': 1.4.14 237 | dev: true 238 | 239 | /@nodelib/fs.scandir@2.1.5: 240 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 241 | engines: {node: '>= 8'} 242 | dependencies: 243 | '@nodelib/fs.stat': 2.0.5 244 | run-parallel: 1.2.0 245 | dev: true 246 | 247 | /@nodelib/fs.stat@2.0.5: 248 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 249 | engines: {node: '>= 8'} 250 | dev: true 251 | 252 | /@nodelib/fs.walk@1.2.8: 253 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 254 | engines: {node: '>= 8'} 255 | dependencies: 256 | '@nodelib/fs.scandir': 2.1.5 257 | fastq: 1.15.0 258 | dev: true 259 | 260 | /@polka/url@1.0.0-next.21: 261 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} 262 | dev: true 263 | 264 | /@sveltejs/adapter-static@2.0.1(@sveltejs/kit@1.14.0): 265 | resolution: {integrity: sha512-o5/q3YwD/ErxYCFlK1v3ydvldyNKk1lh3oeyxn4mhz+Pkbx/uuxhzmbOpytTlp5aVqNHDVsb04xadUzOFCDDzw==} 266 | peerDependencies: 267 | '@sveltejs/kit': ^1.5.0 268 | dependencies: 269 | '@sveltejs/kit': 1.14.0(svelte@3.57.0)(vite@4.2.1) 270 | dev: true 271 | 272 | /@sveltejs/kit@1.14.0(svelte@3.57.0)(vite@4.2.1): 273 | resolution: {integrity: sha512-4e/cZT0z4IppEkqNvMrurGz6VE1gScukFU7XqwTL/yrGJGXHqS9D7RvsOcE1hASsgrMu6w/fKTIhxT5oN0K1Jw==} 274 | engines: {node: ^16.14 || >=18} 275 | hasBin: true 276 | requiresBuild: true 277 | peerDependencies: 278 | svelte: ^3.54.0 279 | vite: ^4.0.0 280 | dependencies: 281 | '@sveltejs/vite-plugin-svelte': 2.0.3(svelte@3.57.0)(vite@4.2.1) 282 | '@types/cookie': 0.5.1 283 | cookie: 0.5.0 284 | devalue: 4.3.0 285 | esm-env: 1.0.0 286 | kleur: 4.1.5 287 | magic-string: 0.30.0 288 | mime: 3.0.0 289 | sade: 1.8.1 290 | set-cookie-parser: 2.6.0 291 | sirv: 2.0.2 292 | svelte: 3.57.0 293 | tiny-glob: 0.2.9 294 | undici: 5.21.0 295 | vite: 4.2.1 296 | transitivePeerDependencies: 297 | - supports-color 298 | dev: true 299 | 300 | /@sveltejs/vite-plugin-svelte@2.0.3(svelte@3.57.0)(vite@4.2.1): 301 | resolution: {integrity: sha512-o+cguBFdwIGtRbNkYOyqTM7KvRUffxh5bfK4oJsWKG2obu+v/cbpT03tJrGl58C7tRXo/aEC0/axN5FVHBj0nA==} 302 | engines: {node: ^14.18.0 || >= 16} 303 | peerDependencies: 304 | svelte: ^3.54.0 305 | vite: ^4.0.0 306 | dependencies: 307 | debug: 4.3.4 308 | deepmerge: 4.3.1 309 | kleur: 4.1.5 310 | magic-string: 0.29.0 311 | svelte: 3.57.0 312 | svelte-hmr: 0.15.1(svelte@3.57.0) 313 | vite: 4.2.1 314 | vitefu: 0.2.4(vite@4.2.1) 315 | transitivePeerDependencies: 316 | - supports-color 317 | dev: true 318 | 319 | /@types/cookie@0.5.1: 320 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} 321 | dev: true 322 | 323 | /@types/pug@2.0.6: 324 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} 325 | dev: true 326 | 327 | /anymatch@3.1.3: 328 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 329 | engines: {node: '>= 8'} 330 | dependencies: 331 | normalize-path: 3.0.0 332 | picomatch: 2.3.1 333 | dev: true 334 | 335 | /balanced-match@1.0.2: 336 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 337 | dev: true 338 | 339 | /binary-extensions@2.2.0: 340 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 341 | engines: {node: '>=8'} 342 | dev: true 343 | 344 | /brace-expansion@1.1.11: 345 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 346 | dependencies: 347 | balanced-match: 1.0.2 348 | concat-map: 0.0.1 349 | dev: true 350 | 351 | /braces@3.0.2: 352 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 353 | engines: {node: '>=8'} 354 | dependencies: 355 | fill-range: 7.0.1 356 | dev: true 357 | 358 | /buffer-crc32@0.2.13: 359 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 360 | dev: true 361 | 362 | /busboy@1.6.0: 363 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 364 | engines: {node: '>=10.16.0'} 365 | dependencies: 366 | streamsearch: 1.1.0 367 | dev: true 368 | 369 | /callsites@3.1.0: 370 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 371 | engines: {node: '>=6'} 372 | dev: true 373 | 374 | /chokidar@3.5.3: 375 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 376 | engines: {node: '>= 8.10.0'} 377 | dependencies: 378 | anymatch: 3.1.3 379 | braces: 3.0.2 380 | glob-parent: 5.1.2 381 | is-binary-path: 2.1.0 382 | is-glob: 4.0.3 383 | normalize-path: 3.0.0 384 | readdirp: 3.6.0 385 | optionalDependencies: 386 | fsevents: 2.3.2 387 | dev: true 388 | 389 | /concat-map@0.0.1: 390 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 391 | dev: true 392 | 393 | /cookie@0.5.0: 394 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 395 | engines: {node: '>= 0.6'} 396 | dev: true 397 | 398 | /debug@4.3.4: 399 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 400 | engines: {node: '>=6.0'} 401 | peerDependencies: 402 | supports-color: '*' 403 | peerDependenciesMeta: 404 | supports-color: 405 | optional: true 406 | dependencies: 407 | ms: 2.1.2 408 | dev: true 409 | 410 | /deepmerge@4.3.1: 411 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 412 | engines: {node: '>=0.10.0'} 413 | dev: true 414 | 415 | /detect-indent@6.1.0: 416 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 417 | engines: {node: '>=8'} 418 | dev: true 419 | 420 | /devalue@4.3.0: 421 | resolution: {integrity: sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==} 422 | dev: true 423 | 424 | /es6-promise@3.3.1: 425 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} 426 | dev: true 427 | 428 | /esbuild@0.17.14: 429 | resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==} 430 | engines: {node: '>=12'} 431 | hasBin: true 432 | requiresBuild: true 433 | optionalDependencies: 434 | '@esbuild/android-arm': 0.17.14 435 | '@esbuild/android-arm64': 0.17.14 436 | '@esbuild/android-x64': 0.17.14 437 | '@esbuild/darwin-arm64': 0.17.14 438 | '@esbuild/darwin-x64': 0.17.14 439 | '@esbuild/freebsd-arm64': 0.17.14 440 | '@esbuild/freebsd-x64': 0.17.14 441 | '@esbuild/linux-arm': 0.17.14 442 | '@esbuild/linux-arm64': 0.17.14 443 | '@esbuild/linux-ia32': 0.17.14 444 | '@esbuild/linux-loong64': 0.17.14 445 | '@esbuild/linux-mips64el': 0.17.14 446 | '@esbuild/linux-ppc64': 0.17.14 447 | '@esbuild/linux-riscv64': 0.17.14 448 | '@esbuild/linux-s390x': 0.17.14 449 | '@esbuild/linux-x64': 0.17.14 450 | '@esbuild/netbsd-x64': 0.17.14 451 | '@esbuild/openbsd-x64': 0.17.14 452 | '@esbuild/sunos-x64': 0.17.14 453 | '@esbuild/win32-arm64': 0.17.14 454 | '@esbuild/win32-ia32': 0.17.14 455 | '@esbuild/win32-x64': 0.17.14 456 | dev: true 457 | 458 | /esm-env@1.0.0: 459 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} 460 | dev: true 461 | 462 | /fast-glob@3.2.12: 463 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 464 | engines: {node: '>=8.6.0'} 465 | dependencies: 466 | '@nodelib/fs.stat': 2.0.5 467 | '@nodelib/fs.walk': 1.2.8 468 | glob-parent: 5.1.2 469 | merge2: 1.4.1 470 | micromatch: 4.0.5 471 | dev: true 472 | 473 | /fastq@1.15.0: 474 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 475 | dependencies: 476 | reusify: 1.0.4 477 | dev: true 478 | 479 | /fill-range@7.0.1: 480 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 481 | engines: {node: '>=8'} 482 | dependencies: 483 | to-regex-range: 5.0.1 484 | dev: true 485 | 486 | /fs.realpath@1.0.0: 487 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 488 | dev: true 489 | 490 | /fsevents@2.3.2: 491 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 492 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 493 | os: [darwin] 494 | requiresBuild: true 495 | dev: true 496 | optional: true 497 | 498 | /function-bind@1.1.1: 499 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 500 | dev: true 501 | 502 | /glob-parent@5.1.2: 503 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 504 | engines: {node: '>= 6'} 505 | dependencies: 506 | is-glob: 4.0.3 507 | dev: true 508 | 509 | /glob@7.2.3: 510 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 511 | dependencies: 512 | fs.realpath: 1.0.0 513 | inflight: 1.0.6 514 | inherits: 2.0.4 515 | minimatch: 3.1.2 516 | once: 1.4.0 517 | path-is-absolute: 1.0.1 518 | dev: true 519 | 520 | /globalyzer@0.1.0: 521 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 522 | dev: true 523 | 524 | /globrex@0.1.2: 525 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 526 | dev: true 527 | 528 | /graceful-fs@4.2.11: 529 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 530 | dev: true 531 | 532 | /has@1.0.3: 533 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 534 | engines: {node: '>= 0.4.0'} 535 | dependencies: 536 | function-bind: 1.1.1 537 | dev: true 538 | 539 | /import-fresh@3.3.0: 540 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 541 | engines: {node: '>=6'} 542 | dependencies: 543 | parent-module: 1.0.1 544 | resolve-from: 4.0.0 545 | dev: true 546 | 547 | /inflight@1.0.6: 548 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 549 | dependencies: 550 | once: 1.4.0 551 | wrappy: 1.0.2 552 | dev: true 553 | 554 | /inherits@2.0.4: 555 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 556 | dev: true 557 | 558 | /is-binary-path@2.1.0: 559 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 560 | engines: {node: '>=8'} 561 | dependencies: 562 | binary-extensions: 2.2.0 563 | dev: true 564 | 565 | /is-core-module@2.11.0: 566 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 567 | dependencies: 568 | has: 1.0.3 569 | dev: true 570 | 571 | /is-extglob@2.1.1: 572 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 573 | engines: {node: '>=0.10.0'} 574 | dev: true 575 | 576 | /is-glob@4.0.3: 577 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 578 | engines: {node: '>=0.10.0'} 579 | dependencies: 580 | is-extglob: 2.1.1 581 | dev: true 582 | 583 | /is-number@7.0.0: 584 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 585 | engines: {node: '>=0.12.0'} 586 | dev: true 587 | 588 | /kleur@4.1.5: 589 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 590 | engines: {node: '>=6'} 591 | dev: true 592 | 593 | /magic-string@0.27.0: 594 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 595 | engines: {node: '>=12'} 596 | dependencies: 597 | '@jridgewell/sourcemap-codec': 1.4.14 598 | dev: true 599 | 600 | /magic-string@0.29.0: 601 | resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==} 602 | engines: {node: '>=12'} 603 | dependencies: 604 | '@jridgewell/sourcemap-codec': 1.4.14 605 | dev: true 606 | 607 | /magic-string@0.30.0: 608 | resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} 609 | engines: {node: '>=12'} 610 | dependencies: 611 | '@jridgewell/sourcemap-codec': 1.4.14 612 | dev: true 613 | 614 | /merge2@1.4.1: 615 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 616 | engines: {node: '>= 8'} 617 | dev: true 618 | 619 | /micromatch@4.0.5: 620 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 621 | engines: {node: '>=8.6'} 622 | dependencies: 623 | braces: 3.0.2 624 | picomatch: 2.3.1 625 | dev: true 626 | 627 | /mime@3.0.0: 628 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 629 | engines: {node: '>=10.0.0'} 630 | hasBin: true 631 | dev: true 632 | 633 | /min-indent@1.0.1: 634 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 635 | engines: {node: '>=4'} 636 | dev: true 637 | 638 | /minimatch@3.1.2: 639 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 640 | dependencies: 641 | brace-expansion: 1.1.11 642 | dev: true 643 | 644 | /minimist@1.2.8: 645 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 646 | dev: true 647 | 648 | /mkdirp@0.5.6: 649 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 650 | hasBin: true 651 | dependencies: 652 | minimist: 1.2.8 653 | dev: true 654 | 655 | /mri@1.2.0: 656 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 657 | engines: {node: '>=4'} 658 | dev: true 659 | 660 | /mrmime@1.0.1: 661 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} 662 | engines: {node: '>=10'} 663 | dev: true 664 | 665 | /ms@2.1.2: 666 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 667 | dev: true 668 | 669 | /nanoid@3.3.6: 670 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 671 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 672 | hasBin: true 673 | dev: true 674 | 675 | /normalize-path@3.0.0: 676 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 677 | engines: {node: '>=0.10.0'} 678 | dev: true 679 | 680 | /once@1.4.0: 681 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 682 | dependencies: 683 | wrappy: 1.0.2 684 | dev: true 685 | 686 | /parent-module@1.0.1: 687 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 688 | engines: {node: '>=6'} 689 | dependencies: 690 | callsites: 3.1.0 691 | dev: true 692 | 693 | /path-is-absolute@1.0.1: 694 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 695 | engines: {node: '>=0.10.0'} 696 | dev: true 697 | 698 | /path-parse@1.0.7: 699 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 700 | dev: true 701 | 702 | /picocolors@1.0.0: 703 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 704 | dev: true 705 | 706 | /picomatch@2.3.1: 707 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 708 | engines: {node: '>=8.6'} 709 | dev: true 710 | 711 | /postcss@8.4.21: 712 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} 713 | engines: {node: ^10 || ^12 || >=14} 714 | dependencies: 715 | nanoid: 3.3.6 716 | picocolors: 1.0.0 717 | source-map-js: 1.0.2 718 | dev: true 719 | 720 | /queue-microtask@1.2.3: 721 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 722 | dev: true 723 | 724 | /readdirp@3.6.0: 725 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 726 | engines: {node: '>=8.10.0'} 727 | dependencies: 728 | picomatch: 2.3.1 729 | dev: true 730 | 731 | /resolve-from@4.0.0: 732 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 733 | engines: {node: '>=4'} 734 | dev: true 735 | 736 | /resolve@1.22.1: 737 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 738 | hasBin: true 739 | dependencies: 740 | is-core-module: 2.11.0 741 | path-parse: 1.0.7 742 | supports-preserve-symlinks-flag: 1.0.0 743 | dev: true 744 | 745 | /reusify@1.0.4: 746 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 747 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 748 | dev: true 749 | 750 | /rimraf@2.7.1: 751 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 752 | hasBin: true 753 | dependencies: 754 | glob: 7.2.3 755 | dev: true 756 | 757 | /rollup@3.20.2: 758 | resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} 759 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 760 | hasBin: true 761 | optionalDependencies: 762 | fsevents: 2.3.2 763 | dev: true 764 | 765 | /run-parallel@1.2.0: 766 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 767 | dependencies: 768 | queue-microtask: 1.2.3 769 | dev: true 770 | 771 | /sade@1.8.1: 772 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 773 | engines: {node: '>=6'} 774 | dependencies: 775 | mri: 1.2.0 776 | dev: true 777 | 778 | /sander@0.5.1: 779 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} 780 | dependencies: 781 | es6-promise: 3.3.1 782 | graceful-fs: 4.2.11 783 | mkdirp: 0.5.6 784 | rimraf: 2.7.1 785 | dev: true 786 | 787 | /set-cookie-parser@2.6.0: 788 | resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} 789 | dev: true 790 | 791 | /sirv@2.0.2: 792 | resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} 793 | engines: {node: '>= 10'} 794 | dependencies: 795 | '@polka/url': 1.0.0-next.21 796 | mrmime: 1.0.1 797 | totalist: 3.0.0 798 | dev: true 799 | 800 | /sorcery@0.11.0: 801 | resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} 802 | hasBin: true 803 | dependencies: 804 | '@jridgewell/sourcemap-codec': 1.4.14 805 | buffer-crc32: 0.2.13 806 | minimist: 1.2.8 807 | sander: 0.5.1 808 | dev: true 809 | 810 | /source-map-js@1.0.2: 811 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 812 | engines: {node: '>=0.10.0'} 813 | dev: true 814 | 815 | /streamsearch@1.1.0: 816 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 817 | engines: {node: '>=10.0.0'} 818 | dev: true 819 | 820 | /strip-indent@3.0.0: 821 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 822 | engines: {node: '>=8'} 823 | dependencies: 824 | min-indent: 1.0.1 825 | dev: true 826 | 827 | /supports-preserve-symlinks-flag@1.0.0: 828 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 829 | engines: {node: '>= 0.4'} 830 | dev: true 831 | 832 | /svelte-check@3.1.4(svelte@3.57.0): 833 | resolution: {integrity: sha512-25Lb46ZS4IK/XpBMe4IBMrtYf23V8alqBX+szXoccb7uM0D2Wqq5rMRzYBONZnFVuU1bQG3R50lyIT5eRewv2g==} 834 | hasBin: true 835 | peerDependencies: 836 | svelte: ^3.55.0 837 | dependencies: 838 | '@jridgewell/trace-mapping': 0.3.17 839 | chokidar: 3.5.3 840 | fast-glob: 3.2.12 841 | import-fresh: 3.3.0 842 | picocolors: 1.0.0 843 | sade: 1.8.1 844 | svelte: 3.57.0 845 | svelte-preprocess: 5.0.3(svelte@3.57.0)(typescript@4.9.5) 846 | typescript: 4.9.5 847 | transitivePeerDependencies: 848 | - '@babel/core' 849 | - coffeescript 850 | - less 851 | - postcss 852 | - postcss-load-config 853 | - pug 854 | - sass 855 | - stylus 856 | - sugarss 857 | dev: true 858 | 859 | /svelte-hmr@0.15.1(svelte@3.57.0): 860 | resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} 861 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 862 | peerDependencies: 863 | svelte: '>=3.19.0' 864 | dependencies: 865 | svelte: 3.57.0 866 | dev: true 867 | 868 | /svelte-preprocess@5.0.3(svelte@3.57.0)(typescript@4.9.5): 869 | resolution: {integrity: sha512-GrHF1rusdJVbOZOwgPWtpqmaexkydznKzy5qIC2FabgpFyKN57bjMUUUqPRfbBXK5igiEWn1uO/DXsa2vJ5VHA==} 870 | engines: {node: '>= 14.10.0'} 871 | requiresBuild: true 872 | peerDependencies: 873 | '@babel/core': ^7.10.2 874 | coffeescript: ^2.5.1 875 | less: ^3.11.3 || ^4.0.0 876 | postcss: ^7 || ^8 877 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 878 | pug: ^3.0.0 879 | sass: ^1.26.8 880 | stylus: ^0.55.0 881 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 882 | svelte: ^3.23.0 883 | typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' 884 | peerDependenciesMeta: 885 | '@babel/core': 886 | optional: true 887 | coffeescript: 888 | optional: true 889 | less: 890 | optional: true 891 | postcss: 892 | optional: true 893 | postcss-load-config: 894 | optional: true 895 | pug: 896 | optional: true 897 | sass: 898 | optional: true 899 | stylus: 900 | optional: true 901 | sugarss: 902 | optional: true 903 | typescript: 904 | optional: true 905 | dependencies: 906 | '@types/pug': 2.0.6 907 | detect-indent: 6.1.0 908 | magic-string: 0.27.0 909 | sorcery: 0.11.0 910 | strip-indent: 3.0.0 911 | svelte: 3.57.0 912 | typescript: 4.9.5 913 | dev: true 914 | 915 | /svelte@3.57.0: 916 | resolution: {integrity: sha512-WMXEvF+RtAaclw0t3bPDTUe19pplMlfyKDsixbHQYgCWi9+O9VN0kXU1OppzrB9gPAvz4NALuoca2LfW2bOjTQ==} 917 | engines: {node: '>= 8'} 918 | dev: true 919 | 920 | /tiny-glob@0.2.9: 921 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 922 | dependencies: 923 | globalyzer: 0.1.0 924 | globrex: 0.1.2 925 | dev: true 926 | 927 | /to-regex-range@5.0.1: 928 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 929 | engines: {node: '>=8.0'} 930 | dependencies: 931 | is-number: 7.0.0 932 | dev: true 933 | 934 | /totalist@3.0.0: 935 | resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} 936 | engines: {node: '>=6'} 937 | dev: true 938 | 939 | /typescript@4.9.5: 940 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 941 | engines: {node: '>=4.2.0'} 942 | hasBin: true 943 | dev: true 944 | 945 | /typescript@5.0.2: 946 | resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} 947 | engines: {node: '>=12.20'} 948 | hasBin: true 949 | dev: true 950 | 951 | /undici@5.21.0: 952 | resolution: {integrity: sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==} 953 | engines: {node: '>=12.18'} 954 | dependencies: 955 | busboy: 1.6.0 956 | dev: true 957 | 958 | /vite@4.2.1: 959 | resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==} 960 | engines: {node: ^14.18.0 || >=16.0.0} 961 | hasBin: true 962 | peerDependencies: 963 | '@types/node': '>= 14' 964 | less: '*' 965 | sass: '*' 966 | stylus: '*' 967 | sugarss: '*' 968 | terser: ^5.4.0 969 | peerDependenciesMeta: 970 | '@types/node': 971 | optional: true 972 | less: 973 | optional: true 974 | sass: 975 | optional: true 976 | stylus: 977 | optional: true 978 | sugarss: 979 | optional: true 980 | terser: 981 | optional: true 982 | dependencies: 983 | esbuild: 0.17.14 984 | postcss: 8.4.21 985 | resolve: 1.22.1 986 | rollup: 3.20.2 987 | optionalDependencies: 988 | fsevents: 2.3.2 989 | dev: true 990 | 991 | /vitefu@0.2.4(vite@4.2.1): 992 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} 993 | peerDependencies: 994 | vite: ^3.0.0 || ^4.0.0 995 | peerDependenciesMeta: 996 | vite: 997 | optional: true 998 | dependencies: 999 | vite: 4.2.1 1000 | dev: true 1001 | 1002 | /wrappy@1.0.2: 1003 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1004 | dev: true 1005 | --------------------------------------------------------------------------------