├── .eslintignore ├── .eslintrc.cjs ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── LICENSE.md ├── README.md ├── dist ├── font-handling │ ├── index.d.ts │ └── index.js ├── index.d.ts ├── index.js ├── processing │ ├── nodes_render.js │ ├── png_render.d.ts │ ├── png_render.js │ ├── svg_render.d.ts │ └── svg_render.js └── types │ └── types.d.ts ├── eslint.config.js ├── package.json ├── playwright.config.ts ├── pnpm-lock.yaml ├── src ├── app.d.ts ├── app.html ├── demo.spec.ts ├── index.test.ts ├── lib │ ├── font-handling │ │ └── index.ts │ ├── index.ts │ ├── processing │ │ ├── nodes_render.ts │ │ ├── png_render.ts │ │ └── svg_render.ts │ └── types │ │ └── types.d.ts └── routes │ ├── +page.svelte │ └── image │ ├── +server.ts │ └── HelloWorld.svelte ├── static ├── TYPEWR__.TTF ├── favicon.ico └── jost.woff ├── svelte.config.js ├── tests └── test.ts ├── tsconfig.json ├── vite.config.js └── vite.config.ts /.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 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parser: '@typescript-eslint/parser', 4 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], 5 | plugins: ['svelte3', '@typescript-eslint'], 6 | ignorePatterns: ['*.cjs'], 7 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], 8 | settings: { 9 | 'svelte3/typescript': () => require('typescript') 10 | }, 11 | parserOptions: { 12 | sourceType: 'module', 13 | ecmaVersion: 2020 14 | }, 15 | env: { 16 | browser: true, 17 | es2017: true, 18 | node: true 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /.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 | .npmrc -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Package Managers 2 | package-lock.json 3 | pnpm-lock.yaml 4 | yarn.lock 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 100, 6 | "plugins": [ 7 | "prettier-plugin-svelte" 8 | ], 9 | "overrides": [ 10 | { 11 | "files": "*.svelte", 12 | "options": { 13 | "parser": "svelte" 14 | } 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Stephen Gunn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # svelte-component-to-image 2 | 3 | A package for easily rendering .png images from svelte components in SvelteKit. Inspired by Vercel's 4 | [`OG Image Generation`](https://vercel.com/docs/concepts/functions/edge-functions/og-image-generation) tool. 5 | 6 | Good for rendering dynamic Open Graph images quickly and effeciently without having to use canvas. 7 | 8 | [Demo](https://svelte-component-to-image.vercel.app/) 9 | 10 | ## Features 11 | 12 | - Renders a normal svelte component as a png 13 | - Component props are supported for dynamic image generation 14 | - Use basic CSS like flexbox and absolute positioning ([See valid CSS](https://github.com/vercel/satori#css)) 15 | - Lightweight and fast (doesn't use canvas or puppeteer) 16 | - Load custom fonts: tff, otf, woff accepted (woff2 not accepted currently) 17 | 18 | ## Svelte 5 Usage 19 | 20 | The svelte 5 version will be available as the 1.0.0+ release. 21 | 22 | You will need to add `` to every component you want to render as an image. You will see an error if you don't and the component will not render. 23 | 24 | ### Warning 25 | 26 | There is currently a bug with the Svelte 5 version deep in a dependency that will render radial gradients fine in dev but will crash production. I am working on a fix. 27 | 28 | ## Svelte 4 Usage 29 | 30 | The Svelte 4 version is available as the 0.1.0 release. 31 | 32 | ## Installation 33 | 34 | ``` 35 | npm install svelte-component-to-image 36 | ``` 37 | 38 | ### Tested On 39 | 40 | - Vercel (working) 41 | - Netlify (working) 42 | - Cloudflare Pages (not working) 43 | 44 | ## Usage 45 | 46 | This package is NOT for rendering normal svelte components as images, you will need to write your components with image rendering in mind. The guidelines are set by ([Satori's CSS Guidelines](https://github.com/vercel/satori#css)) - you will need to write your markup and css with these factors in mind. 47 | 48 | ### Create A Component 49 | 50 | Create a `.svelte` component with JS/HTML/CSS. You can pass props or use additional technologies 51 | that require preproccesors like TypeScript or SASS. 52 | 53 | #### HelloWorld.svelte 54 | 55 | ```svelte 56 | 59 | 60 |
61 |

62 | {text} world! 63 |

64 |
65 | 66 | 85 | ``` 86 | 87 | ### +server.ts Endpoint 88 | 89 | Create a +server.ts endpoint to render and serve the image. Import the package and options type. 90 | 91 | More on how the font importing works below. 92 | 93 | #### image/+server.ts 94 | 95 | ```TS 96 | import { error } from '@sveltejs/kit' 97 | import type { RequestHandler } from './$types' 98 | 99 | // Svelte Component To Image 100 | import { image_from_component, type RenderOptions } from 'svelte-component-to-image' 101 | 102 | // Normal .svelte component 103 | import HelloWorld from './HelloWorld.svelte' 104 | 105 | export const GET: RequestHandler = (async ({url}) => { 106 | try { 107 | const options: RenderOptions = { 108 | width: 1200, 109 | height: 600, 110 | props: { 111 | text: url.searchParams.get('text') ?? 'text not found' 112 | }, 113 | fonts: [ 114 | { 115 | name: 'Typewriter', 116 | url: `${url.origin}/TYPEWR__.TTF`, 117 | weight: 400, 118 | style: 'normal' 119 | } 120 | ], 121 | debug: false // you can omit this or set it to true to see logs of data, it can help for debug edge cases 122 | } 123 | 124 | // pass the component and options to the package 125 | const image = await image_from_component(HelloWorld, options) 126 | const response = new Response(image) 127 | if(!dev){ 128 | // caching on dev will make it hard to see iterations 129 | response.headers.append('Content-Type', 'image/png') 130 | response.headers.append('Cache-Control', 's-maxage=604800, stale-while-revalidate=604800') 131 | } 132 | return response 133 | } catch (e) { 134 | console.error(e) 135 | throw error(500, 'Error trying to generate image from component.') 136 | } 137 | }) satisfies RequestHandler 138 | ``` 139 | 140 | ### Font Importing 141 | 142 | You can import as many ttf, otf, and woff fonts as you want to use inside of your component. 143 | Although, importing 100 fonts is going to affect server load and speed. 144 | 145 | **woff2 files are not currently supported.** 146 | 147 | Fonts files can be local or remote. They need a full URL to be properly loaded. Local fonts 148 | stored in `/static` can be loaded using `${url.origin}/` as long as `{url}` is made available 149 | in the endpoint. 150 | 151 | Once the font is loaded, you can reference them in the CSS using `font-family`. If only one font is loaded, 152 | it will be the default. 153 | 154 | ### Not All Fonts Work! 155 | 156 | Not all fonts work! If a font fails to load it will break the image rendering. I am not sure what causes this or which fonts are "approved" - but I have had luck using [Font Squirrel's Webfont Generator](https://www.fontsquirrel.com/tools/webfont-generator) to convert fonts to web-safe formats and using those. 157 | 158 | ### Images 159 | 160 | Images can be used and rendered like normal. You will want to set the height and width. 161 | 162 | ```HTML 163 | 164 | ``` 165 | 166 | ### More info 167 | 168 | This uses Vercel's Satori. You can find out more about what is and isn't supported by reading it's docs: 169 | [Vercel's Satori](https://github.com/vercel/satori) 170 | 171 | ## License 172 | 173 | MIT 174 | -------------------------------------------------------------------------------- /dist/font-handling/index.d.ts: -------------------------------------------------------------------------------- 1 | export declare const get_font_as_buffer: (location: string) => Promise; 2 | -------------------------------------------------------------------------------- /dist/font-handling/index.js: -------------------------------------------------------------------------------- 1 | function isValidUrl(location) { 2 | try { 3 | new URL(location); 4 | return true; 5 | } 6 | catch { 7 | return false; 8 | } 9 | } 10 | // get local font and render as an array buffer 11 | export const get_font_as_buffer = async (location) => { 12 | // check to make sure that we have a full URL 13 | if (!isValidUrl(location)) { 14 | console.error(`Font locations need to be specified with a full URL to work`); 15 | throw new Error(`Invalid URL: ${location}`); 16 | } 17 | // the renderer 18 | const font = await (await fetch(location)).blob(); 19 | const buf = await font.arrayBuffer(); 20 | return buf; 21 | }; 22 | -------------------------------------------------------------------------------- /dist/index.d.ts: -------------------------------------------------------------------------------- 1 | export declare const image_from_component: (component: any, options: RenderOptions) => Promise; 2 | export type RenderOptions = { 3 | width: number; 4 | height: number; 5 | props?: { 6 | [key: string]: any; 7 | }; 8 | fonts: FontOptions[]; 9 | debug?: boolean; 10 | }; 11 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | // component to image pipeline 2 | import { nodes_render } from './processing/nodes_render.js'; 3 | import { svg_render } from './processing/svg_render.js'; 4 | import { png_render } from './processing/png_render.js'; 5 | export const image_from_component = async (component, options) => { 6 | try { 7 | // the major steps 8 | const nodes = await nodes_render(component, options.props, options.debug); 9 | const svg = await svg_render(nodes, options); 10 | const png = await png_render(svg, options, options.debug ?? false); 11 | return png; 12 | } 13 | catch (error) { 14 | console.error(error); 15 | } 16 | return undefined; 17 | }; 18 | -------------------------------------------------------------------------------- /dist/processing/nodes_render.js: -------------------------------------------------------------------------------- 1 | // Take a svelte component, render it down to html, inline the styles 2 | // then return a set of satori ready nodes 3 | import juice from 'juice'; 4 | import { html as to_satori_nodes } from 'satori-html'; 5 | import { render } from 'svelte/server'; 6 | export const nodes_render = async (Component, props, debug) => { 7 | // render the body and the head 8 | const { head, body } = render(Component, { props }); 9 | if (debug) { 10 | console.log('CSS:', head); 11 | console.log('HTML:', body); 12 | } 13 | if (!head) { 14 | throw new Error('CSS not being returned from the Svelte component. Please add to the top of your image component.'); 15 | } 16 | if (!body) { 17 | throw new Error('No HTML returned from component.'); 18 | } 19 | const inline_html = juice(head + body, {}); 20 | if (debug) { 21 | console.log('INLINED HTML:', inline_html); 22 | } 23 | if (!inline_html) { 24 | throw new Error('Trouble inlining the CSS.'); 25 | } 26 | // render satori friendly HTML and return it 27 | const satori_nodes = to_satori_nodes(inline_html); 28 | if (debug) { 29 | console.log('SATORI NODES:', satori_nodes); 30 | } 31 | if (!satori_nodes) { 32 | throw new Error('Trouble converting HTML to Satori nodes'); 33 | } 34 | return satori_nodes; 35 | }; 36 | -------------------------------------------------------------------------------- /dist/processing/png_render.d.ts: -------------------------------------------------------------------------------- 1 | export declare const png_render: (svg: string, options: ResvgOptions, debug: boolean) => Promise; 2 | -------------------------------------------------------------------------------- /dist/processing/png_render.js: -------------------------------------------------------------------------------- 1 | // Take SVG and render it into a PNG 2 | import { Resvg } from '@resvg/resvg-js'; 3 | export const png_render = async (svg, options, debug) => { 4 | try { 5 | const resvg = new Resvg(svg, { 6 | fitTo: { 7 | mode: 'width', 8 | value: options.width 9 | } 10 | }); 11 | const pngData = resvg.render(); 12 | const pngBuffer = pngData.asPng(); 13 | return pngBuffer; 14 | } 15 | catch (error) { 16 | if (debug) { 17 | console.error('An error happened in the PNG_RENDER function'); 18 | } 19 | // gods please forgive me for this, I know I have sinned 20 | throw error; 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /dist/processing/svg_render.d.ts: -------------------------------------------------------------------------------- 1 | import type { RenderOptions } from '../index.js'; 2 | export declare const svg_render: (nodes: VNode, options: RenderOptions) => Promise; 3 | -------------------------------------------------------------------------------- /dist/processing/svg_render.js: -------------------------------------------------------------------------------- 1 | import satori from 'satori'; 2 | import { get_font_as_buffer } from '../font-handling/index.js'; 3 | export const svg_render = async (nodes, options) => { 4 | // build options object for satori 5 | let satori_options = { 6 | width: options.width, 7 | height: options.height, 8 | fonts: [] 9 | }; 10 | // render each font into an array buffer 11 | if (options.fonts.length > 0) { 12 | let rendered_fonts = []; 13 | for (const font of options.fonts) { 14 | if (!font.url) 15 | console.error(); 16 | rendered_fonts.push({ 17 | name: font.name, 18 | data: await get_font_as_buffer(font.url), 19 | weight: font.weight, 20 | style: font.style 21 | }); 22 | } 23 | if (rendered_fonts.length !== options.fonts.length) { 24 | throw new Error('There was a problem rendering a font.'); 25 | } 26 | satori_options = { 27 | width: options.width, 28 | height: options.height, 29 | fonts: rendered_fonts 30 | }; 31 | } 32 | if (options.debug) { 33 | console.log('NUMBER OF FONT FILES RENDERED:', satori_options.fonts.length); 34 | console.log('WIDTH:', satori_options.width); 35 | console.log('HEIGHT:', satori_options.height); 36 | } 37 | // do the rendering 38 | const svg = await satori(nodes, satori_options); 39 | if (options.debug && svg) { 40 | // something to do a basic check to see if the SVG is valid 41 | console.log('An SVG was rendered successfully.'); 42 | } 43 | if (!svg) { 44 | throw new Error('There was a problem rendering the SVG.'); 45 | } 46 | return svg; 47 | }; 48 | -------------------------------------------------------------------------------- /dist/types/types.d.ts: -------------------------------------------------------------------------------- 1 | type VNode = { 2 | type: string 3 | props: { 4 | style?: Record 5 | children?: string | VNode | VNode[] 6 | [prop: string]: any 7 | } 8 | } 9 | 10 | type ResvgOptions = { 11 | width: number 12 | } 13 | 14 | type SatoriOptions = RenderOptions & {} 15 | 16 | 17 | type Font = { 18 | name: string 19 | url: string 20 | weight: number 21 | style: string 22 | } 23 | 24 | declare type Weight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 25 | declare type Style = 'normal' | 'italic' 26 | interface FontOptions { 27 | data?: Buffer | ArrayBuffer 28 | name: string 29 | weight?: Weight 30 | style?: Style 31 | url?: string 32 | } 33 | 34 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import prettier from 'eslint-config-prettier'; 2 | import js from '@eslint/js'; 3 | import svelte from 'eslint-plugin-svelte'; 4 | import globals from 'globals'; 5 | import ts from 'typescript-eslint'; 6 | 7 | export default ts.config( 8 | js.configs.recommended, 9 | ...ts.configs.recommended, 10 | ...svelte.configs['flat/recommended'], 11 | prettier, 12 | ...svelte.configs['flat/prettier'], 13 | { 14 | languageOptions: { 15 | globals: { 16 | ...globals.browser, 17 | ...globals.node 18 | } 19 | } 20 | }, 21 | { 22 | files: ['**/*.svelte'], 23 | 24 | languageOptions: { 25 | parserOptions: { 26 | parser: ts.parser 27 | } 28 | } 29 | }, 30 | { 31 | ignores: ['build/', '.svelte-kit/', 'dist/'] 32 | } 33 | ); 34 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-component-to-image", 3 | "version": "1.0.16", 4 | "license": "MIT", 5 | "author": "Stephen Gunn", 6 | "homepage": "https://github.com/StephenGunn/svelte-component-to-image", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/StephenGunn/svelte-component-to-image.git" 10 | }, 11 | "scripts": { 12 | "dev": "vite dev", 13 | "build": "svelte-kit sync && svelte-package", 14 | "test": "playwright test && npm run test:unit -- --run", 15 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 16 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 17 | "test:unit": "vitest", 18 | "lint": "eslint .", 19 | "format": "prettier --write ." 20 | }, 21 | "devDependencies": { 22 | "@playwright/test": "^1.48.2", 23 | "@sveltejs/adapter-auto": "^3.3.1", 24 | "@sveltejs/kit": "^2.8.0", 25 | "@sveltejs/package": "^2.3.7", 26 | "@sveltejs/vite-plugin-svelte": "^4.0.0", 27 | "@types/eslint": "^9.6.1", 28 | "@typescript-eslint/eslint-plugin": "^8.13.0", 29 | "@typescript-eslint/parser": "^8.13.0", 30 | "eslint": "^9.14.0", 31 | "eslint-config-prettier": "^9.1.0", 32 | "eslint-plugin-svelte": "^2.46.0", 33 | "globals": "^15.12.0", 34 | "prettier": "^3.3.3", 35 | "prettier-plugin-svelte": "^3.2.7", 36 | "svelte": "^5.1.13", 37 | "svelte-check": "^4.0.6", 38 | "tslib": "^2.8.1", 39 | "typescript": "^5.6.3", 40 | "typescript-eslint": "^8.13.0", 41 | "vite": "^5.4.10", 42 | "vitest": "^2.1.4" 43 | }, 44 | "dependencies": { 45 | "@resvg/resvg-js": "^2.6.2", 46 | "juice": "^11.0.0", 47 | "satori": "^0.11.3", 48 | "satori-html": "^0.3.2" 49 | }, 50 | "type": "module", 51 | "keywords": [ 52 | "svelte" 53 | ], 54 | "exports": { 55 | "./package.json": "./package.json", 56 | ".": { 57 | "types": "./dist/index.d.ts", 58 | "svelte": "./dist/index.js", 59 | "default": "./dist/index.js" 60 | } 61 | }, 62 | "files": [ 63 | "dist" 64 | ], 65 | "typesVersions": { 66 | ">4.0": { 67 | "font-handling": [ 68 | "./dist/font-handling/index.d.ts" 69 | ], 70 | "index.d.ts": [ 71 | "./dist/index.d.ts" 72 | ], 73 | "processing/nodes_render": [ 74 | "./dist/processing/nodes_render.d.ts" 75 | ], 76 | "processing/png_render": [ 77 | "./dist/processing/png_render.d.ts" 78 | ], 79 | "processing/svg_render": [ 80 | "./dist/processing/svg_render.d.ts" 81 | ] 82 | } 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /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 | }; 10 | 11 | export default config; 12 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@resvg/resvg-js': 12 | specifier: ^2.6.2 13 | version: 2.6.2 14 | juice: 15 | specifier: ^11.0.0 16 | version: 11.0.0 17 | satori: 18 | specifier: ^0.11.3 19 | version: 0.11.3 20 | satori-html: 21 | specifier: ^0.3.2 22 | version: 0.3.2 23 | devDependencies: 24 | '@playwright/test': 25 | specifier: ^1.48.2 26 | version: 1.48.2 27 | '@sveltejs/adapter-auto': 28 | specifier: ^3.3.1 29 | version: 3.3.1(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)))(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0))) 30 | '@sveltejs/kit': 31 | specifier: ^2.8.0 32 | version: 2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)))(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)) 33 | '@sveltejs/package': 34 | specifier: ^2.3.7 35 | version: 2.3.7(svelte@5.1.13)(typescript@5.6.3) 36 | '@sveltejs/vite-plugin-svelte': 37 | specifier: ^4.0.0 38 | version: 4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)) 39 | '@types/eslint': 40 | specifier: ^9.6.1 41 | version: 9.6.1 42 | '@typescript-eslint/eslint-plugin': 43 | specifier: ^8.13.0 44 | version: 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3) 45 | '@typescript-eslint/parser': 46 | specifier: ^8.13.0 47 | version: 8.13.0(eslint@9.14.0)(typescript@5.6.3) 48 | eslint: 49 | specifier: ^9.14.0 50 | version: 9.14.0 51 | eslint-config-prettier: 52 | specifier: ^9.1.0 53 | version: 9.1.0(eslint@9.14.0) 54 | eslint-plugin-svelte: 55 | specifier: ^2.46.0 56 | version: 2.46.0(eslint@9.14.0)(svelte@5.1.13) 57 | globals: 58 | specifier: ^15.12.0 59 | version: 15.12.0 60 | prettier: 61 | specifier: ^3.3.3 62 | version: 3.3.3 63 | prettier-plugin-svelte: 64 | specifier: ^3.2.7 65 | version: 3.2.7(prettier@3.3.3)(svelte@5.1.13) 66 | svelte: 67 | specifier: ^5.1.13 68 | version: 5.1.13 69 | svelte-check: 70 | specifier: ^4.0.6 71 | version: 4.0.6(svelte@5.1.13)(typescript@5.6.3) 72 | tslib: 73 | specifier: ^2.8.1 74 | version: 2.8.1 75 | typescript: 76 | specifier: ^5.6.3 77 | version: 5.6.3 78 | typescript-eslint: 79 | specifier: ^8.13.0 80 | version: 8.13.0(eslint@9.14.0)(typescript@5.6.3) 81 | vite: 82 | specifier: ^5.4.10 83 | version: 5.4.10(@types/node@22.9.0) 84 | vitest: 85 | specifier: ^2.1.4 86 | version: 2.1.4(@types/node@22.9.0) 87 | 88 | packages: 89 | 90 | '@ampproject/remapping@2.3.0': 91 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 92 | engines: {node: '>=6.0.0'} 93 | 94 | '@esbuild/aix-ppc64@0.21.5': 95 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 96 | engines: {node: '>=12'} 97 | cpu: [ppc64] 98 | os: [aix] 99 | 100 | '@esbuild/android-arm64@0.21.5': 101 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 102 | engines: {node: '>=12'} 103 | cpu: [arm64] 104 | os: [android] 105 | 106 | '@esbuild/android-arm@0.21.5': 107 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 108 | engines: {node: '>=12'} 109 | cpu: [arm] 110 | os: [android] 111 | 112 | '@esbuild/android-x64@0.21.5': 113 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 114 | engines: {node: '>=12'} 115 | cpu: [x64] 116 | os: [android] 117 | 118 | '@esbuild/darwin-arm64@0.21.5': 119 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 120 | engines: {node: '>=12'} 121 | cpu: [arm64] 122 | os: [darwin] 123 | 124 | '@esbuild/darwin-x64@0.21.5': 125 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 126 | engines: {node: '>=12'} 127 | cpu: [x64] 128 | os: [darwin] 129 | 130 | '@esbuild/freebsd-arm64@0.21.5': 131 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 132 | engines: {node: '>=12'} 133 | cpu: [arm64] 134 | os: [freebsd] 135 | 136 | '@esbuild/freebsd-x64@0.21.5': 137 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 138 | engines: {node: '>=12'} 139 | cpu: [x64] 140 | os: [freebsd] 141 | 142 | '@esbuild/linux-arm64@0.21.5': 143 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 144 | engines: {node: '>=12'} 145 | cpu: [arm64] 146 | os: [linux] 147 | 148 | '@esbuild/linux-arm@0.21.5': 149 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 150 | engines: {node: '>=12'} 151 | cpu: [arm] 152 | os: [linux] 153 | 154 | '@esbuild/linux-ia32@0.21.5': 155 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 156 | engines: {node: '>=12'} 157 | cpu: [ia32] 158 | os: [linux] 159 | 160 | '@esbuild/linux-loong64@0.21.5': 161 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 162 | engines: {node: '>=12'} 163 | cpu: [loong64] 164 | os: [linux] 165 | 166 | '@esbuild/linux-mips64el@0.21.5': 167 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 168 | engines: {node: '>=12'} 169 | cpu: [mips64el] 170 | os: [linux] 171 | 172 | '@esbuild/linux-ppc64@0.21.5': 173 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 174 | engines: {node: '>=12'} 175 | cpu: [ppc64] 176 | os: [linux] 177 | 178 | '@esbuild/linux-riscv64@0.21.5': 179 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 180 | engines: {node: '>=12'} 181 | cpu: [riscv64] 182 | os: [linux] 183 | 184 | '@esbuild/linux-s390x@0.21.5': 185 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 186 | engines: {node: '>=12'} 187 | cpu: [s390x] 188 | os: [linux] 189 | 190 | '@esbuild/linux-x64@0.21.5': 191 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 192 | engines: {node: '>=12'} 193 | cpu: [x64] 194 | os: [linux] 195 | 196 | '@esbuild/netbsd-x64@0.21.5': 197 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 198 | engines: {node: '>=12'} 199 | cpu: [x64] 200 | os: [netbsd] 201 | 202 | '@esbuild/openbsd-x64@0.21.5': 203 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 204 | engines: {node: '>=12'} 205 | cpu: [x64] 206 | os: [openbsd] 207 | 208 | '@esbuild/sunos-x64@0.21.5': 209 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 210 | engines: {node: '>=12'} 211 | cpu: [x64] 212 | os: [sunos] 213 | 214 | '@esbuild/win32-arm64@0.21.5': 215 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 216 | engines: {node: '>=12'} 217 | cpu: [arm64] 218 | os: [win32] 219 | 220 | '@esbuild/win32-ia32@0.21.5': 221 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 222 | engines: {node: '>=12'} 223 | cpu: [ia32] 224 | os: [win32] 225 | 226 | '@esbuild/win32-x64@0.21.5': 227 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 228 | engines: {node: '>=12'} 229 | cpu: [x64] 230 | os: [win32] 231 | 232 | '@eslint-community/eslint-utils@4.4.1': 233 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 234 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 235 | peerDependencies: 236 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 237 | 238 | '@eslint-community/regexpp@4.12.1': 239 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 240 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 241 | 242 | '@eslint/config-array@0.18.0': 243 | resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} 244 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 245 | 246 | '@eslint/core@0.7.0': 247 | resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==} 248 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 249 | 250 | '@eslint/eslintrc@3.1.0': 251 | resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} 252 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 253 | 254 | '@eslint/js@9.14.0': 255 | resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==} 256 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 257 | 258 | '@eslint/object-schema@2.1.4': 259 | resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} 260 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 261 | 262 | '@eslint/plugin-kit@0.2.2': 263 | resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==} 264 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 265 | 266 | '@humanfs/core@0.19.1': 267 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 268 | engines: {node: '>=18.18.0'} 269 | 270 | '@humanfs/node@0.16.6': 271 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 272 | engines: {node: '>=18.18.0'} 273 | 274 | '@humanwhocodes/module-importer@1.0.1': 275 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 276 | engines: {node: '>=12.22'} 277 | 278 | '@humanwhocodes/retry@0.3.1': 279 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 280 | engines: {node: '>=18.18'} 281 | 282 | '@humanwhocodes/retry@0.4.1': 283 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} 284 | engines: {node: '>=18.18'} 285 | 286 | '@jridgewell/gen-mapping@0.3.5': 287 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 288 | engines: {node: '>=6.0.0'} 289 | 290 | '@jridgewell/resolve-uri@3.1.2': 291 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 292 | engines: {node: '>=6.0.0'} 293 | 294 | '@jridgewell/set-array@1.2.1': 295 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 296 | engines: {node: '>=6.0.0'} 297 | 298 | '@jridgewell/sourcemap-codec@1.5.0': 299 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 300 | 301 | '@jridgewell/trace-mapping@0.3.25': 302 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 303 | 304 | '@nodelib/fs.scandir@2.1.5': 305 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 306 | engines: {node: '>= 8'} 307 | 308 | '@nodelib/fs.stat@2.0.5': 309 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 310 | engines: {node: '>= 8'} 311 | 312 | '@nodelib/fs.walk@1.2.8': 313 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 314 | engines: {node: '>= 8'} 315 | 316 | '@playwright/test@1.48.2': 317 | resolution: {integrity: sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==} 318 | engines: {node: '>=18'} 319 | hasBin: true 320 | 321 | '@polka/url@1.0.0-next.28': 322 | resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} 323 | 324 | '@resvg/resvg-js-android-arm-eabi@2.6.2': 325 | resolution: {integrity: sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==} 326 | engines: {node: '>= 10'} 327 | cpu: [arm] 328 | os: [android] 329 | 330 | '@resvg/resvg-js-android-arm64@2.6.2': 331 | resolution: {integrity: sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==} 332 | engines: {node: '>= 10'} 333 | cpu: [arm64] 334 | os: [android] 335 | 336 | '@resvg/resvg-js-darwin-arm64@2.6.2': 337 | resolution: {integrity: sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==} 338 | engines: {node: '>= 10'} 339 | cpu: [arm64] 340 | os: [darwin] 341 | 342 | '@resvg/resvg-js-darwin-x64@2.6.2': 343 | resolution: {integrity: sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==} 344 | engines: {node: '>= 10'} 345 | cpu: [x64] 346 | os: [darwin] 347 | 348 | '@resvg/resvg-js-linux-arm-gnueabihf@2.6.2': 349 | resolution: {integrity: sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==} 350 | engines: {node: '>= 10'} 351 | cpu: [arm] 352 | os: [linux] 353 | 354 | '@resvg/resvg-js-linux-arm64-gnu@2.6.2': 355 | resolution: {integrity: sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==} 356 | engines: {node: '>= 10'} 357 | cpu: [arm64] 358 | os: [linux] 359 | 360 | '@resvg/resvg-js-linux-arm64-musl@2.6.2': 361 | resolution: {integrity: sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==} 362 | engines: {node: '>= 10'} 363 | cpu: [arm64] 364 | os: [linux] 365 | 366 | '@resvg/resvg-js-linux-x64-gnu@2.6.2': 367 | resolution: {integrity: sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==} 368 | engines: {node: '>= 10'} 369 | cpu: [x64] 370 | os: [linux] 371 | 372 | '@resvg/resvg-js-linux-x64-musl@2.6.2': 373 | resolution: {integrity: sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==} 374 | engines: {node: '>= 10'} 375 | cpu: [x64] 376 | os: [linux] 377 | 378 | '@resvg/resvg-js-win32-arm64-msvc@2.6.2': 379 | resolution: {integrity: sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==} 380 | engines: {node: '>= 10'} 381 | cpu: [arm64] 382 | os: [win32] 383 | 384 | '@resvg/resvg-js-win32-ia32-msvc@2.6.2': 385 | resolution: {integrity: sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==} 386 | engines: {node: '>= 10'} 387 | cpu: [ia32] 388 | os: [win32] 389 | 390 | '@resvg/resvg-js-win32-x64-msvc@2.6.2': 391 | resolution: {integrity: sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==} 392 | engines: {node: '>= 10'} 393 | cpu: [x64] 394 | os: [win32] 395 | 396 | '@resvg/resvg-js@2.6.2': 397 | resolution: {integrity: sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==} 398 | engines: {node: '>= 10'} 399 | 400 | '@rollup/rollup-android-arm-eabi@4.24.4': 401 | resolution: {integrity: sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==} 402 | cpu: [arm] 403 | os: [android] 404 | 405 | '@rollup/rollup-android-arm64@4.24.4': 406 | resolution: {integrity: sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==} 407 | cpu: [arm64] 408 | os: [android] 409 | 410 | '@rollup/rollup-darwin-arm64@4.24.4': 411 | resolution: {integrity: sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==} 412 | cpu: [arm64] 413 | os: [darwin] 414 | 415 | '@rollup/rollup-darwin-x64@4.24.4': 416 | resolution: {integrity: sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==} 417 | cpu: [x64] 418 | os: [darwin] 419 | 420 | '@rollup/rollup-freebsd-arm64@4.24.4': 421 | resolution: {integrity: sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==} 422 | cpu: [arm64] 423 | os: [freebsd] 424 | 425 | '@rollup/rollup-freebsd-x64@4.24.4': 426 | resolution: {integrity: sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==} 427 | cpu: [x64] 428 | os: [freebsd] 429 | 430 | '@rollup/rollup-linux-arm-gnueabihf@4.24.4': 431 | resolution: {integrity: sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==} 432 | cpu: [arm] 433 | os: [linux] 434 | 435 | '@rollup/rollup-linux-arm-musleabihf@4.24.4': 436 | resolution: {integrity: sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==} 437 | cpu: [arm] 438 | os: [linux] 439 | 440 | '@rollup/rollup-linux-arm64-gnu@4.24.4': 441 | resolution: {integrity: sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==} 442 | cpu: [arm64] 443 | os: [linux] 444 | 445 | '@rollup/rollup-linux-arm64-musl@4.24.4': 446 | resolution: {integrity: sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==} 447 | cpu: [arm64] 448 | os: [linux] 449 | 450 | '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': 451 | resolution: {integrity: sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==} 452 | cpu: [ppc64] 453 | os: [linux] 454 | 455 | '@rollup/rollup-linux-riscv64-gnu@4.24.4': 456 | resolution: {integrity: sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==} 457 | cpu: [riscv64] 458 | os: [linux] 459 | 460 | '@rollup/rollup-linux-s390x-gnu@4.24.4': 461 | resolution: {integrity: sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==} 462 | cpu: [s390x] 463 | os: [linux] 464 | 465 | '@rollup/rollup-linux-x64-gnu@4.24.4': 466 | resolution: {integrity: sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==} 467 | cpu: [x64] 468 | os: [linux] 469 | 470 | '@rollup/rollup-linux-x64-musl@4.24.4': 471 | resolution: {integrity: sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==} 472 | cpu: [x64] 473 | os: [linux] 474 | 475 | '@rollup/rollup-win32-arm64-msvc@4.24.4': 476 | resolution: {integrity: sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==} 477 | cpu: [arm64] 478 | os: [win32] 479 | 480 | '@rollup/rollup-win32-ia32-msvc@4.24.4': 481 | resolution: {integrity: sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==} 482 | cpu: [ia32] 483 | os: [win32] 484 | 485 | '@rollup/rollup-win32-x64-msvc@4.24.4': 486 | resolution: {integrity: sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==} 487 | cpu: [x64] 488 | os: [win32] 489 | 490 | '@shuding/opentype.js@1.4.0-beta.0': 491 | resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} 492 | engines: {node: '>= 8.0.0'} 493 | hasBin: true 494 | 495 | '@sveltejs/adapter-auto@3.3.1': 496 | resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==} 497 | peerDependencies: 498 | '@sveltejs/kit': ^2.0.0 499 | 500 | '@sveltejs/kit@2.8.0': 501 | resolution: {integrity: sha512-HCiWupCuKJQ3aPaC4Xc6lpPdjOOnoGzEiYjOqMqppdtfGtY2ABrx932Vw66ZwS2RGXc0BmZvFvNq5SzqlmDVLg==} 502 | engines: {node: '>=18.13'} 503 | hasBin: true 504 | peerDependencies: 505 | '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 506 | svelte: ^4.0.0 || ^5.0.0-next.0 507 | vite: ^5.0.3 508 | 509 | '@sveltejs/package@2.3.7': 510 | resolution: {integrity: sha512-LYgUkde5GUYqOpXbcoCGUpEH4Ctl3Wj4u4CVZBl56dEeLW5fGHE037ZL1qlK0Ky+QD5uUfwONSeGwIOIighFMQ==} 511 | engines: {node: ^16.14 || >=18} 512 | hasBin: true 513 | peerDependencies: 514 | svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 515 | 516 | '@sveltejs/vite-plugin-svelte-inspector@3.0.1': 517 | resolution: {integrity: sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==} 518 | engines: {node: ^18.0.0 || ^20.0.0 || >=22} 519 | peerDependencies: 520 | '@sveltejs/vite-plugin-svelte': ^4.0.0-next.0||^4.0.0 521 | svelte: ^5.0.0-next.96 || ^5.0.0 522 | vite: ^5.0.0 523 | 524 | '@sveltejs/vite-plugin-svelte@4.0.0': 525 | resolution: {integrity: sha512-kpVJwF+gNiMEsoHaw+FJL76IYiwBikkxYU83+BpqQLdVMff19KeRKLd2wisS8niNBMJ2omv5gG+iGDDwd8jzag==} 526 | engines: {node: ^18.0.0 || ^20.0.0 || >=22} 527 | peerDependencies: 528 | svelte: ^5.0.0-next.96 || ^5.0.0 529 | vite: ^5.0.0 530 | 531 | '@types/cookie@0.6.0': 532 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 533 | 534 | '@types/eslint@9.6.1': 535 | resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} 536 | 537 | '@types/estree@1.0.6': 538 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 539 | 540 | '@types/json-schema@7.0.15': 541 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 542 | 543 | '@types/node@22.9.0': 544 | resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} 545 | 546 | '@typescript-eslint/eslint-plugin@8.13.0': 547 | resolution: {integrity: sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==} 548 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 549 | peerDependencies: 550 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 551 | eslint: ^8.57.0 || ^9.0.0 552 | typescript: '*' 553 | peerDependenciesMeta: 554 | typescript: 555 | optional: true 556 | 557 | '@typescript-eslint/parser@8.13.0': 558 | resolution: {integrity: sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==} 559 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 560 | peerDependencies: 561 | eslint: ^8.57.0 || ^9.0.0 562 | typescript: '*' 563 | peerDependenciesMeta: 564 | typescript: 565 | optional: true 566 | 567 | '@typescript-eslint/scope-manager@8.13.0': 568 | resolution: {integrity: sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==} 569 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 570 | 571 | '@typescript-eslint/type-utils@8.13.0': 572 | resolution: {integrity: sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==} 573 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 574 | peerDependencies: 575 | typescript: '*' 576 | peerDependenciesMeta: 577 | typescript: 578 | optional: true 579 | 580 | '@typescript-eslint/types@8.13.0': 581 | resolution: {integrity: sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==} 582 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 583 | 584 | '@typescript-eslint/typescript-estree@8.13.0': 585 | resolution: {integrity: sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==} 586 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 587 | peerDependencies: 588 | typescript: '*' 589 | peerDependenciesMeta: 590 | typescript: 591 | optional: true 592 | 593 | '@typescript-eslint/utils@8.13.0': 594 | resolution: {integrity: sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==} 595 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 596 | peerDependencies: 597 | eslint: ^8.57.0 || ^9.0.0 598 | 599 | '@typescript-eslint/visitor-keys@8.13.0': 600 | resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==} 601 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 602 | 603 | '@vitest/expect@2.1.4': 604 | resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} 605 | 606 | '@vitest/mocker@2.1.4': 607 | resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} 608 | peerDependencies: 609 | msw: ^2.4.9 610 | vite: ^5.0.0 611 | peerDependenciesMeta: 612 | msw: 613 | optional: true 614 | vite: 615 | optional: true 616 | 617 | '@vitest/pretty-format@2.1.4': 618 | resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} 619 | 620 | '@vitest/runner@2.1.4': 621 | resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} 622 | 623 | '@vitest/snapshot@2.1.4': 624 | resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} 625 | 626 | '@vitest/spy@2.1.4': 627 | resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} 628 | 629 | '@vitest/utils@2.1.4': 630 | resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} 631 | 632 | acorn-jsx@5.3.2: 633 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 634 | peerDependencies: 635 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 636 | 637 | acorn-typescript@1.4.13: 638 | resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==} 639 | peerDependencies: 640 | acorn: '>=8.9.0' 641 | 642 | acorn@8.14.0: 643 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 644 | engines: {node: '>=0.4.0'} 645 | hasBin: true 646 | 647 | ajv@6.12.6: 648 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 649 | 650 | ansi-colors@4.1.3: 651 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 652 | engines: {node: '>=6'} 653 | 654 | ansi-styles@4.3.0: 655 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 656 | engines: {node: '>=8'} 657 | 658 | argparse@2.0.1: 659 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 660 | 661 | aria-query@5.3.2: 662 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 663 | engines: {node: '>= 0.4'} 664 | 665 | assertion-error@2.0.1: 666 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 667 | engines: {node: '>=12'} 668 | 669 | axobject-query@4.1.0: 670 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 671 | engines: {node: '>= 0.4'} 672 | 673 | balanced-match@1.0.2: 674 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 675 | 676 | base64-js@0.0.8: 677 | resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} 678 | engines: {node: '>= 0.4'} 679 | 680 | boolbase@1.0.0: 681 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 682 | 683 | brace-expansion@1.1.11: 684 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 685 | 686 | brace-expansion@2.0.1: 687 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 688 | 689 | braces@3.0.3: 690 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 691 | engines: {node: '>=8'} 692 | 693 | cac@6.7.14: 694 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 695 | engines: {node: '>=8'} 696 | 697 | callsites@3.1.0: 698 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 699 | engines: {node: '>=6'} 700 | 701 | camelize@1.0.1: 702 | resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} 703 | 704 | chai@5.1.2: 705 | resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} 706 | engines: {node: '>=12'} 707 | 708 | chalk@4.1.2: 709 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 710 | engines: {node: '>=10'} 711 | 712 | check-error@2.1.1: 713 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 714 | engines: {node: '>= 16'} 715 | 716 | cheerio-select@2.1.0: 717 | resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} 718 | 719 | cheerio@1.0.0: 720 | resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} 721 | engines: {node: '>=18.17'} 722 | 723 | chokidar@4.0.1: 724 | resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} 725 | engines: {node: '>= 14.16.0'} 726 | 727 | color-convert@2.0.1: 728 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 729 | engines: {node: '>=7.0.0'} 730 | 731 | color-name@1.1.4: 732 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 733 | 734 | commander@12.1.0: 735 | resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} 736 | engines: {node: '>=18'} 737 | 738 | concat-map@0.0.1: 739 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 740 | 741 | cookie@0.6.0: 742 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 743 | engines: {node: '>= 0.6'} 744 | 745 | cross-spawn@7.0.5: 746 | resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} 747 | engines: {node: '>= 8'} 748 | 749 | css-background-parser@0.1.0: 750 | resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} 751 | 752 | css-box-shadow@1.0.0-3: 753 | resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} 754 | 755 | css-color-keywords@1.0.0: 756 | resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} 757 | engines: {node: '>=4'} 758 | 759 | css-gradient-parser@0.0.16: 760 | resolution: {integrity: sha512-3O5QdqgFRUbXvK1x5INf1YkBz1UKSWqrd63vWsum8MNHDBYD5urm3QtxZbKU259OrEXNM26lP/MPY3d1IGkBgA==} 761 | engines: {node: '>=16'} 762 | 763 | css-select@5.1.0: 764 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} 765 | 766 | css-to-react-native@3.2.0: 767 | resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} 768 | 769 | css-what@6.1.0: 770 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 771 | engines: {node: '>= 6'} 772 | 773 | cssesc@3.0.0: 774 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 775 | engines: {node: '>=4'} 776 | hasBin: true 777 | 778 | debug@4.3.7: 779 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 780 | engines: {node: '>=6.0'} 781 | peerDependencies: 782 | supports-color: '*' 783 | peerDependenciesMeta: 784 | supports-color: 785 | optional: true 786 | 787 | dedent-js@1.0.1: 788 | resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} 789 | 790 | deep-eql@5.0.2: 791 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 792 | engines: {node: '>=6'} 793 | 794 | deep-is@0.1.4: 795 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 796 | 797 | deepmerge@4.3.1: 798 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 799 | engines: {node: '>=0.10.0'} 800 | 801 | devalue@5.1.1: 802 | resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} 803 | 804 | dom-serializer@1.4.1: 805 | resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} 806 | 807 | dom-serializer@2.0.0: 808 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 809 | 810 | domelementtype@2.3.0: 811 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 812 | 813 | domhandler@3.3.0: 814 | resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==} 815 | engines: {node: '>= 4'} 816 | 817 | domhandler@4.3.1: 818 | resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} 819 | engines: {node: '>= 4'} 820 | 821 | domhandler@5.0.3: 822 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 823 | engines: {node: '>= 4'} 824 | 825 | domutils@2.8.0: 826 | resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} 827 | 828 | domutils@3.1.0: 829 | resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} 830 | 831 | emoji-regex@10.4.0: 832 | resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} 833 | 834 | encoding-sniffer@0.2.0: 835 | resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} 836 | 837 | entities@2.2.0: 838 | resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} 839 | 840 | entities@4.5.0: 841 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 842 | engines: {node: '>=0.12'} 843 | 844 | esbuild@0.21.5: 845 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 846 | engines: {node: '>=12'} 847 | hasBin: true 848 | 849 | escape-goat@3.0.0: 850 | resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==} 851 | engines: {node: '>=10'} 852 | 853 | escape-html@1.0.3: 854 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 855 | 856 | escape-string-regexp@4.0.0: 857 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 858 | engines: {node: '>=10'} 859 | 860 | eslint-compat-utils@0.5.1: 861 | resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} 862 | engines: {node: '>=12'} 863 | peerDependencies: 864 | eslint: '>=6.0.0' 865 | 866 | eslint-config-prettier@9.1.0: 867 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 868 | hasBin: true 869 | peerDependencies: 870 | eslint: '>=7.0.0' 871 | 872 | eslint-plugin-svelte@2.46.0: 873 | resolution: {integrity: sha512-1A7iEMkzmCZ9/Iz+EAfOGYL8IoIG6zeKEq1SmpxGeM5SXmoQq+ZNnCpXFVJpsxPWYx8jIVGMerQMzX20cqUl0g==} 874 | engines: {node: ^14.17.0 || >=16.0.0} 875 | peerDependencies: 876 | eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 877 | svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 878 | peerDependenciesMeta: 879 | svelte: 880 | optional: true 881 | 882 | eslint-scope@7.2.2: 883 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 884 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 885 | 886 | eslint-scope@8.2.0: 887 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 888 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 889 | 890 | eslint-visitor-keys@3.4.3: 891 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 892 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 893 | 894 | eslint-visitor-keys@4.2.0: 895 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 896 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 897 | 898 | eslint@9.14.0: 899 | resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==} 900 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 901 | hasBin: true 902 | peerDependencies: 903 | jiti: '*' 904 | peerDependenciesMeta: 905 | jiti: 906 | optional: true 907 | 908 | esm-env@1.1.4: 909 | resolution: {integrity: sha512-oO82nKPHKkzIj/hbtuDYy/JHqBHFlMIW36SDiPCVsj87ntDLcWN+sJ1erdVryd4NxODacFTsdrIE3b7IamqbOg==} 910 | 911 | espree@10.3.0: 912 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 913 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 914 | 915 | espree@9.6.1: 916 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 917 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 918 | 919 | esquery@1.6.0: 920 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 921 | engines: {node: '>=0.10'} 922 | 923 | esrap@1.2.2: 924 | resolution: {integrity: sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==} 925 | 926 | esrecurse@4.3.0: 927 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 928 | engines: {node: '>=4.0'} 929 | 930 | estraverse@5.3.0: 931 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 932 | engines: {node: '>=4.0'} 933 | 934 | estree-walker@3.0.3: 935 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 936 | 937 | esutils@2.0.3: 938 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 939 | engines: {node: '>=0.10.0'} 940 | 941 | expect-type@1.1.0: 942 | resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} 943 | engines: {node: '>=12.0.0'} 944 | 945 | fast-deep-equal@3.1.3: 946 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 947 | 948 | fast-glob@3.3.2: 949 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 950 | engines: {node: '>=8.6.0'} 951 | 952 | fast-json-stable-stringify@2.1.0: 953 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 954 | 955 | fast-levenshtein@2.0.6: 956 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 957 | 958 | fastq@1.17.1: 959 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 960 | 961 | fdir@6.4.2: 962 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} 963 | peerDependencies: 964 | picomatch: ^3 || ^4 965 | peerDependenciesMeta: 966 | picomatch: 967 | optional: true 968 | 969 | fflate@0.7.4: 970 | resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} 971 | 972 | file-entry-cache@8.0.0: 973 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 974 | engines: {node: '>=16.0.0'} 975 | 976 | fill-range@7.1.1: 977 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 978 | engines: {node: '>=8'} 979 | 980 | find-up@5.0.0: 981 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 982 | engines: {node: '>=10'} 983 | 984 | flat-cache@4.0.1: 985 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 986 | engines: {node: '>=16'} 987 | 988 | flatted@3.3.1: 989 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 990 | 991 | fsevents@2.3.2: 992 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 993 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 994 | os: [darwin] 995 | 996 | fsevents@2.3.3: 997 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 998 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 999 | os: [darwin] 1000 | 1001 | glob-parent@5.1.2: 1002 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1003 | engines: {node: '>= 6'} 1004 | 1005 | glob-parent@6.0.2: 1006 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1007 | engines: {node: '>=10.13.0'} 1008 | 1009 | globals@14.0.0: 1010 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1011 | engines: {node: '>=18'} 1012 | 1013 | globals@15.12.0: 1014 | resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==} 1015 | engines: {node: '>=18'} 1016 | 1017 | globalyzer@0.1.0: 1018 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 1019 | 1020 | globrex@0.1.2: 1021 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1022 | 1023 | graphemer@1.4.0: 1024 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1025 | 1026 | has-flag@4.0.0: 1027 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1028 | engines: {node: '>=8'} 1029 | 1030 | hex-rgb@4.3.0: 1031 | resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} 1032 | engines: {node: '>=6'} 1033 | 1034 | htmlparser2@5.0.1: 1035 | resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==} 1036 | 1037 | htmlparser2@9.1.0: 1038 | resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} 1039 | 1040 | iconv-lite@0.6.3: 1041 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1042 | engines: {node: '>=0.10.0'} 1043 | 1044 | ignore@5.3.2: 1045 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1046 | engines: {node: '>= 4'} 1047 | 1048 | import-fresh@3.3.0: 1049 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1050 | engines: {node: '>=6'} 1051 | 1052 | import-meta-resolve@4.1.0: 1053 | resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} 1054 | 1055 | imurmurhash@0.1.4: 1056 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1057 | engines: {node: '>=0.8.19'} 1058 | 1059 | is-extglob@2.1.1: 1060 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1061 | engines: {node: '>=0.10.0'} 1062 | 1063 | is-glob@4.0.3: 1064 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1065 | engines: {node: '>=0.10.0'} 1066 | 1067 | is-number@7.0.0: 1068 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1069 | engines: {node: '>=0.12.0'} 1070 | 1071 | is-reference@3.0.2: 1072 | resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} 1073 | 1074 | isexe@2.0.0: 1075 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1076 | 1077 | js-yaml@4.1.0: 1078 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1079 | hasBin: true 1080 | 1081 | json-buffer@3.0.1: 1082 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1083 | 1084 | json-schema-traverse@0.4.1: 1085 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1086 | 1087 | json-stable-stringify-without-jsonify@1.0.1: 1088 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1089 | 1090 | juice@11.0.0: 1091 | resolution: {integrity: sha512-sGF8hPz9/Wg+YXbaNDqc1Iuoaw+J/P9lBHNQKXAGc9pPNjCd4fyPai0Zxj7MRtdjMr0lcgk5PjEIkP2b8R9F3w==} 1092 | engines: {node: '>=18.17'} 1093 | hasBin: true 1094 | 1095 | keyv@4.5.4: 1096 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1097 | 1098 | kleur@4.1.5: 1099 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1100 | engines: {node: '>=6'} 1101 | 1102 | known-css-properties@0.35.0: 1103 | resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==} 1104 | 1105 | levn@0.4.1: 1106 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1107 | engines: {node: '>= 0.8.0'} 1108 | 1109 | lilconfig@2.1.0: 1110 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1111 | engines: {node: '>=10'} 1112 | 1113 | linebreak@1.1.0: 1114 | resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} 1115 | 1116 | locate-character@3.0.0: 1117 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 1118 | 1119 | locate-path@6.0.0: 1120 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1121 | engines: {node: '>=10'} 1122 | 1123 | lodash.merge@4.6.2: 1124 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1125 | 1126 | loupe@3.1.2: 1127 | resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} 1128 | 1129 | lower-case@2.0.2: 1130 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 1131 | 1132 | magic-string@0.30.12: 1133 | resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} 1134 | 1135 | mensch@0.3.4: 1136 | resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==} 1137 | 1138 | merge2@1.4.1: 1139 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1140 | engines: {node: '>= 8'} 1141 | 1142 | micromatch@4.0.8: 1143 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1144 | engines: {node: '>=8.6'} 1145 | 1146 | mime@2.6.0: 1147 | resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} 1148 | engines: {node: '>=4.0.0'} 1149 | hasBin: true 1150 | 1151 | minimatch@3.1.2: 1152 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1153 | 1154 | minimatch@9.0.5: 1155 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1156 | engines: {node: '>=16 || 14 >=14.17'} 1157 | 1158 | mri@1.2.0: 1159 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1160 | engines: {node: '>=4'} 1161 | 1162 | mrmime@2.0.0: 1163 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 1164 | engines: {node: '>=10'} 1165 | 1166 | ms@2.1.3: 1167 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1168 | 1169 | nanoid@3.3.7: 1170 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1171 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1172 | hasBin: true 1173 | 1174 | natural-compare@1.4.0: 1175 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1176 | 1177 | no-case@3.0.4: 1178 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 1179 | 1180 | nth-check@2.1.1: 1181 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 1182 | 1183 | optionator@0.9.4: 1184 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1185 | engines: {node: '>= 0.8.0'} 1186 | 1187 | p-limit@3.1.0: 1188 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1189 | engines: {node: '>=10'} 1190 | 1191 | p-locate@5.0.0: 1192 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1193 | engines: {node: '>=10'} 1194 | 1195 | pako@0.2.9: 1196 | resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} 1197 | 1198 | parent-module@1.0.1: 1199 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1200 | engines: {node: '>=6'} 1201 | 1202 | parse-css-color@0.2.1: 1203 | resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==} 1204 | 1205 | parse5-htmlparser2-tree-adapter@7.1.0: 1206 | resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} 1207 | 1208 | parse5-parser-stream@7.1.2: 1209 | resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} 1210 | 1211 | parse5@7.2.1: 1212 | resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} 1213 | 1214 | pascal-case@3.1.2: 1215 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 1216 | 1217 | path-exists@4.0.0: 1218 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1219 | engines: {node: '>=8'} 1220 | 1221 | path-key@3.1.1: 1222 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1223 | engines: {node: '>=8'} 1224 | 1225 | pathe@1.1.2: 1226 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 1227 | 1228 | pathval@2.0.0: 1229 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1230 | engines: {node: '>= 14.16'} 1231 | 1232 | picocolors@1.1.1: 1233 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1234 | 1235 | picomatch@2.3.1: 1236 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1237 | engines: {node: '>=8.6'} 1238 | 1239 | playwright-core@1.48.2: 1240 | resolution: {integrity: sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==} 1241 | engines: {node: '>=18'} 1242 | hasBin: true 1243 | 1244 | playwright@1.48.2: 1245 | resolution: {integrity: sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==} 1246 | engines: {node: '>=18'} 1247 | hasBin: true 1248 | 1249 | postcss-load-config@3.1.4: 1250 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 1251 | engines: {node: '>= 10'} 1252 | peerDependencies: 1253 | postcss: '>=8.0.9' 1254 | ts-node: '>=9.0.0' 1255 | peerDependenciesMeta: 1256 | postcss: 1257 | optional: true 1258 | ts-node: 1259 | optional: true 1260 | 1261 | postcss-safe-parser@6.0.0: 1262 | resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} 1263 | engines: {node: '>=12.0'} 1264 | peerDependencies: 1265 | postcss: ^8.3.3 1266 | 1267 | postcss-scss@4.0.9: 1268 | resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} 1269 | engines: {node: '>=12.0'} 1270 | peerDependencies: 1271 | postcss: ^8.4.29 1272 | 1273 | postcss-selector-parser@6.1.2: 1274 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 1275 | engines: {node: '>=4'} 1276 | 1277 | postcss-value-parser@4.2.0: 1278 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1279 | 1280 | postcss@8.4.47: 1281 | resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} 1282 | engines: {node: ^10 || ^12 || >=14} 1283 | 1284 | prelude-ls@1.2.1: 1285 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1286 | engines: {node: '>= 0.8.0'} 1287 | 1288 | prettier-plugin-svelte@3.2.7: 1289 | resolution: {integrity: sha512-/Dswx/ea0lV34If1eDcG3nulQ63YNr5KPDfMsjbdtpSWOxKKJ7nAc2qlVuYwEvCr4raIuredNoR7K4JCkmTGaQ==} 1290 | peerDependencies: 1291 | prettier: ^3.0.0 1292 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 1293 | 1294 | prettier@3.3.3: 1295 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} 1296 | engines: {node: '>=14'} 1297 | hasBin: true 1298 | 1299 | punycode@2.3.1: 1300 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1301 | engines: {node: '>=6'} 1302 | 1303 | queue-microtask@1.2.3: 1304 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1305 | 1306 | readdirp@4.0.2: 1307 | resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} 1308 | engines: {node: '>= 14.16.0'} 1309 | 1310 | resolve-from@4.0.0: 1311 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1312 | engines: {node: '>=4'} 1313 | 1314 | reusify@1.0.4: 1315 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1316 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1317 | 1318 | rollup@4.24.4: 1319 | resolution: {integrity: sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==} 1320 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1321 | hasBin: true 1322 | 1323 | run-parallel@1.2.0: 1324 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1325 | 1326 | sade@1.8.1: 1327 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 1328 | engines: {node: '>=6'} 1329 | 1330 | safer-buffer@2.1.2: 1331 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1332 | 1333 | satori-html@0.3.2: 1334 | resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==} 1335 | 1336 | satori@0.11.3: 1337 | resolution: {integrity: sha512-Wg7sls0iYAEETzi9YYcY16QVIqXjZT06XjkwondC5CGhw1mhmgKBCub8cCmkxdl/naXXQD+m29CFgn8pwtYCnA==} 1338 | engines: {node: '>=16'} 1339 | 1340 | semver@7.6.3: 1341 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1342 | engines: {node: '>=10'} 1343 | hasBin: true 1344 | 1345 | set-cookie-parser@2.7.1: 1346 | resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} 1347 | 1348 | shebang-command@2.0.0: 1349 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1350 | engines: {node: '>=8'} 1351 | 1352 | shebang-regex@3.0.0: 1353 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1354 | engines: {node: '>=8'} 1355 | 1356 | siginfo@2.0.0: 1357 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1358 | 1359 | sirv@3.0.0: 1360 | resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} 1361 | engines: {node: '>=18'} 1362 | 1363 | slick@1.12.2: 1364 | resolution: {integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==} 1365 | 1366 | source-map-js@1.2.1: 1367 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1368 | engines: {node: '>=0.10.0'} 1369 | 1370 | stackback@0.0.2: 1371 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1372 | 1373 | std-env@3.8.0: 1374 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} 1375 | 1376 | string.prototype.codepointat@0.2.1: 1377 | resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} 1378 | 1379 | strip-json-comments@3.1.1: 1380 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1381 | engines: {node: '>=8'} 1382 | 1383 | supports-color@7.2.0: 1384 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1385 | engines: {node: '>=8'} 1386 | 1387 | svelte-check@4.0.6: 1388 | resolution: {integrity: sha512-2XwmQNJaKbenJbvu5at+DuRpvF4v73Zu7f0/WkMl1O7WDm/IfF+E13t8D0nnRiRcMsNYm9ufHyLwfeMEnebpdg==} 1389 | engines: {node: '>= 18.0.0'} 1390 | hasBin: true 1391 | peerDependencies: 1392 | svelte: ^4.0.0 || ^5.0.0-next.0 1393 | typescript: '>=5.0.0' 1394 | 1395 | svelte-eslint-parser@0.43.0: 1396 | resolution: {integrity: sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==} 1397 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1398 | peerDependencies: 1399 | svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 1400 | peerDependenciesMeta: 1401 | svelte: 1402 | optional: true 1403 | 1404 | svelte2tsx@0.7.23: 1405 | resolution: {integrity: sha512-LUVKEHlblBYvzOXdpMHhyMle7iSZ/qr71gGhf1AIrsk1j0FjwTLXp9QuSmPop4C4IlL5BSGFS95Kr78Rb9Eyuw==} 1406 | peerDependencies: 1407 | svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 1408 | typescript: ^4.9.4 || ^5.0.0 1409 | 1410 | svelte@5.1.13: 1411 | resolution: {integrity: sha512-xVNk8yLsZNfkyqWzVg8+nfU9ewiSjVW0S4qyTxfKa6Y7P5ZBhA+LDsh2cHWIXJQMltikQAk6W3sqGdQZSH58PA==} 1412 | engines: {node: '>=18'} 1413 | 1414 | text-table@0.2.0: 1415 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1416 | 1417 | tiny-glob@0.2.9: 1418 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 1419 | 1420 | tiny-inflate@1.0.3: 1421 | resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} 1422 | 1423 | tinybench@2.9.0: 1424 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1425 | 1426 | tinyexec@0.3.1: 1427 | resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} 1428 | 1429 | tinypool@1.0.1: 1430 | resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} 1431 | engines: {node: ^18.0.0 || >=20.0.0} 1432 | 1433 | tinyrainbow@1.2.0: 1434 | resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} 1435 | engines: {node: '>=14.0.0'} 1436 | 1437 | tinyspy@3.0.2: 1438 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 1439 | engines: {node: '>=14.0.0'} 1440 | 1441 | to-regex-range@5.0.1: 1442 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1443 | engines: {node: '>=8.0'} 1444 | 1445 | totalist@3.0.1: 1446 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1447 | engines: {node: '>=6'} 1448 | 1449 | ts-api-utils@1.4.0: 1450 | resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} 1451 | engines: {node: '>=16'} 1452 | peerDependencies: 1453 | typescript: '>=4.2.0' 1454 | 1455 | tslib@2.8.1: 1456 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1457 | 1458 | type-check@0.4.0: 1459 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1460 | engines: {node: '>= 0.8.0'} 1461 | 1462 | typescript-eslint@8.13.0: 1463 | resolution: {integrity: sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==} 1464 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1465 | peerDependencies: 1466 | typescript: '*' 1467 | peerDependenciesMeta: 1468 | typescript: 1469 | optional: true 1470 | 1471 | typescript@5.6.3: 1472 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 1473 | engines: {node: '>=14.17'} 1474 | hasBin: true 1475 | 1476 | ultrahtml@1.5.3: 1477 | resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} 1478 | 1479 | undici-types@6.19.8: 1480 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 1481 | 1482 | undici@6.20.1: 1483 | resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} 1484 | engines: {node: '>=18.17'} 1485 | 1486 | unicode-trie@2.0.0: 1487 | resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} 1488 | 1489 | uri-js@4.4.1: 1490 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1491 | 1492 | util-deprecate@1.0.2: 1493 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1494 | 1495 | valid-data-url@3.0.1: 1496 | resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==} 1497 | engines: {node: '>=10'} 1498 | 1499 | vite-node@2.1.4: 1500 | resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} 1501 | engines: {node: ^18.0.0 || >=20.0.0} 1502 | hasBin: true 1503 | 1504 | vite@5.4.10: 1505 | resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==} 1506 | engines: {node: ^18.0.0 || >=20.0.0} 1507 | hasBin: true 1508 | peerDependencies: 1509 | '@types/node': ^18.0.0 || >=20.0.0 1510 | less: '*' 1511 | lightningcss: ^1.21.0 1512 | sass: '*' 1513 | sass-embedded: '*' 1514 | stylus: '*' 1515 | sugarss: '*' 1516 | terser: ^5.4.0 1517 | peerDependenciesMeta: 1518 | '@types/node': 1519 | optional: true 1520 | less: 1521 | optional: true 1522 | lightningcss: 1523 | optional: true 1524 | sass: 1525 | optional: true 1526 | sass-embedded: 1527 | optional: true 1528 | stylus: 1529 | optional: true 1530 | sugarss: 1531 | optional: true 1532 | terser: 1533 | optional: true 1534 | 1535 | vitefu@1.0.3: 1536 | resolution: {integrity: sha512-iKKfOMBHob2WxEJbqbJjHAkmYgvFDPhuqrO82om83S8RLk+17FtyMBfcyeH8GqD0ihShtkMW/zzJgiA51hCNCQ==} 1537 | peerDependencies: 1538 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0-beta.0 1539 | peerDependenciesMeta: 1540 | vite: 1541 | optional: true 1542 | 1543 | vitest@2.1.4: 1544 | resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} 1545 | engines: {node: ^18.0.0 || >=20.0.0} 1546 | hasBin: true 1547 | peerDependencies: 1548 | '@edge-runtime/vm': '*' 1549 | '@types/node': ^18.0.0 || >=20.0.0 1550 | '@vitest/browser': 2.1.4 1551 | '@vitest/ui': 2.1.4 1552 | happy-dom: '*' 1553 | jsdom: '*' 1554 | peerDependenciesMeta: 1555 | '@edge-runtime/vm': 1556 | optional: true 1557 | '@types/node': 1558 | optional: true 1559 | '@vitest/browser': 1560 | optional: true 1561 | '@vitest/ui': 1562 | optional: true 1563 | happy-dom: 1564 | optional: true 1565 | jsdom: 1566 | optional: true 1567 | 1568 | web-resource-inliner@7.0.0: 1569 | resolution: {integrity: sha512-NlfnGF8MY9ZUwFjyq3vOUBx7KwF8bmE+ywR781SB0nWB6MoMxN4BA8gtgP1KGTZo/O/AyWJz7HZpR704eaj4mg==} 1570 | engines: {node: '>=10.0.0'} 1571 | 1572 | whatwg-encoding@3.1.1: 1573 | resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} 1574 | engines: {node: '>=18'} 1575 | 1576 | whatwg-mimetype@4.0.0: 1577 | resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} 1578 | engines: {node: '>=18'} 1579 | 1580 | which@2.0.2: 1581 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1582 | engines: {node: '>= 8'} 1583 | hasBin: true 1584 | 1585 | why-is-node-running@2.3.0: 1586 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1587 | engines: {node: '>=8'} 1588 | hasBin: true 1589 | 1590 | word-wrap@1.2.5: 1591 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1592 | engines: {node: '>=0.10.0'} 1593 | 1594 | yaml@1.10.2: 1595 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1596 | engines: {node: '>= 6'} 1597 | 1598 | yocto-queue@0.1.0: 1599 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1600 | engines: {node: '>=10'} 1601 | 1602 | yoga-wasm-web@0.3.3: 1603 | resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} 1604 | 1605 | zimmerframe@1.1.2: 1606 | resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} 1607 | 1608 | snapshots: 1609 | 1610 | '@ampproject/remapping@2.3.0': 1611 | dependencies: 1612 | '@jridgewell/gen-mapping': 0.3.5 1613 | '@jridgewell/trace-mapping': 0.3.25 1614 | 1615 | '@esbuild/aix-ppc64@0.21.5': 1616 | optional: true 1617 | 1618 | '@esbuild/android-arm64@0.21.5': 1619 | optional: true 1620 | 1621 | '@esbuild/android-arm@0.21.5': 1622 | optional: true 1623 | 1624 | '@esbuild/android-x64@0.21.5': 1625 | optional: true 1626 | 1627 | '@esbuild/darwin-arm64@0.21.5': 1628 | optional: true 1629 | 1630 | '@esbuild/darwin-x64@0.21.5': 1631 | optional: true 1632 | 1633 | '@esbuild/freebsd-arm64@0.21.5': 1634 | optional: true 1635 | 1636 | '@esbuild/freebsd-x64@0.21.5': 1637 | optional: true 1638 | 1639 | '@esbuild/linux-arm64@0.21.5': 1640 | optional: true 1641 | 1642 | '@esbuild/linux-arm@0.21.5': 1643 | optional: true 1644 | 1645 | '@esbuild/linux-ia32@0.21.5': 1646 | optional: true 1647 | 1648 | '@esbuild/linux-loong64@0.21.5': 1649 | optional: true 1650 | 1651 | '@esbuild/linux-mips64el@0.21.5': 1652 | optional: true 1653 | 1654 | '@esbuild/linux-ppc64@0.21.5': 1655 | optional: true 1656 | 1657 | '@esbuild/linux-riscv64@0.21.5': 1658 | optional: true 1659 | 1660 | '@esbuild/linux-s390x@0.21.5': 1661 | optional: true 1662 | 1663 | '@esbuild/linux-x64@0.21.5': 1664 | optional: true 1665 | 1666 | '@esbuild/netbsd-x64@0.21.5': 1667 | optional: true 1668 | 1669 | '@esbuild/openbsd-x64@0.21.5': 1670 | optional: true 1671 | 1672 | '@esbuild/sunos-x64@0.21.5': 1673 | optional: true 1674 | 1675 | '@esbuild/win32-arm64@0.21.5': 1676 | optional: true 1677 | 1678 | '@esbuild/win32-ia32@0.21.5': 1679 | optional: true 1680 | 1681 | '@esbuild/win32-x64@0.21.5': 1682 | optional: true 1683 | 1684 | '@eslint-community/eslint-utils@4.4.1(eslint@9.14.0)': 1685 | dependencies: 1686 | eslint: 9.14.0 1687 | eslint-visitor-keys: 3.4.3 1688 | 1689 | '@eslint-community/regexpp@4.12.1': {} 1690 | 1691 | '@eslint/config-array@0.18.0': 1692 | dependencies: 1693 | '@eslint/object-schema': 2.1.4 1694 | debug: 4.3.7 1695 | minimatch: 3.1.2 1696 | transitivePeerDependencies: 1697 | - supports-color 1698 | 1699 | '@eslint/core@0.7.0': {} 1700 | 1701 | '@eslint/eslintrc@3.1.0': 1702 | dependencies: 1703 | ajv: 6.12.6 1704 | debug: 4.3.7 1705 | espree: 10.3.0 1706 | globals: 14.0.0 1707 | ignore: 5.3.2 1708 | import-fresh: 3.3.0 1709 | js-yaml: 4.1.0 1710 | minimatch: 3.1.2 1711 | strip-json-comments: 3.1.1 1712 | transitivePeerDependencies: 1713 | - supports-color 1714 | 1715 | '@eslint/js@9.14.0': {} 1716 | 1717 | '@eslint/object-schema@2.1.4': {} 1718 | 1719 | '@eslint/plugin-kit@0.2.2': 1720 | dependencies: 1721 | levn: 0.4.1 1722 | 1723 | '@humanfs/core@0.19.1': {} 1724 | 1725 | '@humanfs/node@0.16.6': 1726 | dependencies: 1727 | '@humanfs/core': 0.19.1 1728 | '@humanwhocodes/retry': 0.3.1 1729 | 1730 | '@humanwhocodes/module-importer@1.0.1': {} 1731 | 1732 | '@humanwhocodes/retry@0.3.1': {} 1733 | 1734 | '@humanwhocodes/retry@0.4.1': {} 1735 | 1736 | '@jridgewell/gen-mapping@0.3.5': 1737 | dependencies: 1738 | '@jridgewell/set-array': 1.2.1 1739 | '@jridgewell/sourcemap-codec': 1.5.0 1740 | '@jridgewell/trace-mapping': 0.3.25 1741 | 1742 | '@jridgewell/resolve-uri@3.1.2': {} 1743 | 1744 | '@jridgewell/set-array@1.2.1': {} 1745 | 1746 | '@jridgewell/sourcemap-codec@1.5.0': {} 1747 | 1748 | '@jridgewell/trace-mapping@0.3.25': 1749 | dependencies: 1750 | '@jridgewell/resolve-uri': 3.1.2 1751 | '@jridgewell/sourcemap-codec': 1.5.0 1752 | 1753 | '@nodelib/fs.scandir@2.1.5': 1754 | dependencies: 1755 | '@nodelib/fs.stat': 2.0.5 1756 | run-parallel: 1.2.0 1757 | 1758 | '@nodelib/fs.stat@2.0.5': {} 1759 | 1760 | '@nodelib/fs.walk@1.2.8': 1761 | dependencies: 1762 | '@nodelib/fs.scandir': 2.1.5 1763 | fastq: 1.17.1 1764 | 1765 | '@playwright/test@1.48.2': 1766 | dependencies: 1767 | playwright: 1.48.2 1768 | 1769 | '@polka/url@1.0.0-next.28': {} 1770 | 1771 | '@resvg/resvg-js-android-arm-eabi@2.6.2': 1772 | optional: true 1773 | 1774 | '@resvg/resvg-js-android-arm64@2.6.2': 1775 | optional: true 1776 | 1777 | '@resvg/resvg-js-darwin-arm64@2.6.2': 1778 | optional: true 1779 | 1780 | '@resvg/resvg-js-darwin-x64@2.6.2': 1781 | optional: true 1782 | 1783 | '@resvg/resvg-js-linux-arm-gnueabihf@2.6.2': 1784 | optional: true 1785 | 1786 | '@resvg/resvg-js-linux-arm64-gnu@2.6.2': 1787 | optional: true 1788 | 1789 | '@resvg/resvg-js-linux-arm64-musl@2.6.2': 1790 | optional: true 1791 | 1792 | '@resvg/resvg-js-linux-x64-gnu@2.6.2': 1793 | optional: true 1794 | 1795 | '@resvg/resvg-js-linux-x64-musl@2.6.2': 1796 | optional: true 1797 | 1798 | '@resvg/resvg-js-win32-arm64-msvc@2.6.2': 1799 | optional: true 1800 | 1801 | '@resvg/resvg-js-win32-ia32-msvc@2.6.2': 1802 | optional: true 1803 | 1804 | '@resvg/resvg-js-win32-x64-msvc@2.6.2': 1805 | optional: true 1806 | 1807 | '@resvg/resvg-js@2.6.2': 1808 | optionalDependencies: 1809 | '@resvg/resvg-js-android-arm-eabi': 2.6.2 1810 | '@resvg/resvg-js-android-arm64': 2.6.2 1811 | '@resvg/resvg-js-darwin-arm64': 2.6.2 1812 | '@resvg/resvg-js-darwin-x64': 2.6.2 1813 | '@resvg/resvg-js-linux-arm-gnueabihf': 2.6.2 1814 | '@resvg/resvg-js-linux-arm64-gnu': 2.6.2 1815 | '@resvg/resvg-js-linux-arm64-musl': 2.6.2 1816 | '@resvg/resvg-js-linux-x64-gnu': 2.6.2 1817 | '@resvg/resvg-js-linux-x64-musl': 2.6.2 1818 | '@resvg/resvg-js-win32-arm64-msvc': 2.6.2 1819 | '@resvg/resvg-js-win32-ia32-msvc': 2.6.2 1820 | '@resvg/resvg-js-win32-x64-msvc': 2.6.2 1821 | 1822 | '@rollup/rollup-android-arm-eabi@4.24.4': 1823 | optional: true 1824 | 1825 | '@rollup/rollup-android-arm64@4.24.4': 1826 | optional: true 1827 | 1828 | '@rollup/rollup-darwin-arm64@4.24.4': 1829 | optional: true 1830 | 1831 | '@rollup/rollup-darwin-x64@4.24.4': 1832 | optional: true 1833 | 1834 | '@rollup/rollup-freebsd-arm64@4.24.4': 1835 | optional: true 1836 | 1837 | '@rollup/rollup-freebsd-x64@4.24.4': 1838 | optional: true 1839 | 1840 | '@rollup/rollup-linux-arm-gnueabihf@4.24.4': 1841 | optional: true 1842 | 1843 | '@rollup/rollup-linux-arm-musleabihf@4.24.4': 1844 | optional: true 1845 | 1846 | '@rollup/rollup-linux-arm64-gnu@4.24.4': 1847 | optional: true 1848 | 1849 | '@rollup/rollup-linux-arm64-musl@4.24.4': 1850 | optional: true 1851 | 1852 | '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': 1853 | optional: true 1854 | 1855 | '@rollup/rollup-linux-riscv64-gnu@4.24.4': 1856 | optional: true 1857 | 1858 | '@rollup/rollup-linux-s390x-gnu@4.24.4': 1859 | optional: true 1860 | 1861 | '@rollup/rollup-linux-x64-gnu@4.24.4': 1862 | optional: true 1863 | 1864 | '@rollup/rollup-linux-x64-musl@4.24.4': 1865 | optional: true 1866 | 1867 | '@rollup/rollup-win32-arm64-msvc@4.24.4': 1868 | optional: true 1869 | 1870 | '@rollup/rollup-win32-ia32-msvc@4.24.4': 1871 | optional: true 1872 | 1873 | '@rollup/rollup-win32-x64-msvc@4.24.4': 1874 | optional: true 1875 | 1876 | '@shuding/opentype.js@1.4.0-beta.0': 1877 | dependencies: 1878 | fflate: 0.7.4 1879 | string.prototype.codepointat: 0.2.1 1880 | 1881 | '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)))(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)))': 1882 | dependencies: 1883 | '@sveltejs/kit': 2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)))(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)) 1884 | import-meta-resolve: 4.1.0 1885 | 1886 | '@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)))(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0))': 1887 | dependencies: 1888 | '@sveltejs/vite-plugin-svelte': 4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)) 1889 | '@types/cookie': 0.6.0 1890 | cookie: 0.6.0 1891 | devalue: 5.1.1 1892 | esm-env: 1.1.4 1893 | import-meta-resolve: 4.1.0 1894 | kleur: 4.1.5 1895 | magic-string: 0.30.12 1896 | mrmime: 2.0.0 1897 | sade: 1.8.1 1898 | set-cookie-parser: 2.7.1 1899 | sirv: 3.0.0 1900 | svelte: 5.1.13 1901 | tiny-glob: 0.2.9 1902 | vite: 5.4.10(@types/node@22.9.0) 1903 | 1904 | '@sveltejs/package@2.3.7(svelte@5.1.13)(typescript@5.6.3)': 1905 | dependencies: 1906 | chokidar: 4.0.1 1907 | kleur: 4.1.5 1908 | sade: 1.8.1 1909 | semver: 7.6.3 1910 | svelte: 5.1.13 1911 | svelte2tsx: 0.7.23(svelte@5.1.13)(typescript@5.6.3) 1912 | transitivePeerDependencies: 1913 | - typescript 1914 | 1915 | '@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)))(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0))': 1916 | dependencies: 1917 | '@sveltejs/vite-plugin-svelte': 4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)) 1918 | debug: 4.3.7 1919 | svelte: 5.1.13 1920 | vite: 5.4.10(@types/node@22.9.0) 1921 | transitivePeerDependencies: 1922 | - supports-color 1923 | 1924 | '@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0))': 1925 | dependencies: 1926 | '@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)))(svelte@5.1.13)(vite@5.4.10(@types/node@22.9.0)) 1927 | debug: 4.3.7 1928 | deepmerge: 4.3.1 1929 | kleur: 4.1.5 1930 | magic-string: 0.30.12 1931 | svelte: 5.1.13 1932 | vite: 5.4.10(@types/node@22.9.0) 1933 | vitefu: 1.0.3(vite@5.4.10(@types/node@22.9.0)) 1934 | transitivePeerDependencies: 1935 | - supports-color 1936 | 1937 | '@types/cookie@0.6.0': {} 1938 | 1939 | '@types/eslint@9.6.1': 1940 | dependencies: 1941 | '@types/estree': 1.0.6 1942 | '@types/json-schema': 7.0.15 1943 | 1944 | '@types/estree@1.0.6': {} 1945 | 1946 | '@types/json-schema@7.0.15': {} 1947 | 1948 | '@types/node@22.9.0': 1949 | dependencies: 1950 | undici-types: 6.19.8 1951 | optional: true 1952 | 1953 | '@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3)': 1954 | dependencies: 1955 | '@eslint-community/regexpp': 4.12.1 1956 | '@typescript-eslint/parser': 8.13.0(eslint@9.14.0)(typescript@5.6.3) 1957 | '@typescript-eslint/scope-manager': 8.13.0 1958 | '@typescript-eslint/type-utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) 1959 | '@typescript-eslint/utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) 1960 | '@typescript-eslint/visitor-keys': 8.13.0 1961 | eslint: 9.14.0 1962 | graphemer: 1.4.0 1963 | ignore: 5.3.2 1964 | natural-compare: 1.4.0 1965 | ts-api-utils: 1.4.0(typescript@5.6.3) 1966 | optionalDependencies: 1967 | typescript: 5.6.3 1968 | transitivePeerDependencies: 1969 | - supports-color 1970 | 1971 | '@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3)': 1972 | dependencies: 1973 | '@typescript-eslint/scope-manager': 8.13.0 1974 | '@typescript-eslint/types': 8.13.0 1975 | '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) 1976 | '@typescript-eslint/visitor-keys': 8.13.0 1977 | debug: 4.3.7 1978 | eslint: 9.14.0 1979 | optionalDependencies: 1980 | typescript: 5.6.3 1981 | transitivePeerDependencies: 1982 | - supports-color 1983 | 1984 | '@typescript-eslint/scope-manager@8.13.0': 1985 | dependencies: 1986 | '@typescript-eslint/types': 8.13.0 1987 | '@typescript-eslint/visitor-keys': 8.13.0 1988 | 1989 | '@typescript-eslint/type-utils@8.13.0(eslint@9.14.0)(typescript@5.6.3)': 1990 | dependencies: 1991 | '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) 1992 | '@typescript-eslint/utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) 1993 | debug: 4.3.7 1994 | ts-api-utils: 1.4.0(typescript@5.6.3) 1995 | optionalDependencies: 1996 | typescript: 5.6.3 1997 | transitivePeerDependencies: 1998 | - eslint 1999 | - supports-color 2000 | 2001 | '@typescript-eslint/types@8.13.0': {} 2002 | 2003 | '@typescript-eslint/typescript-estree@8.13.0(typescript@5.6.3)': 2004 | dependencies: 2005 | '@typescript-eslint/types': 8.13.0 2006 | '@typescript-eslint/visitor-keys': 8.13.0 2007 | debug: 4.3.7 2008 | fast-glob: 3.3.2 2009 | is-glob: 4.0.3 2010 | minimatch: 9.0.5 2011 | semver: 7.6.3 2012 | ts-api-utils: 1.4.0(typescript@5.6.3) 2013 | optionalDependencies: 2014 | typescript: 5.6.3 2015 | transitivePeerDependencies: 2016 | - supports-color 2017 | 2018 | '@typescript-eslint/utils@8.13.0(eslint@9.14.0)(typescript@5.6.3)': 2019 | dependencies: 2020 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0) 2021 | '@typescript-eslint/scope-manager': 8.13.0 2022 | '@typescript-eslint/types': 8.13.0 2023 | '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) 2024 | eslint: 9.14.0 2025 | transitivePeerDependencies: 2026 | - supports-color 2027 | - typescript 2028 | 2029 | '@typescript-eslint/visitor-keys@8.13.0': 2030 | dependencies: 2031 | '@typescript-eslint/types': 8.13.0 2032 | eslint-visitor-keys: 3.4.3 2033 | 2034 | '@vitest/expect@2.1.4': 2035 | dependencies: 2036 | '@vitest/spy': 2.1.4 2037 | '@vitest/utils': 2.1.4 2038 | chai: 5.1.2 2039 | tinyrainbow: 1.2.0 2040 | 2041 | '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.9.0))': 2042 | dependencies: 2043 | '@vitest/spy': 2.1.4 2044 | estree-walker: 3.0.3 2045 | magic-string: 0.30.12 2046 | optionalDependencies: 2047 | vite: 5.4.10(@types/node@22.9.0) 2048 | 2049 | '@vitest/pretty-format@2.1.4': 2050 | dependencies: 2051 | tinyrainbow: 1.2.0 2052 | 2053 | '@vitest/runner@2.1.4': 2054 | dependencies: 2055 | '@vitest/utils': 2.1.4 2056 | pathe: 1.1.2 2057 | 2058 | '@vitest/snapshot@2.1.4': 2059 | dependencies: 2060 | '@vitest/pretty-format': 2.1.4 2061 | magic-string: 0.30.12 2062 | pathe: 1.1.2 2063 | 2064 | '@vitest/spy@2.1.4': 2065 | dependencies: 2066 | tinyspy: 3.0.2 2067 | 2068 | '@vitest/utils@2.1.4': 2069 | dependencies: 2070 | '@vitest/pretty-format': 2.1.4 2071 | loupe: 3.1.2 2072 | tinyrainbow: 1.2.0 2073 | 2074 | acorn-jsx@5.3.2(acorn@8.14.0): 2075 | dependencies: 2076 | acorn: 8.14.0 2077 | 2078 | acorn-typescript@1.4.13(acorn@8.14.0): 2079 | dependencies: 2080 | acorn: 8.14.0 2081 | 2082 | acorn@8.14.0: {} 2083 | 2084 | ajv@6.12.6: 2085 | dependencies: 2086 | fast-deep-equal: 3.1.3 2087 | fast-json-stable-stringify: 2.1.0 2088 | json-schema-traverse: 0.4.1 2089 | uri-js: 4.4.1 2090 | 2091 | ansi-colors@4.1.3: {} 2092 | 2093 | ansi-styles@4.3.0: 2094 | dependencies: 2095 | color-convert: 2.0.1 2096 | 2097 | argparse@2.0.1: {} 2098 | 2099 | aria-query@5.3.2: {} 2100 | 2101 | assertion-error@2.0.1: {} 2102 | 2103 | axobject-query@4.1.0: {} 2104 | 2105 | balanced-match@1.0.2: {} 2106 | 2107 | base64-js@0.0.8: {} 2108 | 2109 | boolbase@1.0.0: {} 2110 | 2111 | brace-expansion@1.1.11: 2112 | dependencies: 2113 | balanced-match: 1.0.2 2114 | concat-map: 0.0.1 2115 | 2116 | brace-expansion@2.0.1: 2117 | dependencies: 2118 | balanced-match: 1.0.2 2119 | 2120 | braces@3.0.3: 2121 | dependencies: 2122 | fill-range: 7.1.1 2123 | 2124 | cac@6.7.14: {} 2125 | 2126 | callsites@3.1.0: {} 2127 | 2128 | camelize@1.0.1: {} 2129 | 2130 | chai@5.1.2: 2131 | dependencies: 2132 | assertion-error: 2.0.1 2133 | check-error: 2.1.1 2134 | deep-eql: 5.0.2 2135 | loupe: 3.1.2 2136 | pathval: 2.0.0 2137 | 2138 | chalk@4.1.2: 2139 | dependencies: 2140 | ansi-styles: 4.3.0 2141 | supports-color: 7.2.0 2142 | 2143 | check-error@2.1.1: {} 2144 | 2145 | cheerio-select@2.1.0: 2146 | dependencies: 2147 | boolbase: 1.0.0 2148 | css-select: 5.1.0 2149 | css-what: 6.1.0 2150 | domelementtype: 2.3.0 2151 | domhandler: 5.0.3 2152 | domutils: 3.1.0 2153 | 2154 | cheerio@1.0.0: 2155 | dependencies: 2156 | cheerio-select: 2.1.0 2157 | dom-serializer: 2.0.0 2158 | domhandler: 5.0.3 2159 | domutils: 3.1.0 2160 | encoding-sniffer: 0.2.0 2161 | htmlparser2: 9.1.0 2162 | parse5: 7.2.1 2163 | parse5-htmlparser2-tree-adapter: 7.1.0 2164 | parse5-parser-stream: 7.1.2 2165 | undici: 6.20.1 2166 | whatwg-mimetype: 4.0.0 2167 | 2168 | chokidar@4.0.1: 2169 | dependencies: 2170 | readdirp: 4.0.2 2171 | 2172 | color-convert@2.0.1: 2173 | dependencies: 2174 | color-name: 1.1.4 2175 | 2176 | color-name@1.1.4: {} 2177 | 2178 | commander@12.1.0: {} 2179 | 2180 | concat-map@0.0.1: {} 2181 | 2182 | cookie@0.6.0: {} 2183 | 2184 | cross-spawn@7.0.5: 2185 | dependencies: 2186 | path-key: 3.1.1 2187 | shebang-command: 2.0.0 2188 | which: 2.0.2 2189 | 2190 | css-background-parser@0.1.0: {} 2191 | 2192 | css-box-shadow@1.0.0-3: {} 2193 | 2194 | css-color-keywords@1.0.0: {} 2195 | 2196 | css-gradient-parser@0.0.16: {} 2197 | 2198 | css-select@5.1.0: 2199 | dependencies: 2200 | boolbase: 1.0.0 2201 | css-what: 6.1.0 2202 | domhandler: 5.0.3 2203 | domutils: 3.1.0 2204 | nth-check: 2.1.1 2205 | 2206 | css-to-react-native@3.2.0: 2207 | dependencies: 2208 | camelize: 1.0.1 2209 | css-color-keywords: 1.0.0 2210 | postcss-value-parser: 4.2.0 2211 | 2212 | css-what@6.1.0: {} 2213 | 2214 | cssesc@3.0.0: {} 2215 | 2216 | debug@4.3.7: 2217 | dependencies: 2218 | ms: 2.1.3 2219 | 2220 | dedent-js@1.0.1: {} 2221 | 2222 | deep-eql@5.0.2: {} 2223 | 2224 | deep-is@0.1.4: {} 2225 | 2226 | deepmerge@4.3.1: {} 2227 | 2228 | devalue@5.1.1: {} 2229 | 2230 | dom-serializer@1.4.1: 2231 | dependencies: 2232 | domelementtype: 2.3.0 2233 | domhandler: 4.3.1 2234 | entities: 2.2.0 2235 | 2236 | dom-serializer@2.0.0: 2237 | dependencies: 2238 | domelementtype: 2.3.0 2239 | domhandler: 5.0.3 2240 | entities: 4.5.0 2241 | 2242 | domelementtype@2.3.0: {} 2243 | 2244 | domhandler@3.3.0: 2245 | dependencies: 2246 | domelementtype: 2.3.0 2247 | 2248 | domhandler@4.3.1: 2249 | dependencies: 2250 | domelementtype: 2.3.0 2251 | 2252 | domhandler@5.0.3: 2253 | dependencies: 2254 | domelementtype: 2.3.0 2255 | 2256 | domutils@2.8.0: 2257 | dependencies: 2258 | dom-serializer: 1.4.1 2259 | domelementtype: 2.3.0 2260 | domhandler: 4.3.1 2261 | 2262 | domutils@3.1.0: 2263 | dependencies: 2264 | dom-serializer: 2.0.0 2265 | domelementtype: 2.3.0 2266 | domhandler: 5.0.3 2267 | 2268 | emoji-regex@10.4.0: {} 2269 | 2270 | encoding-sniffer@0.2.0: 2271 | dependencies: 2272 | iconv-lite: 0.6.3 2273 | whatwg-encoding: 3.1.1 2274 | 2275 | entities@2.2.0: {} 2276 | 2277 | entities@4.5.0: {} 2278 | 2279 | esbuild@0.21.5: 2280 | optionalDependencies: 2281 | '@esbuild/aix-ppc64': 0.21.5 2282 | '@esbuild/android-arm': 0.21.5 2283 | '@esbuild/android-arm64': 0.21.5 2284 | '@esbuild/android-x64': 0.21.5 2285 | '@esbuild/darwin-arm64': 0.21.5 2286 | '@esbuild/darwin-x64': 0.21.5 2287 | '@esbuild/freebsd-arm64': 0.21.5 2288 | '@esbuild/freebsd-x64': 0.21.5 2289 | '@esbuild/linux-arm': 0.21.5 2290 | '@esbuild/linux-arm64': 0.21.5 2291 | '@esbuild/linux-ia32': 0.21.5 2292 | '@esbuild/linux-loong64': 0.21.5 2293 | '@esbuild/linux-mips64el': 0.21.5 2294 | '@esbuild/linux-ppc64': 0.21.5 2295 | '@esbuild/linux-riscv64': 0.21.5 2296 | '@esbuild/linux-s390x': 0.21.5 2297 | '@esbuild/linux-x64': 0.21.5 2298 | '@esbuild/netbsd-x64': 0.21.5 2299 | '@esbuild/openbsd-x64': 0.21.5 2300 | '@esbuild/sunos-x64': 0.21.5 2301 | '@esbuild/win32-arm64': 0.21.5 2302 | '@esbuild/win32-ia32': 0.21.5 2303 | '@esbuild/win32-x64': 0.21.5 2304 | 2305 | escape-goat@3.0.0: {} 2306 | 2307 | escape-html@1.0.3: {} 2308 | 2309 | escape-string-regexp@4.0.0: {} 2310 | 2311 | eslint-compat-utils@0.5.1(eslint@9.14.0): 2312 | dependencies: 2313 | eslint: 9.14.0 2314 | semver: 7.6.3 2315 | 2316 | eslint-config-prettier@9.1.0(eslint@9.14.0): 2317 | dependencies: 2318 | eslint: 9.14.0 2319 | 2320 | eslint-plugin-svelte@2.46.0(eslint@9.14.0)(svelte@5.1.13): 2321 | dependencies: 2322 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0) 2323 | '@jridgewell/sourcemap-codec': 1.5.0 2324 | eslint: 9.14.0 2325 | eslint-compat-utils: 0.5.1(eslint@9.14.0) 2326 | esutils: 2.0.3 2327 | known-css-properties: 0.35.0 2328 | postcss: 8.4.47 2329 | postcss-load-config: 3.1.4(postcss@8.4.47) 2330 | postcss-safe-parser: 6.0.0(postcss@8.4.47) 2331 | postcss-selector-parser: 6.1.2 2332 | semver: 7.6.3 2333 | svelte-eslint-parser: 0.43.0(svelte@5.1.13) 2334 | optionalDependencies: 2335 | svelte: 5.1.13 2336 | transitivePeerDependencies: 2337 | - ts-node 2338 | 2339 | eslint-scope@7.2.2: 2340 | dependencies: 2341 | esrecurse: 4.3.0 2342 | estraverse: 5.3.0 2343 | 2344 | eslint-scope@8.2.0: 2345 | dependencies: 2346 | esrecurse: 4.3.0 2347 | estraverse: 5.3.0 2348 | 2349 | eslint-visitor-keys@3.4.3: {} 2350 | 2351 | eslint-visitor-keys@4.2.0: {} 2352 | 2353 | eslint@9.14.0: 2354 | dependencies: 2355 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0) 2356 | '@eslint-community/regexpp': 4.12.1 2357 | '@eslint/config-array': 0.18.0 2358 | '@eslint/core': 0.7.0 2359 | '@eslint/eslintrc': 3.1.0 2360 | '@eslint/js': 9.14.0 2361 | '@eslint/plugin-kit': 0.2.2 2362 | '@humanfs/node': 0.16.6 2363 | '@humanwhocodes/module-importer': 1.0.1 2364 | '@humanwhocodes/retry': 0.4.1 2365 | '@types/estree': 1.0.6 2366 | '@types/json-schema': 7.0.15 2367 | ajv: 6.12.6 2368 | chalk: 4.1.2 2369 | cross-spawn: 7.0.5 2370 | debug: 4.3.7 2371 | escape-string-regexp: 4.0.0 2372 | eslint-scope: 8.2.0 2373 | eslint-visitor-keys: 4.2.0 2374 | espree: 10.3.0 2375 | esquery: 1.6.0 2376 | esutils: 2.0.3 2377 | fast-deep-equal: 3.1.3 2378 | file-entry-cache: 8.0.0 2379 | find-up: 5.0.0 2380 | glob-parent: 6.0.2 2381 | ignore: 5.3.2 2382 | imurmurhash: 0.1.4 2383 | is-glob: 4.0.3 2384 | json-stable-stringify-without-jsonify: 1.0.1 2385 | lodash.merge: 4.6.2 2386 | minimatch: 3.1.2 2387 | natural-compare: 1.4.0 2388 | optionator: 0.9.4 2389 | text-table: 0.2.0 2390 | transitivePeerDependencies: 2391 | - supports-color 2392 | 2393 | esm-env@1.1.4: {} 2394 | 2395 | espree@10.3.0: 2396 | dependencies: 2397 | acorn: 8.14.0 2398 | acorn-jsx: 5.3.2(acorn@8.14.0) 2399 | eslint-visitor-keys: 4.2.0 2400 | 2401 | espree@9.6.1: 2402 | dependencies: 2403 | acorn: 8.14.0 2404 | acorn-jsx: 5.3.2(acorn@8.14.0) 2405 | eslint-visitor-keys: 3.4.3 2406 | 2407 | esquery@1.6.0: 2408 | dependencies: 2409 | estraverse: 5.3.0 2410 | 2411 | esrap@1.2.2: 2412 | dependencies: 2413 | '@jridgewell/sourcemap-codec': 1.5.0 2414 | '@types/estree': 1.0.6 2415 | 2416 | esrecurse@4.3.0: 2417 | dependencies: 2418 | estraverse: 5.3.0 2419 | 2420 | estraverse@5.3.0: {} 2421 | 2422 | estree-walker@3.0.3: 2423 | dependencies: 2424 | '@types/estree': 1.0.6 2425 | 2426 | esutils@2.0.3: {} 2427 | 2428 | expect-type@1.1.0: {} 2429 | 2430 | fast-deep-equal@3.1.3: {} 2431 | 2432 | fast-glob@3.3.2: 2433 | dependencies: 2434 | '@nodelib/fs.stat': 2.0.5 2435 | '@nodelib/fs.walk': 1.2.8 2436 | glob-parent: 5.1.2 2437 | merge2: 1.4.1 2438 | micromatch: 4.0.8 2439 | 2440 | fast-json-stable-stringify@2.1.0: {} 2441 | 2442 | fast-levenshtein@2.0.6: {} 2443 | 2444 | fastq@1.17.1: 2445 | dependencies: 2446 | reusify: 1.0.4 2447 | 2448 | fdir@6.4.2: {} 2449 | 2450 | fflate@0.7.4: {} 2451 | 2452 | file-entry-cache@8.0.0: 2453 | dependencies: 2454 | flat-cache: 4.0.1 2455 | 2456 | fill-range@7.1.1: 2457 | dependencies: 2458 | to-regex-range: 5.0.1 2459 | 2460 | find-up@5.0.0: 2461 | dependencies: 2462 | locate-path: 6.0.0 2463 | path-exists: 4.0.0 2464 | 2465 | flat-cache@4.0.1: 2466 | dependencies: 2467 | flatted: 3.3.1 2468 | keyv: 4.5.4 2469 | 2470 | flatted@3.3.1: {} 2471 | 2472 | fsevents@2.3.2: 2473 | optional: true 2474 | 2475 | fsevents@2.3.3: 2476 | optional: true 2477 | 2478 | glob-parent@5.1.2: 2479 | dependencies: 2480 | is-glob: 4.0.3 2481 | 2482 | glob-parent@6.0.2: 2483 | dependencies: 2484 | is-glob: 4.0.3 2485 | 2486 | globals@14.0.0: {} 2487 | 2488 | globals@15.12.0: {} 2489 | 2490 | globalyzer@0.1.0: {} 2491 | 2492 | globrex@0.1.2: {} 2493 | 2494 | graphemer@1.4.0: {} 2495 | 2496 | has-flag@4.0.0: {} 2497 | 2498 | hex-rgb@4.3.0: {} 2499 | 2500 | htmlparser2@5.0.1: 2501 | dependencies: 2502 | domelementtype: 2.3.0 2503 | domhandler: 3.3.0 2504 | domutils: 2.8.0 2505 | entities: 2.2.0 2506 | 2507 | htmlparser2@9.1.0: 2508 | dependencies: 2509 | domelementtype: 2.3.0 2510 | domhandler: 5.0.3 2511 | domutils: 3.1.0 2512 | entities: 4.5.0 2513 | 2514 | iconv-lite@0.6.3: 2515 | dependencies: 2516 | safer-buffer: 2.1.2 2517 | 2518 | ignore@5.3.2: {} 2519 | 2520 | import-fresh@3.3.0: 2521 | dependencies: 2522 | parent-module: 1.0.1 2523 | resolve-from: 4.0.0 2524 | 2525 | import-meta-resolve@4.1.0: {} 2526 | 2527 | imurmurhash@0.1.4: {} 2528 | 2529 | is-extglob@2.1.1: {} 2530 | 2531 | is-glob@4.0.3: 2532 | dependencies: 2533 | is-extglob: 2.1.1 2534 | 2535 | is-number@7.0.0: {} 2536 | 2537 | is-reference@3.0.2: 2538 | dependencies: 2539 | '@types/estree': 1.0.6 2540 | 2541 | isexe@2.0.0: {} 2542 | 2543 | js-yaml@4.1.0: 2544 | dependencies: 2545 | argparse: 2.0.1 2546 | 2547 | json-buffer@3.0.1: {} 2548 | 2549 | json-schema-traverse@0.4.1: {} 2550 | 2551 | json-stable-stringify-without-jsonify@1.0.1: {} 2552 | 2553 | juice@11.0.0: 2554 | dependencies: 2555 | cheerio: 1.0.0 2556 | commander: 12.1.0 2557 | mensch: 0.3.4 2558 | slick: 1.12.2 2559 | web-resource-inliner: 7.0.0 2560 | 2561 | keyv@4.5.4: 2562 | dependencies: 2563 | json-buffer: 3.0.1 2564 | 2565 | kleur@4.1.5: {} 2566 | 2567 | known-css-properties@0.35.0: {} 2568 | 2569 | levn@0.4.1: 2570 | dependencies: 2571 | prelude-ls: 1.2.1 2572 | type-check: 0.4.0 2573 | 2574 | lilconfig@2.1.0: {} 2575 | 2576 | linebreak@1.1.0: 2577 | dependencies: 2578 | base64-js: 0.0.8 2579 | unicode-trie: 2.0.0 2580 | 2581 | locate-character@3.0.0: {} 2582 | 2583 | locate-path@6.0.0: 2584 | dependencies: 2585 | p-locate: 5.0.0 2586 | 2587 | lodash.merge@4.6.2: {} 2588 | 2589 | loupe@3.1.2: {} 2590 | 2591 | lower-case@2.0.2: 2592 | dependencies: 2593 | tslib: 2.8.1 2594 | 2595 | magic-string@0.30.12: 2596 | dependencies: 2597 | '@jridgewell/sourcemap-codec': 1.5.0 2598 | 2599 | mensch@0.3.4: {} 2600 | 2601 | merge2@1.4.1: {} 2602 | 2603 | micromatch@4.0.8: 2604 | dependencies: 2605 | braces: 3.0.3 2606 | picomatch: 2.3.1 2607 | 2608 | mime@2.6.0: {} 2609 | 2610 | minimatch@3.1.2: 2611 | dependencies: 2612 | brace-expansion: 1.1.11 2613 | 2614 | minimatch@9.0.5: 2615 | dependencies: 2616 | brace-expansion: 2.0.1 2617 | 2618 | mri@1.2.0: {} 2619 | 2620 | mrmime@2.0.0: {} 2621 | 2622 | ms@2.1.3: {} 2623 | 2624 | nanoid@3.3.7: {} 2625 | 2626 | natural-compare@1.4.0: {} 2627 | 2628 | no-case@3.0.4: 2629 | dependencies: 2630 | lower-case: 2.0.2 2631 | tslib: 2.8.1 2632 | 2633 | nth-check@2.1.1: 2634 | dependencies: 2635 | boolbase: 1.0.0 2636 | 2637 | optionator@0.9.4: 2638 | dependencies: 2639 | deep-is: 0.1.4 2640 | fast-levenshtein: 2.0.6 2641 | levn: 0.4.1 2642 | prelude-ls: 1.2.1 2643 | type-check: 0.4.0 2644 | word-wrap: 1.2.5 2645 | 2646 | p-limit@3.1.0: 2647 | dependencies: 2648 | yocto-queue: 0.1.0 2649 | 2650 | p-locate@5.0.0: 2651 | dependencies: 2652 | p-limit: 3.1.0 2653 | 2654 | pako@0.2.9: {} 2655 | 2656 | parent-module@1.0.1: 2657 | dependencies: 2658 | callsites: 3.1.0 2659 | 2660 | parse-css-color@0.2.1: 2661 | dependencies: 2662 | color-name: 1.1.4 2663 | hex-rgb: 4.3.0 2664 | 2665 | parse5-htmlparser2-tree-adapter@7.1.0: 2666 | dependencies: 2667 | domhandler: 5.0.3 2668 | parse5: 7.2.1 2669 | 2670 | parse5-parser-stream@7.1.2: 2671 | dependencies: 2672 | parse5: 7.2.1 2673 | 2674 | parse5@7.2.1: 2675 | dependencies: 2676 | entities: 4.5.0 2677 | 2678 | pascal-case@3.1.2: 2679 | dependencies: 2680 | no-case: 3.0.4 2681 | tslib: 2.8.1 2682 | 2683 | path-exists@4.0.0: {} 2684 | 2685 | path-key@3.1.1: {} 2686 | 2687 | pathe@1.1.2: {} 2688 | 2689 | pathval@2.0.0: {} 2690 | 2691 | picocolors@1.1.1: {} 2692 | 2693 | picomatch@2.3.1: {} 2694 | 2695 | playwright-core@1.48.2: {} 2696 | 2697 | playwright@1.48.2: 2698 | dependencies: 2699 | playwright-core: 1.48.2 2700 | optionalDependencies: 2701 | fsevents: 2.3.2 2702 | 2703 | postcss-load-config@3.1.4(postcss@8.4.47): 2704 | dependencies: 2705 | lilconfig: 2.1.0 2706 | yaml: 1.10.2 2707 | optionalDependencies: 2708 | postcss: 8.4.47 2709 | 2710 | postcss-safe-parser@6.0.0(postcss@8.4.47): 2711 | dependencies: 2712 | postcss: 8.4.47 2713 | 2714 | postcss-scss@4.0.9(postcss@8.4.47): 2715 | dependencies: 2716 | postcss: 8.4.47 2717 | 2718 | postcss-selector-parser@6.1.2: 2719 | dependencies: 2720 | cssesc: 3.0.0 2721 | util-deprecate: 1.0.2 2722 | 2723 | postcss-value-parser@4.2.0: {} 2724 | 2725 | postcss@8.4.47: 2726 | dependencies: 2727 | nanoid: 3.3.7 2728 | picocolors: 1.1.1 2729 | source-map-js: 1.2.1 2730 | 2731 | prelude-ls@1.2.1: {} 2732 | 2733 | prettier-plugin-svelte@3.2.7(prettier@3.3.3)(svelte@5.1.13): 2734 | dependencies: 2735 | prettier: 3.3.3 2736 | svelte: 5.1.13 2737 | 2738 | prettier@3.3.3: {} 2739 | 2740 | punycode@2.3.1: {} 2741 | 2742 | queue-microtask@1.2.3: {} 2743 | 2744 | readdirp@4.0.2: {} 2745 | 2746 | resolve-from@4.0.0: {} 2747 | 2748 | reusify@1.0.4: {} 2749 | 2750 | rollup@4.24.4: 2751 | dependencies: 2752 | '@types/estree': 1.0.6 2753 | optionalDependencies: 2754 | '@rollup/rollup-android-arm-eabi': 4.24.4 2755 | '@rollup/rollup-android-arm64': 4.24.4 2756 | '@rollup/rollup-darwin-arm64': 4.24.4 2757 | '@rollup/rollup-darwin-x64': 4.24.4 2758 | '@rollup/rollup-freebsd-arm64': 4.24.4 2759 | '@rollup/rollup-freebsd-x64': 4.24.4 2760 | '@rollup/rollup-linux-arm-gnueabihf': 4.24.4 2761 | '@rollup/rollup-linux-arm-musleabihf': 4.24.4 2762 | '@rollup/rollup-linux-arm64-gnu': 4.24.4 2763 | '@rollup/rollup-linux-arm64-musl': 4.24.4 2764 | '@rollup/rollup-linux-powerpc64le-gnu': 4.24.4 2765 | '@rollup/rollup-linux-riscv64-gnu': 4.24.4 2766 | '@rollup/rollup-linux-s390x-gnu': 4.24.4 2767 | '@rollup/rollup-linux-x64-gnu': 4.24.4 2768 | '@rollup/rollup-linux-x64-musl': 4.24.4 2769 | '@rollup/rollup-win32-arm64-msvc': 4.24.4 2770 | '@rollup/rollup-win32-ia32-msvc': 4.24.4 2771 | '@rollup/rollup-win32-x64-msvc': 4.24.4 2772 | fsevents: 2.3.3 2773 | 2774 | run-parallel@1.2.0: 2775 | dependencies: 2776 | queue-microtask: 1.2.3 2777 | 2778 | sade@1.8.1: 2779 | dependencies: 2780 | mri: 1.2.0 2781 | 2782 | safer-buffer@2.1.2: {} 2783 | 2784 | satori-html@0.3.2: 2785 | dependencies: 2786 | ultrahtml: 1.5.3 2787 | 2788 | satori@0.11.3: 2789 | dependencies: 2790 | '@shuding/opentype.js': 1.4.0-beta.0 2791 | css-background-parser: 0.1.0 2792 | css-box-shadow: 1.0.0-3 2793 | css-gradient-parser: 0.0.16 2794 | css-to-react-native: 3.2.0 2795 | emoji-regex: 10.4.0 2796 | escape-html: 1.0.3 2797 | linebreak: 1.1.0 2798 | parse-css-color: 0.2.1 2799 | postcss-value-parser: 4.2.0 2800 | yoga-wasm-web: 0.3.3 2801 | 2802 | semver@7.6.3: {} 2803 | 2804 | set-cookie-parser@2.7.1: {} 2805 | 2806 | shebang-command@2.0.0: 2807 | dependencies: 2808 | shebang-regex: 3.0.0 2809 | 2810 | shebang-regex@3.0.0: {} 2811 | 2812 | siginfo@2.0.0: {} 2813 | 2814 | sirv@3.0.0: 2815 | dependencies: 2816 | '@polka/url': 1.0.0-next.28 2817 | mrmime: 2.0.0 2818 | totalist: 3.0.1 2819 | 2820 | slick@1.12.2: {} 2821 | 2822 | source-map-js@1.2.1: {} 2823 | 2824 | stackback@0.0.2: {} 2825 | 2826 | std-env@3.8.0: {} 2827 | 2828 | string.prototype.codepointat@0.2.1: {} 2829 | 2830 | strip-json-comments@3.1.1: {} 2831 | 2832 | supports-color@7.2.0: 2833 | dependencies: 2834 | has-flag: 4.0.0 2835 | 2836 | svelte-check@4.0.6(svelte@5.1.13)(typescript@5.6.3): 2837 | dependencies: 2838 | '@jridgewell/trace-mapping': 0.3.25 2839 | chokidar: 4.0.1 2840 | fdir: 6.4.2 2841 | picocolors: 1.1.1 2842 | sade: 1.8.1 2843 | svelte: 5.1.13 2844 | typescript: 5.6.3 2845 | transitivePeerDependencies: 2846 | - picomatch 2847 | 2848 | svelte-eslint-parser@0.43.0(svelte@5.1.13): 2849 | dependencies: 2850 | eslint-scope: 7.2.2 2851 | eslint-visitor-keys: 3.4.3 2852 | espree: 9.6.1 2853 | postcss: 8.4.47 2854 | postcss-scss: 4.0.9(postcss@8.4.47) 2855 | optionalDependencies: 2856 | svelte: 5.1.13 2857 | 2858 | svelte2tsx@0.7.23(svelte@5.1.13)(typescript@5.6.3): 2859 | dependencies: 2860 | dedent-js: 1.0.1 2861 | pascal-case: 3.1.2 2862 | svelte: 5.1.13 2863 | typescript: 5.6.3 2864 | 2865 | svelte@5.1.13: 2866 | dependencies: 2867 | '@ampproject/remapping': 2.3.0 2868 | '@jridgewell/sourcemap-codec': 1.5.0 2869 | '@types/estree': 1.0.6 2870 | acorn: 8.14.0 2871 | acorn-typescript: 1.4.13(acorn@8.14.0) 2872 | aria-query: 5.3.2 2873 | axobject-query: 4.1.0 2874 | esm-env: 1.1.4 2875 | esrap: 1.2.2 2876 | is-reference: 3.0.2 2877 | locate-character: 3.0.0 2878 | magic-string: 0.30.12 2879 | zimmerframe: 1.1.2 2880 | 2881 | text-table@0.2.0: {} 2882 | 2883 | tiny-glob@0.2.9: 2884 | dependencies: 2885 | globalyzer: 0.1.0 2886 | globrex: 0.1.2 2887 | 2888 | tiny-inflate@1.0.3: {} 2889 | 2890 | tinybench@2.9.0: {} 2891 | 2892 | tinyexec@0.3.1: {} 2893 | 2894 | tinypool@1.0.1: {} 2895 | 2896 | tinyrainbow@1.2.0: {} 2897 | 2898 | tinyspy@3.0.2: {} 2899 | 2900 | to-regex-range@5.0.1: 2901 | dependencies: 2902 | is-number: 7.0.0 2903 | 2904 | totalist@3.0.1: {} 2905 | 2906 | ts-api-utils@1.4.0(typescript@5.6.3): 2907 | dependencies: 2908 | typescript: 5.6.3 2909 | 2910 | tslib@2.8.1: {} 2911 | 2912 | type-check@0.4.0: 2913 | dependencies: 2914 | prelude-ls: 1.2.1 2915 | 2916 | typescript-eslint@8.13.0(eslint@9.14.0)(typescript@5.6.3): 2917 | dependencies: 2918 | '@typescript-eslint/eslint-plugin': 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3) 2919 | '@typescript-eslint/parser': 8.13.0(eslint@9.14.0)(typescript@5.6.3) 2920 | '@typescript-eslint/utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) 2921 | optionalDependencies: 2922 | typescript: 5.6.3 2923 | transitivePeerDependencies: 2924 | - eslint 2925 | - supports-color 2926 | 2927 | typescript@5.6.3: {} 2928 | 2929 | ultrahtml@1.5.3: {} 2930 | 2931 | undici-types@6.19.8: 2932 | optional: true 2933 | 2934 | undici@6.20.1: {} 2935 | 2936 | unicode-trie@2.0.0: 2937 | dependencies: 2938 | pako: 0.2.9 2939 | tiny-inflate: 1.0.3 2940 | 2941 | uri-js@4.4.1: 2942 | dependencies: 2943 | punycode: 2.3.1 2944 | 2945 | util-deprecate@1.0.2: {} 2946 | 2947 | valid-data-url@3.0.1: {} 2948 | 2949 | vite-node@2.1.4(@types/node@22.9.0): 2950 | dependencies: 2951 | cac: 6.7.14 2952 | debug: 4.3.7 2953 | pathe: 1.1.2 2954 | vite: 5.4.10(@types/node@22.9.0) 2955 | transitivePeerDependencies: 2956 | - '@types/node' 2957 | - less 2958 | - lightningcss 2959 | - sass 2960 | - sass-embedded 2961 | - stylus 2962 | - sugarss 2963 | - supports-color 2964 | - terser 2965 | 2966 | vite@5.4.10(@types/node@22.9.0): 2967 | dependencies: 2968 | esbuild: 0.21.5 2969 | postcss: 8.4.47 2970 | rollup: 4.24.4 2971 | optionalDependencies: 2972 | '@types/node': 22.9.0 2973 | fsevents: 2.3.3 2974 | 2975 | vitefu@1.0.3(vite@5.4.10(@types/node@22.9.0)): 2976 | optionalDependencies: 2977 | vite: 5.4.10(@types/node@22.9.0) 2978 | 2979 | vitest@2.1.4(@types/node@22.9.0): 2980 | dependencies: 2981 | '@vitest/expect': 2.1.4 2982 | '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.9.0)) 2983 | '@vitest/pretty-format': 2.1.4 2984 | '@vitest/runner': 2.1.4 2985 | '@vitest/snapshot': 2.1.4 2986 | '@vitest/spy': 2.1.4 2987 | '@vitest/utils': 2.1.4 2988 | chai: 5.1.2 2989 | debug: 4.3.7 2990 | expect-type: 1.1.0 2991 | magic-string: 0.30.12 2992 | pathe: 1.1.2 2993 | std-env: 3.8.0 2994 | tinybench: 2.9.0 2995 | tinyexec: 0.3.1 2996 | tinypool: 1.0.1 2997 | tinyrainbow: 1.2.0 2998 | vite: 5.4.10(@types/node@22.9.0) 2999 | vite-node: 2.1.4(@types/node@22.9.0) 3000 | why-is-node-running: 2.3.0 3001 | optionalDependencies: 3002 | '@types/node': 22.9.0 3003 | transitivePeerDependencies: 3004 | - less 3005 | - lightningcss 3006 | - msw 3007 | - sass 3008 | - sass-embedded 3009 | - stylus 3010 | - sugarss 3011 | - supports-color 3012 | - terser 3013 | 3014 | web-resource-inliner@7.0.0: 3015 | dependencies: 3016 | ansi-colors: 4.1.3 3017 | escape-goat: 3.0.0 3018 | htmlparser2: 5.0.1 3019 | mime: 2.6.0 3020 | valid-data-url: 3.0.1 3021 | 3022 | whatwg-encoding@3.1.1: 3023 | dependencies: 3024 | iconv-lite: 0.6.3 3025 | 3026 | whatwg-mimetype@4.0.0: {} 3027 | 3028 | which@2.0.2: 3029 | dependencies: 3030 | isexe: 2.0.0 3031 | 3032 | why-is-node-running@2.3.0: 3033 | dependencies: 3034 | siginfo: 2.0.0 3035 | stackback: 0.0.2 3036 | 3037 | word-wrap@1.2.5: {} 3038 | 3039 | yaml@1.10.2: {} 3040 | 3041 | yocto-queue@0.1.0: {} 3042 | 3043 | yoga-wasm-web@0.3.3: {} 3044 | 3045 | zimmerframe@1.1.2: {} 3046 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | // See https://kit.svelte.dev/docs/types#app 4 | // for information about these interfaces 5 | // and what to do when importing types 6 | declare namespace App { 7 | // interface Error {} 8 | // interface Locals {} 9 | // interface PageData {} 10 | // interface Platform {} 11 | } 12 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %sveltekit.head% 7 | 8 | 9 |
%sveltekit.body%
10 | 11 | 12 | -------------------------------------------------------------------------------- /src/demo.spec.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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /src/lib/font-handling/index.ts: -------------------------------------------------------------------------------- 1 | function isValidUrl(location: string): boolean { 2 | try { 3 | new URL(location); 4 | return true; 5 | } catch { 6 | return false; 7 | } 8 | } 9 | // get local font and render as an array buffer 10 | export const get_font_as_buffer = async (location: string) => { 11 | // check to make sure that we have a full URL 12 | if (!isValidUrl(location)) { 13 | console.error( 14 | `Font locations need to be specified with a full URL to work`, 15 | ); 16 | throw new Error(`Invalid URL: ${location}`); 17 | } 18 | 19 | // the renderer 20 | const font = await (await fetch(location)).blob(); 21 | const buf = await font.arrayBuffer(); 22 | return buf; 23 | }; 24 | -------------------------------------------------------------------------------- /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | // component to image pipeline 2 | import { nodes_render } from './processing/nodes_render.js'; 3 | import { svg_render } from './processing/svg_render.js'; 4 | import { png_render } from './processing/png_render.js'; 5 | 6 | export const image_from_component = async ( 7 | component: any, 8 | options: RenderOptions 9 | ): Promise => { 10 | try { 11 | // the major steps 12 | const nodes = await nodes_render(component, options.props, options.debug); 13 | const svg = await svg_render(nodes, options); 14 | const png = await png_render(svg, options, options.debug ?? false); 15 | 16 | return png; 17 | } catch (error) { 18 | console.error(error); 19 | } 20 | 21 | return undefined; 22 | }; 23 | 24 | export type RenderOptions = { 25 | width: number; 26 | height: number; 27 | props?: { 28 | [key: string]: any; 29 | }; 30 | fonts: FontOptions[]; 31 | debug?: boolean; 32 | }; 33 | -------------------------------------------------------------------------------- /src/lib/processing/nodes_render.ts: -------------------------------------------------------------------------------- 1 | // Take a svelte component, render it down to html, inline the styles 2 | // then return a set of satori ready nodes 3 | import juice from 'juice'; 4 | import { html as to_satori_nodes } from 'satori-html'; 5 | import { render } from 'svelte/server'; 6 | 7 | export const nodes_render = async ( 8 | Component: any, 9 | props?: { 10 | [key: string]: any; 11 | }, 12 | debug?: boolean 13 | ) => { 14 | // render the body and the head 15 | const { head, body } = render(Component, { props }); 16 | 17 | if (debug) { 18 | console.log('CSS:', head); 19 | console.log('HTML:', body); 20 | } 21 | 22 | if (!head) { 23 | throw new Error( 24 | 'CSS not being returned from the Svelte component. Please add to the top of your image component.' 25 | ); 26 | } 27 | 28 | if (!body) { 29 | throw new Error('No HTML returned from component.'); 30 | } 31 | 32 | const inline_html: string = juice(head + body, {}); 33 | 34 | if (debug) { 35 | console.log('INLINED HTML:', inline_html); 36 | } 37 | 38 | if (!inline_html) { 39 | throw new Error('Trouble inlining the CSS.'); 40 | } 41 | 42 | // render satori friendly HTML and return it 43 | const satori_nodes = to_satori_nodes(inline_html); 44 | 45 | if (debug) { 46 | console.log('SATORI NODES:', satori_nodes); 47 | } 48 | 49 | if (!satori_nodes) { 50 | throw new Error('Trouble converting HTML to Satori nodes'); 51 | } 52 | 53 | return satori_nodes; 54 | }; 55 | -------------------------------------------------------------------------------- /src/lib/processing/png_render.ts: -------------------------------------------------------------------------------- 1 | // Take SVG and render it into a PNG 2 | import { Resvg } from '@resvg/resvg-js'; 3 | 4 | export const png_render = async (svg: string, options: ResvgOptions, debug: boolean) => { 5 | try { 6 | const resvg = new Resvg(svg, { 7 | fitTo: { 8 | mode: 'width', 9 | value: options.width 10 | } 11 | }); 12 | 13 | const pngData = resvg.render(); 14 | const pngBuffer = pngData.asPng(); 15 | 16 | return pngBuffer; 17 | } catch (error) { 18 | if (debug) { 19 | console.error('An error happened in the PNG_RENDER function'); 20 | } 21 | // gods please forgive me for this, I know I have sinned 22 | throw error; 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /src/lib/processing/svg_render.ts: -------------------------------------------------------------------------------- 1 | // Take satori friendly HTML and render it to an SVG 2 | import type { RenderOptions } from '$lib/index.js'; 3 | import satori from 'satori'; 4 | import { get_font_as_buffer } from '../font-handling/index.js'; 5 | 6 | export const svg_render = async (nodes: VNode, options: RenderOptions) => { 7 | // build options object for satori 8 | let satori_options: SatoriOptions = { 9 | width: options.width, 10 | height: options.height, 11 | fonts: [] 12 | }; 13 | 14 | // render each font into an array buffer 15 | if (options.fonts.length > 0) { 16 | let rendered_fonts: FontOptions[] = []; 17 | for (const font of options.fonts) { 18 | if (!font.url) console.error(); 19 | rendered_fonts.push({ 20 | name: font.name, 21 | data: await get_font_as_buffer(font.url!), 22 | weight: font.weight, 23 | style: font.style 24 | }); 25 | } 26 | 27 | if (rendered_fonts.length !== options.fonts.length) { 28 | throw new Error('There was a problem rendering a font.'); 29 | } 30 | 31 | satori_options = { 32 | width: options.width, 33 | height: options.height, 34 | fonts: rendered_fonts 35 | }; 36 | } 37 | 38 | if (options.debug) { 39 | console.log('NUMBER OF FONT FILES RENDERED:', satori_options.fonts.length); 40 | console.log('WIDTH:', satori_options.width); 41 | console.log('HEIGHT:', satori_options.height); 42 | } 43 | 44 | // do the rendering 45 | const svg = await satori(nodes, satori_options); 46 | 47 | if (options.debug && svg) { 48 | // something to do a basic check to see if the SVG is valid 49 | console.log('An SVG was rendered successfully.'); 50 | } 51 | 52 | if (!svg) { 53 | throw new Error('There was a problem rendering the SVG.'); 54 | } 55 | 56 | return svg; 57 | }; 58 | -------------------------------------------------------------------------------- /src/lib/types/types.d.ts: -------------------------------------------------------------------------------- 1 | type VNode = { 2 | type: string 3 | props: { 4 | style?: Record 5 | children?: string | VNode | VNode[] 6 | [prop: string]: any 7 | } 8 | } 9 | 10 | type ResvgOptions = { 11 | width: number 12 | } 13 | 14 | type SatoriOptions = RenderOptions & {} 15 | 16 | 17 | type Font = { 18 | name: string 19 | url: string 20 | weight: number 21 | style: string 22 | } 23 | 24 | declare type Weight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 25 | declare type Style = 'normal' | 'italic' 26 | interface FontOptions { 27 | data?: Buffer | ArrayBuffer 28 | name: string 29 | weight?: Weight 30 | style?: Style 31 | url?: string 32 | } 33 | 34 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 |
8 | testing the thing 9 |

10 | open in new windows: /image?text={value}&second={second} 11 |

12 |
13 |
14 | 15 | 16 |
17 | 18 |
19 | 20 |

svelte-component-to-image

21 |

Visit https://github.com/StephenGunn/svelte-component-to-image for instructions.

22 | -------------------------------------------------------------------------------- /src/routes/image/+server.ts: -------------------------------------------------------------------------------- 1 | import { error } from '@sveltejs/kit'; 2 | import type { RequestHandler } from './$types'; 3 | 4 | // import my test stuff 5 | import { image_from_component, type RenderOptions } from '$lib/index.js'; 6 | 7 | import HelloWorld from './HelloWorld.svelte'; 8 | 9 | export const GET: RequestHandler = (async ({ url }) => { 10 | try { 11 | const options: RenderOptions = { 12 | width: 1200, 13 | height: 600, 14 | props: { 15 | text: url.searchParams.get('text') ?? 'text not found', 16 | second: url.searchParams.get('second') ?? 'text not found' 17 | }, 18 | fonts: [ 19 | { 20 | name: 'Jost', 21 | url: `${url.origin}/jost.woff`, 22 | weight: 400, 23 | style: 'normal' 24 | } 25 | ], 26 | debug: true 27 | }; 28 | const image = await image_from_component(HelloWorld, options); 29 | const response = new Response(image); 30 | response.headers.append('content-type', 'image/png'); 31 | return response; 32 | } catch (e) { 33 | console.error(e); 34 | error(500, 'Error'); 35 | } 36 | }) satisfies RequestHandler; 37 | -------------------------------------------------------------------------------- /src/routes/image/HelloWorld.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 12 |
13 |

14 | {text} world! 15 |

16 |
17 | {second} 18 |
19 |
20 | 21 | 48 | -------------------------------------------------------------------------------- /static/TYPEWR__.TTF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StephenGunn/svelte-component-to-image/b60953bc8cd5edbbdd04bc93369db476696755a8/static/TYPEWR__.TTF -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StephenGunn/svelte-component-to-image/b60953bc8cd5edbbdd04bc93369db476696755a8/static/favicon.ico -------------------------------------------------------------------------------- /static/jost.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StephenGunn/svelte-component-to-image/b60953bc8cd5edbbdd04bc93369db476696755a8/static/jost.woff -------------------------------------------------------------------------------- /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 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | adapter: adapter() 12 | } 13 | }; 14 | 15 | export default config; 16 | -------------------------------------------------------------------------------- /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 | expect(await page.textContent('h1')).toBe('Welcome to SvelteKit'); 6 | }); 7 | -------------------------------------------------------------------------------- /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 | "moduleResolution": "bundler" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | 3 | /** @type {import('vite').UserConfig} */ 4 | const config = { 5 | plugins: [sveltekit()], 6 | test: { 7 | include: ['src/**/*.{test,spec}.{js,ts}'] 8 | } 9 | }; 10 | 11 | export default config; 12 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | include: ['src/**/*.{test,spec}.{js,ts}'] 6 | } 7 | }); 8 | --------------------------------------------------------------------------------