├── .github
├── FUNDING.yml
└── workflows
│ ├── main.yml
│ └── npm-release.yml
├── .gitignore
├── .npmignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── app
├── index.html
└── src
│ ├── App.tsx
│ ├── assets
│ ├── analysis-300px.png
│ ├── analysis.png
│ ├── favicon.svg
│ ├── index.css
│ └── screenshot.png
│ ├── components
│ ├── Categories.tsx
│ ├── Category.tsx
│ ├── Colors.tsx
│ ├── Header.tsx
│ └── OverviewStats.tsx
│ ├── main.tsx
│ ├── pages
│ └── index.tsx
│ ├── utils
│ └── fetcher.ts
│ └── vite-env.d.ts
├── index.js
├── package.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── src
├── analyzer.ts
├── helpers
│ ├── camelToTitleCase.ts
│ ├── categories.ts
│ ├── readModule.ts
│ └── server.ts
├── index.ts
├── parse
│ └── index.ts
└── types
│ ├── classnameInfo.ts
│ └── metrics.ts
├── test
└── index.test.ts
├── tsconfig.json
└── vite.config.mts
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: [apvarun]
2 | custom: ['https://www.buymeacoffee.com/apvarun']
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 | on: [push]
3 | jobs:
4 | build:
5 | name: Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }}
6 |
7 | runs-on: ${{ matrix.os }}
8 | strategy:
9 | matrix:
10 | node: ['22.x']
11 | os: [windows-latest, macOS-latest]
12 |
13 | steps:
14 | - name: Checkout repo
15 | uses: actions/checkout@v2
16 |
17 | - name: Use Node ${{ matrix.node }}
18 | uses: actions/setup-node@v1
19 | with:
20 | node-version: ${{ matrix.node }}
21 |
22 | - uses: pnpm/action-setup@v2
23 | name: Install pnpm
24 | with:
25 | version: 10
26 | run_install: false
27 |
28 | - name: Install dependencies
29 | run: pnpm install
30 |
31 | # - name: Lint
32 | # run: pnpm lint
33 |
34 | # - name: Test
35 | # run: pnpm test --ci --coverage --maxWorkers=2
36 |
37 | - name: Build
38 | run: pnpm run build
39 |
--------------------------------------------------------------------------------
/.github/workflows/npm-release.yml:
--------------------------------------------------------------------------------
1 | name: Node.js Package
2 | on:
3 | push:
4 | branches:
5 | - main
6 | jobs:
7 | build:
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: actions/checkout@v2
11 | # Setup .npmrc file to publish to npm
12 | - uses: actions/setup-node@v2
13 | with:
14 | node-version: '22.x'
15 | registry-url: 'https://registry.npmjs.org'
16 | # Defaults to the user or organization that owns the workflow file
17 | scope: ''
18 |
19 | - uses: pnpm/action-setup@v2
20 | name: Install pnpm
21 | with:
22 | version: 10
23 | run_install: false
24 |
25 | - name: Install dependencies
26 | run: pnpm install
27 |
28 | - run: npm publish
29 | env:
30 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.log
2 | .DS_Store
3 | node_modules
4 | dist
5 | dist-ssr
6 | *.local
7 | *.tgz
8 | tailwind-output.css
9 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | .github
2 | *.log
3 | .DS_Store
4 | node_modules
5 | dist-ssr
6 | *.local
7 | tailwind-output.css
8 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7 |
8 | ## [0.4.0] - 2023-10-26
9 |
10 | - Polish UI
11 | - Responsive output page
12 | - Fixes #6
13 |
14 | ## [0.3.2] - 2023-10-25
15 |
16 | - Use `cross-spawn` for cross platform compatibility
17 |
18 | ## [0.3.1] - 2023-10-24
19 |
20 | - Update `purge` path to `content` key in tailwind config check
21 |
22 | ## [0.3.0] - 2023-10-17
23 |
24 | - Support Tailwind v3
25 | - Add colors preview in UI
26 | - Update dependencies
27 |
28 | ## [0.2.1] - 2021-07-17
29 |
30 | - Fix packaging for npx
31 |
32 | ## [0.2.0] - 2021-07-12
33 |
34 | - Fix the tailwindcss version dependency
35 | - Update dependencies
36 |
37 | ## [0.1.0] - 2021-07-11
38 |
39 | Initial Release with ability to analyse the TailwindCSS project and show stats.
40 |
41 | [0.2.0]: https://github.com/apvarun/tailwindcss-analysis/compare/v0.1.0...v0.2.0
42 | [0.1.0]: https://github.com/apvarun/tailwindcss-analysis/compare/1107327025a962308d7dd223521e00a07314016c...v0.1.0
43 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Varun A P
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TailwindCSS Analysis
2 |
3 | 
4 | 
5 |
6 | Analyse the TailwindCSS classes used in your application
7 |
8 | 
9 |
10 | Here's why:
11 |
12 | - Get overall view of the styles used in your project. Helps to monitor if any styles are prohibited in your organization. (One might not prefer CSS grid if the application needs to support IE browser)
13 | - View the overview of colors and fonts used in the application. Useful for verification by the design team
14 |
15 | ## Usage
16 |
17 | Navigate to the project that uses the TailwindCSS and run the command to generate the analysis report.
18 |
19 | ```
20 | npx tailwindcss-analysis
21 | ```
22 |
23 | ## Screenshots
24 |
25 | 
26 |
27 | [View Live Report](https://tailwindcss-analysis.netlify.app/)
28 |
29 | ## Roadmap
30 |
31 | - [ ] Display file size (minified and gzipped)
32 | - [ ] Cleanup CSS output after execution
33 | - [-] Show human-readable values for colors and fonts
34 |
35 | See the [open issues](https://github.com/apvarun/tailwindcss-analysis/issues) for a list of proposed features (and known issues).
36 |
37 | ## Contributing
38 |
39 | Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
40 |
41 | ## Authors
42 |
43 | - [@apvarun](https://twitter.com/apvarun)
44 |
45 | See also the list of [contributors](https://github.com/apvarun/tailwindcss-analysis/contributors) who participated in this project.
46 |
47 |
48 | ## Acknowledgments
49 |
50 | This project is inspired by [windicss-analysis](https://github.com/windicss/windicss-analysis).
51 |
52 | ## 🤝 Support
53 |
54 | Contributions, issues, and feature requests are welcome!
55 |
56 | Give a ⭐️ if you like this project!
57 |
58 |
59 |
60 | ## License
61 |
62 | [MIT](LICENSE)
63 |
--------------------------------------------------------------------------------
/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | TailwindCSS Analysis
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Home from './pages';
3 |
4 | function App() {
5 | return ;
6 | }
7 |
8 | export default App;
9 |
--------------------------------------------------------------------------------
/app/src/assets/analysis-300px.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apvarun/tailwindcss-analysis/82b3f1dad83e1cd507484c9b8d367c55f65f93a1/app/src/assets/analysis-300px.png
--------------------------------------------------------------------------------
/app/src/assets/analysis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apvarun/tailwindcss-analysis/82b3f1dad83e1cd507484c9b8d367c55f65f93a1/app/src/assets/analysis.png
--------------------------------------------------------------------------------
/app/src/assets/favicon.svg:
--------------------------------------------------------------------------------
1 |
76 |
--------------------------------------------------------------------------------
/app/src/assets/index.css:
--------------------------------------------------------------------------------
1 | @import 'tailwindcss';
2 |
--------------------------------------------------------------------------------
/app/src/assets/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apvarun/tailwindcss-analysis/82b3f1dad83e1cd507484c9b8d367c55f65f93a1/app/src/assets/screenshot.png
--------------------------------------------------------------------------------
/app/src/components/Categories.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react';
2 | import { useState } from 'react';
3 | import ClassnameInfo from '../../../src/types/classnameInfo';
4 | import Category from './Category';
5 |
6 | export default function Categories({ data }: { data: ClassnameInfo[] }) {
7 | const [groups, setGroups] = useState>({});
8 |
9 | useEffect(() => {
10 | let newGroups: Record = {};
11 |
12 | data.forEach((item) => {
13 | if (item.category === 'Unknown' || item.category === 'Variable') {
14 | return;
15 | }
16 |
17 | if (newGroups[item.category]) {
18 | if (
19 | !newGroups[item.category].find((exItem) => exItem.name === item.name)
20 | ) {
21 | newGroups[item.category].push(item);
22 | }
23 | } else {
24 | newGroups[item.category] = [item];
25 | }
26 | });
27 |
28 | setGroups(newGroups);
29 | }, [data]);
30 |
31 | return (
32 |
33 |
34 | Class names based on categories
35 |
36 |
37 | {Object.entries(groups).map(([groupName, items]) => (
38 |
39 | ))}
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/components/Category.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ClassnameInfo from '../../../src/types/classnameInfo';
3 |
4 | export default function Category({
5 | name,
6 | items,
7 | }: {
8 | name: string;
9 | items: ClassnameInfo[];
10 | }) {
11 | return (
12 |
13 |
14 | {name}
15 |
16 |
17 | {items.map((item) => (
18 |
22 | {item.name.replaceAll('\\', '')}
23 |
24 | ))}
25 |
26 |
27 | );
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/components/Colors.tsx:
--------------------------------------------------------------------------------
1 | import React, { useMemo } from 'react'
2 | import ClassnameInfo from '../../../src/types/classnameInfo'
3 |
4 | export const Colors = ({ data }: { data: ClassnameInfo[] }) => {
5 |
6 | const colors = useMemo(() => {
7 | const textAndBg = data.filter(item => item.category === 'Text' || item.category === 'Background')
8 | const allTags = textAndBg.map(item => item.name);
9 |
10 | const colorTags = allTags.filter(tag => {
11 | const hexCodeRegex = /(?:$|^|)#?([0-9a-f]{6}|[0-9a-f]{3})(?:$|^|)/gi
12 | const colorRegex = /(?:$|^|)(red-|blue-|indigo-|cool-gray-|pink-|yellow-|teal-|gray-|orange-|green-|purple-)(50|100|200|300|400|500|600|700|800|900)(?:$|^|)/gi
13 | if (tag.includes('[')) {
14 | return hexCodeRegex.test(tag);
15 | }
16 | return colorRegex.test(tag)
17 | })
18 |
19 | return colorTags
20 | }, data);
21 |
22 | return (
23 |
24 |
25 | Colors
26 |
27 |
28 | {colors.map(color =>
29 |
30 |
{color.replaceAll('\\', '')}
31 |
)}
32 |
33 |
34 | )
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/components/Header.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import logo from '../assets/analysis-300px.png';
3 |
4 | export default function Header() {
5 | return (
6 |
26 | );
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/components/OverviewStats.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Metrics } from '../../../src/types/metrics';
3 |
4 | const keyNames: { [key: string]: string } = {
5 | colors: 'Colors',
6 | mediaQueries: 'Media Queries',
7 | selectors: 'Selectors',
8 | selectorsByAttribute: 'Selectors By Attribute',
9 | selectorsByClass: 'Selectors By Class',
10 | selectorsById: 'Selectors By Id',
11 | selectorsByPseudo: 'Selectors By Pseudo Class',
12 | selectorsByTag: 'Selectors By Tag',
13 | rules: 'Total CSS Rules',
14 | declarations: 'Total Properties Declared',
15 | };
16 |
17 | export default function OverviewStats({ data }: { data: Metrics }) {
18 | const secondaryStats: Array = [
19 | 'selectorsByAttribute',
20 | 'selectorsByClass',
21 | 'selectorsById',
22 | 'selectorsByPseudo',
23 | 'selectorsByTag',
24 | ];
25 |
26 | const tertiaryStats: Array = ['rules', 'declarations'];
27 |
28 | return (
29 |
30 |
Overall Stats
31 |
32 |
33 |
34 |
35 |
{data.colors}
36 |
{keyNames.colors}
37 |
38 |
39 |
40 |
41 |
{data.mediaQueries}
42 |
{keyNames.mediaQueries}
43 |
44 |
45 |
46 |
47 |
{data.selectors}
48 |
{keyNames.selectors}
49 |
50 |
51 |
52 |
53 |
54 | {secondaryStats.map((stat) => (
55 |
59 |
60 | {keyNames[stat]}
61 |
62 |
{data[stat]}
63 |
64 | ))}
65 |
66 |
67 |
68 | {tertiaryStats.map((stat) => (
69 |
70 |
{keyNames[stat]}
71 |
{data[stat]}
72 |
73 | ))}
74 |
75 |
76 | );
77 | }
78 |
--------------------------------------------------------------------------------
/app/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { createRoot } from 'react-dom/client';
3 | import App from './App';
4 |
5 | import './assets/index.css';
6 |
7 | const root = createRoot(document.getElementById('root')!);
8 |
9 | root.render(
10 |
11 |
12 |
13 | );
14 |
--------------------------------------------------------------------------------
/app/src/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | // import useSWR from 'swr';
3 | import Categories from '../components/Categories';
4 | import Header from '../components/Header';
5 | import OverviewStats from '../components/OverviewStats';
6 | import { Colors } from '../components/Colors';
7 | // import { fetcher } from '../utils/fetcher';
8 |
9 | export default function Home() {
10 | // const { data, error } = useSWR('/api/stats', fetcher);
11 | const data = {
12 | metrics: {
13 | colors: 8,
14 | mediaQueries: 7,
15 | selectors: 203,
16 | selectorsByAttribute: 1,
17 | selectorsByClass: 113,
18 | selectorsById: 0,
19 | selectorsByPseudo: 14,
20 | selectorsByTag: 69,
21 | rules: 148,
22 | declarations: 274,
23 | },
24 | categories: [
25 | { name: '*', category: 'Unknown' },
26 | { prefixes: [''], name: 'after', category: 'Unknown' },
27 | { prefixes: [''], name: 'before', category: 'Unknown' },
28 | { prefixes: [''], name: 'after', category: 'Unknown' },
29 | { prefixes: [''], name: 'before', category: 'Unknown' },
30 | { name: 'html', category: 'Unknown' },
31 | { name: 'body', category: 'Unknown' },
32 | { name: 'hr', category: 'Unknown' },
33 | { prefixes: ['abbr'], name: 'where([title])', category: 'Variable' },
34 | { name: 'h1', category: 'Unknown' },
35 | { name: 'h2', category: 'Unknown' },
36 | { name: 'h3', category: 'Unknown' },
37 | { name: 'h4', category: 'Unknown' },
38 | { name: 'h5', category: 'Unknown' },
39 | { name: 'h6', category: 'Unknown' },
40 | { name: 'a', category: 'Unknown' },
41 | { name: 'b', category: 'Unknown' },
42 | { name: 'strong', category: 'Unknown' },
43 | { name: 'code', category: 'Unknown' },
44 | { name: 'kbd', category: 'Unknown' },
45 | { name: 'pre', category: 'Unknown' },
46 | { name: 'samp', category: 'Unknown' },
47 | { name: 'small', category: 'Unknown' },
48 | { name: 'sub', category: 'Unknown' },
49 | { name: 'sup', category: 'Unknown' },
50 | { name: 'sub', category: 'Unknown' },
51 | { name: 'sup', category: 'Unknown' },
52 | { name: 'table', category: 'Display' },
53 | { name: 'button', category: 'Unknown' },
54 | { name: 'input', category: 'Unknown' },
55 | { name: 'optgroup', category: 'Unknown' },
56 | { name: 'select', category: 'Unknown' },
57 | { name: 'textarea', category: 'Unknown' },
58 | { name: 'button', category: 'Unknown' },
59 | { name: 'select', category: 'Unknown' },
60 | { name: '[type=button]', category: 'Variable' },
61 | { name: '[type=reset]', category: 'Variable' },
62 | { name: '[type=submit]', category: 'Variable' },
63 | { name: 'button', category: 'Unknown' },
64 | { prefixes: [''], name: '-moz-focusring', category: 'Unknown' },
65 | { prefixes: [''], name: '-moz-ui-invalid', category: 'Unknown' },
66 | { name: 'progress', category: 'Unknown' },
67 | {
68 | prefixes: ['', ''],
69 | name: '-webkit-inner-spin-button',
70 | category: 'Unknown',
71 | },
72 | {
73 | prefixes: ['', ''],
74 | name: '-webkit-outer-spin-button',
75 | category: 'Unknown',
76 | },
77 | { name: '[type=search]', category: 'Variable' },
78 | {
79 | prefixes: ['', ''],
80 | name: '-webkit-search-decoration',
81 | category: 'Unknown',
82 | },
83 | {
84 | prefixes: ['', ''],
85 | name: '-webkit-file-upload-button',
86 | category: 'Unknown',
87 | },
88 | { name: 'summary', category: 'Unknown' },
89 | { name: 'blockquote', category: 'Unknown' },
90 | { name: 'dd', category: 'Unknown' },
91 | { name: 'dl', category: 'Unknown' },
92 | { name: 'figure', category: 'Unknown' },
93 | { name: 'h1', category: 'Unknown' },
94 | { name: 'h2', category: 'Unknown' },
95 | { name: 'h3', category: 'Unknown' },
96 | { name: 'h4', category: 'Unknown' },
97 | { name: 'h5', category: 'Unknown' },
98 | { name: 'h6', category: 'Unknown' },
99 | { name: 'hr', category: 'Unknown' },
100 | { name: 'p', category: 'Unknown' },
101 | { name: 'pre', category: 'Unknown' },
102 | { name: 'fieldset', category: 'Unknown' },
103 | { name: 'fieldset', category: 'Unknown' },
104 | { name: 'legend', category: 'Unknown' },
105 | { name: 'menu', category: 'Unknown' },
106 | { name: 'ol', category: 'Unknown' },
107 | { name: 'ul', category: 'Unknown' },
108 | { name: 'dialog', category: 'Unknown' },
109 | { name: 'textarea', category: 'Unknown' },
110 | {
111 | prefixes: ['input', ''],
112 | name: '-moz-placeholder',
113 | category: 'Unknown',
114 | },
115 | {
116 | prefixes: ['textarea', ''],
117 | name: '-moz-placeholder',
118 | category: 'Unknown',
119 | },
120 | { prefixes: ['input', ''], name: 'placeholder', category: 'Unknown' },
121 | { prefixes: ['textarea', ''], name: 'placeholder', category: 'Unknown' },
122 | { name: '[role=button]', category: 'Variable' },
123 | { name: 'button', category: 'Unknown' },
124 | { prefixes: [''], name: 'disabled', category: 'Unknown' },
125 | { name: 'audio', category: 'Unknown' },
126 | { name: 'canvas', category: 'Unknown' },
127 | { name: 'embed', category: 'Unknown' },
128 | { name: 'iframe', category: 'Unknown' },
129 | { name: 'img', category: 'Unknown' },
130 | { name: 'object', category: 'Unknown' },
131 | { name: 'svg', category: 'Unknown' },
132 | { name: 'video', category: 'Unknown' },
133 | { name: 'img', category: 'Unknown' },
134 | { name: 'video', category: 'Unknown' },
135 | { name: '[hidden]', category: 'Variable' },
136 | { name: '*', category: 'Unknown' },
137 | { prefixes: ['', ''], name: 'backdrop', category: 'Unknown' },
138 | { prefixes: [''], name: 'after', category: 'Unknown' },
139 | { prefixes: [''], name: 'before', category: 'Unknown' },
140 | { name: 'container', category: 'Unknown' },
141 | { category: '@media', name: '@media (min-width:640px)' },
142 | { category: '@media', name: '@media (min-width:768px)' },
143 | { category: '@media', name: '@media (min-width:1024px)' },
144 | { category: '@media', name: '@media (min-width:1280px)' },
145 | { category: '@media', name: '@media (min-width:1536px)' },
146 | { name: 'mx-auto', category: 'Margin' },
147 | { name: 'my-2', category: 'Margin' },
148 | { name: 'my-8', category: 'Margin' },
149 | { name: 'mb-2', category: 'Margin' },
150 | { name: 'mb-4', category: 'Margin' },
151 | { name: 'mb-8', category: 'Margin' },
152 | { name: 'mr-2', category: 'Margin' },
153 | { name: 'block', category: 'Display' },
154 | { name: 'flex', category: 'Display' },
155 | { name: 'inline-flex', category: 'Display' },
156 | { name: 'table', category: 'Display' },
157 | { name: 'grid', category: 'Display' },
158 | { name: 'hidden', category: 'Display' },
159 | { name: 'h-12', category: 'Size' },
160 | { name: 'h-16', category: 'Size' },
161 | { name: 'w-12', category: 'Size' },
162 | { name: 'w-16', category: 'Size' },
163 | { name: 'w-auto', category: 'Size' },
164 | { name: '-skew-x-12', category: 'Transform' },
165 | { name: '-skew-x-12', category: 'Transform' },
166 | { name: 'skew-x-12', category: 'Transform' },
167 | { name: 'skew-x-12', category: 'Transform' },
168 | { name: 'transform', category: 'Transform' },
169 | { name: 'cursor-default', category: 'Cursor' },
170 | { name: 'cursor-pointer', category: 'Cursor' },
171 | { name: 'grid-cols-3', category: 'Grid' },
172 | { name: 'grid-cols-5', category: 'Grid' },
173 | { name: 'flex-col', category: 'Flex' },
174 | { name: 'flex-wrap', category: 'Flex' },
175 | { name: 'items-end', category: 'Align Items' },
176 | { name: 'items-center', category: 'Align Items' },
177 | { name: 'justify-start', category: 'Justify Content' },
178 | { name: 'justify-between', category: 'Justify Content' },
179 | { name: 'gap-10', category: 'Gap' },
180 | { name: 'gap-2', category: 'Gap' },
181 | { name: 'gap-4', category: 'Gap' },
182 | { name: 'gap-5', category: 'Gap' },
183 | { name: 'rounded', category: 'Unknown' },
184 | { name: 'rounded-full', category: 'Border Radius' },
185 | { name: 'rounded-lg', category: 'Border Radius' },
186 | { name: 'rounded-md', category: 'Border Radius' },
187 | { name: 'border', category: 'Unknown' },
188 | { name: 'border-r-2', category: 'Border' },
189 | { name: 'border-gray-600', category: 'Border' },
190 | { name: 'bg-black\\/60', category: 'Background' },
191 | { name: 'bg-gray-100', category: 'Background' },
192 | { name: 'bg-gray-600', category: 'Background' },
193 | { name: 'bg-white', category: 'Background' },
194 | { name: 'p-2', category: 'Padding' },
195 | { name: 'p-4', category: 'Padding' },
196 | { name: 'p-5', category: 'Padding' },
197 | { name: 'px-16', category: 'Padding' },
198 | { name: 'px-2', category: 'Padding' },
199 | { name: 'px-2\\.5', category: 'Padding' },
200 | { name: 'px-6', category: 'Padding' },
201 | { name: 'px-8', category: 'Padding' },
202 | { name: 'py-0', category: 'Padding' },
203 | { name: 'py-0\\.5', category: 'Padding' },
204 | { name: 'py-2', category: 'Padding' },
205 | { name: 'py-4', category: 'Padding' },
206 | { name: 'pb-2', category: 'Padding' },
207 | { name: 'pr-2', category: 'Padding' },
208 | { name: 'pt-4', category: 'Padding' },
209 | { name: 'text-2xl', category: 'Text' },
210 | { name: 'text-6xl', category: 'Text' },
211 | { name: 'text-base', category: 'Text' },
212 | { name: 'text-lg', category: 'Text' },
213 | { name: 'text-lg', category: 'Text' },
214 | { name: 'text-xl', category: 'Text' },
215 | { name: 'text-xl', category: 'Text' },
216 | { name: 'font-bold', category: 'Font' },
217 | { name: 'font-extralight', category: 'Font' },
218 | { name: 'font-medium', category: 'Font' },
219 | { name: 'font-semibold', category: 'Font' },
220 | { name: 'leading-none', category: 'Line Height' },
221 | { name: 'tracking-tight', category: 'Letter Spacing' },
222 | { name: 'text-\\[\\#ff0000\\]', category: 'Text' },
223 | { name: 'text-gray-400', category: 'Text' },
224 | { name: 'text-green-500', category: 'Text' },
225 | { name: 'text-white', category: 'Text' },
226 | { name: 'shadow', category: 'Unknown' },
227 | { name: 'shadow', category: 'Unknown' },
228 | { name: 'shadow-sm', category: 'Box Shadow' },
229 | { name: 'shadow-sm', category: 'Box Shadow' },
230 | { name: 'outline-none', category: 'Outline' },
231 | { name: 'ring', category: 'Unknown' },
232 | { name: 'ring', category: 'Unknown' },
233 | { name: 'ring-2', category: 'Ring' },
234 | { name: 'ring-2', category: 'Ring' },
235 | { name: 'ring-offset-2', category: 'Ring' },
236 | { name: 'ring-offset-current', category: 'Ring' },
237 | { name: 'filter', category: 'Unknown' },
238 | { name: 'transition', category: 'Unknown' },
239 | { name: 'transition-colors', category: 'Animation' },
240 | { name: 'transition-shadow', category: 'Animation' },
241 | { name: 'duration-500', category: 'Animation' },
242 | { name: 'ease-in-out', category: 'Animation' },
243 | {
244 | prefixes: ['hover\\', 'shadow-md'],
245 | name: 'hover',
246 | category: 'Unknown',
247 | },
248 | {
249 | prefixes: ['focus\\', 'outline-none'],
250 | name: 'focus',
251 | category: 'Unknown',
252 | },
253 | { prefixes: ['focus\\', 'ring-2'], name: 'focus', category: 'Unknown' },
254 | {
255 | prefixes: ['group', 'hover .group-hover\\'],
256 | name: 'bg-black\\/80',
257 | category: 'Background',
258 | },
259 | ],
260 | };
261 | const error = false;
262 |
263 | return (
264 |
265 |
266 |
267 | {error && (
268 | Error Loading data. Try again.
269 | )}
270 | {!data && Loading data. Please wait.
}
271 | {!error && data && (
272 | <>
273 |
274 |
275 |
276 | >
277 | )}
278 |
279 |
280 | );
281 | }
282 |
--------------------------------------------------------------------------------
/app/src/utils/fetcher.ts:
--------------------------------------------------------------------------------
1 | export const fetcher = (url: string) => fetch(url).then(res => res.json());
2 |
--------------------------------------------------------------------------------
/app/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | 'use strict';
4 |
5 | require('./dist/index')
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tailwindcss-analysis",
3 | "version": "0.4.0",
4 | "description": "Analyse the TailwindCSS classes used in your application",
5 | "license": "MIT",
6 | "main": "dist/index.js",
7 | "typings": "dist/index.d.ts",
8 | "type": "commonjs",
9 | "files": [
10 | "dist",
11 | "app/dist/**/*"
12 | ],
13 | "engines": {
14 | "node": ">=16"
15 | },
16 | "bin": {
17 | "tailwindcss-analysis": "index.js"
18 | },
19 | "scripts": {
20 | "start": "tsup src/index.ts --watch",
21 | "build": "tsup src/index.ts --minify terser --format esm,cjs --dts",
22 | "prepare": "pnpm run build && pnpm run build:app",
23 | "size": "size-limit",
24 | "analyze": "size-limit --why",
25 | "dev:app": "vite",
26 | "build:app": "tsc && vite build",
27 | "serve:app": "vite preview"
28 | },
29 | "husky": {
30 | "hooks": {
31 | "pre-commit": ""
32 | }
33 | },
34 | "prettier": {
35 | "printWidth": 80,
36 | "semi": true,
37 | "singleQuote": true,
38 | "trailingComma": "es5"
39 | },
40 | "keywords": [
41 | "analysis",
42 | "tailwindcss"
43 | ],
44 | "author": "Varun A P",
45 | "module": "dist/index.mjs",
46 | "size-limit": [
47 | {
48 | "path": "dist/index.js",
49 | "limit": "10 KB"
50 | },
51 | {
52 | "path": "dist/index.mjs",
53 | "limit": "10 KB"
54 | }
55 | ],
56 | "devDependencies": {
57 | "@size-limit/file": "^11.2.0",
58 | "@tailwindcss/vite": "^4.1.7",
59 | "@types/connect": "^3.4.38",
60 | "@types/cross-spawn": "^6.0.6",
61 | "@types/fs-extra": "^11.0.4",
62 | "@types/react": "^19.1.6",
63 | "@types/react-dom": "^19.1.5",
64 | "@vitejs/plugin-react": "^4.5.0",
65 | "autoprefixer": "^10.4.21",
66 | "husky": "^9.1.7",
67 | "postcss": "^8.5.3",
68 | "size-limit": "^11.2.0",
69 | "size-limit-node-esbuild": "^0.4.0",
70 | "terser": "^5.40.0",
71 | "tslib": "^2.8.1",
72 | "tsup": "^8.5.0",
73 | "typescript": "^5.8.3",
74 | "vite": "^6.3.5"
75 | },
76 | "dependencies": {
77 | "analyze-css": "^2.4.5",
78 | "cac": "^6.7.14",
79 | "connect": "^3.7.0",
80 | "cross-spawn": "^7.0.6",
81 | "cssjson": "^2.1.3",
82 | "fs-extra": "^11.3.0",
83 | "get-port": "^7.1.0",
84 | "open": "^10.1.2",
85 | "react": "^19.1.0",
86 | "react-dom": "^19.1.0",
87 | "sirv": "^3.0.1",
88 | "swr": "^2.3.3",
89 | "tailwindcss": "^4.1.7",
90 | "tmp": "^0.2.3"
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | analyze-css:
12 | specifier: ^2.4.5
13 | version: 2.4.5
14 | cac:
15 | specifier: ^6.7.14
16 | version: 6.7.14
17 | connect:
18 | specifier: ^3.7.0
19 | version: 3.7.0
20 | cross-spawn:
21 | specifier: ^7.0.6
22 | version: 7.0.6
23 | cssjson:
24 | specifier: ^2.1.3
25 | version: 2.1.3
26 | fs-extra:
27 | specifier: ^11.3.0
28 | version: 11.3.0
29 | get-port:
30 | specifier: ^7.1.0
31 | version: 7.1.0
32 | open:
33 | specifier: ^10.1.2
34 | version: 10.1.2
35 | react:
36 | specifier: ^19.1.0
37 | version: 19.1.0
38 | react-dom:
39 | specifier: ^19.1.0
40 | version: 19.1.0(react@19.1.0)
41 | sirv:
42 | specifier: ^3.0.1
43 | version: 3.0.1
44 | swr:
45 | specifier: ^2.3.3
46 | version: 2.3.3(react@19.1.0)
47 | tailwindcss:
48 | specifier: ^4.1.7
49 | version: 4.1.7
50 | tmp:
51 | specifier: ^0.2.3
52 | version: 0.2.3
53 | devDependencies:
54 | '@size-limit/file':
55 | specifier: ^11.2.0
56 | version: 11.2.0(size-limit@11.2.0)
57 | '@tailwindcss/vite':
58 | specifier: ^4.1.7
59 | version: 4.1.7(vite@6.3.5(@types/node@22.15.23)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(terser@5.40.0))
60 | '@types/connect':
61 | specifier: ^3.4.38
62 | version: 3.4.38
63 | '@types/cross-spawn':
64 | specifier: ^6.0.6
65 | version: 6.0.6
66 | '@types/fs-extra':
67 | specifier: ^11.0.4
68 | version: 11.0.4
69 | '@types/react':
70 | specifier: ^19.1.6
71 | version: 19.1.6
72 | '@types/react-dom':
73 | specifier: ^19.1.5
74 | version: 19.1.5(@types/react@19.1.6)
75 | '@vitejs/plugin-react':
76 | specifier: ^4.5.0
77 | version: 4.5.0(vite@6.3.5(@types/node@22.15.23)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(terser@5.40.0))
78 | autoprefixer:
79 | specifier: ^10.4.21
80 | version: 10.4.21(postcss@8.5.3)
81 | husky:
82 | specifier: ^9.1.7
83 | version: 9.1.7
84 | postcss:
85 | specifier: ^8.5.3
86 | version: 8.5.3
87 | size-limit:
88 | specifier: ^11.2.0
89 | version: 11.2.0
90 | size-limit-node-esbuild:
91 | specifier: ^0.4.0
92 | version: 0.4.0
93 | terser:
94 | specifier: ^5.40.0
95 | version: 5.40.0
96 | tslib:
97 | specifier: ^2.8.1
98 | version: 2.8.1
99 | tsup:
100 | specifier: ^8.5.0
101 | version: 8.5.0(jiti@2.4.2)(postcss@8.5.3)(typescript@5.8.3)
102 | typescript:
103 | specifier: ^5.8.3
104 | version: 5.8.3
105 | vite:
106 | specifier: ^6.3.5
107 | version: 6.3.5(@types/node@22.15.23)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(terser@5.40.0)
108 |
109 | packages:
110 |
111 | '@adobe/css-tools@4.4.3':
112 | resolution: {integrity: sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==}
113 |
114 | '@ampproject/remapping@2.3.0':
115 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
116 | engines: {node: '>=6.0.0'}
117 |
118 | '@babel/code-frame@7.27.1':
119 | resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
120 | engines: {node: '>=6.9.0'}
121 |
122 | '@babel/compat-data@7.27.3':
123 | resolution: {integrity: sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==}
124 | engines: {node: '>=6.9.0'}
125 |
126 | '@babel/core@7.27.3':
127 | resolution: {integrity: sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==}
128 | engines: {node: '>=6.9.0'}
129 |
130 | '@babel/generator@7.27.3':
131 | resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==}
132 | engines: {node: '>=6.9.0'}
133 |
134 | '@babel/helper-compilation-targets@7.27.2':
135 | resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
136 | engines: {node: '>=6.9.0'}
137 |
138 | '@babel/helper-module-imports@7.27.1':
139 | resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
140 | engines: {node: '>=6.9.0'}
141 |
142 | '@babel/helper-module-transforms@7.27.3':
143 | resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
144 | engines: {node: '>=6.9.0'}
145 | peerDependencies:
146 | '@babel/core': ^7.0.0
147 |
148 | '@babel/helper-plugin-utils@7.27.1':
149 | resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
150 | engines: {node: '>=6.9.0'}
151 |
152 | '@babel/helper-string-parser@7.27.1':
153 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
154 | engines: {node: '>=6.9.0'}
155 |
156 | '@babel/helper-validator-identifier@7.27.1':
157 | resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
158 | engines: {node: '>=6.9.0'}
159 |
160 | '@babel/helper-validator-option@7.27.1':
161 | resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
162 | engines: {node: '>=6.9.0'}
163 |
164 | '@babel/helpers@7.27.3':
165 | resolution: {integrity: sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==}
166 | engines: {node: '>=6.9.0'}
167 |
168 | '@babel/parser@7.27.3':
169 | resolution: {integrity: sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==}
170 | engines: {node: '>=6.0.0'}
171 | hasBin: true
172 |
173 | '@babel/plugin-transform-react-jsx-self@7.27.1':
174 | resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
175 | engines: {node: '>=6.9.0'}
176 | peerDependencies:
177 | '@babel/core': ^7.0.0-0
178 |
179 | '@babel/plugin-transform-react-jsx-source@7.27.1':
180 | resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
181 | engines: {node: '>=6.9.0'}
182 | peerDependencies:
183 | '@babel/core': ^7.0.0-0
184 |
185 | '@babel/template@7.27.2':
186 | resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
187 | engines: {node: '>=6.9.0'}
188 |
189 | '@babel/traverse@7.27.3':
190 | resolution: {integrity: sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==}
191 | engines: {node: '>=6.9.0'}
192 |
193 | '@babel/types@7.27.3':
194 | resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==}
195 | engines: {node: '>=6.9.0'}
196 |
197 | '@esbuild/aix-ppc64@0.25.5':
198 | resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
199 | engines: {node: '>=18'}
200 | cpu: [ppc64]
201 | os: [aix]
202 |
203 | '@esbuild/android-arm64@0.25.5':
204 | resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
205 | engines: {node: '>=18'}
206 | cpu: [arm64]
207 | os: [android]
208 |
209 | '@esbuild/android-arm@0.25.5':
210 | resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
211 | engines: {node: '>=18'}
212 | cpu: [arm]
213 | os: [android]
214 |
215 | '@esbuild/android-x64@0.25.5':
216 | resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
217 | engines: {node: '>=18'}
218 | cpu: [x64]
219 | os: [android]
220 |
221 | '@esbuild/darwin-arm64@0.25.5':
222 | resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
223 | engines: {node: '>=18'}
224 | cpu: [arm64]
225 | os: [darwin]
226 |
227 | '@esbuild/darwin-x64@0.25.5':
228 | resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
229 | engines: {node: '>=18'}
230 | cpu: [x64]
231 | os: [darwin]
232 |
233 | '@esbuild/freebsd-arm64@0.25.5':
234 | resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
235 | engines: {node: '>=18'}
236 | cpu: [arm64]
237 | os: [freebsd]
238 |
239 | '@esbuild/freebsd-x64@0.25.5':
240 | resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
241 | engines: {node: '>=18'}
242 | cpu: [x64]
243 | os: [freebsd]
244 |
245 | '@esbuild/linux-arm64@0.25.5':
246 | resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
247 | engines: {node: '>=18'}
248 | cpu: [arm64]
249 | os: [linux]
250 |
251 | '@esbuild/linux-arm@0.25.5':
252 | resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
253 | engines: {node: '>=18'}
254 | cpu: [arm]
255 | os: [linux]
256 |
257 | '@esbuild/linux-ia32@0.25.5':
258 | resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
259 | engines: {node: '>=18'}
260 | cpu: [ia32]
261 | os: [linux]
262 |
263 | '@esbuild/linux-loong64@0.25.5':
264 | resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
265 | engines: {node: '>=18'}
266 | cpu: [loong64]
267 | os: [linux]
268 |
269 | '@esbuild/linux-mips64el@0.25.5':
270 | resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
271 | engines: {node: '>=18'}
272 | cpu: [mips64el]
273 | os: [linux]
274 |
275 | '@esbuild/linux-ppc64@0.25.5':
276 | resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
277 | engines: {node: '>=18'}
278 | cpu: [ppc64]
279 | os: [linux]
280 |
281 | '@esbuild/linux-riscv64@0.25.5':
282 | resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
283 | engines: {node: '>=18'}
284 | cpu: [riscv64]
285 | os: [linux]
286 |
287 | '@esbuild/linux-s390x@0.25.5':
288 | resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
289 | engines: {node: '>=18'}
290 | cpu: [s390x]
291 | os: [linux]
292 |
293 | '@esbuild/linux-x64@0.25.5':
294 | resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
295 | engines: {node: '>=18'}
296 | cpu: [x64]
297 | os: [linux]
298 |
299 | '@esbuild/netbsd-arm64@0.25.5':
300 | resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
301 | engines: {node: '>=18'}
302 | cpu: [arm64]
303 | os: [netbsd]
304 |
305 | '@esbuild/netbsd-x64@0.25.5':
306 | resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
307 | engines: {node: '>=18'}
308 | cpu: [x64]
309 | os: [netbsd]
310 |
311 | '@esbuild/openbsd-arm64@0.25.5':
312 | resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
313 | engines: {node: '>=18'}
314 | cpu: [arm64]
315 | os: [openbsd]
316 |
317 | '@esbuild/openbsd-x64@0.25.5':
318 | resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
319 | engines: {node: '>=18'}
320 | cpu: [x64]
321 | os: [openbsd]
322 |
323 | '@esbuild/sunos-x64@0.25.5':
324 | resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
325 | engines: {node: '>=18'}
326 | cpu: [x64]
327 | os: [sunos]
328 |
329 | '@esbuild/win32-arm64@0.25.5':
330 | resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
331 | engines: {node: '>=18'}
332 | cpu: [arm64]
333 | os: [win32]
334 |
335 | '@esbuild/win32-ia32@0.25.5':
336 | resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
337 | engines: {node: '>=18'}
338 | cpu: [ia32]
339 | os: [win32]
340 |
341 | '@esbuild/win32-x64@0.25.5':
342 | resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
343 | engines: {node: '>=18'}
344 | cpu: [x64]
345 | os: [win32]
346 |
347 | '@isaacs/cliui@8.0.2':
348 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
349 | engines: {node: '>=12'}
350 |
351 | '@isaacs/fs-minipass@4.0.1':
352 | resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
353 | engines: {node: '>=18.0.0'}
354 |
355 | '@jridgewell/gen-mapping@0.3.8':
356 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
357 | engines: {node: '>=6.0.0'}
358 |
359 | '@jridgewell/resolve-uri@3.1.2':
360 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
361 | engines: {node: '>=6.0.0'}
362 |
363 | '@jridgewell/set-array@1.2.1':
364 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
365 | engines: {node: '>=6.0.0'}
366 |
367 | '@jridgewell/source-map@0.3.6':
368 | resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
369 |
370 | '@jridgewell/sourcemap-codec@1.5.0':
371 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
372 |
373 | '@jridgewell/trace-mapping@0.3.25':
374 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
375 |
376 | '@parcel/watcher-android-arm64@2.5.1':
377 | resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
378 | engines: {node: '>= 10.0.0'}
379 | cpu: [arm64]
380 | os: [android]
381 |
382 | '@parcel/watcher-darwin-arm64@2.5.1':
383 | resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
384 | engines: {node: '>= 10.0.0'}
385 | cpu: [arm64]
386 | os: [darwin]
387 |
388 | '@parcel/watcher-darwin-x64@2.5.1':
389 | resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
390 | engines: {node: '>= 10.0.0'}
391 | cpu: [x64]
392 | os: [darwin]
393 |
394 | '@parcel/watcher-freebsd-x64@2.5.1':
395 | resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
396 | engines: {node: '>= 10.0.0'}
397 | cpu: [x64]
398 | os: [freebsd]
399 |
400 | '@parcel/watcher-linux-arm-glibc@2.5.1':
401 | resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
402 | engines: {node: '>= 10.0.0'}
403 | cpu: [arm]
404 | os: [linux]
405 |
406 | '@parcel/watcher-linux-arm-musl@2.5.1':
407 | resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
408 | engines: {node: '>= 10.0.0'}
409 | cpu: [arm]
410 | os: [linux]
411 |
412 | '@parcel/watcher-linux-arm64-glibc@2.5.1':
413 | resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
414 | engines: {node: '>= 10.0.0'}
415 | cpu: [arm64]
416 | os: [linux]
417 |
418 | '@parcel/watcher-linux-arm64-musl@2.5.1':
419 | resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
420 | engines: {node: '>= 10.0.0'}
421 | cpu: [arm64]
422 | os: [linux]
423 |
424 | '@parcel/watcher-linux-x64-glibc@2.5.1':
425 | resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
426 | engines: {node: '>= 10.0.0'}
427 | cpu: [x64]
428 | os: [linux]
429 |
430 | '@parcel/watcher-linux-x64-musl@2.5.1':
431 | resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
432 | engines: {node: '>= 10.0.0'}
433 | cpu: [x64]
434 | os: [linux]
435 |
436 | '@parcel/watcher-win32-arm64@2.5.1':
437 | resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
438 | engines: {node: '>= 10.0.0'}
439 | cpu: [arm64]
440 | os: [win32]
441 |
442 | '@parcel/watcher-win32-ia32@2.5.1':
443 | resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
444 | engines: {node: '>= 10.0.0'}
445 | cpu: [ia32]
446 | os: [win32]
447 |
448 | '@parcel/watcher-win32-x64@2.5.1':
449 | resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
450 | engines: {node: '>= 10.0.0'}
451 | cpu: [x64]
452 | os: [win32]
453 |
454 | '@parcel/watcher@2.5.1':
455 | resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
456 | engines: {node: '>= 10.0.0'}
457 |
458 | '@pkgjs/parseargs@0.11.0':
459 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
460 | engines: {node: '>=14'}
461 |
462 | '@polka/url@1.0.0-next.29':
463 | resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
464 |
465 | '@rolldown/pluginutils@1.0.0-beta.9':
466 | resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==}
467 |
468 | '@rollup/rollup-android-arm-eabi@4.41.1':
469 | resolution: {integrity: sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==}
470 | cpu: [arm]
471 | os: [android]
472 |
473 | '@rollup/rollup-android-arm64@4.41.1':
474 | resolution: {integrity: sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==}
475 | cpu: [arm64]
476 | os: [android]
477 |
478 | '@rollup/rollup-darwin-arm64@4.41.1':
479 | resolution: {integrity: sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==}
480 | cpu: [arm64]
481 | os: [darwin]
482 |
483 | '@rollup/rollup-darwin-x64@4.41.1':
484 | resolution: {integrity: sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==}
485 | cpu: [x64]
486 | os: [darwin]
487 |
488 | '@rollup/rollup-freebsd-arm64@4.41.1':
489 | resolution: {integrity: sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==}
490 | cpu: [arm64]
491 | os: [freebsd]
492 |
493 | '@rollup/rollup-freebsd-x64@4.41.1':
494 | resolution: {integrity: sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==}
495 | cpu: [x64]
496 | os: [freebsd]
497 |
498 | '@rollup/rollup-linux-arm-gnueabihf@4.41.1':
499 | resolution: {integrity: sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==}
500 | cpu: [arm]
501 | os: [linux]
502 |
503 | '@rollup/rollup-linux-arm-musleabihf@4.41.1':
504 | resolution: {integrity: sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==}
505 | cpu: [arm]
506 | os: [linux]
507 |
508 | '@rollup/rollup-linux-arm64-gnu@4.41.1':
509 | resolution: {integrity: sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==}
510 | cpu: [arm64]
511 | os: [linux]
512 |
513 | '@rollup/rollup-linux-arm64-musl@4.41.1':
514 | resolution: {integrity: sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==}
515 | cpu: [arm64]
516 | os: [linux]
517 |
518 | '@rollup/rollup-linux-loongarch64-gnu@4.41.1':
519 | resolution: {integrity: sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==}
520 | cpu: [loong64]
521 | os: [linux]
522 |
523 | '@rollup/rollup-linux-powerpc64le-gnu@4.41.1':
524 | resolution: {integrity: sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==}
525 | cpu: [ppc64]
526 | os: [linux]
527 |
528 | '@rollup/rollup-linux-riscv64-gnu@4.41.1':
529 | resolution: {integrity: sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==}
530 | cpu: [riscv64]
531 | os: [linux]
532 |
533 | '@rollup/rollup-linux-riscv64-musl@4.41.1':
534 | resolution: {integrity: sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==}
535 | cpu: [riscv64]
536 | os: [linux]
537 |
538 | '@rollup/rollup-linux-s390x-gnu@4.41.1':
539 | resolution: {integrity: sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==}
540 | cpu: [s390x]
541 | os: [linux]
542 |
543 | '@rollup/rollup-linux-x64-gnu@4.41.1':
544 | resolution: {integrity: sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==}
545 | cpu: [x64]
546 | os: [linux]
547 |
548 | '@rollup/rollup-linux-x64-musl@4.41.1':
549 | resolution: {integrity: sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==}
550 | cpu: [x64]
551 | os: [linux]
552 |
553 | '@rollup/rollup-win32-arm64-msvc@4.41.1':
554 | resolution: {integrity: sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==}
555 | cpu: [arm64]
556 | os: [win32]
557 |
558 | '@rollup/rollup-win32-ia32-msvc@4.41.1':
559 | resolution: {integrity: sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==}
560 | cpu: [ia32]
561 | os: [win32]
562 |
563 | '@rollup/rollup-win32-x64-msvc@4.41.1':
564 | resolution: {integrity: sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==}
565 | cpu: [x64]
566 | os: [win32]
567 |
568 | '@size-limit/file@11.2.0':
569 | resolution: {integrity: sha512-OZHE3putEkQ/fgzz3Tp/0hSmfVo3wyTpOJSRNm6AmcwX4Nm9YtTfbQQ/hZRwbBFR23S7x2Sd9EbqYzngKwbRoA==}
570 | engines: {node: ^18.0.0 || >=20.0.0}
571 | peerDependencies:
572 | size-limit: 11.2.0
573 |
574 | '@tailwindcss/node@4.1.7':
575 | resolution: {integrity: sha512-9rsOpdY9idRI2NH6CL4wORFY0+Q6fnx9XP9Ju+iq/0wJwGD5IByIgFmwVbyy4ymuyprj8Qh4ErxMKTUL4uNh3g==}
576 |
577 | '@tailwindcss/oxide-android-arm64@4.1.7':
578 | resolution: {integrity: sha512-IWA410JZ8fF7kACus6BrUwY2Z1t1hm0+ZWNEzykKmMNM09wQooOcN/VXr0p/WJdtHZ90PvJf2AIBS/Ceqx1emg==}
579 | engines: {node: '>= 10'}
580 | cpu: [arm64]
581 | os: [android]
582 |
583 | '@tailwindcss/oxide-darwin-arm64@4.1.7':
584 | resolution: {integrity: sha512-81jUw9To7fimGGkuJ2W5h3/oGonTOZKZ8C2ghm/TTxbwvfSiFSDPd6/A/KE2N7Jp4mv3Ps9OFqg2fEKgZFfsvg==}
585 | engines: {node: '>= 10'}
586 | cpu: [arm64]
587 | os: [darwin]
588 |
589 | '@tailwindcss/oxide-darwin-x64@4.1.7':
590 | resolution: {integrity: sha512-q77rWjEyGHV4PdDBtrzO0tgBBPlQWKY7wZK0cUok/HaGgbNKecegNxCGikuPJn5wFAlIywC3v+WMBt0PEBtwGw==}
591 | engines: {node: '>= 10'}
592 | cpu: [x64]
593 | os: [darwin]
594 |
595 | '@tailwindcss/oxide-freebsd-x64@4.1.7':
596 | resolution: {integrity: sha512-RfmdbbK6G6ptgF4qqbzoxmH+PKfP4KSVs7SRlTwcbRgBwezJkAO3Qta/7gDy10Q2DcUVkKxFLXUQO6J3CRvBGw==}
597 | engines: {node: '>= 10'}
598 | cpu: [x64]
599 | os: [freebsd]
600 |
601 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7':
602 | resolution: {integrity: sha512-OZqsGvpwOa13lVd1z6JVwQXadEobmesxQ4AxhrwRiPuE04quvZHWn/LnihMg7/XkN+dTioXp/VMu/p6A5eZP3g==}
603 | engines: {node: '>= 10'}
604 | cpu: [arm]
605 | os: [linux]
606 |
607 | '@tailwindcss/oxide-linux-arm64-gnu@4.1.7':
608 | resolution: {integrity: sha512-voMvBTnJSfKecJxGkoeAyW/2XRToLZ227LxswLAwKY7YslG/Xkw9/tJNH+3IVh5bdYzYE7DfiaPbRkSHFxY1xA==}
609 | engines: {node: '>= 10'}
610 | cpu: [arm64]
611 | os: [linux]
612 |
613 | '@tailwindcss/oxide-linux-arm64-musl@4.1.7':
614 | resolution: {integrity: sha512-PjGuNNmJeKHnP58M7XyjJyla8LPo+RmwHQpBI+W/OxqrwojyuCQ+GUtygu7jUqTEexejZHr/z3nBc/gTiXBj4A==}
615 | engines: {node: '>= 10'}
616 | cpu: [arm64]
617 | os: [linux]
618 |
619 | '@tailwindcss/oxide-linux-x64-gnu@4.1.7':
620 | resolution: {integrity: sha512-HMs+Va+ZR3gC3mLZE00gXxtBo3JoSQxtu9lobbZd+DmfkIxR54NO7Z+UQNPsa0P/ITn1TevtFxXTpsRU7qEvWg==}
621 | engines: {node: '>= 10'}
622 | cpu: [x64]
623 | os: [linux]
624 |
625 | '@tailwindcss/oxide-linux-x64-musl@4.1.7':
626 | resolution: {integrity: sha512-MHZ6jyNlutdHH8rd+YTdr3QbXrHXqwIhHw9e7yXEBcQdluGwhpQY2Eku8UZK6ReLaWtQ4gijIv5QoM5eE+qlsA==}
627 | engines: {node: '>= 10'}
628 | cpu: [x64]
629 | os: [linux]
630 |
631 | '@tailwindcss/oxide-wasm32-wasi@4.1.7':
632 | resolution: {integrity: sha512-ANaSKt74ZRzE2TvJmUcbFQ8zS201cIPxUDm5qez5rLEwWkie2SkGtA4P+GPTj+u8N6JbPrC8MtY8RmJA35Oo+A==}
633 | engines: {node: '>=14.0.0'}
634 | cpu: [wasm32]
635 | bundledDependencies:
636 | - '@napi-rs/wasm-runtime'
637 | - '@emnapi/core'
638 | - '@emnapi/runtime'
639 | - '@tybys/wasm-util'
640 | - '@emnapi/wasi-threads'
641 | - tslib
642 |
643 | '@tailwindcss/oxide-win32-arm64-msvc@4.1.7':
644 | resolution: {integrity: sha512-HUiSiXQ9gLJBAPCMVRk2RT1ZrBjto7WvqsPBwUrNK2BcdSxMnk19h4pjZjI7zgPhDxlAbJSumTC4ljeA9y0tEw==}
645 | engines: {node: '>= 10'}
646 | cpu: [arm64]
647 | os: [win32]
648 |
649 | '@tailwindcss/oxide-win32-x64-msvc@4.1.7':
650 | resolution: {integrity: sha512-rYHGmvoHiLJ8hWucSfSOEmdCBIGZIq7SpkPRSqLsH2Ab2YUNgKeAPT1Fi2cx3+hnYOrAb0jp9cRyode3bBW4mQ==}
651 | engines: {node: '>= 10'}
652 | cpu: [x64]
653 | os: [win32]
654 |
655 | '@tailwindcss/oxide@4.1.7':
656 | resolution: {integrity: sha512-5SF95Ctm9DFiUyjUPnDGkoKItPX/k+xifcQhcqX5RA85m50jw1pT/KzjdvlqxRja45Y52nR4MR9fD1JYd7f8NQ==}
657 | engines: {node: '>= 10'}
658 |
659 | '@tailwindcss/vite@4.1.7':
660 | resolution: {integrity: sha512-tYa2fO3zDe41I7WqijyVbRd8oWT0aEID1Eokz5hMT6wShLIHj3yvwj9XbfuloHP9glZ6H+aG2AN/+ZrxJ1Y5RQ==}
661 | peerDependencies:
662 | vite: ^5.2.0 || ^6
663 |
664 | '@types/babel__core@7.20.5':
665 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
666 |
667 | '@types/babel__generator@7.27.0':
668 | resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
669 |
670 | '@types/babel__template@7.4.4':
671 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
672 |
673 | '@types/babel__traverse@7.20.7':
674 | resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
675 |
676 | '@types/connect@3.4.38':
677 | resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
678 |
679 | '@types/cross-spawn@6.0.6':
680 | resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==}
681 |
682 | '@types/estree@1.0.7':
683 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
684 |
685 | '@types/fs-extra@11.0.4':
686 | resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
687 |
688 | '@types/jsonfile@6.1.4':
689 | resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
690 |
691 | '@types/node@22.15.23':
692 | resolution: {integrity: sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==}
693 |
694 | '@types/react-dom@19.1.5':
695 | resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==}
696 | peerDependencies:
697 | '@types/react': ^19.0.0
698 |
699 | '@types/react@19.1.6':
700 | resolution: {integrity: sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==}
701 |
702 | '@vitejs/plugin-react@4.5.0':
703 | resolution: {integrity: sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==}
704 | engines: {node: ^14.18.0 || >=16.0.0}
705 | peerDependencies:
706 | vite: ^4.2.0 || ^5.0.0 || ^6.0.0
707 |
708 | acorn@8.14.1:
709 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
710 | engines: {node: '>=0.4.0'}
711 | hasBin: true
712 |
713 | agent-base@7.1.3:
714 | resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
715 | engines: {node: '>= 14'}
716 |
717 | analyze-css@2.4.5:
718 | resolution: {integrity: sha512-Y74rsPkzt6kaIjm78MpemEOs1EgXB3SU36nwZVUMdXGZsQwhaFgNsE1QHNr3nh1Nx9e8T2RSA/vr+vaQVJXgUg==}
719 | engines: {node: '>18'}
720 | hasBin: true
721 |
722 | ansi-regex@5.0.1:
723 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
724 | engines: {node: '>=8'}
725 |
726 | ansi-regex@6.1.0:
727 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
728 | engines: {node: '>=12'}
729 |
730 | ansi-styles@4.3.0:
731 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
732 | engines: {node: '>=8'}
733 |
734 | ansi-styles@6.2.1:
735 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
736 | engines: {node: '>=12'}
737 |
738 | any-promise@1.3.0:
739 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
740 |
741 | autoprefixer@10.4.21:
742 | resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
743 | engines: {node: ^10 || ^12 || >=14}
744 | hasBin: true
745 | peerDependencies:
746 | postcss: ^8.1.0
747 |
748 | balanced-match@1.0.2:
749 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
750 |
751 | brace-expansion@1.1.11:
752 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
753 |
754 | brace-expansion@2.0.1:
755 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
756 |
757 | braces@3.0.3:
758 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
759 | engines: {node: '>=8'}
760 |
761 | browserslist@4.24.5:
762 | resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==}
763 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
764 | hasBin: true
765 |
766 | buffer-from@1.1.2:
767 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
768 |
769 | bundle-name@4.1.0:
770 | resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
771 | engines: {node: '>=18'}
772 |
773 | bundle-require@5.1.0:
774 | resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
775 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
776 | peerDependencies:
777 | esbuild: '>=0.18'
778 |
779 | bytes-iec@3.1.1:
780 | resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==}
781 | engines: {node: '>= 0.8'}
782 |
783 | cac@6.7.14:
784 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
785 | engines: {node: '>=8'}
786 |
787 | caniuse-lite@1.0.30001718:
788 | resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==}
789 |
790 | chokidar@4.0.3:
791 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
792 | engines: {node: '>= 14.16.0'}
793 |
794 | chownr@3.0.0:
795 | resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
796 | engines: {node: '>=18'}
797 |
798 | cli@1.0.1:
799 | resolution: {integrity: sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==}
800 | engines: {node: '>=0.2.5'}
801 |
802 | color-convert@2.0.1:
803 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
804 | engines: {node: '>=7.0.0'}
805 |
806 | color-name@1.1.4:
807 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
808 |
809 | commander@13.1.0:
810 | resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
811 | engines: {node: '>=18'}
812 |
813 | commander@2.20.3:
814 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
815 |
816 | commander@4.1.1:
817 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
818 | engines: {node: '>= 6'}
819 |
820 | concat-map@0.0.1:
821 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
822 |
823 | confbox@0.1.8:
824 | resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
825 |
826 | connect@3.7.0:
827 | resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==}
828 | engines: {node: '>= 0.10.0'}
829 |
830 | consola@3.4.2:
831 | resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
832 | engines: {node: ^14.18.0 || >=16.10.0}
833 |
834 | convert-source-map@2.0.0:
835 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
836 |
837 | cross-spawn@7.0.6:
838 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
839 | engines: {node: '>= 8'}
840 |
841 | css-shorthand-properties@1.1.2:
842 | resolution: {integrity: sha512-C2AugXIpRGQTxaCW0N7n5jD/p5irUmCrwl03TrnMFBHDbdq44CFWR2zO7rK9xPN4Eo3pUxC4vQzQgbIpzrD1PQ==}
843 |
844 | css-tree@2.3.1:
845 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
846 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
847 |
848 | css-what@6.1.0:
849 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
850 | engines: {node: '>= 6'}
851 |
852 | cssjson@2.1.3:
853 | resolution: {integrity: sha512-VKzsSbYW4gwfS6Fg+z1mEII+cvurP/Vr7G3cDLEkvR0tcQD20LpF/ljOOFVVT9XYkOFo4TQWRcB/mSmbrKsXxA==}
854 |
855 | csstype@3.1.3:
856 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
857 |
858 | data-uri-to-buffer@4.0.1:
859 | resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
860 | engines: {node: '>= 12'}
861 |
862 | debug@2.6.9:
863 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
864 | peerDependencies:
865 | supports-color: '*'
866 | peerDependenciesMeta:
867 | supports-color:
868 | optional: true
869 |
870 | debug@4.4.1:
871 | resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
872 | engines: {node: '>=6.0'}
873 | peerDependencies:
874 | supports-color: '*'
875 | peerDependenciesMeta:
876 | supports-color:
877 | optional: true
878 |
879 | default-browser-id@5.0.0:
880 | resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
881 | engines: {node: '>=18'}
882 |
883 | default-browser@5.2.1:
884 | resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
885 | engines: {node: '>=18'}
886 |
887 | define-lazy-prop@3.0.0:
888 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
889 | engines: {node: '>=12'}
890 |
891 | dequal@2.0.3:
892 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
893 | engines: {node: '>=6'}
894 |
895 | detect-libc@1.0.3:
896 | resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
897 | engines: {node: '>=0.10'}
898 | hasBin: true
899 |
900 | detect-libc@2.0.4:
901 | resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
902 | engines: {node: '>=8'}
903 |
904 | eastasianwidth@0.2.0:
905 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
906 |
907 | ee-first@1.1.1:
908 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
909 |
910 | electron-to-chromium@1.5.159:
911 | resolution: {integrity: sha512-CEvHptWAMV5p6GJ0Lq8aheyvVbfzVrv5mmidu1D3pidoVNkB3tTBsTMVtPJ+rzRK5oV229mCLz9Zj/hNvU8GBA==}
912 |
913 | emoji-regex@8.0.0:
914 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
915 |
916 | emoji-regex@9.2.2:
917 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
918 |
919 | encodeurl@1.0.2:
920 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
921 | engines: {node: '>= 0.8'}
922 |
923 | enhanced-resolve@5.18.1:
924 | resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
925 | engines: {node: '>=10.13.0'}
926 |
927 | esbuild@0.25.5:
928 | resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
929 | engines: {node: '>=18'}
930 | hasBin: true
931 |
932 | escalade@3.2.0:
933 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
934 | engines: {node: '>=6'}
935 |
936 | escape-html@1.0.3:
937 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
938 |
939 | exit@0.1.2:
940 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
941 | engines: {node: '>= 0.8.0'}
942 |
943 | fast-stats@0.0.7:
944 | resolution: {integrity: sha512-AEMvohEfd/pkvRSlJOUh6JlWjlBaIHNuL9hFz0bT/glLHbooj2+fV71TrVB3VebfYg1GLI3PnIcWH+T6gNH8HA==}
945 |
946 | fdir@6.4.5:
947 | resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==}
948 | peerDependencies:
949 | picomatch: ^3 || ^4
950 | peerDependenciesMeta:
951 | picomatch:
952 | optional: true
953 |
954 | fetch-blob@3.2.0:
955 | resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
956 | engines: {node: ^12.20 || >= 14.13}
957 |
958 | fill-range@7.1.1:
959 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
960 | engines: {node: '>=8'}
961 |
962 | finalhandler@1.1.2:
963 | resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
964 | engines: {node: '>= 0.8'}
965 |
966 | fix-dts-default-cjs-exports@1.0.1:
967 | resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==}
968 |
969 | foreground-child@3.3.1:
970 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
971 | engines: {node: '>=14'}
972 |
973 | formdata-polyfill@4.0.10:
974 | resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
975 | engines: {node: '>=12.20.0'}
976 |
977 | fraction.js@4.3.7:
978 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
979 |
980 | fs-extra@11.3.0:
981 | resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
982 | engines: {node: '>=14.14'}
983 |
984 | fs.realpath@1.0.0:
985 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
986 |
987 | fsevents@2.3.3:
988 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
989 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
990 | os: [darwin]
991 |
992 | gensync@1.0.0-beta.2:
993 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
994 | engines: {node: '>=6.9.0'}
995 |
996 | get-port@7.1.0:
997 | resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==}
998 | engines: {node: '>=16'}
999 |
1000 | glob@10.4.5:
1001 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
1002 | hasBin: true
1003 |
1004 | glob@11.0.2:
1005 | resolution: {integrity: sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==}
1006 | engines: {node: 20 || >=22}
1007 | hasBin: true
1008 |
1009 | glob@7.2.3:
1010 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1011 | deprecated: Glob versions prior to v9 are no longer supported
1012 |
1013 | globals@11.12.0:
1014 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1015 | engines: {node: '>=4'}
1016 |
1017 | graceful-fs@4.2.11:
1018 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1019 |
1020 | http-proxy-agent@7.0.2:
1021 | resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
1022 | engines: {node: '>= 14'}
1023 |
1024 | husky@9.1.7:
1025 | resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
1026 | engines: {node: '>=18'}
1027 | hasBin: true
1028 |
1029 | immutable@5.1.2:
1030 | resolution: {integrity: sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==}
1031 |
1032 | inflight@1.0.6:
1033 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1034 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
1035 |
1036 | inherits@2.0.4:
1037 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1038 |
1039 | is-docker@3.0.0:
1040 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
1041 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1042 | hasBin: true
1043 |
1044 | is-extglob@2.1.1:
1045 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1046 | engines: {node: '>=0.10.0'}
1047 |
1048 | is-fullwidth-code-point@3.0.0:
1049 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1050 | engines: {node: '>=8'}
1051 |
1052 | is-glob@4.0.3:
1053 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1054 | engines: {node: '>=0.10.0'}
1055 |
1056 | is-inside-container@1.0.0:
1057 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
1058 | engines: {node: '>=14.16'}
1059 | hasBin: true
1060 |
1061 | is-number@7.0.0:
1062 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1063 | engines: {node: '>=0.12.0'}
1064 |
1065 | is-wsl@3.1.0:
1066 | resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
1067 | engines: {node: '>=16'}
1068 |
1069 | isexe@2.0.0:
1070 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1071 |
1072 | jackspeak@3.4.3:
1073 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
1074 |
1075 | jackspeak@4.1.1:
1076 | resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
1077 | engines: {node: 20 || >=22}
1078 |
1079 | jiti@2.4.2:
1080 | resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
1081 | hasBin: true
1082 |
1083 | joycon@3.1.1:
1084 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
1085 | engines: {node: '>=10'}
1086 |
1087 | js-tokens@4.0.0:
1088 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1089 |
1090 | jsesc@3.1.0:
1091 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
1092 | engines: {node: '>=6'}
1093 | hasBin: true
1094 |
1095 | json5@2.2.3:
1096 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1097 | engines: {node: '>=6'}
1098 | hasBin: true
1099 |
1100 | jsonfile@6.1.0:
1101 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
1102 |
1103 | lightningcss-darwin-arm64@1.30.1:
1104 | resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
1105 | engines: {node: '>= 12.0.0'}
1106 | cpu: [arm64]
1107 | os: [darwin]
1108 |
1109 | lightningcss-darwin-x64@1.30.1:
1110 | resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
1111 | engines: {node: '>= 12.0.0'}
1112 | cpu: [x64]
1113 | os: [darwin]
1114 |
1115 | lightningcss-freebsd-x64@1.30.1:
1116 | resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
1117 | engines: {node: '>= 12.0.0'}
1118 | cpu: [x64]
1119 | os: [freebsd]
1120 |
1121 | lightningcss-linux-arm-gnueabihf@1.30.1:
1122 | resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
1123 | engines: {node: '>= 12.0.0'}
1124 | cpu: [arm]
1125 | os: [linux]
1126 |
1127 | lightningcss-linux-arm64-gnu@1.30.1:
1128 | resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
1129 | engines: {node: '>= 12.0.0'}
1130 | cpu: [arm64]
1131 | os: [linux]
1132 |
1133 | lightningcss-linux-arm64-musl@1.30.1:
1134 | resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
1135 | engines: {node: '>= 12.0.0'}
1136 | cpu: [arm64]
1137 | os: [linux]
1138 |
1139 | lightningcss-linux-x64-gnu@1.30.1:
1140 | resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
1141 | engines: {node: '>= 12.0.0'}
1142 | cpu: [x64]
1143 | os: [linux]
1144 |
1145 | lightningcss-linux-x64-musl@1.30.1:
1146 | resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
1147 | engines: {node: '>= 12.0.0'}
1148 | cpu: [x64]
1149 | os: [linux]
1150 |
1151 | lightningcss-win32-arm64-msvc@1.30.1:
1152 | resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
1153 | engines: {node: '>= 12.0.0'}
1154 | cpu: [arm64]
1155 | os: [win32]
1156 |
1157 | lightningcss-win32-x64-msvc@1.30.1:
1158 | resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
1159 | engines: {node: '>= 12.0.0'}
1160 | cpu: [x64]
1161 | os: [win32]
1162 |
1163 | lightningcss@1.30.1:
1164 | resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
1165 | engines: {node: '>= 12.0.0'}
1166 |
1167 | lilconfig@3.1.3:
1168 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
1169 | engines: {node: '>=14'}
1170 |
1171 | lines-and-columns@1.2.4:
1172 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1173 |
1174 | load-tsconfig@0.2.5:
1175 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
1176 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1177 |
1178 | lodash.sortby@4.7.0:
1179 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
1180 |
1181 | lru-cache@10.4.3:
1182 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
1183 |
1184 | lru-cache@11.1.0:
1185 | resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==}
1186 | engines: {node: 20 || >=22}
1187 |
1188 | lru-cache@5.1.1:
1189 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1190 |
1191 | magic-string@0.30.17:
1192 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
1193 |
1194 | mdn-data@2.0.30:
1195 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
1196 |
1197 | micromatch@4.0.8:
1198 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1199 | engines: {node: '>=8.6'}
1200 |
1201 | minimatch@10.0.1:
1202 | resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
1203 | engines: {node: 20 || >=22}
1204 |
1205 | minimatch@3.1.2:
1206 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1207 |
1208 | minimatch@9.0.5:
1209 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1210 | engines: {node: '>=16 || 14 >=14.17'}
1211 |
1212 | minipass@7.1.2:
1213 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1214 | engines: {node: '>=16 || 14 >=14.17'}
1215 |
1216 | minizlib@3.0.2:
1217 | resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==}
1218 | engines: {node: '>= 18'}
1219 |
1220 | mkdirp@3.0.1:
1221 | resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
1222 | engines: {node: '>=10'}
1223 | hasBin: true
1224 |
1225 | mlly@1.7.4:
1226 | resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
1227 |
1228 | mrmime@2.0.1:
1229 | resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
1230 | engines: {node: '>=10'}
1231 |
1232 | ms@2.0.0:
1233 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
1234 |
1235 | ms@2.1.3:
1236 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1237 |
1238 | mz@2.7.0:
1239 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
1240 |
1241 | nanoid@3.3.11:
1242 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
1243 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1244 | hasBin: true
1245 |
1246 | nanoid@5.1.5:
1247 | resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==}
1248 | engines: {node: ^18 || >=20}
1249 | hasBin: true
1250 |
1251 | nanospinner@1.2.2:
1252 | resolution: {integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==}
1253 |
1254 | node-addon-api@7.1.1:
1255 | resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
1256 |
1257 | node-domexception@1.0.0:
1258 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
1259 | engines: {node: '>=10.5.0'}
1260 | deprecated: Use your platform's native DOMException instead
1261 |
1262 | node-fetch@3.3.2:
1263 | resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
1264 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1265 |
1266 | node-releases@2.0.19:
1267 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1268 |
1269 | normalize-range@0.1.2:
1270 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
1271 | engines: {node: '>=0.10.0'}
1272 |
1273 | object-assign@4.1.1:
1274 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1275 | engines: {node: '>=0.10.0'}
1276 |
1277 | on-finished@2.3.0:
1278 | resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
1279 | engines: {node: '>= 0.8'}
1280 |
1281 | once@1.4.0:
1282 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1283 |
1284 | onecolor@4.1.0:
1285 | resolution: {integrity: sha512-kDUtnWdWlt5iWx85wrGZxMh8tB4058Bk1YyVpb+Zjl+2wLH/OvqIacbchJma0gjGXocwUTueLwMDVYKrbI+0zA==}
1286 | engines: {node: '>=0.4.8'}
1287 |
1288 | open@10.1.2:
1289 | resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==}
1290 | engines: {node: '>=18'}
1291 |
1292 | package-json-from-dist@1.0.1:
1293 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
1294 |
1295 | parseurl@1.3.3:
1296 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
1297 | engines: {node: '>= 0.8'}
1298 |
1299 | path-is-absolute@1.0.1:
1300 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1301 | engines: {node: '>=0.10.0'}
1302 |
1303 | path-key@3.1.1:
1304 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1305 | engines: {node: '>=8'}
1306 |
1307 | path-scurry@1.11.1:
1308 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
1309 | engines: {node: '>=16 || 14 >=14.18'}
1310 |
1311 | path-scurry@2.0.0:
1312 | resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
1313 | engines: {node: 20 || >=22}
1314 |
1315 | pathe@2.0.3:
1316 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
1317 |
1318 | picocolors@1.1.1:
1319 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1320 |
1321 | picomatch@2.3.1:
1322 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1323 | engines: {node: '>=8.6'}
1324 |
1325 | picomatch@4.0.2:
1326 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1327 | engines: {node: '>=12'}
1328 |
1329 | pirates@4.0.7:
1330 | resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
1331 | engines: {node: '>= 6'}
1332 |
1333 | pkg-types@1.3.1:
1334 | resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
1335 |
1336 | postcss-load-config@6.0.1:
1337 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
1338 | engines: {node: '>= 18'}
1339 | peerDependencies:
1340 | jiti: '>=1.21.0'
1341 | postcss: '>=8.0.9'
1342 | tsx: ^4.8.1
1343 | yaml: ^2.4.2
1344 | peerDependenciesMeta:
1345 | jiti:
1346 | optional: true
1347 | postcss:
1348 | optional: true
1349 | tsx:
1350 | optional: true
1351 | yaml:
1352 | optional: true
1353 |
1354 | postcss-value-parser@4.2.0:
1355 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1356 |
1357 | postcss@8.5.3:
1358 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
1359 | engines: {node: ^10 || ^12 || >=14}
1360 |
1361 | punycode@2.3.1:
1362 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1363 | engines: {node: '>=6'}
1364 |
1365 | react-dom@19.1.0:
1366 | resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
1367 | peerDependencies:
1368 | react: ^19.1.0
1369 |
1370 | react-refresh@0.17.0:
1371 | resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
1372 | engines: {node: '>=0.10.0'}
1373 |
1374 | react@19.1.0:
1375 | resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
1376 | engines: {node: '>=0.10.0'}
1377 |
1378 | readdirp@4.1.2:
1379 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
1380 | engines: {node: '>= 14.18.0'}
1381 |
1382 | resolve-from@5.0.0:
1383 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1384 | engines: {node: '>=8'}
1385 |
1386 | rollup@4.41.1:
1387 | resolution: {integrity: sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==}
1388 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1389 | hasBin: true
1390 |
1391 | run-applescript@7.0.0:
1392 | resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
1393 | engines: {node: '>=18'}
1394 |
1395 | sass@1.89.0:
1396 | resolution: {integrity: sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==}
1397 | engines: {node: '>=14.0.0'}
1398 | hasBin: true
1399 |
1400 | scheduler@0.26.0:
1401 | resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
1402 |
1403 | semver@6.3.1:
1404 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1405 | hasBin: true
1406 |
1407 | shebang-command@2.0.0:
1408 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1409 | engines: {node: '>=8'}
1410 |
1411 | shebang-regex@3.0.0:
1412 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1413 | engines: {node: '>=8'}
1414 |
1415 | signal-exit@4.1.0:
1416 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1417 | engines: {node: '>=14'}
1418 |
1419 | sirv@3.0.1:
1420 | resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
1421 | engines: {node: '>=18'}
1422 |
1423 | size-limit-node-esbuild@0.4.0:
1424 | resolution: {integrity: sha512-s48KM50Qgdx/C9UwZgBjo0eMnqdHNKDFDr7uqH0SA1y76testX2CxlM5r3JwaT4NcgcpwZ3KJOUEPDN/a3QvPg==}
1425 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
1426 |
1427 | size-limit@11.2.0:
1428 | resolution: {integrity: sha512-2kpQq2DD/pRpx3Tal/qRW1SYwcIeQ0iq8li5CJHQgOC+FtPn2BVmuDtzUCgNnpCrbgtfEHqh+iWzxK+Tq6C+RQ==}
1429 | engines: {node: ^18.0.0 || >=20.0.0}
1430 | hasBin: true
1431 |
1432 | source-map-js@1.2.1:
1433 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1434 | engines: {node: '>=0.10.0'}
1435 |
1436 | source-map-support@0.5.21:
1437 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
1438 |
1439 | source-map@0.6.1:
1440 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1441 | engines: {node: '>=0.10.0'}
1442 |
1443 | source-map@0.8.0-beta.0:
1444 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
1445 | engines: {node: '>= 8'}
1446 |
1447 | specificity@1.0.0:
1448 | resolution: {integrity: sha512-nCtHb5/MTfZ1D36EpLLz03AcUf1v+PxWFFieW4O721MaJUo/anSMckB94Ylj5VQPrjdlx+4BXcKD+s1N0yT+ww==}
1449 |
1450 | statuses@1.5.0:
1451 | resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
1452 | engines: {node: '>= 0.6'}
1453 |
1454 | string-width@4.2.3:
1455 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1456 | engines: {node: '>=8'}
1457 |
1458 | string-width@5.1.2:
1459 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1460 | engines: {node: '>=12'}
1461 |
1462 | strip-ansi@6.0.1:
1463 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1464 | engines: {node: '>=8'}
1465 |
1466 | strip-ansi@7.1.0:
1467 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1468 | engines: {node: '>=12'}
1469 |
1470 | sucrase@3.35.0:
1471 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
1472 | engines: {node: '>=16 || 14 >=14.17'}
1473 | hasBin: true
1474 |
1475 | swr@2.3.3:
1476 | resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==}
1477 | peerDependencies:
1478 | react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
1479 |
1480 | tailwindcss@4.1.7:
1481 | resolution: {integrity: sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==}
1482 |
1483 | tapable@2.2.2:
1484 | resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
1485 | engines: {node: '>=6'}
1486 |
1487 | tar@7.4.3:
1488 | resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
1489 | engines: {node: '>=18'}
1490 |
1491 | terser@5.40.0:
1492 | resolution: {integrity: sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==}
1493 | engines: {node: '>=10'}
1494 | hasBin: true
1495 |
1496 | thenify-all@1.6.0:
1497 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1498 | engines: {node: '>=0.8'}
1499 |
1500 | thenify@3.3.1:
1501 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1502 |
1503 | tinyexec@0.3.2:
1504 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
1505 |
1506 | tinyglobby@0.2.14:
1507 | resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
1508 | engines: {node: '>=12.0.0'}
1509 |
1510 | tmp@0.2.3:
1511 | resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==}
1512 | engines: {node: '>=14.14'}
1513 |
1514 | to-regex-range@5.0.1:
1515 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1516 | engines: {node: '>=8.0'}
1517 |
1518 | totalist@3.0.1:
1519 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
1520 | engines: {node: '>=6'}
1521 |
1522 | tr46@1.0.1:
1523 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
1524 |
1525 | tree-kill@1.2.2:
1526 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
1527 | hasBin: true
1528 |
1529 | ts-interface-checker@0.1.13:
1530 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1531 |
1532 | tslib@2.8.1:
1533 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1534 |
1535 | tsup@8.5.0:
1536 | resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==}
1537 | engines: {node: '>=18'}
1538 | hasBin: true
1539 | peerDependencies:
1540 | '@microsoft/api-extractor': ^7.36.0
1541 | '@swc/core': ^1
1542 | postcss: ^8.4.12
1543 | typescript: '>=4.5.0'
1544 | peerDependenciesMeta:
1545 | '@microsoft/api-extractor':
1546 | optional: true
1547 | '@swc/core':
1548 | optional: true
1549 | postcss:
1550 | optional: true
1551 | typescript:
1552 | optional: true
1553 |
1554 | typescript@5.8.3:
1555 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
1556 | engines: {node: '>=14.17'}
1557 | hasBin: true
1558 |
1559 | ufo@1.6.1:
1560 | resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
1561 |
1562 | undici-types@6.21.0:
1563 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
1564 |
1565 | universalify@2.0.1:
1566 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
1567 | engines: {node: '>= 10.0.0'}
1568 |
1569 | unpipe@1.0.0:
1570 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
1571 | engines: {node: '>= 0.8'}
1572 |
1573 | update-browserslist-db@1.1.3:
1574 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
1575 | hasBin: true
1576 | peerDependencies:
1577 | browserslist: '>= 4.21.0'
1578 |
1579 | use-sync-external-store@1.5.0:
1580 | resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
1581 | peerDependencies:
1582 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
1583 |
1584 | utils-merge@1.0.1:
1585 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
1586 | engines: {node: '>= 0.4.0'}
1587 |
1588 | vite@6.3.5:
1589 | resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
1590 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1591 | hasBin: true
1592 | peerDependencies:
1593 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1594 | jiti: '>=1.21.0'
1595 | less: '*'
1596 | lightningcss: ^1.21.0
1597 | sass: '*'
1598 | sass-embedded: '*'
1599 | stylus: '*'
1600 | sugarss: '*'
1601 | terser: ^5.16.0
1602 | tsx: ^4.8.1
1603 | yaml: ^2.4.2
1604 | peerDependenciesMeta:
1605 | '@types/node':
1606 | optional: true
1607 | jiti:
1608 | optional: true
1609 | less:
1610 | optional: true
1611 | lightningcss:
1612 | optional: true
1613 | sass:
1614 | optional: true
1615 | sass-embedded:
1616 | optional: true
1617 | stylus:
1618 | optional: true
1619 | sugarss:
1620 | optional: true
1621 | terser:
1622 | optional: true
1623 | tsx:
1624 | optional: true
1625 | yaml:
1626 | optional: true
1627 |
1628 | web-streams-polyfill@3.3.3:
1629 | resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
1630 | engines: {node: '>= 8'}
1631 |
1632 | webidl-conversions@4.0.2:
1633 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
1634 |
1635 | whatwg-url@7.1.0:
1636 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
1637 |
1638 | which@2.0.2:
1639 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1640 | engines: {node: '>= 8'}
1641 | hasBin: true
1642 |
1643 | wrap-ansi@7.0.0:
1644 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1645 | engines: {node: '>=10'}
1646 |
1647 | wrap-ansi@8.1.0:
1648 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1649 | engines: {node: '>=12'}
1650 |
1651 | wrappy@1.0.2:
1652 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1653 |
1654 | yallist@3.1.1:
1655 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1656 |
1657 | yallist@5.0.0:
1658 | resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
1659 | engines: {node: '>=18'}
1660 |
1661 | snapshots:
1662 |
1663 | '@adobe/css-tools@4.4.3': {}
1664 |
1665 | '@ampproject/remapping@2.3.0':
1666 | dependencies:
1667 | '@jridgewell/gen-mapping': 0.3.8
1668 | '@jridgewell/trace-mapping': 0.3.25
1669 |
1670 | '@babel/code-frame@7.27.1':
1671 | dependencies:
1672 | '@babel/helper-validator-identifier': 7.27.1
1673 | js-tokens: 4.0.0
1674 | picocolors: 1.1.1
1675 |
1676 | '@babel/compat-data@7.27.3': {}
1677 |
1678 | '@babel/core@7.27.3':
1679 | dependencies:
1680 | '@ampproject/remapping': 2.3.0
1681 | '@babel/code-frame': 7.27.1
1682 | '@babel/generator': 7.27.3
1683 | '@babel/helper-compilation-targets': 7.27.2
1684 | '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.3)
1685 | '@babel/helpers': 7.27.3
1686 | '@babel/parser': 7.27.3
1687 | '@babel/template': 7.27.2
1688 | '@babel/traverse': 7.27.3
1689 | '@babel/types': 7.27.3
1690 | convert-source-map: 2.0.0
1691 | debug: 4.4.1
1692 | gensync: 1.0.0-beta.2
1693 | json5: 2.2.3
1694 | semver: 6.3.1
1695 | transitivePeerDependencies:
1696 | - supports-color
1697 |
1698 | '@babel/generator@7.27.3':
1699 | dependencies:
1700 | '@babel/parser': 7.27.3
1701 | '@babel/types': 7.27.3
1702 | '@jridgewell/gen-mapping': 0.3.8
1703 | '@jridgewell/trace-mapping': 0.3.25
1704 | jsesc: 3.1.0
1705 |
1706 | '@babel/helper-compilation-targets@7.27.2':
1707 | dependencies:
1708 | '@babel/compat-data': 7.27.3
1709 | '@babel/helper-validator-option': 7.27.1
1710 | browserslist: 4.24.5
1711 | lru-cache: 5.1.1
1712 | semver: 6.3.1
1713 |
1714 | '@babel/helper-module-imports@7.27.1':
1715 | dependencies:
1716 | '@babel/traverse': 7.27.3
1717 | '@babel/types': 7.27.3
1718 | transitivePeerDependencies:
1719 | - supports-color
1720 |
1721 | '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.3)':
1722 | dependencies:
1723 | '@babel/core': 7.27.3
1724 | '@babel/helper-module-imports': 7.27.1
1725 | '@babel/helper-validator-identifier': 7.27.1
1726 | '@babel/traverse': 7.27.3
1727 | transitivePeerDependencies:
1728 | - supports-color
1729 |
1730 | '@babel/helper-plugin-utils@7.27.1': {}
1731 |
1732 | '@babel/helper-string-parser@7.27.1': {}
1733 |
1734 | '@babel/helper-validator-identifier@7.27.1': {}
1735 |
1736 | '@babel/helper-validator-option@7.27.1': {}
1737 |
1738 | '@babel/helpers@7.27.3':
1739 | dependencies:
1740 | '@babel/template': 7.27.2
1741 | '@babel/types': 7.27.3
1742 |
1743 | '@babel/parser@7.27.3':
1744 | dependencies:
1745 | '@babel/types': 7.27.3
1746 |
1747 | '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.3)':
1748 | dependencies:
1749 | '@babel/core': 7.27.3
1750 | '@babel/helper-plugin-utils': 7.27.1
1751 |
1752 | '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.3)':
1753 | dependencies:
1754 | '@babel/core': 7.27.3
1755 | '@babel/helper-plugin-utils': 7.27.1
1756 |
1757 | '@babel/template@7.27.2':
1758 | dependencies:
1759 | '@babel/code-frame': 7.27.1
1760 | '@babel/parser': 7.27.3
1761 | '@babel/types': 7.27.3
1762 |
1763 | '@babel/traverse@7.27.3':
1764 | dependencies:
1765 | '@babel/code-frame': 7.27.1
1766 | '@babel/generator': 7.27.3
1767 | '@babel/parser': 7.27.3
1768 | '@babel/template': 7.27.2
1769 | '@babel/types': 7.27.3
1770 | debug: 4.4.1
1771 | globals: 11.12.0
1772 | transitivePeerDependencies:
1773 | - supports-color
1774 |
1775 | '@babel/types@7.27.3':
1776 | dependencies:
1777 | '@babel/helper-string-parser': 7.27.1
1778 | '@babel/helper-validator-identifier': 7.27.1
1779 |
1780 | '@esbuild/aix-ppc64@0.25.5':
1781 | optional: true
1782 |
1783 | '@esbuild/android-arm64@0.25.5':
1784 | optional: true
1785 |
1786 | '@esbuild/android-arm@0.25.5':
1787 | optional: true
1788 |
1789 | '@esbuild/android-x64@0.25.5':
1790 | optional: true
1791 |
1792 | '@esbuild/darwin-arm64@0.25.5':
1793 | optional: true
1794 |
1795 | '@esbuild/darwin-x64@0.25.5':
1796 | optional: true
1797 |
1798 | '@esbuild/freebsd-arm64@0.25.5':
1799 | optional: true
1800 |
1801 | '@esbuild/freebsd-x64@0.25.5':
1802 | optional: true
1803 |
1804 | '@esbuild/linux-arm64@0.25.5':
1805 | optional: true
1806 |
1807 | '@esbuild/linux-arm@0.25.5':
1808 | optional: true
1809 |
1810 | '@esbuild/linux-ia32@0.25.5':
1811 | optional: true
1812 |
1813 | '@esbuild/linux-loong64@0.25.5':
1814 | optional: true
1815 |
1816 | '@esbuild/linux-mips64el@0.25.5':
1817 | optional: true
1818 |
1819 | '@esbuild/linux-ppc64@0.25.5':
1820 | optional: true
1821 |
1822 | '@esbuild/linux-riscv64@0.25.5':
1823 | optional: true
1824 |
1825 | '@esbuild/linux-s390x@0.25.5':
1826 | optional: true
1827 |
1828 | '@esbuild/linux-x64@0.25.5':
1829 | optional: true
1830 |
1831 | '@esbuild/netbsd-arm64@0.25.5':
1832 | optional: true
1833 |
1834 | '@esbuild/netbsd-x64@0.25.5':
1835 | optional: true
1836 |
1837 | '@esbuild/openbsd-arm64@0.25.5':
1838 | optional: true
1839 |
1840 | '@esbuild/openbsd-x64@0.25.5':
1841 | optional: true
1842 |
1843 | '@esbuild/sunos-x64@0.25.5':
1844 | optional: true
1845 |
1846 | '@esbuild/win32-arm64@0.25.5':
1847 | optional: true
1848 |
1849 | '@esbuild/win32-ia32@0.25.5':
1850 | optional: true
1851 |
1852 | '@esbuild/win32-x64@0.25.5':
1853 | optional: true
1854 |
1855 | '@isaacs/cliui@8.0.2':
1856 | dependencies:
1857 | string-width: 5.1.2
1858 | string-width-cjs: string-width@4.2.3
1859 | strip-ansi: 7.1.0
1860 | strip-ansi-cjs: strip-ansi@6.0.1
1861 | wrap-ansi: 8.1.0
1862 | wrap-ansi-cjs: wrap-ansi@7.0.0
1863 |
1864 | '@isaacs/fs-minipass@4.0.1':
1865 | dependencies:
1866 | minipass: 7.1.2
1867 |
1868 | '@jridgewell/gen-mapping@0.3.8':
1869 | dependencies:
1870 | '@jridgewell/set-array': 1.2.1
1871 | '@jridgewell/sourcemap-codec': 1.5.0
1872 | '@jridgewell/trace-mapping': 0.3.25
1873 |
1874 | '@jridgewell/resolve-uri@3.1.2': {}
1875 |
1876 | '@jridgewell/set-array@1.2.1': {}
1877 |
1878 | '@jridgewell/source-map@0.3.6':
1879 | dependencies:
1880 | '@jridgewell/gen-mapping': 0.3.8
1881 | '@jridgewell/trace-mapping': 0.3.25
1882 |
1883 | '@jridgewell/sourcemap-codec@1.5.0': {}
1884 |
1885 | '@jridgewell/trace-mapping@0.3.25':
1886 | dependencies:
1887 | '@jridgewell/resolve-uri': 3.1.2
1888 | '@jridgewell/sourcemap-codec': 1.5.0
1889 |
1890 | '@parcel/watcher-android-arm64@2.5.1':
1891 | optional: true
1892 |
1893 | '@parcel/watcher-darwin-arm64@2.5.1':
1894 | optional: true
1895 |
1896 | '@parcel/watcher-darwin-x64@2.5.1':
1897 | optional: true
1898 |
1899 | '@parcel/watcher-freebsd-x64@2.5.1':
1900 | optional: true
1901 |
1902 | '@parcel/watcher-linux-arm-glibc@2.5.1':
1903 | optional: true
1904 |
1905 | '@parcel/watcher-linux-arm-musl@2.5.1':
1906 | optional: true
1907 |
1908 | '@parcel/watcher-linux-arm64-glibc@2.5.1':
1909 | optional: true
1910 |
1911 | '@parcel/watcher-linux-arm64-musl@2.5.1':
1912 | optional: true
1913 |
1914 | '@parcel/watcher-linux-x64-glibc@2.5.1':
1915 | optional: true
1916 |
1917 | '@parcel/watcher-linux-x64-musl@2.5.1':
1918 | optional: true
1919 |
1920 | '@parcel/watcher-win32-arm64@2.5.1':
1921 | optional: true
1922 |
1923 | '@parcel/watcher-win32-ia32@2.5.1':
1924 | optional: true
1925 |
1926 | '@parcel/watcher-win32-x64@2.5.1':
1927 | optional: true
1928 |
1929 | '@parcel/watcher@2.5.1':
1930 | dependencies:
1931 | detect-libc: 1.0.3
1932 | is-glob: 4.0.3
1933 | micromatch: 4.0.8
1934 | node-addon-api: 7.1.1
1935 | optionalDependencies:
1936 | '@parcel/watcher-android-arm64': 2.5.1
1937 | '@parcel/watcher-darwin-arm64': 2.5.1
1938 | '@parcel/watcher-darwin-x64': 2.5.1
1939 | '@parcel/watcher-freebsd-x64': 2.5.1
1940 | '@parcel/watcher-linux-arm-glibc': 2.5.1
1941 | '@parcel/watcher-linux-arm-musl': 2.5.1
1942 | '@parcel/watcher-linux-arm64-glibc': 2.5.1
1943 | '@parcel/watcher-linux-arm64-musl': 2.5.1
1944 | '@parcel/watcher-linux-x64-glibc': 2.5.1
1945 | '@parcel/watcher-linux-x64-musl': 2.5.1
1946 | '@parcel/watcher-win32-arm64': 2.5.1
1947 | '@parcel/watcher-win32-ia32': 2.5.1
1948 | '@parcel/watcher-win32-x64': 2.5.1
1949 | optional: true
1950 |
1951 | '@pkgjs/parseargs@0.11.0':
1952 | optional: true
1953 |
1954 | '@polka/url@1.0.0-next.29': {}
1955 |
1956 | '@rolldown/pluginutils@1.0.0-beta.9': {}
1957 |
1958 | '@rollup/rollup-android-arm-eabi@4.41.1':
1959 | optional: true
1960 |
1961 | '@rollup/rollup-android-arm64@4.41.1':
1962 | optional: true
1963 |
1964 | '@rollup/rollup-darwin-arm64@4.41.1':
1965 | optional: true
1966 |
1967 | '@rollup/rollup-darwin-x64@4.41.1':
1968 | optional: true
1969 |
1970 | '@rollup/rollup-freebsd-arm64@4.41.1':
1971 | optional: true
1972 |
1973 | '@rollup/rollup-freebsd-x64@4.41.1':
1974 | optional: true
1975 |
1976 | '@rollup/rollup-linux-arm-gnueabihf@4.41.1':
1977 | optional: true
1978 |
1979 | '@rollup/rollup-linux-arm-musleabihf@4.41.1':
1980 | optional: true
1981 |
1982 | '@rollup/rollup-linux-arm64-gnu@4.41.1':
1983 | optional: true
1984 |
1985 | '@rollup/rollup-linux-arm64-musl@4.41.1':
1986 | optional: true
1987 |
1988 | '@rollup/rollup-linux-loongarch64-gnu@4.41.1':
1989 | optional: true
1990 |
1991 | '@rollup/rollup-linux-powerpc64le-gnu@4.41.1':
1992 | optional: true
1993 |
1994 | '@rollup/rollup-linux-riscv64-gnu@4.41.1':
1995 | optional: true
1996 |
1997 | '@rollup/rollup-linux-riscv64-musl@4.41.1':
1998 | optional: true
1999 |
2000 | '@rollup/rollup-linux-s390x-gnu@4.41.1':
2001 | optional: true
2002 |
2003 | '@rollup/rollup-linux-x64-gnu@4.41.1':
2004 | optional: true
2005 |
2006 | '@rollup/rollup-linux-x64-musl@4.41.1':
2007 | optional: true
2008 |
2009 | '@rollup/rollup-win32-arm64-msvc@4.41.1':
2010 | optional: true
2011 |
2012 | '@rollup/rollup-win32-ia32-msvc@4.41.1':
2013 | optional: true
2014 |
2015 | '@rollup/rollup-win32-x64-msvc@4.41.1':
2016 | optional: true
2017 |
2018 | '@size-limit/file@11.2.0(size-limit@11.2.0)':
2019 | dependencies:
2020 | size-limit: 11.2.0
2021 |
2022 | '@tailwindcss/node@4.1.7':
2023 | dependencies:
2024 | '@ampproject/remapping': 2.3.0
2025 | enhanced-resolve: 5.18.1
2026 | jiti: 2.4.2
2027 | lightningcss: 1.30.1
2028 | magic-string: 0.30.17
2029 | source-map-js: 1.2.1
2030 | tailwindcss: 4.1.7
2031 |
2032 | '@tailwindcss/oxide-android-arm64@4.1.7':
2033 | optional: true
2034 |
2035 | '@tailwindcss/oxide-darwin-arm64@4.1.7':
2036 | optional: true
2037 |
2038 | '@tailwindcss/oxide-darwin-x64@4.1.7':
2039 | optional: true
2040 |
2041 | '@tailwindcss/oxide-freebsd-x64@4.1.7':
2042 | optional: true
2043 |
2044 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7':
2045 | optional: true
2046 |
2047 | '@tailwindcss/oxide-linux-arm64-gnu@4.1.7':
2048 | optional: true
2049 |
2050 | '@tailwindcss/oxide-linux-arm64-musl@4.1.7':
2051 | optional: true
2052 |
2053 | '@tailwindcss/oxide-linux-x64-gnu@4.1.7':
2054 | optional: true
2055 |
2056 | '@tailwindcss/oxide-linux-x64-musl@4.1.7':
2057 | optional: true
2058 |
2059 | '@tailwindcss/oxide-wasm32-wasi@4.1.7':
2060 | optional: true
2061 |
2062 | '@tailwindcss/oxide-win32-arm64-msvc@4.1.7':
2063 | optional: true
2064 |
2065 | '@tailwindcss/oxide-win32-x64-msvc@4.1.7':
2066 | optional: true
2067 |
2068 | '@tailwindcss/oxide@4.1.7':
2069 | dependencies:
2070 | detect-libc: 2.0.4
2071 | tar: 7.4.3
2072 | optionalDependencies:
2073 | '@tailwindcss/oxide-android-arm64': 4.1.7
2074 | '@tailwindcss/oxide-darwin-arm64': 4.1.7
2075 | '@tailwindcss/oxide-darwin-x64': 4.1.7
2076 | '@tailwindcss/oxide-freebsd-x64': 4.1.7
2077 | '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.7
2078 | '@tailwindcss/oxide-linux-arm64-gnu': 4.1.7
2079 | '@tailwindcss/oxide-linux-arm64-musl': 4.1.7
2080 | '@tailwindcss/oxide-linux-x64-gnu': 4.1.7
2081 | '@tailwindcss/oxide-linux-x64-musl': 4.1.7
2082 | '@tailwindcss/oxide-wasm32-wasi': 4.1.7
2083 | '@tailwindcss/oxide-win32-arm64-msvc': 4.1.7
2084 | '@tailwindcss/oxide-win32-x64-msvc': 4.1.7
2085 |
2086 | '@tailwindcss/vite@4.1.7(vite@6.3.5(@types/node@22.15.23)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(terser@5.40.0))':
2087 | dependencies:
2088 | '@tailwindcss/node': 4.1.7
2089 | '@tailwindcss/oxide': 4.1.7
2090 | tailwindcss: 4.1.7
2091 | vite: 6.3.5(@types/node@22.15.23)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(terser@5.40.0)
2092 |
2093 | '@types/babel__core@7.20.5':
2094 | dependencies:
2095 | '@babel/parser': 7.27.3
2096 | '@babel/types': 7.27.3
2097 | '@types/babel__generator': 7.27.0
2098 | '@types/babel__template': 7.4.4
2099 | '@types/babel__traverse': 7.20.7
2100 |
2101 | '@types/babel__generator@7.27.0':
2102 | dependencies:
2103 | '@babel/types': 7.27.3
2104 |
2105 | '@types/babel__template@7.4.4':
2106 | dependencies:
2107 | '@babel/parser': 7.27.3
2108 | '@babel/types': 7.27.3
2109 |
2110 | '@types/babel__traverse@7.20.7':
2111 | dependencies:
2112 | '@babel/types': 7.27.3
2113 |
2114 | '@types/connect@3.4.38':
2115 | dependencies:
2116 | '@types/node': 22.15.23
2117 |
2118 | '@types/cross-spawn@6.0.6':
2119 | dependencies:
2120 | '@types/node': 22.15.23
2121 |
2122 | '@types/estree@1.0.7': {}
2123 |
2124 | '@types/fs-extra@11.0.4':
2125 | dependencies:
2126 | '@types/jsonfile': 6.1.4
2127 | '@types/node': 22.15.23
2128 |
2129 | '@types/jsonfile@6.1.4':
2130 | dependencies:
2131 | '@types/node': 22.15.23
2132 |
2133 | '@types/node@22.15.23':
2134 | dependencies:
2135 | undici-types: 6.21.0
2136 |
2137 | '@types/react-dom@19.1.5(@types/react@19.1.6)':
2138 | dependencies:
2139 | '@types/react': 19.1.6
2140 |
2141 | '@types/react@19.1.6':
2142 | dependencies:
2143 | csstype: 3.1.3
2144 |
2145 | '@vitejs/plugin-react@4.5.0(vite@6.3.5(@types/node@22.15.23)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(terser@5.40.0))':
2146 | dependencies:
2147 | '@babel/core': 7.27.3
2148 | '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.3)
2149 | '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.3)
2150 | '@rolldown/pluginutils': 1.0.0-beta.9
2151 | '@types/babel__core': 7.20.5
2152 | react-refresh: 0.17.0
2153 | vite: 6.3.5(@types/node@22.15.23)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(terser@5.40.0)
2154 | transitivePeerDependencies:
2155 | - supports-color
2156 |
2157 | acorn@8.14.1: {}
2158 |
2159 | agent-base@7.1.3: {}
2160 |
2161 | analyze-css@2.4.5:
2162 | dependencies:
2163 | '@adobe/css-tools': 4.4.3
2164 | cli: 1.0.1
2165 | commander: 13.1.0
2166 | css-shorthand-properties: 1.1.2
2167 | css-what: 6.1.0
2168 | debug: 4.4.1
2169 | fast-stats: 0.0.7
2170 | glob: 11.0.2
2171 | http-proxy-agent: 7.0.2
2172 | node-fetch: 3.3.2
2173 | onecolor: 4.1.0
2174 | specificity: 1.0.0
2175 | optionalDependencies:
2176 | sass: 1.89.0
2177 | transitivePeerDependencies:
2178 | - supports-color
2179 |
2180 | ansi-regex@5.0.1: {}
2181 |
2182 | ansi-regex@6.1.0: {}
2183 |
2184 | ansi-styles@4.3.0:
2185 | dependencies:
2186 | color-convert: 2.0.1
2187 |
2188 | ansi-styles@6.2.1: {}
2189 |
2190 | any-promise@1.3.0: {}
2191 |
2192 | autoprefixer@10.4.21(postcss@8.5.3):
2193 | dependencies:
2194 | browserslist: 4.24.5
2195 | caniuse-lite: 1.0.30001718
2196 | fraction.js: 4.3.7
2197 | normalize-range: 0.1.2
2198 | picocolors: 1.1.1
2199 | postcss: 8.5.3
2200 | postcss-value-parser: 4.2.0
2201 |
2202 | balanced-match@1.0.2: {}
2203 |
2204 | brace-expansion@1.1.11:
2205 | dependencies:
2206 | balanced-match: 1.0.2
2207 | concat-map: 0.0.1
2208 |
2209 | brace-expansion@2.0.1:
2210 | dependencies:
2211 | balanced-match: 1.0.2
2212 |
2213 | braces@3.0.3:
2214 | dependencies:
2215 | fill-range: 7.1.1
2216 | optional: true
2217 |
2218 | browserslist@4.24.5:
2219 | dependencies:
2220 | caniuse-lite: 1.0.30001718
2221 | electron-to-chromium: 1.5.159
2222 | node-releases: 2.0.19
2223 | update-browserslist-db: 1.1.3(browserslist@4.24.5)
2224 |
2225 | buffer-from@1.1.2: {}
2226 |
2227 | bundle-name@4.1.0:
2228 | dependencies:
2229 | run-applescript: 7.0.0
2230 |
2231 | bundle-require@5.1.0(esbuild@0.25.5):
2232 | dependencies:
2233 | esbuild: 0.25.5
2234 | load-tsconfig: 0.2.5
2235 |
2236 | bytes-iec@3.1.1: {}
2237 |
2238 | cac@6.7.14: {}
2239 |
2240 | caniuse-lite@1.0.30001718: {}
2241 |
2242 | chokidar@4.0.3:
2243 | dependencies:
2244 | readdirp: 4.1.2
2245 |
2246 | chownr@3.0.0: {}
2247 |
2248 | cli@1.0.1:
2249 | dependencies:
2250 | exit: 0.1.2
2251 | glob: 7.2.3
2252 |
2253 | color-convert@2.0.1:
2254 | dependencies:
2255 | color-name: 1.1.4
2256 |
2257 | color-name@1.1.4: {}
2258 |
2259 | commander@13.1.0: {}
2260 |
2261 | commander@2.20.3: {}
2262 |
2263 | commander@4.1.1: {}
2264 |
2265 | concat-map@0.0.1: {}
2266 |
2267 | confbox@0.1.8: {}
2268 |
2269 | connect@3.7.0:
2270 | dependencies:
2271 | debug: 2.6.9
2272 | finalhandler: 1.1.2
2273 | parseurl: 1.3.3
2274 | utils-merge: 1.0.1
2275 | transitivePeerDependencies:
2276 | - supports-color
2277 |
2278 | consola@3.4.2: {}
2279 |
2280 | convert-source-map@2.0.0: {}
2281 |
2282 | cross-spawn@7.0.6:
2283 | dependencies:
2284 | path-key: 3.1.1
2285 | shebang-command: 2.0.0
2286 | which: 2.0.2
2287 |
2288 | css-shorthand-properties@1.1.2: {}
2289 |
2290 | css-tree@2.3.1:
2291 | dependencies:
2292 | mdn-data: 2.0.30
2293 | source-map-js: 1.2.1
2294 |
2295 | css-what@6.1.0: {}
2296 |
2297 | cssjson@2.1.3: {}
2298 |
2299 | csstype@3.1.3: {}
2300 |
2301 | data-uri-to-buffer@4.0.1: {}
2302 |
2303 | debug@2.6.9:
2304 | dependencies:
2305 | ms: 2.0.0
2306 |
2307 | debug@4.4.1:
2308 | dependencies:
2309 | ms: 2.1.3
2310 |
2311 | default-browser-id@5.0.0: {}
2312 |
2313 | default-browser@5.2.1:
2314 | dependencies:
2315 | bundle-name: 4.1.0
2316 | default-browser-id: 5.0.0
2317 |
2318 | define-lazy-prop@3.0.0: {}
2319 |
2320 | dequal@2.0.3: {}
2321 |
2322 | detect-libc@1.0.3:
2323 | optional: true
2324 |
2325 | detect-libc@2.0.4: {}
2326 |
2327 | eastasianwidth@0.2.0: {}
2328 |
2329 | ee-first@1.1.1: {}
2330 |
2331 | electron-to-chromium@1.5.159: {}
2332 |
2333 | emoji-regex@8.0.0: {}
2334 |
2335 | emoji-regex@9.2.2: {}
2336 |
2337 | encodeurl@1.0.2: {}
2338 |
2339 | enhanced-resolve@5.18.1:
2340 | dependencies:
2341 | graceful-fs: 4.2.11
2342 | tapable: 2.2.2
2343 |
2344 | esbuild@0.25.5:
2345 | optionalDependencies:
2346 | '@esbuild/aix-ppc64': 0.25.5
2347 | '@esbuild/android-arm': 0.25.5
2348 | '@esbuild/android-arm64': 0.25.5
2349 | '@esbuild/android-x64': 0.25.5
2350 | '@esbuild/darwin-arm64': 0.25.5
2351 | '@esbuild/darwin-x64': 0.25.5
2352 | '@esbuild/freebsd-arm64': 0.25.5
2353 | '@esbuild/freebsd-x64': 0.25.5
2354 | '@esbuild/linux-arm': 0.25.5
2355 | '@esbuild/linux-arm64': 0.25.5
2356 | '@esbuild/linux-ia32': 0.25.5
2357 | '@esbuild/linux-loong64': 0.25.5
2358 | '@esbuild/linux-mips64el': 0.25.5
2359 | '@esbuild/linux-ppc64': 0.25.5
2360 | '@esbuild/linux-riscv64': 0.25.5
2361 | '@esbuild/linux-s390x': 0.25.5
2362 | '@esbuild/linux-x64': 0.25.5
2363 | '@esbuild/netbsd-arm64': 0.25.5
2364 | '@esbuild/netbsd-x64': 0.25.5
2365 | '@esbuild/openbsd-arm64': 0.25.5
2366 | '@esbuild/openbsd-x64': 0.25.5
2367 | '@esbuild/sunos-x64': 0.25.5
2368 | '@esbuild/win32-arm64': 0.25.5
2369 | '@esbuild/win32-ia32': 0.25.5
2370 | '@esbuild/win32-x64': 0.25.5
2371 |
2372 | escalade@3.2.0: {}
2373 |
2374 | escape-html@1.0.3: {}
2375 |
2376 | exit@0.1.2: {}
2377 |
2378 | fast-stats@0.0.7: {}
2379 |
2380 | fdir@6.4.5(picomatch@4.0.2):
2381 | optionalDependencies:
2382 | picomatch: 4.0.2
2383 |
2384 | fetch-blob@3.2.0:
2385 | dependencies:
2386 | node-domexception: 1.0.0
2387 | web-streams-polyfill: 3.3.3
2388 |
2389 | fill-range@7.1.1:
2390 | dependencies:
2391 | to-regex-range: 5.0.1
2392 | optional: true
2393 |
2394 | finalhandler@1.1.2:
2395 | dependencies:
2396 | debug: 2.6.9
2397 | encodeurl: 1.0.2
2398 | escape-html: 1.0.3
2399 | on-finished: 2.3.0
2400 | parseurl: 1.3.3
2401 | statuses: 1.5.0
2402 | unpipe: 1.0.0
2403 | transitivePeerDependencies:
2404 | - supports-color
2405 |
2406 | fix-dts-default-cjs-exports@1.0.1:
2407 | dependencies:
2408 | magic-string: 0.30.17
2409 | mlly: 1.7.4
2410 | rollup: 4.41.1
2411 |
2412 | foreground-child@3.3.1:
2413 | dependencies:
2414 | cross-spawn: 7.0.6
2415 | signal-exit: 4.1.0
2416 |
2417 | formdata-polyfill@4.0.10:
2418 | dependencies:
2419 | fetch-blob: 3.2.0
2420 |
2421 | fraction.js@4.3.7: {}
2422 |
2423 | fs-extra@11.3.0:
2424 | dependencies:
2425 | graceful-fs: 4.2.11
2426 | jsonfile: 6.1.0
2427 | universalify: 2.0.1
2428 |
2429 | fs.realpath@1.0.0: {}
2430 |
2431 | fsevents@2.3.3:
2432 | optional: true
2433 |
2434 | gensync@1.0.0-beta.2: {}
2435 |
2436 | get-port@7.1.0: {}
2437 |
2438 | glob@10.4.5:
2439 | dependencies:
2440 | foreground-child: 3.3.1
2441 | jackspeak: 3.4.3
2442 | minimatch: 9.0.5
2443 | minipass: 7.1.2
2444 | package-json-from-dist: 1.0.1
2445 | path-scurry: 1.11.1
2446 |
2447 | glob@11.0.2:
2448 | dependencies:
2449 | foreground-child: 3.3.1
2450 | jackspeak: 4.1.1
2451 | minimatch: 10.0.1
2452 | minipass: 7.1.2
2453 | package-json-from-dist: 1.0.1
2454 | path-scurry: 2.0.0
2455 |
2456 | glob@7.2.3:
2457 | dependencies:
2458 | fs.realpath: 1.0.0
2459 | inflight: 1.0.6
2460 | inherits: 2.0.4
2461 | minimatch: 3.1.2
2462 | once: 1.4.0
2463 | path-is-absolute: 1.0.1
2464 |
2465 | globals@11.12.0: {}
2466 |
2467 | graceful-fs@4.2.11: {}
2468 |
2469 | http-proxy-agent@7.0.2:
2470 | dependencies:
2471 | agent-base: 7.1.3
2472 | debug: 4.4.1
2473 | transitivePeerDependencies:
2474 | - supports-color
2475 |
2476 | husky@9.1.7: {}
2477 |
2478 | immutable@5.1.2:
2479 | optional: true
2480 |
2481 | inflight@1.0.6:
2482 | dependencies:
2483 | once: 1.4.0
2484 | wrappy: 1.0.2
2485 |
2486 | inherits@2.0.4: {}
2487 |
2488 | is-docker@3.0.0: {}
2489 |
2490 | is-extglob@2.1.1:
2491 | optional: true
2492 |
2493 | is-fullwidth-code-point@3.0.0: {}
2494 |
2495 | is-glob@4.0.3:
2496 | dependencies:
2497 | is-extglob: 2.1.1
2498 | optional: true
2499 |
2500 | is-inside-container@1.0.0:
2501 | dependencies:
2502 | is-docker: 3.0.0
2503 |
2504 | is-number@7.0.0:
2505 | optional: true
2506 |
2507 | is-wsl@3.1.0:
2508 | dependencies:
2509 | is-inside-container: 1.0.0
2510 |
2511 | isexe@2.0.0: {}
2512 |
2513 | jackspeak@3.4.3:
2514 | dependencies:
2515 | '@isaacs/cliui': 8.0.2
2516 | optionalDependencies:
2517 | '@pkgjs/parseargs': 0.11.0
2518 |
2519 | jackspeak@4.1.1:
2520 | dependencies:
2521 | '@isaacs/cliui': 8.0.2
2522 |
2523 | jiti@2.4.2: {}
2524 |
2525 | joycon@3.1.1: {}
2526 |
2527 | js-tokens@4.0.0: {}
2528 |
2529 | jsesc@3.1.0: {}
2530 |
2531 | json5@2.2.3: {}
2532 |
2533 | jsonfile@6.1.0:
2534 | dependencies:
2535 | universalify: 2.0.1
2536 | optionalDependencies:
2537 | graceful-fs: 4.2.11
2538 |
2539 | lightningcss-darwin-arm64@1.30.1:
2540 | optional: true
2541 |
2542 | lightningcss-darwin-x64@1.30.1:
2543 | optional: true
2544 |
2545 | lightningcss-freebsd-x64@1.30.1:
2546 | optional: true
2547 |
2548 | lightningcss-linux-arm-gnueabihf@1.30.1:
2549 | optional: true
2550 |
2551 | lightningcss-linux-arm64-gnu@1.30.1:
2552 | optional: true
2553 |
2554 | lightningcss-linux-arm64-musl@1.30.1:
2555 | optional: true
2556 |
2557 | lightningcss-linux-x64-gnu@1.30.1:
2558 | optional: true
2559 |
2560 | lightningcss-linux-x64-musl@1.30.1:
2561 | optional: true
2562 |
2563 | lightningcss-win32-arm64-msvc@1.30.1:
2564 | optional: true
2565 |
2566 | lightningcss-win32-x64-msvc@1.30.1:
2567 | optional: true
2568 |
2569 | lightningcss@1.30.1:
2570 | dependencies:
2571 | detect-libc: 2.0.4
2572 | optionalDependencies:
2573 | lightningcss-darwin-arm64: 1.30.1
2574 | lightningcss-darwin-x64: 1.30.1
2575 | lightningcss-freebsd-x64: 1.30.1
2576 | lightningcss-linux-arm-gnueabihf: 1.30.1
2577 | lightningcss-linux-arm64-gnu: 1.30.1
2578 | lightningcss-linux-arm64-musl: 1.30.1
2579 | lightningcss-linux-x64-gnu: 1.30.1
2580 | lightningcss-linux-x64-musl: 1.30.1
2581 | lightningcss-win32-arm64-msvc: 1.30.1
2582 | lightningcss-win32-x64-msvc: 1.30.1
2583 |
2584 | lilconfig@3.1.3: {}
2585 |
2586 | lines-and-columns@1.2.4: {}
2587 |
2588 | load-tsconfig@0.2.5: {}
2589 |
2590 | lodash.sortby@4.7.0: {}
2591 |
2592 | lru-cache@10.4.3: {}
2593 |
2594 | lru-cache@11.1.0: {}
2595 |
2596 | lru-cache@5.1.1:
2597 | dependencies:
2598 | yallist: 3.1.1
2599 |
2600 | magic-string@0.30.17:
2601 | dependencies:
2602 | '@jridgewell/sourcemap-codec': 1.5.0
2603 |
2604 | mdn-data@2.0.30: {}
2605 |
2606 | micromatch@4.0.8:
2607 | dependencies:
2608 | braces: 3.0.3
2609 | picomatch: 2.3.1
2610 | optional: true
2611 |
2612 | minimatch@10.0.1:
2613 | dependencies:
2614 | brace-expansion: 2.0.1
2615 |
2616 | minimatch@3.1.2:
2617 | dependencies:
2618 | brace-expansion: 1.1.11
2619 |
2620 | minimatch@9.0.5:
2621 | dependencies:
2622 | brace-expansion: 2.0.1
2623 |
2624 | minipass@7.1.2: {}
2625 |
2626 | minizlib@3.0.2:
2627 | dependencies:
2628 | minipass: 7.1.2
2629 |
2630 | mkdirp@3.0.1: {}
2631 |
2632 | mlly@1.7.4:
2633 | dependencies:
2634 | acorn: 8.14.1
2635 | pathe: 2.0.3
2636 | pkg-types: 1.3.1
2637 | ufo: 1.6.1
2638 |
2639 | mrmime@2.0.1: {}
2640 |
2641 | ms@2.0.0: {}
2642 |
2643 | ms@2.1.3: {}
2644 |
2645 | mz@2.7.0:
2646 | dependencies:
2647 | any-promise: 1.3.0
2648 | object-assign: 4.1.1
2649 | thenify-all: 1.6.0
2650 |
2651 | nanoid@3.3.11: {}
2652 |
2653 | nanoid@5.1.5: {}
2654 |
2655 | nanospinner@1.2.2:
2656 | dependencies:
2657 | picocolors: 1.1.1
2658 |
2659 | node-addon-api@7.1.1:
2660 | optional: true
2661 |
2662 | node-domexception@1.0.0: {}
2663 |
2664 | node-fetch@3.3.2:
2665 | dependencies:
2666 | data-uri-to-buffer: 4.0.1
2667 | fetch-blob: 3.2.0
2668 | formdata-polyfill: 4.0.10
2669 |
2670 | node-releases@2.0.19: {}
2671 |
2672 | normalize-range@0.1.2: {}
2673 |
2674 | object-assign@4.1.1: {}
2675 |
2676 | on-finished@2.3.0:
2677 | dependencies:
2678 | ee-first: 1.1.1
2679 |
2680 | once@1.4.0:
2681 | dependencies:
2682 | wrappy: 1.0.2
2683 |
2684 | onecolor@4.1.0: {}
2685 |
2686 | open@10.1.2:
2687 | dependencies:
2688 | default-browser: 5.2.1
2689 | define-lazy-prop: 3.0.0
2690 | is-inside-container: 1.0.0
2691 | is-wsl: 3.1.0
2692 |
2693 | package-json-from-dist@1.0.1: {}
2694 |
2695 | parseurl@1.3.3: {}
2696 |
2697 | path-is-absolute@1.0.1: {}
2698 |
2699 | path-key@3.1.1: {}
2700 |
2701 | path-scurry@1.11.1:
2702 | dependencies:
2703 | lru-cache: 10.4.3
2704 | minipass: 7.1.2
2705 |
2706 | path-scurry@2.0.0:
2707 | dependencies:
2708 | lru-cache: 11.1.0
2709 | minipass: 7.1.2
2710 |
2711 | pathe@2.0.3: {}
2712 |
2713 | picocolors@1.1.1: {}
2714 |
2715 | picomatch@2.3.1:
2716 | optional: true
2717 |
2718 | picomatch@4.0.2: {}
2719 |
2720 | pirates@4.0.7: {}
2721 |
2722 | pkg-types@1.3.1:
2723 | dependencies:
2724 | confbox: 0.1.8
2725 | mlly: 1.7.4
2726 | pathe: 2.0.3
2727 |
2728 | postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.3):
2729 | dependencies:
2730 | lilconfig: 3.1.3
2731 | optionalDependencies:
2732 | jiti: 2.4.2
2733 | postcss: 8.5.3
2734 |
2735 | postcss-value-parser@4.2.0: {}
2736 |
2737 | postcss@8.5.3:
2738 | dependencies:
2739 | nanoid: 3.3.11
2740 | picocolors: 1.1.1
2741 | source-map-js: 1.2.1
2742 |
2743 | punycode@2.3.1: {}
2744 |
2745 | react-dom@19.1.0(react@19.1.0):
2746 | dependencies:
2747 | react: 19.1.0
2748 | scheduler: 0.26.0
2749 |
2750 | react-refresh@0.17.0: {}
2751 |
2752 | react@19.1.0: {}
2753 |
2754 | readdirp@4.1.2: {}
2755 |
2756 | resolve-from@5.0.0: {}
2757 |
2758 | rollup@4.41.1:
2759 | dependencies:
2760 | '@types/estree': 1.0.7
2761 | optionalDependencies:
2762 | '@rollup/rollup-android-arm-eabi': 4.41.1
2763 | '@rollup/rollup-android-arm64': 4.41.1
2764 | '@rollup/rollup-darwin-arm64': 4.41.1
2765 | '@rollup/rollup-darwin-x64': 4.41.1
2766 | '@rollup/rollup-freebsd-arm64': 4.41.1
2767 | '@rollup/rollup-freebsd-x64': 4.41.1
2768 | '@rollup/rollup-linux-arm-gnueabihf': 4.41.1
2769 | '@rollup/rollup-linux-arm-musleabihf': 4.41.1
2770 | '@rollup/rollup-linux-arm64-gnu': 4.41.1
2771 | '@rollup/rollup-linux-arm64-musl': 4.41.1
2772 | '@rollup/rollup-linux-loongarch64-gnu': 4.41.1
2773 | '@rollup/rollup-linux-powerpc64le-gnu': 4.41.1
2774 | '@rollup/rollup-linux-riscv64-gnu': 4.41.1
2775 | '@rollup/rollup-linux-riscv64-musl': 4.41.1
2776 | '@rollup/rollup-linux-s390x-gnu': 4.41.1
2777 | '@rollup/rollup-linux-x64-gnu': 4.41.1
2778 | '@rollup/rollup-linux-x64-musl': 4.41.1
2779 | '@rollup/rollup-win32-arm64-msvc': 4.41.1
2780 | '@rollup/rollup-win32-ia32-msvc': 4.41.1
2781 | '@rollup/rollup-win32-x64-msvc': 4.41.1
2782 | fsevents: 2.3.3
2783 |
2784 | run-applescript@7.0.0: {}
2785 |
2786 | sass@1.89.0:
2787 | dependencies:
2788 | chokidar: 4.0.3
2789 | immutable: 5.1.2
2790 | source-map-js: 1.2.1
2791 | optionalDependencies:
2792 | '@parcel/watcher': 2.5.1
2793 | optional: true
2794 |
2795 | scheduler@0.26.0: {}
2796 |
2797 | semver@6.3.1: {}
2798 |
2799 | shebang-command@2.0.0:
2800 | dependencies:
2801 | shebang-regex: 3.0.0
2802 |
2803 | shebang-regex@3.0.0: {}
2804 |
2805 | signal-exit@4.1.0: {}
2806 |
2807 | sirv@3.0.1:
2808 | dependencies:
2809 | '@polka/url': 1.0.0-next.29
2810 | mrmime: 2.0.1
2811 | totalist: 3.0.1
2812 |
2813 | size-limit-node-esbuild@0.4.0:
2814 | dependencies:
2815 | nanoid: 5.1.5
2816 | size-limit: 11.2.0
2817 | tslib: 2.8.1
2818 |
2819 | size-limit@11.2.0:
2820 | dependencies:
2821 | bytes-iec: 3.1.1
2822 | chokidar: 4.0.3
2823 | jiti: 2.4.2
2824 | lilconfig: 3.1.3
2825 | nanospinner: 1.2.2
2826 | picocolors: 1.1.1
2827 | tinyglobby: 0.2.14
2828 |
2829 | source-map-js@1.2.1: {}
2830 |
2831 | source-map-support@0.5.21:
2832 | dependencies:
2833 | buffer-from: 1.1.2
2834 | source-map: 0.6.1
2835 |
2836 | source-map@0.6.1: {}
2837 |
2838 | source-map@0.8.0-beta.0:
2839 | dependencies:
2840 | whatwg-url: 7.1.0
2841 |
2842 | specificity@1.0.0:
2843 | dependencies:
2844 | css-tree: 2.3.1
2845 |
2846 | statuses@1.5.0: {}
2847 |
2848 | string-width@4.2.3:
2849 | dependencies:
2850 | emoji-regex: 8.0.0
2851 | is-fullwidth-code-point: 3.0.0
2852 | strip-ansi: 6.0.1
2853 |
2854 | string-width@5.1.2:
2855 | dependencies:
2856 | eastasianwidth: 0.2.0
2857 | emoji-regex: 9.2.2
2858 | strip-ansi: 7.1.0
2859 |
2860 | strip-ansi@6.0.1:
2861 | dependencies:
2862 | ansi-regex: 5.0.1
2863 |
2864 | strip-ansi@7.1.0:
2865 | dependencies:
2866 | ansi-regex: 6.1.0
2867 |
2868 | sucrase@3.35.0:
2869 | dependencies:
2870 | '@jridgewell/gen-mapping': 0.3.8
2871 | commander: 4.1.1
2872 | glob: 10.4.5
2873 | lines-and-columns: 1.2.4
2874 | mz: 2.7.0
2875 | pirates: 4.0.7
2876 | ts-interface-checker: 0.1.13
2877 |
2878 | swr@2.3.3(react@19.1.0):
2879 | dependencies:
2880 | dequal: 2.0.3
2881 | react: 19.1.0
2882 | use-sync-external-store: 1.5.0(react@19.1.0)
2883 |
2884 | tailwindcss@4.1.7: {}
2885 |
2886 | tapable@2.2.2: {}
2887 |
2888 | tar@7.4.3:
2889 | dependencies:
2890 | '@isaacs/fs-minipass': 4.0.1
2891 | chownr: 3.0.0
2892 | minipass: 7.1.2
2893 | minizlib: 3.0.2
2894 | mkdirp: 3.0.1
2895 | yallist: 5.0.0
2896 |
2897 | terser@5.40.0:
2898 | dependencies:
2899 | '@jridgewell/source-map': 0.3.6
2900 | acorn: 8.14.1
2901 | commander: 2.20.3
2902 | source-map-support: 0.5.21
2903 |
2904 | thenify-all@1.6.0:
2905 | dependencies:
2906 | thenify: 3.3.1
2907 |
2908 | thenify@3.3.1:
2909 | dependencies:
2910 | any-promise: 1.3.0
2911 |
2912 | tinyexec@0.3.2: {}
2913 |
2914 | tinyglobby@0.2.14:
2915 | dependencies:
2916 | fdir: 6.4.5(picomatch@4.0.2)
2917 | picomatch: 4.0.2
2918 |
2919 | tmp@0.2.3: {}
2920 |
2921 | to-regex-range@5.0.1:
2922 | dependencies:
2923 | is-number: 7.0.0
2924 | optional: true
2925 |
2926 | totalist@3.0.1: {}
2927 |
2928 | tr46@1.0.1:
2929 | dependencies:
2930 | punycode: 2.3.1
2931 |
2932 | tree-kill@1.2.2: {}
2933 |
2934 | ts-interface-checker@0.1.13: {}
2935 |
2936 | tslib@2.8.1: {}
2937 |
2938 | tsup@8.5.0(jiti@2.4.2)(postcss@8.5.3)(typescript@5.8.3):
2939 | dependencies:
2940 | bundle-require: 5.1.0(esbuild@0.25.5)
2941 | cac: 6.7.14
2942 | chokidar: 4.0.3
2943 | consola: 3.4.2
2944 | debug: 4.4.1
2945 | esbuild: 0.25.5
2946 | fix-dts-default-cjs-exports: 1.0.1
2947 | joycon: 3.1.1
2948 | picocolors: 1.1.1
2949 | postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.3)
2950 | resolve-from: 5.0.0
2951 | rollup: 4.41.1
2952 | source-map: 0.8.0-beta.0
2953 | sucrase: 3.35.0
2954 | tinyexec: 0.3.2
2955 | tinyglobby: 0.2.14
2956 | tree-kill: 1.2.2
2957 | optionalDependencies:
2958 | postcss: 8.5.3
2959 | typescript: 5.8.3
2960 | transitivePeerDependencies:
2961 | - jiti
2962 | - supports-color
2963 | - tsx
2964 | - yaml
2965 |
2966 | typescript@5.8.3: {}
2967 |
2968 | ufo@1.6.1: {}
2969 |
2970 | undici-types@6.21.0: {}
2971 |
2972 | universalify@2.0.1: {}
2973 |
2974 | unpipe@1.0.0: {}
2975 |
2976 | update-browserslist-db@1.1.3(browserslist@4.24.5):
2977 | dependencies:
2978 | browserslist: 4.24.5
2979 | escalade: 3.2.0
2980 | picocolors: 1.1.1
2981 |
2982 | use-sync-external-store@1.5.0(react@19.1.0):
2983 | dependencies:
2984 | react: 19.1.0
2985 |
2986 | utils-merge@1.0.1: {}
2987 |
2988 | vite@6.3.5(@types/node@22.15.23)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.0)(terser@5.40.0):
2989 | dependencies:
2990 | esbuild: 0.25.5
2991 | fdir: 6.4.5(picomatch@4.0.2)
2992 | picomatch: 4.0.2
2993 | postcss: 8.5.3
2994 | rollup: 4.41.1
2995 | tinyglobby: 0.2.14
2996 | optionalDependencies:
2997 | '@types/node': 22.15.23
2998 | fsevents: 2.3.3
2999 | jiti: 2.4.2
3000 | lightningcss: 1.30.1
3001 | sass: 1.89.0
3002 | terser: 5.40.0
3003 |
3004 | web-streams-polyfill@3.3.3: {}
3005 |
3006 | webidl-conversions@4.0.2: {}
3007 |
3008 | whatwg-url@7.1.0:
3009 | dependencies:
3010 | lodash.sortby: 4.7.0
3011 | tr46: 1.0.1
3012 | webidl-conversions: 4.0.2
3013 |
3014 | which@2.0.2:
3015 | dependencies:
3016 | isexe: 2.0.0
3017 |
3018 | wrap-ansi@7.0.0:
3019 | dependencies:
3020 | ansi-styles: 4.3.0
3021 | string-width: 4.2.3
3022 | strip-ansi: 6.0.1
3023 |
3024 | wrap-ansi@8.1.0:
3025 | dependencies:
3026 | ansi-styles: 6.2.1
3027 | string-width: 5.1.2
3028 | strip-ansi: 7.1.0
3029 |
3030 | wrappy@1.0.2: {}
3031 |
3032 | yallist@3.1.1: {}
3033 |
3034 | yallist@5.0.0: {}
3035 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | onlyBuiltDependencies:
2 | - '@parcel/watcher'
3 | - esbuild
4 | - '@tailwindcss/oxide'
5 |
6 |
--------------------------------------------------------------------------------
/src/analyzer.ts:
--------------------------------------------------------------------------------
1 | // @ts-ignore
2 | import analyzer from 'analyze-css';
3 | import { Metrics } from './types/metrics';
4 |
5 | const opts = {
6 | noOffenders: true,
7 | };
8 |
9 | export async function analyze(css: string) {
10 | return new Promise(async (res, rej) => {
11 | try {
12 | const results = await analyzer(css, opts)
13 |
14 | const {
15 | metrics: {
16 | colors,
17 | mediaQueries,
18 | selectors,
19 | selectorsByAttribute,
20 | selectorsByClass,
21 | selectorsById,
22 | selectorsByPseudo,
23 | selectorsByTag,
24 | rules,
25 | declarations,
26 | },
27 | } = results;
28 |
29 | res({
30 | colors,
31 | mediaQueries,
32 | selectors,
33 | selectorsByAttribute,
34 | selectorsByClass,
35 | selectorsById,
36 | selectorsByPseudo,
37 | selectorsByTag,
38 | rules,
39 | declarations,
40 | });
41 | } catch (err) {
42 |
43 | rej(err)
44 | }
45 | });
46 | }
--------------------------------------------------------------------------------
/src/helpers/camelToTitleCase.ts:
--------------------------------------------------------------------------------
1 | const camelToTitleCase = (str: string) =>
2 | str.replace(/([A-Z])/g, ' $1').replace(/^./, function (s) {
3 | return s.toUpperCase();
4 | });
5 |
6 | export default camelToTitleCase;
7 |
--------------------------------------------------------------------------------
/src/helpers/categories.ts:
--------------------------------------------------------------------------------
1 | export const staticUtilities: Record = {
2 | 'box-border': 'boxSizing',
3 | 'box-content': 'boxSizing',
4 | block: 'display',
5 | 'inline-block': 'display',
6 | inline: 'display',
7 | flex: 'display',
8 | 'inline-flex': 'display',
9 | table: 'display',
10 | 'table-caption': 'display',
11 | 'table-cell': 'display',
12 | 'table-column': 'display',
13 | 'table-column-group': 'display',
14 | 'table-footer-group': 'display',
15 | 'table-header-group': 'display',
16 | 'table-row-group': 'display',
17 | 'table-row': 'display',
18 | 'flow-root': 'display',
19 | grid: 'display',
20 | 'inline-grid': 'display',
21 | contents: 'display',
22 | hidden: 'display',
23 | 'float-right': 'float',
24 | 'float-left': 'float',
25 | 'float-none': 'float',
26 | 'clear-left': 'clear',
27 | 'clear-right': 'clear',
28 | 'clear-both': 'clear',
29 | 'clear-none': 'clear',
30 | 'object-contain': 'objectFit',
31 | 'object-cover': 'objectFit',
32 | 'object-fill': 'objectFit',
33 | 'object-none': 'objectFit',
34 | 'object-scale-down': 'objectFit',
35 | 'overflow-auto': 'overflow',
36 | 'overflow-hidden': 'overflow',
37 | 'overflow-visible': 'overflow',
38 | 'overflow-scroll': 'overflow',
39 | 'overflow-x-auto': 'overflow',
40 | 'overflow-y-auto': 'overflow',
41 | 'overflow-x-hidden': 'overflow',
42 | 'overflow-y-hidden': 'overflow',
43 | 'overflow-x-visible': 'overflow',
44 | 'overflow-y-visible': 'overflow',
45 | 'overflow-x-scroll': 'overflow',
46 | 'overflow-y-scroll': 'overflow',
47 | 'overscroll-auto': 'overscrollBehavior',
48 | 'overscroll-contain': 'overscrollBehavior',
49 | 'overscroll-none': 'overscrollBehavior',
50 | 'overscroll-y-auto': 'overscrollBehavior',
51 | 'overscroll-y-contain': 'overscrollBehavior',
52 | 'overscroll-y-none': 'overscrollBehavior',
53 | 'overscroll-x-auto': 'overscrollBehavior',
54 | 'overscroll-x-contain': 'overscrollBehavior',
55 | 'overscroll-x-none': 'overscrollBehavior',
56 | static: 'position',
57 | fixed: 'position',
58 | absolute: 'position',
59 | relative: 'position',
60 | sticky: 'position',
61 | visible: 'visibility',
62 | invisible: 'visibility',
63 | 'flex-row': 'flex',
64 | 'flex-row-reverse': 'flex',
65 | 'flex-col': 'flex',
66 | 'flex-col-reverse': 'flex',
67 | 'flex-wrap': 'flex',
68 | 'flex-wrap-reverse': 'flex',
69 | 'flex-nowrap': 'flex',
70 | 'col-auto': 'grid',
71 | 'row-auto': 'grid',
72 | 'grid-flow-row': 'grid',
73 | 'grid-flow-col': 'grid',
74 | 'grid-flow-row-dense': 'grid',
75 | 'grid-flow-col-dense': 'grid',
76 | 'justify-start': 'justifyContent',
77 | 'justify-end': 'justifyContent',
78 | 'justify-center': 'justifyContent',
79 | 'justify-between': 'justifyContent',
80 | 'justify-around': 'justifyContent',
81 | 'justify-evenly': 'justifyContent',
82 | 'justify-items-auto': 'justifyItems',
83 | 'justify-items-start': 'justifyItems',
84 | 'justify-items-end': 'justifyItems',
85 | 'justify-items-center': 'justifyItems',
86 | 'justify-items-stretch': 'justifyItems',
87 | 'justify-self-auto': 'justifySelf',
88 | 'justify-self-start': 'justifySelf',
89 | 'justify-self-end': 'justifySelf',
90 | 'justify-self-center': 'justifySelf',
91 | 'justify-self-stretch': 'justifySelf',
92 | 'content-center': 'alignContent',
93 | 'content-start': 'alignContent',
94 | 'content-end': 'alignContent',
95 | 'content-between': 'alignContent',
96 | 'content-around': 'alignContent',
97 | 'content-evenly': 'alignContent',
98 | 'items-start': 'alignItems',
99 | 'items-end': 'alignItems',
100 | 'items-center': 'alignItems',
101 | 'items-baseline': 'alignItems',
102 | 'items-stretch': 'alignItems',
103 | 'self-auto': 'alignSelf',
104 | 'self-start': 'alignSelf',
105 | 'self-end': 'alignSelf',
106 | 'self-center': 'alignSelf',
107 | 'self-stretch': 'alignSelf',
108 | 'place-content-center': 'placeContent',
109 | 'place-content-start': 'placeContent',
110 | 'place-content-end': 'placeContent',
111 | 'place-content-between': 'placeContent',
112 | 'place-content-around': 'placeContent',
113 | 'place-content-evenly': 'placeContent',
114 | 'place-content-stretch': 'placeContent',
115 | 'place-items-auto': 'placeItems',
116 | 'place-items-start': 'placeItems',
117 | 'place-items-end': 'placeItems',
118 | 'place-items-center': 'placeItems',
119 | 'place-items-stretch': 'placeItems',
120 | 'place-self-auto': 'placeSelf',
121 | 'place-self-start': 'placeSelf',
122 | 'place-self-end': 'placeSelf',
123 | 'place-self-center': 'placeSelf',
124 | 'place-self-stretch': 'placeSelf',
125 | antialiased: 'fontSmoothing',
126 | 'subpixel-antialiased': 'font',
127 | italic: 'font',
128 | 'not-italic': 'font',
129 | 'normal-nums': 'font',
130 | ordinal: 'font',
131 | 'slashed-zero': 'font',
132 | 'lining-nums': 'font',
133 | 'oldstyle-nums': 'font',
134 | 'proportional-nums': 'font',
135 | 'tabular-nums': 'font',
136 | 'diagonal-fractions': 'font',
137 | 'stacked-fractions': 'font',
138 | 'list-inside': 'listStylePosition',
139 | 'list-outside': 'listStylePosition',
140 | 'text-left': 'textAlign',
141 | 'text-center': 'textAlign',
142 | 'text-right': 'textAlign',
143 | 'text-justify': 'textAlign',
144 | underline: 'textDecoration',
145 | 'line-through': 'textDecoration',
146 | 'no-underline': 'textDecoration',
147 | uppercase: 'textTransform',
148 | lowercase: 'textTransform',
149 | capitalize: 'textTransform',
150 | 'normal-case': 'textTransform',
151 | truncate: 'textOverflow',
152 | 'overflow-ellipsis': 'textOverflow',
153 | 'overflow-clip': 'textOverflow',
154 | 'align-baseline': 'verticalAlign',
155 | 'align-top': 'verticalAlign',
156 | 'align-middle': 'verticalAlign',
157 | 'align-bottom': 'verticalAlign',
158 | 'align-text-top': 'verticalAlign',
159 | 'align-text-bottom': 'verticalAlign',
160 | 'whitespace-normal': 'whitespace',
161 | 'whitespace-nowrap': 'whitespace',
162 | 'whitespace-pre': 'whitespace',
163 | 'whitespace-pre-line': 'whitespace',
164 | 'whitespace-pre-wrap': 'whitespace',
165 | 'break-normal': 'wordBreak',
166 | 'break-words': 'wordBreak',
167 | 'break-all': 'wordBreak',
168 | 'bg-fixed': 'background',
169 | 'bg-local': 'background',
170 | 'bg-scroll': 'background',
171 | 'bg-clip-border': 'background',
172 | 'bg-clip-padding': 'background',
173 | 'bg-clip-content': 'background',
174 | 'bg-clip-text': 'background',
175 | 'bg-repeat': 'background',
176 | 'bg-no-repeat': 'background',
177 | 'bg-repeat-x': 'background',
178 | 'bg-repeat-y': 'background',
179 | 'bg-repeat-round': 'background',
180 | 'bg-repeat-space': 'background',
181 | 'border-solid': 'border',
182 | 'border-dashed': 'border',
183 | 'border-dotted': 'border',
184 | 'border-double': 'border',
185 | 'border-none': 'border',
186 | 'border-collapse': 'border',
187 | 'border-separate': 'border',
188 | 'table-auto': 'table',
189 | 'table-fixed': 'table',
190 | transform: 'transform',
191 | 'transform-gpu': 'transform',
192 | 'transform-none': 'transform',
193 | 'appearance-none': 'appearance',
194 | 'pointer-events-none': 'pointerEvents',
195 | 'pointer-events-auto': 'pointerEvents',
196 | 'resize-none': 'resize',
197 | 'resize-y': 'resize',
198 | 'resize-x': 'resize',
199 | resize: 'resize',
200 | 'select-none': 'userSelect',
201 | 'select-text': 'userSelect',
202 | 'select-all': 'userSelect',
203 | 'select-auto': 'userSelect',
204 | 'fill-current': 'fill',
205 | 'stroke-current': 'stroke',
206 | 'sr-only': 'accessibility',
207 | 'not-sr-only': 'accessibility',
208 | };
209 |
210 | export const dynamicUtilities: Record = {
211 | container: 'container',
212 | space: 'space',
213 | divide: 'divide',
214 | bg: 'background',
215 | from: 'gradientColor',
216 | via: 'gradientColor',
217 | to: 'gradientColor',
218 | border: 'border',
219 | rounded: 'borderRadius',
220 | cursor: 'cursor',
221 | flex: 'flex',
222 | order: 'order',
223 | font: 'font',
224 | h: 'size',
225 | leading: 'lineHeight',
226 | list: 'listStyleType',
227 | m: 'margin',
228 | my: 'margin',
229 | mx: 'margin',
230 | mt: 'margin',
231 | mr: 'margin',
232 | mb: 'margin',
233 | ml: 'margin',
234 | min: 'size',
235 | max: 'size',
236 | object: 'objectPosition',
237 | opacity: 'opacity',
238 | outline: 'outline',
239 | p: 'padding',
240 | py: 'padding',
241 | px: 'padding',
242 | pt: 'padding',
243 | pr: 'padding',
244 | pb: 'padding',
245 | pl: 'padding',
246 | placeholder: 'placeholder',
247 | inset: 'inset',
248 | top: 'position',
249 | right: 'position',
250 | bottom: 'position',
251 | left: 'position',
252 | shadow: 'boxShadow',
253 | ring: 'ring',
254 | fill: 'fill',
255 | stroke: 'stroke',
256 | text: 'text',
257 | tracking: 'letterSpacing',
258 | w: 'size',
259 | z: 'zIndex',
260 | gap: 'gap',
261 | auto: 'grid',
262 | grid: 'grid',
263 | col: 'grid',
264 | row: 'grid',
265 | origin: 'transform',
266 | scale: 'transform',
267 | rotate: 'transform',
268 | translate: 'transform',
269 | skew: 'transform',
270 | transition: 'animation',
271 | ease: 'animation',
272 | duration: 'animation',
273 | delay: 'animation',
274 | animate: 'animation',
275 | };
276 |
--------------------------------------------------------------------------------
/src/helpers/readModule.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { existsSync } from 'fs-extra';
3 |
4 | export function readModule(file: string) {
5 | const filePath = path.resolve(file);
6 | if (existsSync(filePath)) {
7 | return require(filePath);
8 | }
9 | return false;
10 | }
11 |
--------------------------------------------------------------------------------
/src/helpers/server.ts:
--------------------------------------------------------------------------------
1 | import { resolve } from 'path';
2 | import http from 'http';
3 | import connect from 'connect';
4 | import sirv from 'sirv';
5 | import { version } from '../../package.json';
6 | import { Metrics } from '../types/metrics';
7 | import ClassnameInfo from '../types/classnameInfo';
8 |
9 | export async function startServer(output: {
10 | metrics: Metrics;
11 | categories: ClassnameInfo[];
12 | }) {
13 | const getPort = await import('get-port');
14 | const port = await getPort.default();
15 | const app = connect();
16 | const url = `http://localhost:${port}`;
17 |
18 | app.use('/api', async function fooMiddleware(_, res) {
19 | res.write(JSON.stringify(output));
20 | res.statusCode = 500;
21 | return res.end();
22 | });
23 |
24 | app.use(sirv(resolve(__dirname, '../app/dist'), { dev: true, single: true }));
25 |
26 | http.createServer(app).listen(port);
27 |
28 | const openUrl = await import('open')
29 | openUrl.default(url);
30 |
31 | console.log(`TailwindCSS Analysis ${version} report open at ${url}`);
32 |
33 | return app;
34 | }
35 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { resolve, join } from 'path';
2 | import { readFileSync, writeFileSync } from 'fs';
3 | import cac from 'cac';
4 | import spawn from 'cross-spawn';
5 | import { version } from '../package.json';
6 | import { readModule } from './helpers/readModule';
7 | import { analyze } from './analyzer';
8 | import parseCSS from './parse';
9 | import { startServer } from './helpers/server';
10 |
11 | const cli = cac('tailwindcss-analysis');
12 |
13 | cli
14 | .help()
15 | .version(version)
16 | .option('--open', 'Open in browser', { default: true })
17 | .option('--json [filepath]', 'Output analysis result file in JSON');
18 |
19 | const parsed = cli.parse();
20 |
21 | async function run() {
22 | const root = resolve(process.cwd());
23 |
24 | if (parsed.options.help) {
25 | return;
26 | }
27 |
28 | try {
29 | const tailwindConfig = readModule(join(root, '/tailwind.config.js'));
30 | if (
31 | !tailwindConfig ||
32 | ((!tailwindConfig.purge || tailwindConfig.purge.length === 0) &&
33 | (!tailwindConfig.content || tailwindConfig.content.length === 0))
34 | ) {
35 | console.log(
36 | 'Ensure that files to `purge/content` are configured in your tailwind config file'
37 | );
38 | return;
39 | }
40 | } catch {
41 | console.log('tailwind.config.js file does not exist in the project');
42 | return;
43 | }
44 |
45 | spawn.sync('npx', ['tailwindcss', '--minify', '-o', 'tailwind-output.css'], {
46 | env: { ...process.env, NODE_ENV: 'production' },
47 | stdio: 'ignore',
48 | });
49 |
50 | let tailwindCSSFile = '';
51 |
52 | try {
53 | tailwindCSSFile = readFileSync(join(root, 'tailwind-output.css'), {
54 | encoding: 'utf-8',
55 | });
56 | } catch {
57 | console.log('Failed to parse and generate the tailwind css output');
58 | return;
59 | }
60 |
61 | const metrics = await analyze(tailwindCSSFile);
62 |
63 | const categories = parseCSS(tailwindCSSFile);
64 |
65 | const output = {
66 | metrics,
67 | categories,
68 | };
69 |
70 | if (parsed.options.json) {
71 | let jsonPath = join(root, parsed.options.json);
72 | if (!jsonPath.endsWith('.json')) {
73 | jsonPath = join(jsonPath, 'tailwindcss-analysis-report.json');
74 | }
75 |
76 | // generate JSON
77 | await writeFileSync(jsonPath, JSON.stringify(output), 'utf-8');
78 | }
79 |
80 | if (parsed.options.open) {
81 | startServer(output);
82 | }
83 | }
84 |
85 | run();
86 |
--------------------------------------------------------------------------------
/src/parse/index.ts:
--------------------------------------------------------------------------------
1 | // @ts-ignore
2 | import { toJSON } from 'cssjson';
3 | import { dynamicUtilities, staticUtilities } from '../helpers/categories';
4 | import ClassnameInfo from '../types/classnameInfo';
5 | import camelToTitleCase from '../helpers/camelToTitleCase';
6 |
7 | export default function parseCSS(cssString: string) {
8 | const json = toJSON(cssString) as Record;
9 |
10 | const categorizedCSS: ClassnameInfo[] = [];
11 |
12 | Object.entries(json?.children || {}).forEach(([classNames]) => {
13 |
14 | classNames.split(',').forEach(className => {
15 |
16 | const info: Partial = {};
17 |
18 | let name = className.startsWith('.') ? className.slice(1) : className;
19 |
20 | if (name[0] === '!') {
21 | info.important = true;
22 | name = name.slice(1);
23 | }
24 | if (name.startsWith('@media')) {
25 | info.category = '@media';
26 | } else if (name.includes(':')) {
27 | const variants = name.split(/:/g);
28 | info.prefixes = variants.slice(0, -1);
29 | name = variants.slice(-1)[0];
30 | }
31 |
32 | info.name = name;
33 |
34 | const [type] = (name.startsWith('-') ? name.slice(1) : name).split('-');
35 |
36 | if (!info.category) {
37 | if (name in staticUtilities) {
38 | info.category = staticUtilities[name];
39 | } else if (type in dynamicUtilities && type !== name) {
40 | info.category = dynamicUtilities[type];
41 | } else if (name.includes('[') && name.includes(']')) {
42 | info.category = 'variable';
43 | }
44 | }
45 |
46 | info.category = info.category || 'unknown';
47 |
48 | info.category = camelToTitleCase(info.category);
49 |
50 | categorizedCSS.push(info as ClassnameInfo);
51 |
52 | })
53 | });
54 |
55 | return categorizedCSS;
56 | }
57 |
--------------------------------------------------------------------------------
/src/types/classnameInfo.ts:
--------------------------------------------------------------------------------
1 | export default interface ClassnameInfo {
2 | name: string;
3 | category: string;
4 | prefixes?: string[];
5 | important?: boolean;
6 | }
7 |
--------------------------------------------------------------------------------
/src/types/metrics.ts:
--------------------------------------------------------------------------------
1 | export interface Metrics {
2 | colors: number;
3 | mediaQueries: number;
4 | selectors: number;
5 | selectorsByAttribute: number;
6 | selectorsByClass: number;
7 | selectorsById: number;
8 | selectorsByPseudo: number;
9 | selectorsByTag: number;
10 | rules: number; // CSS Rules
11 | declarations: number; // Properties
12 | }
13 |
--------------------------------------------------------------------------------
/test/index.test.ts:
--------------------------------------------------------------------------------
1 | // test
2 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | // see https://www.typescriptlang.org/tsconfig to better understand tsconfigs
3 | "include": ["src", "types", "app/src"],
4 | "exclude": ["test"],
5 | "compilerOptions": {
6 | "module": "esnext",
7 | "lib": ["dom", "esnext", "DOM.Iterable"],
8 | "importHelpers": true,
9 | // output .d.ts declaration files for consumers
10 | "declaration": true,
11 | // output .js.map sourcemap files for consumers
12 | "sourceMap": true,
13 | // match output dir to input dir. e.g. dist/index instead of dist/src/index
14 | // "rootDir": ".",
15 | // stricter type-checking for stronger correctness. Recommended by TS
16 | "strict": true,
17 | // linter checks for common issues
18 | "noImplicitReturns": true,
19 | "noFallthroughCasesInSwitch": true,
20 | // noUnused* overlap with @typescript-eslint/no-unused-vars, can disable if duplicative
21 | "noUnusedLocals": true,
22 | "noUnusedParameters": true,
23 | // use Node's module resolution algorithm, instead of the legacy TS one
24 | "moduleResolution": "node",
25 | // transpile JSX to React.createElement
26 | "jsx": "react",
27 | // interop between ESM and CJS modules. Recommended by TS
28 | "esModuleInterop": true,
29 | // significant perf increase by skipping checking .d.ts files, particularly those in node_modules. Recommended by TS
30 | "skipLibCheck": true,
31 | // error out if import and file system have a casing mismatch. Recommended by TS
32 | "forceConsistentCasingInFileNames": true,
33 |
34 | "noEmit": true,
35 | "resolveJsonModule": true,
36 | "target": "ES2020",
37 | "allowJs": false,
38 | "allowSyntheticDefaultImports": true,
39 | "isolatedModules": true,
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/vite.config.mts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import react from '@vitejs/plugin-react';
3 | import tailwindcss from '@tailwindcss/vite';
4 |
5 | export default defineConfig({
6 | plugins: [react(), tailwindcss()],
7 | root: './app',
8 | });
9 |
--------------------------------------------------------------------------------