├── pnpm-workspace.yaml ├── packages ├── svelte │ ├── .npmrc │ ├── src │ │ ├── lib │ │ │ ├── index.js │ │ │ ├── components │ │ │ │ ├── Target │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Target.svelte │ │ │ │ ├── Timeline │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Timeline.svelte │ │ │ │ └── Animation │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Animation.svelte │ │ │ └── utils │ │ │ │ └── context.ts │ │ ├── app.d.ts │ │ ├── app.html │ │ └── routes │ │ │ ├── _Paths.svelte │ │ │ └── +page.svelte │ ├── static │ │ └── favicon.png │ ├── .gitignore │ ├── .eslintignore │ ├── .prettierignore │ ├── tests │ │ └── test.ts │ ├── .prettierrc │ ├── vite.config.ts │ ├── playwright.config.ts │ ├── tsconfig.json │ ├── .eslintrc.cjs │ ├── svelte.config.js │ ├── package.json │ └── README.md ├── core │ ├── src │ │ ├── core │ │ │ ├── utils │ │ │ │ ├── tick.ts │ │ │ │ ├── object.ts │ │ │ │ ├── path.ts │ │ │ │ ├── throttle.ts │ │ │ │ ├── transform.ts │ │ │ │ ├── keyframes.ts │ │ │ │ ├── is.ts │ │ │ │ └── units.ts │ │ │ ├── tween │ │ │ │ └── controller.ts │ │ │ ├── types.ts │ │ │ ├── timeline.ts │ │ │ ├── easing.ts │ │ │ ├── tween.ts │ │ │ └── motionPath.ts │ │ └── index.ts │ ├── tsconfig.json │ ├── tsup.config.js │ └── package.json └── README.md ├── .prettierrc ├── .gitignore ├── package.json ├── tsconfig.json ├── main.ts └── pnpm-lock.yaml /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "packages/**" 3 | -------------------------------------------------------------------------------- /packages/svelte/.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | resolution-mode=highest 3 | -------------------------------------------------------------------------------- /packages/svelte/src/lib/index.js: -------------------------------------------------------------------------------- 1 | // Reexport your entry components here 2 | -------------------------------------------------------------------------------- /packages/svelte/src/lib/components/Target/index.ts: -------------------------------------------------------------------------------- 1 | export { default as default } from './Target.svelte' -------------------------------------------------------------------------------- /packages/svelte/src/lib/components/Timeline/index.ts: -------------------------------------------------------------------------------- 1 | export { default as default } from './Timeline.svelte'; 2 | -------------------------------------------------------------------------------- /packages/svelte/src/lib/components/Animation/index.ts: -------------------------------------------------------------------------------- 1 | export { default as default } from './Animation.svelte'; 2 | -------------------------------------------------------------------------------- /packages/svelte/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snuffyDev/nanomate/HEAD/packages/svelte/static/favicon.png -------------------------------------------------------------------------------- /packages/core/src/core/utils/tick.ts: -------------------------------------------------------------------------------- 1 | export const tick = () => 2 | new Promise((resolve) => requestAnimationFrame(resolve)); 3 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": false, 3 | "semi": true, 4 | "trailingComma": "all", 5 | "useTabs": true, 6 | "printWidth": 80 7 | } 8 | -------------------------------------------------------------------------------- /packages/core/src/core/utils/object.ts: -------------------------------------------------------------------------------- 1 | export const keysWithType = (obj: T) => { 2 | return Object.keys(obj) as Exclude[]; 3 | }; 4 | -------------------------------------------------------------------------------- /packages/svelte/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /dist 5 | /.svelte-kit 6 | /package 7 | .env 8 | .env.* 9 | !.env.example 10 | vite.config.js.timestamp-* 11 | vite.config.ts.timestamp-* 12 | .vercel 13 | -------------------------------------------------------------------------------- /packages/core/src/core/utils/path.ts: -------------------------------------------------------------------------------- 1 | export const pathStringToSVGPath = (pathString: string) => { 2 | const svg = document.createElementNS("http://www.w3.org/2000/svg", "path"); 3 | 4 | svg.setAttribute("d", pathString); 5 | return svg; 6 | }; 7 | -------------------------------------------------------------------------------- /packages/svelte/.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 | -------------------------------------------------------------------------------- /packages/svelte/.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /packages/svelte/tests/test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from '@playwright/test'; 2 | 3 | test('index page has expected h1', async ({ page }) => { 4 | await page.goto('/'); 5 | await expect(page.getByRole('heading', { name: 'Welcome to SvelteKit' })).toBeVisible(); 6 | }); 7 | -------------------------------------------------------------------------------- /packages/svelte/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 100, 6 | "plugins": ["prettier-plugin-svelte"], 7 | "pluginSearchDirs": ["."], 8 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 9 | } 10 | -------------------------------------------------------------------------------- /packages/svelte/src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface Platform {} 9 | } 10 | } 11 | 12 | export {}; 13 | -------------------------------------------------------------------------------- /packages/svelte/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vite'; 3 | 4 | export default defineConfig({ 5 | server: { 6 | fs: { 7 | strict: false, 8 | allow: ['.', './../**/*.ts'] 9 | }, 10 | watch: {} 11 | }, 12 | plugins: [sveltekit()] 13 | }); 14 | -------------------------------------------------------------------------------- /packages/svelte/playwright.config.ts: -------------------------------------------------------------------------------- 1 | import type { PlaywrightTestConfig } from '@playwright/test'; 2 | 3 | const config: PlaywrightTestConfig = { 4 | webServer: { 5 | command: 'npm run build && npm run preview', 6 | port: 4173 7 | }, 8 | testDir: 'tests', 9 | testMatch: /(.+\.)?(test|spec)\.[jt]s/ 10 | }; 11 | 12 | export default config; 13 | -------------------------------------------------------------------------------- /packages/core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noEmitOnError": false, 4 | "lib": ["es2015", "dom", "ESNext"], 5 | "target": "ESNext", 6 | "module": "ESNext", 7 | "baseUrl": ".", 8 | "declaration": true, 9 | "strict": true, 10 | "rootDir": "src", 11 | "noEmitHelpers": true 12 | }, 13 | "include": ["./src/**/*.ts"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/core/src/core/utils/throttle.ts: -------------------------------------------------------------------------------- 1 | import { tick } from "./tick"; 2 | 3 | export const debounce = (callback: () => void) => { 4 | let animationFrameId: number | undefined; 5 | 6 | return async () => { 7 | if (animationFrameId) { 8 | cancelAnimationFrame(animationFrameId); 9 | } 10 | animationFrameId = await tick(); 11 | callback(); 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /packages/svelte/src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | .vercel 26 | packages/core/src/core/__.ts 27 | main.ts 28 | -------------------------------------------------------------------------------- /packages/svelte/src/lib/utils/context.ts: -------------------------------------------------------------------------------- 1 | import { getContext, hasContext, setContext } from 'svelte'; 2 | 3 | export const makeContext = (key?: object | symbol) => { 4 | const ctxKey = key ?? {}; 5 | 6 | return { 7 | get: () => { 8 | return getContext(ctxKey); 9 | }, 10 | set: (value: T) => { 11 | return setContext(ctxKey, value); 12 | }, 13 | has: () => { 14 | return hasContext(getContext(ctxKey)); 15 | }, 16 | key: ctxKey 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /packages/svelte/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "references": [ 4 | { 5 | "path": "../core/tsconfig.json" 6 | } 7 | ], 8 | "compilerOptions": { 9 | "allowJs": true, 10 | "checkJs": true, 11 | "lib": ["DOM", "DOM.Iterable"], 12 | "esModuleInterop": true, 13 | "forceConsistentCasingInFileNames": true, 14 | "resolveJsonModule": true, 15 | "skipLibCheck": true, 16 | "sourceMap": true, 17 | "strict": true, 18 | "moduleResolution": "NodeNext" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/core/src/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | tween, 3 | BaseTweenOptions, 4 | CompositeOperation, 5 | Tween, 6 | TweenOptions, 7 | } from "./core/tween"; 8 | export { type Timeline, type TimelineOptions, timeline } from "./core/timeline"; 9 | export type { 10 | ArrayBasedKeyframeWithTransform, 11 | Axis, 12 | BaseTransform, 13 | CSSTransform, 14 | CSSValue, 15 | KeyframeConfig, 16 | KeyframeWithTransform, 17 | } from "./core/types"; 18 | export type { EasingFactory, EasingFunction } from "./core/easing"; 19 | export * from "./core/easing"; 20 | -------------------------------------------------------------------------------- /packages/core/tsup.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig({ 4 | entryPoints: ["src/index.ts"], 5 | format: ["esm"], 6 | dts: true, 7 | minify: true, 8 | splitting: true, 9 | treeshake: true, 10 | minifyIdentifiers: true, 11 | minifySyntax: true, 12 | minifyWhitespace: true, 13 | metafile: true, 14 | platform: "browser", 15 | cjsInterop: false, 16 | shims: false, 17 | outDir: "dist", 18 | target: "es2021", 19 | bundle: true, 20 | skipNodeModulesBundle: true, 21 | clean: true, 22 | }); 23 | -------------------------------------------------------------------------------- /packages/README.md: -------------------------------------------------------------------------------- 1 | # nanomate 2 | 3 | A simple, lightweight, and easy to use animation library based on the Web Animations API. 4 | 5 | ## Features 6 | 7 | - Lightweight 8 | - Easy to use 9 | - Simple API 10 | - Supports all modern browsers 11 | - Built-in Motion Path support (doesn't use CSS' Motion Path module) 12 | - Supports both Keyframe syntaxes (array and object) 13 | - Shorthands for `translate` (`x` and `y`) 14 | - And more! 15 | 16 | ## Installation 17 | 18 | You can install nanomate by using npm, yarn, or pnpm. 19 | 20 | ```bash 21 | npm install @nanomate/core 22 | ``` 23 | 24 | ```bash 25 | yarn add @nanomate/core 26 | ``` 27 | 28 | ```bash 29 | pnpm add @nanomate/core 30 | ``` 31 | -------------------------------------------------------------------------------- /packages/svelte/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | 'eslint:recommended', 5 | 'plugin:@typescript-eslint/recommended', 6 | 'plugin:svelte/recommended', 7 | 'prettier' 8 | ], 9 | parser: '@typescript-eslint/parser', 10 | plugins: ['@typescript-eslint'], 11 | parserOptions: { 12 | sourceType: 'module', 13 | ecmaVersion: 2020, 14 | extraFileExtensions: ['.svelte'] 15 | }, 16 | env: { 17 | browser: true, 18 | es2017: true, 19 | node: true 20 | }, 21 | overrides: [ 22 | { 23 | files: ['*.svelte'], 24 | parser: 'svelte-eslint-parser', 25 | parserOptions: { 26 | parser: '@typescript-eslint/parser' 27 | } 28 | } 29 | ] 30 | }; 31 | -------------------------------------------------------------------------------- /packages/svelte/svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto'; 2 | import { vitePreprocess } from '@sveltejs/kit/vite'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter. 13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 14 | adapter: adapter() 15 | } 16 | }; 17 | 18 | export default config; 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nanomate", 3 | "version": "1.0.0", 4 | "description": ":zap: A tiny, fast, and modern web animation library.", 5 | "main": "./src/index.ts", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "nanomate", 11 | "animation", 12 | "core", 13 | "web animation", 14 | "animation library", 15 | "waapi", 16 | "web animation api", 17 | "motionpath", 18 | "motion path", 19 | "animate" 20 | ], 21 | "author": "snuffyDev ", 22 | "license": "ISC", 23 | "devDependencies": { 24 | "nanobundle": "^1.6.0", 25 | "typescript": "^4.9.5" 26 | }, 27 | "dependencies": { 28 | "prettier": "^2.8.8" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /packages/core/src/core/tween/controller.ts: -------------------------------------------------------------------------------- 1 | export const createPlaybackController = (animation: Animation) => { 2 | return { 3 | play: () => { 4 | animation.play(); 5 | return new Promise((resolve) => { 6 | animation.finished.then(resolve).catch(() => { 7 | animation.commitStyles(); 8 | }); 9 | }); 10 | }, 11 | pause: () => { 12 | animation.pause(); 13 | }, 14 | cancel: () => { 15 | animation.cancel(); 16 | }, 17 | finish: () => { 18 | animation.finish(); 19 | }, 20 | finished: async () => { 21 | try { 22 | await animation.finished; 23 | } finally { 24 | animation.commitStyles(); 25 | } 26 | }, 27 | } as const; 28 | }; 29 | 30 | export type PlaybackController = ReturnType; 31 | -------------------------------------------------------------------------------- /packages/svelte/src/lib/components/Target/Target.svelte: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /packages/svelte/src/routes/_Paths.svelte: -------------------------------------------------------------------------------- 1 | 17 | 18 |
19 | 20 |
21 | 22 | 40 | -------------------------------------------------------------------------------- /packages/core/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nanomate/core", 3 | "version": "0.0.1", 4 | "description": "Animation core for Nanomate", 5 | "author": "snuffyDev ", 6 | "license": "MIT", 7 | "keywords": [ 8 | "nanomate", 9 | "animation", 10 | "core", 11 | "web animation", 12 | "animation library", 13 | "waapi", 14 | "web animation api", 15 | "motionpath", 16 | "motion path", 17 | "animate" 18 | ], 19 | "publishConfig": { 20 | "access": "public" 21 | }, 22 | "engines": { 23 | "node": ">=16.0.0" 24 | }, 25 | "main": "dist/index.js", 26 | "types": "dist/index.d.ts", 27 | "files": [ 28 | "dist" 29 | ], 30 | "type": "module", 31 | "exports": { 32 | ".": { 33 | "import": "./dist/index.js", 34 | "types": "./dist/index.d.ts" 35 | } 36 | }, 37 | "scripts": { 38 | "build": "tsup", 39 | "lint": "eslint src --ext .ts", 40 | "lint:fix": "eslint src --ext .ts --fix", 41 | "format": "prettier --write src/**/*.{ts,js}", 42 | "format:check": "prettier --check src/**/*.{ts,js}" 43 | }, 44 | "devDependencies": { 45 | "tsup": "^7.2.0" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /packages/core/src/core/utils/transform.ts: -------------------------------------------------------------------------------- 1 | import { type EasingFunction } from "../easing"; 2 | import { convertUnits } from "./units"; 3 | 4 | export const TRANSFORM_KEYS = [ 5 | "x", 6 | "y", 7 | "translate", 8 | "scale", 9 | "rotate", 10 | "skew", 11 | "translateX", 12 | "translateY", 13 | "translateZ", 14 | "translate3d", 15 | "scaleX", 16 | "scaleY", 17 | "scaleZ", 18 | "scale3d", 19 | "rotateX", 20 | "rotateY", 21 | "rotateZ", 22 | "rotate3d", 23 | "skewX", 24 | "skewY", 25 | "skewZ", 26 | "skew3d", 27 | ] as const; 28 | 29 | export const isTransform = ( 30 | value: unknown, 31 | ): value is NonNullable<(typeof TRANSFORM_KEYS)[number]> => 32 | TRANSFORM_KEYS.includes(value as never); 33 | 34 | type Transform = (typeof TRANSFORM_KEYS)[number]; 35 | 36 | export const buildTransform = ( 37 | key: Transform, 38 | value: string | number, 39 | easing?: EasingFunction, 40 | ) => { 41 | if (key === "x" || key === "y") { 42 | return `translate${key.toLocaleUpperCase()}(${value}) `; 43 | } else { 44 | return `${key}(${ 45 | easing ? convertUnits(easing(parseInt(value.toString())), "px") : value 46 | })`; 47 | } 48 | }; 49 | -------------------------------------------------------------------------------- /packages/svelte/src/lib/components/Animation/Animation.svelte: -------------------------------------------------------------------------------- 1 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /packages/core/src/core/utils/keyframes.ts: -------------------------------------------------------------------------------- 1 | import { type EasingFunction, linear } from "../easing"; 2 | import type { 3 | ArrayBasedKeyframeWithTransform, 4 | KeyframeWithTransform, 5 | } from "../types"; 6 | import { keysWithType } from "./object"; 7 | import { isTransform } from "./transform"; 8 | 9 | const denormalizeKeyframes = ( 10 | keyframes: ArrayBasedKeyframeWithTransform, 11 | easing: EasingFunction, 12 | ): KeyframeWithTransform[] => { 13 | const normalizedKeyframes: KeyframeWithTransform[] = []; 14 | const frameCount = Math.max( 15 | ...Object.values(keyframes).map((frames) => frames.length), 16 | ); 17 | 18 | const keyframeKeys = keysWithType(keyframes); 19 | 20 | for (let i = 0; i < frameCount; i++) { 21 | const frame = (normalizedKeyframes[i] = {} as KeyframeWithTransform); 22 | 23 | for (const key of keyframeKeys) { 24 | if (isTransform(key)) { 25 | frame[key] = keyframes[key]![i] as never; 26 | continue; 27 | } 28 | frame[key] = 29 | keyframes[key]![ 30 | keyframes[key].length * 31 | Math.min(1, Math.max(0, easing(i / keyframes[key].length))) 32 | ]; 33 | } 34 | } 35 | 36 | return normalizedKeyframes; 37 | }; 38 | 39 | export const normalizeKeyframes = ( 40 | keyframes: KeyframeWithTransform[] | ArrayBasedKeyframeWithTransform, 41 | easing: EasingFunction = linear, 42 | ): KeyframeWithTransform[] => { 43 | if (Array.isArray(keyframes)) { 44 | return keyframes; 45 | } else { 46 | return denormalizeKeyframes(keyframes, easing); 47 | } 48 | }; 49 | -------------------------------------------------------------------------------- /packages/core/src/core/types.ts: -------------------------------------------------------------------------------- 1 | export type KeyframeConfig = [ 2 | value: CSSValue, 3 | config: { duration?: number; easing?: string }, 4 | ]; 5 | 6 | export type Axis = "X" | "Y" | "Z"; 7 | export type BaseTransform = "scale" | "translate" | "rotate" | "skew"; 8 | export type CSSTransform = BaseTransform | `${BaseTransform}${Axis | "3d"}`; 9 | 10 | export type CSSValue = Exclude< 11 | KeyframeWithTransform[keyof KeyframeWithTransform], 12 | (...args: any[]) => void 13 | >; 14 | 15 | type CSSStyleDeclarationWithoutScaleAndLength = Exclude< 16 | Omit< 17 | { [Key in keyof CSSStyleDeclaration as string]: CSSStyleDeclaration[Key] }, 18 | "scale" | "length" 19 | >, 20 | Function 21 | >; 22 | 23 | type CSSStyleDeclarationRW = { 24 | -readonly [Key in keyof CSSStyleDeclarationWithoutScaleAndLength]: CSSStyleDeclarationWithoutScaleAndLength[Key]; 25 | }; 26 | 27 | export type KeyframeWithTransform = Exclude< 28 | NonNullable< 29 | { 30 | [Key in keyof CSSStyleDeclarationRW]?: 31 | | CSSStyleDeclarationRW[Key] 32 | | (CSSStyleDeclarationRW[Key] | number); 33 | } & { [Key in Exclude]?: string | null } & { 34 | [Key in Lowercase]?: Key; 35 | } & Pick & { 36 | scale?: number; 37 | } 38 | >, 39 | Function | undefined | null | ((...args: any[]) => void) 40 | >; 41 | 42 | export type ArrayBasedKeyframeWithTransform = PropertyIndexedKeyframes & { 43 | [Key in keyof KeyframeWithTransform]: KeyframeWithTransform[Key][]; 44 | }; 45 | -------------------------------------------------------------------------------- /packages/svelte/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nanomate/svelte", 3 | "version": "0.0.1", 4 | "scripts": { 5 | "dev": "vite dev", 6 | "build": "vite build && npm run package", 7 | "preview": "vite preview", 8 | "package": "svelte-kit sync && svelte-package && publint", 9 | "prepublishOnly": "npm run package", 10 | "test": "playwright test", 11 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 12 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 13 | "lint": "prettier --plugin-search-dir . --check . && eslint .", 14 | "format": "prettier --plugin-search-dir . --write ." 15 | }, 16 | "exports": { 17 | ".": { 18 | "types": "./dist/index.d.ts", 19 | "svelte": "./dist/index.js" 20 | } 21 | }, 22 | "files": [ 23 | "dist", 24 | "!dist/**/*.test.*", 25 | "!dist/**/*.spec.*" 26 | ], 27 | "peerDependencies": { 28 | "svelte": "^4.0.0" 29 | }, 30 | "devDependencies": { 31 | "@playwright/test": "^1.28.1", 32 | "@sveltejs/adapter-auto": "^2.0.0", 33 | "@sveltejs/kit": "^1.20.4", 34 | "@sveltejs/package": "^2.0.0", 35 | "@typescript-eslint/eslint-plugin": "^5.45.0", 36 | "@typescript-eslint/parser": "^5.45.0", 37 | "eslint": "^8.28.0", 38 | "eslint-config-prettier": "^8.5.0", 39 | "eslint-plugin-svelte": "^2.30.0", 40 | "prettier": "^2.8.0", 41 | "prettier-plugin-svelte": "^2.10.1", 42 | "publint": "^0.1.9", 43 | "svelte": "^4.0.5", 44 | "svelte-check": "^3.4.3", 45 | "tslib": "^2.4.1", 46 | "typescript": "^5.0.0", 47 | "vite": "^4.4.2" 48 | }, 49 | "svelte": "./dist/index.js", 50 | "types": "./dist/index.d.ts", 51 | "type": "module", 52 | "dependencies": { 53 | "@nanomate/core": "workspace:^" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /packages/core/src/core/utils/is.ts: -------------------------------------------------------------------------------- 1 | type TypeCheck = "number" | "null" | "undefined" | "object" | "string"; 2 | 3 | const ID_CHECKS: ReadonlyArray = [ 4 | "null", 5 | "number", 6 | "object", 7 | "string", 8 | "undefined", 9 | ] as const; 10 | 11 | const isString = (thing: unknown): thing is string => typeof thing === "string"; 12 | const isObject = (thing: unknown): thing is object => typeof thing === "object"; 13 | const isNumber = (thing: unknown): thing is number => typeof thing === "number"; 14 | const isUndefined = (thing: unknown): thing is undefined => thing === undefined; 15 | const isNull = (thing: unknown): thing is null => thing === null; 16 | 17 | const CHECKS: Record< 18 | TypeCheck, 19 | | typeof isString 20 | | typeof isUndefined 21 | | typeof isObject 22 | | typeof isNull 23 | | typeof isNumber 24 | > = { 25 | null: isNull, 26 | number: isNumber, 27 | object: isObject, 28 | string: isString, 29 | undefined: isUndefined, 30 | } as const; 31 | 32 | const _isIdCheck = (thing: unknown): thing is TypeCheck => 33 | typeof thing === "string" && ID_CHECKS.includes(thing as never); 34 | 35 | /** 36 | * Determine the type of the given 'thing'. 37 | * 38 | * Checks can be a type-guard function or a `typeof` string 39 | */ 40 | const is = ( 41 | thing: unknown, 42 | ...checks: (TypeCheck | ((thing: T) => boolean))[] 43 | ): thing is Identity => { 44 | let result = false; 45 | for (let idx = 0; idx < checks.length; idx++) { 46 | const check = checks[idx]; 47 | if (_isIdCheck(check)) { 48 | result = CHECKS[check](thing); 49 | } else { 50 | result = check(thing as never); 51 | } 52 | if (result === false) break; 53 | } 54 | return result; 55 | }; 56 | 57 | export { is, isNull, isNumber, isObject, isString, isUndefined }; 58 | -------------------------------------------------------------------------------- /packages/svelte/README.md: -------------------------------------------------------------------------------- 1 | # create-svelte 2 | 3 | Everything you need to build a Svelte library, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). 4 | 5 | Read more about creating a library [in the docs](https://kit.svelte.dev/docs/packaging). 6 | 7 | ## Creating a project 8 | 9 | If you're seeing this, you've probably already done this step. Congrats! 10 | 11 | ```bash 12 | # create a new project in the current directory 13 | npm create svelte@latest 14 | 15 | # create a new project in my-app 16 | npm create svelte@latest my-app 17 | ``` 18 | 19 | ## Developing 20 | 21 | Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: 22 | 23 | ```bash 24 | npm run dev 25 | 26 | # or start the server and open the app in a new browser tab 27 | npm run dev -- --open 28 | ``` 29 | 30 | Everything inside `src/lib` is part of your library, everything inside `src/routes` can be used as a showcase or preview app. 31 | 32 | ## Building 33 | 34 | To build your library: 35 | 36 | ```bash 37 | npm run package 38 | ``` 39 | 40 | To create a production version of your showcase app: 41 | 42 | ```bash 43 | npm run build 44 | ``` 45 | 46 | You can preview the production build with `npm run preview`. 47 | 48 | > To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. 49 | 50 | ## Publishing 51 | 52 | Go into the `package.json` and give your package the desired name through the `"name"` option. Also consider adding a `"license"` field and point it to a `LICENSE` file which you can create from a template (one popular option is the [MIT license](https://opensource.org/license/mit/)). 53 | 54 | To publish your library to [npm](https://www.npmjs.com): 55 | 56 | ```bash 57 | npm publish 58 | ``` 59 | -------------------------------------------------------------------------------- /packages/core/src/core/utils/units.ts: -------------------------------------------------------------------------------- 1 | const CSSUnitMap = { 2 | "%": "%", 3 | px: "px", 4 | em: "em", 5 | rem: "rem", 6 | vw: "vw", 7 | vh: "vh", 8 | vmin: "vmin", 9 | vmax: "vmax", 10 | pt: "pt", 11 | pc: "pc", 12 | in: "in", 13 | mm: "mm", 14 | cm: "cm", 15 | } as const; 16 | 17 | type CSSUnit = keyof typeof CSSUnitMap; 18 | export const parseCSSValue = (valueUnit: string) => { 19 | const value = parseFloat(valueUnit); 20 | if (isNaN(value)) { 21 | // throw new Error(`Invalid value: ${valueUnit}`); 22 | return undefined; 23 | } 24 | const unit = `${valueUnit}`.replace(value.toString(), "") as CSSUnit; 25 | return [value, unit] as const; 26 | }; 27 | function convertUnits(fromValue: string | number, toUnit: CSSUnit): number { 28 | if (typeof fromValue === "number") fromValue = fromValue.toString() + toUnit; 29 | const parseValue = (valueUnit: string): [number, CSSUnit] => { 30 | const value = parseFloat(valueUnit); 31 | if (isNaN(value)) { 32 | throw new Error(`Invalid value: ${valueUnit}`); 33 | } 34 | const unit = valueUnit.replace(value.toString(), "") as CSSUnit; 35 | return [value, unit]; 36 | }; 37 | 38 | const [from, fromUnit] = parseValue(fromValue); 39 | const to = CSSUnitMap[toUnit]; 40 | 41 | if (fromUnit === "%" && to === "px") { 42 | return (from / 100) * window.innerWidth; 43 | } 44 | 45 | if (fromUnit === "px" && to === "%") { 46 | return (from / window.innerWidth) * 100; 47 | } 48 | 49 | const conversionTable: { [key in Exclude]: number } = { 50 | // Absolute length units 51 | in: 96, 52 | cm: 37.8, 53 | mm: 3.78, 54 | pt: 1.33, 55 | pc: 16, 56 | 57 | // Relative length units 58 | em: parseFloat( 59 | getComputedStyle(document.documentElement).fontSize || "16px", 60 | ), 61 | rem: parseFloat( 62 | getComputedStyle(document.documentElement).fontSize || "16px", 63 | ), 64 | vw: window.innerWidth / 100, 65 | vh: window.innerHeight / 100, 66 | vmin: Math.min(window.innerWidth, window.innerHeight) / 100, 67 | vmax: Math.max(window.innerWidth, window.innerHeight) / 100, 68 | }; 69 | 70 | const fromPixels = from * conversionTable[fromUnit as never]; 71 | return fromPixels / conversionTable[to as never]; 72 | } 73 | 74 | export { convertUnits, CSSUnitMap }; 75 | -------------------------------------------------------------------------------- /packages/svelte/src/lib/components/Timeline/Timeline.svelte: -------------------------------------------------------------------------------- 1 | 32 | 33 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /packages/svelte/src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 48 | 49 | 50 | 55 | 56 | 67 | 68 | 92 | 93 | 94 | 95 | 116 | -------------------------------------------------------------------------------- /packages/core/src/core/timeline.ts: -------------------------------------------------------------------------------- 1 | import { MotionPathOptions } from "./motionPath"; 2 | import { tween, TweenOptions } from "./tween"; 3 | import { 4 | ArrayBasedKeyframeWithTransform, 5 | KeyframeWithTransform, 6 | } from "./types"; 7 | import { is } from "./utils/is"; 8 | import { normalizeKeyframes } from "./utils/keyframes"; 9 | export interface TimelineOptions { 10 | defaults?: TweenOptions & { 11 | motionPath?: { path: MotionPathOptions }; 12 | }; 13 | paused?: boolean; 14 | repeat?: number; 15 | } 16 | 17 | const microtask = (() => { 18 | const items: (() => void)[] = []; 19 | let frameId: number | undefined; 20 | 21 | return (callback: () => void) => { 22 | if (frameId) { 23 | cancelAnimationFrame(frameId); 24 | frameId = undefined; 25 | } 26 | items.push(callback); 27 | if (!frameId) { 28 | frameId = requestAnimationFrame(function loop() { 29 | while (items.length > 0) { 30 | const item = items.shift(); 31 | if (item) item(); 32 | } 33 | }); 34 | } 35 | }; 36 | })(); 37 | 38 | type Deferred = { 39 | resolve: (value: T | PromiseLike) => void; 40 | reject: (reason?: any) => void; 41 | promise: Promise; 42 | }; 43 | const deferred = (): Deferred => { 44 | let resolve: (value: T | PromiseLike) => void; 45 | let reject: (reason?: any) => void; 46 | const promise = new Promise((_resolve, _reject) => { 47 | resolve = _resolve; 48 | reject = _reject; 49 | }); 50 | 51 | return { resolve: resolve!, reject: reject!, promise }; 52 | }; 53 | 54 | const race = ( 55 | ...promises: Promise[] 56 | ): { cancel: () => void; promise: Promise } => { 57 | const { resolve, promise } = deferred(); 58 | return { 59 | promise: Promise.race([...promises, promise]), 60 | cancel: () => { 61 | resolve(undefined as never); 62 | }, 63 | }; 64 | }; 65 | 66 | class Timeline { 67 | private tweens: ReturnType[] = []; 68 | private state: "idle" | "running" | "paused" | "finished" = "idle"; 69 | private playbackPromise = deferred(); 70 | private currentTween: ReturnType | undefined; 71 | 72 | constructor(private defaultOptions: TimelineOptions) { 73 | if (typeof navigator !== "undefined") { 74 | visualViewport?.addEventListener("resize", () => { 75 | for (const tween of this.tweens) { 76 | microtask(() => { 77 | tween.onResize(); 78 | }); 79 | } 80 | }); 81 | } 82 | } 83 | 84 | private async playTweens() { 85 | const totalPlayCount = 86 | (is(this.defaultOptions.repeat, "number") && 87 | this.defaultOptions.repeat) || 88 | 1; 89 | 90 | let finishedPromise = Promise.resolve(); 91 | 92 | for (let playCount = 0; playCount < totalPlayCount; playCount++) { 93 | for (const tween of this.tweens) { 94 | if (this.state === "paused") await finishedPromise; 95 | this.currentTween = tween; 96 | finishedPromise = tween.finished(); 97 | tween.play(); 98 | await finishedPromise.catch((e) => { 99 | console.error(`Failed to play tween: ${e}`); 100 | }); 101 | tween.cancel(); 102 | } 103 | } 104 | } 105 | play() { 106 | if (this.currentTween && this.state === "paused") { 107 | this.state = "running"; 108 | this.currentTween.play(); 109 | } else { 110 | this.state = "running"; 111 | this.playTweens(); 112 | } 113 | } 114 | 115 | pause() { 116 | this.state = "paused"; 117 | this.currentTween?.pause(); 118 | } 119 | 120 | kill() { 121 | for (const tween of this.tweens) { 122 | tween.cancel(); 123 | } 124 | 125 | this.state = "finished"; 126 | } 127 | 128 | to( 129 | target: HTMLElement, 130 | keyframes: ArrayBasedKeyframeWithTransform, 131 | options: TweenOptions, 132 | ): Timeline; 133 | to( 134 | target: HTMLElement, 135 | keyframes: KeyframeWithTransform[], 136 | options: TweenOptions, 137 | ): Timeline; 138 | to(target: HTMLElement, keyframes: any, options: TweenOptions): Timeline { 139 | const { defaults = {} as NonNullable } = 140 | this.defaultOptions; 141 | const { motionPath = null, ...rest } = defaults; 142 | 143 | const _tween = tween( 144 | target, 145 | normalizeKeyframes(keyframes as KeyframeWithTransform[]), 146 | { 147 | ...rest, 148 | ...((!!motionPath || "path" in options) && { ...motionPath }), 149 | ...options, 150 | }, 151 | ); 152 | 153 | this.tweens.push(_tween); 154 | 155 | if (this.state === "idle" && !this.defaultOptions.paused) { 156 | this.play(); 157 | } 158 | 159 | return this; 160 | } 161 | } 162 | 163 | export type { Timeline }; 164 | 165 | export function timeline(defaultOptions: TimelineOptions): Timeline { 166 | return new Timeline(defaultOptions); 167 | } 168 | -------------------------------------------------------------------------------- /packages/core/src/core/easing.ts: -------------------------------------------------------------------------------- 1 | import { KeyframeWithTransform } from "./types"; 2 | import { parseCSSValue } from "./utils/units"; 3 | 4 | export type EasingFunction = (t: number) => number; 5 | export type EasingFactory = { 6 | frames: (keyframes: KeyframeWithTransform[]) => KeyframeWithTransform[]; 7 | calc: (value: number) => number; 8 | css: string; 9 | }; 10 | 11 | export const linear = (t: number) => t; 12 | 13 | function cubicBezierValue( 14 | p0: number, 15 | p1: number, 16 | p2: number, 17 | p3: number, 18 | value: number, 19 | ): number { 20 | const t = value; // Assuming the value ranges from 0 to 1 for the cubic bezier curve 21 | // Calculate the coefficients of the cubic bezier equation 22 | const cp0 = 3 * p0; 23 | const cp1 = 3 * p1; 24 | const cp2 = 3 * p2; 25 | 26 | // Precompute t2 and t3 for optimization 27 | const t2 = t * t; 28 | const t3 = t2 * t; 29 | 30 | // Calculate the curve value for the given t 31 | const curve = 32 | cp0 * (1 - t) * (1 - t) * (1 - t) + 33 | cp1 * (1 - t) * (1 - t) * t + 34 | cp2 * (1 - t) * t2 + 35 | p3 * t3; 36 | 37 | return curve; 38 | } 39 | 40 | export const cubicBezier = ( 41 | p0: number, 42 | p1: number, 43 | p2: number, 44 | p3: number, 45 | ): EasingFactory => ({ 46 | frames: (keyframes: KeyframeWithTransform[]) => { 47 | return keyframes.map((keyframe, index) => { 48 | const newKeyframe: KeyframeWithTransform = {}; 49 | 50 | const percentage = (index * (keyframes.length - 1)) / 100; 51 | newKeyframe["offset"] = Math.min(1, Math.max(0, percentage * 1.0)); 52 | 53 | for (const property in keyframe) { 54 | const value = keyframe[property]; 55 | 56 | if (typeof value === "string") { 57 | // Parse the string to find numeric values and replace them with the curve value 58 | const parsedValues = 59 | parseCSSValue(value)?.map((numOrStr) => { 60 | if (typeof numOrStr === "number") { 61 | return ( 62 | numOrStr + 63 | cubicBezierValue(p0, p1, p2, p3, percentage * numOrStr) - 64 | numOrStr 65 | ); 66 | } 67 | return numOrStr; 68 | }) || value; 69 | 70 | newKeyframe[property] = Array.isArray(parsedValues) 71 | ? parsedValues.join("") 72 | : parsedValues; 73 | } else if (typeof value === "number") { 74 | // Apply the curve to the numeric value 75 | newKeyframe[property] = 76 | value * cubicBezierValue(p0, p1, p2, p3, percentage); 77 | } else { 78 | // Non-numeric or non-interpolation properties are kept as they are 79 | newKeyframe[property] = value; 80 | } 81 | } 82 | 83 | return newKeyframe; 84 | }); 85 | }, 86 | calc: (value: number) => cubicBezierValue(p0, p1, p2, p3, value), 87 | css: `cubic-bezier(${p0},${p1},${p2},${p3})`, 88 | }); 89 | 90 | // Ease In 91 | export const easeIn = cubicBezier(0.42, 0, 1, 1); 92 | 93 | // Ease Out 94 | export const easeOut = cubicBezier(0, 0, 0.58, 1); 95 | 96 | // Ease In Out 97 | export const easeInOut = cubicBezier(0.42, 0, 0.58, 1); 98 | 99 | export const backInOut = cubicBezier(0.68, -0.55, 0.27, 1.55); 100 | export const backIn = cubicBezier(0.68, -0.55, 0.27, 1.55); 101 | export const backOut = cubicBezier(0.68, -0.55, 0.27, 1.55); 102 | 103 | export const bounceOut = cubicBezier(0.52, -1.71, 0.16, -0.31); 104 | export const bounceInOut = cubicBezier(0.22, 0.61, 0.36, 1); 105 | export const bounceIn = cubicBezier(0.22, 0.61, 0.36, 1); 106 | 107 | export const circInOut = cubicBezier(0.85, 0, 0.15, 1); 108 | export const circIn = cubicBezier(0.85, 0, 0.15, 1); 109 | export const circOut = cubicBezier(0.85, 0, 0.15, 1); 110 | 111 | export const cubicInOut = cubicBezier(0.645, 0.045, 0.355, 1); 112 | export const cubicIn = cubicBezier(0.645, 0.045, 0.355, 1); 113 | export const cubicOut = cubicBezier(0.645, 0.045, 0.355, 1); 114 | 115 | export const elasticInOut = cubicBezier(0.42, 0, 0.58, 1); 116 | export const elasticIn = cubicBezier(0.42, 0, 0.58, 1); 117 | export const elasticOut = cubicBezier(0.42, 0, 0.58, 1); 118 | 119 | export const expoInOut = cubicBezier(0.645, 0.045, 0.355, 1); 120 | export const expoIn = cubicBezier(0.645, 0.045, 0.355, 1); 121 | export const expoOut = cubicBezier(0.645, 0.045, 0.355, 1); 122 | 123 | export const quadInOut = cubicBezier(0.455, 0.03, 0.515, 0.955); 124 | export const quadIn = cubicBezier(0.455, 0.03, 0.515, 0.955); 125 | export const quadOut = cubicBezier(0.455, 0.03, 0.515, 0.955); 126 | 127 | export const quartInOut = cubicBezier(0.645, 0.045, 0.355, 1); 128 | export const quartIn = cubicBezier(0.645, 0.045, 0.355, 1); 129 | export const quartOut = cubicBezier(0.645, 0.045, 0.355, 1); 130 | 131 | export const quintInOut = cubicBezier(0.86, 0, 0.07, 1); 132 | export const quintIn = cubicBezier(0.86, 0, 0.07, 1); 133 | export const quintOut = cubicBezier(0.86, 0, 0.07, 1); 134 | 135 | export const sineInOut = cubicBezier(0.445, 0.05, 0.55, 0.95); 136 | export const sineIn = cubicBezier(0.445, 0.05, 0.55, 0.95); 137 | export const sineOut = cubicBezier(0.445, 0.05, 0.55, 0.95); 138 | 139 | // Elastic Easing 140 | export const easeInElastic = cubicBezier(0.42, 0, 1, 1); 141 | export const easeOutElastic = cubicBezier(0, 0, 0.58, 1); 142 | export const easeInOutElastic = cubicBezier(0.42, 0, 0.58, 1); 143 | 144 | // Bounce Easing 145 | export const easeInBounce = cubicBezier(0.68, -0.55, 0.27, 1.55); 146 | export const easeOutBounce = cubicBezier(0.22, 0.61, 0.36, 1); 147 | export const easeInOutBounce = cubicBezier(0.22, 0.61, 0.36, 1); 148 | -------------------------------------------------------------------------------- /packages/core/src/core/tween.ts: -------------------------------------------------------------------------------- 1 | import { type EasingFactory, type EasingFunction, linear } from "./easing"; 2 | import { MotionPath, MotionPathOptions } from "./motionPath"; 3 | import { 4 | PlaybackController, 5 | createPlaybackController, 6 | } from "./tween/controller"; 7 | import type { 8 | ArrayBasedKeyframeWithTransform, 9 | KeyframeWithTransform, 10 | } from "./types"; 11 | import { is } from "./utils/is"; 12 | import { normalizeKeyframes } from "./utils/keyframes"; 13 | import { debounce } from "./utils/throttle"; 14 | 15 | // @ts-expect-error idk what broke but smth did 16 | export interface BaseTweenOptions extends KeyframeEffectOptions { 17 | composite?: CompositeOperation; 18 | delay?: number; 19 | direction?: "normal" | "reverse" | "alternate" | "alternate-reverse"; 20 | duration: number; 21 | fill?: "none" | "forwards" | "backwards" | "both"; 22 | iterations?: number | "infinite"; 23 | playbackRate?: number; 24 | easing?: string | EasingFactory; 25 | } 26 | 27 | export type TweenOptions = BaseTweenOptions & MotionPathOptions; 28 | 29 | export type CompositeOperation = 30 | | "replace" 31 | | "add" 32 | | "accumulate" 33 | | "auto" 34 | | "none"; 35 | 36 | export type Tween = PlaybackController & { 37 | onResize: () => void; 38 | get config(): TweenOptions; 39 | }; 40 | 41 | /** 42 | * Helper function for getting the CSS easing function from an easing factory or from a string 43 | * 44 | * If the easing is a string, it's assumed to be a CSS easing function and is returned as-is. 45 | * @internal 46 | * @param easing Easing function or string 47 | * @returns CSS easing function (string) 48 | */ 49 | const getEasingFunctionName = (easing: string | EasingFactory): string => { 50 | if (is(easing, (thing) => typeof thing === "object")) { 51 | return easing.css; 52 | } 53 | return easing; 54 | }; 55 | 56 | const createKeyframeEffect = ( 57 | element: Element, 58 | keyframes: KeyframeWithTransform[], 59 | options: TweenOptions, 60 | ): KeyframeEffect => { 61 | const effect = new KeyframeEffect( 62 | element, 63 | keyframes as Keyframe[], 64 | options as KeyframeAnimationOptions, 65 | ); 66 | return effect; 67 | }; 68 | 69 | const getPathElementFromOptions = ( 70 | options: MotionPathOptions, 71 | ): SVGPathElement => { 72 | if ( 73 | "path" in options && 74 | is(options.path, (thing) => thing instanceof SVGPathElement) 75 | ) { 76 | return options.path as SVGPathElement; 77 | } 78 | try { 79 | const path = document.querySelector(options.path as string); 80 | if (!path) throw Error("No path found"); 81 | 82 | return path; 83 | } catch { 84 | const path = document.createElementNS("http://www.w3.org/2000/svg", "path"); 85 | path.setAttribute("d", options.path as string); 86 | return path; 87 | } 88 | }; 89 | 90 | const pathTween = ( 91 | element: Element, 92 | keyframes: KeyframeWithTransform[], 93 | options: MotionPathOptions & BaseTweenOptions, 94 | ): Tween => { 95 | // TODO: use this somehow 96 | let easing: EasingFunction | EasingFactory = 97 | typeof options.easing === "object" ? options.easing : linear; 98 | let invalidated = false; 99 | 100 | console.log(keyframes); 101 | 102 | if (options.easing) { 103 | const easingFactory = options.easing; 104 | if (typeof easingFactory === "object") { 105 | options.easing = easingFactory.css; 106 | easing = easingFactory.calc; 107 | } 108 | } 109 | 110 | const motionPath = new MotionPath(element as HTMLElement, options.path, { 111 | ...options, 112 | }); 113 | 114 | const buildKeyframes = () => { 115 | motionPath.anchor = options.anchor ? options.anchor : "auto"; 116 | motionPath.path = getPathElementFromOptions(options); 117 | 118 | return motionPath.build( 119 | typeof options.easing === "object" 120 | ? options.easing.frames(keyframes) 121 | : keyframes, 122 | easing as never, 123 | ); 124 | }; 125 | const kf = buildKeyframes(); 126 | console.log(kf); 127 | const effect = createKeyframeEffect(element, kf, { 128 | ...options, 129 | easing: options.easing ? getEasingFunctionName(options.easing) : "linear", 130 | }); 131 | 132 | const animation = new Animation(effect); 133 | 134 | const playbackController = createPlaybackController(animation); 135 | 136 | const onResize = debounce(() => { 137 | if (animation.playState !== "running") { 138 | invalidated = true; 139 | return; 140 | } 141 | 142 | effect.setKeyframes(buildKeyframes() as Keyframe[]); 143 | }); 144 | 145 | return { 146 | ...playbackController, 147 | play: () => { 148 | playbackController.play(); 149 | 150 | if (invalidated) { 151 | return onResize() 152 | .then(() => { 153 | return animation; 154 | }) 155 | .finally(() => { 156 | invalidated = false; 157 | }); 158 | } 159 | return Promise.resolve(animation); 160 | }, 161 | onResize, 162 | get config() { 163 | return options; 164 | }, 165 | }; 166 | }; 167 | 168 | export function tween( 169 | element: Element, 170 | keyframes: KeyframeWithTransform[], 171 | options: TweenOptions, 172 | ): Tween; 173 | export function tween( 174 | element: Element, 175 | keyframes: ArrayBasedKeyframeWithTransform, 176 | options: TweenOptions, 177 | ): Tween; 178 | export function tween( 179 | element: Element, 180 | keyframes: KeyframeWithTransform[] | ArrayBasedKeyframeWithTransform, 181 | options: TweenOptions, 182 | ): Tween { 183 | const normalizedKeyframes = normalizeKeyframes( 184 | keyframes, 185 | typeof options.easing === "object" ? options.easing.calc : undefined, 186 | ); 187 | if ("path" in options) { 188 | return pathTween(element, normalizedKeyframes, options); 189 | } 190 | 191 | const effect = createKeyframeEffect(element, normalizedKeyframes, options); 192 | const animation = new Animation(effect, document.timeline); 193 | 194 | const playbackController = createPlaybackController(animation); 195 | 196 | return { 197 | ...playbackController, 198 | onResize: () => { 199 | return; 200 | }, 201 | get config() { 202 | return options; 203 | }, 204 | }; 205 | } 206 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | "lib": ["DOM", "DOM.Iterable", "ESNext", "ES2020"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "ESNext", /* Specify what module code is generated. */ 29 | "rootDir": "./", /* Specify the root folder within your source files. */ 30 | "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | "resolveJsonModule": true, /* Enable importing .json files. */ 39 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 40 | 41 | /* JavaScript Support */ 42 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 43 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 44 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 45 | 46 | /* Emit */ 47 | "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 48 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 49 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 50 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 51 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 52 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 53 | // "removeComments": true, /* Disable emitting comments. */ 54 | // "noEmit": true, /* Disable emitting files from a compilation. */ 55 | "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 56 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 57 | "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 58 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 59 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 60 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 61 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 62 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 63 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 64 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 65 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 66 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 67 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 68 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 69 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 70 | 71 | /* Interop Constraints */ 72 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 73 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 74 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 75 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 76 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 77 | 78 | /* Type Checking */ 79 | "strict": true, /* Enable all strict type-checking options. */ 80 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 81 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 82 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 83 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 84 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 85 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 86 | "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 87 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 88 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 89 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 90 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 91 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 92 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 93 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 94 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 95 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 96 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 97 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 98 | 99 | /* Completeness */ 100 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 101 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /packages/core/src/core/motionPath.ts: -------------------------------------------------------------------------------- 1 | import { EasingFunction, linear } from "./easing"; 2 | import { TweenOptions } from "./tween"; 3 | import { CSSTransform, KeyframeWithTransform } from "./types"; 4 | import { pathStringToSVGPath } from "./utils/path"; 5 | import { buildTransform, isTransform } from "./utils/transform"; 6 | import * as easings from "./easing"; 7 | import { keysWithType } from "./utils/object"; 8 | 9 | export type Anchor = NonNullable; 10 | export type MotionPathOptions = { 11 | path: SVGPathElement | string; 12 | anchor?: [x: number, y: number]; 13 | rotate?: boolean; 14 | }; 15 | 16 | class Cache extends Map { 17 | constructor(private max: number) { 18 | super(); 19 | } 20 | 21 | public get(key: string): T | undefined { 22 | const value = super.get(key); 23 | if (value) { 24 | this.delete(key); 25 | this.set(key, value); 26 | } 27 | return value; 28 | } 29 | 30 | public set(key: string, value: T): this { 31 | if (this.size >= this.max) { 32 | this.delete(this.keys().next().value); 33 | } 34 | return super.set(key, value); 35 | } 36 | } 37 | 38 | const keyframeCache = new Cache(40); 39 | 40 | const getLastPointInPath = (path: SVGPathElement) => 41 | path.getPointAtLength(path.getTotalLength()); 42 | 43 | const incrementalId = (() => { 44 | let id = 0; 45 | return () => id++; 46 | })(); 47 | 48 | export class MotionPath { 49 | private _anchor: Exclude = [0, 0]; 50 | private _duration = 0; 51 | private _id = incrementalId(); 52 | private _length: number; 53 | private _path: SVGPathElement; 54 | private _rotate: NonNullable; 55 | 56 | constructor( 57 | private targetElement: HTMLElement, 58 | path: SVGPathElement | string, 59 | private options: Omit & MotionPathOptions, 60 | ) { 61 | const { anchor = [0, 0], rotate = false } = this.options; 62 | 63 | if (typeof path === "string") { 64 | this._path = pathStringToSVGPath(path); 65 | } else { 66 | this._path = path; 67 | } 68 | this._length = this._path.getTotalLength(); 69 | this.anchor = anchor; 70 | this._rotate = rotate; 71 | } 72 | 73 | public set anchor(newAnchor: Anchor | "auto") { 74 | if (newAnchor === "auto") { 75 | newAnchor = [0, 0]; 76 | } 77 | 78 | const [anchorX, anchorY] = newAnchor; 79 | const { height, width } = this.targetElement.getBoundingClientRect(); 80 | const { x, y } = this.path.ownerSVGElement?.getBoundingClientRect() || { 81 | x: 0, 82 | y: 0, 83 | }; 84 | 85 | this._anchor = [x + width * 0.5 - anchorX, y + height / 2 - anchorY]; 86 | } 87 | 88 | public get path(): SVGPathElement { 89 | return this._path; 90 | } 91 | 92 | public set path(value: SVGPathElement) { 93 | this._path = value; 94 | } 95 | 96 | public set target(newTarget: HTMLElement) { 97 | this.targetElement = newTarget; 98 | } 99 | 100 | public build( 101 | frames: KeyframeWithTransform[], 102 | easing?: EasingFunction, 103 | ): KeyframeWithTransform[] { 104 | const parent = this._path.ownerSVGElement!; 105 | const boundingClient = this._path.getBoundingClientRect(); 106 | const parentBounds = parent.getBoundingClientRect(); 107 | 108 | const viewBox = parent.viewBox.baseVal || { 109 | ...parentBounds, 110 | width: parentBounds.width, 111 | height: parentBounds.height, 112 | }; 113 | 114 | const pathPoints = this.getPathPoints(); 115 | 116 | const p = { 117 | viewBox, 118 | x: viewBox.x / 2, 119 | y: viewBox.y / 2, 120 | w: boundingClient!.width, 121 | h: boundingClient!.height, 122 | vW: viewBox.width, 123 | vH: viewBox.height, 124 | }; 125 | 126 | const scaleX = Math.fround(p.w / p.vW); 127 | const scaleY = Math.fround(p.h / p.vH ?? 1); 128 | 129 | const key = JSON.stringify({ scaleX, scaleY, frames, id: this._id }); 130 | 131 | if (keyframeCache.has(key)) { 132 | return keyframeCache.get(key)!; 133 | } 134 | 135 | const final = interpolateKeyframes({ 136 | boundingClient, 137 | frames, 138 | pathPoints: pathPoints.filter(Boolean), 139 | p, 140 | anchor: this._anchor, 141 | scaleX, 142 | scaleY, 143 | rotate: this._rotate, 144 | easingGenerator: 145 | typeof easing === "object" 146 | ? easing 147 | : typeof easing === "string" 148 | ? easing in easings 149 | ? easings[easing] 150 | : linear 151 | : linear, 152 | }); 153 | keyframeCache.set(key, final); 154 | 155 | return final; 156 | } 157 | 158 | private getPathPoints() { 159 | let step = 10; 160 | const pathPoints: SVGPoint[] = Array(~~(this._length >>> step)); 161 | 162 | for (let length = 0, current = 0; length < this._length - 1; ) { 163 | const point = this._path.getPointAtLength(length); 164 | 165 | if (!point) { 166 | pathPoints[current++] = getLastPointInPath(this.path); 167 | break; 168 | } 169 | 170 | pathPoints[current++] = point; 171 | 172 | length += step; 173 | 174 | if (length >= this._length) { 175 | pathPoints[current++] = getLastPointInPath(this.path); 176 | } 177 | } 178 | return pathPoints; 179 | } 180 | } 181 | 182 | function interpolateKeyframes({ 183 | boundingClient, 184 | frames, 185 | pathPoints, 186 | p, 187 | anchor, 188 | scaleX, 189 | scaleY, 190 | rotate, 191 | easingGenerator, 192 | }: { 193 | boundingClient: DOMRect; 194 | easingGenerator: EasingFunction | easings.EasingFactory; 195 | frames: KeyframeWithTransform[]; 196 | pathPoints: SVGPoint[]; 197 | p: { 198 | viewBox: DOMRect; 199 | x: number; 200 | y: number; 201 | w: number; 202 | h: number; 203 | vW: number; 204 | vH: number; 205 | }; 206 | anchor: Anchor; 207 | scaleX: number; 208 | scaleY: number; 209 | rotate: boolean; 210 | }): KeyframeWithTransform[] { 211 | const easing = 212 | typeof easingGenerator === "object" 213 | ? easingGenerator.calc 214 | : easingGenerator; 215 | 216 | const totalFrames = frames.length; 217 | const step = 1 / pathPoints.length; 218 | 219 | const fullFrame = frames.reduceRight((acc, curr) => { 220 | for (const key in curr) { 221 | if (key === "scale") continue; 222 | if (!acc[key]) acc[key] = curr[key]; 223 | } 224 | return acc; 225 | }); 226 | 227 | const keyframes: KeyframeWithTransform[] = Array(pathPoints.length); 228 | 229 | const frameTracker = new Set(); 230 | 231 | for (let i = 0; i < pathPoints.length; i++) { 232 | const progress = i * step; 233 | 234 | let frameIndex = Math.floor(easing(progress * totalFrames)); 235 | 236 | // Handle the last frame separately 237 | if (i === pathPoints.length - 1) { 238 | frameIndex = totalFrames - 1; 239 | } 240 | 241 | const frame = frames[frameIndex]; 242 | const nextFrame = frames[frameIndex + 1] ?? frames[frameIndex - 1]; 243 | const prevfullFrame = keyframes[i - 1] || fullFrame; 244 | 245 | frameTracker.add(frameIndex); 246 | 247 | const keyframe: KeyframeWithTransform = {}; 248 | 249 | for (const key of keysWithType(fullFrame)) { 250 | if (key === "easing" || key === "scale") continue; 251 | if (key in frame) { 252 | const prevValue = prevfullFrame[key]!; 253 | const currentValue = frame[key]!; 254 | if (isTransform(key) || key.includes("scale")) { 255 | if (!keyframe.transform) keyframe.transform = ""; 256 | keyframe.transform += `${interpolateNumbersInString( 257 | buildTransform(key as CSSTransform, frame[key] as string) + " ", 258 | easing, 259 | progress, 260 | )} `; 261 | } else if ( 262 | hasMultiNumericalValues(nextFrame[key]) && 263 | hasMultiNumericalValues(currentValue) 264 | ) { 265 | setMultiNumValues( 266 | keyframe, 267 | key, 268 | prevValue as string, 269 | currentValue as string, 270 | easing, 271 | progress, 272 | ); 273 | } else { 274 | if (hasNumberValues(prevValue) && hasNumberValues(currentValue)) { 275 | if ( 276 | hasMultiNumericalValues(currentValue) && 277 | hasMultiNumericalValues(prevValue) 278 | ) { 279 | setMultiNumValues( 280 | keyframe, 281 | key, 282 | prevValue as never, 283 | currentValue as never, 284 | easing, 285 | progress, 286 | ); 287 | } else { 288 | keyframe[key] = interpolateNumbersInString( 289 | currentValue.toString(), 290 | easing, 291 | progress, 292 | ) as never; 293 | } 294 | } else { 295 | if (typeof currentValue === "string") 296 | keyframe[key] = currentValue as never; 297 | } 298 | } 299 | 300 | if (key in frame && !(key in nextFrame)) { 301 | // Look ahead to the next keyframe that contains the property 302 | let nextKeyframeIndex = i + 1; 303 | while (nextKeyframeIndex < pathPoints.length) { 304 | const nextKeyframe = 305 | frames[ 306 | Math.floor(easing(nextKeyframeIndex * step) * totalFrames) 307 | ]; 308 | if (nextKeyframe && key in nextKeyframe) { 309 | const nextValue = nextKeyframe[key as keyof typeof nextKeyframe]; 310 | if (typeof keyframe[key] === "undefined") { 311 | keyframe[key as keyof typeof keyframe] = nextValue as never; 312 | } 313 | break; 314 | } 315 | nextKeyframeIndex++; 316 | } 317 | } 318 | } 319 | } 320 | 321 | const point = pathPoints[i]; 322 | const t = i === pathPoints.length - 1 ? 1 : progress; 323 | const scale = frame.scale ? easing(1 - t) + frame.scale : 1; 324 | const [anchorX, anchorY] = anchor; 325 | const p0 = pathPoints.at(i >= 1 ? i - 1 : 0); 326 | const p1 = pathPoints.at(i + 1) ?? point; 327 | 328 | const translateX = 329 | boundingClient.left - anchorX + (point.x - p.x) * (+scaleX || 1); 330 | const translateY = 331 | boundingClient.top - anchorY + (point.y - p.y) * (+scaleY || 1); 332 | 333 | const autoRotate = rotate 334 | ? (Math.atan2(p1.y - p0!.y, p1.x - p0!.x) * 180) / Math.PI 335 | : 0; 336 | let transform = `${keyframe.transform ?? " "}`; 337 | keyframe.transform = 338 | `translateX(${translateX}px) translateY(${translateY}px) scale(${Math.fround( 339 | scale * easing(1 - t) + scale, 340 | )}) ${rotate ? `rotate(${easing(1 - t) * autoRotate}deg)` : ""} ${ 341 | keyframe.transform ?? "" 342 | } `.trim(); 343 | 344 | keyframe["offset"] = 345 | i === pathPoints.length - 1 346 | ? 1 347 | : Math.min(1, Math.max(0, easing(progress))); 348 | 349 | keyframes[i] = keyframe; 350 | } 351 | 352 | return keyframes; 353 | 354 | function setMultiNumValues( 355 | temp: NonNullable, 356 | key: string, 357 | prevValue: string, 358 | nextValue: string, 359 | easing: EasingFunction, 360 | offset: number, 361 | ) { 362 | temp[key as keyof typeof temp] = interpolateMultiNumericalProperty( 363 | prevValue, 364 | nextValue, 365 | easing, 366 | offset, 367 | ) as never; 368 | } 369 | } 370 | 371 | const numberRegex = /[-+]?\d*\.?\d+/g; 372 | 373 | function interpolateNumbersInString( 374 | str: string, 375 | easing: EasingFunction, 376 | offset: number, 377 | ): string { 378 | return str.replace(numberRegex, (match) => { 379 | const oldValue = Math.fround(parseFloat(match)); 380 | const newValue = easing(oldValue); 381 | return `${easing(oldValue + offset * (newValue - oldValue))}`; 382 | }); 383 | } 384 | 385 | function parseNumber(str: string) { 386 | let val: number = parseFloat(str); 387 | if (isNaN(val)) { 388 | val = parseInt(str); 389 | } 390 | 391 | return val; 392 | } 393 | 394 | function hasNumberValues(value: unknown): value is number { 395 | if ( 396 | (typeof value === "string" && parseNumber(value)) || 397 | typeof value === "number" 398 | ) { 399 | return !isNaN(parseNumber(value.toString())); 400 | } 401 | return false; 402 | } 403 | 404 | function interpolateMultiNumericalProperty( 405 | fromValue: string, 406 | toValue: string, 407 | easing: EasingFunction, 408 | progress: number, 409 | ): string { 410 | const from = interpolateNumbersInString(fromValue, easing, progress); 411 | const to = interpolateNumbersInString(toValue, easing, progress); 412 | 413 | return from.replace(numberRegex, (match, offset, string) => { 414 | let fromVal = parseNumber(match); 415 | let toVal = parseNumber(to.slice(offset)); 416 | 417 | if (isNaN(toVal)) toVal = fromVal; 418 | 419 | return `${easing(fromVal + progress * (toVal - fromVal ?? progress))}`; 420 | }); 421 | } 422 | 423 | function hasMultiNumericalValues(value: any): boolean { 424 | if (typeof value === "string") { 425 | const numericalValues = value.match(/[-\d.]+/g); 426 | return !!numericalValues && numericalValues.length >= 2; 427 | } 428 | return false; 429 | } 430 | -------------------------------------------------------------------------------- /main.ts: -------------------------------------------------------------------------------- 1 | import { timeline } from "./browser-test/src/lib/core/timeline"; 2 | import { KeyframeWithTransform } from "./browser-test/src/lib/core/types"; 3 | import "./style.css"; 4 | import { 5 | easeOut, 6 | cubicIn, 7 | quadIn, 8 | quadOut, 9 | quartInOut, 10 | circIn, 11 | circOut, 12 | } from "./browser-test/src/lib/core/easing"; 13 | 14 | const setupPathDemo = ( 15 | root: HTMLElement | SVGElement, 16 | target: HTMLElement, 17 | isFirst: boolean, 18 | ) => { 19 | const element = target; 20 | console.log(root); 21 | const svgPath = root.querySelector("#custom"); 22 | 23 | const keyframes: KeyframeWithTransform[] = [ 24 | { opacity: 1, backgroundColor: "red", scale: 1 }, 25 | { opacity: 0.9, scale: 2.5, backgroundColor: "orange" }, 26 | { opacity: 0.4, backgroundColor: "yellow", scale: 5 }, 27 | { opacity: 1, backgroundColor: "green", scale: 1 }, 28 | { opacity: 0.5, scale: 1.25, backgroundColor: "limegreen" }, 29 | { 30 | opacity: 1, 31 | scale: 0.5, 32 | onComplete: () => { 33 | console.log("WOW!"); 34 | }, 35 | outline: "rebeccapurple 4px solid", 36 | backgroundColor: "violet", 37 | easing: "ease-out", 38 | // duration: 5000, 39 | }, 40 | { 41 | outline: "silver 8px dashed", 42 | outlineOffset: "8px", 43 | // rotateX: "-45deg", 44 | }, 45 | { outlineWidth: "14px", backgroundColor: "white" }, 46 | ]; 47 | 48 | const keyframes3: KeyframeWithTransform[] = [ 49 | { borderRadius: "50%", scaleY: "2", scaleX: "2" }, 50 | { 51 | scaleX: "1", 52 | outline: "1px dashed white", 53 | scaleY: "3", 54 | }, 55 | { 56 | easing: "ease-in", 57 | }, 58 | { 59 | easing: "ease-out", 60 | }, 61 | 62 | { 63 | easing: "ease-in", 64 | outlineOffset: "4px", 65 | outlineWidth: "4px", 66 | 67 | backgroundColor: "rebeccapurple", 68 | }, 69 | { 70 | easing: "ease-in", 71 | 72 | scale: 1.5, 73 | outline: "10px dashed pink", 74 | }, 75 | { 76 | scale: 2.5, 77 | easing: "ease-out", 78 | outline: "20px solid violet", 79 | outlineOffset: "6px", 80 | }, 81 | { 82 | outline: "10px solid violet", 83 | outlineStyle: "dashed", 84 | }, 85 | { 86 | scale: 1, 87 | easing: "ease-in", 88 | outline: "4px solid rebeccapurple", 89 | outlineStyle: "dashed", 90 | backgroundColor: "limegreen", 91 | outlineOffset: "4px", 92 | opacity: 0.8, 93 | }, 94 | { opacity: 0.7, outlineColor: "#0000", easing: "ease-in" }, 95 | { 96 | borderRadius: "50%", 97 | opacity: 1, 98 | scale: 2, 99 | }, 100 | ]; 101 | 102 | const keyframes2: KeyframeWithTransform[] = [ 103 | { outline: "10px dashed limegreen" }, 104 | { opacity: 1, scale: 3, outline: "2px double pink " }, 105 | { 106 | opacity: 0.7, 107 | scale: 2, 108 | easing: "ease-out", 109 | borderRadius: "50%", 110 | backgroundColor: "cyan", 111 | outline: "5px solid red", 112 | }, 113 | { opacity: 1, outline: "2px double pink " }, 114 | { 115 | opacity: 0.7, 116 | scale: 0.2, 117 | backgroundColor: "orange", 118 | borderRadius: "0rem", 119 | outline: "5px solid red", 120 | }, 121 | { opacity: 1, scale: 3, outline: "2px double pink " }, 122 | { outline: "10px dashed limegreen" }, 123 | { 124 | opacity: 0.7, 125 | scale: 2.1, 126 | borderRadius: ".25rem", 127 | backgroundColor: "cyan", 128 | outline: "5px solid red", 129 | }, 130 | ]; 131 | 132 | const options: PathTweenOptions = { 133 | // duration: 8000, 134 | direction: "normal", 135 | // delay: 1000, 136 | // composite: "replace", 137 | fill: "both", 138 | path: svgPath!, 139 | }; 140 | // const tween = new PathTween(element, [...keyframes3], options); 141 | // tween.start(); 142 | // const tween = timeline({ defaults: options, paused: true }); 143 | 144 | let tl = undefined; 145 | const initTimeline = () => { 146 | const opts = { 147 | ...options, 148 | }; 149 | console.log(root); 150 | tl = timeline({ defaults: opts, repeat: 3, paused: true }); 151 | tl.to( 152 | element, 153 | [ 154 | // Square 155 | { borderRadius: "0%", scale: 1, clipPath: "none" }, 156 | // Star 157 | { 158 | borderRadius: "0%", 159 | scale: 0.2, 160 | clipPath: 161 | "polygon(50% 0%, 61.8% 38.2%, 100% 35.4%, 69.1% 57.3%, 82.6% 91.6%, 50% 73.8%, 17.4% 91.6%, 30.9% 57.3%, 0% 35.4%, 38.2% 38.2%)", 162 | }, 163 | { 164 | borderRadius: "50%", 165 | backgroundColor: "white", 166 | scale: 1, 167 | clipPath: "initial", 168 | }, // Circle 169 | { borderRadius: "25%", scale: 2, clipPath: "initial" }, // Rounded Square 170 | { borderRadius: "50%", scale: 0.5, clipPath: "initial" }, // Circle 171 | // Triangle 172 | { 173 | borderRadius: "0%", 174 | scale: 0.5, 175 | backgroundColor: "green", 176 | clipPath: "polygon(50% 0%, 100% 100%, 0% 100%)", 177 | }, 178 | ], 179 | { 180 | duration: 6200, 181 | direction: "normal", 182 | fill: "none", 183 | composite: "replace", 184 | easing: isFirst ? "ease-in-out" : cubicIn, 185 | iterations: 3, 186 | anchor: [0, 0], 187 | rotate: true, 188 | path: root.querySelector("#infinity")!, 189 | }, 190 | ) 191 | .to( 192 | element, 193 | [ 194 | ...keyframes, 195 | { 196 | outline: "red 10px solid", 197 | onComplete: () => { 198 | console.log("TESTING"); 199 | }, 200 | }, 201 | ], 202 | { 203 | duration: 4200, 204 | direction: "normal", 205 | fill: "none", 206 | // easing: "linear", 207 | easing: "ease-out", 208 | iterations: 1, 209 | anchor: [0, 0], 210 | rotate: true, 211 | path: root.querySelector("#infinity")!, 212 | }, 213 | ) 214 | .to( 215 | element, 216 | [ 217 | ...keyframes2, 218 | { 219 | outline: "red 10px solid", 220 | }, 221 | ], 222 | { 223 | duration: 4200, 224 | direction: "normal", 225 | fill: "none", 226 | 227 | iterations: 2, 228 | anchor: [0, 0], 229 | path: root.querySelector("#infinity-reverse")!, 230 | }, 231 | ) 232 | .to( 233 | element, 234 | [ 235 | ...keyframes2, 236 | { 237 | outline: "red 10px solid", 238 | }, 239 | ], 240 | { 241 | duration: 4200, 242 | direction: "normal", 243 | fill: "none", 244 | easing: "ease-out", 245 | iterations: 1, 246 | anchor: [0, 0], 247 | path: root.querySelector("#infinity-reverse")!, 248 | }, 249 | ) 250 | .to(element, keyframes3, { 251 | path: svgPath!, 252 | direction: "alternate-reverse", 253 | duration: 4500, 254 | anchor: "auto", 255 | iterations: 2, 256 | rotate: false, 257 | delay: 0, 258 | easing: isFirst ? "linear" : quadOut, 259 | 260 | fill: "none", 261 | }) 262 | .to(element, keyframes3, { 263 | path: svgPath!, 264 | direction: "alternate-reverse", 265 | duration: 4500, 266 | anchor: [0, 0], 267 | iterations: 1, 268 | rotate: false, 269 | delay: 0, 270 | easing: isFirst ? "linear" : quadIn, 271 | 272 | fill: "none", 273 | }) 274 | 275 | .to( 276 | element, 277 | [ 278 | { 279 | backgroundColor: "tomato", 280 | borderRadius: "50%", 281 | scaleY: 4, 282 | scale: 1, 283 | }, 284 | { 285 | scale: 1, 286 | outline: "red 10px solid", 287 | }, 288 | { 289 | outline: "gray 12px dashed", 290 | scale: 1, 291 | outlineOffset: "4px", 292 | }, 293 | { 294 | outline: "white 5px dashed", 295 | scale: 1, 296 | outlineOffset: "11px", 297 | }, 298 | { 299 | outlineOffset: "6px", 300 | }, 301 | { 302 | scale: 2, 303 | outline: "transparent 0px solid", 304 | outlineOffset: "2px", 305 | }, 306 | ], 307 | { 308 | duration: 1000, 309 | direction: "alternate-reverse", 310 | delay: 0, 311 | easing: isFirst ? "linear" : quartInOut, 312 | iterations: 4, 313 | anchor: [0, 0], 314 | path: root.querySelector("#horizontal-top")!, 315 | }, 316 | ) 317 | .to( 318 | element, 319 | [ 320 | { 321 | opacity: ["1", "0.5", "1"], 322 | background: ["red", "pink", "white", "limegreen"], 323 | }, 324 | ], 325 | { 326 | path: root.querySelector("#diagonal-topleft-bottomright"), 327 | duration: 2000, 328 | iterations: 1, 329 | 330 | easing: isFirst ? "ease-out" : easeOut, 331 | fill: "both", 332 | }, 333 | ) 334 | .to( 335 | element, 336 | [ 337 | { 338 | opacity: ["1", "0.5", "1"], 339 | backgroundColor: ["red", "pink", "white", "limegreen"], 340 | }, 341 | ], 342 | { 343 | path: root.querySelector("#diagonal-topleft-bottomright"), 344 | duration: 700, 345 | iterations: 3, 346 | direction: "alternate-reverse", 347 | // easing: isFirst ? 'ease-out' : 348 | easing: "ease-in", 349 | delay: 1000, 350 | fill: "backwards", 351 | }, 352 | ); 353 | return tl; 354 | }; 355 | 356 | tl = initTimeline(); 357 | tl.play(); 358 | // svgPath?.animate([{}]) 359 | // tween 360 | // .to(element, keyframes3, { 361 | // ...options, 362 | // duration: 0, 363 | // easing: "ease-out", 364 | // direction: "alternate-reverse", 365 | // iterations: 0, 366 | 367 | // path: document.querySelector("#horizontal")!, 368 | // }) 369 | // .to(element, keyframes2, { 370 | // ...options, 371 | 372 | // iterations: 2, 373 | // duration: 0, 374 | // path: svgPath!, 375 | // }) 376 | // .to(element, keyframes, { 377 | // ...options, 378 | // direction: "alternate-reverse", 379 | // iterations: 0, 380 | // duration: 0, 381 | // path: document.querySelector("#infinity-reverse")!, 382 | // }) 383 | // .to(element, keyframes2, { 384 | // ...options, 385 | // iterations: 3, 386 | // direction: "alternate-reverse", 387 | // path: document.querySelector("#heart")!, 388 | // }); 389 | 390 | // tween.play(); 391 | return () => { 392 | // tween.kill(); 393 | }; 394 | }; 395 | 396 | const setupButtonDemo = (target: HTMLDivElement) => { 397 | const button = target.querySelector("button"); 398 | 399 | const tween = timeline({ 400 | repeat: 0, 401 | 402 | paused: false, 403 | defaults: { duration: 3000, iterations: 1 }, 404 | }); 405 | 406 | tween.to( 407 | button!, 408 | [ 409 | { background: "initial", easing: "ease-in" }, 410 | { 411 | background: "skyblue", 412 | outline: "0.5rem solid purple", 413 | outlineOffset: "5px", 414 | }, 415 | { 416 | background: "seagreen", 417 | outline: "0.5rem dashed white", 418 | outlineOffset: "-0.2rem", 419 | }, 420 | { 421 | background: "pink", 422 | outline: "0.5rem dashed pink", 423 | outlineOffset: "10px", 424 | }, 425 | { background: "initial", easing: "ease-out" }, 426 | ], 427 | { duration: 1800, iterations: 1, easing: "ease" }, 428 | ); 429 | button!.onclick = () => { 430 | tween.to( 431 | button!, 432 | [ 433 | { opacity: 1, outline: "2px double pink " }, 434 | { 435 | opacity: 0.7, 436 | scale: 1, 437 | backgroundColor: "orange", 438 | outline: "5px solid red", 439 | }, 440 | { opacity: 1, scale: 3, outline: "2px double pink " }, 441 | { outline: "10px dashed limegreen" }, 442 | { 443 | opacity: 0.7, 444 | scale: 0.1, 445 | backgroundColor: "cyan", 446 | outline: "5px solid red", 447 | }, 448 | ], 449 | { 450 | duration: 2000, 451 | easing: "ease", 452 | fill: "both", 453 | composite: "accumulate", 454 | }, 455 | ); 456 | tween.play(); 457 | }; 458 | 459 | return () => { 460 | tween.kill(); 461 | }; 462 | }; 463 | 464 | const tabs = Array.from(document.querySelectorAll(".tab")); 465 | 466 | tabs.forEach((div) => { 467 | const button = document.querySelector( 468 | div.id === "path-demo" ? "#tab1" : "#tab2", 469 | ); 470 | let state; 471 | document.body.addEventListener("click", (e) => { 472 | const target = e.target as HTMLElement; 473 | 474 | if ( 475 | target.id.includes("tab") && 476 | !target.isSameNode(button) && 477 | !div.contains(target) 478 | ) 479 | div.hidden = !div.hidden; 480 | }); 481 | const divString = div.innerHTML; 482 | 483 | button.onclick = () => { 484 | if (!div.hidden) { 485 | typeof state === "function" ? state() : console.error("HELP"); 486 | state = null; 487 | div.hidden = true; 488 | } else { 489 | div.hidden = false; 490 | } 491 | }; 492 | setTimeout(() => { 493 | [...Array(2).keys()].forEach((_, i) => { 494 | console.log(document); 495 | const root = document.querySelector(`#${i ? "b" : "a"}`); 496 | console.log(root); 497 | state = 498 | div.id === "path-demo" 499 | ? setupPathDemo(root, root?.querySelector(".my-element"), !i) 500 | : setupButtonDemo(div); 501 | }); 502 | }, 10); 503 | }); 504 | // setInterval(()=>{ 505 | // reversed = !reversed; 506 | // tween.animatePath(reversed) 507 | // }, 1500) 508 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | prettier: 12 | specifier: ^2.8.8 13 | version: 2.8.8 14 | devDependencies: 15 | nanobundle: 16 | specifier: ^1.6.0 17 | version: 1.6.0(typescript@4.9.5) 18 | typescript: 19 | specifier: ^4.9.5 20 | version: 4.9.5 21 | 22 | packages/core: 23 | devDependencies: 24 | tsup: 25 | specifier: ^7.2.0 26 | version: 7.2.0(typescript@4.9.5) 27 | 28 | packages/svelte: 29 | dependencies: 30 | '@nanomate/core': 31 | specifier: workspace:^ 32 | version: link:../core 33 | devDependencies: 34 | '@playwright/test': 35 | specifier: ^1.28.1 36 | version: 1.37.1 37 | '@sveltejs/adapter-auto': 38 | specifier: ^2.0.0 39 | version: 2.1.0(@sveltejs/kit@1.24.0) 40 | '@sveltejs/kit': 41 | specifier: ^1.20.4 42 | version: 1.24.0(svelte@4.2.0)(vite@4.4.9) 43 | '@sveltejs/package': 44 | specifier: ^2.0.0 45 | version: 2.2.2(svelte@4.2.0)(typescript@5.2.2) 46 | '@typescript-eslint/eslint-plugin': 47 | specifier: ^5.45.0 48 | version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.2.2) 49 | '@typescript-eslint/parser': 50 | specifier: ^5.45.0 51 | version: 5.62.0(eslint@8.48.0)(typescript@5.2.2) 52 | eslint: 53 | specifier: ^8.28.0 54 | version: 8.48.0 55 | eslint-config-prettier: 56 | specifier: ^8.5.0 57 | version: 8.10.0(eslint@8.48.0) 58 | eslint-plugin-svelte: 59 | specifier: ^2.30.0 60 | version: 2.33.0(eslint@8.48.0)(svelte@4.2.0) 61 | prettier: 62 | specifier: ^2.8.0 63 | version: 2.8.8 64 | prettier-plugin-svelte: 65 | specifier: ^2.10.1 66 | version: 2.10.1(prettier@2.8.8)(svelte@4.2.0) 67 | publint: 68 | specifier: ^0.1.9 69 | version: 0.1.16 70 | svelte: 71 | specifier: ^4.0.5 72 | version: 4.2.0 73 | svelte-check: 74 | specifier: ^3.4.3 75 | version: 3.5.1(postcss@8.4.29)(svelte@4.2.0) 76 | tslib: 77 | specifier: ^2.4.1 78 | version: 2.6.2 79 | typescript: 80 | specifier: ^5.0.0 81 | version: 5.2.2 82 | vite: 83 | specifier: ^4.4.2 84 | version: 4.4.9 85 | 86 | packages: 87 | 88 | /@aashutoshrathi/word-wrap@1.2.6: 89 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 90 | engines: {node: '>=0.10.0'} 91 | dev: true 92 | 93 | /@ampproject/remapping@2.2.1: 94 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 95 | engines: {node: '>=6.0.0'} 96 | dependencies: 97 | '@jridgewell/gen-mapping': 0.3.3 98 | '@jridgewell/trace-mapping': 0.3.19 99 | dev: true 100 | 101 | /@babel/code-frame@7.22.10: 102 | resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} 103 | engines: {node: '>=6.9.0'} 104 | dependencies: 105 | '@babel/highlight': 7.22.10 106 | chalk: 2.4.2 107 | dev: true 108 | 109 | /@babel/helper-validator-identifier@7.22.5: 110 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} 111 | engines: {node: '>=6.9.0'} 112 | dev: true 113 | 114 | /@babel/highlight@7.22.10: 115 | resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==} 116 | engines: {node: '>=6.9.0'} 117 | dependencies: 118 | '@babel/helper-validator-identifier': 7.22.5 119 | chalk: 2.4.2 120 | js-tokens: 4.0.0 121 | dev: true 122 | 123 | /@cometjs/core@2.3.2(typescript@4.9.5): 124 | resolution: {integrity: sha512-Plhs4vJj0M/DigLnzjV9ZGKOVpHnaO1h9fu176R4xYXGeQkHlIZmbTBnxHqPoylFPLZoBHZm1HYbXES7NT/xMg==} 125 | peerDependencies: 126 | typescript: ^4.5.0 || ^5.0.0 127 | peerDependenciesMeta: 128 | typescript: 129 | optional: true 130 | dependencies: 131 | typescript: 4.9.5 132 | dev: true 133 | 134 | /@esbuild/android-arm64@0.17.19: 135 | resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} 136 | engines: {node: '>=12'} 137 | cpu: [arm64] 138 | os: [android] 139 | requiresBuild: true 140 | dev: true 141 | optional: true 142 | 143 | /@esbuild/android-arm64@0.18.20: 144 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} 145 | engines: {node: '>=12'} 146 | cpu: [arm64] 147 | os: [android] 148 | requiresBuild: true 149 | dev: true 150 | optional: true 151 | 152 | /@esbuild/android-arm@0.17.19: 153 | resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} 154 | engines: {node: '>=12'} 155 | cpu: [arm] 156 | os: [android] 157 | requiresBuild: true 158 | dev: true 159 | optional: true 160 | 161 | /@esbuild/android-arm@0.18.20: 162 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} 163 | engines: {node: '>=12'} 164 | cpu: [arm] 165 | os: [android] 166 | requiresBuild: true 167 | dev: true 168 | optional: true 169 | 170 | /@esbuild/android-x64@0.17.19: 171 | resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} 172 | engines: {node: '>=12'} 173 | cpu: [x64] 174 | os: [android] 175 | requiresBuild: true 176 | dev: true 177 | optional: true 178 | 179 | /@esbuild/android-x64@0.18.20: 180 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} 181 | engines: {node: '>=12'} 182 | cpu: [x64] 183 | os: [android] 184 | requiresBuild: true 185 | dev: true 186 | optional: true 187 | 188 | /@esbuild/darwin-arm64@0.17.19: 189 | resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} 190 | engines: {node: '>=12'} 191 | cpu: [arm64] 192 | os: [darwin] 193 | requiresBuild: true 194 | dev: true 195 | optional: true 196 | 197 | /@esbuild/darwin-arm64@0.18.20: 198 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} 199 | engines: {node: '>=12'} 200 | cpu: [arm64] 201 | os: [darwin] 202 | requiresBuild: true 203 | dev: true 204 | optional: true 205 | 206 | /@esbuild/darwin-x64@0.17.19: 207 | resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} 208 | engines: {node: '>=12'} 209 | cpu: [x64] 210 | os: [darwin] 211 | requiresBuild: true 212 | dev: true 213 | optional: true 214 | 215 | /@esbuild/darwin-x64@0.18.20: 216 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} 217 | engines: {node: '>=12'} 218 | cpu: [x64] 219 | os: [darwin] 220 | requiresBuild: true 221 | dev: true 222 | optional: true 223 | 224 | /@esbuild/freebsd-arm64@0.17.19: 225 | resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} 226 | engines: {node: '>=12'} 227 | cpu: [arm64] 228 | os: [freebsd] 229 | requiresBuild: true 230 | dev: true 231 | optional: true 232 | 233 | /@esbuild/freebsd-arm64@0.18.20: 234 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} 235 | engines: {node: '>=12'} 236 | cpu: [arm64] 237 | os: [freebsd] 238 | requiresBuild: true 239 | dev: true 240 | optional: true 241 | 242 | /@esbuild/freebsd-x64@0.17.19: 243 | resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} 244 | engines: {node: '>=12'} 245 | cpu: [x64] 246 | os: [freebsd] 247 | requiresBuild: true 248 | dev: true 249 | optional: true 250 | 251 | /@esbuild/freebsd-x64@0.18.20: 252 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} 253 | engines: {node: '>=12'} 254 | cpu: [x64] 255 | os: [freebsd] 256 | requiresBuild: true 257 | dev: true 258 | optional: true 259 | 260 | /@esbuild/linux-arm64@0.17.19: 261 | resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} 262 | engines: {node: '>=12'} 263 | cpu: [arm64] 264 | os: [linux] 265 | requiresBuild: true 266 | dev: true 267 | optional: true 268 | 269 | /@esbuild/linux-arm64@0.18.20: 270 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} 271 | engines: {node: '>=12'} 272 | cpu: [arm64] 273 | os: [linux] 274 | requiresBuild: true 275 | dev: true 276 | optional: true 277 | 278 | /@esbuild/linux-arm@0.17.19: 279 | resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} 280 | engines: {node: '>=12'} 281 | cpu: [arm] 282 | os: [linux] 283 | requiresBuild: true 284 | dev: true 285 | optional: true 286 | 287 | /@esbuild/linux-arm@0.18.20: 288 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} 289 | engines: {node: '>=12'} 290 | cpu: [arm] 291 | os: [linux] 292 | requiresBuild: true 293 | dev: true 294 | optional: true 295 | 296 | /@esbuild/linux-ia32@0.17.19: 297 | resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} 298 | engines: {node: '>=12'} 299 | cpu: [ia32] 300 | os: [linux] 301 | requiresBuild: true 302 | dev: true 303 | optional: true 304 | 305 | /@esbuild/linux-ia32@0.18.20: 306 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} 307 | engines: {node: '>=12'} 308 | cpu: [ia32] 309 | os: [linux] 310 | requiresBuild: true 311 | dev: true 312 | optional: true 313 | 314 | /@esbuild/linux-loong64@0.17.19: 315 | resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} 316 | engines: {node: '>=12'} 317 | cpu: [loong64] 318 | os: [linux] 319 | requiresBuild: true 320 | dev: true 321 | optional: true 322 | 323 | /@esbuild/linux-loong64@0.18.20: 324 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} 325 | engines: {node: '>=12'} 326 | cpu: [loong64] 327 | os: [linux] 328 | requiresBuild: true 329 | dev: true 330 | optional: true 331 | 332 | /@esbuild/linux-mips64el@0.17.19: 333 | resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} 334 | engines: {node: '>=12'} 335 | cpu: [mips64el] 336 | os: [linux] 337 | requiresBuild: true 338 | dev: true 339 | optional: true 340 | 341 | /@esbuild/linux-mips64el@0.18.20: 342 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} 343 | engines: {node: '>=12'} 344 | cpu: [mips64el] 345 | os: [linux] 346 | requiresBuild: true 347 | dev: true 348 | optional: true 349 | 350 | /@esbuild/linux-ppc64@0.17.19: 351 | resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} 352 | engines: {node: '>=12'} 353 | cpu: [ppc64] 354 | os: [linux] 355 | requiresBuild: true 356 | dev: true 357 | optional: true 358 | 359 | /@esbuild/linux-ppc64@0.18.20: 360 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} 361 | engines: {node: '>=12'} 362 | cpu: [ppc64] 363 | os: [linux] 364 | requiresBuild: true 365 | dev: true 366 | optional: true 367 | 368 | /@esbuild/linux-riscv64@0.17.19: 369 | resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} 370 | engines: {node: '>=12'} 371 | cpu: [riscv64] 372 | os: [linux] 373 | requiresBuild: true 374 | dev: true 375 | optional: true 376 | 377 | /@esbuild/linux-riscv64@0.18.20: 378 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} 379 | engines: {node: '>=12'} 380 | cpu: [riscv64] 381 | os: [linux] 382 | requiresBuild: true 383 | dev: true 384 | optional: true 385 | 386 | /@esbuild/linux-s390x@0.17.19: 387 | resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} 388 | engines: {node: '>=12'} 389 | cpu: [s390x] 390 | os: [linux] 391 | requiresBuild: true 392 | dev: true 393 | optional: true 394 | 395 | /@esbuild/linux-s390x@0.18.20: 396 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} 397 | engines: {node: '>=12'} 398 | cpu: [s390x] 399 | os: [linux] 400 | requiresBuild: true 401 | dev: true 402 | optional: true 403 | 404 | /@esbuild/linux-x64@0.17.19: 405 | resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} 406 | engines: {node: '>=12'} 407 | cpu: [x64] 408 | os: [linux] 409 | requiresBuild: true 410 | dev: true 411 | optional: true 412 | 413 | /@esbuild/linux-x64@0.18.20: 414 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} 415 | engines: {node: '>=12'} 416 | cpu: [x64] 417 | os: [linux] 418 | requiresBuild: true 419 | dev: true 420 | optional: true 421 | 422 | /@esbuild/netbsd-x64@0.17.19: 423 | resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} 424 | engines: {node: '>=12'} 425 | cpu: [x64] 426 | os: [netbsd] 427 | requiresBuild: true 428 | dev: true 429 | optional: true 430 | 431 | /@esbuild/netbsd-x64@0.18.20: 432 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} 433 | engines: {node: '>=12'} 434 | cpu: [x64] 435 | os: [netbsd] 436 | requiresBuild: true 437 | dev: true 438 | optional: true 439 | 440 | /@esbuild/openbsd-x64@0.17.19: 441 | resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} 442 | engines: {node: '>=12'} 443 | cpu: [x64] 444 | os: [openbsd] 445 | requiresBuild: true 446 | dev: true 447 | optional: true 448 | 449 | /@esbuild/openbsd-x64@0.18.20: 450 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} 451 | engines: {node: '>=12'} 452 | cpu: [x64] 453 | os: [openbsd] 454 | requiresBuild: true 455 | dev: true 456 | optional: true 457 | 458 | /@esbuild/sunos-x64@0.17.19: 459 | resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} 460 | engines: {node: '>=12'} 461 | cpu: [x64] 462 | os: [sunos] 463 | requiresBuild: true 464 | dev: true 465 | optional: true 466 | 467 | /@esbuild/sunos-x64@0.18.20: 468 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} 469 | engines: {node: '>=12'} 470 | cpu: [x64] 471 | os: [sunos] 472 | requiresBuild: true 473 | dev: true 474 | optional: true 475 | 476 | /@esbuild/win32-arm64@0.17.19: 477 | resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} 478 | engines: {node: '>=12'} 479 | cpu: [arm64] 480 | os: [win32] 481 | requiresBuild: true 482 | dev: true 483 | optional: true 484 | 485 | /@esbuild/win32-arm64@0.18.20: 486 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} 487 | engines: {node: '>=12'} 488 | cpu: [arm64] 489 | os: [win32] 490 | requiresBuild: true 491 | dev: true 492 | optional: true 493 | 494 | /@esbuild/win32-ia32@0.17.19: 495 | resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} 496 | engines: {node: '>=12'} 497 | cpu: [ia32] 498 | os: [win32] 499 | requiresBuild: true 500 | dev: true 501 | optional: true 502 | 503 | /@esbuild/win32-ia32@0.18.20: 504 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} 505 | engines: {node: '>=12'} 506 | cpu: [ia32] 507 | os: [win32] 508 | requiresBuild: true 509 | dev: true 510 | optional: true 511 | 512 | /@esbuild/win32-x64@0.17.19: 513 | resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} 514 | engines: {node: '>=12'} 515 | cpu: [x64] 516 | os: [win32] 517 | requiresBuild: true 518 | dev: true 519 | optional: true 520 | 521 | /@esbuild/win32-x64@0.18.20: 522 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} 523 | engines: {node: '>=12'} 524 | cpu: [x64] 525 | os: [win32] 526 | requiresBuild: true 527 | dev: true 528 | optional: true 529 | 530 | /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0): 531 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 532 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 533 | peerDependencies: 534 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 535 | dependencies: 536 | eslint: 8.48.0 537 | eslint-visitor-keys: 3.4.3 538 | dev: true 539 | 540 | /@eslint-community/regexpp@4.8.0: 541 | resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} 542 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 543 | dev: true 544 | 545 | /@eslint/eslintrc@2.1.2: 546 | resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} 547 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 548 | dependencies: 549 | ajv: 6.12.6 550 | debug: 4.3.4 551 | espree: 9.6.1 552 | globals: 13.21.0 553 | ignore: 5.2.4 554 | import-fresh: 3.3.0 555 | js-yaml: 4.1.0 556 | minimatch: 3.1.2 557 | strip-json-comments: 3.1.1 558 | transitivePeerDependencies: 559 | - supports-color 560 | dev: true 561 | 562 | /@eslint/js@8.48.0: 563 | resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} 564 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 565 | dev: true 566 | 567 | /@humanwhocodes/config-array@0.11.11: 568 | resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} 569 | engines: {node: '>=10.10.0'} 570 | dependencies: 571 | '@humanwhocodes/object-schema': 1.2.1 572 | debug: 4.3.4 573 | minimatch: 3.1.2 574 | transitivePeerDependencies: 575 | - supports-color 576 | dev: true 577 | 578 | /@humanwhocodes/module-importer@1.0.1: 579 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 580 | engines: {node: '>=12.22'} 581 | dev: true 582 | 583 | /@humanwhocodes/object-schema@1.2.1: 584 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 585 | dev: true 586 | 587 | /@jridgewell/gen-mapping@0.3.3: 588 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 589 | engines: {node: '>=6.0.0'} 590 | dependencies: 591 | '@jridgewell/set-array': 1.1.2 592 | '@jridgewell/sourcemap-codec': 1.4.15 593 | '@jridgewell/trace-mapping': 0.3.19 594 | dev: true 595 | 596 | /@jridgewell/resolve-uri@3.1.1: 597 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 598 | engines: {node: '>=6.0.0'} 599 | dev: true 600 | 601 | /@jridgewell/set-array@1.1.2: 602 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 603 | engines: {node: '>=6.0.0'} 604 | dev: true 605 | 606 | /@jridgewell/sourcemap-codec@1.4.15: 607 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 608 | dev: true 609 | 610 | /@jridgewell/trace-mapping@0.3.19: 611 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} 612 | dependencies: 613 | '@jridgewell/resolve-uri': 3.1.1 614 | '@jridgewell/sourcemap-codec': 1.4.15 615 | dev: true 616 | 617 | /@nodelib/fs.scandir@2.1.5: 618 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 619 | engines: {node: '>= 8'} 620 | dependencies: 621 | '@nodelib/fs.stat': 2.0.5 622 | run-parallel: 1.2.0 623 | dev: true 624 | 625 | /@nodelib/fs.stat@2.0.5: 626 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 627 | engines: {node: '>= 8'} 628 | dev: true 629 | 630 | /@nodelib/fs.walk@1.2.8: 631 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 632 | engines: {node: '>= 8'} 633 | dependencies: 634 | '@nodelib/fs.scandir': 2.1.5 635 | fastq: 1.15.0 636 | dev: true 637 | 638 | /@playwright/test@1.37.1: 639 | resolution: {integrity: sha512-bq9zTli3vWJo8S3LwB91U0qDNQDpEXnw7knhxLM0nwDvexQAwx9tO8iKDZSqqneVq+URd/WIoz+BALMqUTgdSg==} 640 | engines: {node: '>=16'} 641 | hasBin: true 642 | dependencies: 643 | '@types/node': 20.5.9 644 | playwright-core: 1.37.1 645 | optionalDependencies: 646 | fsevents: 2.3.2 647 | dev: true 648 | 649 | /@polka/url@1.0.0-next.21: 650 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} 651 | dev: true 652 | 653 | /@sveltejs/adapter-auto@2.1.0(@sveltejs/kit@1.24.0): 654 | resolution: {integrity: sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==} 655 | peerDependencies: 656 | '@sveltejs/kit': ^1.0.0 657 | dependencies: 658 | '@sveltejs/kit': 1.24.0(svelte@4.2.0)(vite@4.4.9) 659 | import-meta-resolve: 3.0.0 660 | dev: true 661 | 662 | /@sveltejs/kit@1.24.0(svelte@4.2.0)(vite@4.4.9): 663 | resolution: {integrity: sha512-r7Gj0/VcdAIRL1yE1cJ5rurWJ5drrR7BzRv+P+NAathtvnMCi0u4FhezO7T4bj7DJdQ3TNsax3yQcrVWxh60fg==} 664 | engines: {node: ^16.14 || >=18} 665 | hasBin: true 666 | requiresBuild: true 667 | peerDependencies: 668 | svelte: ^3.54.0 || ^4.0.0-next.0 669 | vite: ^4.0.0 670 | dependencies: 671 | '@sveltejs/vite-plugin-svelte': 2.4.5(svelte@4.2.0)(vite@4.4.9) 672 | '@types/cookie': 0.5.1 673 | cookie: 0.5.0 674 | devalue: 4.3.2 675 | esm-env: 1.0.0 676 | kleur: 4.1.5 677 | magic-string: 0.30.3 678 | mime: 3.0.0 679 | sade: 1.8.1 680 | set-cookie-parser: 2.6.0 681 | sirv: 2.0.3 682 | svelte: 4.2.0 683 | tiny-glob: 0.2.9 684 | undici: 5.23.0 685 | vite: 4.4.9 686 | transitivePeerDependencies: 687 | - supports-color 688 | dev: true 689 | 690 | /@sveltejs/package@2.2.2(svelte@4.2.0)(typescript@5.2.2): 691 | resolution: {integrity: sha512-rP3sVv6cAntcdcG4r4KspLU6nZYYUrHJBAX3Arrw0KJFdgxtlsi2iDwN0Jwr/vIkgjcU0ZPWM8kkT5kpZDlWAw==} 692 | engines: {node: ^16.14 || >=18} 693 | hasBin: true 694 | peerDependencies: 695 | svelte: ^3.44.0 || ^4.0.0 696 | dependencies: 697 | chokidar: 3.5.3 698 | kleur: 4.1.5 699 | sade: 1.8.1 700 | semver: 7.5.4 701 | svelte: 4.2.0 702 | svelte2tsx: 0.6.21(svelte@4.2.0)(typescript@5.2.2) 703 | transitivePeerDependencies: 704 | - typescript 705 | dev: true 706 | 707 | /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.5)(svelte@4.2.0)(vite@4.4.9): 708 | resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} 709 | engines: {node: ^14.18.0 || >= 16} 710 | peerDependencies: 711 | '@sveltejs/vite-plugin-svelte': ^2.2.0 712 | svelte: ^3.54.0 || ^4.0.0 713 | vite: ^4.0.0 714 | dependencies: 715 | '@sveltejs/vite-plugin-svelte': 2.4.5(svelte@4.2.0)(vite@4.4.9) 716 | debug: 4.3.4 717 | svelte: 4.2.0 718 | vite: 4.4.9 719 | transitivePeerDependencies: 720 | - supports-color 721 | dev: true 722 | 723 | /@sveltejs/vite-plugin-svelte@2.4.5(svelte@4.2.0)(vite@4.4.9): 724 | resolution: {integrity: sha512-UJKsFNwhzCVuiZd06jM/psscyNJNDwjQC+qIeb7GBJK9iWeQCcIyfcPWDvbCudfcJggY9jtxJeeaZH7uny93FQ==} 725 | engines: {node: ^14.18.0 || >= 16} 726 | peerDependencies: 727 | svelte: ^3.54.0 || ^4.0.0 728 | vite: ^4.0.0 729 | dependencies: 730 | '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.4.5)(svelte@4.2.0)(vite@4.4.9) 731 | debug: 4.3.4 732 | deepmerge: 4.3.1 733 | kleur: 4.1.5 734 | magic-string: 0.30.3 735 | svelte: 4.2.0 736 | svelte-hmr: 0.15.3(svelte@4.2.0) 737 | vite: 4.4.9 738 | vitefu: 0.2.4(vite@4.4.9) 739 | transitivePeerDependencies: 740 | - supports-color 741 | dev: true 742 | 743 | /@types/cookie@0.5.1: 744 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} 745 | dev: true 746 | 747 | /@types/estree@1.0.1: 748 | resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} 749 | dev: true 750 | 751 | /@types/json-schema@7.0.12: 752 | resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} 753 | dev: true 754 | 755 | /@types/minimist@1.2.2: 756 | resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} 757 | dev: true 758 | 759 | /@types/node@20.5.9: 760 | resolution: {integrity: sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==} 761 | dev: true 762 | 763 | /@types/normalize-package-data@2.4.1: 764 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 765 | dev: true 766 | 767 | /@types/pug@2.0.6: 768 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} 769 | dev: true 770 | 771 | /@types/semver@7.5.1: 772 | resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} 773 | dev: true 774 | 775 | /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.2.2): 776 | resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} 777 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 778 | peerDependencies: 779 | '@typescript-eslint/parser': ^5.0.0 780 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 781 | typescript: '*' 782 | peerDependenciesMeta: 783 | typescript: 784 | optional: true 785 | dependencies: 786 | '@eslint-community/regexpp': 4.8.0 787 | '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2) 788 | '@typescript-eslint/scope-manager': 5.62.0 789 | '@typescript-eslint/type-utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2) 790 | '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2) 791 | debug: 4.3.4 792 | eslint: 8.48.0 793 | graphemer: 1.4.0 794 | ignore: 5.2.4 795 | natural-compare-lite: 1.4.0 796 | semver: 7.5.4 797 | tsutils: 3.21.0(typescript@5.2.2) 798 | typescript: 5.2.2 799 | transitivePeerDependencies: 800 | - supports-color 801 | dev: true 802 | 803 | /@typescript-eslint/parser@5.62.0(eslint@8.48.0)(typescript@5.2.2): 804 | resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} 805 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 806 | peerDependencies: 807 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 808 | typescript: '*' 809 | peerDependenciesMeta: 810 | typescript: 811 | optional: true 812 | dependencies: 813 | '@typescript-eslint/scope-manager': 5.62.0 814 | '@typescript-eslint/types': 5.62.0 815 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) 816 | debug: 4.3.4 817 | eslint: 8.48.0 818 | typescript: 5.2.2 819 | transitivePeerDependencies: 820 | - supports-color 821 | dev: true 822 | 823 | /@typescript-eslint/scope-manager@5.62.0: 824 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} 825 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 826 | dependencies: 827 | '@typescript-eslint/types': 5.62.0 828 | '@typescript-eslint/visitor-keys': 5.62.0 829 | dev: true 830 | 831 | /@typescript-eslint/type-utils@5.62.0(eslint@8.48.0)(typescript@5.2.2): 832 | resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} 833 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 834 | peerDependencies: 835 | eslint: '*' 836 | typescript: '*' 837 | peerDependenciesMeta: 838 | typescript: 839 | optional: true 840 | dependencies: 841 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) 842 | '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2) 843 | debug: 4.3.4 844 | eslint: 8.48.0 845 | tsutils: 3.21.0(typescript@5.2.2) 846 | typescript: 5.2.2 847 | transitivePeerDependencies: 848 | - supports-color 849 | dev: true 850 | 851 | /@typescript-eslint/types@5.62.0: 852 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} 853 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 854 | dev: true 855 | 856 | /@typescript-eslint/typescript-estree@5.62.0(typescript@5.2.2): 857 | resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} 858 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 859 | peerDependencies: 860 | typescript: '*' 861 | peerDependenciesMeta: 862 | typescript: 863 | optional: true 864 | dependencies: 865 | '@typescript-eslint/types': 5.62.0 866 | '@typescript-eslint/visitor-keys': 5.62.0 867 | debug: 4.3.4 868 | globby: 11.1.0 869 | is-glob: 4.0.3 870 | semver: 7.5.4 871 | tsutils: 3.21.0(typescript@5.2.2) 872 | typescript: 5.2.2 873 | transitivePeerDependencies: 874 | - supports-color 875 | dev: true 876 | 877 | /@typescript-eslint/utils@5.62.0(eslint@8.48.0)(typescript@5.2.2): 878 | resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} 879 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 880 | peerDependencies: 881 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 882 | dependencies: 883 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) 884 | '@types/json-schema': 7.0.12 885 | '@types/semver': 7.5.1 886 | '@typescript-eslint/scope-manager': 5.62.0 887 | '@typescript-eslint/types': 5.62.0 888 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) 889 | eslint: 8.48.0 890 | eslint-scope: 5.1.1 891 | semver: 7.5.4 892 | transitivePeerDependencies: 893 | - supports-color 894 | - typescript 895 | dev: true 896 | 897 | /@typescript-eslint/visitor-keys@5.62.0: 898 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} 899 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 900 | dependencies: 901 | '@typescript-eslint/types': 5.62.0 902 | eslint-visitor-keys: 3.4.3 903 | dev: true 904 | 905 | /acorn-jsx@5.3.2(acorn@8.10.0): 906 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 907 | peerDependencies: 908 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 909 | dependencies: 910 | acorn: 8.10.0 911 | dev: true 912 | 913 | /acorn@8.10.0: 914 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} 915 | engines: {node: '>=0.4.0'} 916 | hasBin: true 917 | dev: true 918 | 919 | /ajv@6.12.6: 920 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 921 | dependencies: 922 | fast-deep-equal: 3.1.3 923 | fast-json-stable-stringify: 2.1.0 924 | json-schema-traverse: 0.4.1 925 | uri-js: 4.4.1 926 | dev: true 927 | 928 | /ansi-regex@5.0.1: 929 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 930 | engines: {node: '>=8'} 931 | dev: true 932 | 933 | /ansi-styles@3.2.1: 934 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 935 | engines: {node: '>=4'} 936 | dependencies: 937 | color-convert: 1.9.3 938 | dev: true 939 | 940 | /ansi-styles@4.3.0: 941 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 942 | engines: {node: '>=8'} 943 | dependencies: 944 | color-convert: 2.0.1 945 | dev: true 946 | 947 | /any-promise@1.3.0: 948 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 949 | dev: true 950 | 951 | /anymatch@3.1.3: 952 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 953 | engines: {node: '>= 8'} 954 | dependencies: 955 | normalize-path: 3.0.0 956 | picomatch: 2.3.1 957 | dev: true 958 | 959 | /argparse@2.0.1: 960 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 961 | dev: true 962 | 963 | /aria-query@5.3.0: 964 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 965 | dependencies: 966 | dequal: 2.0.3 967 | dev: true 968 | 969 | /array-union@2.1.0: 970 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 971 | engines: {node: '>=8'} 972 | dev: true 973 | 974 | /arrify@1.0.1: 975 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} 976 | engines: {node: '>=0.10.0'} 977 | dev: true 978 | 979 | /axobject-query@3.2.1: 980 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} 981 | dependencies: 982 | dequal: 2.0.3 983 | dev: true 984 | 985 | /balanced-match@1.0.2: 986 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 987 | dev: true 988 | 989 | /binary-extensions@2.2.0: 990 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 991 | engines: {node: '>=8'} 992 | dev: true 993 | 994 | /brace-expansion@1.1.11: 995 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 996 | dependencies: 997 | balanced-match: 1.0.2 998 | concat-map: 0.0.1 999 | dev: true 1000 | 1001 | /brace-expansion@2.0.1: 1002 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 1003 | dependencies: 1004 | balanced-match: 1.0.2 1005 | dev: true 1006 | 1007 | /braces@3.0.2: 1008 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1009 | engines: {node: '>=8'} 1010 | dependencies: 1011 | fill-range: 7.0.1 1012 | dev: true 1013 | 1014 | /browserslist@4.21.10: 1015 | resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} 1016 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1017 | hasBin: true 1018 | dependencies: 1019 | caniuse-lite: 1.0.30001524 1020 | electron-to-chromium: 1.4.503 1021 | node-releases: 2.0.13 1022 | update-browserslist-db: 1.0.11(browserslist@4.21.10) 1023 | dev: true 1024 | 1025 | /buffer-crc32@0.2.13: 1026 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 1027 | dev: true 1028 | 1029 | /bundle-require@4.0.1(esbuild@0.18.20): 1030 | resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} 1031 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1032 | peerDependencies: 1033 | esbuild: '>=0.17' 1034 | dependencies: 1035 | esbuild: 0.18.20 1036 | load-tsconfig: 0.2.5 1037 | dev: true 1038 | 1039 | /busboy@1.6.0: 1040 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 1041 | engines: {node: '>=10.16.0'} 1042 | dependencies: 1043 | streamsearch: 1.1.0 1044 | dev: true 1045 | 1046 | /cac@6.7.14: 1047 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 1048 | engines: {node: '>=8'} 1049 | dev: true 1050 | 1051 | /callsites@3.1.0: 1052 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1053 | engines: {node: '>=6'} 1054 | dev: true 1055 | 1056 | /camelcase-keys@8.0.2: 1057 | resolution: {integrity: sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==} 1058 | engines: {node: '>=14.16'} 1059 | dependencies: 1060 | camelcase: 7.0.1 1061 | map-obj: 4.3.0 1062 | quick-lru: 6.1.2 1063 | type-fest: 2.19.0 1064 | dev: true 1065 | 1066 | /camelcase@7.0.1: 1067 | resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} 1068 | engines: {node: '>=14.16'} 1069 | dev: true 1070 | 1071 | /caniuse-lite@1.0.30001524: 1072 | resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==} 1073 | dev: true 1074 | 1075 | /chalk@2.4.2: 1076 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1077 | engines: {node: '>=4'} 1078 | dependencies: 1079 | ansi-styles: 3.2.1 1080 | escape-string-regexp: 1.0.5 1081 | supports-color: 5.5.0 1082 | dev: true 1083 | 1084 | /chalk@4.1.2: 1085 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1086 | engines: {node: '>=10'} 1087 | dependencies: 1088 | ansi-styles: 4.3.0 1089 | supports-color: 7.2.0 1090 | dev: true 1091 | 1092 | /chokidar@3.5.3: 1093 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 1094 | engines: {node: '>= 8.10.0'} 1095 | dependencies: 1096 | anymatch: 3.1.3 1097 | braces: 3.0.2 1098 | glob-parent: 5.1.2 1099 | is-binary-path: 2.1.0 1100 | is-glob: 4.0.3 1101 | normalize-path: 3.0.0 1102 | readdirp: 3.6.0 1103 | optionalDependencies: 1104 | fsevents: 2.3.3 1105 | dev: true 1106 | 1107 | /code-red@1.0.4: 1108 | resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} 1109 | dependencies: 1110 | '@jridgewell/sourcemap-codec': 1.4.15 1111 | '@types/estree': 1.0.1 1112 | acorn: 8.10.0 1113 | estree-walker: 3.0.3 1114 | periscopic: 3.1.0 1115 | dev: true 1116 | 1117 | /color-convert@1.9.3: 1118 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1119 | dependencies: 1120 | color-name: 1.1.3 1121 | dev: true 1122 | 1123 | /color-convert@2.0.1: 1124 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1125 | engines: {node: '>=7.0.0'} 1126 | dependencies: 1127 | color-name: 1.1.4 1128 | dev: true 1129 | 1130 | /color-name@1.1.3: 1131 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1132 | dev: true 1133 | 1134 | /color-name@1.1.4: 1135 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1136 | dev: true 1137 | 1138 | /commander@4.1.1: 1139 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 1140 | engines: {node: '>= 6'} 1141 | dev: true 1142 | 1143 | /concat-map@0.0.1: 1144 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1145 | dev: true 1146 | 1147 | /cookie@0.5.0: 1148 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 1149 | engines: {node: '>= 0.6'} 1150 | dev: true 1151 | 1152 | /cross-spawn@7.0.3: 1153 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1154 | engines: {node: '>= 8'} 1155 | dependencies: 1156 | path-key: 3.1.1 1157 | shebang-command: 2.0.0 1158 | which: 2.0.2 1159 | dev: true 1160 | 1161 | /css-tree@2.3.1: 1162 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} 1163 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} 1164 | dependencies: 1165 | mdn-data: 2.0.30 1166 | source-map-js: 1.0.2 1167 | dev: true 1168 | 1169 | /cssesc@3.0.0: 1170 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1171 | engines: {node: '>=4'} 1172 | hasBin: true 1173 | dev: true 1174 | 1175 | /debug@4.3.4: 1176 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1177 | engines: {node: '>=6.0'} 1178 | peerDependencies: 1179 | supports-color: '*' 1180 | peerDependenciesMeta: 1181 | supports-color: 1182 | optional: true 1183 | dependencies: 1184 | ms: 2.1.2 1185 | dev: true 1186 | 1187 | /decamelize-keys@1.1.1: 1188 | resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} 1189 | engines: {node: '>=0.10.0'} 1190 | dependencies: 1191 | decamelize: 1.2.0 1192 | map-obj: 1.0.1 1193 | dev: true 1194 | 1195 | /decamelize@1.2.0: 1196 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 1197 | engines: {node: '>=0.10.0'} 1198 | dev: true 1199 | 1200 | /decamelize@6.0.0: 1201 | resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} 1202 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1203 | dev: true 1204 | 1205 | /dedent-js@1.0.1: 1206 | resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} 1207 | dev: true 1208 | 1209 | /deep-is@0.1.4: 1210 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1211 | dev: true 1212 | 1213 | /deepmerge@4.3.1: 1214 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1215 | engines: {node: '>=0.10.0'} 1216 | dev: true 1217 | 1218 | /dequal@2.0.3: 1219 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 1220 | engines: {node: '>=6'} 1221 | dev: true 1222 | 1223 | /detect-indent@6.1.0: 1224 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 1225 | engines: {node: '>=8'} 1226 | dev: true 1227 | 1228 | /devalue@4.3.2: 1229 | resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} 1230 | dev: true 1231 | 1232 | /dir-glob@3.0.1: 1233 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1234 | engines: {node: '>=8'} 1235 | dependencies: 1236 | path-type: 4.0.0 1237 | dev: true 1238 | 1239 | /doctrine@3.0.0: 1240 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1241 | engines: {node: '>=6.0.0'} 1242 | dependencies: 1243 | esutils: 2.0.3 1244 | dev: true 1245 | 1246 | /electron-to-chromium@1.4.503: 1247 | resolution: {integrity: sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==} 1248 | dev: true 1249 | 1250 | /error-ex@1.3.2: 1251 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1252 | dependencies: 1253 | is-arrayish: 0.2.1 1254 | dev: true 1255 | 1256 | /es6-promise@3.3.1: 1257 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} 1258 | dev: true 1259 | 1260 | /esbuild@0.17.19: 1261 | resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} 1262 | engines: {node: '>=12'} 1263 | hasBin: true 1264 | requiresBuild: true 1265 | optionalDependencies: 1266 | '@esbuild/android-arm': 0.17.19 1267 | '@esbuild/android-arm64': 0.17.19 1268 | '@esbuild/android-x64': 0.17.19 1269 | '@esbuild/darwin-arm64': 0.17.19 1270 | '@esbuild/darwin-x64': 0.17.19 1271 | '@esbuild/freebsd-arm64': 0.17.19 1272 | '@esbuild/freebsd-x64': 0.17.19 1273 | '@esbuild/linux-arm': 0.17.19 1274 | '@esbuild/linux-arm64': 0.17.19 1275 | '@esbuild/linux-ia32': 0.17.19 1276 | '@esbuild/linux-loong64': 0.17.19 1277 | '@esbuild/linux-mips64el': 0.17.19 1278 | '@esbuild/linux-ppc64': 0.17.19 1279 | '@esbuild/linux-riscv64': 0.17.19 1280 | '@esbuild/linux-s390x': 0.17.19 1281 | '@esbuild/linux-x64': 0.17.19 1282 | '@esbuild/netbsd-x64': 0.17.19 1283 | '@esbuild/openbsd-x64': 0.17.19 1284 | '@esbuild/sunos-x64': 0.17.19 1285 | '@esbuild/win32-arm64': 0.17.19 1286 | '@esbuild/win32-ia32': 0.17.19 1287 | '@esbuild/win32-x64': 0.17.19 1288 | dev: true 1289 | 1290 | /esbuild@0.18.20: 1291 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} 1292 | engines: {node: '>=12'} 1293 | hasBin: true 1294 | requiresBuild: true 1295 | optionalDependencies: 1296 | '@esbuild/android-arm': 0.18.20 1297 | '@esbuild/android-arm64': 0.18.20 1298 | '@esbuild/android-x64': 0.18.20 1299 | '@esbuild/darwin-arm64': 0.18.20 1300 | '@esbuild/darwin-x64': 0.18.20 1301 | '@esbuild/freebsd-arm64': 0.18.20 1302 | '@esbuild/freebsd-x64': 0.18.20 1303 | '@esbuild/linux-arm': 0.18.20 1304 | '@esbuild/linux-arm64': 0.18.20 1305 | '@esbuild/linux-ia32': 0.18.20 1306 | '@esbuild/linux-loong64': 0.18.20 1307 | '@esbuild/linux-mips64el': 0.18.20 1308 | '@esbuild/linux-ppc64': 0.18.20 1309 | '@esbuild/linux-riscv64': 0.18.20 1310 | '@esbuild/linux-s390x': 0.18.20 1311 | '@esbuild/linux-x64': 0.18.20 1312 | '@esbuild/netbsd-x64': 0.18.20 1313 | '@esbuild/openbsd-x64': 0.18.20 1314 | '@esbuild/sunos-x64': 0.18.20 1315 | '@esbuild/win32-arm64': 0.18.20 1316 | '@esbuild/win32-ia32': 0.18.20 1317 | '@esbuild/win32-x64': 0.18.20 1318 | dev: true 1319 | 1320 | /escalade@3.1.1: 1321 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1322 | engines: {node: '>=6'} 1323 | dev: true 1324 | 1325 | /escape-string-regexp@1.0.5: 1326 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1327 | engines: {node: '>=0.8.0'} 1328 | dev: true 1329 | 1330 | /escape-string-regexp@4.0.0: 1331 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1332 | engines: {node: '>=10'} 1333 | dev: true 1334 | 1335 | /eslint-config-prettier@8.10.0(eslint@8.48.0): 1336 | resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} 1337 | hasBin: true 1338 | peerDependencies: 1339 | eslint: '>=7.0.0' 1340 | dependencies: 1341 | eslint: 8.48.0 1342 | dev: true 1343 | 1344 | /eslint-plugin-svelte@2.33.0(eslint@8.48.0)(svelte@4.2.0): 1345 | resolution: {integrity: sha512-kk7Z4BfxVjFYJseFcOpS8kiKNio7KnAnhFagmM89h1wNSKlM7tIn+uguNQppKM9leYW+S+Us0Rjg2Qg3zsEcvg==} 1346 | engines: {node: ^14.17.0 || >=16.0.0} 1347 | peerDependencies: 1348 | eslint: ^7.0.0 || ^8.0.0-0 1349 | svelte: ^3.37.0 || ^4.0.0 1350 | peerDependenciesMeta: 1351 | svelte: 1352 | optional: true 1353 | dependencies: 1354 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) 1355 | '@jridgewell/sourcemap-codec': 1.4.15 1356 | debug: 4.3.4 1357 | eslint: 8.48.0 1358 | esutils: 2.0.3 1359 | known-css-properties: 0.28.0 1360 | postcss: 8.4.29 1361 | postcss-load-config: 3.1.4(postcss@8.4.29) 1362 | postcss-safe-parser: 6.0.0(postcss@8.4.29) 1363 | postcss-selector-parser: 6.0.13 1364 | semver: 7.5.4 1365 | svelte: 4.2.0 1366 | svelte-eslint-parser: 0.33.0(svelte@4.2.0) 1367 | transitivePeerDependencies: 1368 | - supports-color 1369 | - ts-node 1370 | dev: true 1371 | 1372 | /eslint-scope@5.1.1: 1373 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1374 | engines: {node: '>=8.0.0'} 1375 | dependencies: 1376 | esrecurse: 4.3.0 1377 | estraverse: 4.3.0 1378 | dev: true 1379 | 1380 | /eslint-scope@7.2.2: 1381 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1382 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1383 | dependencies: 1384 | esrecurse: 4.3.0 1385 | estraverse: 5.3.0 1386 | dev: true 1387 | 1388 | /eslint-visitor-keys@3.4.3: 1389 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1390 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1391 | dev: true 1392 | 1393 | /eslint@8.48.0: 1394 | resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==} 1395 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1396 | hasBin: true 1397 | dependencies: 1398 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) 1399 | '@eslint-community/regexpp': 4.8.0 1400 | '@eslint/eslintrc': 2.1.2 1401 | '@eslint/js': 8.48.0 1402 | '@humanwhocodes/config-array': 0.11.11 1403 | '@humanwhocodes/module-importer': 1.0.1 1404 | '@nodelib/fs.walk': 1.2.8 1405 | ajv: 6.12.6 1406 | chalk: 4.1.2 1407 | cross-spawn: 7.0.3 1408 | debug: 4.3.4 1409 | doctrine: 3.0.0 1410 | escape-string-regexp: 4.0.0 1411 | eslint-scope: 7.2.2 1412 | eslint-visitor-keys: 3.4.3 1413 | espree: 9.6.1 1414 | esquery: 1.5.0 1415 | esutils: 2.0.3 1416 | fast-deep-equal: 3.1.3 1417 | file-entry-cache: 6.0.1 1418 | find-up: 5.0.0 1419 | glob-parent: 6.0.2 1420 | globals: 13.21.0 1421 | graphemer: 1.4.0 1422 | ignore: 5.2.4 1423 | imurmurhash: 0.1.4 1424 | is-glob: 4.0.3 1425 | is-path-inside: 3.0.3 1426 | js-yaml: 4.1.0 1427 | json-stable-stringify-without-jsonify: 1.0.1 1428 | levn: 0.4.1 1429 | lodash.merge: 4.6.2 1430 | minimatch: 3.1.2 1431 | natural-compare: 1.4.0 1432 | optionator: 0.9.3 1433 | strip-ansi: 6.0.1 1434 | text-table: 0.2.0 1435 | transitivePeerDependencies: 1436 | - supports-color 1437 | dev: true 1438 | 1439 | /esm-env@1.0.0: 1440 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} 1441 | dev: true 1442 | 1443 | /espree@9.6.1: 1444 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1445 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1446 | dependencies: 1447 | acorn: 8.10.0 1448 | acorn-jsx: 5.3.2(acorn@8.10.0) 1449 | eslint-visitor-keys: 3.4.3 1450 | dev: true 1451 | 1452 | /esquery@1.5.0: 1453 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1454 | engines: {node: '>=0.10'} 1455 | dependencies: 1456 | estraverse: 5.3.0 1457 | dev: true 1458 | 1459 | /esrecurse@4.3.0: 1460 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1461 | engines: {node: '>=4.0'} 1462 | dependencies: 1463 | estraverse: 5.3.0 1464 | dev: true 1465 | 1466 | /estraverse@4.3.0: 1467 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1468 | engines: {node: '>=4.0'} 1469 | dev: true 1470 | 1471 | /estraverse@5.3.0: 1472 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1473 | engines: {node: '>=4.0'} 1474 | dev: true 1475 | 1476 | /estree-walker@3.0.3: 1477 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1478 | dependencies: 1479 | '@types/estree': 1.0.1 1480 | dev: true 1481 | 1482 | /esutils@2.0.3: 1483 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1484 | engines: {node: '>=0.10.0'} 1485 | dev: true 1486 | 1487 | /execa@5.1.1: 1488 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1489 | engines: {node: '>=10'} 1490 | dependencies: 1491 | cross-spawn: 7.0.3 1492 | get-stream: 6.0.1 1493 | human-signals: 2.1.0 1494 | is-stream: 2.0.1 1495 | merge-stream: 2.0.0 1496 | npm-run-path: 4.0.1 1497 | onetime: 5.1.2 1498 | signal-exit: 3.0.7 1499 | strip-final-newline: 2.0.0 1500 | dev: true 1501 | 1502 | /fast-deep-equal@3.1.3: 1503 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1504 | dev: true 1505 | 1506 | /fast-glob@3.3.1: 1507 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 1508 | engines: {node: '>=8.6.0'} 1509 | dependencies: 1510 | '@nodelib/fs.stat': 2.0.5 1511 | '@nodelib/fs.walk': 1.2.8 1512 | glob-parent: 5.1.2 1513 | merge2: 1.4.1 1514 | micromatch: 4.0.5 1515 | dev: true 1516 | 1517 | /fast-json-stable-stringify@2.1.0: 1518 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1519 | dev: true 1520 | 1521 | /fast-levenshtein@2.0.6: 1522 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1523 | dev: true 1524 | 1525 | /fastq@1.15.0: 1526 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1527 | dependencies: 1528 | reusify: 1.0.4 1529 | dev: true 1530 | 1531 | /file-entry-cache@6.0.1: 1532 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1533 | engines: {node: ^10.12.0 || >=12.0.0} 1534 | dependencies: 1535 | flat-cache: 3.1.0 1536 | dev: true 1537 | 1538 | /fill-range@7.0.1: 1539 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1540 | engines: {node: '>=8'} 1541 | dependencies: 1542 | to-regex-range: 5.0.1 1543 | dev: true 1544 | 1545 | /find-up@5.0.0: 1546 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1547 | engines: {node: '>=10'} 1548 | dependencies: 1549 | locate-path: 6.0.0 1550 | path-exists: 4.0.0 1551 | dev: true 1552 | 1553 | /find-up@6.3.0: 1554 | resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} 1555 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1556 | dependencies: 1557 | locate-path: 7.2.0 1558 | path-exists: 5.0.0 1559 | dev: true 1560 | 1561 | /flat-cache@3.1.0: 1562 | resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} 1563 | engines: {node: '>=12.0.0'} 1564 | dependencies: 1565 | flatted: 3.2.7 1566 | keyv: 4.5.3 1567 | rimraf: 3.0.2 1568 | dev: true 1569 | 1570 | /flatted@3.2.7: 1571 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1572 | dev: true 1573 | 1574 | /fs.realpath@1.0.0: 1575 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1576 | dev: true 1577 | 1578 | /fsevents@2.3.2: 1579 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1580 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1581 | os: [darwin] 1582 | requiresBuild: true 1583 | dev: true 1584 | optional: true 1585 | 1586 | /fsevents@2.3.3: 1587 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1588 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1589 | os: [darwin] 1590 | requiresBuild: true 1591 | dev: true 1592 | optional: true 1593 | 1594 | /function-bind@1.1.1: 1595 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1596 | dev: true 1597 | 1598 | /get-stream@6.0.1: 1599 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1600 | engines: {node: '>=10'} 1601 | dev: true 1602 | 1603 | /glob-parent@5.1.2: 1604 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1605 | engines: {node: '>= 6'} 1606 | dependencies: 1607 | is-glob: 4.0.3 1608 | dev: true 1609 | 1610 | /glob-parent@6.0.2: 1611 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1612 | engines: {node: '>=10.13.0'} 1613 | dependencies: 1614 | is-glob: 4.0.3 1615 | dev: true 1616 | 1617 | /glob@7.1.6: 1618 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1619 | dependencies: 1620 | fs.realpath: 1.0.0 1621 | inflight: 1.0.6 1622 | inherits: 2.0.4 1623 | minimatch: 3.1.2 1624 | once: 1.4.0 1625 | path-is-absolute: 1.0.1 1626 | dev: true 1627 | 1628 | /glob@8.1.0: 1629 | resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} 1630 | engines: {node: '>=12'} 1631 | dependencies: 1632 | fs.realpath: 1.0.0 1633 | inflight: 1.0.6 1634 | inherits: 2.0.4 1635 | minimatch: 5.1.6 1636 | once: 1.4.0 1637 | dev: true 1638 | 1639 | /globals@13.21.0: 1640 | resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} 1641 | engines: {node: '>=8'} 1642 | dependencies: 1643 | type-fest: 0.20.2 1644 | dev: true 1645 | 1646 | /globalyzer@0.1.0: 1647 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 1648 | dev: true 1649 | 1650 | /globby@11.1.0: 1651 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1652 | engines: {node: '>=10'} 1653 | dependencies: 1654 | array-union: 2.1.0 1655 | dir-glob: 3.0.1 1656 | fast-glob: 3.3.1 1657 | ignore: 5.2.4 1658 | merge2: 1.4.1 1659 | slash: 3.0.0 1660 | dev: true 1661 | 1662 | /globrex@0.1.2: 1663 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1664 | dev: true 1665 | 1666 | /graceful-fs@4.2.11: 1667 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1668 | dev: true 1669 | 1670 | /graphemer@1.4.0: 1671 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1672 | dev: true 1673 | 1674 | /hard-rejection@2.1.0: 1675 | resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 1676 | engines: {node: '>=6'} 1677 | dev: true 1678 | 1679 | /has-flag@3.0.0: 1680 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1681 | engines: {node: '>=4'} 1682 | dev: true 1683 | 1684 | /has-flag@4.0.0: 1685 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1686 | engines: {node: '>=8'} 1687 | dev: true 1688 | 1689 | /has@1.0.3: 1690 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1691 | engines: {node: '>= 0.4.0'} 1692 | dependencies: 1693 | function-bind: 1.1.1 1694 | dev: true 1695 | 1696 | /hosted-git-info@4.1.0: 1697 | resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} 1698 | engines: {node: '>=10'} 1699 | dependencies: 1700 | lru-cache: 6.0.0 1701 | dev: true 1702 | 1703 | /hosted-git-info@5.2.1: 1704 | resolution: {integrity: sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==} 1705 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1706 | dependencies: 1707 | lru-cache: 7.18.3 1708 | dev: true 1709 | 1710 | /human-signals@2.1.0: 1711 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1712 | engines: {node: '>=10.17.0'} 1713 | dev: true 1714 | 1715 | /ignore-walk@5.0.1: 1716 | resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} 1717 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1718 | dependencies: 1719 | minimatch: 5.1.6 1720 | dev: true 1721 | 1722 | /ignore@5.2.4: 1723 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1724 | engines: {node: '>= 4'} 1725 | dev: true 1726 | 1727 | /import-fresh@3.3.0: 1728 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1729 | engines: {node: '>=6'} 1730 | dependencies: 1731 | parent-module: 1.0.1 1732 | resolve-from: 4.0.0 1733 | dev: true 1734 | 1735 | /import-meta-resolve@3.0.0: 1736 | resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==} 1737 | dev: true 1738 | 1739 | /imurmurhash@0.1.4: 1740 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1741 | engines: {node: '>=0.8.19'} 1742 | dev: true 1743 | 1744 | /indent-string@5.0.0: 1745 | resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} 1746 | engines: {node: '>=12'} 1747 | dev: true 1748 | 1749 | /inflight@1.0.6: 1750 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1751 | dependencies: 1752 | once: 1.4.0 1753 | wrappy: 1.0.2 1754 | dev: true 1755 | 1756 | /inherits@2.0.4: 1757 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1758 | dev: true 1759 | 1760 | /is-arrayish@0.2.1: 1761 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1762 | dev: true 1763 | 1764 | /is-binary-path@2.1.0: 1765 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1766 | engines: {node: '>=8'} 1767 | dependencies: 1768 | binary-extensions: 2.2.0 1769 | dev: true 1770 | 1771 | /is-core-module@2.13.0: 1772 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} 1773 | dependencies: 1774 | has: 1.0.3 1775 | dev: true 1776 | 1777 | /is-extglob@2.1.1: 1778 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1779 | engines: {node: '>=0.10.0'} 1780 | dev: true 1781 | 1782 | /is-glob@4.0.3: 1783 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1784 | engines: {node: '>=0.10.0'} 1785 | dependencies: 1786 | is-extglob: 2.1.1 1787 | dev: true 1788 | 1789 | /is-number@7.0.0: 1790 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1791 | engines: {node: '>=0.12.0'} 1792 | dev: true 1793 | 1794 | /is-path-inside@3.0.3: 1795 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1796 | engines: {node: '>=8'} 1797 | dev: true 1798 | 1799 | /is-plain-obj@1.1.0: 1800 | resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} 1801 | engines: {node: '>=0.10.0'} 1802 | dev: true 1803 | 1804 | /is-reference@3.0.1: 1805 | resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} 1806 | dependencies: 1807 | '@types/estree': 1.0.1 1808 | dev: true 1809 | 1810 | /is-stream@2.0.1: 1811 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1812 | engines: {node: '>=8'} 1813 | dev: true 1814 | 1815 | /isexe@2.0.0: 1816 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1817 | dev: true 1818 | 1819 | /joycon@3.1.1: 1820 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1821 | engines: {node: '>=10'} 1822 | dev: true 1823 | 1824 | /js-tokens@4.0.0: 1825 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1826 | dev: true 1827 | 1828 | /js-yaml@4.1.0: 1829 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1830 | hasBin: true 1831 | dependencies: 1832 | argparse: 2.0.1 1833 | dev: true 1834 | 1835 | /json-buffer@3.0.1: 1836 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1837 | dev: true 1838 | 1839 | /json-parse-even-better-errors@2.3.1: 1840 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1841 | dev: true 1842 | 1843 | /json-schema-traverse@0.4.1: 1844 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1845 | dev: true 1846 | 1847 | /json-stable-stringify-without-jsonify@1.0.1: 1848 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1849 | dev: true 1850 | 1851 | /keyv@4.5.3: 1852 | resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} 1853 | dependencies: 1854 | json-buffer: 3.0.1 1855 | dev: true 1856 | 1857 | /kind-of@6.0.3: 1858 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1859 | engines: {node: '>=0.10.0'} 1860 | dev: true 1861 | 1862 | /kleur@4.1.5: 1863 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1864 | engines: {node: '>=6'} 1865 | dev: true 1866 | 1867 | /known-css-properties@0.28.0: 1868 | resolution: {integrity: sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==} 1869 | dev: true 1870 | 1871 | /levn@0.4.1: 1872 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1873 | engines: {node: '>= 0.8.0'} 1874 | dependencies: 1875 | prelude-ls: 1.2.1 1876 | type-check: 0.4.0 1877 | dev: true 1878 | 1879 | /lilconfig@2.1.0: 1880 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1881 | engines: {node: '>=10'} 1882 | dev: true 1883 | 1884 | /lines-and-columns@1.2.4: 1885 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1886 | dev: true 1887 | 1888 | /load-tsconfig@0.2.5: 1889 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1890 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1891 | dev: true 1892 | 1893 | /locate-character@3.0.0: 1894 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 1895 | dev: true 1896 | 1897 | /locate-path@6.0.0: 1898 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1899 | engines: {node: '>=10'} 1900 | dependencies: 1901 | p-locate: 5.0.0 1902 | dev: true 1903 | 1904 | /locate-path@7.2.0: 1905 | resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} 1906 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1907 | dependencies: 1908 | p-locate: 6.0.0 1909 | dev: true 1910 | 1911 | /lodash.merge@4.6.2: 1912 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1913 | dev: true 1914 | 1915 | /lodash.sortby@4.7.0: 1916 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1917 | dev: true 1918 | 1919 | /lower-case@2.0.2: 1920 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 1921 | dependencies: 1922 | tslib: 2.6.2 1923 | dev: true 1924 | 1925 | /lru-cache@6.0.0: 1926 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1927 | engines: {node: '>=10'} 1928 | dependencies: 1929 | yallist: 4.0.0 1930 | dev: true 1931 | 1932 | /lru-cache@7.18.3: 1933 | resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} 1934 | engines: {node: '>=12'} 1935 | dev: true 1936 | 1937 | /magic-string@0.27.0: 1938 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 1939 | engines: {node: '>=12'} 1940 | dependencies: 1941 | '@jridgewell/sourcemap-codec': 1.4.15 1942 | dev: true 1943 | 1944 | /magic-string@0.30.3: 1945 | resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==} 1946 | engines: {node: '>=12'} 1947 | dependencies: 1948 | '@jridgewell/sourcemap-codec': 1.4.15 1949 | dev: true 1950 | 1951 | /map-obj@1.0.1: 1952 | resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} 1953 | engines: {node: '>=0.10.0'} 1954 | dev: true 1955 | 1956 | /map-obj@4.3.0: 1957 | resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} 1958 | engines: {node: '>=8'} 1959 | dev: true 1960 | 1961 | /mdn-data@2.0.30: 1962 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} 1963 | dev: true 1964 | 1965 | /meow@11.0.0: 1966 | resolution: {integrity: sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==} 1967 | engines: {node: '>=14.16'} 1968 | dependencies: 1969 | '@types/minimist': 1.2.2 1970 | camelcase-keys: 8.0.2 1971 | decamelize: 6.0.0 1972 | decamelize-keys: 1.1.1 1973 | hard-rejection: 2.1.0 1974 | minimist-options: 4.1.0 1975 | normalize-package-data: 4.0.1 1976 | read-pkg-up: 9.1.0 1977 | redent: 4.0.0 1978 | trim-newlines: 4.1.1 1979 | type-fest: 3.13.1 1980 | yargs-parser: 21.1.1 1981 | dev: true 1982 | 1983 | /merge-stream@2.0.0: 1984 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1985 | dev: true 1986 | 1987 | /merge2@1.4.1: 1988 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1989 | engines: {node: '>= 8'} 1990 | dev: true 1991 | 1992 | /micromatch@4.0.5: 1993 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1994 | engines: {node: '>=8.6'} 1995 | dependencies: 1996 | braces: 3.0.2 1997 | picomatch: 2.3.1 1998 | dev: true 1999 | 2000 | /mime@3.0.0: 2001 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 2002 | engines: {node: '>=10.0.0'} 2003 | hasBin: true 2004 | dev: true 2005 | 2006 | /mimic-fn@2.1.0: 2007 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 2008 | engines: {node: '>=6'} 2009 | dev: true 2010 | 2011 | /min-indent@1.0.1: 2012 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 2013 | engines: {node: '>=4'} 2014 | dev: true 2015 | 2016 | /minimatch@3.1.2: 2017 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2018 | dependencies: 2019 | brace-expansion: 1.1.11 2020 | dev: true 2021 | 2022 | /minimatch@5.1.6: 2023 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 2024 | engines: {node: '>=10'} 2025 | dependencies: 2026 | brace-expansion: 2.0.1 2027 | dev: true 2028 | 2029 | /minimist-options@4.1.0: 2030 | resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 2031 | engines: {node: '>= 6'} 2032 | dependencies: 2033 | arrify: 1.0.1 2034 | is-plain-obj: 1.1.0 2035 | kind-of: 6.0.3 2036 | dev: true 2037 | 2038 | /minimist@1.2.8: 2039 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 2040 | dev: true 2041 | 2042 | /mkdirp@0.5.6: 2043 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 2044 | hasBin: true 2045 | dependencies: 2046 | minimist: 1.2.8 2047 | dev: true 2048 | 2049 | /mri@1.2.0: 2050 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 2051 | engines: {node: '>=4'} 2052 | dev: true 2053 | 2054 | /mrmime@1.0.1: 2055 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} 2056 | engines: {node: '>=10'} 2057 | dev: true 2058 | 2059 | /ms@2.1.2: 2060 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2061 | dev: true 2062 | 2063 | /mz@2.7.0: 2064 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 2065 | dependencies: 2066 | any-promise: 1.3.0 2067 | object-assign: 4.1.1 2068 | thenify-all: 1.6.0 2069 | dev: true 2070 | 2071 | /nanobundle@1.6.0(typescript@4.9.5): 2072 | resolution: {integrity: sha512-jwksXUVZ5gTiGfzU5KkF8ozl/OfLLoO9/AcrnDuElhaaO8ltf4/M8KOEHiK4ZE68QSDZxS7acCrBho5lVF938Q==} 2073 | engines: {node: '>=16.0.0'} 2074 | hasBin: true 2075 | peerDependencies: 2076 | typescript: ^3.7.0 || ^4.0.0 || ^5.0.0 2077 | peerDependenciesMeta: 2078 | typescript: 2079 | optional: true 2080 | dependencies: 2081 | '@cometjs/core': 2.3.2(typescript@4.9.5) 2082 | browserslist: 4.21.10 2083 | esbuild: 0.17.19 2084 | kleur: 4.1.5 2085 | meow: 11.0.0 2086 | pretty-bytes: 6.1.1 2087 | semver: 7.5.4 2088 | string-dedent: 3.0.1 2089 | tsconfck: 2.1.2(typescript@4.9.5) 2090 | typescript: 4.9.5 2091 | xstate: 4.38.2 2092 | dev: true 2093 | 2094 | /nanoid@3.3.6: 2095 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 2096 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2097 | hasBin: true 2098 | dev: true 2099 | 2100 | /natural-compare-lite@1.4.0: 2101 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 2102 | dev: true 2103 | 2104 | /natural-compare@1.4.0: 2105 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2106 | dev: true 2107 | 2108 | /no-case@3.0.4: 2109 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 2110 | dependencies: 2111 | lower-case: 2.0.2 2112 | tslib: 2.6.2 2113 | dev: true 2114 | 2115 | /node-releases@2.0.13: 2116 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 2117 | dev: true 2118 | 2119 | /normalize-package-data@3.0.3: 2120 | resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} 2121 | engines: {node: '>=10'} 2122 | dependencies: 2123 | hosted-git-info: 4.1.0 2124 | is-core-module: 2.13.0 2125 | semver: 7.5.4 2126 | validate-npm-package-license: 3.0.4 2127 | dev: true 2128 | 2129 | /normalize-package-data@4.0.1: 2130 | resolution: {integrity: sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==} 2131 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 2132 | dependencies: 2133 | hosted-git-info: 5.2.1 2134 | is-core-module: 2.13.0 2135 | semver: 7.5.4 2136 | validate-npm-package-license: 3.0.4 2137 | dev: true 2138 | 2139 | /normalize-path@3.0.0: 2140 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2141 | engines: {node: '>=0.10.0'} 2142 | dev: true 2143 | 2144 | /npm-bundled@2.0.1: 2145 | resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} 2146 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 2147 | dependencies: 2148 | npm-normalize-package-bin: 2.0.0 2149 | dev: true 2150 | 2151 | /npm-normalize-package-bin@2.0.0: 2152 | resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} 2153 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 2154 | dev: true 2155 | 2156 | /npm-packlist@5.1.3: 2157 | resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} 2158 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 2159 | hasBin: true 2160 | dependencies: 2161 | glob: 8.1.0 2162 | ignore-walk: 5.0.1 2163 | npm-bundled: 2.0.1 2164 | npm-normalize-package-bin: 2.0.0 2165 | dev: true 2166 | 2167 | /npm-run-path@4.0.1: 2168 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 2169 | engines: {node: '>=8'} 2170 | dependencies: 2171 | path-key: 3.1.1 2172 | dev: true 2173 | 2174 | /object-assign@4.1.1: 2175 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2176 | engines: {node: '>=0.10.0'} 2177 | dev: true 2178 | 2179 | /once@1.4.0: 2180 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2181 | dependencies: 2182 | wrappy: 1.0.2 2183 | dev: true 2184 | 2185 | /onetime@5.1.2: 2186 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2187 | engines: {node: '>=6'} 2188 | dependencies: 2189 | mimic-fn: 2.1.0 2190 | dev: true 2191 | 2192 | /optionator@0.9.3: 2193 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2194 | engines: {node: '>= 0.8.0'} 2195 | dependencies: 2196 | '@aashutoshrathi/word-wrap': 1.2.6 2197 | deep-is: 0.1.4 2198 | fast-levenshtein: 2.0.6 2199 | levn: 0.4.1 2200 | prelude-ls: 1.2.1 2201 | type-check: 0.4.0 2202 | dev: true 2203 | 2204 | /p-limit@3.1.0: 2205 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2206 | engines: {node: '>=10'} 2207 | dependencies: 2208 | yocto-queue: 0.1.0 2209 | dev: true 2210 | 2211 | /p-limit@4.0.0: 2212 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 2213 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2214 | dependencies: 2215 | yocto-queue: 1.0.0 2216 | dev: true 2217 | 2218 | /p-locate@5.0.0: 2219 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2220 | engines: {node: '>=10'} 2221 | dependencies: 2222 | p-limit: 3.1.0 2223 | dev: true 2224 | 2225 | /p-locate@6.0.0: 2226 | resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} 2227 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2228 | dependencies: 2229 | p-limit: 4.0.0 2230 | dev: true 2231 | 2232 | /parent-module@1.0.1: 2233 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2234 | engines: {node: '>=6'} 2235 | dependencies: 2236 | callsites: 3.1.0 2237 | dev: true 2238 | 2239 | /parse-json@5.2.0: 2240 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 2241 | engines: {node: '>=8'} 2242 | dependencies: 2243 | '@babel/code-frame': 7.22.10 2244 | error-ex: 1.3.2 2245 | json-parse-even-better-errors: 2.3.1 2246 | lines-and-columns: 1.2.4 2247 | dev: true 2248 | 2249 | /pascal-case@3.1.2: 2250 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 2251 | dependencies: 2252 | no-case: 3.0.4 2253 | tslib: 2.6.2 2254 | dev: true 2255 | 2256 | /path-exists@4.0.0: 2257 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2258 | engines: {node: '>=8'} 2259 | dev: true 2260 | 2261 | /path-exists@5.0.0: 2262 | resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} 2263 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2264 | dev: true 2265 | 2266 | /path-is-absolute@1.0.1: 2267 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2268 | engines: {node: '>=0.10.0'} 2269 | dev: true 2270 | 2271 | /path-key@3.1.1: 2272 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2273 | engines: {node: '>=8'} 2274 | dev: true 2275 | 2276 | /path-type@4.0.0: 2277 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2278 | engines: {node: '>=8'} 2279 | dev: true 2280 | 2281 | /periscopic@3.1.0: 2282 | resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} 2283 | dependencies: 2284 | '@types/estree': 1.0.1 2285 | estree-walker: 3.0.3 2286 | is-reference: 3.0.1 2287 | dev: true 2288 | 2289 | /picocolors@1.0.0: 2290 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2291 | dev: true 2292 | 2293 | /picomatch@2.3.1: 2294 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2295 | engines: {node: '>=8.6'} 2296 | dev: true 2297 | 2298 | /pirates@4.0.6: 2299 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 2300 | engines: {node: '>= 6'} 2301 | dev: true 2302 | 2303 | /playwright-core@1.37.1: 2304 | resolution: {integrity: sha512-17EuQxlSIYCmEMwzMqusJ2ztDgJePjrbttaefgdsiqeLWidjYz9BxXaTaZWxH1J95SHGk6tjE+dwgWILJoUZfA==} 2305 | engines: {node: '>=16'} 2306 | hasBin: true 2307 | dev: true 2308 | 2309 | /postcss-load-config@3.1.4(postcss@8.4.29): 2310 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 2311 | engines: {node: '>= 10'} 2312 | peerDependencies: 2313 | postcss: '>=8.0.9' 2314 | ts-node: '>=9.0.0' 2315 | peerDependenciesMeta: 2316 | postcss: 2317 | optional: true 2318 | ts-node: 2319 | optional: true 2320 | dependencies: 2321 | lilconfig: 2.1.0 2322 | postcss: 8.4.29 2323 | yaml: 1.10.2 2324 | dev: true 2325 | 2326 | /postcss-load-config@4.0.1: 2327 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 2328 | engines: {node: '>= 14'} 2329 | peerDependencies: 2330 | postcss: '>=8.0.9' 2331 | ts-node: '>=9.0.0' 2332 | peerDependenciesMeta: 2333 | postcss: 2334 | optional: true 2335 | ts-node: 2336 | optional: true 2337 | dependencies: 2338 | lilconfig: 2.1.0 2339 | yaml: 2.3.1 2340 | dev: true 2341 | 2342 | /postcss-safe-parser@6.0.0(postcss@8.4.29): 2343 | resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} 2344 | engines: {node: '>=12.0'} 2345 | peerDependencies: 2346 | postcss: ^8.3.3 2347 | dependencies: 2348 | postcss: 8.4.29 2349 | dev: true 2350 | 2351 | /postcss-scss@4.0.7(postcss@8.4.29): 2352 | resolution: {integrity: sha512-xPv2GseoyXPa58Nro7M73ZntttusuCmZdeOojUFR5PZDz2BR62vfYx1w9TyOnp1+nYFowgOMipsCBhxzVkAEPw==} 2353 | engines: {node: '>=12.0'} 2354 | peerDependencies: 2355 | postcss: ^8.4.19 2356 | dependencies: 2357 | postcss: 8.4.29 2358 | dev: true 2359 | 2360 | /postcss-selector-parser@6.0.13: 2361 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 2362 | engines: {node: '>=4'} 2363 | dependencies: 2364 | cssesc: 3.0.0 2365 | util-deprecate: 1.0.2 2366 | dev: true 2367 | 2368 | /postcss@8.4.29: 2369 | resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==} 2370 | engines: {node: ^10 || ^12 || >=14} 2371 | dependencies: 2372 | nanoid: 3.3.6 2373 | picocolors: 1.0.0 2374 | source-map-js: 1.0.2 2375 | dev: true 2376 | 2377 | /prelude-ls@1.2.1: 2378 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2379 | engines: {node: '>= 0.8.0'} 2380 | dev: true 2381 | 2382 | /prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.2.0): 2383 | resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==} 2384 | peerDependencies: 2385 | prettier: ^1.16.4 || ^2.0.0 2386 | svelte: ^3.2.0 || ^4.0.0-next.0 2387 | dependencies: 2388 | prettier: 2.8.8 2389 | svelte: 4.2.0 2390 | dev: true 2391 | 2392 | /prettier@2.8.8: 2393 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 2394 | engines: {node: '>=10.13.0'} 2395 | hasBin: true 2396 | 2397 | /pretty-bytes@6.1.1: 2398 | resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} 2399 | engines: {node: ^14.13.1 || >=16.0.0} 2400 | dev: true 2401 | 2402 | /publint@0.1.16: 2403 | resolution: {integrity: sha512-wJgk7HnXDT5Ap0DjFYbGz78kPkN44iQvDiaq8P63IEEyNU9mYXvaMd2cAyIM6OgqXM/IA3CK6XWIsRq+wjNpgw==} 2404 | engines: {node: '>=16'} 2405 | hasBin: true 2406 | dependencies: 2407 | npm-packlist: 5.1.3 2408 | picocolors: 1.0.0 2409 | sade: 1.8.1 2410 | dev: true 2411 | 2412 | /punycode@2.3.0: 2413 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2414 | engines: {node: '>=6'} 2415 | dev: true 2416 | 2417 | /queue-microtask@1.2.3: 2418 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2419 | dev: true 2420 | 2421 | /quick-lru@6.1.2: 2422 | resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==} 2423 | engines: {node: '>=12'} 2424 | dev: true 2425 | 2426 | /read-pkg-up@9.1.0: 2427 | resolution: {integrity: sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==} 2428 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2429 | dependencies: 2430 | find-up: 6.3.0 2431 | read-pkg: 7.1.0 2432 | type-fest: 2.19.0 2433 | dev: true 2434 | 2435 | /read-pkg@7.1.0: 2436 | resolution: {integrity: sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==} 2437 | engines: {node: '>=12.20'} 2438 | dependencies: 2439 | '@types/normalize-package-data': 2.4.1 2440 | normalize-package-data: 3.0.3 2441 | parse-json: 5.2.0 2442 | type-fest: 2.19.0 2443 | dev: true 2444 | 2445 | /readdirp@3.6.0: 2446 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2447 | engines: {node: '>=8.10.0'} 2448 | dependencies: 2449 | picomatch: 2.3.1 2450 | dev: true 2451 | 2452 | /redent@4.0.0: 2453 | resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} 2454 | engines: {node: '>=12'} 2455 | dependencies: 2456 | indent-string: 5.0.0 2457 | strip-indent: 4.0.0 2458 | dev: true 2459 | 2460 | /resolve-from@4.0.0: 2461 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2462 | engines: {node: '>=4'} 2463 | dev: true 2464 | 2465 | /resolve-from@5.0.0: 2466 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2467 | engines: {node: '>=8'} 2468 | dev: true 2469 | 2470 | /reusify@1.0.4: 2471 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2472 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2473 | dev: true 2474 | 2475 | /rimraf@2.7.1: 2476 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 2477 | hasBin: true 2478 | dependencies: 2479 | glob: 7.1.6 2480 | dev: true 2481 | 2482 | /rimraf@3.0.2: 2483 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2484 | hasBin: true 2485 | dependencies: 2486 | glob: 7.1.6 2487 | dev: true 2488 | 2489 | /rollup@3.28.1: 2490 | resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==} 2491 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2492 | hasBin: true 2493 | optionalDependencies: 2494 | fsevents: 2.3.3 2495 | dev: true 2496 | 2497 | /run-parallel@1.2.0: 2498 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2499 | dependencies: 2500 | queue-microtask: 1.2.3 2501 | dev: true 2502 | 2503 | /sade@1.8.1: 2504 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 2505 | engines: {node: '>=6'} 2506 | dependencies: 2507 | mri: 1.2.0 2508 | dev: true 2509 | 2510 | /sander@0.5.1: 2511 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} 2512 | dependencies: 2513 | es6-promise: 3.3.1 2514 | graceful-fs: 4.2.11 2515 | mkdirp: 0.5.6 2516 | rimraf: 2.7.1 2517 | dev: true 2518 | 2519 | /semver@7.5.4: 2520 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2521 | engines: {node: '>=10'} 2522 | hasBin: true 2523 | dependencies: 2524 | lru-cache: 6.0.0 2525 | dev: true 2526 | 2527 | /set-cookie-parser@2.6.0: 2528 | resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} 2529 | dev: true 2530 | 2531 | /shebang-command@2.0.0: 2532 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2533 | engines: {node: '>=8'} 2534 | dependencies: 2535 | shebang-regex: 3.0.0 2536 | dev: true 2537 | 2538 | /shebang-regex@3.0.0: 2539 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2540 | engines: {node: '>=8'} 2541 | dev: true 2542 | 2543 | /signal-exit@3.0.7: 2544 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2545 | dev: true 2546 | 2547 | /sirv@2.0.3: 2548 | resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} 2549 | engines: {node: '>= 10'} 2550 | dependencies: 2551 | '@polka/url': 1.0.0-next.21 2552 | mrmime: 1.0.1 2553 | totalist: 3.0.1 2554 | dev: true 2555 | 2556 | /slash@3.0.0: 2557 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2558 | engines: {node: '>=8'} 2559 | dev: true 2560 | 2561 | /sorcery@0.11.0: 2562 | resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} 2563 | hasBin: true 2564 | dependencies: 2565 | '@jridgewell/sourcemap-codec': 1.4.15 2566 | buffer-crc32: 0.2.13 2567 | minimist: 1.2.8 2568 | sander: 0.5.1 2569 | dev: true 2570 | 2571 | /source-map-js@1.0.2: 2572 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2573 | engines: {node: '>=0.10.0'} 2574 | dev: true 2575 | 2576 | /source-map@0.8.0-beta.0: 2577 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 2578 | engines: {node: '>= 8'} 2579 | dependencies: 2580 | whatwg-url: 7.1.0 2581 | dev: true 2582 | 2583 | /spdx-correct@3.2.0: 2584 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 2585 | dependencies: 2586 | spdx-expression-parse: 3.0.1 2587 | spdx-license-ids: 3.0.13 2588 | dev: true 2589 | 2590 | /spdx-exceptions@2.3.0: 2591 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 2592 | dev: true 2593 | 2594 | /spdx-expression-parse@3.0.1: 2595 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 2596 | dependencies: 2597 | spdx-exceptions: 2.3.0 2598 | spdx-license-ids: 3.0.13 2599 | dev: true 2600 | 2601 | /spdx-license-ids@3.0.13: 2602 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} 2603 | dev: true 2604 | 2605 | /streamsearch@1.1.0: 2606 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 2607 | engines: {node: '>=10.0.0'} 2608 | dev: true 2609 | 2610 | /string-dedent@3.0.1: 2611 | resolution: {integrity: sha512-A2zCXSgpPrpFi1lDJlDwIPYakBWeDtQZ8ZBKssB8M/WbtNEKTzsl1yCDRmHx55jSB27xZDQ6NOtRYekESWx6fw==} 2612 | engines: {node: '>=0.12.0'} 2613 | dev: true 2614 | 2615 | /strip-ansi@6.0.1: 2616 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2617 | engines: {node: '>=8'} 2618 | dependencies: 2619 | ansi-regex: 5.0.1 2620 | dev: true 2621 | 2622 | /strip-final-newline@2.0.0: 2623 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2624 | engines: {node: '>=6'} 2625 | dev: true 2626 | 2627 | /strip-indent@3.0.0: 2628 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 2629 | engines: {node: '>=8'} 2630 | dependencies: 2631 | min-indent: 1.0.1 2632 | dev: true 2633 | 2634 | /strip-indent@4.0.0: 2635 | resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} 2636 | engines: {node: '>=12'} 2637 | dependencies: 2638 | min-indent: 1.0.1 2639 | dev: true 2640 | 2641 | /strip-json-comments@3.1.1: 2642 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2643 | engines: {node: '>=8'} 2644 | dev: true 2645 | 2646 | /sucrase@3.34.0: 2647 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} 2648 | engines: {node: '>=8'} 2649 | hasBin: true 2650 | dependencies: 2651 | '@jridgewell/gen-mapping': 0.3.3 2652 | commander: 4.1.1 2653 | glob: 7.1.6 2654 | lines-and-columns: 1.2.4 2655 | mz: 2.7.0 2656 | pirates: 4.0.6 2657 | ts-interface-checker: 0.1.13 2658 | dev: true 2659 | 2660 | /supports-color@5.5.0: 2661 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2662 | engines: {node: '>=4'} 2663 | dependencies: 2664 | has-flag: 3.0.0 2665 | dev: true 2666 | 2667 | /supports-color@7.2.0: 2668 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2669 | engines: {node: '>=8'} 2670 | dependencies: 2671 | has-flag: 4.0.0 2672 | dev: true 2673 | 2674 | /svelte-check@3.5.1(postcss@8.4.29)(svelte@4.2.0): 2675 | resolution: {integrity: sha512-+Zb4iHxAhdUtcUg/WJPRjlS1RJalIsWAe9Mz6G1zyznSs7dDkT7VUBdXc3q7Iwg49O/VrZgyJRvOJkjuBfKjFA==} 2676 | hasBin: true 2677 | peerDependencies: 2678 | svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 2679 | dependencies: 2680 | '@jridgewell/trace-mapping': 0.3.19 2681 | chokidar: 3.5.3 2682 | fast-glob: 3.3.1 2683 | import-fresh: 3.3.0 2684 | picocolors: 1.0.0 2685 | sade: 1.8.1 2686 | svelte: 4.2.0 2687 | svelte-preprocess: 5.0.4(postcss@8.4.29)(svelte@4.2.0)(typescript@5.2.2) 2688 | typescript: 5.2.2 2689 | transitivePeerDependencies: 2690 | - '@babel/core' 2691 | - coffeescript 2692 | - less 2693 | - postcss 2694 | - postcss-load-config 2695 | - pug 2696 | - sass 2697 | - stylus 2698 | - sugarss 2699 | dev: true 2700 | 2701 | /svelte-eslint-parser@0.33.0(svelte@4.2.0): 2702 | resolution: {integrity: sha512-5awZ6Bs+Tb/zQwa41PSdcLynAVQTwW0HGyCBjtbAQ59taLZqDgQSMzRlDmapjZdDtzERm0oXDZNE0E+PKJ6ryg==} 2703 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2704 | peerDependencies: 2705 | svelte: ^3.37.0 || ^4.0.0 2706 | peerDependenciesMeta: 2707 | svelte: 2708 | optional: true 2709 | dependencies: 2710 | eslint-scope: 7.2.2 2711 | eslint-visitor-keys: 3.4.3 2712 | espree: 9.6.1 2713 | postcss: 8.4.29 2714 | postcss-scss: 4.0.7(postcss@8.4.29) 2715 | svelte: 4.2.0 2716 | dev: true 2717 | 2718 | /svelte-hmr@0.15.3(svelte@4.2.0): 2719 | resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} 2720 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 2721 | peerDependencies: 2722 | svelte: ^3.19.0 || ^4.0.0 2723 | dependencies: 2724 | svelte: 4.2.0 2725 | dev: true 2726 | 2727 | /svelte-preprocess@5.0.4(postcss@8.4.29)(svelte@4.2.0)(typescript@5.2.2): 2728 | resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} 2729 | engines: {node: '>= 14.10.0'} 2730 | requiresBuild: true 2731 | peerDependencies: 2732 | '@babel/core': ^7.10.2 2733 | coffeescript: ^2.5.1 2734 | less: ^3.11.3 || ^4.0.0 2735 | postcss: ^7 || ^8 2736 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 2737 | pug: ^3.0.0 2738 | sass: ^1.26.8 2739 | stylus: ^0.55.0 2740 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 2741 | svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 2742 | typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' 2743 | peerDependenciesMeta: 2744 | '@babel/core': 2745 | optional: true 2746 | coffeescript: 2747 | optional: true 2748 | less: 2749 | optional: true 2750 | postcss: 2751 | optional: true 2752 | postcss-load-config: 2753 | optional: true 2754 | pug: 2755 | optional: true 2756 | sass: 2757 | optional: true 2758 | stylus: 2759 | optional: true 2760 | sugarss: 2761 | optional: true 2762 | typescript: 2763 | optional: true 2764 | dependencies: 2765 | '@types/pug': 2.0.6 2766 | detect-indent: 6.1.0 2767 | magic-string: 0.27.0 2768 | postcss: 8.4.29 2769 | sorcery: 0.11.0 2770 | strip-indent: 3.0.0 2771 | svelte: 4.2.0 2772 | typescript: 5.2.2 2773 | dev: true 2774 | 2775 | /svelte2tsx@0.6.21(svelte@4.2.0)(typescript@5.2.2): 2776 | resolution: {integrity: sha512-v+vvbiy6WDmEQdIkJpvHYxJYG/obALfH0P6CTreYO350q/9+QmFTNCOJvx0O1o59Zpzx1Bqe+qlDxP/KtJSZEA==} 2777 | peerDependencies: 2778 | svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 2779 | typescript: ^4.9.4 || ^5.0.0 2780 | dependencies: 2781 | dedent-js: 1.0.1 2782 | pascal-case: 3.1.2 2783 | svelte: 4.2.0 2784 | typescript: 5.2.2 2785 | dev: true 2786 | 2787 | /svelte@4.2.0: 2788 | resolution: {integrity: sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==} 2789 | engines: {node: '>=16'} 2790 | dependencies: 2791 | '@ampproject/remapping': 2.2.1 2792 | '@jridgewell/sourcemap-codec': 1.4.15 2793 | '@jridgewell/trace-mapping': 0.3.19 2794 | acorn: 8.10.0 2795 | aria-query: 5.3.0 2796 | axobject-query: 3.2.1 2797 | code-red: 1.0.4 2798 | css-tree: 2.3.1 2799 | estree-walker: 3.0.3 2800 | is-reference: 3.0.1 2801 | locate-character: 3.0.0 2802 | magic-string: 0.30.3 2803 | periscopic: 3.1.0 2804 | dev: true 2805 | 2806 | /text-table@0.2.0: 2807 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2808 | dev: true 2809 | 2810 | /thenify-all@1.6.0: 2811 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2812 | engines: {node: '>=0.8'} 2813 | dependencies: 2814 | thenify: 3.3.1 2815 | dev: true 2816 | 2817 | /thenify@3.3.1: 2818 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2819 | dependencies: 2820 | any-promise: 1.3.0 2821 | dev: true 2822 | 2823 | /tiny-glob@0.2.9: 2824 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 2825 | dependencies: 2826 | globalyzer: 0.1.0 2827 | globrex: 0.1.2 2828 | dev: true 2829 | 2830 | /to-regex-range@5.0.1: 2831 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2832 | engines: {node: '>=8.0'} 2833 | dependencies: 2834 | is-number: 7.0.0 2835 | dev: true 2836 | 2837 | /totalist@3.0.1: 2838 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 2839 | engines: {node: '>=6'} 2840 | dev: true 2841 | 2842 | /tr46@1.0.1: 2843 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 2844 | dependencies: 2845 | punycode: 2.3.0 2846 | dev: true 2847 | 2848 | /tree-kill@1.2.2: 2849 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 2850 | hasBin: true 2851 | dev: true 2852 | 2853 | /trim-newlines@4.1.1: 2854 | resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} 2855 | engines: {node: '>=12'} 2856 | dev: true 2857 | 2858 | /ts-interface-checker@0.1.13: 2859 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2860 | dev: true 2861 | 2862 | /tsconfck@2.1.2(typescript@4.9.5): 2863 | resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==} 2864 | engines: {node: ^14.13.1 || ^16 || >=18} 2865 | hasBin: true 2866 | peerDependencies: 2867 | typescript: ^4.3.5 || ^5.0.0 2868 | peerDependenciesMeta: 2869 | typescript: 2870 | optional: true 2871 | dependencies: 2872 | typescript: 4.9.5 2873 | dev: true 2874 | 2875 | /tslib@1.14.1: 2876 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2877 | dev: true 2878 | 2879 | /tslib@2.6.2: 2880 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2881 | dev: true 2882 | 2883 | /tsup@7.2.0(typescript@4.9.5): 2884 | resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} 2885 | engines: {node: '>=16.14'} 2886 | hasBin: true 2887 | peerDependencies: 2888 | '@swc/core': ^1 2889 | postcss: ^8.4.12 2890 | typescript: '>=4.1.0' 2891 | peerDependenciesMeta: 2892 | '@swc/core': 2893 | optional: true 2894 | postcss: 2895 | optional: true 2896 | typescript: 2897 | optional: true 2898 | dependencies: 2899 | bundle-require: 4.0.1(esbuild@0.18.20) 2900 | cac: 6.7.14 2901 | chokidar: 3.5.3 2902 | debug: 4.3.4 2903 | esbuild: 0.18.20 2904 | execa: 5.1.1 2905 | globby: 11.1.0 2906 | joycon: 3.1.1 2907 | postcss-load-config: 4.0.1 2908 | resolve-from: 5.0.0 2909 | rollup: 3.28.1 2910 | source-map: 0.8.0-beta.0 2911 | sucrase: 3.34.0 2912 | tree-kill: 1.2.2 2913 | typescript: 4.9.5 2914 | transitivePeerDependencies: 2915 | - supports-color 2916 | - ts-node 2917 | dev: true 2918 | 2919 | /tsutils@3.21.0(typescript@5.2.2): 2920 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2921 | engines: {node: '>= 6'} 2922 | peerDependencies: 2923 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2924 | dependencies: 2925 | tslib: 1.14.1 2926 | typescript: 5.2.2 2927 | dev: true 2928 | 2929 | /type-check@0.4.0: 2930 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2931 | engines: {node: '>= 0.8.0'} 2932 | dependencies: 2933 | prelude-ls: 1.2.1 2934 | dev: true 2935 | 2936 | /type-fest@0.20.2: 2937 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2938 | engines: {node: '>=10'} 2939 | dev: true 2940 | 2941 | /type-fest@2.19.0: 2942 | resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 2943 | engines: {node: '>=12.20'} 2944 | dev: true 2945 | 2946 | /type-fest@3.13.1: 2947 | resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} 2948 | engines: {node: '>=14.16'} 2949 | dev: true 2950 | 2951 | /typescript@4.9.5: 2952 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 2953 | engines: {node: '>=4.2.0'} 2954 | hasBin: true 2955 | dev: true 2956 | 2957 | /typescript@5.2.2: 2958 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} 2959 | engines: {node: '>=14.17'} 2960 | hasBin: true 2961 | dev: true 2962 | 2963 | /undici@5.23.0: 2964 | resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} 2965 | engines: {node: '>=14.0'} 2966 | dependencies: 2967 | busboy: 1.6.0 2968 | dev: true 2969 | 2970 | /update-browserslist-db@1.0.11(browserslist@4.21.10): 2971 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 2972 | hasBin: true 2973 | peerDependencies: 2974 | browserslist: '>= 4.21.0' 2975 | dependencies: 2976 | browserslist: 4.21.10 2977 | escalade: 3.1.1 2978 | picocolors: 1.0.0 2979 | dev: true 2980 | 2981 | /uri-js@4.4.1: 2982 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2983 | dependencies: 2984 | punycode: 2.3.0 2985 | dev: true 2986 | 2987 | /util-deprecate@1.0.2: 2988 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2989 | dev: true 2990 | 2991 | /validate-npm-package-license@3.0.4: 2992 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 2993 | dependencies: 2994 | spdx-correct: 3.2.0 2995 | spdx-expression-parse: 3.0.1 2996 | dev: true 2997 | 2998 | /vite@4.4.9: 2999 | resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} 3000 | engines: {node: ^14.18.0 || >=16.0.0} 3001 | hasBin: true 3002 | peerDependencies: 3003 | '@types/node': '>= 14' 3004 | less: '*' 3005 | lightningcss: ^1.21.0 3006 | sass: '*' 3007 | stylus: '*' 3008 | sugarss: '*' 3009 | terser: ^5.4.0 3010 | peerDependenciesMeta: 3011 | '@types/node': 3012 | optional: true 3013 | less: 3014 | optional: true 3015 | lightningcss: 3016 | optional: true 3017 | sass: 3018 | optional: true 3019 | stylus: 3020 | optional: true 3021 | sugarss: 3022 | optional: true 3023 | terser: 3024 | optional: true 3025 | dependencies: 3026 | esbuild: 0.18.20 3027 | postcss: 8.4.29 3028 | rollup: 3.28.1 3029 | optionalDependencies: 3030 | fsevents: 2.3.3 3031 | dev: true 3032 | 3033 | /vitefu@0.2.4(vite@4.4.9): 3034 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} 3035 | peerDependencies: 3036 | vite: ^3.0.0 || ^4.0.0 3037 | peerDependenciesMeta: 3038 | vite: 3039 | optional: true 3040 | dependencies: 3041 | vite: 4.4.9 3042 | dev: true 3043 | 3044 | /webidl-conversions@4.0.2: 3045 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 3046 | dev: true 3047 | 3048 | /whatwg-url@7.1.0: 3049 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 3050 | dependencies: 3051 | lodash.sortby: 4.7.0 3052 | tr46: 1.0.1 3053 | webidl-conversions: 4.0.2 3054 | dev: true 3055 | 3056 | /which@2.0.2: 3057 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3058 | engines: {node: '>= 8'} 3059 | hasBin: true 3060 | dependencies: 3061 | isexe: 2.0.0 3062 | dev: true 3063 | 3064 | /wrappy@1.0.2: 3065 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3066 | dev: true 3067 | 3068 | /xstate@4.38.2: 3069 | resolution: {integrity: sha512-Fba/DwEPDLneHT3tbJ9F3zafbQXszOlyCJyQqqdzmtlY/cwE2th462KK48yaANf98jHlP6lJvxfNtN0LFKXPQg==} 3070 | dev: true 3071 | 3072 | /yallist@4.0.0: 3073 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3074 | dev: true 3075 | 3076 | /yaml@1.10.2: 3077 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 3078 | engines: {node: '>= 6'} 3079 | dev: true 3080 | 3081 | /yaml@2.3.1: 3082 | resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} 3083 | engines: {node: '>= 14'} 3084 | dev: true 3085 | 3086 | /yargs-parser@21.1.1: 3087 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 3088 | engines: {node: '>=12'} 3089 | dev: true 3090 | 3091 | /yocto-queue@0.1.0: 3092 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3093 | engines: {node: '>=10'} 3094 | dev: true 3095 | 3096 | /yocto-queue@1.0.0: 3097 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 3098 | engines: {node: '>=12.20'} 3099 | dev: true 3100 | --------------------------------------------------------------------------------