├── site ├── next.config.js ├── public │ └── respinner.gif └── app │ ├── opengraph-image.png │ ├── icon.svg │ ├── layout.js │ ├── page.js │ └── styles.css ├── .gitignore ├── tsconfig.json ├── src ├── index.ts └── components │ ├── rotate.tsx │ ├── beat.tsx │ ├── bounce.tsx │ ├── clock.tsx │ ├── copper.tsx │ ├── dash.tsx │ ├── circular.tsx │ ├── wave.tsx │ └── spin.tsx ├── package.json ├── index.d.ts ├── README.md └── pnpm-lock.yaml /site/next.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | cacheComponents: true, 3 | } 4 | -------------------------------------------------------------------------------- /site/public/respinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huozhi/respinner/HEAD/site/public/respinner.gif -------------------------------------------------------------------------------- /site/app/opengraph-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huozhi/respinner/HEAD/site/app/opengraph-image.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | docs/dist 3 | dist/ 4 | *.log 5 | package-lock.json 6 | .DS_Store 7 | .next 8 | 9 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "module": "ESNext", 5 | "moduleResolution": "bundler", 6 | "jsx": "react" 7 | }, 8 | "include": [ 9 | "src" 10 | ] 11 | } -------------------------------------------------------------------------------- /site/app/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as BeatLoading } from './components/beat' 2 | export { default as BounceLoading } from './components/bounce' 3 | export { default as CircularLoading } from './components/circular' 4 | export { default as ClockLoading } from './components/clock' 5 | export { default as RotateLoading } from './components/rotate' 6 | export { default as SpinLoading } from './components/spin' 7 | export { default as WaveLoading } from './components/wave' 8 | export { default as DashLoading } from './components/dash' 9 | export { default as CopperLoading } from './components/copper' 10 | -------------------------------------------------------------------------------- /site/app/layout.js: -------------------------------------------------------------------------------- 1 | import './styles.css' 2 | import { JetBrains_Mono, Space_Mono } from 'next/font/google' 3 | 4 | const jetbrainsMono = JetBrains_Mono({ 5 | subsets: ['latin'], 6 | weight: ['400', '500', '600', '700', '800'], 7 | variable: '--font-jetbrains-mono', 8 | display: 'swap', 9 | }) 10 | 11 | const spaceMono = Space_Mono({ 12 | subsets: ['latin'], 13 | weight: ['400', '700'], 14 | variable: '--font-space-mono', 15 | display: 'swap', 16 | }) 17 | 18 | export default function layout({ children }) { 19 | return ( 20 | 21 | 22 | 23 | 24 | {children} 25 | 26 | 27 | ) 28 | } 29 | 30 | export const metadata = { 31 | title: 'Respinner | SVG react spinners', 32 | description: 'Pretty and customizable SVG spinners for React.js', 33 | } 34 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "respinner", 3 | "version": "5.0.0", 4 | "description": "React SVG spinner components", 5 | "type": "module", 6 | "main": "./dist/index.js", 7 | "types": "./dist/index.d.ts", 8 | "scripts": { 9 | "clean": "rm -rf ./dist", 10 | "prepublishOnly": "npm run clean && npm run build", 11 | "build:docs": "pnpm build && next build ./site", 12 | "build": "bunchee", 13 | "build:watch": "pnpm build --watch", 14 | "dev": "next dev ./site" 15 | }, 16 | "sideEffects": false, 17 | "files": [ 18 | "*.md", 19 | "dist" 20 | ], 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/huozhi/respinner.git" 24 | }, 25 | "keywords": [ 26 | "react", 27 | "loading" 28 | ], 29 | "author": "huozhi", 30 | "license": "MIT", 31 | "homepage": "https://github.com/huozhi/respinner#readme", 32 | "devDependencies": { 33 | "@types/react": "^19.2.6", 34 | "@types/react-dom": "^19.2.3", 35 | "bunchee": "^6.6.2", 36 | "next": "16.0.7", 37 | "react": "^19.2.1", 38 | "react-dom": "^19.2.1", 39 | "respinner": "link:./", 40 | "typescript": "^5.9.3" 41 | }, 42 | "peerDependencies": { 43 | "react": ">= 18" 44 | }, 45 | "packageManager": "pnpm@7.33.5" 46 | } 47 | -------------------------------------------------------------------------------- /src/components/rotate.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const RotateLoading = ( 4 | { size = 40, opacity = 0.2, strokeWidth = 4, duration = 1.6, color, stroke, ...rest }: { 5 | size?: number 6 | opacity?: number 7 | strokeWidth?: number 8 | duration?: number 9 | color?: string 10 | stroke?: string 11 | } & React.SVGProps) => { 12 | const radius = size / 2 - strokeWidth 13 | const center = radius + strokeWidth 14 | const strokeColor = color || stroke 15 | const circleProps = { 16 | strokeWidth, 17 | stroke: strokeColor, 18 | r: radius, 19 | cx: radius + strokeWidth, 20 | cy: radius + strokeWidth, 21 | fill: 'none', 22 | } 23 | 24 | return ( 25 | 26 | 27 | 28 | 37 | 38 | 39 | ) 40 | } 41 | 42 | export default RotateLoading 43 | -------------------------------------------------------------------------------- /src/components/beat.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const BeatLoading = ( 4 | { duration = 0.8, count = 6, size = 8, gap = 6, color, fill, ...rest }: { 5 | duration?: number 6 | count?: number 7 | size?: number 8 | gap?: number 9 | color?: string 10 | } & React.SVGProps) => { 11 | const viewWidth = (size + gap) * count - gap 12 | const fillColor = color || fill 13 | 14 | return ( 15 | 16 | {Array.from({ length: count }).map((_, i) => { 17 | const cx = size * (i + 1) + gap * i - size / 2 18 | const cy = size / 2 19 | 20 | return ( 21 | // @ts-expect-error transformOrigin is not a valid prop for svg 22 | 23 | 32 | 33 | ) 34 | })} 35 | 36 | ) 37 | } 38 | 39 | export default BeatLoading 40 | -------------------------------------------------------------------------------- /src/components/bounce.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const BounceLoading = ( 4 | { gap = 6, count = 4, barWidth = 4, barHeight = 16, duration = 0.8, color, fill, ...rest }: { 5 | gap?: number 6 | count?: number 7 | barWidth?: number 8 | barHeight?: number 9 | duration?: number 10 | color?: string 11 | } & React.SVGProps) => { 12 | const viewWidth = (barWidth + gap) * count - gap 13 | const fillColor = color || fill 14 | 15 | return ( 16 | 17 | {Array.from({ length: count }).map((_, i) => { 18 | return ( 19 | 27 | 36 | 37 | ) 38 | })} 39 | 40 | ) 41 | } 42 | 43 | export default BounceLoading 44 | -------------------------------------------------------------------------------- /src/components/clock.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const ClockLoading = ( 4 | { size = 40, duration = 2, strokeWidth = 2, color, stroke, ...rest }: { 5 | size?: number 6 | duration?: number 7 | strokeWidth?: number 8 | color?: string 9 | stroke?: string 10 | } & React.SVGProps) => { 11 | const center = size / 2 12 | const strokeColor = color || stroke 13 | const needleProps = { 14 | strokeWidth: strokeWidth, 15 | stroke: strokeColor, 16 | strokeLinecap: 'round' as const, 17 | x1: center, 18 | y1: strokeWidth * 2, 19 | x2: center, 20 | y2: size - strokeWidth * 2, 21 | } 22 | 23 | return ( 24 | 25 | 26 | 27 | 36 | 37 | 38 | ) 39 | } 40 | 41 | export default ClockLoading 42 | -------------------------------------------------------------------------------- /src/components/copper.tsx: -------------------------------------------------------------------------------- 1 | import React, { useId } from 'react' 2 | 3 | const createTransRotate = (uniqId: string) => ( 4 | `@keyframes TransRotate${uniqId}` + 5 | '{' + 6 | '0% {transform:rotate(45deg) scale(1);}' + 7 | '50% {transform:rotate(405deg) scale(.2);}' + 8 | '100% {transform:rotate(765deg) scale(1);}' 9 | ) 10 | 11 | const CopperLoading = ( 12 | { size = 40, strokeWidth = 4, duration = 2, color, stroke, fill, ...rest }: { 13 | size?: number 14 | strokeWidth?: number 15 | duration?: number 16 | color?: string 17 | } & React.SVGProps) => { 18 | const uniqId = useId() 19 | const fillColor = color || fill 20 | const strokeColor = color || stroke || fill 21 | const commonStyle = { 22 | transformOrigin: 'center', 23 | animation: `TransRotate${uniqId} ${duration}s infinite`, 24 | } 25 | return ( 26 | 27 | 28 | 29 | 41 | 42 | ) 43 | } 44 | 45 | export default CopperLoading 46 | -------------------------------------------------------------------------------- /src/components/dash.tsx: -------------------------------------------------------------------------------- 1 | import React, { useId } from 'react' 2 | 3 | const DashedRotateAnimation = (uniqId: string, dash: number) => 4 | `@keyframes DashedRotate${uniqId}` + 5 | '{' + 6 | `0% {stroke-dasharray:${dash} ${dash} 1 ${dash};transform:rotate(0deg);}` + 7 | `50% {stroke-dasharray:${dash};transform:rotate(360deg);}` + 8 | `100% {stroke-dasharray:${dash} ${dash} 1 ${dash};transform:rotate(720deg);}` + 9 | '}' 10 | 11 | const DashLoading = ( 12 | { size = 40, strokeWidth = 4, duration = 1.8, color, stroke, ...rest }: { 13 | size?: number 14 | strokeWidth?: number 15 | duration?: number 16 | color?: string 17 | stroke?: string 18 | } & React.SVGProps) => { 19 | const radius = size / 2 - strokeWidth 20 | const dash = (Math.PI * radius) / 5 21 | const uniqId = useId() 22 | const strokeColor = color || stroke 23 | 24 | return ( 25 | 26 | 27 | 42 | 43 | ) 44 | } 45 | 46 | export default DashLoading 47 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | import type { FunctionComponent, SVGAttributes } from 'react' 2 | 3 | export const BeatLoading: FunctionComponent<{ 4 | duration?: number, 5 | count?: number, 6 | fill?: string, 7 | size?: number, 8 | gap?: number 9 | } & SVGAttributes>; 10 | export const BounceLoading: FunctionComponent<{ 11 | duration?: number, 12 | count?: number, 13 | barWidth?: number, 14 | barHeight?: number, 15 | gap?: number 16 | } & SVGAttributes>; 17 | export const CircularLoading: FunctionComponent<{ 18 | duration?: number, 19 | size?: number, 20 | } & SVGAttributes>; 21 | export const ClockLoading: FunctionComponent<{ 22 | size?: number, 23 | duration?: number, 24 | } & SVGAttributes>; 25 | export const RotateLoading: FunctionComponent<{ 26 | size?: number, 27 | duration?: number, 28 | opacity?: number, 29 | } & SVGAttributes>; 30 | export const SpinLoading: FunctionComponent<{ 31 | size?: number, 32 | barWidth?: number, 33 | barHeight?: number, 34 | count?: number, 35 | duration?: number, fill, borderRadius 36 | } & SVGAttributes>; 37 | export const WaveLoading: FunctionComponent<{ 38 | size?: number, 39 | count?: number, 40 | duration?: number, 41 | } & SVGAttributes>; 42 | export const DashLoading: FunctionComponent<{ 43 | size?: number, 44 | duration?: number, 45 | } & SVGAttributes>; 46 | export const CopperLoading: FunctionComponent<{ 47 | size?: number, 48 | duration?: number 49 | } & SVGAttributes>; 50 | -------------------------------------------------------------------------------- /src/components/circular.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | // View box is based on 50x50 size 4 | // from: https://codepen.io/jczimm/pen/vEBpoL 5 | const CIRCLE_RADIUS = 50 / 2 6 | 7 | const CircularLoading = ( 8 | { size = 40, strokeWidth = 5, linecap = 'round', duration = 1, color, stroke, ...rest }: { 9 | size?: number 10 | strokeWidth?: number 11 | linecap?: React.SVGAttributes['strokeLinecap'] 12 | duration?: number 13 | color?: string 14 | stroke?: string 15 | } & React.SVGProps) => { 16 | const center = CIRCLE_RADIUS 17 | const strokeColor = color || stroke 18 | return ( 19 | 20 | 29 | 38 | 44 | 45 | 46 | 47 | ) 48 | } 49 | 50 | export default CircularLoading 51 | -------------------------------------------------------------------------------- /src/components/wave.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const WaveLoading = ( 4 | { size = 40, count = 3, duration = 1.5, strokeWidth = 2, color, stroke, ...rest }: { 5 | size?: number 6 | count?: number 7 | duration?: number 8 | strokeWidth?: number 9 | color?: string 10 | } & React.SVGProps) => { 11 | const radius = size / 2 - strokeWidth 12 | const strokeColor = color || stroke 13 | 14 | return ( 15 | 16 | {Array.from({ length: count }).map((_, i) => { 17 | const pos = size / 2 18 | 19 | return ( 20 | 25 | transformOrigin={`${pos}px ${pos}px`} 26 | fill="none" 27 | r={radius} 28 | cx={pos} 29 | cy={pos} 30 | > 31 | 38 | 48 | 49 | ) 50 | })} 51 | 52 | ) 53 | } 54 | 55 | export default WaveLoading 56 | -------------------------------------------------------------------------------- /src/components/spin.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SpinLoading = ({ 4 | size = 40, 5 | count = 8, 6 | barWidth = 4, 7 | barHeight = 10, 8 | duration = 1, 9 | borderRadius = 1, 10 | color, 11 | fill, 12 | ...rest 13 | }: { 14 | size?: number 15 | count?: number 16 | barWidth?: number 17 | barHeight?: number 18 | duration?: number 19 | borderRadius?: number 20 | color?: string 21 | } & React.SVGProps) => { 22 | const radius = size / 2 - barHeight / 2 23 | const fillColor = color || fill 24 | 25 | return ( 26 | 27 | {Array.from({ length: count }).map((_, i) => { 28 | const angle = (360 / count) * i 29 | /* (barWidth + borderRadius) / 2 is used to fix the excursion caused by thickness */ 30 | const x = Math.cos((Math.PI * angle) / 180) * radius + radius + (barWidth + borderRadius) / 2 31 | const y = Math.sin((Math.PI * angle) / 180) * radius + radius 32 | 33 | return ( 34 | 45 | 52 | 53 | ) 54 | })} 55 | 56 | ) 57 | } 58 | 59 | export default SpinLoading 60 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Respinner 2 | ![npm-version](https://img.shields.io/npm/v/respinner.svg?style=flat-square) 3 | 4 | > react components for spinners or loaders. Each loader was combined css animation and render dom as svg. 5 | easily controlled by react porps. 6 | 7 | You could change the count of spinner's children by props `count`, also the `color` of themselves. All of them built with SVG, so you can easily scale them with `width` and `height`. 8 | 9 | ### Examples 10 | 11 | ![demo](https://raw.githubusercontent.com/huozhi/respinner/56c645bffed017c785e82c8fc1e3336f7dbe5f6b/docs/public/respinner.gif) 12 | 13 | See more details in `demo` directory or visit [website](https://respinner.vercel.app/) 14 | 15 | ### Usage 16 | 17 | ```sh 18 | npm install --save respinner 19 | ``` 20 | 21 | Just import it when use with react. Issues go to [issues](https://github.com/huozhi/respinner/issues). 22 | 23 | #### Basic 24 | 25 | ```tsx 26 | import React from 'react' 27 | import { 28 | BeatLoading, BounceLoading, CircularLoading, 29 | ClockLoading, RotateLoading, SpinLoading, 30 | WaveLoading, DashLoading, CopperLoading 31 | } from 'respinner' 32 | 33 | function LoadingComponents() { 34 |
35 | // use with color prop 36 | // color sets both fill and stroke 37 | // or use fill/stroke directly 38 |
39 | } 40 | ``` 41 | 42 | #### Use with SVG `use` 43 | 44 | ```tsx 45 | // pre-define a spinner 46 | 47 | 48 | // reuse them 49 | 50 | 51 | ``` 52 | 53 | ### API 54 | 55 | Any SVG props could be used in these components. All components support a `color` prop that sets both `fill` and `stroke` properties. If `color` is specified, it takes precedence over `fill` or `stroke` props. 56 | 57 | The following are the default props for these components: 58 | 59 |
60 | 1. BeatLoading 61 | 62 | - `gap`: `6` 63 | - `size`: `8` 64 | - `count`: `6` 65 | - `duration`: `0.8` 66 | - `color`: Sets `fill` (prefers `color` over `fill`) 67 | 68 |
69 | 70 |
71 | 2. CircularLoading 72 | 73 | - `size`: `40` 74 | - `strokeWidth`: `4` 75 | - `linecap`: `'round'` 76 | - `color`: Sets `stroke` (prefers `color` over `stroke`) 77 | 78 |
79 | 80 |
81 | 3. BounceLoading 82 | 83 | - `gap`: `6` 84 | - `count`: `4` 85 | - `barWidth`: `4` 86 | - `barHeight`: `16` 87 | - `duration`: `0.8` 88 | - `color`: Sets `fill` (prefers `color` over `fill`) 89 | 90 |
91 | 92 |
93 | 4. RotateLoading 94 | 95 | - `size`: `40` 96 | - `opacity`: `0.2` 97 | - `strokeWidth`: `4` 98 | - `color`: Sets `stroke` (prefers `color` over `stroke`) 99 | 100 |
101 | 102 |
103 | 5. SpinLoading 104 | 105 | - `size`: `40` 106 | - `count`: `8` 107 | - `barWidth`: `4` 108 | - `duration`: `1` 109 | - `barHeight`: `10` 110 | - `borderRadius`: `1` 111 | - `color`: Sets `fill` (prefers `color` over `fill`) 112 | 113 |
114 | 115 |
116 | 6. WaveLoading 117 | 118 | - `size`: `40` 119 | - `count`: `3` 120 | - `duration`: `1.5` 121 | - `strokeWidth`: `2` 122 | - `color`: Sets `stroke` (prefers `color` over `stroke`) 123 | 124 |
125 | 126 |
127 | 7. ClockLoading 128 | 129 | - `size`: `40` 130 | - `duration`: `2` 131 | - `strokeWidth`: `2` 132 | - `color`: Sets `stroke` (prefers `color` over `stroke`) 133 | 134 |
135 | 136 |
137 | 8. DashLoading 138 | 139 | - `size`: `40` 140 | - `duration`: `1.8` 141 | - `strokeWidth`: `4` 142 | - `color`: Sets `stroke` (prefers `color` over `stroke`) 143 | 144 |
145 | 146 |
147 | 9. CopperLoading 148 | 149 | - `size`: `40` 150 | - `strokeWidth`: `4` 151 | - `color`: Sets both `fill` and `stroke` (prefers `color` over `fill`/`stroke`) 152 | 153 |
154 | 155 | ### Development 156 | 157 | ```sh 158 | pnpm install 159 | pnpm dev 160 | 161 | # see demo in http://localhost:3000 162 | ``` 163 | 164 | ### Build 165 | 166 | ```sh 167 | pnpm run build # build lib 168 | pnpm run build:docs # build docs 169 | ``` 170 | 171 | ### License 172 | 173 | MIT -------------------------------------------------------------------------------- /site/app/page.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { 3 | BeatLoading, 4 | BounceLoading, 5 | CircularLoading, 6 | ClockLoading, 7 | RotateLoading, 8 | SpinLoading, 9 | WaveLoading, 10 | CopperLoading, 11 | DashLoading, 12 | } from '../../src/index' 13 | 14 | const color = '#111111' 15 | 16 | const spinners = [ 17 | { 18 | name: 'Beat', 19 | code: ``, 20 | component: , 21 | id: 'RSP-01' 22 | }, 23 | { 24 | name: 'Circular', 25 | code: ``, 26 | component: , 27 | id: 'RSP-02' 28 | }, 29 | { 30 | name: 'Bounce', 31 | code: ``, 32 | component: , 33 | id: 'RSP-03' 34 | }, 35 | { 36 | name: 'Rotate', 37 | code: ``, 38 | component: , 39 | id: 'RSP-04' 40 | }, 41 | { 42 | name: 'Spin', 43 | code: ``, 44 | component: , 45 | id: 'RSP-05' 46 | }, 47 | { 48 | name: 'Wave', 49 | code: ``, 50 | component: , 51 | id: 'RSP-06' 52 | }, 53 | { 54 | name: 'Clock', 55 | code: ``, 56 | component: , 57 | id: 'RSP-07' 58 | }, 59 | { 60 | name: 'Dash', 61 | code: ``, 62 | component: , 63 | id: 'RSP-08' 64 | }, 65 | { 66 | name: 'Copper', 67 | code: ``, 68 | component: , 69 | id: 'RSP-09' 70 | }, 71 | ] 72 | 73 | export default function App() { 74 | return ( 75 |
76 |
77 |
78 |

RESPINNER

79 |

80 | Elegant Spinners for React 81 |

82 | 100 |
101 | 102 |
103 |
104 |
105 |
106 |
INSTALLATION
107 |
108 | npm install respinner 109 |
110 |
111 |
112 |
113 |
114 | 115 |
116 |
117 | {spinners.map(({ code, component, name, id }, idx) => ( 118 |
119 |
120 | {id} 121 |
122 |
123 |
124 | {component} 125 |
126 |

{name}

127 |
128 |
129 |
130 | SOURCE 131 | JSX 132 |
133 |
134 |                   {code}
135 |                 
136 |
137 |
138 | ))} 139 |
140 |
141 |
142 | ) 143 | } 144 | -------------------------------------------------------------------------------- /site/app/styles.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --bg-color: #e6e6e6; 3 | --ink-color: #111111; 4 | --grid-line: #1111113d; 5 | } 6 | 7 | * { 8 | box-sizing: border-box; 9 | margin: 0; 10 | padding: 0; 11 | } 12 | 13 | html, body { 14 | margin: 0; 15 | padding: 0; 16 | width: 100%; 17 | min-height: 100vh; 18 | overflow-x: hidden; 19 | } 20 | 21 | body { 22 | font-family: var(--font-space-mono), var(--font-jetbrains-mono), monospace; 23 | -webkit-font-smoothing: antialiased; 24 | background-color: var(--bg-color); 25 | color: var(--ink-color); 26 | line-height: 1.4; 27 | font-size: 14px; 28 | /* Noise texture effect */ 29 | background-image: 30 | linear-gradient(var(--grid-line) 1px, transparent 1px), 31 | linear-gradient(90deg, var(--grid-line) 1px, transparent 1px); 32 | background-size: 20px 20px; 33 | } 34 | 35 | /* Paper texture overlay */ 36 | body::before { 37 | content: ""; 38 | position: fixed; 39 | top: 0; 40 | left: 0; 41 | width: 100%; 42 | height: 100%; 43 | /* Updated to match the fine-grain white noise reference */ 44 | background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.15'/%3E%3C/svg%3E"); 45 | pointer-events: none; 46 | z-index: 999; 47 | mix-blend-mode: multiply; 48 | } 49 | 50 | .App { 51 | position: relative; 52 | min-height: 100vh; 53 | width: 100%; 54 | padding: 2rem; 55 | display: flex; 56 | flex-direction: column; 57 | align-items: center; 58 | } 59 | 60 | .App-header { 61 | width: 100%; 62 | max-width: 1200px; 63 | border: 2px solid var(--ink-color); 64 | padding: 2rem; 65 | margin-bottom: 3rem; 66 | background: #f0f0f0; 67 | position: relative; 68 | display: grid; 69 | grid-template-columns: 1fr auto; 70 | gap: 2rem; 71 | box-shadow: 4px 4px 0 var(--ink-color); 72 | } 73 | 74 | /* Decorative markings for header */ 75 | .App-header::before { 76 | content: "REF: RSP-2025"; 77 | position: absolute; 78 | top: 4px; 79 | left: 4px; 80 | font-size: 8px; 81 | opacity: 0.6; 82 | } 83 | .App-header::after { 84 | content: ""; 85 | position: absolute; 86 | bottom: 4px; 87 | right: 4px; 88 | width: 20px; 89 | height: 20px; 90 | border-bottom: 2px solid var(--ink-color); 91 | border-right: 2px solid var(--ink-color); 92 | } 93 | 94 | .header-content { 95 | display: flex; 96 | flex-direction: column; 97 | gap: 1rem; 98 | } 99 | 100 | .App-title__main { 101 | font-family: var(--font-jetbrains-mono), monospace; 102 | font-size: clamp(2rem, 6vw, 4rem); 103 | font-weight: 800; 104 | text-transform: uppercase; 105 | letter-spacing: -0.05em; 106 | line-height: 0.9; 107 | border-bottom: 2px solid var(--ink-color); 108 | padding-bottom: 1rem; 109 | margin-bottom: 1rem; 110 | display: inline-block; 111 | } 112 | 113 | .App-title__subtitle { 114 | font-size: 0.9rem; 115 | text-transform: uppercase; 116 | letter-spacing: 0.05em; 117 | opacity: 0.8; 118 | max-width: 600px; 119 | } 120 | 121 | /* Technical side panel in header */ 122 | .header-meta { 123 | display: flex; 124 | flex-direction: column; 125 | justify-content: space-between; 126 | border-left: 2px solid var(--ink-color); 127 | padding-left: 2rem; 128 | min-width: 200px; 129 | } 130 | 131 | .meta-barcode { 132 | height: 40px; 133 | width: 100%; 134 | background: repeating-linear-gradient( 135 | 90deg, 136 | var(--ink-color) 0px, var(--ink-color) 2px, 137 | transparent 2px, transparent 4px, 138 | var(--ink-color) 4px, var(--ink-color) 5px, 139 | transparent 5px, transparent 8px, 140 | var(--ink-color) 8px, var(--ink-color) 12px, 141 | transparent 12px, transparent 14px, 142 | var(--ink-color) 14px, var(--ink-color) 15px, 143 | transparent 15px, transparent 18px, 144 | var(--ink-color) 18px, var(--ink-color) 20px, 145 | transparent 20px, transparent 21px, 146 | var(--ink-color) 21px, var(--ink-color) 25px, 147 | transparent 25px, transparent 28px 148 | ); 149 | margin-bottom: 10px; 150 | } 151 | 152 | .App-install { 153 | margin-top: auto; 154 | } 155 | 156 | .install-box { 157 | display: flex; 158 | flex-direction: column; 159 | border: 1px solid var(--ink-color); 160 | background: #fff; 161 | } 162 | 163 | .install-label { 164 | font-size: 10px; 165 | padding: 4px 8px; 166 | border-bottom: 1px solid var(--ink-color); 167 | background: #e0e0e0; 168 | font-weight: 700; 169 | } 170 | 171 | .install-content { 172 | display: flex; 173 | align-items: center; 174 | justify-content: space-between; 175 | } 176 | 177 | .install-code { 178 | padding: 8px 12px; 179 | font-size: 12px; 180 | font-weight: 600; 181 | } 182 | 183 | .App-links { 184 | display: flex; 185 | gap: 1rem; 186 | margin-top: 1.5rem; 187 | } 188 | 189 | .link-button { 190 | text-decoration: none; 191 | color: var(--ink-color); 192 | font-weight: 700; 193 | text-transform: uppercase; 194 | font-size: 12px; 195 | border: 1px solid var(--ink-color); 196 | padding: 8px 16px; 197 | display: flex; 198 | align-items: center; 199 | gap: 8px; 200 | background: #fff; 201 | transition: all 0.1s; 202 | } 203 | 204 | .link-button:hover { 205 | background: var(--ink-color); 206 | color: #fff; 207 | } 208 | 209 | .App-container { 210 | width: 100%; 211 | max-width: 1200px; 212 | } 213 | 214 | .spinners-grid { 215 | display: grid; 216 | grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); 217 | gap: 2rem; 218 | } 219 | 220 | .spinner-card { 221 | border: 2px solid var(--ink-color); 222 | background: #fff; 223 | position: relative; 224 | transition: transform 0.2s; 225 | } 226 | 227 | .spinner-card:hover { 228 | transform: translate(-4px, -4px); 229 | box-shadow: 6px 6px 0 var(--ink-color); 230 | } 231 | 232 | /* Fix flickering on hover by expanding hit area to cover the void */ 233 | .spinner-card::after { 234 | content: ""; 235 | position: absolute; 236 | inset: 0; 237 | z-index: -1; 238 | transition: inherit; 239 | } 240 | .spinner-card:hover::after { 241 | transform: translate(4px, 4px); 242 | } 243 | 244 | /* Card decorative header */ 245 | .card-header { 246 | display: flex; 247 | justify-content: space-between; 248 | border-bottom: 1px solid var(--ink-color); 249 | padding: 8px 12px; 250 | background: #f0f0f0; 251 | font-size: 10px; 252 | font-weight: 700; 253 | } 254 | 255 | .card-id { 256 | font-family: var(--font-jetbrains-mono), monospace; 257 | } 258 | 259 | .spinner-preview { 260 | height: 180px; 261 | display: flex; 262 | align-items: center; 263 | justify-content: center; 264 | background-image: radial-gradient(var(--grid-line) 1px, transparent 1px); 265 | background-size: 10px 10px; 266 | position: relative; 267 | } 268 | 269 | /* Crosshair decorations */ 270 | .spinner-preview::before, .spinner-preview::after { 271 | content: ""; 272 | position: absolute; 273 | background: var(--ink-color); 274 | opacity: 0.2; 275 | } 276 | .spinner-preview::before { 277 | width: 100%; 278 | height: 1px; 279 | top: 50%; 280 | } 281 | .spinner-preview::after { 282 | height: 100%; 283 | width: 1px; 284 | left: 50%; 285 | } 286 | 287 | .spinner-name { 288 | position: absolute; 289 | bottom: 8px; 290 | left: 12px; 291 | font-size: 1rem; 292 | font-weight: 800; 293 | text-transform: uppercase; 294 | background: #fff; 295 | padding: 2px 6px; 296 | border: 1px solid var(--ink-color); 297 | } 298 | 299 | .spinner-code { 300 | border-top: 2px solid var(--ink-color); 301 | padding: 0; 302 | } 303 | 304 | .code-top { 305 | display: flex; 306 | justify-content: space-between; 307 | align-items: center; 308 | border-bottom: 1px solid var(--ink-color); 309 | padding: 4px 8px; 310 | font-size: 10px; 311 | background: #e0e0e0; 312 | } 313 | 314 | .code-content { 315 | padding: 12px; 316 | font-size: 11px; 317 | overflow-x: auto; 318 | background: #fff; 319 | } 320 | 321 | /* Responsive */ 322 | @media (max-width: 768px) { 323 | .App-header { 324 | grid-template-columns: 1fr; 325 | } 326 | .header-meta { 327 | border-left: none; 328 | border-top: 2px solid var(--ink-color); 329 | padding-left: 0; 330 | padding-top: 1rem; 331 | flex-direction: row; 332 | align-items: center; 333 | } 334 | .meta-barcode { 335 | width: 100px; 336 | margin-bottom: 0; 337 | margin-right: 10px; 338 | } 339 | } 340 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@types/react': ^19.2.6 5 | '@types/react-dom': ^19.2.3 6 | bunchee: ^6.6.2 7 | next: 16.0.7 8 | react: ^19.2.1 9 | react-dom: ^19.2.1 10 | respinner: link:./ 11 | typescript: ^5.9.3 12 | 13 | devDependencies: 14 | '@types/react': 19.2.6 15 | '@types/react-dom': 19.2.3_@types+react@19.2.6 16 | bunchee: 6.6.2_typescript@5.9.3 17 | next: 16.0.7_bokjwhiew3ov3ffvbmafuwoalq 18 | react: 19.2.1 19 | react-dom: 19.2.1_react@19.2.1 20 | respinner: 'link:' 21 | typescript: 5.9.3 22 | 23 | packages: 24 | 25 | /@babel/code-frame/7.27.1: 26 | resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 27 | engines: {node: '>=6.9.0'} 28 | requiresBuild: true 29 | dependencies: 30 | '@babel/helper-validator-identifier': 7.28.5 31 | js-tokens: 4.0.0 32 | picocolors: 1.1.1 33 | dev: true 34 | optional: true 35 | 36 | /@babel/helper-validator-identifier/7.28.5: 37 | resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 38 | engines: {node: '>=6.9.0'} 39 | dev: true 40 | optional: true 41 | 42 | /@emnapi/runtime/1.7.1: 43 | resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} 44 | requiresBuild: true 45 | dependencies: 46 | tslib: 2.8.1 47 | dev: true 48 | optional: true 49 | 50 | /@fastify/deepmerge/1.3.0: 51 | resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} 52 | dev: true 53 | 54 | /@img/colour/1.0.0: 55 | resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} 56 | engines: {node: '>=18'} 57 | dev: true 58 | optional: true 59 | 60 | /@img/sharp-darwin-arm64/0.34.5: 61 | resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} 62 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 63 | cpu: [arm64] 64 | os: [darwin] 65 | requiresBuild: true 66 | optionalDependencies: 67 | '@img/sharp-libvips-darwin-arm64': 1.2.4 68 | dev: true 69 | optional: true 70 | 71 | /@img/sharp-darwin-x64/0.34.5: 72 | resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} 73 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 74 | cpu: [x64] 75 | os: [darwin] 76 | requiresBuild: true 77 | optionalDependencies: 78 | '@img/sharp-libvips-darwin-x64': 1.2.4 79 | dev: true 80 | optional: true 81 | 82 | /@img/sharp-libvips-darwin-arm64/1.2.4: 83 | resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} 84 | cpu: [arm64] 85 | os: [darwin] 86 | requiresBuild: true 87 | dev: true 88 | optional: true 89 | 90 | /@img/sharp-libvips-darwin-x64/1.2.4: 91 | resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} 92 | cpu: [x64] 93 | os: [darwin] 94 | requiresBuild: true 95 | dev: true 96 | optional: true 97 | 98 | /@img/sharp-libvips-linux-arm/1.2.4: 99 | resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} 100 | cpu: [arm] 101 | os: [linux] 102 | requiresBuild: true 103 | dev: true 104 | optional: true 105 | 106 | /@img/sharp-libvips-linux-arm64/1.2.4: 107 | resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} 108 | cpu: [arm64] 109 | os: [linux] 110 | requiresBuild: true 111 | dev: true 112 | optional: true 113 | 114 | /@img/sharp-libvips-linux-ppc64/1.2.4: 115 | resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} 116 | cpu: [ppc64] 117 | os: [linux] 118 | requiresBuild: true 119 | dev: true 120 | optional: true 121 | 122 | /@img/sharp-libvips-linux-riscv64/1.2.4: 123 | resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} 124 | cpu: [riscv64] 125 | os: [linux] 126 | requiresBuild: true 127 | dev: true 128 | optional: true 129 | 130 | /@img/sharp-libvips-linux-s390x/1.2.4: 131 | resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} 132 | cpu: [s390x] 133 | os: [linux] 134 | requiresBuild: true 135 | dev: true 136 | optional: true 137 | 138 | /@img/sharp-libvips-linux-x64/1.2.4: 139 | resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} 140 | cpu: [x64] 141 | os: [linux] 142 | requiresBuild: true 143 | dev: true 144 | optional: true 145 | 146 | /@img/sharp-libvips-linuxmusl-arm64/1.2.4: 147 | resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} 148 | cpu: [arm64] 149 | os: [linux] 150 | requiresBuild: true 151 | dev: true 152 | optional: true 153 | 154 | /@img/sharp-libvips-linuxmusl-x64/1.2.4: 155 | resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} 156 | cpu: [x64] 157 | os: [linux] 158 | requiresBuild: true 159 | dev: true 160 | optional: true 161 | 162 | /@img/sharp-linux-arm/0.34.5: 163 | resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} 164 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 165 | cpu: [arm] 166 | os: [linux] 167 | requiresBuild: true 168 | optionalDependencies: 169 | '@img/sharp-libvips-linux-arm': 1.2.4 170 | dev: true 171 | optional: true 172 | 173 | /@img/sharp-linux-arm64/0.34.5: 174 | resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} 175 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 176 | cpu: [arm64] 177 | os: [linux] 178 | requiresBuild: true 179 | optionalDependencies: 180 | '@img/sharp-libvips-linux-arm64': 1.2.4 181 | dev: true 182 | optional: true 183 | 184 | /@img/sharp-linux-ppc64/0.34.5: 185 | resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} 186 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 187 | cpu: [ppc64] 188 | os: [linux] 189 | requiresBuild: true 190 | optionalDependencies: 191 | '@img/sharp-libvips-linux-ppc64': 1.2.4 192 | dev: true 193 | optional: true 194 | 195 | /@img/sharp-linux-riscv64/0.34.5: 196 | resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} 197 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 198 | cpu: [riscv64] 199 | os: [linux] 200 | requiresBuild: true 201 | optionalDependencies: 202 | '@img/sharp-libvips-linux-riscv64': 1.2.4 203 | dev: true 204 | optional: true 205 | 206 | /@img/sharp-linux-s390x/0.34.5: 207 | resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} 208 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 209 | cpu: [s390x] 210 | os: [linux] 211 | requiresBuild: true 212 | optionalDependencies: 213 | '@img/sharp-libvips-linux-s390x': 1.2.4 214 | dev: true 215 | optional: true 216 | 217 | /@img/sharp-linux-x64/0.34.5: 218 | resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} 219 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 220 | cpu: [x64] 221 | os: [linux] 222 | requiresBuild: true 223 | optionalDependencies: 224 | '@img/sharp-libvips-linux-x64': 1.2.4 225 | dev: true 226 | optional: true 227 | 228 | /@img/sharp-linuxmusl-arm64/0.34.5: 229 | resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} 230 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 231 | cpu: [arm64] 232 | os: [linux] 233 | requiresBuild: true 234 | optionalDependencies: 235 | '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 236 | dev: true 237 | optional: true 238 | 239 | /@img/sharp-linuxmusl-x64/0.34.5: 240 | resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} 241 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 242 | cpu: [x64] 243 | os: [linux] 244 | requiresBuild: true 245 | optionalDependencies: 246 | '@img/sharp-libvips-linuxmusl-x64': 1.2.4 247 | dev: true 248 | optional: true 249 | 250 | /@img/sharp-wasm32/0.34.5: 251 | resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} 252 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 253 | cpu: [wasm32] 254 | requiresBuild: true 255 | dependencies: 256 | '@emnapi/runtime': 1.7.1 257 | dev: true 258 | optional: true 259 | 260 | /@img/sharp-win32-arm64/0.34.5: 261 | resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} 262 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 263 | cpu: [arm64] 264 | os: [win32] 265 | requiresBuild: true 266 | dev: true 267 | optional: true 268 | 269 | /@img/sharp-win32-ia32/0.34.5: 270 | resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} 271 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 272 | cpu: [ia32] 273 | os: [win32] 274 | requiresBuild: true 275 | dev: true 276 | optional: true 277 | 278 | /@img/sharp-win32-x64/0.34.5: 279 | resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} 280 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 281 | cpu: [x64] 282 | os: [win32] 283 | requiresBuild: true 284 | dev: true 285 | optional: true 286 | 287 | /@jridgewell/sourcemap-codec/1.5.5: 288 | resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 289 | dev: true 290 | 291 | /@next/env/16.0.7: 292 | resolution: {integrity: sha512-gpaNgUh5nftFKRkRQGnVi5dpcYSKGcZZkQffZ172OrG/XkrnS7UBTQ648YY+8ME92cC4IojpI2LqTC8sTDhAaw==} 293 | dev: true 294 | 295 | /@next/swc-darwin-arm64/16.0.7: 296 | resolution: {integrity: sha512-LlDtCYOEj/rfSnEn/Idi+j1QKHxY9BJFmxx7108A6D8K0SB+bNgfYQATPk/4LqOl4C0Wo3LACg2ie6s7xqMpJg==} 297 | engines: {node: '>= 10'} 298 | cpu: [arm64] 299 | os: [darwin] 300 | requiresBuild: true 301 | dev: true 302 | optional: true 303 | 304 | /@next/swc-darwin-x64/16.0.7: 305 | resolution: {integrity: sha512-rtZ7BhnVvO1ICf3QzfW9H3aPz7GhBrnSIMZyr4Qy6boXF0b5E3QLs+cvJmg3PsTCG2M1PBoC+DANUi4wCOKXpA==} 306 | engines: {node: '>= 10'} 307 | cpu: [x64] 308 | os: [darwin] 309 | requiresBuild: true 310 | dev: true 311 | optional: true 312 | 313 | /@next/swc-linux-arm64-gnu/16.0.7: 314 | resolution: {integrity: sha512-mloD5WcPIeIeeZqAIP5c2kdaTa6StwP4/2EGy1mUw8HiexSHGK/jcM7lFuS3u3i2zn+xH9+wXJs6njO7VrAqww==} 315 | engines: {node: '>= 10'} 316 | cpu: [arm64] 317 | os: [linux] 318 | requiresBuild: true 319 | dev: true 320 | optional: true 321 | 322 | /@next/swc-linux-arm64-musl/16.0.7: 323 | resolution: {integrity: sha512-+ksWNrZrthisXuo9gd1XnjHRowCbMtl/YgMpbRvFeDEqEBd523YHPWpBuDjomod88U8Xliw5DHhekBC3EOOd9g==} 324 | engines: {node: '>= 10'} 325 | cpu: [arm64] 326 | os: [linux] 327 | requiresBuild: true 328 | dev: true 329 | optional: true 330 | 331 | /@next/swc-linux-x64-gnu/16.0.7: 332 | resolution: {integrity: sha512-4WtJU5cRDxpEE44Ana2Xro1284hnyVpBb62lIpU5k85D8xXxatT+rXxBgPkc7C1XwkZMWpK5rXLXTh9PFipWsA==} 333 | engines: {node: '>= 10'} 334 | cpu: [x64] 335 | os: [linux] 336 | requiresBuild: true 337 | dev: true 338 | optional: true 339 | 340 | /@next/swc-linux-x64-musl/16.0.7: 341 | resolution: {integrity: sha512-HYlhqIP6kBPXalW2dbMTSuB4+8fe+j9juyxwfMwCe9kQPPeiyFn7NMjNfoFOfJ2eXkeQsoUGXg+O2SE3m4Qg2w==} 342 | engines: {node: '>= 10'} 343 | cpu: [x64] 344 | os: [linux] 345 | requiresBuild: true 346 | dev: true 347 | optional: true 348 | 349 | /@next/swc-win32-arm64-msvc/16.0.7: 350 | resolution: {integrity: sha512-EviG+43iOoBRZg9deGauXExjRphhuYmIOJ12b9sAPy0eQ6iwcPxfED2asb/s2/yiLYOdm37kPaiZu8uXSYPs0Q==} 351 | engines: {node: '>= 10'} 352 | cpu: [arm64] 353 | os: [win32] 354 | requiresBuild: true 355 | dev: true 356 | optional: true 357 | 358 | /@next/swc-win32-x64-msvc/16.0.7: 359 | resolution: {integrity: sha512-gniPjy55zp5Eg0896qSrf3yB1dw4F/3s8VK1ephdsZZ129j2n6e1WqCbE2YgcKhW9hPB9TVZENugquWJD5x0ug==} 360 | engines: {node: '>= 10'} 361 | cpu: [x64] 362 | os: [win32] 363 | requiresBuild: true 364 | dev: true 365 | optional: true 366 | 367 | /@rollup/plugin-commonjs/28.0.9_rollup@4.53.3: 368 | resolution: {integrity: sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==} 369 | engines: {node: '>=16.0.0 || 14 >= 14.17'} 370 | peerDependencies: 371 | rollup: ^2.68.0||^3.0.0||^4.0.0 372 | peerDependenciesMeta: 373 | rollup: 374 | optional: true 375 | dependencies: 376 | '@rollup/pluginutils': 5.3.0_rollup@4.53.3 377 | commondir: 1.0.1 378 | estree-walker: 2.0.2 379 | fdir: 6.5.0_picomatch@4.0.3 380 | is-reference: 1.2.1 381 | magic-string: 0.30.21 382 | picomatch: 4.0.3 383 | rollup: 4.53.3 384 | dev: true 385 | 386 | /@rollup/plugin-json/6.1.0_rollup@4.53.3: 387 | resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} 388 | engines: {node: '>=14.0.0'} 389 | peerDependencies: 390 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 391 | peerDependenciesMeta: 392 | rollup: 393 | optional: true 394 | dependencies: 395 | '@rollup/pluginutils': 5.3.0_rollup@4.53.3 396 | rollup: 4.53.3 397 | dev: true 398 | 399 | /@rollup/plugin-node-resolve/16.0.3_rollup@4.53.3: 400 | resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} 401 | engines: {node: '>=14.0.0'} 402 | peerDependencies: 403 | rollup: ^2.78.0||^3.0.0||^4.0.0 404 | peerDependenciesMeta: 405 | rollup: 406 | optional: true 407 | dependencies: 408 | '@rollup/pluginutils': 5.3.0_rollup@4.53.3 409 | '@types/resolve': 1.20.2 410 | deepmerge: 4.3.1 411 | is-module: 1.0.0 412 | resolve: 1.22.8 413 | rollup: 4.53.3 414 | dev: true 415 | 416 | /@rollup/plugin-replace/6.0.3_rollup@4.53.3: 417 | resolution: {integrity: sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==} 418 | engines: {node: '>=14.0.0'} 419 | peerDependencies: 420 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 421 | peerDependenciesMeta: 422 | rollup: 423 | optional: true 424 | dependencies: 425 | '@rollup/pluginutils': 5.3.0_rollup@4.53.3 426 | magic-string: 0.30.21 427 | rollup: 4.53.3 428 | dev: true 429 | 430 | /@rollup/plugin-wasm/6.2.2_rollup@4.53.3: 431 | resolution: {integrity: sha512-gpC4R1G9Ni92ZIRTexqbhX7U+9estZrbhP+9SRb0DW9xpB9g7j34r+J2hqrcW/lRI7dJaU84MxZM0Rt82tqYPQ==} 432 | engines: {node: '>=14.0.0'} 433 | peerDependencies: 434 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 435 | peerDependenciesMeta: 436 | rollup: 437 | optional: true 438 | dependencies: 439 | '@rollup/pluginutils': 5.3.0_rollup@4.53.3 440 | rollup: 4.53.3 441 | dev: true 442 | 443 | /@rollup/pluginutils/5.3.0_rollup@4.53.3: 444 | resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} 445 | engines: {node: '>=14.0.0'} 446 | peerDependencies: 447 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 448 | peerDependenciesMeta: 449 | rollup: 450 | optional: true 451 | dependencies: 452 | '@types/estree': 1.0.5 453 | estree-walker: 2.0.2 454 | picomatch: 4.0.3 455 | rollup: 4.53.3 456 | dev: true 457 | 458 | /@rollup/rollup-android-arm-eabi/4.53.3: 459 | resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} 460 | cpu: [arm] 461 | os: [android] 462 | requiresBuild: true 463 | dev: true 464 | optional: true 465 | 466 | /@rollup/rollup-android-arm64/4.53.3: 467 | resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} 468 | cpu: [arm64] 469 | os: [android] 470 | requiresBuild: true 471 | dev: true 472 | optional: true 473 | 474 | /@rollup/rollup-darwin-arm64/4.53.3: 475 | resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} 476 | cpu: [arm64] 477 | os: [darwin] 478 | requiresBuild: true 479 | dev: true 480 | optional: true 481 | 482 | /@rollup/rollup-darwin-x64/4.53.3: 483 | resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} 484 | cpu: [x64] 485 | os: [darwin] 486 | requiresBuild: true 487 | dev: true 488 | optional: true 489 | 490 | /@rollup/rollup-freebsd-arm64/4.53.3: 491 | resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} 492 | cpu: [arm64] 493 | os: [freebsd] 494 | requiresBuild: true 495 | dev: true 496 | optional: true 497 | 498 | /@rollup/rollup-freebsd-x64/4.53.3: 499 | resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} 500 | cpu: [x64] 501 | os: [freebsd] 502 | requiresBuild: true 503 | dev: true 504 | optional: true 505 | 506 | /@rollup/rollup-linux-arm-gnueabihf/4.53.3: 507 | resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} 508 | cpu: [arm] 509 | os: [linux] 510 | requiresBuild: true 511 | dev: true 512 | optional: true 513 | 514 | /@rollup/rollup-linux-arm-musleabihf/4.53.3: 515 | resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} 516 | cpu: [arm] 517 | os: [linux] 518 | requiresBuild: true 519 | dev: true 520 | optional: true 521 | 522 | /@rollup/rollup-linux-arm64-gnu/4.53.3: 523 | resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} 524 | cpu: [arm64] 525 | os: [linux] 526 | requiresBuild: true 527 | dev: true 528 | optional: true 529 | 530 | /@rollup/rollup-linux-arm64-musl/4.53.3: 531 | resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} 532 | cpu: [arm64] 533 | os: [linux] 534 | requiresBuild: true 535 | dev: true 536 | optional: true 537 | 538 | /@rollup/rollup-linux-loong64-gnu/4.53.3: 539 | resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} 540 | cpu: [loong64] 541 | os: [linux] 542 | requiresBuild: true 543 | dev: true 544 | optional: true 545 | 546 | /@rollup/rollup-linux-ppc64-gnu/4.53.3: 547 | resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} 548 | cpu: [ppc64] 549 | os: [linux] 550 | requiresBuild: true 551 | dev: true 552 | optional: true 553 | 554 | /@rollup/rollup-linux-riscv64-gnu/4.53.3: 555 | resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} 556 | cpu: [riscv64] 557 | os: [linux] 558 | requiresBuild: true 559 | dev: true 560 | optional: true 561 | 562 | /@rollup/rollup-linux-riscv64-musl/4.53.3: 563 | resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} 564 | cpu: [riscv64] 565 | os: [linux] 566 | requiresBuild: true 567 | dev: true 568 | optional: true 569 | 570 | /@rollup/rollup-linux-s390x-gnu/4.53.3: 571 | resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} 572 | cpu: [s390x] 573 | os: [linux] 574 | requiresBuild: true 575 | dev: true 576 | optional: true 577 | 578 | /@rollup/rollup-linux-x64-gnu/4.53.3: 579 | resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} 580 | cpu: [x64] 581 | os: [linux] 582 | requiresBuild: true 583 | dev: true 584 | optional: true 585 | 586 | /@rollup/rollup-linux-x64-musl/4.53.3: 587 | resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} 588 | cpu: [x64] 589 | os: [linux] 590 | requiresBuild: true 591 | dev: true 592 | optional: true 593 | 594 | /@rollup/rollup-openharmony-arm64/4.53.3: 595 | resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} 596 | cpu: [arm64] 597 | os: [openharmony] 598 | requiresBuild: true 599 | dev: true 600 | optional: true 601 | 602 | /@rollup/rollup-win32-arm64-msvc/4.53.3: 603 | resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} 604 | cpu: [arm64] 605 | os: [win32] 606 | requiresBuild: true 607 | dev: true 608 | optional: true 609 | 610 | /@rollup/rollup-win32-ia32-msvc/4.53.3: 611 | resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} 612 | cpu: [ia32] 613 | os: [win32] 614 | requiresBuild: true 615 | dev: true 616 | optional: true 617 | 618 | /@rollup/rollup-win32-x64-gnu/4.53.3: 619 | resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} 620 | cpu: [x64] 621 | os: [win32] 622 | requiresBuild: true 623 | dev: true 624 | optional: true 625 | 626 | /@rollup/rollup-win32-x64-msvc/4.53.3: 627 | resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} 628 | cpu: [x64] 629 | os: [win32] 630 | requiresBuild: true 631 | dev: true 632 | optional: true 633 | 634 | /@swc/core-darwin-arm64/1.15.3: 635 | resolution: {integrity: sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==} 636 | engines: {node: '>=10'} 637 | cpu: [arm64] 638 | os: [darwin] 639 | requiresBuild: true 640 | dev: true 641 | optional: true 642 | 643 | /@swc/core-darwin-x64/1.15.3: 644 | resolution: {integrity: sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==} 645 | engines: {node: '>=10'} 646 | cpu: [x64] 647 | os: [darwin] 648 | requiresBuild: true 649 | dev: true 650 | optional: true 651 | 652 | /@swc/core-linux-arm-gnueabihf/1.15.3: 653 | resolution: {integrity: sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==} 654 | engines: {node: '>=10'} 655 | cpu: [arm] 656 | os: [linux] 657 | requiresBuild: true 658 | dev: true 659 | optional: true 660 | 661 | /@swc/core-linux-arm64-gnu/1.15.3: 662 | resolution: {integrity: sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==} 663 | engines: {node: '>=10'} 664 | cpu: [arm64] 665 | os: [linux] 666 | requiresBuild: true 667 | dev: true 668 | optional: true 669 | 670 | /@swc/core-linux-arm64-musl/1.15.3: 671 | resolution: {integrity: sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==} 672 | engines: {node: '>=10'} 673 | cpu: [arm64] 674 | os: [linux] 675 | requiresBuild: true 676 | dev: true 677 | optional: true 678 | 679 | /@swc/core-linux-x64-gnu/1.15.3: 680 | resolution: {integrity: sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==} 681 | engines: {node: '>=10'} 682 | cpu: [x64] 683 | os: [linux] 684 | requiresBuild: true 685 | dev: true 686 | optional: true 687 | 688 | /@swc/core-linux-x64-musl/1.15.3: 689 | resolution: {integrity: sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==} 690 | engines: {node: '>=10'} 691 | cpu: [x64] 692 | os: [linux] 693 | requiresBuild: true 694 | dev: true 695 | optional: true 696 | 697 | /@swc/core-win32-arm64-msvc/1.15.3: 698 | resolution: {integrity: sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==} 699 | engines: {node: '>=10'} 700 | cpu: [arm64] 701 | os: [win32] 702 | requiresBuild: true 703 | dev: true 704 | optional: true 705 | 706 | /@swc/core-win32-ia32-msvc/1.15.3: 707 | resolution: {integrity: sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==} 708 | engines: {node: '>=10'} 709 | cpu: [ia32] 710 | os: [win32] 711 | requiresBuild: true 712 | dev: true 713 | optional: true 714 | 715 | /@swc/core-win32-x64-msvc/1.15.3: 716 | resolution: {integrity: sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==} 717 | engines: {node: '>=10'} 718 | cpu: [x64] 719 | os: [win32] 720 | requiresBuild: true 721 | dev: true 722 | optional: true 723 | 724 | /@swc/core/1.15.3_@swc+helpers@0.5.17: 725 | resolution: {integrity: sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==} 726 | engines: {node: '>=10'} 727 | requiresBuild: true 728 | peerDependencies: 729 | '@swc/helpers': '>=0.5.17' 730 | peerDependenciesMeta: 731 | '@swc/helpers': 732 | optional: true 733 | dependencies: 734 | '@swc/counter': 0.1.3 735 | '@swc/helpers': 0.5.17 736 | '@swc/types': 0.1.25 737 | optionalDependencies: 738 | '@swc/core-darwin-arm64': 1.15.3 739 | '@swc/core-darwin-x64': 1.15.3 740 | '@swc/core-linux-arm-gnueabihf': 1.15.3 741 | '@swc/core-linux-arm64-gnu': 1.15.3 742 | '@swc/core-linux-arm64-musl': 1.15.3 743 | '@swc/core-linux-x64-gnu': 1.15.3 744 | '@swc/core-linux-x64-musl': 1.15.3 745 | '@swc/core-win32-arm64-msvc': 1.15.3 746 | '@swc/core-win32-ia32-msvc': 1.15.3 747 | '@swc/core-win32-x64-msvc': 1.15.3 748 | dev: true 749 | 750 | /@swc/counter/0.1.3: 751 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} 752 | dev: true 753 | 754 | /@swc/helpers/0.5.15: 755 | resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} 756 | dependencies: 757 | tslib: 2.8.1 758 | dev: true 759 | 760 | /@swc/helpers/0.5.17: 761 | resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} 762 | dependencies: 763 | tslib: 2.8.1 764 | dev: true 765 | 766 | /@swc/types/0.1.25: 767 | resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} 768 | dependencies: 769 | '@swc/counter': 0.1.3 770 | dev: true 771 | 772 | /@types/estree/1.0.5: 773 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 774 | dev: true 775 | 776 | /@types/estree/1.0.8: 777 | resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 778 | dev: true 779 | 780 | /@types/react-dom/19.2.3_@types+react@19.2.6: 781 | resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} 782 | peerDependencies: 783 | '@types/react': ^19.2.0 784 | dependencies: 785 | '@types/react': 19.2.6 786 | dev: true 787 | 788 | /@types/react/19.2.6: 789 | resolution: {integrity: sha512-p/jUvulfgU7oKtj6Xpk8cA2Y1xKTtICGpJYeJXz2YVO2UcvjQgeRMLDGfDeqeRW2Ta+0QNFwcc8X3GH8SxZz6w==} 790 | dependencies: 791 | csstype: 3.2.3 792 | dev: true 793 | 794 | /@types/resolve/1.20.2: 795 | resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 796 | dev: true 797 | 798 | /ansi-regex/5.0.1: 799 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 800 | engines: {node: '>=8'} 801 | dev: true 802 | 803 | /ansi-styles/4.3.0: 804 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 805 | engines: {node: '>=8'} 806 | dependencies: 807 | color-convert: 2.0.1 808 | dev: true 809 | 810 | /bunchee/6.6.2_typescript@5.9.3: 811 | resolution: {integrity: sha512-hf9B4X/2jgFl0hYhE1NT/mnhnxEBxDNfiZnhtAVMWSUPIAtPLqcoLXUZYsmRhureNGcsowQI8a22e8kQ9Un/AA==} 812 | engines: {node: '>= 18.0.0'} 813 | hasBin: true 814 | peerDependencies: 815 | typescript: ^4.1 || ^5.0 816 | peerDependenciesMeta: 817 | '@swc/helpers': 818 | optional: true 819 | typescript: 820 | optional: true 821 | dependencies: 822 | '@rollup/plugin-commonjs': 28.0.9_rollup@4.53.3 823 | '@rollup/plugin-json': 6.1.0_rollup@4.53.3 824 | '@rollup/plugin-node-resolve': 16.0.3_rollup@4.53.3 825 | '@rollup/plugin-replace': 6.0.3_rollup@4.53.3 826 | '@rollup/plugin-wasm': 6.2.2_rollup@4.53.3 827 | '@rollup/pluginutils': 5.3.0_rollup@4.53.3 828 | '@swc/core': 1.15.3_@swc+helpers@0.5.17 829 | '@swc/helpers': 0.5.17 830 | clean-css: 5.3.3 831 | magic-string: 0.30.21 832 | nanospinner: 1.2.2 833 | picomatch: 4.0.3 834 | pretty-bytes: 5.6.0 835 | rollup: 4.53.3 836 | rollup-plugin-dts: 6.2.3_3jsbhhsoex72d34xgcre5hhnz4 837 | rollup-plugin-swc3: 0.11.2_hoybrzrbqbushw54gsgu55q7dy 838 | rollup-preserve-directives: 1.1.3_rollup@4.53.3 839 | tinyglobby: 0.2.15 840 | tslib: 2.8.1 841 | typescript: 5.9.3 842 | yargs: 17.7.2 843 | dev: true 844 | 845 | /caniuse-lite/1.0.30001669: 846 | resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} 847 | dev: true 848 | 849 | /clean-css/5.3.3: 850 | resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} 851 | engines: {node: '>= 10.0'} 852 | dependencies: 853 | source-map: 0.6.1 854 | dev: true 855 | 856 | /client-only/0.0.1: 857 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 858 | dev: true 859 | 860 | /cliui/8.0.1: 861 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 862 | engines: {node: '>=12'} 863 | dependencies: 864 | string-width: 4.2.3 865 | strip-ansi: 6.0.1 866 | wrap-ansi: 7.0.0 867 | dev: true 868 | 869 | /color-convert/2.0.1: 870 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 871 | engines: {node: '>=7.0.0'} 872 | dependencies: 873 | color-name: 1.1.4 874 | dev: true 875 | 876 | /color-name/1.1.4: 877 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 878 | dev: true 879 | 880 | /commondir/1.0.1: 881 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 882 | dev: true 883 | 884 | /csstype/3.2.3: 885 | resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} 886 | dev: true 887 | 888 | /deepmerge/4.3.1: 889 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 890 | engines: {node: '>=0.10.0'} 891 | dev: true 892 | 893 | /detect-libc/2.1.2: 894 | resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 895 | engines: {node: '>=8'} 896 | dev: true 897 | optional: true 898 | 899 | /emoji-regex/8.0.0: 900 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 901 | dev: true 902 | 903 | /escalade/3.2.0: 904 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 905 | engines: {node: '>=6'} 906 | dev: true 907 | 908 | /estree-walker/2.0.2: 909 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 910 | dev: true 911 | 912 | /fdir/6.5.0_picomatch@4.0.3: 913 | resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 914 | engines: {node: '>=12.0.0'} 915 | peerDependencies: 916 | picomatch: ^3 || ^4 917 | peerDependenciesMeta: 918 | picomatch: 919 | optional: true 920 | dependencies: 921 | picomatch: 4.0.3 922 | dev: true 923 | 924 | /fsevents/2.3.3: 925 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 926 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 927 | os: [darwin] 928 | requiresBuild: true 929 | dev: true 930 | optional: true 931 | 932 | /function-bind/1.1.2: 933 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 934 | dev: true 935 | 936 | /get-caller-file/2.0.5: 937 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 938 | engines: {node: 6.* || 8.* || >= 10.*} 939 | dev: true 940 | 941 | /get-tsconfig/4.8.0: 942 | resolution: {integrity: sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==} 943 | dependencies: 944 | resolve-pkg-maps: 1.0.0 945 | dev: true 946 | 947 | /hasown/2.0.0: 948 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 949 | engines: {node: '>= 0.4'} 950 | dependencies: 951 | function-bind: 1.1.2 952 | dev: true 953 | 954 | /is-core-module/2.13.1: 955 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 956 | dependencies: 957 | hasown: 2.0.0 958 | dev: true 959 | 960 | /is-fullwidth-code-point/3.0.0: 961 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 962 | engines: {node: '>=8'} 963 | dev: true 964 | 965 | /is-module/1.0.0: 966 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 967 | dev: true 968 | 969 | /is-reference/1.2.1: 970 | resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 971 | dependencies: 972 | '@types/estree': 1.0.5 973 | dev: true 974 | 975 | /js-tokens/4.0.0: 976 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 977 | dev: true 978 | optional: true 979 | 980 | /magic-string/0.30.21: 981 | resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 982 | dependencies: 983 | '@jridgewell/sourcemap-codec': 1.5.5 984 | dev: true 985 | 986 | /nanoid/3.3.7: 987 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 988 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 989 | hasBin: true 990 | dev: true 991 | 992 | /nanospinner/1.2.2: 993 | resolution: {integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==} 994 | dependencies: 995 | picocolors: 1.1.1 996 | dev: true 997 | 998 | /next/16.0.7_bokjwhiew3ov3ffvbmafuwoalq: 999 | resolution: {integrity: sha512-3mBRJyPxT4LOxAJI6IsXeFtKfiJUbjCLgvXO02fV8Wy/lIhPvP94Fe7dGhUgHXcQy4sSuYwQNcOLhIfOm0rL0A==} 1000 | engines: {node: '>=20.9.0'} 1001 | hasBin: true 1002 | peerDependencies: 1003 | '@opentelemetry/api': ^1.1.0 1004 | '@playwright/test': ^1.51.1 1005 | babel-plugin-react-compiler: '*' 1006 | react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 1007 | react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 1008 | sass: ^1.3.0 1009 | peerDependenciesMeta: 1010 | '@opentelemetry/api': 1011 | optional: true 1012 | '@playwright/test': 1013 | optional: true 1014 | babel-plugin-react-compiler: 1015 | optional: true 1016 | sass: 1017 | optional: true 1018 | dependencies: 1019 | '@next/env': 16.0.7 1020 | '@swc/helpers': 0.5.15 1021 | caniuse-lite: 1.0.30001669 1022 | postcss: 8.4.31 1023 | react: 19.2.1 1024 | react-dom: 19.2.1_react@19.2.1 1025 | styled-jsx: 5.1.6_react@19.2.1 1026 | optionalDependencies: 1027 | '@next/swc-darwin-arm64': 16.0.7 1028 | '@next/swc-darwin-x64': 16.0.7 1029 | '@next/swc-linux-arm64-gnu': 16.0.7 1030 | '@next/swc-linux-arm64-musl': 16.0.7 1031 | '@next/swc-linux-x64-gnu': 16.0.7 1032 | '@next/swc-linux-x64-musl': 16.0.7 1033 | '@next/swc-win32-arm64-msvc': 16.0.7 1034 | '@next/swc-win32-x64-msvc': 16.0.7 1035 | sharp: 0.34.5 1036 | transitivePeerDependencies: 1037 | - '@babel/core' 1038 | - babel-plugin-macros 1039 | dev: true 1040 | 1041 | /path-parse/1.0.7: 1042 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1043 | dev: true 1044 | 1045 | /picocolors/1.1.1: 1046 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1047 | dev: true 1048 | 1049 | /picomatch/4.0.3: 1050 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1051 | engines: {node: '>=12'} 1052 | dev: true 1053 | 1054 | /postcss/8.4.31: 1055 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 1056 | engines: {node: ^10 || ^12 || >=14} 1057 | dependencies: 1058 | nanoid: 3.3.7 1059 | picocolors: 1.1.1 1060 | source-map-js: 1.0.2 1061 | dev: true 1062 | 1063 | /pretty-bytes/5.6.0: 1064 | resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} 1065 | engines: {node: '>=6'} 1066 | dev: true 1067 | 1068 | /react-dom/19.2.1_react@19.2.1: 1069 | resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==} 1070 | peerDependencies: 1071 | react: ^19.2.1 1072 | dependencies: 1073 | react: 19.2.1 1074 | scheduler: 0.27.0 1075 | dev: true 1076 | 1077 | /react/19.2.1: 1078 | resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==} 1079 | engines: {node: '>=0.10.0'} 1080 | dev: true 1081 | 1082 | /require-directory/2.1.1: 1083 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1084 | engines: {node: '>=0.10.0'} 1085 | dev: true 1086 | 1087 | /resolve-pkg-maps/1.0.0: 1088 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1089 | dev: true 1090 | 1091 | /resolve/1.22.8: 1092 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1093 | hasBin: true 1094 | dependencies: 1095 | is-core-module: 2.13.1 1096 | path-parse: 1.0.7 1097 | supports-preserve-symlinks-flag: 1.0.0 1098 | dev: true 1099 | 1100 | /rollup-plugin-dts/6.2.3_3jsbhhsoex72d34xgcre5hhnz4: 1101 | resolution: {integrity: sha512-UgnEsfciXSPpASuOelix7m4DrmyQgiaWBnvI0TM4GxuDh5FkqW8E5hu57bCxXB90VvR1WNfLV80yEDN18UogSA==} 1102 | engines: {node: '>=16'} 1103 | peerDependencies: 1104 | rollup: ^3.29.4 || ^4 1105 | typescript: ^4.5 || ^5.0 1106 | dependencies: 1107 | magic-string: 0.30.21 1108 | rollup: 4.53.3 1109 | typescript: 5.9.3 1110 | optionalDependencies: 1111 | '@babel/code-frame': 7.27.1 1112 | dev: true 1113 | 1114 | /rollup-plugin-swc3/0.11.2_hoybrzrbqbushw54gsgu55q7dy: 1115 | resolution: {integrity: sha512-o1ih9B806fV2wBSNk46T0cYfTF2eiiKmYXRpWw3K4j/Cp3tCAt10UCVsTqvUhGP58pcB3/GZcAVl5e7TCSKN6Q==} 1116 | engines: {node: '>=12'} 1117 | peerDependencies: 1118 | '@swc/core': '>=1.2.165' 1119 | rollup: ^2.0.0 || ^3.0.0 || ^4.0.0 1120 | dependencies: 1121 | '@fastify/deepmerge': 1.3.0 1122 | '@rollup/pluginutils': 5.3.0_rollup@4.53.3 1123 | '@swc/core': 1.15.3_@swc+helpers@0.5.17 1124 | get-tsconfig: 4.8.0 1125 | rollup: 4.53.3 1126 | rollup-preserve-directives: 1.1.3_rollup@4.53.3 1127 | dev: true 1128 | 1129 | /rollup-preserve-directives/1.1.3_rollup@4.53.3: 1130 | resolution: {integrity: sha512-oXqxd6ZzkoQej8Qt0k+S/yvO2+S4CEVEVv2g85oL15o0cjAKTKEuo2MzyA8FcsBBXbtytBzBMFAbhvQg4YyPUQ==} 1131 | peerDependencies: 1132 | rollup: ^2.0.0 || ^3.0.0 || ^4.0.0 1133 | dependencies: 1134 | magic-string: 0.30.21 1135 | rollup: 4.53.3 1136 | dev: true 1137 | 1138 | /rollup/4.53.3: 1139 | resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} 1140 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1141 | hasBin: true 1142 | dependencies: 1143 | '@types/estree': 1.0.8 1144 | optionalDependencies: 1145 | '@rollup/rollup-android-arm-eabi': 4.53.3 1146 | '@rollup/rollup-android-arm64': 4.53.3 1147 | '@rollup/rollup-darwin-arm64': 4.53.3 1148 | '@rollup/rollup-darwin-x64': 4.53.3 1149 | '@rollup/rollup-freebsd-arm64': 4.53.3 1150 | '@rollup/rollup-freebsd-x64': 4.53.3 1151 | '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 1152 | '@rollup/rollup-linux-arm-musleabihf': 4.53.3 1153 | '@rollup/rollup-linux-arm64-gnu': 4.53.3 1154 | '@rollup/rollup-linux-arm64-musl': 4.53.3 1155 | '@rollup/rollup-linux-loong64-gnu': 4.53.3 1156 | '@rollup/rollup-linux-ppc64-gnu': 4.53.3 1157 | '@rollup/rollup-linux-riscv64-gnu': 4.53.3 1158 | '@rollup/rollup-linux-riscv64-musl': 4.53.3 1159 | '@rollup/rollup-linux-s390x-gnu': 4.53.3 1160 | '@rollup/rollup-linux-x64-gnu': 4.53.3 1161 | '@rollup/rollup-linux-x64-musl': 4.53.3 1162 | '@rollup/rollup-openharmony-arm64': 4.53.3 1163 | '@rollup/rollup-win32-arm64-msvc': 4.53.3 1164 | '@rollup/rollup-win32-ia32-msvc': 4.53.3 1165 | '@rollup/rollup-win32-x64-gnu': 4.53.3 1166 | '@rollup/rollup-win32-x64-msvc': 4.53.3 1167 | fsevents: 2.3.3 1168 | dev: true 1169 | 1170 | /scheduler/0.27.0: 1171 | resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} 1172 | dev: true 1173 | 1174 | /semver/7.7.3: 1175 | resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 1176 | engines: {node: '>=10'} 1177 | hasBin: true 1178 | dev: true 1179 | optional: true 1180 | 1181 | /sharp/0.34.5: 1182 | resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} 1183 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1184 | requiresBuild: true 1185 | dependencies: 1186 | '@img/colour': 1.0.0 1187 | detect-libc: 2.1.2 1188 | semver: 7.7.3 1189 | optionalDependencies: 1190 | '@img/sharp-darwin-arm64': 0.34.5 1191 | '@img/sharp-darwin-x64': 0.34.5 1192 | '@img/sharp-libvips-darwin-arm64': 1.2.4 1193 | '@img/sharp-libvips-darwin-x64': 1.2.4 1194 | '@img/sharp-libvips-linux-arm': 1.2.4 1195 | '@img/sharp-libvips-linux-arm64': 1.2.4 1196 | '@img/sharp-libvips-linux-ppc64': 1.2.4 1197 | '@img/sharp-libvips-linux-riscv64': 1.2.4 1198 | '@img/sharp-libvips-linux-s390x': 1.2.4 1199 | '@img/sharp-libvips-linux-x64': 1.2.4 1200 | '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 1201 | '@img/sharp-libvips-linuxmusl-x64': 1.2.4 1202 | '@img/sharp-linux-arm': 0.34.5 1203 | '@img/sharp-linux-arm64': 0.34.5 1204 | '@img/sharp-linux-ppc64': 0.34.5 1205 | '@img/sharp-linux-riscv64': 0.34.5 1206 | '@img/sharp-linux-s390x': 0.34.5 1207 | '@img/sharp-linux-x64': 0.34.5 1208 | '@img/sharp-linuxmusl-arm64': 0.34.5 1209 | '@img/sharp-linuxmusl-x64': 0.34.5 1210 | '@img/sharp-wasm32': 0.34.5 1211 | '@img/sharp-win32-arm64': 0.34.5 1212 | '@img/sharp-win32-ia32': 0.34.5 1213 | '@img/sharp-win32-x64': 0.34.5 1214 | dev: true 1215 | optional: true 1216 | 1217 | /source-map-js/1.0.2: 1218 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1219 | engines: {node: '>=0.10.0'} 1220 | dev: true 1221 | 1222 | /source-map/0.6.1: 1223 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1224 | engines: {node: '>=0.10.0'} 1225 | dev: true 1226 | 1227 | /string-width/4.2.3: 1228 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1229 | engines: {node: '>=8'} 1230 | dependencies: 1231 | emoji-regex: 8.0.0 1232 | is-fullwidth-code-point: 3.0.0 1233 | strip-ansi: 6.0.1 1234 | dev: true 1235 | 1236 | /strip-ansi/6.0.1: 1237 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1238 | engines: {node: '>=8'} 1239 | dependencies: 1240 | ansi-regex: 5.0.1 1241 | dev: true 1242 | 1243 | /styled-jsx/5.1.6_react@19.2.1: 1244 | resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} 1245 | engines: {node: '>= 12.0.0'} 1246 | peerDependencies: 1247 | '@babel/core': '*' 1248 | babel-plugin-macros: '*' 1249 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' 1250 | peerDependenciesMeta: 1251 | '@babel/core': 1252 | optional: true 1253 | babel-plugin-macros: 1254 | optional: true 1255 | dependencies: 1256 | client-only: 0.0.1 1257 | react: 19.2.1 1258 | dev: true 1259 | 1260 | /supports-preserve-symlinks-flag/1.0.0: 1261 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1262 | engines: {node: '>= 0.4'} 1263 | dev: true 1264 | 1265 | /tinyglobby/0.2.15: 1266 | resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 1267 | engines: {node: '>=12.0.0'} 1268 | dependencies: 1269 | fdir: 6.5.0_picomatch@4.0.3 1270 | picomatch: 4.0.3 1271 | dev: true 1272 | 1273 | /tslib/2.8.1: 1274 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1275 | dev: true 1276 | 1277 | /typescript/5.9.3: 1278 | resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 1279 | engines: {node: '>=14.17'} 1280 | hasBin: true 1281 | dev: true 1282 | 1283 | /wrap-ansi/7.0.0: 1284 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1285 | engines: {node: '>=10'} 1286 | dependencies: 1287 | ansi-styles: 4.3.0 1288 | string-width: 4.2.3 1289 | strip-ansi: 6.0.1 1290 | dev: true 1291 | 1292 | /y18n/5.0.8: 1293 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1294 | engines: {node: '>=10'} 1295 | dev: true 1296 | 1297 | /yargs-parser/21.1.1: 1298 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1299 | engines: {node: '>=12'} 1300 | dev: true 1301 | 1302 | /yargs/17.7.2: 1303 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1304 | engines: {node: '>=12'} 1305 | dependencies: 1306 | cliui: 8.0.1 1307 | escalade: 3.2.0 1308 | get-caller-file: 2.0.5 1309 | require-directory: 2.1.1 1310 | string-width: 4.2.3 1311 | y18n: 5.0.8 1312 | yargs-parser: 21.1.1 1313 | dev: true 1314 | --------------------------------------------------------------------------------