├── pnpm-workspace.yaml ├── .gitignore ├── examples └── basic │ ├── public │ ├── cat.jpg │ ├── dog.jpg │ └── demo.png │ ├── src │ ├── assets │ │ └── texture.png │ ├── main.jsx │ ├── index.css │ ├── hooks │ │ ├── useDiffData.js │ │ └── useInputData.js │ ├── App.jsx │ └── components │ │ └── SideBySide.jsx │ ├── postcss.config.js │ ├── vite.config.js │ ├── tailwind.config.js │ ├── index.html │ └── package.json ├── packages └── html-diff │ ├── package.json │ ├── tsconfig.json │ ├── src │ ├── index.css │ └── index.ts │ └── tests │ ├── index.spec.ts │ └── __snapshots__ │ └── index.spec.ts.snap ├── package.json ├── LICENSE ├── .github └── workflows │ └── github-ci.yml ├── README.md └── pnpm-lock.yaml /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'packages/*' 3 | - 'examples/*' 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.log 3 | 4 | .idea/ 5 | node_modules/ 6 | dist*/ 7 | temp/ 8 | coverage/ 9 | -------------------------------------------------------------------------------- /examples/basic/public/cat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Arman19941113/html-diff/HEAD/examples/basic/public/cat.jpg -------------------------------------------------------------------------------- /examples/basic/public/dog.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Arman19941113/html-diff/HEAD/examples/basic/public/dog.jpg -------------------------------------------------------------------------------- /examples/basic/public/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Arman19941113/html-diff/HEAD/examples/basic/public/demo.png -------------------------------------------------------------------------------- /examples/basic/src/assets/texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Arman19941113/html-diff/HEAD/examples/basic/src/assets/texture.png -------------------------------------------------------------------------------- /examples/basic/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /examples/basic/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import { defineConfig } from 'vite' 3 | 4 | // https://vite.dev/config/ 5 | export default defineConfig({ 6 | base: '/html-diff/', 7 | plugins: [react()], 8 | }) 9 | -------------------------------------------------------------------------------- /examples/basic/tailwind.config.js: -------------------------------------------------------------------------------- 1 | import daisyui from 'daisyui' 2 | 3 | /** @type {import('tailwindcss').Config} */ 4 | export default { 5 | content: ['./src/**/*.{js,ts,jsx,tsx}'], 6 | theme: { 7 | extend: {}, 8 | }, 9 | plugins: [daisyui], 10 | daisyui: { 11 | themes: ['light'], 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /examples/basic/src/main.jsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react' 2 | import { createRoot } from 'react-dom/client' 3 | import './index.css' 4 | import 'github-markdown-css' 5 | import '@armantang/html-diff/dist/index.css' 6 | import App from './App.jsx' 7 | 8 | createRoot(document.getElementById('root')).render( 9 | 10 | 11 | , 12 | ) 13 | -------------------------------------------------------------------------------- /examples/basic/src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | body { 7 | @apply antialiased; 8 | overscroll-behavior: none; 9 | } 10 | } 11 | 12 | @layer components { 13 | .container-yellow { 14 | background: linear-gradient(to bottom, #FFF9, transparent), 15 | url("./assets/texture.png") rgba(192, 188, 163, 0.9); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /examples/basic/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/html-diff/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@armantang/html-diff", 3 | "version": "1.1.2", 4 | "description": "Generate html content diff", 5 | "keywords": [ 6 | "html-diff" 7 | ], 8 | "homepage": "https://github.com/Arman19941113/html-diff#readme", 9 | "license": "MIT", 10 | "author": "Arman Tang", 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/Arman19941113/html-diff" 14 | }, 15 | "files": [ 16 | "dist" 17 | ], 18 | "type": "module", 19 | "main": "dist/index.mjs", 20 | "types": "dist/index.d.ts" 21 | } 22 | -------------------------------------------------------------------------------- /packages/html-diff/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "moduleResolution": "bundler", 6 | "resolveJsonModule": true, 7 | "esModuleInterop": true, 8 | "strict": true, 9 | "noImplicitAny": true, 10 | "noImplicitThis": true, 11 | "noImplicitReturns": true, 12 | "noImplicitOverride": true, 13 | "noUnusedLocals": true, 14 | "noUnusedParameters": true, 15 | "strictNullChecks": true, 16 | "allowUnreachableCode": false 17 | }, 18 | "include": ["src/**/*.ts", "tests/**/*.spec.ts"] 19 | } 20 | -------------------------------------------------------------------------------- /examples/basic/src/hooks/useDiffData.js: -------------------------------------------------------------------------------- 1 | import HtmlDiff from '@armantang/html-diff' 2 | import { useEffect, useState } from 'react' 3 | 4 | export default function useDiffData({ oldHtml, newHtml }) { 5 | const [unifiedContent, setUnifiedContent] = useState('') 6 | const [sideBySideContents, setSideBySideContents] = useState(['', '']) 7 | 8 | useEffect(() => { 9 | const diff = new HtmlDiff(oldHtml, newHtml, 3) 10 | setUnifiedContent(diff.getUnifiedContent()) 11 | setSideBySideContents(diff.getSideBySideContents()) 12 | }, [oldHtml, newHtml]) 13 | 14 | return { 15 | unifiedContent, 16 | sideBySideContents, 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /examples/basic/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "basic", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "@armantang/html-diff": "workspace:*", 13 | "clsx": "^2.1.1", 14 | "github-markdown-css": "^5.7.0", 15 | "react": "^18.3.1", 16 | "react-dom": "^18.3.1" 17 | }, 18 | "devDependencies": { 19 | "@types/react": "^18.3.12", 20 | "@types/react-dom": "^18.3.1", 21 | "@vitejs/plugin-react": "^4.3.3", 22 | "autoprefixer": "^10.4.20", 23 | "daisyui": "^4.12.14", 24 | "postcss": "^8.4.49", 25 | "tailwindcss": "^3.4.14", 26 | "vite": "^5.4.10" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@armantang/html-diff", 3 | "private": true, 4 | "scripts": { 5 | "test": "vitest run", 6 | "build": "node build/build.mjs", 7 | "release": "node build/release.mjs" 8 | }, 9 | "devDependencies": { 10 | "@rollup/plugin-node-resolve": "^15.3.0", 11 | "@rollup/plugin-typescript": "^12.1.1", 12 | "@types/node": "^20.17.6", 13 | "chalk": "^5.3.0", 14 | "enquirer": "^2.4.1", 15 | "postcss": "^8.4.49", 16 | "postcss-nested": "^7.0.2", 17 | "postcss-preset-env": "^10.1.0", 18 | "rollup": "^4.26.0", 19 | "rollup-plugin-dts": "^6.1.1", 20 | "rollup-plugin-postcss": "^4.0.2", 21 | "semver": "^7.6.3", 22 | "tslib": "^2.8.1", 23 | "typescript": "^5.6.3", 24 | "vitest": "^2.1.4" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Arman Tang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/html-diff/src/index.css: -------------------------------------------------------------------------------- 1 | .html-diff-create-text-wrapper { 2 | background: #D4EEE9; 3 | } 4 | 5 | .html-diff-delete-text-wrapper { 6 | color: #8E3EE2; 7 | text-decoration-color: #7024C0; 8 | text-decoration-line: line-through; 9 | } 10 | 11 | .html-diff-create-inline-wrapper, 12 | .html-diff-delete-inline-wrapper { 13 | display: inline-flex; 14 | } 15 | 16 | .html-diff-create-block-wrapper, 17 | .html-diff-delete-block-wrapper { 18 | display: flex; 19 | } 20 | 21 | .html-diff-create-inline-wrapper, 22 | .html-diff-delete-inline-wrapper, 23 | .html-diff-create-block-wrapper, 24 | .html-diff-delete-block-wrapper { 25 | position: relative; 26 | align-items: center; 27 | flex-direction: row; 28 | 29 | &::after { 30 | position: absolute; 31 | top: 0; 32 | left: 0; 33 | display: block; 34 | width: 100%; 35 | height: 100%; 36 | content: ""; 37 | } 38 | } 39 | 40 | .html-diff-create-inline-wrapper::after, 41 | .html-diff-create-block-wrapper::after { 42 | background: rgba(212, 238, 233, .7); 43 | } 44 | 45 | .html-diff-delete-inline-wrapper::after, 46 | .html-diff-delete-block-wrapper::after { 47 | background: rgba(222, 207, 227, 0.7); 48 | } 49 | -------------------------------------------------------------------------------- /.github/workflows/github-ci.yml: -------------------------------------------------------------------------------- 1 | name: deployment 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | workflow_dispatch: 7 | 8 | permissions: 9 | contents: read 10 | pages: write 11 | id-token: write 12 | 13 | jobs: 14 | build-and-deployment: 15 | environment: 16 | name: github-pages 17 | url: ${{ steps.deployment.outputs.page_url }} 18 | runs-on: ubuntu-latest 19 | steps: 20 | 21 | - name: Checkout 22 | uses: actions/checkout@v4 23 | 24 | - name: Set up pnpm 25 | uses: pnpm/action-setup@v4 26 | with: 27 | version: 9 28 | 29 | - name: Set up node 30 | uses: actions/setup-node@v4 31 | with: 32 | node-version: 20 33 | cache: 'pnpm' 34 | 35 | - name: Install dependencies 36 | run: pnpm install 37 | 38 | - name: Run test 39 | run: pnpm run test 40 | 41 | - name: Build lib 42 | run: pnpm run build 43 | 44 | - name: Build example 45 | run: cd examples/basic && pnpm run build 46 | 47 | - name: Upload artifact 48 | uses: actions/upload-pages-artifact@v3 49 | with: 50 | path: 'examples/basic/dist' 51 | 52 | - name: Deploy to GitHub Pages 53 | id: deployment 54 | uses: actions/deploy-pages@v4 55 | -------------------------------------------------------------------------------- /examples/basic/src/hooks/useInputData.js: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | 3 | export default function useInputData() { 4 | const [oldHtml, updateOldHtml] = useState(`

Hello World

5 |

Let life be beautiful like summer flower and death like autumn leaves.

6 |

She could fade and wither- I didn't care. I would still go mad with tenderness at the mere sight of her face.

7 |

她可以褪色,可以枯萎,怎样都可以。但只要我看她一眼,万般柔情便涌上心头。

8 |

夜已深 我心思思 你的丰姿

9 |

只想你便是 我的天使

10 |

未见半秒 便控制不了

11 |

难以心安 于今晚

12 |

勤字功夫,第一贵早起,第二贵有恒。

13 |

流水不争先,争的是滔滔不绝

14 |

即便再痛苦,也不要选择放弃!

15 |

不相信自己的人,连努力的价值都没有!

16 |

今天和明天已经由昨天决定,你还可以决定后天。

17 |

只有当你离开自己的舒适区时,你才会挑战自己的极限。

18 |

一本有价值的书就是一盏智慧之灯,总有人不断从中提取光明。

19 | dog 20 |

Try video

21 | `) 24 | 25 | const [newHtml, updateNewHtml] = useState(`

你好世界

26 |

She could fade and wither. I would still go mad with tenderness at the mere sight of her face.

27 |

她可以褪色,可以枯萎。但只要我看她一眼,万般柔情便涌上了我的心头。

28 |

让我靠着你的臂胳

29 |

流露我热爱心底说话

30 |

孕育美丽温馨爱意

31 |

做梦 都是你

32 |

勤字功夫,第一贵早起,第二贵有恒。

33 |

流水不争先,争的是滔滔不绝

34 |

痛苦,要选择放弃!

35 |

不相信自己的人,也有努力的价值!

36 |

无休止的欲望像个黑洞,浸染了我们原本澄澈而简单的心

37 |

只有当你离开自己的舒适区时,你才会挑战自己的极限。

38 |

一本有价值的书就是一盏智慧之灯,总有人不断从中提取光明。

39 | cat 40 |

Try video

41 |

Set the bird's wings with gold and it will never again soar in the sky.

42 | `) 43 | 44 | return { 45 | oldHtml, 46 | updateOldHtml, 47 | newHtml, 48 | updateNewHtml, 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Html Diff 2 | 3 | Compare HTML and generate the differences in either a unified view or a side-by-side comparison. [See online demo...](https://arman19941113.github.io/html-diff/) 4 | 5 | ![home](https://arman19941113.github.io/html-diff/demo.png) 6 | 7 | ## Install 8 | 9 | ``` 10 | pnpm add @armantang/html-diff 11 | ``` 12 | 13 | ## Usage 14 | 15 | ```js 16 | import '@armantang/html-diff/dist/index.css' 17 | import HtmlDiff from '@armantang/html-diff' 18 | 19 | const oldHtml = `
hello
` 20 | const newHtml = `
hello world
` 21 | 22 | const diff = new HtmlDiff(oldHtml, newHtml) 23 | const unifiedContent = diff.getUnifiedContent() 24 | const sideBySideContents = diff.getSideBySideContents() 25 | ``` 26 | 27 | ## Options 28 | 29 | ```ts 30 | const diff = new HtmlDiff(oldHtml, newHtml, { 31 | // options 32 | }) 33 | 34 | interface HtmlDiffOptions { 35 | /** 36 | * Determine the minimum threshold for calculating common sub-tokens. 37 | * You may adjust it to a value larger than 2, but not lower, due to the potential inclusion of HTML tags in the count. 38 | * @defaultValue 2 39 | */ 40 | minMatchedSize?: number 41 | /** 42 | * When greedyMatch is enabled, if the length of the sub-tokens exceeds greedyBoundary, 43 | * we will use the matched sub-tokens that are sufficiently good, even if they are not optimal, to enhance performance. 44 | * @defaultValue true 45 | */ 46 | greedyMatch?: boolean 47 | /** 48 | * @defaultValue 1000 49 | */ 50 | greedyBoundary?: number 51 | /** 52 | * The classNames for wrapper DOM. 53 | * Use this to configure your own styles without importing the built-in CSS file 54 | */ 55 | classNames?: Partial<{ 56 | createText?: string 57 | deleteText?: string 58 | createInline?: string 59 | deleteInline?: string 60 | createBlock?: string 61 | deleteBlock?: string 62 | }> 63 | } 64 | ``` 65 | 66 | ## Synchronized scrolling 67 | 68 | In the sideBySideContents, some elements have the `data-seq` attribute. We can use this to implement synchronized scrolling. [Click to see the demo.](https://github.com/Arman19941113/html-diff/blob/master/examples/basic/src/components/SideBySide.jsx) 69 | -------------------------------------------------------------------------------- /examples/basic/src/App.jsx: -------------------------------------------------------------------------------- 1 | import clsx from 'clsx' 2 | import { useState } from 'react' 3 | import SideBySide from './components/SideBySide.jsx' 4 | import useDiffData from './hooks/useDiffData.js' 5 | import useInputData from './hooks/useInputData.js' 6 | 7 | function App() { 8 | const [tab, setTab] = useState(2) 9 | const { oldHtml, updateOldHtml, newHtml, updateNewHtml } = useInputData() 10 | const { unifiedContent, sideBySideContents } = useDiffData({ oldHtml, newHtml }) 11 | 12 | return ( 13 |
14 |
15 |
16 | 21 | 26 |
27 | 28 |
29 |
33 | { 37 | setTab(1) 38 | }} 39 | > 40 | getUnifiedContent 41 | 42 | { 46 | setTab(2) 47 | }} 48 | > 49 | getSideBySideContents 50 | 51 |
52 | 53 | {tab === 1 ? ( 54 |
55 |
59 |
60 | ) : ( 61 | 62 | )} 63 |
64 |
65 |
66 | ) 67 | } 68 | 69 | export default App 70 | -------------------------------------------------------------------------------- /examples/basic/src/components/SideBySide.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef } from 'react' 2 | 3 | export default function SideBySide({ sideBySideContents }) { 4 | const baseTop = useRef(0) 5 | useEffect(() => { 6 | baseTop.current = leftContainer.current.getBoundingClientRect().top 7 | }, []) 8 | 9 | const leftContainer = useRef(null) 10 | const rightContainer = useRef(null) 11 | useEffect(() => { 12 | let timer = null 13 | let isLeftScroll = false 14 | let isRightScroll = false 15 | function handleScroll(type) { 16 | if (type === 'left') { 17 | if (isRightScroll) return 18 | isLeftScroll = true 19 | clearTimeout(timer) 20 | timer = setTimeout(() => { 21 | isLeftScroll = false 22 | }, 300) 23 | syncScroll(leftContainer.current, rightContainer.current) 24 | } else { 25 | if (isLeftScroll) return 26 | isRightScroll = true 27 | clearTimeout(timer) 28 | timer = setTimeout(() => { 29 | isRightScroll = false 30 | }, 300) 31 | syncScroll(rightContainer.current, leftContainer.current) 32 | } 33 | } 34 | function syncScroll(origin, target) { 35 | let findSeq = '' 36 | let leftTop = 0 37 | for (const el of origin.children) { 38 | if (el.dataset.seq && el.getBoundingClientRect().top > baseTop.current) { 39 | findSeq = el.dataset.seq 40 | leftTop = el.getBoundingClientRect().top 41 | break 42 | } 43 | } 44 | if (!findSeq) return 45 | 46 | let syncEl = null 47 | for (const el of target.children) { 48 | if (el.dataset.seq === findSeq) { 49 | syncEl = el 50 | break 51 | } 52 | } 53 | if (!syncEl) return 54 | 55 | const rightTop = syncEl.getBoundingClientRect().top 56 | const delta = rightTop - leftTop 57 | target.scrollTo({ top: target.scrollTop + delta }) 58 | } 59 | 60 | const handleLeftScroll = () => handleScroll('left') 61 | const handleRightScroll = () => handleScroll('right') 62 | leftContainer.current.addEventListener('scroll', handleLeftScroll) 63 | rightContainer.current.addEventListener('scroll', handleRightScroll) 64 | 65 | return () => { 66 | clearTimeout(timer) 67 | leftContainer.current.removeEventListener('scroll', handleLeftScroll) 68 | rightContainer.current.removeEventListener('scroll', handleRightScroll) 69 | } 70 | }, []) 71 | 72 | return ( 73 |
74 |
79 |
80 |
85 |
86 | ) 87 | } 88 | -------------------------------------------------------------------------------- /packages/html-diff/tests/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import HtmlDiff from '../src' 3 | 4 | describe('HtmlDiff', () => { 5 | it('should work with white space', function () { 6 | const oldHtml = `
hello
` 7 | const newHtml = `
hello
` 8 | const diff = new HtmlDiff(oldHtml, newHtml) 9 | expect(diff.getUnifiedContent()).toMatchSnapshot() 10 | expect(diff.getSideBySideContents()).toMatchSnapshot() 11 | }) 12 | 13 | it('should work with basic create', function () { 14 | const oldHtml = `
hello
` 15 | const newHtml = `
hello world
` 16 | const diff = new HtmlDiff(oldHtml, newHtml) 17 | expect(diff.getUnifiedContent()).toMatchSnapshot() 18 | expect(diff.getSideBySideContents()).toMatchSnapshot() 19 | }) 20 | 21 | it('should work with basic delete', function () { 22 | const oldHtml = `
hello world
` 23 | const newHtml = `
hello
` 24 | const diff = new HtmlDiff(oldHtml, newHtml) 25 | expect(diff.getUnifiedContent()).toMatchSnapshot() 26 | expect(diff.getSideBySideContents()).toMatchSnapshot() 27 | }) 28 | 29 | it('should work with basic replace', function () { 30 | const oldHtml = `
hello
` 31 | const newHtml = `
world
` 32 | const diff = new HtmlDiff(oldHtml, newHtml) 33 | expect(diff.getUnifiedContent()).toMatchSnapshot() 34 | expect(diff.getSideBySideContents()).toMatchSnapshot() 35 | }) 36 | 37 | it('should work with equal', function () { 38 | const oldHtml = `

hello world

39 |

你若安好,便是晴天

` 40 | const newHtml = `

hello world

41 |

你若安好,便是晴天

` 42 | const diff = new HtmlDiff(oldHtml, newHtml) 43 | expect(diff.getUnifiedContent()).toMatchSnapshot() 44 | expect(diff.getSideBySideContents()).toMatchSnapshot() 45 | }) 46 | 47 | it('should work with equal start', function () { 48 | const oldHtml = `

hello world

49 |

你若安好,便是晴天

` 50 | const newHtml = `

hello world

51 |

今天天气很不错

` 52 | const diff = new HtmlDiff(oldHtml, newHtml) 53 | expect(diff.getUnifiedContent()).toMatchSnapshot() 54 | expect(diff.getSideBySideContents()).toMatchSnapshot() 55 | }) 56 | 57 | it('should work with equal end', function () { 58 | const oldHtml = `

你有一双会说话的眼睛

59 |

你若安好,便是晴天

` 60 | const newHtml = `

你的微笑总是让我为你着迷

61 |

你若安好,便是晴天

` 62 | const diff = new HtmlDiff(oldHtml, newHtml) 63 | expect(diff.getUnifiedContent()).toMatchSnapshot() 64 | expect(diff.getSideBySideContents()).toMatchSnapshot() 65 | }) 66 | 67 | it('should work with equal double', function () { 68 | const oldHtml = `

hello world

69 |

你若安好,便是晴天

70 |

你的微笑总是让我为你着迷

` 71 | const newHtml = `

hello world

72 |

今天天气很不错

73 |

你的微笑总是让我为你着迷

` 74 | const diff = new HtmlDiff(oldHtml, newHtml) 75 | expect(diff.getUnifiedContent()).toMatchSnapshot() 76 | expect(diff.getSideBySideContents()).toMatchSnapshot() 77 | }) 78 | 79 | it('should work sample 1', function () { 80 | const oldHtml = `
hello world
` 81 | const newHtml = `

You got a dream. You gotta protect it.

` 82 | const diff = new HtmlDiff(oldHtml, newHtml) 83 | expect(diff.getUnifiedContent()).toMatchSnapshot() 84 | expect(diff.getSideBySideContents()).toMatchSnapshot() 85 | }) 86 | 87 | it('should work sample 2', function () { 88 | const oldHtml = `

Hello

89 |

Let life be beautiful like summer flower and death like autumn leaves.

90 |

She could fade and wither- I didn't care. I would still go mad with tenderness at the mere sight of her face.

91 |

她可以褪色,可以枯萎,怎样都可以。但只要我看她一眼,万般柔情便涌上心头。

92 |

夜已深 我心思思 你的丰姿

93 |

只想你便是 我的天使

94 |

未见半秒 便控制不了

95 |

难以心安 于今晚

96 | dog

Try video

97 | ` 98 | const newHtml = `

Hello World

She could fade and wither. I would still go mad with tenderness at the mere sight of her face.

99 |

她可以褪色,可以枯萎。但只要我看她一眼,万般柔情便涌上了我的心头。

100 |

让我靠着你的臂胳

101 |

流露我热爱心底说话

102 |

孕育美丽温馨爱意

103 |

做梦 都是你

104 | cat

Try video

105 |

Set the bird's wings with gold and it will never again soar in the sky.

106 | ` 107 | 108 | const diff = new HtmlDiff(oldHtml, newHtml, { 109 | minMatchedSize: 3, 110 | classNames: { 111 | createText: 'cra-txt', 112 | deleteText: 'del-txt', 113 | createInline: 'cra-inl', 114 | deleteInline: 'del-inl', 115 | createBlock: 'cra-blo', 116 | deleteBlock: 'del-blo', 117 | }, 118 | }) 119 | expect(diff.getUnifiedContent()).toMatchSnapshot() 120 | expect(diff.getSideBySideContents()).toMatchSnapshot() 121 | }) 122 | 123 | it('should work sample 3', function () { 124 | const oldHtml = `

hello world

125 |

勤字功夫,第一贵早起,第二贵有恒。

126 |

流水不争先,争的是滔滔不绝

127 |

即便再痛苦,也不要选择放弃!

128 |

不相信自己的人,连努力的价值都没有!

129 |

今天和明天已经由昨天决定,你还可以决定后天。

130 |

只有当你离开自己的舒适区时,你才会挑战自己的极限。

131 |

一本有价值的书就是一盏智慧之灯,总有人不断从中提取光明。

` 132 | const newHtml = `

hello world

133 |

勤字功夫,第一贵早起,第二贵有恒。

134 |

流水不争先,争的是滔滔不绝

135 |

痛苦,要选择放弃!

136 |

不相信自己的人,也有努力的价值!

137 |

无休止的欲望像个黑洞,浸染了我们原本澄澈而简单的心

138 |

只有当你离开自己的舒适区时,你才会挑战自己的极限。

139 |

一本有价值的书就是一盏智慧之灯,总有人不断从中提取光明。

` 140 | 141 | const diff = new HtmlDiff(oldHtml, newHtml, { 142 | classNames: { 143 | createText: 'cra-txt', 144 | deleteText: 'del-txt', 145 | createInline: 'cra-inl', 146 | deleteInline: 'del-inl', 147 | createBlock: 'cra-blo', 148 | deleteBlock: 'del-blo', 149 | }, 150 | }) 151 | expect(diff.getUnifiedContent()).toMatchSnapshot() 152 | expect(diff.getSideBySideContents()).toMatchSnapshot() 153 | }) 154 | }) 155 | -------------------------------------------------------------------------------- /packages/html-diff/tests/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`HtmlDiff > should work sample 1 1`] = `"
hello world

You got a dream. You gotta protect it.

"`; 4 | 5 | exports[`HtmlDiff > should work sample 1 2`] = ` 6 | [ 7 | "
hello world
", 8 | "

You got a dream. You gotta protect it.

", 9 | ] 10 | `; 11 | 12 | exports[`HtmlDiff > should work sample 2 1`] = ` 13 | "

HelloHello World

Let life be beautiful like summer flower and death like autumn leaves.

She could fade and wither- I didn't care. I would still go mad with tenderness at the mere sight of her face.

14 |

她可以褪色,可以枯萎,怎样都可以。但只要我看她一眼,万般柔情便涌上了我的心头。

15 |

夜已深 我心思思 你的丰姿让我靠着你的臂胳

16 |

只想你便是 我的天使流露我热爱心底说话

17 |

未见半秒 便控制不了孕育美丽温馨爱意

18 |

难以心安 于今晚做梦 都是你

dogcat

Try video

19 |

Set the bird's wings with gold and it will never again soar in the sky.

" 20 | `; 21 | 22 | exports[`HtmlDiff > should work sample 2 2`] = ` 23 | [ 24 | "

Hello

Let life be beautiful like summer flower and death like autumn leaves.

She could fade and wither- I didn't care. I would still go mad with tenderness at the mere sight of her face.

25 |

她可以褪色,可以枯萎,怎样都可以。但只要我看她一眼,万般柔情便涌上心头。

26 |

夜已深 我心思思 你的丰姿

27 |

只想你便是 我的天使

28 |

未见半秒 便控制不了

29 |

难以心安 于今晚

dog

Try video

30 |
", 31 | "

Hello World

She could fade and wither. I would still go mad with tenderness at the mere sight of her face.

32 |

她可以褪色,可以枯萎。但只要我看她一眼,万般柔情便涌上了我的心头。

33 |

让我靠着你的臂胳

34 |

流露我热爱心底说话

35 |

孕育美丽温馨爱意

36 |

做梦 都是你

cat

Try video

37 |

Set the bird's wings with gold and it will never again soar in the sky.

", 38 | ] 39 | `; 40 | 41 | exports[`HtmlDiff > should work sample 3 1`] = ` 42 | "

hello world

43 |

勤字功夫,第一贵早起,第二贵有恒。

44 |

流水不争先,争的是滔滔不绝

45 |

即便再痛苦,也不要选择放弃!

46 |

不相信自己的人,也有努力的价值都没有

47 |

今天和明天已经由昨天决定,你还可以决定后天。无休止的欲望像个黑洞,浸染了我们原本澄澈而简单的心

48 |

只有当你离开自己的舒适区时,你才会挑战自己的极限。

49 |

一本有价值的书就是一盏智慧之灯,总有人不断从中提取光明。

" 50 | `; 51 | 52 | exports[`HtmlDiff > should work sample 3 2`] = ` 53 | [ 54 | "

hello world

55 |

勤字功夫,第一贵早起,第二贵有恒。

56 |

流水不争先,争的是滔滔不绝

57 |

即便再痛苦,也不要选择放弃!

58 |

不相信自己的人,努力的价值都没有

59 |

今天和明天已经由昨天决定,你还可以决定后天。

60 |

只有当你离开自己的舒适区时,你才会挑战自己的极限。

61 |

一本有价值的书就是一盏智慧之灯,总有人不断从中提取光明。

", 62 | "

hello world

63 |

勤字功夫,第一贵早起,第二贵有恒。

64 |

流水不争先,争的是滔滔不绝

65 |

痛苦,要选择放弃!

66 |

不相信自己的人,也有努力的价值!

67 |

无休止的欲望像个黑洞,浸染了我们原本澄澈而简单的心

68 |

只有当你离开自己的舒适区时,你才会挑战自己的极限。

69 |

一本有价值的书就是一盏智慧之灯,总有人不断从中提取光明。

", 70 | ] 71 | `; 72 | 73 | exports[`HtmlDiff > should work with basic create 1`] = `"
hello world
"`; 74 | 75 | exports[`HtmlDiff > should work with basic create 2`] = ` 76 | [ 77 | "
hello
", 78 | "
hello world
", 79 | ] 80 | `; 81 | 82 | exports[`HtmlDiff > should work with basic delete 1`] = `"
hello world
"`; 83 | 84 | exports[`HtmlDiff > should work with basic delete 2`] = ` 85 | [ 86 | "
hello world
", 87 | "
hello
", 88 | ] 89 | `; 90 | 91 | exports[`HtmlDiff > should work with basic replace 1`] = `"
helloworld
"`; 92 | 93 | exports[`HtmlDiff > should work with basic replace 2`] = ` 94 | [ 95 | "
hello
", 96 | "
world
", 97 | ] 98 | `; 99 | 100 | exports[`HtmlDiff > should work with equal 1`] = ` 101 | "

hello world

102 |

你若安好,便是晴天

" 103 | `; 104 | 105 | exports[`HtmlDiff > should work with equal 2`] = ` 106 | [ 107 | "

hello world

108 |

你若安好,便是晴天

", 109 | "

hello world

110 |

你若安好,便是晴天

", 111 | ] 112 | `; 113 | 114 | exports[`HtmlDiff > should work with equal double 1`] = ` 115 | "

hello world

116 |

你若安好,便是晴天今天天气很不错

117 |

你的微笑总是让我为你着迷

" 118 | `; 119 | 120 | exports[`HtmlDiff > should work with equal double 2`] = ` 121 | [ 122 | "

hello world

123 |

你若安好,便是晴天

124 |

你的微笑总是让我为你着迷

", 125 | "

hello world

126 |

今天天气很不错

127 |

你的微笑总是让我为你着迷

", 128 | ] 129 | `; 130 | 131 | exports[`HtmlDiff > should work with equal end 1`] = ` 132 | "

有一双会说话的眼睛的微笑总是让我为你着迷

133 |

你若安好,便是晴天

" 134 | `; 135 | 136 | exports[`HtmlDiff > should work with equal end 2`] = ` 137 | [ 138 | "

有一双会说话的眼睛

139 |

你若安好,便是晴天

", 140 | "

的微笑总是让我为你着迷

141 |

你若安好,便是晴天

", 142 | ] 143 | `; 144 | 145 | exports[`HtmlDiff > should work with equal start 1`] = ` 146 | "

hello world

147 |

你若安好,便是晴天今天天气很不错

" 148 | `; 149 | 150 | exports[`HtmlDiff > should work with equal start 2`] = ` 151 | [ 152 | "

hello world

153 |

你若安好,便是晴天

", 154 | "

hello world

155 |

今天天气很不错

", 156 | ] 157 | `; 158 | 159 | exports[`HtmlDiff > should work with white space 1`] = `"
hello
"`; 160 | 161 | exports[`HtmlDiff > should work with white space 2`] = ` 162 | [ 163 | "
hello
", 164 | "
hello
", 165 | ] 166 | `; 167 | -------------------------------------------------------------------------------- /packages/html-diff/src/index.ts: -------------------------------------------------------------------------------- 1 | interface MatchedBlock { 2 | oldStart: number 3 | oldEnd: number 4 | newStart: number 5 | newEnd: number 6 | size: number 7 | } 8 | 9 | interface Operation { 10 | oldStart: number 11 | oldEnd: number 12 | newStart: number 13 | newEnd: number 14 | type: 'equal' | 'delete' | 'create' | 'replace' 15 | } 16 | 17 | type BaseOpType = 'delete' | 'create' 18 | 19 | interface HtmlDiffConfig { 20 | minMatchedSize: number 21 | greedyMatch: boolean 22 | greedyBoundary: number 23 | classNames: { 24 | createText: string 25 | deleteText: string 26 | createInline: string 27 | deleteInline: string 28 | createBlock: string 29 | deleteBlock: string 30 | } 31 | } 32 | 33 | export interface HtmlDiffOptions { 34 | /** 35 | * Determine the minimum threshold for calculating common sub-tokens. 36 | * You may adjust it to a value larger than 2, but not lower, due to the potential inclusion of HTML tags in the count. 37 | * @defaultValue 2 38 | */ 39 | minMatchedSize?: number 40 | /** 41 | * When greedyMatch is enabled, if the length of the sub-tokens exceeds greedyBoundary, 42 | * we will use the matched sub-tokens that are sufficiently good, even if they are not optimal, to enhance performance. 43 | * @defaultValue true 44 | */ 45 | greedyMatch?: boolean 46 | /** 47 | * @defaultValue 1000 48 | */ 49 | greedyBoundary?: number 50 | /** 51 | * The classNames for wrapper DOM. 52 | * Use this to configure your own styles without importing the built-in CSS file 53 | */ 54 | classNames?: Partial<{ 55 | createText?: string 56 | deleteText?: string 57 | createInline?: string 58 | deleteInline?: string 59 | createBlock?: string 60 | deleteBlock?: string 61 | }> 62 | } 63 | 64 | const htmlStartTagReg = /^<(?[^\s/>]+)[^>]*>$/ 65 | const htmlTagWithNameReg = /^<(?\/)?(?[^\s>]+)[^>]*>$/ 66 | 67 | const htmlTagReg = /^<[^>]+>/ 68 | const htmlImgTagReg = /^]*>$/ 69 | const htmlVideoTagReg = /^]*>.*?<\/video>$/ms 70 | 71 | export default class HtmlDiff { 72 | private readonly config: HtmlDiffConfig 73 | private readonly oldTokens: string[] = [] 74 | private readonly newTokens: string[] = [] 75 | private readonly matchedBlockList: MatchedBlock[] = [] 76 | private readonly operationList: Operation[] = [] 77 | private leastCommonLength: number = Infinity 78 | private unifiedContent?: string 79 | private sideBySideContents?: [string, string] 80 | 81 | constructor( 82 | oldHtml: string, 83 | newHtml: string, 84 | { 85 | minMatchedSize = 2, 86 | greedyMatch = true, 87 | greedyBoundary = 1000, 88 | classNames = { 89 | createText: 'html-diff-create-text-wrapper', 90 | deleteText: 'html-diff-delete-text-wrapper', 91 | createInline: 'html-diff-create-inline-wrapper', 92 | deleteInline: 'html-diff-delete-inline-wrapper', 93 | createBlock: 'html-diff-create-block-wrapper', 94 | deleteBlock: 'html-diff-delete-block-wrapper', 95 | }, 96 | }: HtmlDiffOptions = {}, 97 | ) { 98 | // init config 99 | this.config = { 100 | minMatchedSize, 101 | greedyMatch, 102 | greedyBoundary, 103 | classNames: { 104 | createText: 'html-diff-create-text-wrapper', 105 | deleteText: 'html-diff-delete-text-wrapper', 106 | createInline: 'html-diff-create-inline-wrapper', 107 | deleteInline: 'html-diff-delete-inline-wrapper', 108 | createBlock: 'html-diff-create-block-wrapper', 109 | deleteBlock: 'html-diff-delete-block-wrapper', 110 | ...classNames, 111 | }, 112 | } 113 | // white space is junk 114 | oldHtml = oldHtml.trim() 115 | newHtml = newHtml.trim() 116 | 117 | // no need to diff 118 | if (oldHtml === newHtml) { 119 | this.unifiedContent = oldHtml 120 | let equalSequence = 0 121 | const content = oldHtml.replace( 122 | /<([^\s/>]+)[^>]*>/g, 123 | (match: string, name: string) => { 124 | const tagNameLength = name.length + 1 125 | return `${match.slice(0, tagNameLength)} data-seq="${++equalSequence}"${match.slice(tagNameLength)}` 126 | }, 127 | ) 128 | this.sideBySideContents = [content, content] 129 | return 130 | } 131 | 132 | // step1: split HTML to tokens(atomic tokens) 133 | this.oldTokens = this.tokenize(oldHtml) 134 | this.newTokens = this.tokenize(newHtml) 135 | // step2: find matched blocks 136 | this.matchedBlockList = this.getMatchedBlockList() 137 | // step3: generate operation list 138 | this.operationList = this.getOperationList() 139 | } 140 | 141 | public getUnifiedContent(): string { 142 | if (this.unifiedContent !== undefined) { 143 | return this.unifiedContent 144 | } 145 | 146 | let result = '' 147 | this.operationList.forEach(operation => { 148 | switch (operation.type) { 149 | case 'equal': 150 | for (const token of this.newTokens.slice( 151 | operation.newStart, 152 | operation.newEnd, 153 | )) { 154 | result += token 155 | } 156 | break 157 | case 'delete': 158 | result += this.dressUpDiffContent( 159 | 'delete', 160 | this.oldTokens.slice(operation.oldStart, operation.oldEnd), 161 | ) 162 | break 163 | case 'create': 164 | result += this.dressUpDiffContent( 165 | 'create', 166 | this.newTokens.slice(operation.newStart, operation.newEnd), 167 | ) 168 | break 169 | case 'replace': 170 | // handle specially tag replace 171 | const olds = this.oldTokens.slice(operation.oldStart, operation.oldEnd) 172 | const news = this.newTokens.slice(operation.newStart, operation.newEnd) 173 | if ( 174 | olds.length === 1 && 175 | news.length === 1 && 176 | olds[0].match(htmlTagReg) && 177 | news[0].match(htmlTagReg) 178 | ) { 179 | result += news[0] 180 | break 181 | } 182 | 183 | const deletedTokens = [] 184 | const createdTokens = [] 185 | let createIndex = operation.newStart 186 | for ( 187 | let deleteIndex = operation.oldStart; 188 | deleteIndex < operation.oldEnd; 189 | deleteIndex++ 190 | ) { 191 | const deletedToken = this.oldTokens[deleteIndex] 192 | const matchTagResultD = deletedToken.match(htmlTagWithNameReg) 193 | if (matchTagResultD) { 194 | // handle replaced tag token 195 | 196 | // skip special tag 197 | if ( 198 | [htmlImgTagReg, htmlVideoTagReg].some(item => deletedToken.match(item)) 199 | ) { 200 | deletedTokens.push(deletedToken) 201 | continue 202 | } 203 | 204 | // handle normal tag 205 | result += this.dressUpDiffContent('delete', deletedTokens) 206 | deletedTokens.splice(0) 207 | let isTagInNewFind = false 208 | for ( 209 | let tempCreateIndex = createIndex; 210 | tempCreateIndex < operation.newEnd; 211 | tempCreateIndex++ 212 | ) { 213 | const createdToken = this.newTokens[tempCreateIndex] 214 | const matchTagResultC = createdToken.match(htmlTagWithNameReg) 215 | if ( 216 | matchTagResultC && 217 | matchTagResultC.groups!.name === matchTagResultD.groups!.name && 218 | matchTagResultC.groups!.isEnd === matchTagResultD.groups!.isEnd 219 | ) { 220 | // find first matched tag, but not maybe the expected tag(to optimize) 221 | isTagInNewFind = true 222 | result += this.dressUpDiffContent('create', createdTokens) 223 | result += createdToken 224 | createdTokens.splice(0) 225 | createIndex = tempCreateIndex + 1 226 | break 227 | } else { 228 | createdTokens.push(createdToken) 229 | } 230 | } 231 | if (!isTagInNewFind) { 232 | result += deletedToken 233 | createdTokens.splice(0) 234 | } 235 | } else { 236 | // token is not a tag 237 | deletedTokens.push(deletedToken) 238 | } 239 | } 240 | if (createIndex < operation.newEnd) { 241 | createdTokens.push(...this.newTokens.slice(createIndex, operation.newEnd)) 242 | } 243 | result += this.dressUpDiffContent('delete', deletedTokens) 244 | result += this.dressUpDiffContent('create', createdTokens) 245 | break 246 | default: 247 | const exhaustiveCheck: never = operation.type 248 | console.error('Error operation type: ' + exhaustiveCheck) 249 | } 250 | }) 251 | this.unifiedContent = result 252 | return result 253 | } 254 | 255 | public getSideBySideContents(): string[] { 256 | if (this.sideBySideContents !== undefined) { 257 | return this.sideBySideContents 258 | } 259 | 260 | let oldHtml = '' 261 | let newHtml = '' 262 | let equalSequence = 0 263 | this.operationList.forEach(operation => { 264 | switch (operation.type) { 265 | case 'equal': 266 | const equalTokens = this.newTokens.slice(operation.newStart, operation.newEnd) 267 | let equalString = '' 268 | for (const token of equalTokens) { 269 | // find start tags and add data-seq to enable sync scroll 270 | const startTagMatch = token.match(htmlStartTagReg) 271 | if (startTagMatch) { 272 | equalSequence += 1 273 | const tagNameLength = startTagMatch.groups!.name.length + 1 274 | equalString += `${token.slice(0, tagNameLength)} data-seq="${equalSequence}"${token.slice(tagNameLength)}` 275 | } else { 276 | equalString += token 277 | } 278 | } 279 | oldHtml += equalString 280 | newHtml += equalString 281 | break 282 | case 'delete': 283 | const deletedTokens = this.oldTokens.slice(operation.oldStart, operation.oldEnd) 284 | oldHtml += this.dressUpDiffContent('delete', deletedTokens) 285 | break 286 | case 'create': 287 | newHtml += this.dressUpDiffContent( 288 | 'create', 289 | this.newTokens.slice(operation.newStart, operation.newEnd), 290 | ) 291 | break 292 | case 'replace': 293 | oldHtml += this.dressUpDiffContent( 294 | 'delete', 295 | this.oldTokens.slice(operation.oldStart, operation.oldEnd), 296 | ) 297 | newHtml += this.dressUpDiffContent( 298 | 'create', 299 | this.newTokens.slice(operation.newStart, operation.newEnd), 300 | ) 301 | break 302 | default: 303 | const exhaustiveCheck: never = operation.type 304 | console.error('Error operation type: ' + exhaustiveCheck) 305 | } 306 | }) 307 | 308 | const result: [string, string] = [oldHtml, newHtml] 309 | this.sideBySideContents = result 310 | return result 311 | } 312 | 313 | /** 314 | * convert HTML to tokens 315 | * @example 316 | * tokenize(" Hello World ") 317 | * [""," ", "Hello", " ", "World", " ", ""] 318 | */ 319 | private tokenize(html: string): string[] { 320 | // atomic token: html tag、continuous numbers or letters、blank spaces、other symbol 321 | return ( 322 | html.match( 323 | /]*>.*?<\/picture>|]*>.*?<\/video>|<[^>]+>|\w+\b|\s+|[^<>\w]/gms, 324 | ) || [] 325 | ) 326 | } 327 | 328 | private getMatchedBlockList(): MatchedBlock[] { 329 | const n1 = this.oldTokens.length 330 | const n2 = this.newTokens.length 331 | 332 | // 1. sync from start 333 | let start: MatchedBlock | null = null 334 | let i = 0 335 | while (i < n1 && i < n2 && this.oldTokens[i] === this.newTokens[i]) { 336 | i++ 337 | } 338 | if (i >= this.config.minMatchedSize) { 339 | start = { 340 | oldStart: 0, 341 | oldEnd: i, 342 | newStart: 0, 343 | newEnd: i, 344 | size: i, 345 | } 346 | } 347 | 348 | // 2. sync from end 349 | let end: MatchedBlock | null = null 350 | let e1 = n1 - 1 351 | let e2 = n2 - 1 352 | while (i <= e1 && i <= e2 && this.oldTokens[e1] === this.newTokens[e2]) { 353 | e1-- 354 | e2-- 355 | } 356 | const size = n1 - 1 - e1 357 | if (size >= this.config.minMatchedSize) { 358 | end = { 359 | oldStart: e1 + 1, 360 | oldEnd: n1, 361 | newStart: e2 + 1, 362 | newEnd: n2, 363 | size, 364 | } 365 | } 366 | 367 | // 3. handle rest 368 | const oldStart = start ? i : 0 369 | const oldEnd = end ? e1 + 1 : n1 370 | const newStart = start ? i : 0 371 | const newEnd = end ? e2 + 1 : n2 372 | // optimize for large tokens 373 | if (this.config.greedyMatch) { 374 | const commonLength = Math.min(oldEnd - oldStart, newEnd - newStart) 375 | if (commonLength > this.config.greedyBoundary) { 376 | this.leastCommonLength = Math.floor(commonLength / 3) 377 | } 378 | } 379 | const ret = this.computeMatchedBlockList(oldStart, oldEnd, newStart, newEnd) 380 | if (start) ret.unshift(start) 381 | if (end) ret.push(end) 382 | 383 | return ret 384 | } 385 | 386 | private computeMatchedBlockList( 387 | oldStart: number, 388 | oldEnd: number, 389 | newStart: number, 390 | newEnd: number, 391 | matchedBlockList: MatchedBlock[] = [], 392 | ): MatchedBlock[] { 393 | const matchBlock = this.computeBestMatchedBlock(oldStart, oldEnd, newStart, newEnd) 394 | if (!matchBlock) { 395 | return [] 396 | } 397 | 398 | if (oldStart < matchBlock.oldStart && newStart < matchBlock.newStart) { 399 | this.computeMatchedBlockList( 400 | oldStart, 401 | matchBlock.oldStart, 402 | newStart, 403 | matchBlock.newStart, 404 | matchedBlockList, 405 | ) 406 | } 407 | matchedBlockList.push(matchBlock) 408 | if (oldEnd > matchBlock.oldEnd && newEnd > matchBlock.newEnd) { 409 | this.computeMatchedBlockList( 410 | matchBlock.oldEnd, 411 | oldEnd, 412 | matchBlock.newEnd, 413 | newEnd, 414 | matchedBlockList, 415 | ) 416 | } 417 | return matchedBlockList 418 | } 419 | 420 | // Find the longest matched block between tokens 421 | private computeBestMatchedBlock( 422 | oldStart: number, 423 | oldEnd: number, 424 | newStart: number, 425 | newEnd: number, 426 | ): MatchedBlock | null { 427 | let bestMatchedBlock = null 428 | for (let i = oldStart; i < oldEnd; i++) { 429 | const len = Math.min(oldEnd - i, newEnd - newStart) 430 | const ret = this.slideBestMatchedBlock(i, newStart, len) 431 | if (ret && (!bestMatchedBlock || ret.size > bestMatchedBlock.size)) { 432 | bestMatchedBlock = ret 433 | if (ret.size > this.leastCommonLength) return bestMatchedBlock 434 | } 435 | } 436 | for (let j = newStart; j < newEnd; j++) { 437 | const len = Math.min(oldEnd - oldStart, newEnd - j) 438 | const ret = this.slideBestMatchedBlock(oldStart, j, len) 439 | if (ret && (!bestMatchedBlock || ret.size > bestMatchedBlock.size)) { 440 | bestMatchedBlock = ret 441 | if (ret.size > this.leastCommonLength) return bestMatchedBlock 442 | } 443 | } 444 | return bestMatchedBlock 445 | } 446 | 447 | private slideBestMatchedBlock( 448 | addA: number, 449 | addB: number, 450 | len: number, 451 | ): MatchedBlock | null { 452 | let maxSize = 0 453 | let bestMatchedBlock: MatchedBlock | null = null 454 | 455 | let continuousSize = 0 456 | for (let i = 0; i < len; i++) { 457 | if (this.oldTokens[addA + i] === this.newTokens[addB + i]) { 458 | continuousSize++ 459 | } else { 460 | continuousSize = 0 461 | } 462 | if (continuousSize > maxSize) { 463 | maxSize = continuousSize 464 | bestMatchedBlock = { 465 | oldStart: addA + i - continuousSize + 1, 466 | oldEnd: addA + i + 1, 467 | newStart: addB + i - continuousSize + 1, 468 | newEnd: addB + i + 1, 469 | size: continuousSize, 470 | } 471 | } 472 | } 473 | 474 | return maxSize >= this.config.minMatchedSize ? bestMatchedBlock : null 475 | } 476 | 477 | // Generate operation list by matchedBlockList 478 | private getOperationList(): Operation[] { 479 | const operationList: Operation[] = [] 480 | let walkIndexOld = 0 481 | let walkIndexNew = 0 482 | for (const matchedBlock of this.matchedBlockList) { 483 | const isOldStartIndexMatched = walkIndexOld === matchedBlock.oldStart 484 | const isNewStartIndexMatched = walkIndexNew === matchedBlock.newStart 485 | const operationBase = { 486 | oldStart: walkIndexOld, 487 | oldEnd: matchedBlock.oldStart, 488 | newStart: walkIndexNew, 489 | newEnd: matchedBlock.newStart, 490 | } 491 | if (!isOldStartIndexMatched && !isNewStartIndexMatched) { 492 | operationList.push(Object.assign(operationBase, { type: 'replace' as const })) 493 | } else if (isOldStartIndexMatched && !isNewStartIndexMatched) { 494 | operationList.push(Object.assign(operationBase, { type: 'create' as const })) 495 | } else if (!isOldStartIndexMatched && isNewStartIndexMatched) { 496 | operationList.push(Object.assign(operationBase, { type: 'delete' as const })) 497 | } 498 | 499 | operationList.push({ 500 | oldStart: matchedBlock.oldStart, 501 | oldEnd: matchedBlock.oldEnd, 502 | newStart: matchedBlock.newStart, 503 | newEnd: matchedBlock.newEnd, 504 | type: 'equal', 505 | }) 506 | walkIndexOld = matchedBlock.oldEnd 507 | walkIndexNew = matchedBlock.newEnd 508 | } 509 | // handle the tail content 510 | const maxIndexOld = this.oldTokens.length 511 | const maxIndexNew = this.newTokens.length 512 | const tailOperationBase = { 513 | oldStart: walkIndexOld, 514 | oldEnd: maxIndexOld, 515 | newStart: walkIndexNew, 516 | newEnd: maxIndexNew, 517 | } 518 | const isOldFinished = walkIndexOld === maxIndexOld 519 | const isNewFinished = walkIndexNew === maxIndexNew 520 | if (!isOldFinished && !isNewFinished) { 521 | operationList.push(Object.assign(tailOperationBase, { type: 'replace' as const })) 522 | } else if (isOldFinished && !isNewFinished) { 523 | operationList.push(Object.assign(tailOperationBase, { type: 'create' as const })) 524 | } else if (!isOldFinished && isNewFinished) { 525 | operationList.push(Object.assign(tailOperationBase, { type: 'delete' as const })) 526 | } 527 | return operationList 528 | } 529 | 530 | private dressUpDiffContent(type: BaseOpType, tokens: string[]): string { 531 | const tokensLength = tokens.length 532 | if (!tokensLength) { 533 | return '' 534 | } 535 | 536 | let result = '' 537 | let textStartIndex = 0 538 | for (let i = 0; i < tokensLength; i++) { 539 | const token = tokens[i] 540 | // this token is html tag 541 | if (token.match(htmlTagReg)) { 542 | // handle text tokens before 543 | if (i > textStartIndex) { 544 | result += this.dressUpText(type, tokens.slice(textStartIndex, i)) 545 | } 546 | // handle this tag 547 | textStartIndex = i + 1 548 | if (token.match(htmlVideoTagReg)) { 549 | result += this.dressUpBlockTag(type, token) 550 | } else if ([htmlImgTagReg].some(item => token.match(item))) { 551 | result += this.dressUpInlineTag(type, token) 552 | } else { 553 | result += token 554 | } 555 | } 556 | } 557 | if (textStartIndex < tokensLength) { 558 | result += this.dressUpText(type, tokens.slice(textStartIndex)) 559 | } 560 | return result 561 | } 562 | 563 | private dressUpText(type: BaseOpType, tokens: string[]): string { 564 | const text = tokens.join('') 565 | if (!text.trim()) return '' 566 | if (type === 'create') 567 | return `${text}` 568 | if (type === 'delete') 569 | return `${text}` 570 | return '' 571 | } 572 | 573 | private dressUpInlineTag(type: BaseOpType, token: string): string { 574 | if (type === 'create') 575 | return `${token}` 576 | if (type === 'delete') 577 | return `${token}` 578 | return '' 579 | } 580 | 581 | private dressUpBlockTag(type: BaseOpType, token: string): string { 582 | if (type === 'create') 583 | return `
${token}
` 584 | if (type === 'delete') 585 | return `
${token}
` 586 | return '' 587 | } 588 | } 589 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@rollup/plugin-node-resolve': 12 | specifier: ^15.3.0 13 | version: 15.3.0(rollup@4.26.0) 14 | '@rollup/plugin-typescript': 15 | specifier: ^12.1.1 16 | version: 12.1.1(rollup@4.26.0)(tslib@2.8.1)(typescript@5.6.3) 17 | '@types/node': 18 | specifier: ^20.17.6 19 | version: 20.17.6 20 | chalk: 21 | specifier: ^5.3.0 22 | version: 5.3.0 23 | enquirer: 24 | specifier: ^2.4.1 25 | version: 2.4.1 26 | postcss: 27 | specifier: ^8.4.49 28 | version: 8.4.49 29 | postcss-nested: 30 | specifier: ^7.0.2 31 | version: 7.0.2(postcss@8.4.49) 32 | postcss-preset-env: 33 | specifier: ^10.1.0 34 | version: 10.1.0(postcss@8.4.49) 35 | rollup: 36 | specifier: ^4.26.0 37 | version: 4.26.0 38 | rollup-plugin-dts: 39 | specifier: ^6.1.1 40 | version: 6.1.1(rollup@4.26.0)(typescript@5.6.3) 41 | rollup-plugin-postcss: 42 | specifier: ^4.0.2 43 | version: 4.0.2(postcss@8.4.49) 44 | semver: 45 | specifier: ^7.6.3 46 | version: 7.6.3 47 | tslib: 48 | specifier: ^2.8.1 49 | version: 2.8.1 50 | typescript: 51 | specifier: ^5.6.3 52 | version: 5.6.3 53 | vitest: 54 | specifier: ^2.1.4 55 | version: 2.1.4(@types/node@20.17.6)(terser@5.16.6) 56 | 57 | examples/basic: 58 | dependencies: 59 | '@armantang/html-diff': 60 | specifier: workspace:* 61 | version: link:../../packages/html-diff 62 | clsx: 63 | specifier: ^2.1.1 64 | version: 2.1.1 65 | github-markdown-css: 66 | specifier: ^5.7.0 67 | version: 5.7.0 68 | react: 69 | specifier: ^18.3.1 70 | version: 18.3.1 71 | react-dom: 72 | specifier: ^18.3.1 73 | version: 18.3.1(react@18.3.1) 74 | devDependencies: 75 | '@types/react': 76 | specifier: ^18.3.12 77 | version: 18.3.12 78 | '@types/react-dom': 79 | specifier: ^18.3.1 80 | version: 18.3.1 81 | '@vitejs/plugin-react': 82 | specifier: ^4.3.3 83 | version: 4.3.3(vite@5.4.11(@types/node@20.17.6)(terser@5.16.6)) 84 | autoprefixer: 85 | specifier: ^10.4.20 86 | version: 10.4.20(postcss@8.4.49) 87 | daisyui: 88 | specifier: ^4.12.14 89 | version: 4.12.14(postcss@8.4.49) 90 | postcss: 91 | specifier: ^8.4.49 92 | version: 8.4.49 93 | tailwindcss: 94 | specifier: ^3.4.14 95 | version: 3.4.14 96 | vite: 97 | specifier: ^5.4.10 98 | version: 5.4.11(@types/node@20.17.6)(terser@5.16.6) 99 | 100 | packages/html-diff: {} 101 | 102 | packages: 103 | 104 | '@alloc/quick-lru@5.2.0': 105 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 106 | engines: {node: '>=10'} 107 | 108 | '@ampproject/remapping@2.3.0': 109 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 110 | engines: {node: '>=6.0.0'} 111 | 112 | '@babel/code-frame@7.26.2': 113 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 114 | engines: {node: '>=6.9.0'} 115 | 116 | '@babel/compat-data@7.26.2': 117 | resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} 118 | engines: {node: '>=6.9.0'} 119 | 120 | '@babel/core@7.26.0': 121 | resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} 122 | engines: {node: '>=6.9.0'} 123 | 124 | '@babel/generator@7.26.2': 125 | resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} 126 | engines: {node: '>=6.9.0'} 127 | 128 | '@babel/helper-compilation-targets@7.25.9': 129 | resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} 130 | engines: {node: '>=6.9.0'} 131 | 132 | '@babel/helper-module-imports@7.25.9': 133 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 134 | engines: {node: '>=6.9.0'} 135 | 136 | '@babel/helper-module-transforms@7.26.0': 137 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 138 | engines: {node: '>=6.9.0'} 139 | peerDependencies: 140 | '@babel/core': ^7.0.0 141 | 142 | '@babel/helper-plugin-utils@7.25.9': 143 | resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} 144 | engines: {node: '>=6.9.0'} 145 | 146 | '@babel/helper-string-parser@7.25.9': 147 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 148 | engines: {node: '>=6.9.0'} 149 | 150 | '@babel/helper-validator-identifier@7.25.9': 151 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 152 | engines: {node: '>=6.9.0'} 153 | 154 | '@babel/helper-validator-option@7.25.9': 155 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 156 | engines: {node: '>=6.9.0'} 157 | 158 | '@babel/helpers@7.26.0': 159 | resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} 160 | engines: {node: '>=6.9.0'} 161 | 162 | '@babel/parser@7.26.2': 163 | resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} 164 | engines: {node: '>=6.0.0'} 165 | hasBin: true 166 | 167 | '@babel/plugin-transform-react-jsx-self@7.25.9': 168 | resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} 169 | engines: {node: '>=6.9.0'} 170 | peerDependencies: 171 | '@babel/core': ^7.0.0-0 172 | 173 | '@babel/plugin-transform-react-jsx-source@7.25.9': 174 | resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} 175 | engines: {node: '>=6.9.0'} 176 | peerDependencies: 177 | '@babel/core': ^7.0.0-0 178 | 179 | '@babel/template@7.25.9': 180 | resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} 181 | engines: {node: '>=6.9.0'} 182 | 183 | '@babel/traverse@7.25.9': 184 | resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} 185 | engines: {node: '>=6.9.0'} 186 | 187 | '@babel/types@7.26.0': 188 | resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} 189 | engines: {node: '>=6.9.0'} 190 | 191 | '@csstools/cascade-layer-name-parser@2.0.4': 192 | resolution: {integrity: sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==} 193 | engines: {node: '>=18'} 194 | peerDependencies: 195 | '@csstools/css-parser-algorithms': ^3.0.4 196 | '@csstools/css-tokenizer': ^3.0.3 197 | 198 | '@csstools/color-helpers@5.0.1': 199 | resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==} 200 | engines: {node: '>=18'} 201 | 202 | '@csstools/css-calc@2.1.0': 203 | resolution: {integrity: sha512-X69PmFOrjTZfN5ijxtI8hZ9kRADFSLrmmQ6hgDJ272Il049WGKpDY64KhrFm/7rbWve0z81QepawzjkKlqkNGw==} 204 | engines: {node: '>=18'} 205 | peerDependencies: 206 | '@csstools/css-parser-algorithms': ^3.0.4 207 | '@csstools/css-tokenizer': ^3.0.3 208 | 209 | '@csstools/css-color-parser@3.0.6': 210 | resolution: {integrity: sha512-S/IjXqTHdpI4EtzGoNCHfqraXF37x12ZZHA1Lk7zoT5pm2lMjFuqhX/89L7dqX4CcMacKK+6ZCs5TmEGb/+wKw==} 211 | engines: {node: '>=18'} 212 | peerDependencies: 213 | '@csstools/css-parser-algorithms': ^3.0.4 214 | '@csstools/css-tokenizer': ^3.0.3 215 | 216 | '@csstools/css-parser-algorithms@3.0.4': 217 | resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} 218 | engines: {node: '>=18'} 219 | peerDependencies: 220 | '@csstools/css-tokenizer': ^3.0.3 221 | 222 | '@csstools/css-tokenizer@3.0.3': 223 | resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} 224 | engines: {node: '>=18'} 225 | 226 | '@csstools/media-query-list-parser@4.0.2': 227 | resolution: {integrity: sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==} 228 | engines: {node: '>=18'} 229 | peerDependencies: 230 | '@csstools/css-parser-algorithms': ^3.0.4 231 | '@csstools/css-tokenizer': ^3.0.3 232 | 233 | '@csstools/postcss-cascade-layers@5.0.1': 234 | resolution: {integrity: sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==} 235 | engines: {node: '>=18'} 236 | peerDependencies: 237 | postcss: ^8.4 238 | 239 | '@csstools/postcss-color-function@4.0.6': 240 | resolution: {integrity: sha512-EcvXfC60cTIumzpsxWuvVjb7rsJEHPvqn3jeMEBUaE3JSc4FRuP7mEQ+1eicxWmIrs3FtzMH9gR3sgA5TH+ebQ==} 241 | engines: {node: '>=18'} 242 | peerDependencies: 243 | postcss: ^8.4 244 | 245 | '@csstools/postcss-color-mix-function@3.0.6': 246 | resolution: {integrity: sha512-jVKdJn4+JkASYGhyPO+Wa5WXSx1+oUgaXb3JsjJn/BlrtFh5zjocCY7pwWi0nuP24V1fY7glQsxEYcYNy0dMFg==} 247 | engines: {node: '>=18'} 248 | peerDependencies: 249 | postcss: ^8.4 250 | 251 | '@csstools/postcss-content-alt-text@2.0.4': 252 | resolution: {integrity: sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==} 253 | engines: {node: '>=18'} 254 | peerDependencies: 255 | postcss: ^8.4 256 | 257 | '@csstools/postcss-exponential-functions@2.0.5': 258 | resolution: {integrity: sha512-mi8R6dVfA2nDoKM3wcEi64I8vOYEgQVtVKCfmLHXupeLpACfGAided5ddMt5f+CnEodNu4DifuVwb0I6fQDGGQ==} 259 | engines: {node: '>=18'} 260 | peerDependencies: 261 | postcss: ^8.4 262 | 263 | '@csstools/postcss-font-format-keywords@4.0.0': 264 | resolution: {integrity: sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==} 265 | engines: {node: '>=18'} 266 | peerDependencies: 267 | postcss: ^8.4 268 | 269 | '@csstools/postcss-gamut-mapping@2.0.6': 270 | resolution: {integrity: sha512-0ke7fmXfc8H+kysZz246yjirAH6JFhyX9GTlyRnM0exHO80XcA9zeJpy5pOp5zo/AZiC/q5Pf+Hw7Pd6/uAoYA==} 271 | engines: {node: '>=18'} 272 | peerDependencies: 273 | postcss: ^8.4 274 | 275 | '@csstools/postcss-gradients-interpolation-method@5.0.6': 276 | resolution: {integrity: sha512-Itrbx6SLUzsZ6Mz3VuOlxhbfuyLTogG5DwEF1V8dAi24iMuvQPIHd7Ti+pNDp7j6WixndJGZaoNR0f9VSzwuTg==} 277 | engines: {node: '>=18'} 278 | peerDependencies: 279 | postcss: ^8.4 280 | 281 | '@csstools/postcss-hwb-function@4.0.6': 282 | resolution: {integrity: sha512-927Pqy3a1uBP7U8sTfaNdZVB0mNXzIrJO/GZ8us9219q9n06gOqCdfZ0E6d1P66Fm0fYHvxfDbfcUuwAn5UwhQ==} 283 | engines: {node: '>=18'} 284 | peerDependencies: 285 | postcss: ^8.4 286 | 287 | '@csstools/postcss-ic-unit@4.0.0': 288 | resolution: {integrity: sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==} 289 | engines: {node: '>=18'} 290 | peerDependencies: 291 | postcss: ^8.4 292 | 293 | '@csstools/postcss-initial@2.0.0': 294 | resolution: {integrity: sha512-dv2lNUKR+JV+OOhZm9paWzYBXOCi+rJPqJ2cJuhh9xd8USVrd0cBEPczla81HNOyThMQWeCcdln3gZkQV2kYxA==} 295 | engines: {node: '>=18'} 296 | peerDependencies: 297 | postcss: ^8.4 298 | 299 | '@csstools/postcss-is-pseudo-class@5.0.1': 300 | resolution: {integrity: sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==} 301 | engines: {node: '>=18'} 302 | peerDependencies: 303 | postcss: ^8.4 304 | 305 | '@csstools/postcss-light-dark-function@2.0.7': 306 | resolution: {integrity: sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==} 307 | engines: {node: '>=18'} 308 | peerDependencies: 309 | postcss: ^8.4 310 | 311 | '@csstools/postcss-logical-float-and-clear@3.0.0': 312 | resolution: {integrity: sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==} 313 | engines: {node: '>=18'} 314 | peerDependencies: 315 | postcss: ^8.4 316 | 317 | '@csstools/postcss-logical-overflow@2.0.0': 318 | resolution: {integrity: sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==} 319 | engines: {node: '>=18'} 320 | peerDependencies: 321 | postcss: ^8.4 322 | 323 | '@csstools/postcss-logical-overscroll-behavior@2.0.0': 324 | resolution: {integrity: sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==} 325 | engines: {node: '>=18'} 326 | peerDependencies: 327 | postcss: ^8.4 328 | 329 | '@csstools/postcss-logical-resize@3.0.0': 330 | resolution: {integrity: sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==} 331 | engines: {node: '>=18'} 332 | peerDependencies: 333 | postcss: ^8.4 334 | 335 | '@csstools/postcss-logical-viewport-units@3.0.3': 336 | resolution: {integrity: sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==} 337 | engines: {node: '>=18'} 338 | peerDependencies: 339 | postcss: ^8.4 340 | 341 | '@csstools/postcss-media-minmax@2.0.5': 342 | resolution: {integrity: sha512-sdh5i5GToZOIAiwhdntRWv77QDtsxP2r2gXW/WbLSCoLr00KTq/yiF1qlQ5XX2+lmiFa8rATKMcbwl3oXDMNew==} 343 | engines: {node: '>=18'} 344 | peerDependencies: 345 | postcss: ^8.4 346 | 347 | '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.4': 348 | resolution: {integrity: sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==} 349 | engines: {node: '>=18'} 350 | peerDependencies: 351 | postcss: ^8.4 352 | 353 | '@csstools/postcss-nested-calc@4.0.0': 354 | resolution: {integrity: sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==} 355 | engines: {node: '>=18'} 356 | peerDependencies: 357 | postcss: ^8.4 358 | 359 | '@csstools/postcss-normalize-display-values@4.0.0': 360 | resolution: {integrity: sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==} 361 | engines: {node: '>=18'} 362 | peerDependencies: 363 | postcss: ^8.4 364 | 365 | '@csstools/postcss-oklab-function@4.0.6': 366 | resolution: {integrity: sha512-Hptoa0uX+XsNacFBCIQKTUBrFKDiplHan42X73EklG6XmQLG7/aIvxoNhvZ7PvOWMt67Pw3bIlUY2nD6p5vL8A==} 367 | engines: {node: '>=18'} 368 | peerDependencies: 369 | postcss: ^8.4 370 | 371 | '@csstools/postcss-progressive-custom-properties@4.0.0': 372 | resolution: {integrity: sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==} 373 | engines: {node: '>=18'} 374 | peerDependencies: 375 | postcss: ^8.4 376 | 377 | '@csstools/postcss-random-function@1.0.1': 378 | resolution: {integrity: sha512-Ab/tF8/RXktQlFwVhiC70UNfpFQRhtE5fQQoP2pO+KCPGLsLdWFiOuHgSRtBOqEshCVAzR4H6o38nhvRZq8deA==} 379 | engines: {node: '>=18'} 380 | peerDependencies: 381 | postcss: ^8.4 382 | 383 | '@csstools/postcss-relative-color-syntax@3.0.6': 384 | resolution: {integrity: sha512-yxP618Xb+ji1I624jILaYM62uEmZcmbdmFoZHoaThw896sq0vU39kqTTF+ZNic9XyPtPMvq0vyvbgmHaszq8xg==} 385 | engines: {node: '>=18'} 386 | peerDependencies: 387 | postcss: ^8.4 388 | 389 | '@csstools/postcss-scope-pseudo-class@4.0.1': 390 | resolution: {integrity: sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==} 391 | engines: {node: '>=18'} 392 | peerDependencies: 393 | postcss: ^8.4 394 | 395 | '@csstools/postcss-sign-functions@1.0.0': 396 | resolution: {integrity: sha512-cUpr5W8eookBi5TiLSvx1HL6DFoTTgcj2pmiVNd63y2JHhvtpnJs3sfsFMmLhB42yTRS02tFPsNz3Q5zeN8ZVA==} 397 | engines: {node: '>=18'} 398 | peerDependencies: 399 | postcss: ^8.4 400 | 401 | '@csstools/postcss-stepped-value-functions@4.0.5': 402 | resolution: {integrity: sha512-G6SJ6hZJkhxo6UZojVlLo14MohH4J5J7z8CRBrxxUYy9JuZiIqUo5TBYyDGcE0PLdzpg63a7mHSJz3VD+gMwqw==} 403 | engines: {node: '>=18'} 404 | peerDependencies: 405 | postcss: ^8.4 406 | 407 | '@csstools/postcss-text-decoration-shorthand@4.0.1': 408 | resolution: {integrity: sha512-xPZIikbx6jyzWvhms27uugIc0I4ykH4keRvoa3rxX5K7lEhkbd54rjj/dv60qOCTisoS+3bmwJTeyV1VNBrXaw==} 409 | engines: {node: '>=18'} 410 | peerDependencies: 411 | postcss: ^8.4 412 | 413 | '@csstools/postcss-trigonometric-functions@4.0.5': 414 | resolution: {integrity: sha512-/YQThYkt5MLvAmVu7zxjhceCYlKrYddK6LEmK5I4ojlS6BmO9u2yO4+xjXzu2+NPYmHSTtP4NFSamBCMmJ1NJA==} 415 | engines: {node: '>=18'} 416 | peerDependencies: 417 | postcss: ^8.4 418 | 419 | '@csstools/postcss-unset-value@4.0.0': 420 | resolution: {integrity: sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==} 421 | engines: {node: '>=18'} 422 | peerDependencies: 423 | postcss: ^8.4 424 | 425 | '@csstools/selector-resolve-nested@3.0.0': 426 | resolution: {integrity: sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==} 427 | engines: {node: '>=18'} 428 | peerDependencies: 429 | postcss-selector-parser: ^7.0.0 430 | 431 | '@csstools/selector-specificity@5.0.0': 432 | resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} 433 | engines: {node: '>=18'} 434 | peerDependencies: 435 | postcss-selector-parser: ^7.0.0 436 | 437 | '@csstools/utilities@2.0.0': 438 | resolution: {integrity: sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==} 439 | engines: {node: '>=18'} 440 | peerDependencies: 441 | postcss: ^8.4 442 | 443 | '@esbuild/aix-ppc64@0.21.5': 444 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 445 | engines: {node: '>=12'} 446 | cpu: [ppc64] 447 | os: [aix] 448 | 449 | '@esbuild/android-arm64@0.21.5': 450 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 451 | engines: {node: '>=12'} 452 | cpu: [arm64] 453 | os: [android] 454 | 455 | '@esbuild/android-arm@0.21.5': 456 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 457 | engines: {node: '>=12'} 458 | cpu: [arm] 459 | os: [android] 460 | 461 | '@esbuild/android-x64@0.21.5': 462 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 463 | engines: {node: '>=12'} 464 | cpu: [x64] 465 | os: [android] 466 | 467 | '@esbuild/darwin-arm64@0.21.5': 468 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 469 | engines: {node: '>=12'} 470 | cpu: [arm64] 471 | os: [darwin] 472 | 473 | '@esbuild/darwin-x64@0.21.5': 474 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 475 | engines: {node: '>=12'} 476 | cpu: [x64] 477 | os: [darwin] 478 | 479 | '@esbuild/freebsd-arm64@0.21.5': 480 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 481 | engines: {node: '>=12'} 482 | cpu: [arm64] 483 | os: [freebsd] 484 | 485 | '@esbuild/freebsd-x64@0.21.5': 486 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 487 | engines: {node: '>=12'} 488 | cpu: [x64] 489 | os: [freebsd] 490 | 491 | '@esbuild/linux-arm64@0.21.5': 492 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 493 | engines: {node: '>=12'} 494 | cpu: [arm64] 495 | os: [linux] 496 | 497 | '@esbuild/linux-arm@0.21.5': 498 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 499 | engines: {node: '>=12'} 500 | cpu: [arm] 501 | os: [linux] 502 | 503 | '@esbuild/linux-ia32@0.21.5': 504 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 505 | engines: {node: '>=12'} 506 | cpu: [ia32] 507 | os: [linux] 508 | 509 | '@esbuild/linux-loong64@0.21.5': 510 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 511 | engines: {node: '>=12'} 512 | cpu: [loong64] 513 | os: [linux] 514 | 515 | '@esbuild/linux-mips64el@0.21.5': 516 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 517 | engines: {node: '>=12'} 518 | cpu: [mips64el] 519 | os: [linux] 520 | 521 | '@esbuild/linux-ppc64@0.21.5': 522 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 523 | engines: {node: '>=12'} 524 | cpu: [ppc64] 525 | os: [linux] 526 | 527 | '@esbuild/linux-riscv64@0.21.5': 528 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 529 | engines: {node: '>=12'} 530 | cpu: [riscv64] 531 | os: [linux] 532 | 533 | '@esbuild/linux-s390x@0.21.5': 534 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 535 | engines: {node: '>=12'} 536 | cpu: [s390x] 537 | os: [linux] 538 | 539 | '@esbuild/linux-x64@0.21.5': 540 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 541 | engines: {node: '>=12'} 542 | cpu: [x64] 543 | os: [linux] 544 | 545 | '@esbuild/netbsd-x64@0.21.5': 546 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 547 | engines: {node: '>=12'} 548 | cpu: [x64] 549 | os: [netbsd] 550 | 551 | '@esbuild/openbsd-x64@0.21.5': 552 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 553 | engines: {node: '>=12'} 554 | cpu: [x64] 555 | os: [openbsd] 556 | 557 | '@esbuild/sunos-x64@0.21.5': 558 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 559 | engines: {node: '>=12'} 560 | cpu: [x64] 561 | os: [sunos] 562 | 563 | '@esbuild/win32-arm64@0.21.5': 564 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 565 | engines: {node: '>=12'} 566 | cpu: [arm64] 567 | os: [win32] 568 | 569 | '@esbuild/win32-ia32@0.21.5': 570 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 571 | engines: {node: '>=12'} 572 | cpu: [ia32] 573 | os: [win32] 574 | 575 | '@esbuild/win32-x64@0.21.5': 576 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 577 | engines: {node: '>=12'} 578 | cpu: [x64] 579 | os: [win32] 580 | 581 | '@isaacs/cliui@8.0.2': 582 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 583 | engines: {node: '>=12'} 584 | 585 | '@jridgewell/gen-mapping@0.3.5': 586 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 587 | engines: {node: '>=6.0.0'} 588 | 589 | '@jridgewell/resolve-uri@3.1.2': 590 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 591 | engines: {node: '>=6.0.0'} 592 | 593 | '@jridgewell/set-array@1.2.1': 594 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 595 | engines: {node: '>=6.0.0'} 596 | 597 | '@jridgewell/source-map@0.3.6': 598 | resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} 599 | 600 | '@jridgewell/sourcemap-codec@1.5.0': 601 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 602 | 603 | '@jridgewell/trace-mapping@0.3.25': 604 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 605 | 606 | '@nodelib/fs.scandir@2.1.5': 607 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 608 | engines: {node: '>= 8'} 609 | 610 | '@nodelib/fs.stat@2.0.5': 611 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 612 | engines: {node: '>= 8'} 613 | 614 | '@nodelib/fs.walk@1.2.8': 615 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 616 | engines: {node: '>= 8'} 617 | 618 | '@pkgjs/parseargs@0.11.0': 619 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 620 | engines: {node: '>=14'} 621 | 622 | '@rollup/plugin-node-resolve@15.3.0': 623 | resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} 624 | engines: {node: '>=14.0.0'} 625 | peerDependencies: 626 | rollup: ^2.78.0||^3.0.0||^4.0.0 627 | peerDependenciesMeta: 628 | rollup: 629 | optional: true 630 | 631 | '@rollup/plugin-typescript@12.1.1': 632 | resolution: {integrity: sha512-t7O653DpfB5MbFrqPe/VcKFFkvRuFNp9qId3xq4Eth5xlyymzxNpye2z8Hrl0RIMuXTSr5GGcFpkdlMeacUiFQ==} 633 | engines: {node: '>=14.0.0'} 634 | peerDependencies: 635 | rollup: ^2.14.0||^3.0.0||^4.0.0 636 | tslib: '*' 637 | typescript: '>=3.7.0' 638 | peerDependenciesMeta: 639 | rollup: 640 | optional: true 641 | tslib: 642 | optional: true 643 | 644 | '@rollup/pluginutils@5.1.3': 645 | resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} 646 | engines: {node: '>=14.0.0'} 647 | peerDependencies: 648 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 649 | peerDependenciesMeta: 650 | rollup: 651 | optional: true 652 | 653 | '@rollup/rollup-android-arm-eabi@4.26.0': 654 | resolution: {integrity: sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==} 655 | cpu: [arm] 656 | os: [android] 657 | 658 | '@rollup/rollup-android-arm64@4.26.0': 659 | resolution: {integrity: sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==} 660 | cpu: [arm64] 661 | os: [android] 662 | 663 | '@rollup/rollup-darwin-arm64@4.26.0': 664 | resolution: {integrity: sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==} 665 | cpu: [arm64] 666 | os: [darwin] 667 | 668 | '@rollup/rollup-darwin-x64@4.26.0': 669 | resolution: {integrity: sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==} 670 | cpu: [x64] 671 | os: [darwin] 672 | 673 | '@rollup/rollup-freebsd-arm64@4.26.0': 674 | resolution: {integrity: sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==} 675 | cpu: [arm64] 676 | os: [freebsd] 677 | 678 | '@rollup/rollup-freebsd-x64@4.26.0': 679 | resolution: {integrity: sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==} 680 | cpu: [x64] 681 | os: [freebsd] 682 | 683 | '@rollup/rollup-linux-arm-gnueabihf@4.26.0': 684 | resolution: {integrity: sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==} 685 | cpu: [arm] 686 | os: [linux] 687 | 688 | '@rollup/rollup-linux-arm-musleabihf@4.26.0': 689 | resolution: {integrity: sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==} 690 | cpu: [arm] 691 | os: [linux] 692 | 693 | '@rollup/rollup-linux-arm64-gnu@4.26.0': 694 | resolution: {integrity: sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==} 695 | cpu: [arm64] 696 | os: [linux] 697 | 698 | '@rollup/rollup-linux-arm64-musl@4.26.0': 699 | resolution: {integrity: sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==} 700 | cpu: [arm64] 701 | os: [linux] 702 | 703 | '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': 704 | resolution: {integrity: sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==} 705 | cpu: [ppc64] 706 | os: [linux] 707 | 708 | '@rollup/rollup-linux-riscv64-gnu@4.26.0': 709 | resolution: {integrity: sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==} 710 | cpu: [riscv64] 711 | os: [linux] 712 | 713 | '@rollup/rollup-linux-s390x-gnu@4.26.0': 714 | resolution: {integrity: sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==} 715 | cpu: [s390x] 716 | os: [linux] 717 | 718 | '@rollup/rollup-linux-x64-gnu@4.26.0': 719 | resolution: {integrity: sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==} 720 | cpu: [x64] 721 | os: [linux] 722 | 723 | '@rollup/rollup-linux-x64-musl@4.26.0': 724 | resolution: {integrity: sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==} 725 | cpu: [x64] 726 | os: [linux] 727 | 728 | '@rollup/rollup-win32-arm64-msvc@4.26.0': 729 | resolution: {integrity: sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==} 730 | cpu: [arm64] 731 | os: [win32] 732 | 733 | '@rollup/rollup-win32-ia32-msvc@4.26.0': 734 | resolution: {integrity: sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==} 735 | cpu: [ia32] 736 | os: [win32] 737 | 738 | '@rollup/rollup-win32-x64-msvc@4.26.0': 739 | resolution: {integrity: sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==} 740 | cpu: [x64] 741 | os: [win32] 742 | 743 | '@trysound/sax@0.2.0': 744 | resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} 745 | engines: {node: '>=10.13.0'} 746 | 747 | '@types/babel__core@7.20.5': 748 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 749 | 750 | '@types/babel__generator@7.6.8': 751 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 752 | 753 | '@types/babel__template@7.4.4': 754 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 755 | 756 | '@types/babel__traverse@7.20.6': 757 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 758 | 759 | '@types/estree@1.0.6': 760 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 761 | 762 | '@types/node@20.17.6': 763 | resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==} 764 | 765 | '@types/prop-types@15.7.13': 766 | resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} 767 | 768 | '@types/react-dom@18.3.1': 769 | resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} 770 | 771 | '@types/react@18.3.12': 772 | resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} 773 | 774 | '@types/resolve@1.20.2': 775 | resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 776 | 777 | '@vitejs/plugin-react@4.3.3': 778 | resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} 779 | engines: {node: ^14.18.0 || >=16.0.0} 780 | peerDependencies: 781 | vite: ^4.2.0 || ^5.0.0 782 | 783 | '@vitest/expect@2.1.4': 784 | resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} 785 | 786 | '@vitest/mocker@2.1.4': 787 | resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} 788 | peerDependencies: 789 | msw: ^2.4.9 790 | vite: ^5.0.0 791 | peerDependenciesMeta: 792 | msw: 793 | optional: true 794 | vite: 795 | optional: true 796 | 797 | '@vitest/pretty-format@2.1.4': 798 | resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} 799 | 800 | '@vitest/runner@2.1.4': 801 | resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} 802 | 803 | '@vitest/snapshot@2.1.4': 804 | resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} 805 | 806 | '@vitest/spy@2.1.4': 807 | resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} 808 | 809 | '@vitest/utils@2.1.4': 810 | resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} 811 | 812 | acorn@8.14.0: 813 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 814 | engines: {node: '>=0.4.0'} 815 | hasBin: true 816 | 817 | ansi-colors@4.1.3: 818 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 819 | engines: {node: '>=6'} 820 | 821 | ansi-regex@5.0.1: 822 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 823 | engines: {node: '>=8'} 824 | 825 | ansi-regex@6.1.0: 826 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 827 | engines: {node: '>=12'} 828 | 829 | ansi-styles@4.3.0: 830 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 831 | engines: {node: '>=8'} 832 | 833 | ansi-styles@6.2.1: 834 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 835 | engines: {node: '>=12'} 836 | 837 | any-promise@1.3.0: 838 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 839 | 840 | anymatch@3.1.3: 841 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 842 | engines: {node: '>= 8'} 843 | 844 | arg@5.0.2: 845 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 846 | 847 | assertion-error@2.0.1: 848 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 849 | engines: {node: '>=12'} 850 | 851 | autoprefixer@10.4.20: 852 | resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} 853 | engines: {node: ^10 || ^12 || >=14} 854 | hasBin: true 855 | peerDependencies: 856 | postcss: ^8.1.0 857 | 858 | balanced-match@1.0.2: 859 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 860 | 861 | binary-extensions@2.3.0: 862 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 863 | engines: {node: '>=8'} 864 | 865 | boolbase@1.0.0: 866 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 867 | 868 | brace-expansion@2.0.1: 869 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 870 | 871 | braces@3.0.3: 872 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 873 | engines: {node: '>=8'} 874 | 875 | browserslist@4.24.2: 876 | resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} 877 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 878 | hasBin: true 879 | 880 | buffer-from@1.1.2: 881 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 882 | 883 | cac@6.7.14: 884 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 885 | engines: {node: '>=8'} 886 | 887 | camelcase-css@2.0.1: 888 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 889 | engines: {node: '>= 6'} 890 | 891 | caniuse-api@3.0.0: 892 | resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} 893 | 894 | caniuse-lite@1.0.30001680: 895 | resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} 896 | 897 | chai@5.1.2: 898 | resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} 899 | engines: {node: '>=12'} 900 | 901 | chalk@4.1.2: 902 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 903 | engines: {node: '>=10'} 904 | 905 | chalk@5.3.0: 906 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 907 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 908 | 909 | check-error@2.1.1: 910 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 911 | engines: {node: '>= 16'} 912 | 913 | chokidar@3.6.0: 914 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 915 | engines: {node: '>= 8.10.0'} 916 | 917 | clsx@2.1.1: 918 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 919 | engines: {node: '>=6'} 920 | 921 | color-convert@2.0.1: 922 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 923 | engines: {node: '>=7.0.0'} 924 | 925 | color-name@1.1.4: 926 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 927 | 928 | colord@2.9.3: 929 | resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} 930 | 931 | commander@2.20.3: 932 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 933 | 934 | commander@4.1.1: 935 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 936 | engines: {node: '>= 6'} 937 | 938 | commander@7.2.0: 939 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} 940 | engines: {node: '>= 10'} 941 | 942 | concat-with-sourcemaps@1.1.0: 943 | resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} 944 | 945 | convert-source-map@2.0.0: 946 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 947 | 948 | cross-spawn@7.0.5: 949 | resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} 950 | engines: {node: '>= 8'} 951 | 952 | css-blank-pseudo@7.0.1: 953 | resolution: {integrity: sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==} 954 | engines: {node: '>=18'} 955 | peerDependencies: 956 | postcss: ^8.4 957 | 958 | css-declaration-sorter@6.4.1: 959 | resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} 960 | engines: {node: ^10 || ^12 || >=14} 961 | peerDependencies: 962 | postcss: ^8.0.9 963 | 964 | css-has-pseudo@7.0.1: 965 | resolution: {integrity: sha512-EOcoyJt+OsuKfCADgLT7gADZI5jMzIe/AeI6MeAYKiFBDmNmM7kk46DtSfMj5AohUJisqVzopBpnQTlvbyaBWg==} 966 | engines: {node: '>=18'} 967 | peerDependencies: 968 | postcss: ^8.4 969 | 970 | css-prefers-color-scheme@10.0.0: 971 | resolution: {integrity: sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==} 972 | engines: {node: '>=18'} 973 | peerDependencies: 974 | postcss: ^8.4 975 | 976 | css-select@4.3.0: 977 | resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} 978 | 979 | css-selector-tokenizer@0.8.0: 980 | resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} 981 | 982 | css-tree@1.1.3: 983 | resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} 984 | engines: {node: '>=8.0.0'} 985 | 986 | css-what@6.1.0: 987 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 988 | engines: {node: '>= 6'} 989 | 990 | cssdb@8.2.1: 991 | resolution: {integrity: sha512-KwEPys7lNsC8OjASI8RrmwOYYDcm0JOW9zQhcV83ejYcQkirTEyeAGui8aO2F5PiS6SLpxuTzl6qlMElIdsgIg==} 992 | 993 | cssesc@3.0.0: 994 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 995 | engines: {node: '>=4'} 996 | hasBin: true 997 | 998 | cssnano-preset-default@5.2.14: 999 | resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} 1000 | engines: {node: ^10 || ^12 || >=14.0} 1001 | peerDependencies: 1002 | postcss: ^8.2.15 1003 | 1004 | cssnano-utils@3.1.0: 1005 | resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} 1006 | engines: {node: ^10 || ^12 || >=14.0} 1007 | peerDependencies: 1008 | postcss: ^8.2.15 1009 | 1010 | cssnano@5.1.15: 1011 | resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} 1012 | engines: {node: ^10 || ^12 || >=14.0} 1013 | peerDependencies: 1014 | postcss: ^8.2.15 1015 | 1016 | csso@4.2.0: 1017 | resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} 1018 | engines: {node: '>=8.0.0'} 1019 | 1020 | csstype@3.1.3: 1021 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 1022 | 1023 | culori@3.3.0: 1024 | resolution: {integrity: sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==} 1025 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1026 | 1027 | daisyui@4.12.14: 1028 | resolution: {integrity: sha512-hA27cdBasdwd4/iEjn+aidoCrRroDuo3G5W9NDKaVCJI437Mm/3eSL/2u7MkZ0pt8a+TrYF3aT2pFVemTS3how==} 1029 | engines: {node: '>=16.9.0'} 1030 | 1031 | debug@4.3.7: 1032 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 1033 | engines: {node: '>=6.0'} 1034 | peerDependencies: 1035 | supports-color: '*' 1036 | peerDependenciesMeta: 1037 | supports-color: 1038 | optional: true 1039 | 1040 | deep-eql@5.0.2: 1041 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 1042 | engines: {node: '>=6'} 1043 | 1044 | deepmerge@4.3.1: 1045 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1046 | engines: {node: '>=0.10.0'} 1047 | 1048 | didyoumean@1.2.2: 1049 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 1050 | 1051 | dlv@1.1.3: 1052 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 1053 | 1054 | dom-serializer@1.4.1: 1055 | resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} 1056 | 1057 | domelementtype@2.3.0: 1058 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 1059 | 1060 | domhandler@4.3.1: 1061 | resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} 1062 | engines: {node: '>= 4'} 1063 | 1064 | domutils@2.8.0: 1065 | resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} 1066 | 1067 | eastasianwidth@0.2.0: 1068 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 1069 | 1070 | electron-to-chromium@1.5.57: 1071 | resolution: {integrity: sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==} 1072 | 1073 | emoji-regex@8.0.0: 1074 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1075 | 1076 | emoji-regex@9.2.2: 1077 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1078 | 1079 | enquirer@2.4.1: 1080 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 1081 | engines: {node: '>=8.6'} 1082 | 1083 | entities@2.2.0: 1084 | resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} 1085 | 1086 | esbuild@0.21.5: 1087 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 1088 | engines: {node: '>=12'} 1089 | hasBin: true 1090 | 1091 | escalade@3.2.0: 1092 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 1093 | engines: {node: '>=6'} 1094 | 1095 | estree-walker@0.6.1: 1096 | resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} 1097 | 1098 | estree-walker@2.0.2: 1099 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1100 | 1101 | estree-walker@3.0.3: 1102 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1103 | 1104 | eventemitter3@4.0.7: 1105 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} 1106 | 1107 | expect-type@1.1.0: 1108 | resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} 1109 | engines: {node: '>=12.0.0'} 1110 | 1111 | fast-glob@3.3.2: 1112 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1113 | engines: {node: '>=8.6.0'} 1114 | 1115 | fastparse@1.1.2: 1116 | resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} 1117 | 1118 | fastq@1.17.1: 1119 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 1120 | 1121 | fill-range@7.1.1: 1122 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1123 | engines: {node: '>=8'} 1124 | 1125 | foreground-child@3.3.0: 1126 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 1127 | engines: {node: '>=14'} 1128 | 1129 | fraction.js@4.3.7: 1130 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 1131 | 1132 | fsevents@2.3.3: 1133 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1134 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1135 | os: [darwin] 1136 | 1137 | function-bind@1.1.2: 1138 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1139 | 1140 | generic-names@4.0.0: 1141 | resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} 1142 | 1143 | gensync@1.0.0-beta.2: 1144 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1145 | engines: {node: '>=6.9.0'} 1146 | 1147 | github-markdown-css@5.7.0: 1148 | resolution: {integrity: sha512-GoYhaqELL4YUjz4tZ00PQ4JzFQkMfrBVuEeRB8W74HoikHWNiaGqSgynpwJEc+xom5uf04qoD/tUSS6ziZltaQ==} 1149 | engines: {node: '>=10'} 1150 | 1151 | glob-parent@5.1.2: 1152 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1153 | engines: {node: '>= 6'} 1154 | 1155 | glob-parent@6.0.2: 1156 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1157 | engines: {node: '>=10.13.0'} 1158 | 1159 | glob@10.4.5: 1160 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 1161 | hasBin: true 1162 | 1163 | globals@11.12.0: 1164 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1165 | engines: {node: '>=4'} 1166 | 1167 | has-flag@4.0.0: 1168 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1169 | engines: {node: '>=8'} 1170 | 1171 | hasown@2.0.2: 1172 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1173 | engines: {node: '>= 0.4'} 1174 | 1175 | icss-replace-symbols@1.1.0: 1176 | resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} 1177 | 1178 | icss-utils@5.1.0: 1179 | resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} 1180 | engines: {node: ^10 || ^12 || >= 14} 1181 | peerDependencies: 1182 | postcss: ^8.1.0 1183 | 1184 | import-cwd@3.0.0: 1185 | resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} 1186 | engines: {node: '>=8'} 1187 | 1188 | import-from@3.0.0: 1189 | resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} 1190 | engines: {node: '>=8'} 1191 | 1192 | is-binary-path@2.1.0: 1193 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1194 | engines: {node: '>=8'} 1195 | 1196 | is-core-module@2.15.1: 1197 | resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 1198 | engines: {node: '>= 0.4'} 1199 | 1200 | is-extglob@2.1.1: 1201 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1202 | engines: {node: '>=0.10.0'} 1203 | 1204 | is-fullwidth-code-point@3.0.0: 1205 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1206 | engines: {node: '>=8'} 1207 | 1208 | is-glob@4.0.3: 1209 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1210 | engines: {node: '>=0.10.0'} 1211 | 1212 | is-module@1.0.0: 1213 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 1214 | 1215 | is-number@7.0.0: 1216 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1217 | engines: {node: '>=0.12.0'} 1218 | 1219 | isexe@2.0.0: 1220 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1221 | 1222 | jackspeak@3.4.3: 1223 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1224 | 1225 | jiti@1.21.6: 1226 | resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} 1227 | hasBin: true 1228 | 1229 | js-tokens@4.0.0: 1230 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1231 | 1232 | jsesc@3.0.2: 1233 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 1234 | engines: {node: '>=6'} 1235 | hasBin: true 1236 | 1237 | json5@2.2.3: 1238 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1239 | engines: {node: '>=6'} 1240 | hasBin: true 1241 | 1242 | lilconfig@2.1.0: 1243 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1244 | engines: {node: '>=10'} 1245 | 1246 | lilconfig@3.1.2: 1247 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} 1248 | engines: {node: '>=14'} 1249 | 1250 | lines-and-columns@1.2.4: 1251 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1252 | 1253 | loader-utils@3.3.1: 1254 | resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} 1255 | engines: {node: '>= 12.13.0'} 1256 | 1257 | lodash.camelcase@4.3.0: 1258 | resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} 1259 | 1260 | lodash.memoize@4.1.2: 1261 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 1262 | 1263 | lodash.uniq@4.5.0: 1264 | resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} 1265 | 1266 | loose-envify@1.4.0: 1267 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1268 | hasBin: true 1269 | 1270 | loupe@3.1.2: 1271 | resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} 1272 | 1273 | lru-cache@10.4.3: 1274 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1275 | 1276 | lru-cache@5.1.1: 1277 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1278 | 1279 | magic-string@0.30.12: 1280 | resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} 1281 | 1282 | mdn-data@2.0.14: 1283 | resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} 1284 | 1285 | merge2@1.4.1: 1286 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1287 | engines: {node: '>= 8'} 1288 | 1289 | micromatch@4.0.8: 1290 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1291 | engines: {node: '>=8.6'} 1292 | 1293 | minimatch@9.0.5: 1294 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1295 | engines: {node: '>=16 || 14 >=14.17'} 1296 | 1297 | minipass@7.1.2: 1298 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1299 | engines: {node: '>=16 || 14 >=14.17'} 1300 | 1301 | ms@2.1.3: 1302 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1303 | 1304 | mz@2.7.0: 1305 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1306 | 1307 | nanoid@3.3.7: 1308 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1309 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1310 | hasBin: true 1311 | 1312 | node-releases@2.0.18: 1313 | resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} 1314 | 1315 | normalize-path@3.0.0: 1316 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1317 | engines: {node: '>=0.10.0'} 1318 | 1319 | normalize-range@0.1.2: 1320 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 1321 | engines: {node: '>=0.10.0'} 1322 | 1323 | normalize-url@6.1.0: 1324 | resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} 1325 | engines: {node: '>=10'} 1326 | 1327 | nth-check@2.1.1: 1328 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 1329 | 1330 | object-assign@4.1.1: 1331 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1332 | engines: {node: '>=0.10.0'} 1333 | 1334 | object-hash@3.0.0: 1335 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1336 | engines: {node: '>= 6'} 1337 | 1338 | p-finally@1.0.0: 1339 | resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} 1340 | engines: {node: '>=4'} 1341 | 1342 | p-queue@6.6.2: 1343 | resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} 1344 | engines: {node: '>=8'} 1345 | 1346 | p-timeout@3.2.0: 1347 | resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} 1348 | engines: {node: '>=8'} 1349 | 1350 | package-json-from-dist@1.0.1: 1351 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1352 | 1353 | path-key@3.1.1: 1354 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1355 | engines: {node: '>=8'} 1356 | 1357 | path-parse@1.0.7: 1358 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1359 | 1360 | path-scurry@1.11.1: 1361 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1362 | engines: {node: '>=16 || 14 >=14.18'} 1363 | 1364 | pathe@1.1.2: 1365 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 1366 | 1367 | pathval@2.0.0: 1368 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1369 | engines: {node: '>= 14.16'} 1370 | 1371 | picocolors@1.1.1: 1372 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1373 | 1374 | picomatch@2.3.1: 1375 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1376 | engines: {node: '>=8.6'} 1377 | 1378 | picomatch@4.0.2: 1379 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1380 | engines: {node: '>=12'} 1381 | 1382 | pify@2.3.0: 1383 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1384 | engines: {node: '>=0.10.0'} 1385 | 1386 | pify@5.0.0: 1387 | resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} 1388 | engines: {node: '>=10'} 1389 | 1390 | pirates@4.0.6: 1391 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1392 | engines: {node: '>= 6'} 1393 | 1394 | postcss-attribute-case-insensitive@7.0.1: 1395 | resolution: {integrity: sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==} 1396 | engines: {node: '>=18'} 1397 | peerDependencies: 1398 | postcss: ^8.4 1399 | 1400 | postcss-calc@8.2.4: 1401 | resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} 1402 | peerDependencies: 1403 | postcss: ^8.2.2 1404 | 1405 | postcss-clamp@4.1.0: 1406 | resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} 1407 | engines: {node: '>=7.6.0'} 1408 | peerDependencies: 1409 | postcss: ^8.4.6 1410 | 1411 | postcss-color-functional-notation@7.0.6: 1412 | resolution: {integrity: sha512-wLXvm8RmLs14Z2nVpB4CWlnvaWPRcOZFltJSlcbYwSJ1EDZKsKDhPKIMecCnuU054KSmlmubkqczmm6qBPCBhA==} 1413 | engines: {node: '>=18'} 1414 | peerDependencies: 1415 | postcss: ^8.4 1416 | 1417 | postcss-color-hex-alpha@10.0.0: 1418 | resolution: {integrity: sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==} 1419 | engines: {node: '>=18'} 1420 | peerDependencies: 1421 | postcss: ^8.4 1422 | 1423 | postcss-color-rebeccapurple@10.0.0: 1424 | resolution: {integrity: sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==} 1425 | engines: {node: '>=18'} 1426 | peerDependencies: 1427 | postcss: ^8.4 1428 | 1429 | postcss-colormin@5.3.1: 1430 | resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} 1431 | engines: {node: ^10 || ^12 || >=14.0} 1432 | peerDependencies: 1433 | postcss: ^8.2.15 1434 | 1435 | postcss-convert-values@5.1.3: 1436 | resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} 1437 | engines: {node: ^10 || ^12 || >=14.0} 1438 | peerDependencies: 1439 | postcss: ^8.2.15 1440 | 1441 | postcss-custom-media@11.0.5: 1442 | resolution: {integrity: sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==} 1443 | engines: {node: '>=18'} 1444 | peerDependencies: 1445 | postcss: ^8.4 1446 | 1447 | postcss-custom-properties@14.0.4: 1448 | resolution: {integrity: sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==} 1449 | engines: {node: '>=18'} 1450 | peerDependencies: 1451 | postcss: ^8.4 1452 | 1453 | postcss-custom-selectors@8.0.4: 1454 | resolution: {integrity: sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==} 1455 | engines: {node: '>=18'} 1456 | peerDependencies: 1457 | postcss: ^8.4 1458 | 1459 | postcss-dir-pseudo-class@9.0.1: 1460 | resolution: {integrity: sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==} 1461 | engines: {node: '>=18'} 1462 | peerDependencies: 1463 | postcss: ^8.4 1464 | 1465 | postcss-discard-comments@5.1.2: 1466 | resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} 1467 | engines: {node: ^10 || ^12 || >=14.0} 1468 | peerDependencies: 1469 | postcss: ^8.2.15 1470 | 1471 | postcss-discard-duplicates@5.1.0: 1472 | resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} 1473 | engines: {node: ^10 || ^12 || >=14.0} 1474 | peerDependencies: 1475 | postcss: ^8.2.15 1476 | 1477 | postcss-discard-empty@5.1.1: 1478 | resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} 1479 | engines: {node: ^10 || ^12 || >=14.0} 1480 | peerDependencies: 1481 | postcss: ^8.2.15 1482 | 1483 | postcss-discard-overridden@5.1.0: 1484 | resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} 1485 | engines: {node: ^10 || ^12 || >=14.0} 1486 | peerDependencies: 1487 | postcss: ^8.2.15 1488 | 1489 | postcss-double-position-gradients@6.0.0: 1490 | resolution: {integrity: sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==} 1491 | engines: {node: '>=18'} 1492 | peerDependencies: 1493 | postcss: ^8.4 1494 | 1495 | postcss-focus-visible@10.0.1: 1496 | resolution: {integrity: sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==} 1497 | engines: {node: '>=18'} 1498 | peerDependencies: 1499 | postcss: ^8.4 1500 | 1501 | postcss-focus-within@9.0.1: 1502 | resolution: {integrity: sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==} 1503 | engines: {node: '>=18'} 1504 | peerDependencies: 1505 | postcss: ^8.4 1506 | 1507 | postcss-font-variant@5.0.0: 1508 | resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} 1509 | peerDependencies: 1510 | postcss: ^8.1.0 1511 | 1512 | postcss-gap-properties@6.0.0: 1513 | resolution: {integrity: sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==} 1514 | engines: {node: '>=18'} 1515 | peerDependencies: 1516 | postcss: ^8.4 1517 | 1518 | postcss-image-set-function@7.0.0: 1519 | resolution: {integrity: sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==} 1520 | engines: {node: '>=18'} 1521 | peerDependencies: 1522 | postcss: ^8.4 1523 | 1524 | postcss-import@15.1.0: 1525 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1526 | engines: {node: '>=14.0.0'} 1527 | peerDependencies: 1528 | postcss: ^8.0.0 1529 | 1530 | postcss-js@4.0.1: 1531 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1532 | engines: {node: ^12 || ^14 || >= 16} 1533 | peerDependencies: 1534 | postcss: ^8.4.21 1535 | 1536 | postcss-lab-function@7.0.6: 1537 | resolution: {integrity: sha512-HPwvsoK7C949vBZ+eMyvH2cQeMr3UREoHvbtra76/UhDuiViZH6pir+z71UaJQohd7VDSVUdR6TkWYKExEc9aQ==} 1538 | engines: {node: '>=18'} 1539 | peerDependencies: 1540 | postcss: ^8.4 1541 | 1542 | postcss-load-config@3.1.4: 1543 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 1544 | engines: {node: '>= 10'} 1545 | peerDependencies: 1546 | postcss: '>=8.0.9' 1547 | ts-node: '>=9.0.0' 1548 | peerDependenciesMeta: 1549 | postcss: 1550 | optional: true 1551 | ts-node: 1552 | optional: true 1553 | 1554 | postcss-load-config@4.0.2: 1555 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 1556 | engines: {node: '>= 14'} 1557 | peerDependencies: 1558 | postcss: '>=8.0.9' 1559 | ts-node: '>=9.0.0' 1560 | peerDependenciesMeta: 1561 | postcss: 1562 | optional: true 1563 | ts-node: 1564 | optional: true 1565 | 1566 | postcss-logical@8.0.0: 1567 | resolution: {integrity: sha512-HpIdsdieClTjXLOyYdUPAX/XQASNIwdKt5hoZW08ZOAiI+tbV0ta1oclkpVkW5ANU+xJvk3KkA0FejkjGLXUkg==} 1568 | engines: {node: '>=18'} 1569 | peerDependencies: 1570 | postcss: ^8.4 1571 | 1572 | postcss-merge-longhand@5.1.7: 1573 | resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} 1574 | engines: {node: ^10 || ^12 || >=14.0} 1575 | peerDependencies: 1576 | postcss: ^8.2.15 1577 | 1578 | postcss-merge-rules@5.1.4: 1579 | resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} 1580 | engines: {node: ^10 || ^12 || >=14.0} 1581 | peerDependencies: 1582 | postcss: ^8.2.15 1583 | 1584 | postcss-minify-font-values@5.1.0: 1585 | resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} 1586 | engines: {node: ^10 || ^12 || >=14.0} 1587 | peerDependencies: 1588 | postcss: ^8.2.15 1589 | 1590 | postcss-minify-gradients@5.1.1: 1591 | resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} 1592 | engines: {node: ^10 || ^12 || >=14.0} 1593 | peerDependencies: 1594 | postcss: ^8.2.15 1595 | 1596 | postcss-minify-params@5.1.4: 1597 | resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} 1598 | engines: {node: ^10 || ^12 || >=14.0} 1599 | peerDependencies: 1600 | postcss: ^8.2.15 1601 | 1602 | postcss-minify-selectors@5.2.1: 1603 | resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} 1604 | engines: {node: ^10 || ^12 || >=14.0} 1605 | peerDependencies: 1606 | postcss: ^8.2.15 1607 | 1608 | postcss-modules-extract-imports@3.1.0: 1609 | resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} 1610 | engines: {node: ^10 || ^12 || >= 14} 1611 | peerDependencies: 1612 | postcss: ^8.1.0 1613 | 1614 | postcss-modules-local-by-default@4.1.0: 1615 | resolution: {integrity: sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==} 1616 | engines: {node: ^10 || ^12 || >= 14} 1617 | peerDependencies: 1618 | postcss: ^8.1.0 1619 | 1620 | postcss-modules-scope@3.2.1: 1621 | resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} 1622 | engines: {node: ^10 || ^12 || >= 14} 1623 | peerDependencies: 1624 | postcss: ^8.1.0 1625 | 1626 | postcss-modules-values@4.0.0: 1627 | resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} 1628 | engines: {node: ^10 || ^12 || >= 14} 1629 | peerDependencies: 1630 | postcss: ^8.1.0 1631 | 1632 | postcss-modules@4.3.1: 1633 | resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} 1634 | peerDependencies: 1635 | postcss: ^8.0.0 1636 | 1637 | postcss-nested@6.2.0: 1638 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 1639 | engines: {node: '>=12.0'} 1640 | peerDependencies: 1641 | postcss: ^8.2.14 1642 | 1643 | postcss-nested@7.0.2: 1644 | resolution: {integrity: sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==} 1645 | engines: {node: '>=18.0'} 1646 | peerDependencies: 1647 | postcss: ^8.2.14 1648 | 1649 | postcss-nesting@13.0.1: 1650 | resolution: {integrity: sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==} 1651 | engines: {node: '>=18'} 1652 | peerDependencies: 1653 | postcss: ^8.4 1654 | 1655 | postcss-normalize-charset@5.1.0: 1656 | resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} 1657 | engines: {node: ^10 || ^12 || >=14.0} 1658 | peerDependencies: 1659 | postcss: ^8.2.15 1660 | 1661 | postcss-normalize-display-values@5.1.0: 1662 | resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} 1663 | engines: {node: ^10 || ^12 || >=14.0} 1664 | peerDependencies: 1665 | postcss: ^8.2.15 1666 | 1667 | postcss-normalize-positions@5.1.1: 1668 | resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} 1669 | engines: {node: ^10 || ^12 || >=14.0} 1670 | peerDependencies: 1671 | postcss: ^8.2.15 1672 | 1673 | postcss-normalize-repeat-style@5.1.1: 1674 | resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} 1675 | engines: {node: ^10 || ^12 || >=14.0} 1676 | peerDependencies: 1677 | postcss: ^8.2.15 1678 | 1679 | postcss-normalize-string@5.1.0: 1680 | resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} 1681 | engines: {node: ^10 || ^12 || >=14.0} 1682 | peerDependencies: 1683 | postcss: ^8.2.15 1684 | 1685 | postcss-normalize-timing-functions@5.1.0: 1686 | resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} 1687 | engines: {node: ^10 || ^12 || >=14.0} 1688 | peerDependencies: 1689 | postcss: ^8.2.15 1690 | 1691 | postcss-normalize-unicode@5.1.1: 1692 | resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} 1693 | engines: {node: ^10 || ^12 || >=14.0} 1694 | peerDependencies: 1695 | postcss: ^8.2.15 1696 | 1697 | postcss-normalize-url@5.1.0: 1698 | resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} 1699 | engines: {node: ^10 || ^12 || >=14.0} 1700 | peerDependencies: 1701 | postcss: ^8.2.15 1702 | 1703 | postcss-normalize-whitespace@5.1.1: 1704 | resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} 1705 | engines: {node: ^10 || ^12 || >=14.0} 1706 | peerDependencies: 1707 | postcss: ^8.2.15 1708 | 1709 | postcss-opacity-percentage@3.0.0: 1710 | resolution: {integrity: sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==} 1711 | engines: {node: '>=18'} 1712 | peerDependencies: 1713 | postcss: ^8.4 1714 | 1715 | postcss-ordered-values@5.1.3: 1716 | resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} 1717 | engines: {node: ^10 || ^12 || >=14.0} 1718 | peerDependencies: 1719 | postcss: ^8.2.15 1720 | 1721 | postcss-overflow-shorthand@6.0.0: 1722 | resolution: {integrity: sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==} 1723 | engines: {node: '>=18'} 1724 | peerDependencies: 1725 | postcss: ^8.4 1726 | 1727 | postcss-page-break@3.0.4: 1728 | resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} 1729 | peerDependencies: 1730 | postcss: ^8 1731 | 1732 | postcss-place@10.0.0: 1733 | resolution: {integrity: sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==} 1734 | engines: {node: '>=18'} 1735 | peerDependencies: 1736 | postcss: ^8.4 1737 | 1738 | postcss-preset-env@10.1.0: 1739 | resolution: {integrity: sha512-OfzbinZWpFcmuLB3mabsGa0NArzx5DVVtZ9G1k326iLvU7Jj9q/G3ihBu/Msi0mt96CjrM23HpbuEewDvT71KQ==} 1740 | engines: {node: '>=18'} 1741 | peerDependencies: 1742 | postcss: ^8.4 1743 | 1744 | postcss-pseudo-class-any-link@10.0.1: 1745 | resolution: {integrity: sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==} 1746 | engines: {node: '>=18'} 1747 | peerDependencies: 1748 | postcss: ^8.4 1749 | 1750 | postcss-reduce-initial@5.1.2: 1751 | resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} 1752 | engines: {node: ^10 || ^12 || >=14.0} 1753 | peerDependencies: 1754 | postcss: ^8.2.15 1755 | 1756 | postcss-reduce-transforms@5.1.0: 1757 | resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} 1758 | engines: {node: ^10 || ^12 || >=14.0} 1759 | peerDependencies: 1760 | postcss: ^8.2.15 1761 | 1762 | postcss-replace-overflow-wrap@4.0.0: 1763 | resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} 1764 | peerDependencies: 1765 | postcss: ^8.0.3 1766 | 1767 | postcss-selector-not@8.0.1: 1768 | resolution: {integrity: sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==} 1769 | engines: {node: '>=18'} 1770 | peerDependencies: 1771 | postcss: ^8.4 1772 | 1773 | postcss-selector-parser@6.1.2: 1774 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 1775 | engines: {node: '>=4'} 1776 | 1777 | postcss-selector-parser@7.0.0: 1778 | resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} 1779 | engines: {node: '>=4'} 1780 | 1781 | postcss-svgo@5.1.0: 1782 | resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} 1783 | engines: {node: ^10 || ^12 || >=14.0} 1784 | peerDependencies: 1785 | postcss: ^8.2.15 1786 | 1787 | postcss-unique-selectors@5.1.1: 1788 | resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} 1789 | engines: {node: ^10 || ^12 || >=14.0} 1790 | peerDependencies: 1791 | postcss: ^8.2.15 1792 | 1793 | postcss-value-parser@4.2.0: 1794 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1795 | 1796 | postcss@8.4.49: 1797 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 1798 | engines: {node: ^10 || ^12 || >=14} 1799 | 1800 | promise.series@0.2.0: 1801 | resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} 1802 | engines: {node: '>=0.12'} 1803 | 1804 | queue-microtask@1.2.3: 1805 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1806 | 1807 | react-dom@18.3.1: 1808 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1809 | peerDependencies: 1810 | react: ^18.3.1 1811 | 1812 | react-refresh@0.14.2: 1813 | resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} 1814 | engines: {node: '>=0.10.0'} 1815 | 1816 | react@18.3.1: 1817 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1818 | engines: {node: '>=0.10.0'} 1819 | 1820 | read-cache@1.0.0: 1821 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1822 | 1823 | readdirp@3.6.0: 1824 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1825 | engines: {node: '>=8.10.0'} 1826 | 1827 | resolve-from@5.0.0: 1828 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1829 | engines: {node: '>=8'} 1830 | 1831 | resolve@1.22.8: 1832 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1833 | hasBin: true 1834 | 1835 | reusify@1.0.4: 1836 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1837 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1838 | 1839 | rollup-plugin-dts@6.1.1: 1840 | resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} 1841 | engines: {node: '>=16'} 1842 | peerDependencies: 1843 | rollup: ^3.29.4 || ^4 1844 | typescript: ^4.5 || ^5.0 1845 | 1846 | rollup-plugin-postcss@4.0.2: 1847 | resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} 1848 | engines: {node: '>=10'} 1849 | peerDependencies: 1850 | postcss: 8.x 1851 | 1852 | rollup-pluginutils@2.8.2: 1853 | resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} 1854 | 1855 | rollup@4.26.0: 1856 | resolution: {integrity: sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==} 1857 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1858 | hasBin: true 1859 | 1860 | run-parallel@1.2.0: 1861 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1862 | 1863 | safe-identifier@0.4.2: 1864 | resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} 1865 | 1866 | scheduler@0.23.2: 1867 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1868 | 1869 | semver@6.3.1: 1870 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1871 | hasBin: true 1872 | 1873 | semver@7.6.3: 1874 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1875 | engines: {node: '>=10'} 1876 | hasBin: true 1877 | 1878 | shebang-command@2.0.0: 1879 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1880 | engines: {node: '>=8'} 1881 | 1882 | shebang-regex@3.0.0: 1883 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1884 | engines: {node: '>=8'} 1885 | 1886 | siginfo@2.0.0: 1887 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1888 | 1889 | signal-exit@4.1.0: 1890 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1891 | engines: {node: '>=14'} 1892 | 1893 | source-map-js@1.2.1: 1894 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1895 | engines: {node: '>=0.10.0'} 1896 | 1897 | source-map-support@0.5.21: 1898 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1899 | 1900 | source-map@0.6.1: 1901 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1902 | engines: {node: '>=0.10.0'} 1903 | 1904 | stable@0.1.8: 1905 | resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} 1906 | deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' 1907 | 1908 | stackback@0.0.2: 1909 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1910 | 1911 | std-env@3.8.0: 1912 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} 1913 | 1914 | string-hash@1.1.3: 1915 | resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} 1916 | 1917 | string-width@4.2.3: 1918 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1919 | engines: {node: '>=8'} 1920 | 1921 | string-width@5.1.2: 1922 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1923 | engines: {node: '>=12'} 1924 | 1925 | strip-ansi@6.0.1: 1926 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1927 | engines: {node: '>=8'} 1928 | 1929 | strip-ansi@7.1.0: 1930 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1931 | engines: {node: '>=12'} 1932 | 1933 | style-inject@0.3.0: 1934 | resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} 1935 | 1936 | stylehacks@5.1.1: 1937 | resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} 1938 | engines: {node: ^10 || ^12 || >=14.0} 1939 | peerDependencies: 1940 | postcss: ^8.2.15 1941 | 1942 | sucrase@3.35.0: 1943 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1944 | engines: {node: '>=16 || 14 >=14.17'} 1945 | hasBin: true 1946 | 1947 | supports-color@7.2.0: 1948 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1949 | engines: {node: '>=8'} 1950 | 1951 | supports-preserve-symlinks-flag@1.0.0: 1952 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1953 | engines: {node: '>= 0.4'} 1954 | 1955 | svgo@2.8.0: 1956 | resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} 1957 | engines: {node: '>=10.13.0'} 1958 | hasBin: true 1959 | 1960 | tailwindcss@3.4.14: 1961 | resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==} 1962 | engines: {node: '>=14.0.0'} 1963 | hasBin: true 1964 | 1965 | terser@5.16.6: 1966 | resolution: {integrity: sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==} 1967 | engines: {node: '>=10'} 1968 | hasBin: true 1969 | 1970 | thenify-all@1.6.0: 1971 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1972 | engines: {node: '>=0.8'} 1973 | 1974 | thenify@3.3.1: 1975 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1976 | 1977 | tinybench@2.9.0: 1978 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1979 | 1980 | tinyexec@0.3.1: 1981 | resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} 1982 | 1983 | tinypool@1.0.1: 1984 | resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} 1985 | engines: {node: ^18.0.0 || >=20.0.0} 1986 | 1987 | tinyrainbow@1.2.0: 1988 | resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} 1989 | engines: {node: '>=14.0.0'} 1990 | 1991 | tinyspy@3.0.2: 1992 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 1993 | engines: {node: '>=14.0.0'} 1994 | 1995 | to-regex-range@5.0.1: 1996 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1997 | engines: {node: '>=8.0'} 1998 | 1999 | ts-interface-checker@0.1.13: 2000 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2001 | 2002 | tslib@2.8.1: 2003 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 2004 | 2005 | typescript@5.6.3: 2006 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 2007 | engines: {node: '>=14.17'} 2008 | hasBin: true 2009 | 2010 | undici-types@6.19.8: 2011 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 2012 | 2013 | update-browserslist-db@1.1.1: 2014 | resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} 2015 | hasBin: true 2016 | peerDependencies: 2017 | browserslist: '>= 4.21.0' 2018 | 2019 | util-deprecate@1.0.2: 2020 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2021 | 2022 | vite-node@2.1.4: 2023 | resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} 2024 | engines: {node: ^18.0.0 || >=20.0.0} 2025 | hasBin: true 2026 | 2027 | vite@5.4.11: 2028 | resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} 2029 | engines: {node: ^18.0.0 || >=20.0.0} 2030 | hasBin: true 2031 | peerDependencies: 2032 | '@types/node': ^18.0.0 || >=20.0.0 2033 | less: '*' 2034 | lightningcss: ^1.21.0 2035 | sass: '*' 2036 | sass-embedded: '*' 2037 | stylus: '*' 2038 | sugarss: '*' 2039 | terser: ^5.4.0 2040 | peerDependenciesMeta: 2041 | '@types/node': 2042 | optional: true 2043 | less: 2044 | optional: true 2045 | lightningcss: 2046 | optional: true 2047 | sass: 2048 | optional: true 2049 | sass-embedded: 2050 | optional: true 2051 | stylus: 2052 | optional: true 2053 | sugarss: 2054 | optional: true 2055 | terser: 2056 | optional: true 2057 | 2058 | vitest@2.1.4: 2059 | resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} 2060 | engines: {node: ^18.0.0 || >=20.0.0} 2061 | hasBin: true 2062 | peerDependencies: 2063 | '@edge-runtime/vm': '*' 2064 | '@types/node': ^18.0.0 || >=20.0.0 2065 | '@vitest/browser': 2.1.4 2066 | '@vitest/ui': 2.1.4 2067 | happy-dom: '*' 2068 | jsdom: '*' 2069 | peerDependenciesMeta: 2070 | '@edge-runtime/vm': 2071 | optional: true 2072 | '@types/node': 2073 | optional: true 2074 | '@vitest/browser': 2075 | optional: true 2076 | '@vitest/ui': 2077 | optional: true 2078 | happy-dom: 2079 | optional: true 2080 | jsdom: 2081 | optional: true 2082 | 2083 | which@2.0.2: 2084 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2085 | engines: {node: '>= 8'} 2086 | hasBin: true 2087 | 2088 | why-is-node-running@2.3.0: 2089 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 2090 | engines: {node: '>=8'} 2091 | hasBin: true 2092 | 2093 | wrap-ansi@7.0.0: 2094 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2095 | engines: {node: '>=10'} 2096 | 2097 | wrap-ansi@8.1.0: 2098 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2099 | engines: {node: '>=12'} 2100 | 2101 | yallist@3.1.1: 2102 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 2103 | 2104 | yaml@1.10.2: 2105 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 2106 | engines: {node: '>= 6'} 2107 | 2108 | yaml@2.6.0: 2109 | resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} 2110 | engines: {node: '>= 14'} 2111 | hasBin: true 2112 | 2113 | snapshots: 2114 | 2115 | '@alloc/quick-lru@5.2.0': {} 2116 | 2117 | '@ampproject/remapping@2.3.0': 2118 | dependencies: 2119 | '@jridgewell/gen-mapping': 0.3.5 2120 | '@jridgewell/trace-mapping': 0.3.25 2121 | 2122 | '@babel/code-frame@7.26.2': 2123 | dependencies: 2124 | '@babel/helper-validator-identifier': 7.25.9 2125 | js-tokens: 4.0.0 2126 | picocolors: 1.1.1 2127 | 2128 | '@babel/compat-data@7.26.2': {} 2129 | 2130 | '@babel/core@7.26.0': 2131 | dependencies: 2132 | '@ampproject/remapping': 2.3.0 2133 | '@babel/code-frame': 7.26.2 2134 | '@babel/generator': 7.26.2 2135 | '@babel/helper-compilation-targets': 7.25.9 2136 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) 2137 | '@babel/helpers': 7.26.0 2138 | '@babel/parser': 7.26.2 2139 | '@babel/template': 7.25.9 2140 | '@babel/traverse': 7.25.9 2141 | '@babel/types': 7.26.0 2142 | convert-source-map: 2.0.0 2143 | debug: 4.3.7 2144 | gensync: 1.0.0-beta.2 2145 | json5: 2.2.3 2146 | semver: 6.3.1 2147 | transitivePeerDependencies: 2148 | - supports-color 2149 | 2150 | '@babel/generator@7.26.2': 2151 | dependencies: 2152 | '@babel/parser': 7.26.2 2153 | '@babel/types': 7.26.0 2154 | '@jridgewell/gen-mapping': 0.3.5 2155 | '@jridgewell/trace-mapping': 0.3.25 2156 | jsesc: 3.0.2 2157 | 2158 | '@babel/helper-compilation-targets@7.25.9': 2159 | dependencies: 2160 | '@babel/compat-data': 7.26.2 2161 | '@babel/helper-validator-option': 7.25.9 2162 | browserslist: 4.24.2 2163 | lru-cache: 5.1.1 2164 | semver: 6.3.1 2165 | 2166 | '@babel/helper-module-imports@7.25.9': 2167 | dependencies: 2168 | '@babel/traverse': 7.25.9 2169 | '@babel/types': 7.26.0 2170 | transitivePeerDependencies: 2171 | - supports-color 2172 | 2173 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': 2174 | dependencies: 2175 | '@babel/core': 7.26.0 2176 | '@babel/helper-module-imports': 7.25.9 2177 | '@babel/helper-validator-identifier': 7.25.9 2178 | '@babel/traverse': 7.25.9 2179 | transitivePeerDependencies: 2180 | - supports-color 2181 | 2182 | '@babel/helper-plugin-utils@7.25.9': {} 2183 | 2184 | '@babel/helper-string-parser@7.25.9': {} 2185 | 2186 | '@babel/helper-validator-identifier@7.25.9': {} 2187 | 2188 | '@babel/helper-validator-option@7.25.9': {} 2189 | 2190 | '@babel/helpers@7.26.0': 2191 | dependencies: 2192 | '@babel/template': 7.25.9 2193 | '@babel/types': 7.26.0 2194 | 2195 | '@babel/parser@7.26.2': 2196 | dependencies: 2197 | '@babel/types': 7.26.0 2198 | 2199 | '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': 2200 | dependencies: 2201 | '@babel/core': 7.26.0 2202 | '@babel/helper-plugin-utils': 7.25.9 2203 | 2204 | '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': 2205 | dependencies: 2206 | '@babel/core': 7.26.0 2207 | '@babel/helper-plugin-utils': 7.25.9 2208 | 2209 | '@babel/template@7.25.9': 2210 | dependencies: 2211 | '@babel/code-frame': 7.26.2 2212 | '@babel/parser': 7.26.2 2213 | '@babel/types': 7.26.0 2214 | 2215 | '@babel/traverse@7.25.9': 2216 | dependencies: 2217 | '@babel/code-frame': 7.26.2 2218 | '@babel/generator': 7.26.2 2219 | '@babel/parser': 7.26.2 2220 | '@babel/template': 7.25.9 2221 | '@babel/types': 7.26.0 2222 | debug: 4.3.7 2223 | globals: 11.12.0 2224 | transitivePeerDependencies: 2225 | - supports-color 2226 | 2227 | '@babel/types@7.26.0': 2228 | dependencies: 2229 | '@babel/helper-string-parser': 7.25.9 2230 | '@babel/helper-validator-identifier': 7.25.9 2231 | 2232 | '@csstools/cascade-layer-name-parser@2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': 2233 | dependencies: 2234 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2235 | '@csstools/css-tokenizer': 3.0.3 2236 | 2237 | '@csstools/color-helpers@5.0.1': {} 2238 | 2239 | '@csstools/css-calc@2.1.0(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': 2240 | dependencies: 2241 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2242 | '@csstools/css-tokenizer': 3.0.3 2243 | 2244 | '@csstools/css-color-parser@3.0.6(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': 2245 | dependencies: 2246 | '@csstools/color-helpers': 5.0.1 2247 | '@csstools/css-calc': 2.1.0(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2248 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2249 | '@csstools/css-tokenizer': 3.0.3 2250 | 2251 | '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': 2252 | dependencies: 2253 | '@csstools/css-tokenizer': 3.0.3 2254 | 2255 | '@csstools/css-tokenizer@3.0.3': {} 2256 | 2257 | '@csstools/media-query-list-parser@4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': 2258 | dependencies: 2259 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2260 | '@csstools/css-tokenizer': 3.0.3 2261 | 2262 | '@csstools/postcss-cascade-layers@5.0.1(postcss@8.4.49)': 2263 | dependencies: 2264 | '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0) 2265 | postcss: 8.4.49 2266 | postcss-selector-parser: 7.0.0 2267 | 2268 | '@csstools/postcss-color-function@4.0.6(postcss@8.4.49)': 2269 | dependencies: 2270 | '@csstools/css-color-parser': 3.0.6(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2271 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2272 | '@csstools/css-tokenizer': 3.0.3 2273 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 2274 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2275 | postcss: 8.4.49 2276 | 2277 | '@csstools/postcss-color-mix-function@3.0.6(postcss@8.4.49)': 2278 | dependencies: 2279 | '@csstools/css-color-parser': 3.0.6(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2280 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2281 | '@csstools/css-tokenizer': 3.0.3 2282 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 2283 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2284 | postcss: 8.4.49 2285 | 2286 | '@csstools/postcss-content-alt-text@2.0.4(postcss@8.4.49)': 2287 | dependencies: 2288 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2289 | '@csstools/css-tokenizer': 3.0.3 2290 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 2291 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2292 | postcss: 8.4.49 2293 | 2294 | '@csstools/postcss-exponential-functions@2.0.5(postcss@8.4.49)': 2295 | dependencies: 2296 | '@csstools/css-calc': 2.1.0(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2297 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2298 | '@csstools/css-tokenizer': 3.0.3 2299 | postcss: 8.4.49 2300 | 2301 | '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.4.49)': 2302 | dependencies: 2303 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2304 | postcss: 8.4.49 2305 | postcss-value-parser: 4.2.0 2306 | 2307 | '@csstools/postcss-gamut-mapping@2.0.6(postcss@8.4.49)': 2308 | dependencies: 2309 | '@csstools/css-color-parser': 3.0.6(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2310 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2311 | '@csstools/css-tokenizer': 3.0.3 2312 | postcss: 8.4.49 2313 | 2314 | '@csstools/postcss-gradients-interpolation-method@5.0.6(postcss@8.4.49)': 2315 | dependencies: 2316 | '@csstools/css-color-parser': 3.0.6(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2317 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2318 | '@csstools/css-tokenizer': 3.0.3 2319 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 2320 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2321 | postcss: 8.4.49 2322 | 2323 | '@csstools/postcss-hwb-function@4.0.6(postcss@8.4.49)': 2324 | dependencies: 2325 | '@csstools/css-color-parser': 3.0.6(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2326 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2327 | '@csstools/css-tokenizer': 3.0.3 2328 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 2329 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2330 | postcss: 8.4.49 2331 | 2332 | '@csstools/postcss-ic-unit@4.0.0(postcss@8.4.49)': 2333 | dependencies: 2334 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 2335 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2336 | postcss: 8.4.49 2337 | postcss-value-parser: 4.2.0 2338 | 2339 | '@csstools/postcss-initial@2.0.0(postcss@8.4.49)': 2340 | dependencies: 2341 | postcss: 8.4.49 2342 | 2343 | '@csstools/postcss-is-pseudo-class@5.0.1(postcss@8.4.49)': 2344 | dependencies: 2345 | '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0) 2346 | postcss: 8.4.49 2347 | postcss-selector-parser: 7.0.0 2348 | 2349 | '@csstools/postcss-light-dark-function@2.0.7(postcss@8.4.49)': 2350 | dependencies: 2351 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2352 | '@csstools/css-tokenizer': 3.0.3 2353 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 2354 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2355 | postcss: 8.4.49 2356 | 2357 | '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.4.49)': 2358 | dependencies: 2359 | postcss: 8.4.49 2360 | 2361 | '@csstools/postcss-logical-overflow@2.0.0(postcss@8.4.49)': 2362 | dependencies: 2363 | postcss: 8.4.49 2364 | 2365 | '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.4.49)': 2366 | dependencies: 2367 | postcss: 8.4.49 2368 | 2369 | '@csstools/postcss-logical-resize@3.0.0(postcss@8.4.49)': 2370 | dependencies: 2371 | postcss: 8.4.49 2372 | postcss-value-parser: 4.2.0 2373 | 2374 | '@csstools/postcss-logical-viewport-units@3.0.3(postcss@8.4.49)': 2375 | dependencies: 2376 | '@csstools/css-tokenizer': 3.0.3 2377 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2378 | postcss: 8.4.49 2379 | 2380 | '@csstools/postcss-media-minmax@2.0.5(postcss@8.4.49)': 2381 | dependencies: 2382 | '@csstools/css-calc': 2.1.0(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2383 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2384 | '@csstools/css-tokenizer': 3.0.3 2385 | '@csstools/media-query-list-parser': 4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2386 | postcss: 8.4.49 2387 | 2388 | '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.4(postcss@8.4.49)': 2389 | dependencies: 2390 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2391 | '@csstools/css-tokenizer': 3.0.3 2392 | '@csstools/media-query-list-parser': 4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2393 | postcss: 8.4.49 2394 | 2395 | '@csstools/postcss-nested-calc@4.0.0(postcss@8.4.49)': 2396 | dependencies: 2397 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2398 | postcss: 8.4.49 2399 | postcss-value-parser: 4.2.0 2400 | 2401 | '@csstools/postcss-normalize-display-values@4.0.0(postcss@8.4.49)': 2402 | dependencies: 2403 | postcss: 8.4.49 2404 | postcss-value-parser: 4.2.0 2405 | 2406 | '@csstools/postcss-oklab-function@4.0.6(postcss@8.4.49)': 2407 | dependencies: 2408 | '@csstools/css-color-parser': 3.0.6(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2409 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2410 | '@csstools/css-tokenizer': 3.0.3 2411 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 2412 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2413 | postcss: 8.4.49 2414 | 2415 | '@csstools/postcss-progressive-custom-properties@4.0.0(postcss@8.4.49)': 2416 | dependencies: 2417 | postcss: 8.4.49 2418 | postcss-value-parser: 4.2.0 2419 | 2420 | '@csstools/postcss-random-function@1.0.1(postcss@8.4.49)': 2421 | dependencies: 2422 | '@csstools/css-calc': 2.1.0(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2423 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2424 | '@csstools/css-tokenizer': 3.0.3 2425 | postcss: 8.4.49 2426 | 2427 | '@csstools/postcss-relative-color-syntax@3.0.6(postcss@8.4.49)': 2428 | dependencies: 2429 | '@csstools/css-color-parser': 3.0.6(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2430 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2431 | '@csstools/css-tokenizer': 3.0.3 2432 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 2433 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 2434 | postcss: 8.4.49 2435 | 2436 | '@csstools/postcss-scope-pseudo-class@4.0.1(postcss@8.4.49)': 2437 | dependencies: 2438 | postcss: 8.4.49 2439 | postcss-selector-parser: 7.0.0 2440 | 2441 | '@csstools/postcss-sign-functions@1.0.0(postcss@8.4.49)': 2442 | dependencies: 2443 | '@csstools/css-calc': 2.1.0(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2444 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2445 | '@csstools/css-tokenizer': 3.0.3 2446 | postcss: 8.4.49 2447 | 2448 | '@csstools/postcss-stepped-value-functions@4.0.5(postcss@8.4.49)': 2449 | dependencies: 2450 | '@csstools/css-calc': 2.1.0(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2451 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2452 | '@csstools/css-tokenizer': 3.0.3 2453 | postcss: 8.4.49 2454 | 2455 | '@csstools/postcss-text-decoration-shorthand@4.0.1(postcss@8.4.49)': 2456 | dependencies: 2457 | '@csstools/color-helpers': 5.0.1 2458 | postcss: 8.4.49 2459 | postcss-value-parser: 4.2.0 2460 | 2461 | '@csstools/postcss-trigonometric-functions@4.0.5(postcss@8.4.49)': 2462 | dependencies: 2463 | '@csstools/css-calc': 2.1.0(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 2464 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 2465 | '@csstools/css-tokenizer': 3.0.3 2466 | postcss: 8.4.49 2467 | 2468 | '@csstools/postcss-unset-value@4.0.0(postcss@8.4.49)': 2469 | dependencies: 2470 | postcss: 8.4.49 2471 | 2472 | '@csstools/selector-resolve-nested@3.0.0(postcss-selector-parser@7.0.0)': 2473 | dependencies: 2474 | postcss-selector-parser: 7.0.0 2475 | 2476 | '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.0.0)': 2477 | dependencies: 2478 | postcss-selector-parser: 7.0.0 2479 | 2480 | '@csstools/utilities@2.0.0(postcss@8.4.49)': 2481 | dependencies: 2482 | postcss: 8.4.49 2483 | 2484 | '@esbuild/aix-ppc64@0.21.5': 2485 | optional: true 2486 | 2487 | '@esbuild/android-arm64@0.21.5': 2488 | optional: true 2489 | 2490 | '@esbuild/android-arm@0.21.5': 2491 | optional: true 2492 | 2493 | '@esbuild/android-x64@0.21.5': 2494 | optional: true 2495 | 2496 | '@esbuild/darwin-arm64@0.21.5': 2497 | optional: true 2498 | 2499 | '@esbuild/darwin-x64@0.21.5': 2500 | optional: true 2501 | 2502 | '@esbuild/freebsd-arm64@0.21.5': 2503 | optional: true 2504 | 2505 | '@esbuild/freebsd-x64@0.21.5': 2506 | optional: true 2507 | 2508 | '@esbuild/linux-arm64@0.21.5': 2509 | optional: true 2510 | 2511 | '@esbuild/linux-arm@0.21.5': 2512 | optional: true 2513 | 2514 | '@esbuild/linux-ia32@0.21.5': 2515 | optional: true 2516 | 2517 | '@esbuild/linux-loong64@0.21.5': 2518 | optional: true 2519 | 2520 | '@esbuild/linux-mips64el@0.21.5': 2521 | optional: true 2522 | 2523 | '@esbuild/linux-ppc64@0.21.5': 2524 | optional: true 2525 | 2526 | '@esbuild/linux-riscv64@0.21.5': 2527 | optional: true 2528 | 2529 | '@esbuild/linux-s390x@0.21.5': 2530 | optional: true 2531 | 2532 | '@esbuild/linux-x64@0.21.5': 2533 | optional: true 2534 | 2535 | '@esbuild/netbsd-x64@0.21.5': 2536 | optional: true 2537 | 2538 | '@esbuild/openbsd-x64@0.21.5': 2539 | optional: true 2540 | 2541 | '@esbuild/sunos-x64@0.21.5': 2542 | optional: true 2543 | 2544 | '@esbuild/win32-arm64@0.21.5': 2545 | optional: true 2546 | 2547 | '@esbuild/win32-ia32@0.21.5': 2548 | optional: true 2549 | 2550 | '@esbuild/win32-x64@0.21.5': 2551 | optional: true 2552 | 2553 | '@isaacs/cliui@8.0.2': 2554 | dependencies: 2555 | string-width: 5.1.2 2556 | string-width-cjs: string-width@4.2.3 2557 | strip-ansi: 7.1.0 2558 | strip-ansi-cjs: strip-ansi@6.0.1 2559 | wrap-ansi: 8.1.0 2560 | wrap-ansi-cjs: wrap-ansi@7.0.0 2561 | 2562 | '@jridgewell/gen-mapping@0.3.5': 2563 | dependencies: 2564 | '@jridgewell/set-array': 1.2.1 2565 | '@jridgewell/sourcemap-codec': 1.5.0 2566 | '@jridgewell/trace-mapping': 0.3.25 2567 | 2568 | '@jridgewell/resolve-uri@3.1.2': {} 2569 | 2570 | '@jridgewell/set-array@1.2.1': {} 2571 | 2572 | '@jridgewell/source-map@0.3.6': 2573 | dependencies: 2574 | '@jridgewell/gen-mapping': 0.3.5 2575 | '@jridgewell/trace-mapping': 0.3.25 2576 | optional: true 2577 | 2578 | '@jridgewell/sourcemap-codec@1.5.0': {} 2579 | 2580 | '@jridgewell/trace-mapping@0.3.25': 2581 | dependencies: 2582 | '@jridgewell/resolve-uri': 3.1.2 2583 | '@jridgewell/sourcemap-codec': 1.5.0 2584 | 2585 | '@nodelib/fs.scandir@2.1.5': 2586 | dependencies: 2587 | '@nodelib/fs.stat': 2.0.5 2588 | run-parallel: 1.2.0 2589 | 2590 | '@nodelib/fs.stat@2.0.5': {} 2591 | 2592 | '@nodelib/fs.walk@1.2.8': 2593 | dependencies: 2594 | '@nodelib/fs.scandir': 2.1.5 2595 | fastq: 1.17.1 2596 | 2597 | '@pkgjs/parseargs@0.11.0': 2598 | optional: true 2599 | 2600 | '@rollup/plugin-node-resolve@15.3.0(rollup@4.26.0)': 2601 | dependencies: 2602 | '@rollup/pluginutils': 5.1.3(rollup@4.26.0) 2603 | '@types/resolve': 1.20.2 2604 | deepmerge: 4.3.1 2605 | is-module: 1.0.0 2606 | resolve: 1.22.8 2607 | optionalDependencies: 2608 | rollup: 4.26.0 2609 | 2610 | '@rollup/plugin-typescript@12.1.1(rollup@4.26.0)(tslib@2.8.1)(typescript@5.6.3)': 2611 | dependencies: 2612 | '@rollup/pluginutils': 5.1.3(rollup@4.26.0) 2613 | resolve: 1.22.8 2614 | typescript: 5.6.3 2615 | optionalDependencies: 2616 | rollup: 4.26.0 2617 | tslib: 2.8.1 2618 | 2619 | '@rollup/pluginutils@5.1.3(rollup@4.26.0)': 2620 | dependencies: 2621 | '@types/estree': 1.0.6 2622 | estree-walker: 2.0.2 2623 | picomatch: 4.0.2 2624 | optionalDependencies: 2625 | rollup: 4.26.0 2626 | 2627 | '@rollup/rollup-android-arm-eabi@4.26.0': 2628 | optional: true 2629 | 2630 | '@rollup/rollup-android-arm64@4.26.0': 2631 | optional: true 2632 | 2633 | '@rollup/rollup-darwin-arm64@4.26.0': 2634 | optional: true 2635 | 2636 | '@rollup/rollup-darwin-x64@4.26.0': 2637 | optional: true 2638 | 2639 | '@rollup/rollup-freebsd-arm64@4.26.0': 2640 | optional: true 2641 | 2642 | '@rollup/rollup-freebsd-x64@4.26.0': 2643 | optional: true 2644 | 2645 | '@rollup/rollup-linux-arm-gnueabihf@4.26.0': 2646 | optional: true 2647 | 2648 | '@rollup/rollup-linux-arm-musleabihf@4.26.0': 2649 | optional: true 2650 | 2651 | '@rollup/rollup-linux-arm64-gnu@4.26.0': 2652 | optional: true 2653 | 2654 | '@rollup/rollup-linux-arm64-musl@4.26.0': 2655 | optional: true 2656 | 2657 | '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': 2658 | optional: true 2659 | 2660 | '@rollup/rollup-linux-riscv64-gnu@4.26.0': 2661 | optional: true 2662 | 2663 | '@rollup/rollup-linux-s390x-gnu@4.26.0': 2664 | optional: true 2665 | 2666 | '@rollup/rollup-linux-x64-gnu@4.26.0': 2667 | optional: true 2668 | 2669 | '@rollup/rollup-linux-x64-musl@4.26.0': 2670 | optional: true 2671 | 2672 | '@rollup/rollup-win32-arm64-msvc@4.26.0': 2673 | optional: true 2674 | 2675 | '@rollup/rollup-win32-ia32-msvc@4.26.0': 2676 | optional: true 2677 | 2678 | '@rollup/rollup-win32-x64-msvc@4.26.0': 2679 | optional: true 2680 | 2681 | '@trysound/sax@0.2.0': {} 2682 | 2683 | '@types/babel__core@7.20.5': 2684 | dependencies: 2685 | '@babel/parser': 7.26.2 2686 | '@babel/types': 7.26.0 2687 | '@types/babel__generator': 7.6.8 2688 | '@types/babel__template': 7.4.4 2689 | '@types/babel__traverse': 7.20.6 2690 | 2691 | '@types/babel__generator@7.6.8': 2692 | dependencies: 2693 | '@babel/types': 7.26.0 2694 | 2695 | '@types/babel__template@7.4.4': 2696 | dependencies: 2697 | '@babel/parser': 7.26.2 2698 | '@babel/types': 7.26.0 2699 | 2700 | '@types/babel__traverse@7.20.6': 2701 | dependencies: 2702 | '@babel/types': 7.26.0 2703 | 2704 | '@types/estree@1.0.6': {} 2705 | 2706 | '@types/node@20.17.6': 2707 | dependencies: 2708 | undici-types: 6.19.8 2709 | 2710 | '@types/prop-types@15.7.13': {} 2711 | 2712 | '@types/react-dom@18.3.1': 2713 | dependencies: 2714 | '@types/react': 18.3.12 2715 | 2716 | '@types/react@18.3.12': 2717 | dependencies: 2718 | '@types/prop-types': 15.7.13 2719 | csstype: 3.1.3 2720 | 2721 | '@types/resolve@1.20.2': {} 2722 | 2723 | '@vitejs/plugin-react@4.3.3(vite@5.4.11(@types/node@20.17.6)(terser@5.16.6))': 2724 | dependencies: 2725 | '@babel/core': 7.26.0 2726 | '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) 2727 | '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) 2728 | '@types/babel__core': 7.20.5 2729 | react-refresh: 0.14.2 2730 | vite: 5.4.11(@types/node@20.17.6)(terser@5.16.6) 2731 | transitivePeerDependencies: 2732 | - supports-color 2733 | 2734 | '@vitest/expect@2.1.4': 2735 | dependencies: 2736 | '@vitest/spy': 2.1.4 2737 | '@vitest/utils': 2.1.4 2738 | chai: 5.1.2 2739 | tinyrainbow: 1.2.0 2740 | 2741 | '@vitest/mocker@2.1.4(vite@5.4.11(@types/node@20.17.6)(terser@5.16.6))': 2742 | dependencies: 2743 | '@vitest/spy': 2.1.4 2744 | estree-walker: 3.0.3 2745 | magic-string: 0.30.12 2746 | optionalDependencies: 2747 | vite: 5.4.11(@types/node@20.17.6)(terser@5.16.6) 2748 | 2749 | '@vitest/pretty-format@2.1.4': 2750 | dependencies: 2751 | tinyrainbow: 1.2.0 2752 | 2753 | '@vitest/runner@2.1.4': 2754 | dependencies: 2755 | '@vitest/utils': 2.1.4 2756 | pathe: 1.1.2 2757 | 2758 | '@vitest/snapshot@2.1.4': 2759 | dependencies: 2760 | '@vitest/pretty-format': 2.1.4 2761 | magic-string: 0.30.12 2762 | pathe: 1.1.2 2763 | 2764 | '@vitest/spy@2.1.4': 2765 | dependencies: 2766 | tinyspy: 3.0.2 2767 | 2768 | '@vitest/utils@2.1.4': 2769 | dependencies: 2770 | '@vitest/pretty-format': 2.1.4 2771 | loupe: 3.1.2 2772 | tinyrainbow: 1.2.0 2773 | 2774 | acorn@8.14.0: 2775 | optional: true 2776 | 2777 | ansi-colors@4.1.3: {} 2778 | 2779 | ansi-regex@5.0.1: {} 2780 | 2781 | ansi-regex@6.1.0: {} 2782 | 2783 | ansi-styles@4.3.0: 2784 | dependencies: 2785 | color-convert: 2.0.1 2786 | 2787 | ansi-styles@6.2.1: {} 2788 | 2789 | any-promise@1.3.0: {} 2790 | 2791 | anymatch@3.1.3: 2792 | dependencies: 2793 | normalize-path: 3.0.0 2794 | picomatch: 2.3.1 2795 | 2796 | arg@5.0.2: {} 2797 | 2798 | assertion-error@2.0.1: {} 2799 | 2800 | autoprefixer@10.4.20(postcss@8.4.49): 2801 | dependencies: 2802 | browserslist: 4.24.2 2803 | caniuse-lite: 1.0.30001680 2804 | fraction.js: 4.3.7 2805 | normalize-range: 0.1.2 2806 | picocolors: 1.1.1 2807 | postcss: 8.4.49 2808 | postcss-value-parser: 4.2.0 2809 | 2810 | balanced-match@1.0.2: {} 2811 | 2812 | binary-extensions@2.3.0: {} 2813 | 2814 | boolbase@1.0.0: {} 2815 | 2816 | brace-expansion@2.0.1: 2817 | dependencies: 2818 | balanced-match: 1.0.2 2819 | 2820 | braces@3.0.3: 2821 | dependencies: 2822 | fill-range: 7.1.1 2823 | 2824 | browserslist@4.24.2: 2825 | dependencies: 2826 | caniuse-lite: 1.0.30001680 2827 | electron-to-chromium: 1.5.57 2828 | node-releases: 2.0.18 2829 | update-browserslist-db: 1.1.1(browserslist@4.24.2) 2830 | 2831 | buffer-from@1.1.2: 2832 | optional: true 2833 | 2834 | cac@6.7.14: {} 2835 | 2836 | camelcase-css@2.0.1: {} 2837 | 2838 | caniuse-api@3.0.0: 2839 | dependencies: 2840 | browserslist: 4.24.2 2841 | caniuse-lite: 1.0.30001680 2842 | lodash.memoize: 4.1.2 2843 | lodash.uniq: 4.5.0 2844 | 2845 | caniuse-lite@1.0.30001680: {} 2846 | 2847 | chai@5.1.2: 2848 | dependencies: 2849 | assertion-error: 2.0.1 2850 | check-error: 2.1.1 2851 | deep-eql: 5.0.2 2852 | loupe: 3.1.2 2853 | pathval: 2.0.0 2854 | 2855 | chalk@4.1.2: 2856 | dependencies: 2857 | ansi-styles: 4.3.0 2858 | supports-color: 7.2.0 2859 | 2860 | chalk@5.3.0: {} 2861 | 2862 | check-error@2.1.1: {} 2863 | 2864 | chokidar@3.6.0: 2865 | dependencies: 2866 | anymatch: 3.1.3 2867 | braces: 3.0.3 2868 | glob-parent: 5.1.2 2869 | is-binary-path: 2.1.0 2870 | is-glob: 4.0.3 2871 | normalize-path: 3.0.0 2872 | readdirp: 3.6.0 2873 | optionalDependencies: 2874 | fsevents: 2.3.3 2875 | 2876 | clsx@2.1.1: {} 2877 | 2878 | color-convert@2.0.1: 2879 | dependencies: 2880 | color-name: 1.1.4 2881 | 2882 | color-name@1.1.4: {} 2883 | 2884 | colord@2.9.3: {} 2885 | 2886 | commander@2.20.3: 2887 | optional: true 2888 | 2889 | commander@4.1.1: {} 2890 | 2891 | commander@7.2.0: {} 2892 | 2893 | concat-with-sourcemaps@1.1.0: 2894 | dependencies: 2895 | source-map: 0.6.1 2896 | 2897 | convert-source-map@2.0.0: {} 2898 | 2899 | cross-spawn@7.0.5: 2900 | dependencies: 2901 | path-key: 3.1.1 2902 | shebang-command: 2.0.0 2903 | which: 2.0.2 2904 | 2905 | css-blank-pseudo@7.0.1(postcss@8.4.49): 2906 | dependencies: 2907 | postcss: 8.4.49 2908 | postcss-selector-parser: 7.0.0 2909 | 2910 | css-declaration-sorter@6.4.1(postcss@8.4.49): 2911 | dependencies: 2912 | postcss: 8.4.49 2913 | 2914 | css-has-pseudo@7.0.1(postcss@8.4.49): 2915 | dependencies: 2916 | '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0) 2917 | postcss: 8.4.49 2918 | postcss-selector-parser: 7.0.0 2919 | postcss-value-parser: 4.2.0 2920 | 2921 | css-prefers-color-scheme@10.0.0(postcss@8.4.49): 2922 | dependencies: 2923 | postcss: 8.4.49 2924 | 2925 | css-select@4.3.0: 2926 | dependencies: 2927 | boolbase: 1.0.0 2928 | css-what: 6.1.0 2929 | domhandler: 4.3.1 2930 | domutils: 2.8.0 2931 | nth-check: 2.1.1 2932 | 2933 | css-selector-tokenizer@0.8.0: 2934 | dependencies: 2935 | cssesc: 3.0.0 2936 | fastparse: 1.1.2 2937 | 2938 | css-tree@1.1.3: 2939 | dependencies: 2940 | mdn-data: 2.0.14 2941 | source-map: 0.6.1 2942 | 2943 | css-what@6.1.0: {} 2944 | 2945 | cssdb@8.2.1: {} 2946 | 2947 | cssesc@3.0.0: {} 2948 | 2949 | cssnano-preset-default@5.2.14(postcss@8.4.49): 2950 | dependencies: 2951 | css-declaration-sorter: 6.4.1(postcss@8.4.49) 2952 | cssnano-utils: 3.1.0(postcss@8.4.49) 2953 | postcss: 8.4.49 2954 | postcss-calc: 8.2.4(postcss@8.4.49) 2955 | postcss-colormin: 5.3.1(postcss@8.4.49) 2956 | postcss-convert-values: 5.1.3(postcss@8.4.49) 2957 | postcss-discard-comments: 5.1.2(postcss@8.4.49) 2958 | postcss-discard-duplicates: 5.1.0(postcss@8.4.49) 2959 | postcss-discard-empty: 5.1.1(postcss@8.4.49) 2960 | postcss-discard-overridden: 5.1.0(postcss@8.4.49) 2961 | postcss-merge-longhand: 5.1.7(postcss@8.4.49) 2962 | postcss-merge-rules: 5.1.4(postcss@8.4.49) 2963 | postcss-minify-font-values: 5.1.0(postcss@8.4.49) 2964 | postcss-minify-gradients: 5.1.1(postcss@8.4.49) 2965 | postcss-minify-params: 5.1.4(postcss@8.4.49) 2966 | postcss-minify-selectors: 5.2.1(postcss@8.4.49) 2967 | postcss-normalize-charset: 5.1.0(postcss@8.4.49) 2968 | postcss-normalize-display-values: 5.1.0(postcss@8.4.49) 2969 | postcss-normalize-positions: 5.1.1(postcss@8.4.49) 2970 | postcss-normalize-repeat-style: 5.1.1(postcss@8.4.49) 2971 | postcss-normalize-string: 5.1.0(postcss@8.4.49) 2972 | postcss-normalize-timing-functions: 5.1.0(postcss@8.4.49) 2973 | postcss-normalize-unicode: 5.1.1(postcss@8.4.49) 2974 | postcss-normalize-url: 5.1.0(postcss@8.4.49) 2975 | postcss-normalize-whitespace: 5.1.1(postcss@8.4.49) 2976 | postcss-ordered-values: 5.1.3(postcss@8.4.49) 2977 | postcss-reduce-initial: 5.1.2(postcss@8.4.49) 2978 | postcss-reduce-transforms: 5.1.0(postcss@8.4.49) 2979 | postcss-svgo: 5.1.0(postcss@8.4.49) 2980 | postcss-unique-selectors: 5.1.1(postcss@8.4.49) 2981 | 2982 | cssnano-utils@3.1.0(postcss@8.4.49): 2983 | dependencies: 2984 | postcss: 8.4.49 2985 | 2986 | cssnano@5.1.15(postcss@8.4.49): 2987 | dependencies: 2988 | cssnano-preset-default: 5.2.14(postcss@8.4.49) 2989 | lilconfig: 2.1.0 2990 | postcss: 8.4.49 2991 | yaml: 1.10.2 2992 | 2993 | csso@4.2.0: 2994 | dependencies: 2995 | css-tree: 1.1.3 2996 | 2997 | csstype@3.1.3: {} 2998 | 2999 | culori@3.3.0: {} 3000 | 3001 | daisyui@4.12.14(postcss@8.4.49): 3002 | dependencies: 3003 | css-selector-tokenizer: 0.8.0 3004 | culori: 3.3.0 3005 | picocolors: 1.1.1 3006 | postcss-js: 4.0.1(postcss@8.4.49) 3007 | transitivePeerDependencies: 3008 | - postcss 3009 | 3010 | debug@4.3.7: 3011 | dependencies: 3012 | ms: 2.1.3 3013 | 3014 | deep-eql@5.0.2: {} 3015 | 3016 | deepmerge@4.3.1: {} 3017 | 3018 | didyoumean@1.2.2: {} 3019 | 3020 | dlv@1.1.3: {} 3021 | 3022 | dom-serializer@1.4.1: 3023 | dependencies: 3024 | domelementtype: 2.3.0 3025 | domhandler: 4.3.1 3026 | entities: 2.2.0 3027 | 3028 | domelementtype@2.3.0: {} 3029 | 3030 | domhandler@4.3.1: 3031 | dependencies: 3032 | domelementtype: 2.3.0 3033 | 3034 | domutils@2.8.0: 3035 | dependencies: 3036 | dom-serializer: 1.4.1 3037 | domelementtype: 2.3.0 3038 | domhandler: 4.3.1 3039 | 3040 | eastasianwidth@0.2.0: {} 3041 | 3042 | electron-to-chromium@1.5.57: {} 3043 | 3044 | emoji-regex@8.0.0: {} 3045 | 3046 | emoji-regex@9.2.2: {} 3047 | 3048 | enquirer@2.4.1: 3049 | dependencies: 3050 | ansi-colors: 4.1.3 3051 | strip-ansi: 6.0.1 3052 | 3053 | entities@2.2.0: {} 3054 | 3055 | esbuild@0.21.5: 3056 | optionalDependencies: 3057 | '@esbuild/aix-ppc64': 0.21.5 3058 | '@esbuild/android-arm': 0.21.5 3059 | '@esbuild/android-arm64': 0.21.5 3060 | '@esbuild/android-x64': 0.21.5 3061 | '@esbuild/darwin-arm64': 0.21.5 3062 | '@esbuild/darwin-x64': 0.21.5 3063 | '@esbuild/freebsd-arm64': 0.21.5 3064 | '@esbuild/freebsd-x64': 0.21.5 3065 | '@esbuild/linux-arm': 0.21.5 3066 | '@esbuild/linux-arm64': 0.21.5 3067 | '@esbuild/linux-ia32': 0.21.5 3068 | '@esbuild/linux-loong64': 0.21.5 3069 | '@esbuild/linux-mips64el': 0.21.5 3070 | '@esbuild/linux-ppc64': 0.21.5 3071 | '@esbuild/linux-riscv64': 0.21.5 3072 | '@esbuild/linux-s390x': 0.21.5 3073 | '@esbuild/linux-x64': 0.21.5 3074 | '@esbuild/netbsd-x64': 0.21.5 3075 | '@esbuild/openbsd-x64': 0.21.5 3076 | '@esbuild/sunos-x64': 0.21.5 3077 | '@esbuild/win32-arm64': 0.21.5 3078 | '@esbuild/win32-ia32': 0.21.5 3079 | '@esbuild/win32-x64': 0.21.5 3080 | 3081 | escalade@3.2.0: {} 3082 | 3083 | estree-walker@0.6.1: {} 3084 | 3085 | estree-walker@2.0.2: {} 3086 | 3087 | estree-walker@3.0.3: 3088 | dependencies: 3089 | '@types/estree': 1.0.6 3090 | 3091 | eventemitter3@4.0.7: {} 3092 | 3093 | expect-type@1.1.0: {} 3094 | 3095 | fast-glob@3.3.2: 3096 | dependencies: 3097 | '@nodelib/fs.stat': 2.0.5 3098 | '@nodelib/fs.walk': 1.2.8 3099 | glob-parent: 5.1.2 3100 | merge2: 1.4.1 3101 | micromatch: 4.0.8 3102 | 3103 | fastparse@1.1.2: {} 3104 | 3105 | fastq@1.17.1: 3106 | dependencies: 3107 | reusify: 1.0.4 3108 | 3109 | fill-range@7.1.1: 3110 | dependencies: 3111 | to-regex-range: 5.0.1 3112 | 3113 | foreground-child@3.3.0: 3114 | dependencies: 3115 | cross-spawn: 7.0.5 3116 | signal-exit: 4.1.0 3117 | 3118 | fraction.js@4.3.7: {} 3119 | 3120 | fsevents@2.3.3: 3121 | optional: true 3122 | 3123 | function-bind@1.1.2: {} 3124 | 3125 | generic-names@4.0.0: 3126 | dependencies: 3127 | loader-utils: 3.3.1 3128 | 3129 | gensync@1.0.0-beta.2: {} 3130 | 3131 | github-markdown-css@5.7.0: {} 3132 | 3133 | glob-parent@5.1.2: 3134 | dependencies: 3135 | is-glob: 4.0.3 3136 | 3137 | glob-parent@6.0.2: 3138 | dependencies: 3139 | is-glob: 4.0.3 3140 | 3141 | glob@10.4.5: 3142 | dependencies: 3143 | foreground-child: 3.3.0 3144 | jackspeak: 3.4.3 3145 | minimatch: 9.0.5 3146 | minipass: 7.1.2 3147 | package-json-from-dist: 1.0.1 3148 | path-scurry: 1.11.1 3149 | 3150 | globals@11.12.0: {} 3151 | 3152 | has-flag@4.0.0: {} 3153 | 3154 | hasown@2.0.2: 3155 | dependencies: 3156 | function-bind: 1.1.2 3157 | 3158 | icss-replace-symbols@1.1.0: {} 3159 | 3160 | icss-utils@5.1.0(postcss@8.4.49): 3161 | dependencies: 3162 | postcss: 8.4.49 3163 | 3164 | import-cwd@3.0.0: 3165 | dependencies: 3166 | import-from: 3.0.0 3167 | 3168 | import-from@3.0.0: 3169 | dependencies: 3170 | resolve-from: 5.0.0 3171 | 3172 | is-binary-path@2.1.0: 3173 | dependencies: 3174 | binary-extensions: 2.3.0 3175 | 3176 | is-core-module@2.15.1: 3177 | dependencies: 3178 | hasown: 2.0.2 3179 | 3180 | is-extglob@2.1.1: {} 3181 | 3182 | is-fullwidth-code-point@3.0.0: {} 3183 | 3184 | is-glob@4.0.3: 3185 | dependencies: 3186 | is-extglob: 2.1.1 3187 | 3188 | is-module@1.0.0: {} 3189 | 3190 | is-number@7.0.0: {} 3191 | 3192 | isexe@2.0.0: {} 3193 | 3194 | jackspeak@3.4.3: 3195 | dependencies: 3196 | '@isaacs/cliui': 8.0.2 3197 | optionalDependencies: 3198 | '@pkgjs/parseargs': 0.11.0 3199 | 3200 | jiti@1.21.6: {} 3201 | 3202 | js-tokens@4.0.0: {} 3203 | 3204 | jsesc@3.0.2: {} 3205 | 3206 | json5@2.2.3: {} 3207 | 3208 | lilconfig@2.1.0: {} 3209 | 3210 | lilconfig@3.1.2: {} 3211 | 3212 | lines-and-columns@1.2.4: {} 3213 | 3214 | loader-utils@3.3.1: {} 3215 | 3216 | lodash.camelcase@4.3.0: {} 3217 | 3218 | lodash.memoize@4.1.2: {} 3219 | 3220 | lodash.uniq@4.5.0: {} 3221 | 3222 | loose-envify@1.4.0: 3223 | dependencies: 3224 | js-tokens: 4.0.0 3225 | 3226 | loupe@3.1.2: {} 3227 | 3228 | lru-cache@10.4.3: {} 3229 | 3230 | lru-cache@5.1.1: 3231 | dependencies: 3232 | yallist: 3.1.1 3233 | 3234 | magic-string@0.30.12: 3235 | dependencies: 3236 | '@jridgewell/sourcemap-codec': 1.5.0 3237 | 3238 | mdn-data@2.0.14: {} 3239 | 3240 | merge2@1.4.1: {} 3241 | 3242 | micromatch@4.0.8: 3243 | dependencies: 3244 | braces: 3.0.3 3245 | picomatch: 2.3.1 3246 | 3247 | minimatch@9.0.5: 3248 | dependencies: 3249 | brace-expansion: 2.0.1 3250 | 3251 | minipass@7.1.2: {} 3252 | 3253 | ms@2.1.3: {} 3254 | 3255 | mz@2.7.0: 3256 | dependencies: 3257 | any-promise: 1.3.0 3258 | object-assign: 4.1.1 3259 | thenify-all: 1.6.0 3260 | 3261 | nanoid@3.3.7: {} 3262 | 3263 | node-releases@2.0.18: {} 3264 | 3265 | normalize-path@3.0.0: {} 3266 | 3267 | normalize-range@0.1.2: {} 3268 | 3269 | normalize-url@6.1.0: {} 3270 | 3271 | nth-check@2.1.1: 3272 | dependencies: 3273 | boolbase: 1.0.0 3274 | 3275 | object-assign@4.1.1: {} 3276 | 3277 | object-hash@3.0.0: {} 3278 | 3279 | p-finally@1.0.0: {} 3280 | 3281 | p-queue@6.6.2: 3282 | dependencies: 3283 | eventemitter3: 4.0.7 3284 | p-timeout: 3.2.0 3285 | 3286 | p-timeout@3.2.0: 3287 | dependencies: 3288 | p-finally: 1.0.0 3289 | 3290 | package-json-from-dist@1.0.1: {} 3291 | 3292 | path-key@3.1.1: {} 3293 | 3294 | path-parse@1.0.7: {} 3295 | 3296 | path-scurry@1.11.1: 3297 | dependencies: 3298 | lru-cache: 10.4.3 3299 | minipass: 7.1.2 3300 | 3301 | pathe@1.1.2: {} 3302 | 3303 | pathval@2.0.0: {} 3304 | 3305 | picocolors@1.1.1: {} 3306 | 3307 | picomatch@2.3.1: {} 3308 | 3309 | picomatch@4.0.2: {} 3310 | 3311 | pify@2.3.0: {} 3312 | 3313 | pify@5.0.0: {} 3314 | 3315 | pirates@4.0.6: {} 3316 | 3317 | postcss-attribute-case-insensitive@7.0.1(postcss@8.4.49): 3318 | dependencies: 3319 | postcss: 8.4.49 3320 | postcss-selector-parser: 7.0.0 3321 | 3322 | postcss-calc@8.2.4(postcss@8.4.49): 3323 | dependencies: 3324 | postcss: 8.4.49 3325 | postcss-selector-parser: 6.1.2 3326 | postcss-value-parser: 4.2.0 3327 | 3328 | postcss-clamp@4.1.0(postcss@8.4.49): 3329 | dependencies: 3330 | postcss: 8.4.49 3331 | postcss-value-parser: 4.2.0 3332 | 3333 | postcss-color-functional-notation@7.0.6(postcss@8.4.49): 3334 | dependencies: 3335 | '@csstools/css-color-parser': 3.0.6(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 3336 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 3337 | '@csstools/css-tokenizer': 3.0.3 3338 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 3339 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 3340 | postcss: 8.4.49 3341 | 3342 | postcss-color-hex-alpha@10.0.0(postcss@8.4.49): 3343 | dependencies: 3344 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 3345 | postcss: 8.4.49 3346 | postcss-value-parser: 4.2.0 3347 | 3348 | postcss-color-rebeccapurple@10.0.0(postcss@8.4.49): 3349 | dependencies: 3350 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 3351 | postcss: 8.4.49 3352 | postcss-value-parser: 4.2.0 3353 | 3354 | postcss-colormin@5.3.1(postcss@8.4.49): 3355 | dependencies: 3356 | browserslist: 4.24.2 3357 | caniuse-api: 3.0.0 3358 | colord: 2.9.3 3359 | postcss: 8.4.49 3360 | postcss-value-parser: 4.2.0 3361 | 3362 | postcss-convert-values@5.1.3(postcss@8.4.49): 3363 | dependencies: 3364 | browserslist: 4.24.2 3365 | postcss: 8.4.49 3366 | postcss-value-parser: 4.2.0 3367 | 3368 | postcss-custom-media@11.0.5(postcss@8.4.49): 3369 | dependencies: 3370 | '@csstools/cascade-layer-name-parser': 2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 3371 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 3372 | '@csstools/css-tokenizer': 3.0.3 3373 | '@csstools/media-query-list-parser': 4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 3374 | postcss: 8.4.49 3375 | 3376 | postcss-custom-properties@14.0.4(postcss@8.4.49): 3377 | dependencies: 3378 | '@csstools/cascade-layer-name-parser': 2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 3379 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 3380 | '@csstools/css-tokenizer': 3.0.3 3381 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 3382 | postcss: 8.4.49 3383 | postcss-value-parser: 4.2.0 3384 | 3385 | postcss-custom-selectors@8.0.4(postcss@8.4.49): 3386 | dependencies: 3387 | '@csstools/cascade-layer-name-parser': 2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 3388 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 3389 | '@csstools/css-tokenizer': 3.0.3 3390 | postcss: 8.4.49 3391 | postcss-selector-parser: 7.0.0 3392 | 3393 | postcss-dir-pseudo-class@9.0.1(postcss@8.4.49): 3394 | dependencies: 3395 | postcss: 8.4.49 3396 | postcss-selector-parser: 7.0.0 3397 | 3398 | postcss-discard-comments@5.1.2(postcss@8.4.49): 3399 | dependencies: 3400 | postcss: 8.4.49 3401 | 3402 | postcss-discard-duplicates@5.1.0(postcss@8.4.49): 3403 | dependencies: 3404 | postcss: 8.4.49 3405 | 3406 | postcss-discard-empty@5.1.1(postcss@8.4.49): 3407 | dependencies: 3408 | postcss: 8.4.49 3409 | 3410 | postcss-discard-overridden@5.1.0(postcss@8.4.49): 3411 | dependencies: 3412 | postcss: 8.4.49 3413 | 3414 | postcss-double-position-gradients@6.0.0(postcss@8.4.49): 3415 | dependencies: 3416 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 3417 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 3418 | postcss: 8.4.49 3419 | postcss-value-parser: 4.2.0 3420 | 3421 | postcss-focus-visible@10.0.1(postcss@8.4.49): 3422 | dependencies: 3423 | postcss: 8.4.49 3424 | postcss-selector-parser: 7.0.0 3425 | 3426 | postcss-focus-within@9.0.1(postcss@8.4.49): 3427 | dependencies: 3428 | postcss: 8.4.49 3429 | postcss-selector-parser: 7.0.0 3430 | 3431 | postcss-font-variant@5.0.0(postcss@8.4.49): 3432 | dependencies: 3433 | postcss: 8.4.49 3434 | 3435 | postcss-gap-properties@6.0.0(postcss@8.4.49): 3436 | dependencies: 3437 | postcss: 8.4.49 3438 | 3439 | postcss-image-set-function@7.0.0(postcss@8.4.49): 3440 | dependencies: 3441 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 3442 | postcss: 8.4.49 3443 | postcss-value-parser: 4.2.0 3444 | 3445 | postcss-import@15.1.0(postcss@8.4.49): 3446 | dependencies: 3447 | postcss: 8.4.49 3448 | postcss-value-parser: 4.2.0 3449 | read-cache: 1.0.0 3450 | resolve: 1.22.8 3451 | 3452 | postcss-js@4.0.1(postcss@8.4.49): 3453 | dependencies: 3454 | camelcase-css: 2.0.1 3455 | postcss: 8.4.49 3456 | 3457 | postcss-lab-function@7.0.6(postcss@8.4.49): 3458 | dependencies: 3459 | '@csstools/css-color-parser': 3.0.6(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) 3460 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) 3461 | '@csstools/css-tokenizer': 3.0.3 3462 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 3463 | '@csstools/utilities': 2.0.0(postcss@8.4.49) 3464 | postcss: 8.4.49 3465 | 3466 | postcss-load-config@3.1.4(postcss@8.4.49): 3467 | dependencies: 3468 | lilconfig: 2.1.0 3469 | yaml: 1.10.2 3470 | optionalDependencies: 3471 | postcss: 8.4.49 3472 | 3473 | postcss-load-config@4.0.2(postcss@8.4.49): 3474 | dependencies: 3475 | lilconfig: 3.1.2 3476 | yaml: 2.6.0 3477 | optionalDependencies: 3478 | postcss: 8.4.49 3479 | 3480 | postcss-logical@8.0.0(postcss@8.4.49): 3481 | dependencies: 3482 | postcss: 8.4.49 3483 | postcss-value-parser: 4.2.0 3484 | 3485 | postcss-merge-longhand@5.1.7(postcss@8.4.49): 3486 | dependencies: 3487 | postcss: 8.4.49 3488 | postcss-value-parser: 4.2.0 3489 | stylehacks: 5.1.1(postcss@8.4.49) 3490 | 3491 | postcss-merge-rules@5.1.4(postcss@8.4.49): 3492 | dependencies: 3493 | browserslist: 4.24.2 3494 | caniuse-api: 3.0.0 3495 | cssnano-utils: 3.1.0(postcss@8.4.49) 3496 | postcss: 8.4.49 3497 | postcss-selector-parser: 6.1.2 3498 | 3499 | postcss-minify-font-values@5.1.0(postcss@8.4.49): 3500 | dependencies: 3501 | postcss: 8.4.49 3502 | postcss-value-parser: 4.2.0 3503 | 3504 | postcss-minify-gradients@5.1.1(postcss@8.4.49): 3505 | dependencies: 3506 | colord: 2.9.3 3507 | cssnano-utils: 3.1.0(postcss@8.4.49) 3508 | postcss: 8.4.49 3509 | postcss-value-parser: 4.2.0 3510 | 3511 | postcss-minify-params@5.1.4(postcss@8.4.49): 3512 | dependencies: 3513 | browserslist: 4.24.2 3514 | cssnano-utils: 3.1.0(postcss@8.4.49) 3515 | postcss: 8.4.49 3516 | postcss-value-parser: 4.2.0 3517 | 3518 | postcss-minify-selectors@5.2.1(postcss@8.4.49): 3519 | dependencies: 3520 | postcss: 8.4.49 3521 | postcss-selector-parser: 6.1.2 3522 | 3523 | postcss-modules-extract-imports@3.1.0(postcss@8.4.49): 3524 | dependencies: 3525 | postcss: 8.4.49 3526 | 3527 | postcss-modules-local-by-default@4.1.0(postcss@8.4.49): 3528 | dependencies: 3529 | icss-utils: 5.1.0(postcss@8.4.49) 3530 | postcss: 8.4.49 3531 | postcss-selector-parser: 7.0.0 3532 | postcss-value-parser: 4.2.0 3533 | 3534 | postcss-modules-scope@3.2.1(postcss@8.4.49): 3535 | dependencies: 3536 | postcss: 8.4.49 3537 | postcss-selector-parser: 7.0.0 3538 | 3539 | postcss-modules-values@4.0.0(postcss@8.4.49): 3540 | dependencies: 3541 | icss-utils: 5.1.0(postcss@8.4.49) 3542 | postcss: 8.4.49 3543 | 3544 | postcss-modules@4.3.1(postcss@8.4.49): 3545 | dependencies: 3546 | generic-names: 4.0.0 3547 | icss-replace-symbols: 1.1.0 3548 | lodash.camelcase: 4.3.0 3549 | postcss: 8.4.49 3550 | postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) 3551 | postcss-modules-local-by-default: 4.1.0(postcss@8.4.49) 3552 | postcss-modules-scope: 3.2.1(postcss@8.4.49) 3553 | postcss-modules-values: 4.0.0(postcss@8.4.49) 3554 | string-hash: 1.1.3 3555 | 3556 | postcss-nested@6.2.0(postcss@8.4.49): 3557 | dependencies: 3558 | postcss: 8.4.49 3559 | postcss-selector-parser: 6.1.2 3560 | 3561 | postcss-nested@7.0.2(postcss@8.4.49): 3562 | dependencies: 3563 | postcss: 8.4.49 3564 | postcss-selector-parser: 7.0.0 3565 | 3566 | postcss-nesting@13.0.1(postcss@8.4.49): 3567 | dependencies: 3568 | '@csstools/selector-resolve-nested': 3.0.0(postcss-selector-parser@7.0.0) 3569 | '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0) 3570 | postcss: 8.4.49 3571 | postcss-selector-parser: 7.0.0 3572 | 3573 | postcss-normalize-charset@5.1.0(postcss@8.4.49): 3574 | dependencies: 3575 | postcss: 8.4.49 3576 | 3577 | postcss-normalize-display-values@5.1.0(postcss@8.4.49): 3578 | dependencies: 3579 | postcss: 8.4.49 3580 | postcss-value-parser: 4.2.0 3581 | 3582 | postcss-normalize-positions@5.1.1(postcss@8.4.49): 3583 | dependencies: 3584 | postcss: 8.4.49 3585 | postcss-value-parser: 4.2.0 3586 | 3587 | postcss-normalize-repeat-style@5.1.1(postcss@8.4.49): 3588 | dependencies: 3589 | postcss: 8.4.49 3590 | postcss-value-parser: 4.2.0 3591 | 3592 | postcss-normalize-string@5.1.0(postcss@8.4.49): 3593 | dependencies: 3594 | postcss: 8.4.49 3595 | postcss-value-parser: 4.2.0 3596 | 3597 | postcss-normalize-timing-functions@5.1.0(postcss@8.4.49): 3598 | dependencies: 3599 | postcss: 8.4.49 3600 | postcss-value-parser: 4.2.0 3601 | 3602 | postcss-normalize-unicode@5.1.1(postcss@8.4.49): 3603 | dependencies: 3604 | browserslist: 4.24.2 3605 | postcss: 8.4.49 3606 | postcss-value-parser: 4.2.0 3607 | 3608 | postcss-normalize-url@5.1.0(postcss@8.4.49): 3609 | dependencies: 3610 | normalize-url: 6.1.0 3611 | postcss: 8.4.49 3612 | postcss-value-parser: 4.2.0 3613 | 3614 | postcss-normalize-whitespace@5.1.1(postcss@8.4.49): 3615 | dependencies: 3616 | postcss: 8.4.49 3617 | postcss-value-parser: 4.2.0 3618 | 3619 | postcss-opacity-percentage@3.0.0(postcss@8.4.49): 3620 | dependencies: 3621 | postcss: 8.4.49 3622 | 3623 | postcss-ordered-values@5.1.3(postcss@8.4.49): 3624 | dependencies: 3625 | cssnano-utils: 3.1.0(postcss@8.4.49) 3626 | postcss: 8.4.49 3627 | postcss-value-parser: 4.2.0 3628 | 3629 | postcss-overflow-shorthand@6.0.0(postcss@8.4.49): 3630 | dependencies: 3631 | postcss: 8.4.49 3632 | postcss-value-parser: 4.2.0 3633 | 3634 | postcss-page-break@3.0.4(postcss@8.4.49): 3635 | dependencies: 3636 | postcss: 8.4.49 3637 | 3638 | postcss-place@10.0.0(postcss@8.4.49): 3639 | dependencies: 3640 | postcss: 8.4.49 3641 | postcss-value-parser: 4.2.0 3642 | 3643 | postcss-preset-env@10.1.0(postcss@8.4.49): 3644 | dependencies: 3645 | '@csstools/postcss-cascade-layers': 5.0.1(postcss@8.4.49) 3646 | '@csstools/postcss-color-function': 4.0.6(postcss@8.4.49) 3647 | '@csstools/postcss-color-mix-function': 3.0.6(postcss@8.4.49) 3648 | '@csstools/postcss-content-alt-text': 2.0.4(postcss@8.4.49) 3649 | '@csstools/postcss-exponential-functions': 2.0.5(postcss@8.4.49) 3650 | '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.4.49) 3651 | '@csstools/postcss-gamut-mapping': 2.0.6(postcss@8.4.49) 3652 | '@csstools/postcss-gradients-interpolation-method': 5.0.6(postcss@8.4.49) 3653 | '@csstools/postcss-hwb-function': 4.0.6(postcss@8.4.49) 3654 | '@csstools/postcss-ic-unit': 4.0.0(postcss@8.4.49) 3655 | '@csstools/postcss-initial': 2.0.0(postcss@8.4.49) 3656 | '@csstools/postcss-is-pseudo-class': 5.0.1(postcss@8.4.49) 3657 | '@csstools/postcss-light-dark-function': 2.0.7(postcss@8.4.49) 3658 | '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.4.49) 3659 | '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.4.49) 3660 | '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.4.49) 3661 | '@csstools/postcss-logical-resize': 3.0.0(postcss@8.4.49) 3662 | '@csstools/postcss-logical-viewport-units': 3.0.3(postcss@8.4.49) 3663 | '@csstools/postcss-media-minmax': 2.0.5(postcss@8.4.49) 3664 | '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.4(postcss@8.4.49) 3665 | '@csstools/postcss-nested-calc': 4.0.0(postcss@8.4.49) 3666 | '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.4.49) 3667 | '@csstools/postcss-oklab-function': 4.0.6(postcss@8.4.49) 3668 | '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.49) 3669 | '@csstools/postcss-random-function': 1.0.1(postcss@8.4.49) 3670 | '@csstools/postcss-relative-color-syntax': 3.0.6(postcss@8.4.49) 3671 | '@csstools/postcss-scope-pseudo-class': 4.0.1(postcss@8.4.49) 3672 | '@csstools/postcss-sign-functions': 1.0.0(postcss@8.4.49) 3673 | '@csstools/postcss-stepped-value-functions': 4.0.5(postcss@8.4.49) 3674 | '@csstools/postcss-text-decoration-shorthand': 4.0.1(postcss@8.4.49) 3675 | '@csstools/postcss-trigonometric-functions': 4.0.5(postcss@8.4.49) 3676 | '@csstools/postcss-unset-value': 4.0.0(postcss@8.4.49) 3677 | autoprefixer: 10.4.20(postcss@8.4.49) 3678 | browserslist: 4.24.2 3679 | css-blank-pseudo: 7.0.1(postcss@8.4.49) 3680 | css-has-pseudo: 7.0.1(postcss@8.4.49) 3681 | css-prefers-color-scheme: 10.0.0(postcss@8.4.49) 3682 | cssdb: 8.2.1 3683 | postcss: 8.4.49 3684 | postcss-attribute-case-insensitive: 7.0.1(postcss@8.4.49) 3685 | postcss-clamp: 4.1.0(postcss@8.4.49) 3686 | postcss-color-functional-notation: 7.0.6(postcss@8.4.49) 3687 | postcss-color-hex-alpha: 10.0.0(postcss@8.4.49) 3688 | postcss-color-rebeccapurple: 10.0.0(postcss@8.4.49) 3689 | postcss-custom-media: 11.0.5(postcss@8.4.49) 3690 | postcss-custom-properties: 14.0.4(postcss@8.4.49) 3691 | postcss-custom-selectors: 8.0.4(postcss@8.4.49) 3692 | postcss-dir-pseudo-class: 9.0.1(postcss@8.4.49) 3693 | postcss-double-position-gradients: 6.0.0(postcss@8.4.49) 3694 | postcss-focus-visible: 10.0.1(postcss@8.4.49) 3695 | postcss-focus-within: 9.0.1(postcss@8.4.49) 3696 | postcss-font-variant: 5.0.0(postcss@8.4.49) 3697 | postcss-gap-properties: 6.0.0(postcss@8.4.49) 3698 | postcss-image-set-function: 7.0.0(postcss@8.4.49) 3699 | postcss-lab-function: 7.0.6(postcss@8.4.49) 3700 | postcss-logical: 8.0.0(postcss@8.4.49) 3701 | postcss-nesting: 13.0.1(postcss@8.4.49) 3702 | postcss-opacity-percentage: 3.0.0(postcss@8.4.49) 3703 | postcss-overflow-shorthand: 6.0.0(postcss@8.4.49) 3704 | postcss-page-break: 3.0.4(postcss@8.4.49) 3705 | postcss-place: 10.0.0(postcss@8.4.49) 3706 | postcss-pseudo-class-any-link: 10.0.1(postcss@8.4.49) 3707 | postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.49) 3708 | postcss-selector-not: 8.0.1(postcss@8.4.49) 3709 | 3710 | postcss-pseudo-class-any-link@10.0.1(postcss@8.4.49): 3711 | dependencies: 3712 | postcss: 8.4.49 3713 | postcss-selector-parser: 7.0.0 3714 | 3715 | postcss-reduce-initial@5.1.2(postcss@8.4.49): 3716 | dependencies: 3717 | browserslist: 4.24.2 3718 | caniuse-api: 3.0.0 3719 | postcss: 8.4.49 3720 | 3721 | postcss-reduce-transforms@5.1.0(postcss@8.4.49): 3722 | dependencies: 3723 | postcss: 8.4.49 3724 | postcss-value-parser: 4.2.0 3725 | 3726 | postcss-replace-overflow-wrap@4.0.0(postcss@8.4.49): 3727 | dependencies: 3728 | postcss: 8.4.49 3729 | 3730 | postcss-selector-not@8.0.1(postcss@8.4.49): 3731 | dependencies: 3732 | postcss: 8.4.49 3733 | postcss-selector-parser: 7.0.0 3734 | 3735 | postcss-selector-parser@6.1.2: 3736 | dependencies: 3737 | cssesc: 3.0.0 3738 | util-deprecate: 1.0.2 3739 | 3740 | postcss-selector-parser@7.0.0: 3741 | dependencies: 3742 | cssesc: 3.0.0 3743 | util-deprecate: 1.0.2 3744 | 3745 | postcss-svgo@5.1.0(postcss@8.4.49): 3746 | dependencies: 3747 | postcss: 8.4.49 3748 | postcss-value-parser: 4.2.0 3749 | svgo: 2.8.0 3750 | 3751 | postcss-unique-selectors@5.1.1(postcss@8.4.49): 3752 | dependencies: 3753 | postcss: 8.4.49 3754 | postcss-selector-parser: 6.1.2 3755 | 3756 | postcss-value-parser@4.2.0: {} 3757 | 3758 | postcss@8.4.49: 3759 | dependencies: 3760 | nanoid: 3.3.7 3761 | picocolors: 1.1.1 3762 | source-map-js: 1.2.1 3763 | 3764 | promise.series@0.2.0: {} 3765 | 3766 | queue-microtask@1.2.3: {} 3767 | 3768 | react-dom@18.3.1(react@18.3.1): 3769 | dependencies: 3770 | loose-envify: 1.4.0 3771 | react: 18.3.1 3772 | scheduler: 0.23.2 3773 | 3774 | react-refresh@0.14.2: {} 3775 | 3776 | react@18.3.1: 3777 | dependencies: 3778 | loose-envify: 1.4.0 3779 | 3780 | read-cache@1.0.0: 3781 | dependencies: 3782 | pify: 2.3.0 3783 | 3784 | readdirp@3.6.0: 3785 | dependencies: 3786 | picomatch: 2.3.1 3787 | 3788 | resolve-from@5.0.0: {} 3789 | 3790 | resolve@1.22.8: 3791 | dependencies: 3792 | is-core-module: 2.15.1 3793 | path-parse: 1.0.7 3794 | supports-preserve-symlinks-flag: 1.0.0 3795 | 3796 | reusify@1.0.4: {} 3797 | 3798 | rollup-plugin-dts@6.1.1(rollup@4.26.0)(typescript@5.6.3): 3799 | dependencies: 3800 | magic-string: 0.30.12 3801 | rollup: 4.26.0 3802 | typescript: 5.6.3 3803 | optionalDependencies: 3804 | '@babel/code-frame': 7.26.2 3805 | 3806 | rollup-plugin-postcss@4.0.2(postcss@8.4.49): 3807 | dependencies: 3808 | chalk: 4.1.2 3809 | concat-with-sourcemaps: 1.1.0 3810 | cssnano: 5.1.15(postcss@8.4.49) 3811 | import-cwd: 3.0.0 3812 | p-queue: 6.6.2 3813 | pify: 5.0.0 3814 | postcss: 8.4.49 3815 | postcss-load-config: 3.1.4(postcss@8.4.49) 3816 | postcss-modules: 4.3.1(postcss@8.4.49) 3817 | promise.series: 0.2.0 3818 | resolve: 1.22.8 3819 | rollup-pluginutils: 2.8.2 3820 | safe-identifier: 0.4.2 3821 | style-inject: 0.3.0 3822 | transitivePeerDependencies: 3823 | - ts-node 3824 | 3825 | rollup-pluginutils@2.8.2: 3826 | dependencies: 3827 | estree-walker: 0.6.1 3828 | 3829 | rollup@4.26.0: 3830 | dependencies: 3831 | '@types/estree': 1.0.6 3832 | optionalDependencies: 3833 | '@rollup/rollup-android-arm-eabi': 4.26.0 3834 | '@rollup/rollup-android-arm64': 4.26.0 3835 | '@rollup/rollup-darwin-arm64': 4.26.0 3836 | '@rollup/rollup-darwin-x64': 4.26.0 3837 | '@rollup/rollup-freebsd-arm64': 4.26.0 3838 | '@rollup/rollup-freebsd-x64': 4.26.0 3839 | '@rollup/rollup-linux-arm-gnueabihf': 4.26.0 3840 | '@rollup/rollup-linux-arm-musleabihf': 4.26.0 3841 | '@rollup/rollup-linux-arm64-gnu': 4.26.0 3842 | '@rollup/rollup-linux-arm64-musl': 4.26.0 3843 | '@rollup/rollup-linux-powerpc64le-gnu': 4.26.0 3844 | '@rollup/rollup-linux-riscv64-gnu': 4.26.0 3845 | '@rollup/rollup-linux-s390x-gnu': 4.26.0 3846 | '@rollup/rollup-linux-x64-gnu': 4.26.0 3847 | '@rollup/rollup-linux-x64-musl': 4.26.0 3848 | '@rollup/rollup-win32-arm64-msvc': 4.26.0 3849 | '@rollup/rollup-win32-ia32-msvc': 4.26.0 3850 | '@rollup/rollup-win32-x64-msvc': 4.26.0 3851 | fsevents: 2.3.3 3852 | 3853 | run-parallel@1.2.0: 3854 | dependencies: 3855 | queue-microtask: 1.2.3 3856 | 3857 | safe-identifier@0.4.2: {} 3858 | 3859 | scheduler@0.23.2: 3860 | dependencies: 3861 | loose-envify: 1.4.0 3862 | 3863 | semver@6.3.1: {} 3864 | 3865 | semver@7.6.3: {} 3866 | 3867 | shebang-command@2.0.0: 3868 | dependencies: 3869 | shebang-regex: 3.0.0 3870 | 3871 | shebang-regex@3.0.0: {} 3872 | 3873 | siginfo@2.0.0: {} 3874 | 3875 | signal-exit@4.1.0: {} 3876 | 3877 | source-map-js@1.2.1: {} 3878 | 3879 | source-map-support@0.5.21: 3880 | dependencies: 3881 | buffer-from: 1.1.2 3882 | source-map: 0.6.1 3883 | optional: true 3884 | 3885 | source-map@0.6.1: {} 3886 | 3887 | stable@0.1.8: {} 3888 | 3889 | stackback@0.0.2: {} 3890 | 3891 | std-env@3.8.0: {} 3892 | 3893 | string-hash@1.1.3: {} 3894 | 3895 | string-width@4.2.3: 3896 | dependencies: 3897 | emoji-regex: 8.0.0 3898 | is-fullwidth-code-point: 3.0.0 3899 | strip-ansi: 6.0.1 3900 | 3901 | string-width@5.1.2: 3902 | dependencies: 3903 | eastasianwidth: 0.2.0 3904 | emoji-regex: 9.2.2 3905 | strip-ansi: 7.1.0 3906 | 3907 | strip-ansi@6.0.1: 3908 | dependencies: 3909 | ansi-regex: 5.0.1 3910 | 3911 | strip-ansi@7.1.0: 3912 | dependencies: 3913 | ansi-regex: 6.1.0 3914 | 3915 | style-inject@0.3.0: {} 3916 | 3917 | stylehacks@5.1.1(postcss@8.4.49): 3918 | dependencies: 3919 | browserslist: 4.24.2 3920 | postcss: 8.4.49 3921 | postcss-selector-parser: 6.1.2 3922 | 3923 | sucrase@3.35.0: 3924 | dependencies: 3925 | '@jridgewell/gen-mapping': 0.3.5 3926 | commander: 4.1.1 3927 | glob: 10.4.5 3928 | lines-and-columns: 1.2.4 3929 | mz: 2.7.0 3930 | pirates: 4.0.6 3931 | ts-interface-checker: 0.1.13 3932 | 3933 | supports-color@7.2.0: 3934 | dependencies: 3935 | has-flag: 4.0.0 3936 | 3937 | supports-preserve-symlinks-flag@1.0.0: {} 3938 | 3939 | svgo@2.8.0: 3940 | dependencies: 3941 | '@trysound/sax': 0.2.0 3942 | commander: 7.2.0 3943 | css-select: 4.3.0 3944 | css-tree: 1.1.3 3945 | csso: 4.2.0 3946 | picocolors: 1.1.1 3947 | stable: 0.1.8 3948 | 3949 | tailwindcss@3.4.14: 3950 | dependencies: 3951 | '@alloc/quick-lru': 5.2.0 3952 | arg: 5.0.2 3953 | chokidar: 3.6.0 3954 | didyoumean: 1.2.2 3955 | dlv: 1.1.3 3956 | fast-glob: 3.3.2 3957 | glob-parent: 6.0.2 3958 | is-glob: 4.0.3 3959 | jiti: 1.21.6 3960 | lilconfig: 2.1.0 3961 | micromatch: 4.0.8 3962 | normalize-path: 3.0.0 3963 | object-hash: 3.0.0 3964 | picocolors: 1.1.1 3965 | postcss: 8.4.49 3966 | postcss-import: 15.1.0(postcss@8.4.49) 3967 | postcss-js: 4.0.1(postcss@8.4.49) 3968 | postcss-load-config: 4.0.2(postcss@8.4.49) 3969 | postcss-nested: 6.2.0(postcss@8.4.49) 3970 | postcss-selector-parser: 6.1.2 3971 | resolve: 1.22.8 3972 | sucrase: 3.35.0 3973 | transitivePeerDependencies: 3974 | - ts-node 3975 | 3976 | terser@5.16.6: 3977 | dependencies: 3978 | '@jridgewell/source-map': 0.3.6 3979 | acorn: 8.14.0 3980 | commander: 2.20.3 3981 | source-map-support: 0.5.21 3982 | optional: true 3983 | 3984 | thenify-all@1.6.0: 3985 | dependencies: 3986 | thenify: 3.3.1 3987 | 3988 | thenify@3.3.1: 3989 | dependencies: 3990 | any-promise: 1.3.0 3991 | 3992 | tinybench@2.9.0: {} 3993 | 3994 | tinyexec@0.3.1: {} 3995 | 3996 | tinypool@1.0.1: {} 3997 | 3998 | tinyrainbow@1.2.0: {} 3999 | 4000 | tinyspy@3.0.2: {} 4001 | 4002 | to-regex-range@5.0.1: 4003 | dependencies: 4004 | is-number: 7.0.0 4005 | 4006 | ts-interface-checker@0.1.13: {} 4007 | 4008 | tslib@2.8.1: {} 4009 | 4010 | typescript@5.6.3: {} 4011 | 4012 | undici-types@6.19.8: {} 4013 | 4014 | update-browserslist-db@1.1.1(browserslist@4.24.2): 4015 | dependencies: 4016 | browserslist: 4.24.2 4017 | escalade: 3.2.0 4018 | picocolors: 1.1.1 4019 | 4020 | util-deprecate@1.0.2: {} 4021 | 4022 | vite-node@2.1.4(@types/node@20.17.6)(terser@5.16.6): 4023 | dependencies: 4024 | cac: 6.7.14 4025 | debug: 4.3.7 4026 | pathe: 1.1.2 4027 | vite: 5.4.11(@types/node@20.17.6)(terser@5.16.6) 4028 | transitivePeerDependencies: 4029 | - '@types/node' 4030 | - less 4031 | - lightningcss 4032 | - sass 4033 | - sass-embedded 4034 | - stylus 4035 | - sugarss 4036 | - supports-color 4037 | - terser 4038 | 4039 | vite@5.4.11(@types/node@20.17.6)(terser@5.16.6): 4040 | dependencies: 4041 | esbuild: 0.21.5 4042 | postcss: 8.4.49 4043 | rollup: 4.26.0 4044 | optionalDependencies: 4045 | '@types/node': 20.17.6 4046 | fsevents: 2.3.3 4047 | terser: 5.16.6 4048 | 4049 | vitest@2.1.4(@types/node@20.17.6)(terser@5.16.6): 4050 | dependencies: 4051 | '@vitest/expect': 2.1.4 4052 | '@vitest/mocker': 2.1.4(vite@5.4.11(@types/node@20.17.6)(terser@5.16.6)) 4053 | '@vitest/pretty-format': 2.1.4 4054 | '@vitest/runner': 2.1.4 4055 | '@vitest/snapshot': 2.1.4 4056 | '@vitest/spy': 2.1.4 4057 | '@vitest/utils': 2.1.4 4058 | chai: 5.1.2 4059 | debug: 4.3.7 4060 | expect-type: 1.1.0 4061 | magic-string: 0.30.12 4062 | pathe: 1.1.2 4063 | std-env: 3.8.0 4064 | tinybench: 2.9.0 4065 | tinyexec: 0.3.1 4066 | tinypool: 1.0.1 4067 | tinyrainbow: 1.2.0 4068 | vite: 5.4.11(@types/node@20.17.6)(terser@5.16.6) 4069 | vite-node: 2.1.4(@types/node@20.17.6)(terser@5.16.6) 4070 | why-is-node-running: 2.3.0 4071 | optionalDependencies: 4072 | '@types/node': 20.17.6 4073 | transitivePeerDependencies: 4074 | - less 4075 | - lightningcss 4076 | - msw 4077 | - sass 4078 | - sass-embedded 4079 | - stylus 4080 | - sugarss 4081 | - supports-color 4082 | - terser 4083 | 4084 | which@2.0.2: 4085 | dependencies: 4086 | isexe: 2.0.0 4087 | 4088 | why-is-node-running@2.3.0: 4089 | dependencies: 4090 | siginfo: 2.0.0 4091 | stackback: 0.0.2 4092 | 4093 | wrap-ansi@7.0.0: 4094 | dependencies: 4095 | ansi-styles: 4.3.0 4096 | string-width: 4.2.3 4097 | strip-ansi: 6.0.1 4098 | 4099 | wrap-ansi@8.1.0: 4100 | dependencies: 4101 | ansi-styles: 6.2.1 4102 | string-width: 5.1.2 4103 | strip-ansi: 7.1.0 4104 | 4105 | yallist@3.1.1: {} 4106 | 4107 | yaml@1.10.2: {} 4108 | 4109 | yaml@2.6.0: {} 4110 | --------------------------------------------------------------------------------