├── playground ├── .prettierignore ├── .prettierrc ├── public │ ├── robots.txt │ └── favicon.ico ├── tsconfig.node.json ├── vite.config.ts ├── .gitignore ├── index.html ├── tsconfig.json ├── eslint.config.js ├── src │ ├── Snippet.tsx │ ├── useCopyToClipboard.ts │ ├── main.tsx │ ├── context.tsx │ ├── index.css │ ├── ResizeCard.tsx │ ├── useDimensions.tsx │ ├── BackgroundImage.tsx │ └── Sidebar.tsx └── package.json ├── .travis.yml ├── .gitignore ├── .prettierignore ├── .npmignore ├── .prettierrc.mjs ├── src ├── index.ts ├── types.ts ├── useResizeDetector.ts └── utils.ts ├── rollup.config.mjs ├── eslint.config.mjs ├── tsconfig.json ├── LICENSE ├── package.json ├── README.md └── pnpm-lock.yaml /playground/.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | public 3 | build 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 'iojs' 4 | script: npm run test 5 | -------------------------------------------------------------------------------- /playground/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /playground/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | */**/dist 3 | *.log 4 | .DS_Store 5 | build 6 | yarn.lock 7 | .eslintcache 8 | .yarn 9 | -------------------------------------------------------------------------------- /playground/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maslianok/react-resize-detector/HEAD/playground/public/favicon.ico -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | **/node_modules 2 | */**/dist 3 | *.log 4 | .DS_Store 5 | build 6 | yarn.lock 7 | pnpm-lock.yaml 8 | .eslintcache 9 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.log 3 | node_modules 4 | src 5 | test 6 | playground 7 | yarn.lock 8 | tsconfig.json 9 | .babelrc 10 | .eslintignore 11 | .eslintrc 12 | .gitignore 13 | .travis.yml 14 | -------------------------------------------------------------------------------- /.prettierrc.mjs: -------------------------------------------------------------------------------- 1 | /** 2 | * @see https://prettier.io/docs/en/configuration.html 3 | * @type {import("prettier").Config} 4 | */ 5 | const config = { 6 | printWidth: 120, 7 | singleQuote: true, 8 | }; 9 | 10 | export default config; 11 | -------------------------------------------------------------------------------- /playground/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import useResizeDetector from './useResizeDetector.js'; 2 | 3 | export { useResizeDetector }; 4 | export type { 5 | UseResizeDetectorReturn, 6 | useResizeDetectorProps, 7 | OnResizeCallback, 8 | ResizePayload, 9 | RefreshModeType, 10 | RefreshOptionsType, 11 | Dimensions, 12 | } from './types.js'; 13 | -------------------------------------------------------------------------------- /playground/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | server: { 8 | port: 3000, 9 | }, 10 | build: { 11 | outDir: 'build', 12 | }, 13 | resolve: { 14 | alias: { 15 | '@': '/src', 16 | }, 17 | }, 18 | }); 19 | -------------------------------------------------------------------------------- /playground/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /playground/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | React-resize-detector demo 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /playground/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "module": "ESNext", 6 | "skipLibCheck": true, 7 | "moduleResolution": "bundler", 8 | "allowImportingTsExtensions": true, 9 | "resolveJsonModule": true, 10 | "isolatedModules": true, 11 | "noEmit": true, 12 | "jsx": "react-jsx", 13 | "paths": { 14 | "@/*": ["./src/*"] 15 | } 16 | }, 17 | "include": ["src"], 18 | "references": [{ "path": "./tsconfig.node.json" }] 19 | } 20 | -------------------------------------------------------------------------------- /playground/eslint.config.js: -------------------------------------------------------------------------------- 1 | import eslint from '@eslint/js'; 2 | import tseslint from 'typescript-eslint'; 3 | import reactPlugin from 'eslint-plugin-react'; 4 | import prettierConfig from 'eslint-config-prettier'; 5 | 6 | export default tseslint.config( 7 | eslint.configs.recommended, 8 | tseslint.configs.recommended, 9 | reactPlugin.configs.flat.recommended, 10 | reactPlugin.configs.flat['jsx-runtime'], 11 | { 12 | settings: { 13 | react: { 14 | version: 'detect', 15 | }, 16 | }, 17 | }, 18 | prettierConfig, 19 | ); 20 | -------------------------------------------------------------------------------- /rollup.config.mjs: -------------------------------------------------------------------------------- 1 | import externals from 'rollup-plugin-node-externals'; 2 | import resolve from '@rollup/plugin-node-resolve'; 3 | import commonjs from '@rollup/plugin-commonjs'; 4 | import typescript from '@rollup/plugin-typescript'; 5 | 6 | const getConfig = () => ({ 7 | input: 'src/index.ts', 8 | output: { 9 | dir: 'build', 10 | format: 'esm', 11 | sourcemap: true, 12 | preserveModules: true, 13 | preserveModulesRoot: 'src', 14 | }, 15 | plugins: [externals(), resolve(), commonjs(), typescript()], 16 | }); 17 | 18 | export default [getConfig()]; 19 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslint from '@eslint/js'; 2 | import tseslint from 'typescript-eslint'; 3 | import reactPlugin from 'eslint-plugin-react'; 4 | import prettierConfig from 'eslint-config-prettier'; 5 | 6 | export default tseslint.config( 7 | { 8 | ignores: ['**/build/**', '**/playground/**'], 9 | }, 10 | eslint.configs.recommended, 11 | tseslint.configs.recommended, 12 | reactPlugin.configs.flat.recommended, 13 | reactPlugin.configs.flat['jsx-runtime'], 14 | { 15 | settings: { 16 | react: { 17 | version: 'detect', 18 | }, 19 | }, 20 | }, 21 | prettierConfig, 22 | ); 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "rootDir": "src", 4 | "declaration": true, 5 | "declarationDir": "build", 6 | "module": "NodeNext", 7 | "target": "es6", 8 | "lib": ["es6", "dom", "es2016", "es2017"], 9 | "sourceMap": true, 10 | "strict": true, 11 | "jsx": "react", 12 | "moduleResolution": "nodenext", 13 | "allowSyntheticDefaultImports": true, 14 | "esModuleInterop": true, 15 | "noImplicitAny": false, 16 | "skipLibCheck": true, 17 | "inlineSources": true, 18 | "noEmitOnError": true, 19 | "noEmit": true 20 | }, 21 | "include": ["src/**/*"], 22 | "exclude": ["node_modules", "build", "src/**/*.test.tsx"] 23 | } 24 | -------------------------------------------------------------------------------- /playground/src/Snippet.tsx: -------------------------------------------------------------------------------- 1 | import { Button, Code, Tooltip } from '@radix-ui/themes'; 2 | import { Copy, Check } from 'lucide-react'; 3 | import { useCopyToClipboard } from './useCopyToClipboard'; 4 | 5 | export interface SnippetProps { 6 | code: string; 7 | } 8 | 9 | export const Snippet = ({ code }: SnippetProps) => { 10 | const [copied, copy] = useCopyToClipboard(code); 11 | return ( 12 |
13 | {code} 14 | 15 | 16 | 19 | 20 |
21 | ); 22 | }; 23 | -------------------------------------------------------------------------------- /playground/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "playground", 3 | "version": "0.1.0", 4 | "type": "module", 5 | "scripts": { 6 | "dev": "linklocal && vite", 7 | "build": "tsc && vite build", 8 | "prettier": "prettier --write ./src", 9 | "lint": "eslint ./src --fix", 10 | "fix": "npm run prettier && npm run lint", 11 | "preview": "vite preview" 12 | }, 13 | "dependencies": { 14 | "@radix-ui/themes": "^3.1.6", 15 | "lucide-react": "^0.469.0", 16 | "react": "^19.0.0", 17 | "react-dom": "^19.0.0", 18 | "react-resize-detector": "file:.." 19 | }, 20 | "devDependencies": { 21 | "@types/node": "^22.10.2", 22 | "@types/react": "^19.0.2", 23 | "@types/react-dom": "^19.0.2", 24 | "@vitejs/plugin-react": "^4.3.4", 25 | "eslint": "^9.17.0", 26 | "eslint-config-prettier": "^9.1.0", 27 | "eslint-plugin-react": "^7.37.3", 28 | "linklocal": "^2.8.2", 29 | "prettier": "3.4.2", 30 | "typescript": "^5.7.2", 31 | "typescript-eslint": "^8.19.0", 32 | "vite": "^6.0.6" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /playground/src/useCopyToClipboard.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | import { useCallback, useState } from 'react'; 3 | 4 | export const useCopyToClipboard = (text: string) => { 5 | const [copied, setCopied] = useState(false); 6 | 7 | const copy = useCallback(async () => { 8 | if (!navigator?.clipboard) { 9 | console.warn('Clipboard not supported'); 10 | return false; 11 | } 12 | 13 | // Try to save to clipboard then set copied state if successful 14 | try { 15 | await navigator.clipboard.writeText(text); 16 | setCopied(true); 17 | return true; 18 | } catch (error) { 19 | console.warn('Copy failed', error); 20 | setCopied(false); 21 | return false; 22 | } 23 | }, []); 24 | 25 | // Clear copied state after 3 seconds 26 | useEffect(() => { 27 | if (copied) { 28 | const timeout = setTimeout(() => setCopied(false), 3000); 29 | return () => clearTimeout(timeout); 30 | } 31 | }, [copied]); 32 | 33 | return [copied, copy] as const; 34 | }; 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2023 Vitalii Maslianok 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. -------------------------------------------------------------------------------- /playground/src/main.tsx: -------------------------------------------------------------------------------- 1 | import * as ReactDOMClient from 'react-dom/client'; 2 | import { Flex, Theme } from '@radix-ui/themes'; 3 | 4 | import { DemoProvider } from './context'; 5 | import { Sidebar } from './Sidebar'; 6 | import { ResizeCard } from './ResizeCard'; 7 | import { BackgroundImage } from './BackgroundImage'; 8 | 9 | import '@radix-ui/themes/styles.css'; 10 | import './index.css'; 11 | 12 | const root = ReactDOMClient.createRoot(document.getElementById('root')!); 13 | 14 | root.render( 15 | 16 | 17 | 30 | 31 |
32 | 33 | 34 | 35 | 36 |
37 |
38 |
39 |
, 40 | ); 41 | -------------------------------------------------------------------------------- /playground/src/context.tsx: -------------------------------------------------------------------------------- 1 | import { createContext, useContext, useMemo, useState } from 'react'; 2 | 3 | export type RefreshModeType = 'throttle' | 'debounce' | undefined; 4 | 5 | export type Box = ResizeObserverBoxOptions | undefined; 6 | 7 | export interface DemoContext { 8 | box: Box; 9 | setBox: React.Dispatch>; 10 | 11 | refreshMode: RefreshModeType; 12 | setRefreshMode: React.Dispatch>; 13 | 14 | isLoading: boolean; 15 | setIsLoading: React.Dispatch>; 16 | 17 | handleHeight: boolean; 18 | setHandleHeight: React.Dispatch>; 19 | 20 | handleWidth: boolean; 21 | setHandleWidth: React.Dispatch>; 22 | 23 | disableRerender: boolean; 24 | setDisableRerender: React.Dispatch>; 25 | } 26 | 27 | const defaultContext = {} as DemoContext; 28 | 29 | export const DemoContext = createContext(defaultContext); 30 | 31 | export const useDemoContext = () => useContext(DemoContext); 32 | 33 | export const DemoProvider = ({ children }: { children: React.ReactNode }) => { 34 | const [box, setBox] = useState(undefined); 35 | const [refreshMode, setRefreshMode] = useState(undefined); 36 | const [isLoading, setIsLoading] = useState(false); 37 | const [handleHeight, setHandleHeight] = useState(true); 38 | const [handleWidth, setHandleWidth] = useState(true); 39 | const [disableRerender, setDisableRerender] = useState(false); 40 | 41 | const value = useMemo( 42 | () => ({ 43 | refreshMode, 44 | setRefreshMode, 45 | isLoading, 46 | setIsLoading, 47 | handleHeight, 48 | setHandleHeight, 49 | handleWidth, 50 | setHandleWidth, 51 | box, 52 | setBox, 53 | disableRerender, 54 | setDisableRerender, 55 | }), 56 | [refreshMode, isLoading, handleHeight, handleWidth, box, disableRerender], 57 | ); 58 | 59 | return {children}; 60 | }; 61 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-resize-detector", 3 | "version": "12.3.0", 4 | "description": "React resize detector", 5 | "type": "module", 6 | "exports": "./build/index.js", 7 | "types": "./build/index.d.ts", 8 | "files": [ 9 | "build" 10 | ], 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/maslianok/react-resize-detector.git" 14 | }, 15 | "scripts": { 16 | "prebuild": "tsc", 17 | "build": "rollup -c", 18 | "prettier": "prettier --write .", 19 | "lint": "eslint . --fix", 20 | "fix": "npm run prettier && npm run lint", 21 | "prerelease": "npm version prerelease --preid=rc", 22 | "prepublishOnly": "npm run build" 23 | }, 24 | "dependencies": { 25 | "es-toolkit": "^1.39.6" 26 | }, 27 | "devDependencies": { 28 | "@eslint/js": "^9.28.0", 29 | "@rollup/plugin-commonjs": "^28.0.3", 30 | "@rollup/plugin-node-resolve": "^16.0.1", 31 | "@rollup/plugin-typescript": "^12.1.2", 32 | "@types/react": "^19.1.7", 33 | "@types/react-dom": "^19.1.6", 34 | "eslint": "^9.28.0", 35 | "eslint-config-prettier": "^10.1.5", 36 | "eslint-plugin-react": "^7.37.5", 37 | "prettier": "^3.5.3", 38 | "rollup": "^4.42.0", 39 | "rollup-plugin-node-externals": "^8.0.0", 40 | "tslib": "^2.8.1", 41 | "typescript": "^5.8.3", 42 | "typescript-eslint": "^8.34.0" 43 | }, 44 | "peerDependencies": { 45 | "react": "^18.0.0 || ^19.0.0" 46 | }, 47 | "author": "Vitalii Maslianok (https://github.com/maslianok)", 48 | "bugs": { 49 | "url": "https://github.com/maslianok/react-resize-detector/issues" 50 | }, 51 | "homepage": "https://github.com/maslianok/react-resize-detector", 52 | "keywords": [ 53 | "react", 54 | "resize", 55 | "detector", 56 | "resizeObserver", 57 | "observer" 58 | ], 59 | "license": "MIT", 60 | "sideEffects": false, 61 | "maintainers": [ 62 | { 63 | "name": "Vitalii Maslianok", 64 | "email": "maslianok@gmail.com" 65 | } 66 | ], 67 | "contributors": [ 68 | { 69 | "name": "James J. Womack (@james_womack)" 70 | }, 71 | { 72 | "name": "Roman Zhuravlov (@snelsi)" 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import type { MutableRefObject } from 'react'; 2 | 3 | export type Dimensions = { 4 | height?: number; 5 | width?: number; 6 | }; 7 | 8 | /** If element is mounted, returns its dimensions and `ResizeObserverEntry` 9 | * If element is unmounted, returns null */ 10 | export type ResizePayload = 11 | | { width: number; height: number; entry: ResizeObserverEntry } 12 | | { width: null; height: null; entry: null }; 13 | 14 | export type RefreshModeType = 'throttle' | 'debounce'; 15 | export type RefreshOptionsType = { leading?: boolean; trailing?: boolean }; 16 | export type OnResizeCallback = (payload: ResizePayload) => void; 17 | 18 | export type Props = { 19 | /** 20 | * Function that will be invoked with observable element's width, height and ResizeObserverEntry. 21 | * If element is unmounted, width and height will be null. 22 | * Default: undefined 23 | */ 24 | onResize?: OnResizeCallback; 25 | /** 26 | * Trigger update on height change. 27 | * Default: true 28 | */ 29 | handleHeight?: boolean; 30 | /** 31 | * Trigger onResize on width change. 32 | * Default: true 33 | */ 34 | handleWidth?: boolean; 35 | /** 36 | * Do not trigger update when a component mounts. 37 | * Default: false 38 | */ 39 | skipOnMount?: boolean; 40 | /** 41 | * Disable re-renders triggered by the hook. When true, only the onResize callback will be called. 42 | * Default: false 43 | */ 44 | disableRerender?: boolean; 45 | /** 46 | * Changes the update strategy. Possible values: "throttle" and "debounce". 47 | * See `es-toolkit` docs for more information https://es-toolkit.dev/ 48 | * undefined - callback will be fired for every frame. 49 | * Default: undefined 50 | */ 51 | refreshMode?: RefreshModeType; 52 | /** 53 | * Set the timeout/interval for `refreshMode` strategy 54 | * Default: undefined 55 | */ 56 | refreshRate?: number; 57 | /** 58 | * Pass additional params to `refreshMode` according to es-toolkit docs 59 | * Default: undefined 60 | */ 61 | refreshOptions?: RefreshOptionsType; 62 | /** 63 | * These options will be used as a second parameter of `resizeObserver.observe` method 64 | * @see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe 65 | * Default: undefined 66 | */ 67 | observerOptions?: ResizeObserverOptions; 68 | }; 69 | 70 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 71 | export type OnRefChangeType = { 72 | (node: T | null): void; 73 | current?: T | null; 74 | }; 75 | 76 | export interface UseResizeDetectorReturn extends Dimensions { 77 | ref: OnRefChangeType; 78 | } 79 | 80 | export interface useResizeDetectorProps extends Props { 81 | targetRef?: MutableRefObject; 82 | } 83 | -------------------------------------------------------------------------------- /playground/src/index.css: -------------------------------------------------------------------------------- 1 | *, 2 | *::before, 3 | *::after { 4 | box-sizing: border-box; 5 | margin: 0; 6 | padding: 0; 7 | } 8 | 9 | :root { 10 | --highlight-color: var(--pink-8); 11 | } 12 | 13 | nav { 14 | width: 420px; 15 | flex: 0 0 auto; 16 | 17 | @media (max-width: 768px) { 18 | width: 100%; 19 | } 20 | } 21 | 22 | main { 23 | display: flex; 24 | position: relative; 25 | overflow: hidden; 26 | flex: 1 1 auto; 27 | padding: 24px; 28 | } 29 | 30 | @keyframes fadeOut { 31 | from { 32 | opacity: 1; 33 | } 34 | to { 35 | opacity: 0; 36 | } 37 | } 38 | 39 | .rt-RadioCardsItem { 40 | text-align: center; 41 | } 42 | 43 | main .rt-BaseCard { 44 | --card-padding: var(--space-5); 45 | 46 | box-shadow: var(--shadow-4); 47 | 48 | min-width: 240px; 49 | min-height: 240px; 50 | max-width: 92%; 51 | max-height: 92%; 52 | width: 340px; 53 | height: 340px; 54 | resize: both; 55 | will-change: width, height; 56 | 57 | display: flex; 58 | align-items: center; 59 | justify-content: center; 60 | flex-direction: column; 61 | text-align: center; 62 | margin: auto; 63 | 64 | transition: 0.3s ease-out; 65 | transition-property: background, border, padding; 66 | 67 | & .highlight { 68 | position: absolute; 69 | inset: 20px; 70 | border-radius: 16px; 71 | border: 4px solid var(--highlight-color); 72 | pointer-events: none; 73 | 74 | animation: fadeOut 1s ease-out forwards; 75 | } 76 | 77 | & .inner { 78 | border-radius: calc(var(--card-border-radius)); 79 | width: 100%; 80 | height: 100%; 81 | flex: 1 1 auto; 82 | padding: var(--card-padding); 83 | 84 | display: flex; 85 | align-items: center; 86 | justify-content: center; 87 | flex-direction: column; 88 | 89 | transition: inherit; 90 | 91 | & i { 92 | color: var(--highlight-color); 93 | } 94 | 95 | & .rt-Code { 96 | text-decoration: underline dotted; 97 | cursor: help; 98 | } 99 | } 100 | 101 | &[data-debug-colors='true'] { 102 | --card-background-color: var(--green-4); 103 | box-shadow: var(--shadow-1); 104 | & .inner { 105 | background: var(--blue-4); 106 | box-shadow: var(--shadow-1); 107 | } 108 | } 109 | } 110 | 111 | body:has(#debug-hover:hover) main .rt-BaseCard, 112 | main .rt-BaseCard:has(code:hover), 113 | main .rt-BaseCard:has(code[data-state*='open']) { 114 | --card-background-color: var(--green-4); 115 | box-shadow: var(--shadow-1); 116 | & .inner { 117 | background: var(--blue-4); 118 | box-shadow: var(--shadow-1); 119 | } 120 | } 121 | 122 | .snippet { 123 | position: relative; 124 | display: flex; 125 | align-items: center; 126 | width: 100%; 127 | margin-top: 8px; 128 | 129 | & > code { 130 | min-height: 40px; 131 | display: flex; 132 | align-items: center; 133 | width: 100%; 134 | padding: 12px; 135 | } 136 | 137 | & > button { 138 | position: absolute; 139 | right: 4px; 140 | top: 50%; 141 | transform: translateY(-50%); 142 | 143 | box-sizing: border-box; 144 | padding: 4px; 145 | margin: 0; 146 | width: 32px; 147 | height: 32px; 148 | 149 | & svg { 150 | --size: 20px; 151 | width: var(--size); 152 | height: var(--size); 153 | } 154 | } 155 | } 156 | 157 | #debug-hover { 158 | cursor: help; 159 | border: 1px dashed var(--accent-a6); 160 | box-shadow: none; 161 | 162 | & p > em { 163 | text-decoration: underline dotted; 164 | } 165 | 166 | /* Hide if device doesn't support hover */ 167 | @media (hover: none) { 168 | display: none; 169 | } 170 | } 171 | -------------------------------------------------------------------------------- /playground/src/ResizeCard.tsx: -------------------------------------------------------------------------------- 1 | import { useRef, useState } from 'react'; 2 | 3 | import { Card, Code, Flex, Heading, Text, Spinner } from '@radix-ui/themes'; 4 | 5 | // 1) Import `useResizeDetector` hook from 'react-resize-detector' 6 | import { useResizeDetector } from 'react-resize-detector'; 7 | 8 | import { useDemoContext } from './context'; 9 | import { DimensionsTooltip, getDimensions, useDimensions } from './useDimensions'; 10 | 11 | export const ResizeCard = () => { 12 | const [dimensions, setDimensions] = useDimensions(); 13 | const renderedRef = useRef(0); 14 | renderedRef.current++; 15 | 16 | 17 | const [count, setCount] = useState(0); 18 | const { refreshMode, box, handleHeight, handleWidth, isLoading, disableRerender } = useDemoContext(); 19 | 20 | // 2) Call `useResizeDetector` to get dimensions of the element. 21 | // It will return `width` and `height` of the element in pixels. 22 | // You need to pass a `ref` to the element you want to observe. 23 | const { ref } = useResizeDetector({ 24 | // 3) You can customize `useResizeDetector` behavior by overriding default options. 25 | // For example, you can throttle the refresh rate of the resize event 26 | 27 | // Limit the refresh rate of the resize event. 28 | // Refs: https://es-toolkit.dev/reference/function/debounce.html#debounce 29 | refreshMode, 30 | refreshRate: 200, 31 | 32 | // If you only need to observe the width or height, you can disable the other dimension 33 | handleHeight, 34 | handleWidth, 35 | 36 | // Disable re-renders triggered by the hook. When true, only the onResize callback will be called. 37 | // This is useful when you want to handle resize events without causing component re-renders. 38 | disableRerender, 39 | 40 | // You can pass additional options directly to the ResizeObserver 41 | // For example, you can change the box model used to calculate the dimensions 42 | // By default padding and border are not included in the dimensions 43 | observerOptions: { 44 | box, 45 | }, 46 | 47 | // You can attach a side effect to the resize event 48 | // For example, count the number of times the element has been resized 49 | onResize: ({ width, height, entry }) => { 50 | if (width && height) { 51 | if (!disableRerender) { 52 | setCount((count) => count + 1); 53 | setDimensions(getDimensions(entry)); 54 | } else { 55 | setDimensions(prev => { 56 | const newDimensions = getDimensions(entry); 57 | if ((prev.inner.width >= 300 && newDimensions.inner.width < 300) 58 | || (prev.inner.width <= 300 && newDimensions.inner.width >= 300)) { 59 | setCount((count) => count + 1); 60 | return newDimensions; 61 | } 62 | return prev; 63 | }); 64 | } 65 | } 66 | }, 67 | 68 | // For the full list of options, see the API section in the README: 69 | // https://github.com/maslianok/react-resize-detector/tree/master?tab=readme-ov-file#api 70 | }); 71 | 72 | // 4) `useResizeDetector` supports dynamic ref change. It's useful when you 73 | // need to use conditional rendering or when the ref is not available immediately. 74 | if (isLoading) { 75 | return ( 76 | 77 | 78 | 79 | ); 80 | } 81 | 82 | return ( 83 | 88 |
89 |
90 | 91 | Card resized {count} times 92 | 93 | 94 | Width:{' '} 95 | 96 | {dimensions.inner.width}px 97 | 98 | , Height:{' '} 99 | 100 | {dimensions.inner.height}px 101 | 102 | 103 | 104 | Rendered: {renderedRef.current} 105 |
106 | 107 | ); 108 | }; 109 | -------------------------------------------------------------------------------- /src/useResizeDetector.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState, useRef, useCallback } from 'react'; 2 | import type { DebouncedFunc } from 'es-toolkit/compat'; 3 | 4 | import { getDimensions, patchResizeCallback, useCallbackRef, useRefProxy } from './utils.js'; 5 | 6 | import type { Dimensions, UseResizeDetectorReturn, useResizeDetectorProps } from './types.js'; 7 | 8 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 9 | function useResizeDetector({ 10 | skipOnMount = false, 11 | refreshMode, 12 | refreshRate = 1000, 13 | refreshOptions, 14 | handleWidth = true, 15 | handleHeight = true, 16 | targetRef, 17 | observerOptions, 18 | onResize, 19 | disableRerender = false, 20 | }: useResizeDetectorProps = {}): UseResizeDetectorReturn { 21 | // If `skipOnMount` is enabled, skip the first resize event 22 | const skipResize = useRef(skipOnMount); 23 | 24 | // Wrap the `onResize` callback with a ref to avoid re-renders 25 | const onResizeRef = useCallbackRef(onResize); 26 | 27 | const [size, setSize] = useState({ 28 | width: undefined, 29 | height: undefined, 30 | }); 31 | 32 | const sizeRef = useRef({ 33 | width: undefined, 34 | height: undefined, 35 | }); 36 | 37 | // Create a proxy ref to handle conditional rendering and dynamic ref changes of the target element 38 | const { refProxy, refElement } = useRefProxy(targetRef); 39 | 40 | const { box } = observerOptions || {}; 41 | 42 | const resizeCallback: ResizeObserverCallback = useCallback( 43 | (entries: ResizeObserverEntry[]) => { 44 | if (!handleWidth && !handleHeight) return; 45 | 46 | if (skipResize.current) { 47 | skipResize.current = false; 48 | return; 49 | } 50 | 51 | // Only update the size if one of the observed dimensions has changed 52 | const shouldSetSize = (prevSize: Dimensions, nextSize: Dimensions) => 53 | (handleWidth && prevSize.width !== nextSize.width) || (handleHeight && prevSize.height !== nextSize.height); 54 | 55 | entries.forEach((entry) => { 56 | const dimensions = getDimensions(entry, box); 57 | if (disableRerender) { 58 | if (shouldSetSize(sizeRef.current, dimensions)) { 59 | sizeRef.current.width = dimensions.width; 60 | sizeRef.current.height = dimensions.height; 61 | onResizeRef?.({ 62 | width: dimensions.width, 63 | height: dimensions.height, 64 | entry, 65 | }); 66 | } 67 | } else { 68 | setSize((prevSize) => { 69 | if (!shouldSetSize(prevSize, dimensions)) return prevSize; 70 | onResizeRef?.({ 71 | width: dimensions.width, 72 | height: dimensions.height, 73 | entry, 74 | }); 75 | return dimensions; 76 | }); 77 | } 78 | }); 79 | }, 80 | [handleWidth, handleHeight, skipResize, box, disableRerender], 81 | ); 82 | 83 | // Throttle/Debounce the resize event if refreshMode is configured 84 | const resizeHandler = useCallback(patchResizeCallback(resizeCallback, refreshMode, refreshRate, refreshOptions), [ 85 | resizeCallback, 86 | refreshMode, 87 | refreshRate, 88 | refreshOptions, 89 | ]); 90 | 91 | // Attach ResizeObserver to the element 92 | useEffect(() => { 93 | let resizeObserver: ResizeObserver | undefined; 94 | if (refElement) { 95 | try { 96 | resizeObserver = new window.ResizeObserver(resizeHandler); 97 | resizeObserver.observe(refElement, observerOptions); 98 | } catch (error) { 99 | console.warn('ResizeObserver not supported or failed to initialize:', error); 100 | } 101 | } 102 | // If refElement is not available, reset the size 103 | else if (size.width || size.height) { 104 | onResizeRef?.({ 105 | width: null, 106 | height: null, 107 | entry: null, 108 | }); 109 | sizeRef.current.width = undefined; 110 | sizeRef.current.height = undefined; 111 | if (!disableRerender) { 112 | setSize({ width: undefined, height: undefined }); 113 | } 114 | } 115 | 116 | // Disconnect the ResizeObserver when the component is unmounted 117 | return () => { 118 | resizeObserver?.disconnect?.(); 119 | (resizeHandler as DebouncedFunc).cancel?.(); 120 | }; 121 | }, [resizeHandler, refElement]); 122 | 123 | return { ref: refProxy, ...(disableRerender ? sizeRef.current : size) }; 124 | } 125 | 126 | export default useResizeDetector; 127 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { debounce, throttle } from 'es-toolkit/compat' 3 | import type { DebouncedFunc } from 'es-toolkit/compat' 4 | 5 | 6 | import { OnRefChangeType, Props } from './types.js'; 7 | 8 | export type PatchedResizeObserverCallback = DebouncedFunc | ResizeObserverCallback; 9 | 10 | /** 11 | * Wraps the resize callback with a es-toolkit debounce / throttle based on the refresh mode 12 | */ 13 | export const patchResizeCallback = ( 14 | resizeCallback: ResizeObserverCallback, 15 | refreshMode: Props['refreshMode'], 16 | refreshRate: Props['refreshRate'], 17 | refreshOptions: Props['refreshOptions'], 18 | ): PatchedResizeObserverCallback => { 19 | switch (refreshMode) { 20 | case 'debounce': 21 | return debounce(resizeCallback, refreshRate, refreshOptions); 22 | case 'throttle': 23 | return throttle(resizeCallback, refreshRate, refreshOptions); 24 | default: 25 | return resizeCallback; 26 | } 27 | }; 28 | 29 | /** 30 | * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a 31 | * prop or avoid re-executing effects when passed as a dependency 32 | */ 33 | export const useCallbackRef = 34 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 35 | any>(callback: T | undefined): T => { 36 | const callbackRef = React.useRef(callback); 37 | 38 | React.useEffect(() => { 39 | callbackRef.current = callback; 40 | }); 41 | 42 | return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []); 43 | }; 44 | 45 | /** `useRef` hook doesn't handle conditional rendering or dynamic ref changes. 46 | * This hook creates a proxy that ensures that `refElement` is updated whenever the ref is changed. */ 47 | export const useRefProxy = 48 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 49 | (targetRef: React.MutableRefObject | undefined) => { 50 | // we are going to use this ref to store the last element that was passed to the hook 51 | const [refElement, setRefElement] = React.useState(targetRef?.current || null); 52 | 53 | // if targetRef is passed, we need to update the refElement 54 | // we have to use setTimeout because ref get assigned after the hook is called 55 | // in the future releases we are going to remove targetRef and force users to use ref returned by the hook 56 | if (targetRef) { 57 | setTimeout(() => { 58 | if (targetRef.current !== refElement) { 59 | setRefElement(targetRef.current); 60 | } 61 | }, 0); 62 | } 63 | 64 | // this is a memo that will be called every time the ref is changed 65 | // This proxy will properly call setState either when the ref is called as a function or when `.current` is set 66 | // we call setState inside to trigger rerender 67 | const refProxy: OnRefChangeType = React.useMemo( 68 | () => 69 | new Proxy( 70 | (node) => { 71 | if (node !== refElement) { 72 | setRefElement(node); 73 | } 74 | }, 75 | { 76 | get(target, prop) { 77 | if (prop === 'current') { 78 | return refElement; 79 | } 80 | return target[prop]; 81 | }, 82 | set(target, prop, value) { 83 | if (prop === 'current') { 84 | setRefElement(value); 85 | } else { 86 | target[prop] = value; 87 | } 88 | return true; 89 | }, 90 | }, 91 | ), 92 | [refElement], 93 | ); 94 | 95 | return { refProxy, refElement, setRefElement }; 96 | }; 97 | 98 | /** Calculates the dimensions of the element based on the current box model. 99 | * @see https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model 100 | */ 101 | export const getDimensions = (entry: ResizeObserverEntry, box: ResizeObserverBoxOptions | undefined) => { 102 | // Value Border Padding Inner Content 103 | // --------------------------------------------------- 104 | // 'border-box' Yes Yes Yes 105 | // 'content-box' No No Yes 106 | // undefined No No? Yes 107 | 108 | const borderBox = entry.borderBoxSize?.[0]; 109 | const contentBox = entry.contentBoxSize?.[0]; 110 | 111 | if (box === 'border-box' && borderBox) { 112 | return { 113 | width: borderBox.inlineSize, 114 | height: borderBox.blockSize, 115 | }; 116 | } 117 | 118 | if (box === 'content-box' && contentBox) { 119 | return { 120 | width: contentBox.inlineSize, 121 | height: contentBox.blockSize, 122 | }; 123 | } 124 | 125 | return { 126 | width: entry.contentRect.width, 127 | height: entry.contentRect.height, 128 | }; 129 | }; 130 | -------------------------------------------------------------------------------- /playground/src/useDimensions.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import { Code, DataList, Tooltip, Theme } from '@radix-ui/themes'; 3 | 4 | export interface TRBL { 5 | top: number; 6 | right: number; 7 | bottom: number; 8 | left: number; 9 | } 10 | 11 | export interface Dimensions { 12 | border: TRBL; 13 | padding: TRBL; 14 | inner: { 15 | width: number; 16 | height: number; 17 | }; 18 | } 19 | 20 | const defaultValue: TRBL = { 21 | top: 0, 22 | right: 0, 23 | bottom: 0, 24 | left: 0, 25 | }; 26 | 27 | // You can use the `ResizeObserverEntry` returned in the `onResize` callback to calculate border and padding dimensions of the element. 28 | export const getDimensions = (entry: ResizeObserverEntry): Dimensions => { 29 | const style = getComputedStyle(entry.target); 30 | 31 | // Get the border and padding dimensions of the element 32 | const border = { 33 | top: parseFloat(style.borderTopWidth), 34 | right: parseFloat(style.borderRightWidth), 35 | bottom: parseFloat(style.borderBottomWidth), 36 | left: parseFloat(style.borderLeftWidth), 37 | }; 38 | const padding = { 39 | top: parseFloat(style.paddingTop), 40 | right: parseFloat(style.paddingRight), 41 | bottom: parseFloat(style.paddingBottom), 42 | left: parseFloat(style.paddingLeft), 43 | }; 44 | 45 | // You can calculate the inner content dimensions by subtracting the border and padding from the content box size, 46 | // Or you can use the `contentBoxSize` property of the `ResizeObserverEntry` object directly. 47 | const inner = { 48 | width: entry.contentBoxSize[0].inlineSize, 49 | height: entry.contentBoxSize[0].blockSize, 50 | }; 51 | 52 | return { 53 | border, 54 | padding, 55 | inner, 56 | }; 57 | }; 58 | 59 | export const useDimensions = () => 60 | useState({ 61 | border: defaultValue, 62 | padding: defaultValue, 63 | inner: { 64 | width: 0, 65 | height: 0, 66 | }, 67 | }); 68 | 69 | export const DimensionsTooltip = ({ 70 | dimensions, 71 | children, 72 | orientation, 73 | }: { 74 | dimensions: Dimensions; 75 | children: React.ReactNode; 76 | orientation: 'horizontal' | 'vertical'; 77 | }) => { 78 | if (orientation === 'horizontal') { 79 | return ( 80 | 83 | 84 | 85 | Border left: 86 | 87 | {dimensions.border.left}px 88 | 89 | 90 | 91 | Padding left: 92 | 93 | {dimensions.padding.left}px 94 | 95 | 96 | 97 | Inner width: 98 | 99 | {dimensions.inner.width}px 100 | 101 | 102 | 103 | Padding right: 104 | 105 | {dimensions.padding.right}px 106 | 107 | 108 | 109 | Border right: 110 | 111 | {dimensions.border.right}px 112 | 113 | 114 | 115 | 116 | } 117 | > 118 | {children} 119 | 120 | ); 121 | } 122 | 123 | return ( 124 | 127 | 128 | 129 | Border top: 130 | 131 | {dimensions.border.top}px 132 | 133 | 134 | 135 | Padding top: 136 | 137 | {dimensions.padding.top}px 138 | 139 | 140 | 141 | Inner height: 142 | 143 | {dimensions.inner.height}px 144 | 145 | 146 | 147 | Padding bottom: 148 | 149 | {dimensions.padding.bottom}px 150 | 151 | 152 | 153 | Border bottom: 154 | 155 | {dimensions.border.bottom}px 156 | 157 | 158 | 159 | 160 | } 161 | > 162 | {children} 163 | 164 | ); 165 | }; 166 | -------------------------------------------------------------------------------- /playground/src/BackgroundImage.tsx: -------------------------------------------------------------------------------- 1 | export const BackgroundImage = ({ style, ...props }: React.ComponentPropsWithoutRef<'svg'>) => ( 2 | 11 | 12 | 16 | 20 | 24 | 25 | 29 | 30 | 34 | 35 | 36 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | ); 119 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Handle element resizes like it's 2025! 2 | 3 | 4 | 5 | #### [Live demo](https://react-resize-detector.vercel.app/) 6 | 7 | Modern browsers now have native support for detecting element size changes through [ResizeObservers](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver). This library utilizes ResizeObservers to facilitate managing element size changes in React applications. 8 | 9 | 🐥 Tiny ~2kb 10 | 11 | 🐼 Written in TypeScript 12 | 13 | 🐠 Used by 170k repositories 14 | 15 | 🦄 Produces 100 million downloads annually 16 | 17 | No `window.resize` listeners! No timeouts! 18 | 19 | ## Should you use this library? 20 | 21 | **Consider CSS Container Queries first!** They now work in [all major browsers](https://caniuse.com/css-container-queries) and might solve your use case with pure CSS. 22 | 23 |
CSS Container Queries Example 24 | 25 | ```html 26 |
27 |
28 |

Card title

29 |

Card content

30 |
31 |
32 | ``` 33 | 34 | ```css 35 | .post { 36 | container-type: inline-size; 37 | } 38 | 39 | /* Default heading styles for the card title */ 40 | .card h2 { 41 | font-size: 1em; 42 | } 43 | 44 | /* If the container is larger than 700px */ 45 | @container (min-width: 700px) { 46 | .card h2 { 47 | font-size: 2em; 48 | } 49 | } 50 | ``` 51 | 52 |
53 | 54 | **Use this library when you need:** 55 | 56 | - JavaScript-based resize logic with full TypeScript support 57 | - Complex calculations based on dimensions 58 | - Integration with React state/effects 59 | - Programmatic control over resize behavior 60 | 61 | ## Installation 62 | 63 | ```bash 64 | npm install react-resize-detector 65 | # OR 66 | yarn add react-resize-detector 67 | # OR 68 | pnpm add react-resize-detector 69 | ``` 70 | 71 | ## Quick Start 72 | 73 | ### Basic Usage 74 | 75 | ```tsx 76 | import { useResizeDetector } from 'react-resize-detector'; 77 | 78 | const CustomComponent = () => { 79 | const { width, height, ref } = useResizeDetector(); 80 | return
{`${width}x${height}`}
; 81 | }; 82 | ``` 83 | 84 | ### With Resize Callback 85 | 86 | ```tsx 87 | import { useCallback } from 'react'; 88 | import { useResizeDetector, OnResizeCallback } from 'react-resize-detector'; 89 | 90 | const CustomComponent = () => { 91 | const onResize: OnResizeCallback = useCallback((payload) => { 92 | if (payload.width !== null && payload.height !== null) { 93 | console.log('Dimensions:', payload.width, payload.height); 94 | } else { 95 | console.log('Element unmounted'); 96 | } 97 | }, []); 98 | 99 | const { width, height, ref } = useResizeDetector({ 100 | onResize, 101 | }); 102 | 103 | return
{`${width}x${height}`}
; 104 | }; 105 | ``` 106 | 107 | ### With External Ref (Advanced) 108 | 109 | _It's not advised to use this approach, as dynamically mounting and unmounting the observed element could lead to unexpected behavior._ 110 | 111 | ```tsx 112 | import { useRef } from 'react'; 113 | import { useResizeDetector } from 'react-resize-detector'; 114 | 115 | const CustomComponent = () => { 116 | const targetRef = useRef(null); 117 | const { width, height } = useResizeDetector({ targetRef }); 118 | return
{`${width}x${height}`}
; 119 | }; 120 | ``` 121 | 122 | ## API Reference 123 | 124 | ### Hook Signature 125 | 126 | ```typescript 127 | useResizeDetector( 128 | props?: useResizeDetectorProps 129 | ): UseResizeDetectorReturn 130 | ``` 131 | 132 | ### Props 133 | 134 | | Prop | Type | Description | Default | 135 | | ----------------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ----------- | 136 | | `onResize` | `(payload: ResizePayload) => void` | Callback invoked with resize information | `undefined` | 137 | | `handleWidth` | `boolean` | Trigger updates on width changes | `true` | 138 | | `handleHeight` | `boolean` | Trigger updates on height changes | `true` | 139 | | `skipOnMount` | `boolean` | Skip the first resize event when component mounts | `false` | 140 | | `disableRerender` | `boolean` | Disable re-renders triggered by the hook. Only the onResize callback will be called | `false` | 141 | | `refreshMode` | `'throttle' \| 'debounce'` | Rate limiting strategy. See [es-toolkit docs](https://es-toolkit.dev) | `undefined` | 142 | | `refreshRate` | `number` | Delay in milliseconds for rate limiting | `1000` | 143 | | `refreshOptions` | `{ leading?: boolean; trailing?: boolean }` | Additional options for throttle/debounce | `undefined` | 144 | | `observerOptions` | `ResizeObserverOptions` | Options passed to [`resizeObserver.observe`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe) | `undefined` | 145 | | `targetRef` | `MutableRefObject` | External ref to observe (use with caution) | `undefined` | 146 | 147 | ## Advanced Examples 148 | 149 | ### Responsive Component 150 | 151 | ```jsx 152 | import { useResizeDetector } from 'react-resize-detector'; 153 | 154 | const ResponsiveCard = () => { 155 | const { width, ref } = useResizeDetector(); 156 | 157 | const cardStyle = { 158 | padding: width > 600 ? '2rem' : '1rem', 159 | fontSize: width > 400 ? '1.2em' : '1em', 160 | flexDirection: width > 500 ? 'row' : 'column', 161 | }; 162 | 163 | return ( 164 |
165 |

Responsive Card

166 |

Width: {width}px

167 |
168 | ); 169 | }; 170 | ``` 171 | 172 | ### Chart Resizing 173 | 174 | ```jsx 175 | import { useResizeDetector } from 'react-resize-detector'; 176 | import { useEffect, useRef } from 'react'; 177 | 178 | const Chart = () => { 179 | const chartRef = useRef(null); 180 | const { width, height, ref } = useResizeDetector({ 181 | refreshMode: 'debounce', 182 | refreshRate: 100, 183 | }); 184 | 185 | useEffect(() => { 186 | if (width && height && chartRef.current) { 187 | // Redraw chart with new dimensions 188 | redrawChart(chartRef.current, width, height); 189 | } 190 | }, [width, height]); 191 | 192 | return ; 193 | }; 194 | ``` 195 | 196 | ### Performance Optimization 197 | 198 | ```jsx 199 | import { useResizeDetector } from 'react-resize-detector'; 200 | 201 | const OptimizedComponent = () => { 202 | const { width, height, ref } = useResizeDetector({ 203 | // Only track width changes 204 | handleHeight: false, 205 | // Debounce rapid changes 206 | refreshMode: 'debounce', 207 | refreshRate: 150, 208 | // Skip initial mount calculation 209 | skipOnMount: true, 210 | // Use border-box for more accurate measurements 211 | observerOptions: { box: 'border-box' }, 212 | }); 213 | 214 | return
Optimized: {width}px wide
; 215 | }; 216 | ``` 217 | 218 | ### Disable Re-renders 219 | 220 | ```jsx 221 | import { useResizeDetector } from 'react-resize-detector'; 222 | 223 | const NonRerenderingComponent = () => { 224 | const { ref } = useResizeDetector({ 225 | // Disable re-renders triggered by the hook 226 | disableRerender: true, 227 | // Handle resize events through callback only 228 | onResize: ({ width, height }) => { 229 | // Update external state or perform side effects 230 | // without causing component re-renders 231 | console.log('Resized to:', width, height); 232 | }, 233 | }); 234 | 235 | return
This component won't re-render on resize
; 236 | }; 237 | ``` 238 | 239 | ## Browser Support 240 | 241 | - ✅ Chrome 64+ 242 | - ✅ Firefox 69+ 243 | - ✅ Safari 13.1+ 244 | - ✅ Edge 79+ 245 | 246 | For older browsers, consider using a [ResizeObserver polyfill](https://github.com/que-etc/resize-observer-polyfill). 247 | 248 | ## Testing 249 | 250 | ```jsx 251 | const { ResizeObserver } = window; 252 | 253 | beforeEach(() => { 254 | delete window.ResizeObserver; 255 | // Mock ResizeObserver for tests 256 | window.ResizeObserver = jest.fn().mockImplementation(() => ({ 257 | observe: jest.fn(), 258 | unobserve: jest.fn(), 259 | disconnect: jest.fn(), 260 | })); 261 | }); 262 | 263 | afterEach(() => { 264 | window.ResizeObserver = ResizeObserver; 265 | jest.restoreAllMocks(); 266 | }); 267 | ``` 268 | 269 | ## Performance Tips 270 | 271 | 1. **Use `handleWidth`/`handleHeight: false`** if you only need one dimension 272 | 2. **Enable `skipOnMount: true`** if you don't need initial measurements 273 | 3. **Use `debounce` or `throttle`** for expensive resize handlers 274 | 4. **Specify `observerOptions.box`** for consistent measurements 275 | 276 | ## License 277 | 278 | MIT 279 | 280 | ## ❤️ Support 281 | 282 | Show us some love and STAR ⭐ the project if you find it useful 283 | -------------------------------------------------------------------------------- /playground/src/Sidebar.tsx: -------------------------------------------------------------------------------- 1 | import { useCallback } from 'react'; 2 | 3 | import { 4 | Button, 5 | Code, 6 | Flex, 7 | Heading, 8 | Link, 9 | Tabs, 10 | Text, 11 | Theme, 12 | RadioCards, 13 | Switch, 14 | Spinner, 15 | ScrollArea, 16 | Badge, 17 | Table, 18 | Tooltip, 19 | Callout, 20 | } from '@radix-ui/themes'; 21 | import { Github, MessageCircleQuestion, Rocket, WandSparkles } from 'lucide-react'; 22 | 23 | import { Box, RefreshModeType, useDemoContext } from './context'; 24 | import { Snippet } from './Snippet'; 25 | 26 | export const Sidebar = () => { 27 | const { 28 | box, 29 | setBox, 30 | refreshMode, 31 | setRefreshMode, 32 | handleHeight, 33 | setHandleHeight, 34 | handleWidth, 35 | setHandleWidth, 36 | isLoading, 37 | setIsLoading, 38 | disableRerender, 39 | setDisableRerender, 40 | } = useDemoContext(); 41 | 42 | const toggleLoading = useCallback(() => { 43 | setIsLoading(true); 44 | setTimeout(() => setIsLoading(false), 1000); 45 | }, []); 46 | 47 | return ( 48 | 49 | 348 | 349 | ); 350 | }; 351 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | es-toolkit: 12 | specifier: ^1.39.6 13 | version: 1.39.6 14 | react: 15 | specifier: ^18.0.0 || ^19.0.0 16 | version: 19.0.0 17 | devDependencies: 18 | '@eslint/js': 19 | specifier: ^9.28.0 20 | version: 9.28.0 21 | '@rollup/plugin-commonjs': 22 | specifier: ^28.0.3 23 | version: 28.0.3(rollup@4.42.0) 24 | '@rollup/plugin-node-resolve': 25 | specifier: ^16.0.1 26 | version: 16.0.1(rollup@4.42.0) 27 | '@rollup/plugin-typescript': 28 | specifier: ^12.1.2 29 | version: 12.1.2(rollup@4.42.0)(tslib@2.8.1)(typescript@5.8.3) 30 | '@types/react': 31 | specifier: ^19.1.7 32 | version: 19.1.7 33 | '@types/react-dom': 34 | specifier: ^19.1.6 35 | version: 19.1.6(@types/react@19.1.7) 36 | eslint: 37 | specifier: ^9.28.0 38 | version: 9.28.0 39 | eslint-config-prettier: 40 | specifier: ^10.1.5 41 | version: 10.1.5(eslint@9.28.0) 42 | eslint-plugin-react: 43 | specifier: ^7.37.5 44 | version: 7.37.5(eslint@9.28.0) 45 | prettier: 46 | specifier: ^3.5.3 47 | version: 3.5.3 48 | rollup: 49 | specifier: ^4.42.0 50 | version: 4.42.0 51 | rollup-plugin-node-externals: 52 | specifier: ^8.0.0 53 | version: 8.0.0(rollup@4.42.0) 54 | tslib: 55 | specifier: ^2.8.1 56 | version: 2.8.1 57 | typescript: 58 | specifier: ^5.8.3 59 | version: 5.8.3 60 | typescript-eslint: 61 | specifier: ^8.34.0 62 | version: 8.34.0(eslint@9.28.0)(typescript@5.8.3) 63 | 64 | packages: 65 | 66 | '@eslint-community/eslint-utils@4.4.1': 67 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 68 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 69 | peerDependencies: 70 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 71 | 72 | '@eslint-community/eslint-utils@4.7.0': 73 | resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} 74 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 75 | peerDependencies: 76 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 77 | 78 | '@eslint-community/regexpp@4.12.1': 79 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 80 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 81 | 82 | '@eslint/config-array@0.20.0': 83 | resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} 84 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 85 | 86 | '@eslint/config-helpers@0.2.2': 87 | resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} 88 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 89 | 90 | '@eslint/core@0.14.0': 91 | resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} 92 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 93 | 94 | '@eslint/eslintrc@3.3.1': 95 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 96 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 97 | 98 | '@eslint/js@9.28.0': 99 | resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==} 100 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 101 | 102 | '@eslint/object-schema@2.1.6': 103 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 104 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 105 | 106 | '@eslint/plugin-kit@0.3.1': 107 | resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} 108 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 109 | 110 | '@humanfs/core@0.19.1': 111 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 112 | engines: {node: '>=18.18.0'} 113 | 114 | '@humanfs/node@0.16.6': 115 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 116 | engines: {node: '>=18.18.0'} 117 | 118 | '@humanwhocodes/module-importer@1.0.1': 119 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 120 | engines: {node: '>=12.22'} 121 | 122 | '@humanwhocodes/retry@0.3.1': 123 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 124 | engines: {node: '>=18.18'} 125 | 126 | '@humanwhocodes/retry@0.4.3': 127 | resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 128 | engines: {node: '>=18.18'} 129 | 130 | '@jridgewell/sourcemap-codec@1.5.0': 131 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 132 | 133 | '@nodelib/fs.scandir@2.1.5': 134 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 135 | engines: {node: '>= 8'} 136 | 137 | '@nodelib/fs.stat@2.0.5': 138 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 139 | engines: {node: '>= 8'} 140 | 141 | '@nodelib/fs.walk@1.2.8': 142 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 143 | engines: {node: '>= 8'} 144 | 145 | '@rollup/plugin-commonjs@28.0.3': 146 | resolution: {integrity: sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==} 147 | engines: {node: '>=16.0.0 || 14 >= 14.17'} 148 | peerDependencies: 149 | rollup: ^2.68.0||^3.0.0||^4.0.0 150 | peerDependenciesMeta: 151 | rollup: 152 | optional: true 153 | 154 | '@rollup/plugin-node-resolve@16.0.1': 155 | resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} 156 | engines: {node: '>=14.0.0'} 157 | peerDependencies: 158 | rollup: ^2.78.0||^3.0.0||^4.0.0 159 | peerDependenciesMeta: 160 | rollup: 161 | optional: true 162 | 163 | '@rollup/plugin-typescript@12.1.2': 164 | resolution: {integrity: sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==} 165 | engines: {node: '>=14.0.0'} 166 | peerDependencies: 167 | rollup: ^2.14.0||^3.0.0||^4.0.0 168 | tslib: '*' 169 | typescript: '>=3.7.0' 170 | peerDependenciesMeta: 171 | rollup: 172 | optional: true 173 | tslib: 174 | optional: true 175 | 176 | '@rollup/pluginutils@5.1.4': 177 | resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} 178 | engines: {node: '>=14.0.0'} 179 | peerDependencies: 180 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 181 | peerDependenciesMeta: 182 | rollup: 183 | optional: true 184 | 185 | '@rollup/rollup-android-arm-eabi@4.42.0': 186 | resolution: {integrity: sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==} 187 | cpu: [arm] 188 | os: [android] 189 | 190 | '@rollup/rollup-android-arm64@4.42.0': 191 | resolution: {integrity: sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==} 192 | cpu: [arm64] 193 | os: [android] 194 | 195 | '@rollup/rollup-darwin-arm64@4.42.0': 196 | resolution: {integrity: sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==} 197 | cpu: [arm64] 198 | os: [darwin] 199 | 200 | '@rollup/rollup-darwin-x64@4.42.0': 201 | resolution: {integrity: sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==} 202 | cpu: [x64] 203 | os: [darwin] 204 | 205 | '@rollup/rollup-freebsd-arm64@4.42.0': 206 | resolution: {integrity: sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==} 207 | cpu: [arm64] 208 | os: [freebsd] 209 | 210 | '@rollup/rollup-freebsd-x64@4.42.0': 211 | resolution: {integrity: sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==} 212 | cpu: [x64] 213 | os: [freebsd] 214 | 215 | '@rollup/rollup-linux-arm-gnueabihf@4.42.0': 216 | resolution: {integrity: sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==} 217 | cpu: [arm] 218 | os: [linux] 219 | 220 | '@rollup/rollup-linux-arm-musleabihf@4.42.0': 221 | resolution: {integrity: sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==} 222 | cpu: [arm] 223 | os: [linux] 224 | 225 | '@rollup/rollup-linux-arm64-gnu@4.42.0': 226 | resolution: {integrity: sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==} 227 | cpu: [arm64] 228 | os: [linux] 229 | 230 | '@rollup/rollup-linux-arm64-musl@4.42.0': 231 | resolution: {integrity: sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==} 232 | cpu: [arm64] 233 | os: [linux] 234 | 235 | '@rollup/rollup-linux-loongarch64-gnu@4.42.0': 236 | resolution: {integrity: sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==} 237 | cpu: [loong64] 238 | os: [linux] 239 | 240 | '@rollup/rollup-linux-powerpc64le-gnu@4.42.0': 241 | resolution: {integrity: sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==} 242 | cpu: [ppc64] 243 | os: [linux] 244 | 245 | '@rollup/rollup-linux-riscv64-gnu@4.42.0': 246 | resolution: {integrity: sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==} 247 | cpu: [riscv64] 248 | os: [linux] 249 | 250 | '@rollup/rollup-linux-riscv64-musl@4.42.0': 251 | resolution: {integrity: sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==} 252 | cpu: [riscv64] 253 | os: [linux] 254 | 255 | '@rollup/rollup-linux-s390x-gnu@4.42.0': 256 | resolution: {integrity: sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==} 257 | cpu: [s390x] 258 | os: [linux] 259 | 260 | '@rollup/rollup-linux-x64-gnu@4.42.0': 261 | resolution: {integrity: sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==} 262 | cpu: [x64] 263 | os: [linux] 264 | 265 | '@rollup/rollup-linux-x64-musl@4.42.0': 266 | resolution: {integrity: sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==} 267 | cpu: [x64] 268 | os: [linux] 269 | 270 | '@rollup/rollup-win32-arm64-msvc@4.42.0': 271 | resolution: {integrity: sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==} 272 | cpu: [arm64] 273 | os: [win32] 274 | 275 | '@rollup/rollup-win32-ia32-msvc@4.42.0': 276 | resolution: {integrity: sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==} 277 | cpu: [ia32] 278 | os: [win32] 279 | 280 | '@rollup/rollup-win32-x64-msvc@4.42.0': 281 | resolution: {integrity: sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==} 282 | cpu: [x64] 283 | os: [win32] 284 | 285 | '@types/estree@1.0.6': 286 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 287 | 288 | '@types/estree@1.0.7': 289 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 290 | 291 | '@types/json-schema@7.0.15': 292 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 293 | 294 | '@types/react-dom@19.1.6': 295 | resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} 296 | peerDependencies: 297 | '@types/react': ^19.0.0 298 | 299 | '@types/react@19.1.7': 300 | resolution: {integrity: sha512-BnsPLV43ddr05N71gaGzyZ5hzkCmGwhMvYc8zmvI8Ci1bRkkDSzDDVfAXfN2tk748OwI7ediiPX6PfT9p0QGVg==} 301 | 302 | '@types/resolve@1.20.2': 303 | resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 304 | 305 | '@typescript-eslint/eslint-plugin@8.34.0': 306 | resolution: {integrity: sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==} 307 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 308 | peerDependencies: 309 | '@typescript-eslint/parser': ^8.34.0 310 | eslint: ^8.57.0 || ^9.0.0 311 | typescript: '>=4.8.4 <5.9.0' 312 | 313 | '@typescript-eslint/parser@8.34.0': 314 | resolution: {integrity: sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==} 315 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 316 | peerDependencies: 317 | eslint: ^8.57.0 || ^9.0.0 318 | typescript: '>=4.8.4 <5.9.0' 319 | 320 | '@typescript-eslint/project-service@8.34.0': 321 | resolution: {integrity: sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==} 322 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 323 | peerDependencies: 324 | typescript: '>=4.8.4 <5.9.0' 325 | 326 | '@typescript-eslint/scope-manager@8.34.0': 327 | resolution: {integrity: sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==} 328 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 329 | 330 | '@typescript-eslint/tsconfig-utils@8.34.0': 331 | resolution: {integrity: sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==} 332 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 333 | peerDependencies: 334 | typescript: '>=4.8.4 <5.9.0' 335 | 336 | '@typescript-eslint/type-utils@8.34.0': 337 | resolution: {integrity: sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==} 338 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 339 | peerDependencies: 340 | eslint: ^8.57.0 || ^9.0.0 341 | typescript: '>=4.8.4 <5.9.0' 342 | 343 | '@typescript-eslint/types@8.34.0': 344 | resolution: {integrity: sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==} 345 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 346 | 347 | '@typescript-eslint/typescript-estree@8.34.0': 348 | resolution: {integrity: sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==} 349 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 350 | peerDependencies: 351 | typescript: '>=4.8.4 <5.9.0' 352 | 353 | '@typescript-eslint/utils@8.34.0': 354 | resolution: {integrity: sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==} 355 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 356 | peerDependencies: 357 | eslint: ^8.57.0 || ^9.0.0 358 | typescript: '>=4.8.4 <5.9.0' 359 | 360 | '@typescript-eslint/visitor-keys@8.34.0': 361 | resolution: {integrity: sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==} 362 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 363 | 364 | acorn-jsx@5.3.2: 365 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 366 | peerDependencies: 367 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 368 | 369 | acorn@8.14.0: 370 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 371 | engines: {node: '>=0.4.0'} 372 | hasBin: true 373 | 374 | ajv@6.12.6: 375 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 376 | 377 | ansi-styles@4.3.0: 378 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 379 | engines: {node: '>=8'} 380 | 381 | argparse@2.0.1: 382 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 383 | 384 | array-buffer-byte-length@1.0.2: 385 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 386 | engines: {node: '>= 0.4'} 387 | 388 | array-includes@3.1.8: 389 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 390 | engines: {node: '>= 0.4'} 391 | 392 | array.prototype.findlast@1.2.5: 393 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 394 | engines: {node: '>= 0.4'} 395 | 396 | array.prototype.flat@1.3.3: 397 | resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} 398 | engines: {node: '>= 0.4'} 399 | 400 | array.prototype.flatmap@1.3.3: 401 | resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} 402 | engines: {node: '>= 0.4'} 403 | 404 | array.prototype.tosorted@1.1.4: 405 | resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} 406 | engines: {node: '>= 0.4'} 407 | 408 | arraybuffer.prototype.slice@1.0.4: 409 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 410 | engines: {node: '>= 0.4'} 411 | 412 | available-typed-arrays@1.0.7: 413 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 414 | engines: {node: '>= 0.4'} 415 | 416 | balanced-match@1.0.2: 417 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 418 | 419 | brace-expansion@1.1.11: 420 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 421 | 422 | brace-expansion@2.0.1: 423 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 424 | 425 | braces@3.0.3: 426 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 427 | engines: {node: '>=8'} 428 | 429 | call-bind-apply-helpers@1.0.1: 430 | resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} 431 | engines: {node: '>= 0.4'} 432 | 433 | call-bind-apply-helpers@1.0.2: 434 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 435 | engines: {node: '>= 0.4'} 436 | 437 | call-bind@1.0.8: 438 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 439 | engines: {node: '>= 0.4'} 440 | 441 | call-bound@1.0.3: 442 | resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} 443 | engines: {node: '>= 0.4'} 444 | 445 | call-bound@1.0.4: 446 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 447 | engines: {node: '>= 0.4'} 448 | 449 | callsites@3.1.0: 450 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 451 | engines: {node: '>=6'} 452 | 453 | chalk@4.1.2: 454 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 455 | engines: {node: '>=10'} 456 | 457 | color-convert@2.0.1: 458 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 459 | engines: {node: '>=7.0.0'} 460 | 461 | color-name@1.1.4: 462 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 463 | 464 | commondir@1.0.1: 465 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 466 | 467 | concat-map@0.0.1: 468 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 469 | 470 | cross-spawn@7.0.6: 471 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 472 | engines: {node: '>= 8'} 473 | 474 | csstype@3.1.3: 475 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 476 | 477 | data-view-buffer@1.0.2: 478 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 479 | engines: {node: '>= 0.4'} 480 | 481 | data-view-byte-length@1.0.2: 482 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 483 | engines: {node: '>= 0.4'} 484 | 485 | data-view-byte-offset@1.0.1: 486 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 487 | engines: {node: '>= 0.4'} 488 | 489 | debug@4.4.0: 490 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 491 | engines: {node: '>=6.0'} 492 | peerDependencies: 493 | supports-color: '*' 494 | peerDependenciesMeta: 495 | supports-color: 496 | optional: true 497 | 498 | deep-is@0.1.4: 499 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 500 | 501 | deepmerge@4.3.1: 502 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 503 | engines: {node: '>=0.10.0'} 504 | 505 | define-data-property@1.1.4: 506 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 507 | engines: {node: '>= 0.4'} 508 | 509 | define-properties@1.2.1: 510 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 511 | engines: {node: '>= 0.4'} 512 | 513 | doctrine@2.1.0: 514 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 515 | engines: {node: '>=0.10.0'} 516 | 517 | dunder-proto@1.0.1: 518 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 519 | engines: {node: '>= 0.4'} 520 | 521 | es-abstract@1.23.8: 522 | resolution: {integrity: sha512-lfab8IzDn6EpI1ibZakcgS6WsfEBiB+43cuJo+wgylx1xKXf+Sp+YR3vFuQwC/u3sxYwV8Cxe3B0DpVUu/WiJQ==} 523 | engines: {node: '>= 0.4'} 524 | 525 | es-define-property@1.0.1: 526 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 527 | engines: {node: '>= 0.4'} 528 | 529 | es-errors@1.3.0: 530 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 531 | engines: {node: '>= 0.4'} 532 | 533 | es-iterator-helpers@1.2.1: 534 | resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} 535 | engines: {node: '>= 0.4'} 536 | 537 | es-object-atoms@1.0.0: 538 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 539 | engines: {node: '>= 0.4'} 540 | 541 | es-object-atoms@1.1.1: 542 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 543 | engines: {node: '>= 0.4'} 544 | 545 | es-set-tostringtag@2.0.3: 546 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 547 | engines: {node: '>= 0.4'} 548 | 549 | es-shim-unscopables@1.0.2: 550 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 551 | 552 | es-to-primitive@1.3.0: 553 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 554 | engines: {node: '>= 0.4'} 555 | 556 | es-toolkit@1.39.6: 557 | resolution: {integrity: sha512-uiVjnLem6kkfXumlwUEWEKnwUN5QbSEB0DHy2rNJt0nkYcob5K0TXJ7oJRzhAcvx+SRmz4TahKyN5V9cly/IPA==} 558 | 559 | escape-string-regexp@4.0.0: 560 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 561 | engines: {node: '>=10'} 562 | 563 | eslint-config-prettier@10.1.5: 564 | resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} 565 | hasBin: true 566 | peerDependencies: 567 | eslint: '>=7.0.0' 568 | 569 | eslint-plugin-react@7.37.5: 570 | resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} 571 | engines: {node: '>=4'} 572 | peerDependencies: 573 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 574 | 575 | eslint-scope@8.4.0: 576 | resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} 577 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 578 | 579 | eslint-visitor-keys@3.4.3: 580 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 581 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 582 | 583 | eslint-visitor-keys@4.2.0: 584 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 585 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 586 | 587 | eslint@9.28.0: 588 | resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==} 589 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 590 | hasBin: true 591 | peerDependencies: 592 | jiti: '*' 593 | peerDependenciesMeta: 594 | jiti: 595 | optional: true 596 | 597 | espree@10.3.0: 598 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 599 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 600 | 601 | esquery@1.6.0: 602 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 603 | engines: {node: '>=0.10'} 604 | 605 | esrecurse@4.3.0: 606 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 607 | engines: {node: '>=4.0'} 608 | 609 | estraverse@5.3.0: 610 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 611 | engines: {node: '>=4.0'} 612 | 613 | estree-walker@2.0.2: 614 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 615 | 616 | esutils@2.0.3: 617 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 618 | engines: {node: '>=0.10.0'} 619 | 620 | fast-deep-equal@3.1.3: 621 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 622 | 623 | fast-glob@3.3.2: 624 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 625 | engines: {node: '>=8.6.0'} 626 | 627 | fast-json-stable-stringify@2.1.0: 628 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 629 | 630 | fast-levenshtein@2.0.6: 631 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 632 | 633 | fastq@1.18.0: 634 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} 635 | 636 | fdir@6.4.2: 637 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} 638 | peerDependencies: 639 | picomatch: ^3 || ^4 640 | peerDependenciesMeta: 641 | picomatch: 642 | optional: true 643 | 644 | file-entry-cache@8.0.0: 645 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 646 | engines: {node: '>=16.0.0'} 647 | 648 | fill-range@7.1.1: 649 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 650 | engines: {node: '>=8'} 651 | 652 | find-up@5.0.0: 653 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 654 | engines: {node: '>=10'} 655 | 656 | flat-cache@4.0.1: 657 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 658 | engines: {node: '>=16'} 659 | 660 | flatted@3.3.2: 661 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 662 | 663 | for-each@0.3.3: 664 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 665 | 666 | fsevents@2.3.3: 667 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 668 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 669 | os: [darwin] 670 | 671 | function-bind@1.1.2: 672 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 673 | 674 | function.prototype.name@1.1.8: 675 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 676 | engines: {node: '>= 0.4'} 677 | 678 | functions-have-names@1.2.3: 679 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 680 | 681 | get-intrinsic@1.2.6: 682 | resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==} 683 | engines: {node: '>= 0.4'} 684 | 685 | get-intrinsic@1.3.0: 686 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 687 | engines: {node: '>= 0.4'} 688 | 689 | get-proto@1.0.1: 690 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 691 | engines: {node: '>= 0.4'} 692 | 693 | get-symbol-description@1.1.0: 694 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 695 | engines: {node: '>= 0.4'} 696 | 697 | glob-parent@5.1.2: 698 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 699 | engines: {node: '>= 6'} 700 | 701 | glob-parent@6.0.2: 702 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 703 | engines: {node: '>=10.13.0'} 704 | 705 | globals@14.0.0: 706 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 707 | engines: {node: '>=18'} 708 | 709 | globalthis@1.0.4: 710 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 711 | engines: {node: '>= 0.4'} 712 | 713 | gopd@1.2.0: 714 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 715 | engines: {node: '>= 0.4'} 716 | 717 | graphemer@1.4.0: 718 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 719 | 720 | has-bigints@1.1.0: 721 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 722 | engines: {node: '>= 0.4'} 723 | 724 | has-flag@4.0.0: 725 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 726 | engines: {node: '>=8'} 727 | 728 | has-property-descriptors@1.0.2: 729 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 730 | 731 | has-proto@1.2.0: 732 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 733 | engines: {node: '>= 0.4'} 734 | 735 | has-symbols@1.1.0: 736 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 737 | engines: {node: '>= 0.4'} 738 | 739 | has-tostringtag@1.0.2: 740 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 741 | engines: {node: '>= 0.4'} 742 | 743 | hasown@2.0.2: 744 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 745 | engines: {node: '>= 0.4'} 746 | 747 | ignore@5.3.2: 748 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 749 | engines: {node: '>= 4'} 750 | 751 | ignore@7.0.5: 752 | resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} 753 | engines: {node: '>= 4'} 754 | 755 | import-fresh@3.3.0: 756 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 757 | engines: {node: '>=6'} 758 | 759 | imurmurhash@0.1.4: 760 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 761 | engines: {node: '>=0.8.19'} 762 | 763 | internal-slot@1.1.0: 764 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 765 | engines: {node: '>= 0.4'} 766 | 767 | is-array-buffer@3.0.5: 768 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 769 | engines: {node: '>= 0.4'} 770 | 771 | is-async-function@2.0.0: 772 | resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} 773 | engines: {node: '>= 0.4'} 774 | 775 | is-bigint@1.1.0: 776 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 777 | engines: {node: '>= 0.4'} 778 | 779 | is-boolean-object@1.2.1: 780 | resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} 781 | engines: {node: '>= 0.4'} 782 | 783 | is-callable@1.2.7: 784 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 785 | engines: {node: '>= 0.4'} 786 | 787 | is-core-module@2.16.1: 788 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 789 | engines: {node: '>= 0.4'} 790 | 791 | is-data-view@1.0.2: 792 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 793 | engines: {node: '>= 0.4'} 794 | 795 | is-date-object@1.1.0: 796 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 797 | engines: {node: '>= 0.4'} 798 | 799 | is-extglob@2.1.1: 800 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 801 | engines: {node: '>=0.10.0'} 802 | 803 | is-finalizationregistry@1.1.1: 804 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 805 | engines: {node: '>= 0.4'} 806 | 807 | is-generator-function@1.0.10: 808 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 809 | engines: {node: '>= 0.4'} 810 | 811 | is-glob@4.0.3: 812 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 813 | engines: {node: '>=0.10.0'} 814 | 815 | is-map@2.0.3: 816 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 817 | engines: {node: '>= 0.4'} 818 | 819 | is-module@1.0.0: 820 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 821 | 822 | is-number-object@1.1.1: 823 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 824 | engines: {node: '>= 0.4'} 825 | 826 | is-number@7.0.0: 827 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 828 | engines: {node: '>=0.12.0'} 829 | 830 | is-reference@1.2.1: 831 | resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 832 | 833 | is-regex@1.2.1: 834 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 835 | engines: {node: '>= 0.4'} 836 | 837 | is-set@2.0.3: 838 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 839 | engines: {node: '>= 0.4'} 840 | 841 | is-shared-array-buffer@1.0.4: 842 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 843 | engines: {node: '>= 0.4'} 844 | 845 | is-string@1.1.1: 846 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 847 | engines: {node: '>= 0.4'} 848 | 849 | is-symbol@1.1.1: 850 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 851 | engines: {node: '>= 0.4'} 852 | 853 | is-typed-array@1.1.15: 854 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 855 | engines: {node: '>= 0.4'} 856 | 857 | is-weakmap@2.0.2: 858 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 859 | engines: {node: '>= 0.4'} 860 | 861 | is-weakref@1.1.0: 862 | resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} 863 | engines: {node: '>= 0.4'} 864 | 865 | is-weakset@2.0.4: 866 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 867 | engines: {node: '>= 0.4'} 868 | 869 | isarray@2.0.5: 870 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 871 | 872 | isexe@2.0.0: 873 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 874 | 875 | iterator.prototype@1.1.4: 876 | resolution: {integrity: sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==} 877 | engines: {node: '>= 0.4'} 878 | 879 | js-tokens@4.0.0: 880 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 881 | 882 | js-yaml@4.1.0: 883 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 884 | hasBin: true 885 | 886 | json-buffer@3.0.1: 887 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 888 | 889 | json-schema-traverse@0.4.1: 890 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 891 | 892 | json-stable-stringify-without-jsonify@1.0.1: 893 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 894 | 895 | jsx-ast-utils@3.3.5: 896 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 897 | engines: {node: '>=4.0'} 898 | 899 | keyv@4.5.4: 900 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 901 | 902 | levn@0.4.1: 903 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 904 | engines: {node: '>= 0.8.0'} 905 | 906 | locate-path@6.0.0: 907 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 908 | engines: {node: '>=10'} 909 | 910 | lodash.merge@4.6.2: 911 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 912 | 913 | loose-envify@1.4.0: 914 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 915 | hasBin: true 916 | 917 | magic-string@0.30.17: 918 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 919 | 920 | math-intrinsics@1.1.0: 921 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 922 | engines: {node: '>= 0.4'} 923 | 924 | merge2@1.4.1: 925 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 926 | engines: {node: '>= 8'} 927 | 928 | micromatch@4.0.8: 929 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 930 | engines: {node: '>=8.6'} 931 | 932 | minimatch@3.1.2: 933 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 934 | 935 | minimatch@9.0.5: 936 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 937 | engines: {node: '>=16 || 14 >=14.17'} 938 | 939 | ms@2.1.3: 940 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 941 | 942 | natural-compare@1.4.0: 943 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 944 | 945 | object-assign@4.1.1: 946 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 947 | engines: {node: '>=0.10.0'} 948 | 949 | object-inspect@1.13.3: 950 | resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} 951 | engines: {node: '>= 0.4'} 952 | 953 | object-keys@1.1.1: 954 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 955 | engines: {node: '>= 0.4'} 956 | 957 | object.assign@4.1.7: 958 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 959 | engines: {node: '>= 0.4'} 960 | 961 | object.entries@1.1.9: 962 | resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} 963 | engines: {node: '>= 0.4'} 964 | 965 | object.fromentries@2.0.8: 966 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 967 | engines: {node: '>= 0.4'} 968 | 969 | object.values@1.2.1: 970 | resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} 971 | engines: {node: '>= 0.4'} 972 | 973 | optionator@0.9.4: 974 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 975 | engines: {node: '>= 0.8.0'} 976 | 977 | own-keys@1.0.1: 978 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 979 | engines: {node: '>= 0.4'} 980 | 981 | p-limit@3.1.0: 982 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 983 | engines: {node: '>=10'} 984 | 985 | p-locate@5.0.0: 986 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 987 | engines: {node: '>=10'} 988 | 989 | parent-module@1.0.1: 990 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 991 | engines: {node: '>=6'} 992 | 993 | path-exists@4.0.0: 994 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 995 | engines: {node: '>=8'} 996 | 997 | path-key@3.1.1: 998 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 999 | engines: {node: '>=8'} 1000 | 1001 | path-parse@1.0.7: 1002 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1003 | 1004 | picomatch@2.3.1: 1005 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1006 | engines: {node: '>=8.6'} 1007 | 1008 | picomatch@4.0.2: 1009 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1010 | engines: {node: '>=12'} 1011 | 1012 | possible-typed-array-names@1.0.0: 1013 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1014 | engines: {node: '>= 0.4'} 1015 | 1016 | prelude-ls@1.2.1: 1017 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1018 | engines: {node: '>= 0.8.0'} 1019 | 1020 | prettier@3.5.3: 1021 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} 1022 | engines: {node: '>=14'} 1023 | hasBin: true 1024 | 1025 | prop-types@15.8.1: 1026 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1027 | 1028 | punycode@2.3.1: 1029 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1030 | engines: {node: '>=6'} 1031 | 1032 | queue-microtask@1.2.3: 1033 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1034 | 1035 | react-is@16.13.1: 1036 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1037 | 1038 | react@19.0.0: 1039 | resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} 1040 | engines: {node: '>=0.10.0'} 1041 | 1042 | reflect.getprototypeof@1.0.9: 1043 | resolution: {integrity: sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==} 1044 | engines: {node: '>= 0.4'} 1045 | 1046 | regexp.prototype.flags@1.5.3: 1047 | resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} 1048 | engines: {node: '>= 0.4'} 1049 | 1050 | resolve-from@4.0.0: 1051 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1052 | engines: {node: '>=4'} 1053 | 1054 | resolve@1.22.10: 1055 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1056 | engines: {node: '>= 0.4'} 1057 | hasBin: true 1058 | 1059 | resolve@2.0.0-next.5: 1060 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1061 | hasBin: true 1062 | 1063 | reusify@1.0.4: 1064 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1065 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1066 | 1067 | rollup-plugin-node-externals@8.0.0: 1068 | resolution: {integrity: sha512-2HIOpWsWn5DqBoYl6iCAmB4kd5GoGbF68PR4xKR1YBPvywiqjtYvDEjHFodyqRL51iAMDITP074Zxs0OKs6F+g==} 1069 | engines: {node: '>= 21 || ^20.6.0 || ^18.19.0'} 1070 | peerDependencies: 1071 | rollup: ^4.0.0 1072 | 1073 | rollup@4.42.0: 1074 | resolution: {integrity: sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==} 1075 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1076 | hasBin: true 1077 | 1078 | run-parallel@1.2.0: 1079 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1080 | 1081 | safe-array-concat@1.1.3: 1082 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 1083 | engines: {node: '>=0.4'} 1084 | 1085 | safe-push-apply@1.0.0: 1086 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} 1087 | engines: {node: '>= 0.4'} 1088 | 1089 | safe-regex-test@1.1.0: 1090 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 1091 | engines: {node: '>= 0.4'} 1092 | 1093 | semver@6.3.1: 1094 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1095 | hasBin: true 1096 | 1097 | semver@7.6.3: 1098 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1099 | engines: {node: '>=10'} 1100 | hasBin: true 1101 | 1102 | set-function-length@1.2.2: 1103 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1104 | engines: {node: '>= 0.4'} 1105 | 1106 | set-function-name@2.0.2: 1107 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1108 | engines: {node: '>= 0.4'} 1109 | 1110 | shebang-command@2.0.0: 1111 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1112 | engines: {node: '>=8'} 1113 | 1114 | shebang-regex@3.0.0: 1115 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1116 | engines: {node: '>=8'} 1117 | 1118 | side-channel-list@1.0.0: 1119 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1120 | engines: {node: '>= 0.4'} 1121 | 1122 | side-channel-map@1.0.1: 1123 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1124 | engines: {node: '>= 0.4'} 1125 | 1126 | side-channel-weakmap@1.0.2: 1127 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1128 | engines: {node: '>= 0.4'} 1129 | 1130 | side-channel@1.1.0: 1131 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1132 | engines: {node: '>= 0.4'} 1133 | 1134 | string.prototype.matchall@4.0.12: 1135 | resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} 1136 | engines: {node: '>= 0.4'} 1137 | 1138 | string.prototype.repeat@1.0.0: 1139 | resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} 1140 | 1141 | string.prototype.trim@1.2.10: 1142 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 1143 | engines: {node: '>= 0.4'} 1144 | 1145 | string.prototype.trimend@1.0.9: 1146 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 1147 | engines: {node: '>= 0.4'} 1148 | 1149 | string.prototype.trimstart@1.0.8: 1150 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1151 | engines: {node: '>= 0.4'} 1152 | 1153 | strip-json-comments@3.1.1: 1154 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1155 | engines: {node: '>=8'} 1156 | 1157 | supports-color@7.2.0: 1158 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1159 | engines: {node: '>=8'} 1160 | 1161 | supports-preserve-symlinks-flag@1.0.0: 1162 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1163 | engines: {node: '>= 0.4'} 1164 | 1165 | to-regex-range@5.0.1: 1166 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1167 | engines: {node: '>=8.0'} 1168 | 1169 | ts-api-utils@2.1.0: 1170 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1171 | engines: {node: '>=18.12'} 1172 | peerDependencies: 1173 | typescript: '>=4.8.4' 1174 | 1175 | tslib@2.8.1: 1176 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1177 | 1178 | type-check@0.4.0: 1179 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1180 | engines: {node: '>= 0.8.0'} 1181 | 1182 | typed-array-buffer@1.0.3: 1183 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 1184 | engines: {node: '>= 0.4'} 1185 | 1186 | typed-array-byte-length@1.0.3: 1187 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 1188 | engines: {node: '>= 0.4'} 1189 | 1190 | typed-array-byte-offset@1.0.4: 1191 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 1192 | engines: {node: '>= 0.4'} 1193 | 1194 | typed-array-length@1.0.7: 1195 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 1196 | engines: {node: '>= 0.4'} 1197 | 1198 | typescript-eslint@8.34.0: 1199 | resolution: {integrity: sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==} 1200 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1201 | peerDependencies: 1202 | eslint: ^8.57.0 || ^9.0.0 1203 | typescript: '>=4.8.4 <5.9.0' 1204 | 1205 | typescript@5.8.3: 1206 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1207 | engines: {node: '>=14.17'} 1208 | hasBin: true 1209 | 1210 | unbox-primitive@1.1.0: 1211 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 1212 | engines: {node: '>= 0.4'} 1213 | 1214 | uri-js@4.4.1: 1215 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1216 | 1217 | which-boxed-primitive@1.1.1: 1218 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 1219 | engines: {node: '>= 0.4'} 1220 | 1221 | which-builtin-type@1.2.1: 1222 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 1223 | engines: {node: '>= 0.4'} 1224 | 1225 | which-collection@1.0.2: 1226 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1227 | engines: {node: '>= 0.4'} 1228 | 1229 | which-typed-array@1.1.18: 1230 | resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} 1231 | engines: {node: '>= 0.4'} 1232 | 1233 | which@2.0.2: 1234 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1235 | engines: {node: '>= 8'} 1236 | hasBin: true 1237 | 1238 | word-wrap@1.2.5: 1239 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1240 | engines: {node: '>=0.10.0'} 1241 | 1242 | yocto-queue@0.1.0: 1243 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1244 | engines: {node: '>=10'} 1245 | 1246 | snapshots: 1247 | 1248 | '@eslint-community/eslint-utils@4.4.1(eslint@9.28.0)': 1249 | dependencies: 1250 | eslint: 9.28.0 1251 | eslint-visitor-keys: 3.4.3 1252 | 1253 | '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0)': 1254 | dependencies: 1255 | eslint: 9.28.0 1256 | eslint-visitor-keys: 3.4.3 1257 | 1258 | '@eslint-community/regexpp@4.12.1': {} 1259 | 1260 | '@eslint/config-array@0.20.0': 1261 | dependencies: 1262 | '@eslint/object-schema': 2.1.6 1263 | debug: 4.4.0 1264 | minimatch: 3.1.2 1265 | transitivePeerDependencies: 1266 | - supports-color 1267 | 1268 | '@eslint/config-helpers@0.2.2': {} 1269 | 1270 | '@eslint/core@0.14.0': 1271 | dependencies: 1272 | '@types/json-schema': 7.0.15 1273 | 1274 | '@eslint/eslintrc@3.3.1': 1275 | dependencies: 1276 | ajv: 6.12.6 1277 | debug: 4.4.0 1278 | espree: 10.3.0 1279 | globals: 14.0.0 1280 | ignore: 5.3.2 1281 | import-fresh: 3.3.0 1282 | js-yaml: 4.1.0 1283 | minimatch: 3.1.2 1284 | strip-json-comments: 3.1.1 1285 | transitivePeerDependencies: 1286 | - supports-color 1287 | 1288 | '@eslint/js@9.28.0': {} 1289 | 1290 | '@eslint/object-schema@2.1.6': {} 1291 | 1292 | '@eslint/plugin-kit@0.3.1': 1293 | dependencies: 1294 | '@eslint/core': 0.14.0 1295 | levn: 0.4.1 1296 | 1297 | '@humanfs/core@0.19.1': {} 1298 | 1299 | '@humanfs/node@0.16.6': 1300 | dependencies: 1301 | '@humanfs/core': 0.19.1 1302 | '@humanwhocodes/retry': 0.3.1 1303 | 1304 | '@humanwhocodes/module-importer@1.0.1': {} 1305 | 1306 | '@humanwhocodes/retry@0.3.1': {} 1307 | 1308 | '@humanwhocodes/retry@0.4.3': {} 1309 | 1310 | '@jridgewell/sourcemap-codec@1.5.0': {} 1311 | 1312 | '@nodelib/fs.scandir@2.1.5': 1313 | dependencies: 1314 | '@nodelib/fs.stat': 2.0.5 1315 | run-parallel: 1.2.0 1316 | 1317 | '@nodelib/fs.stat@2.0.5': {} 1318 | 1319 | '@nodelib/fs.walk@1.2.8': 1320 | dependencies: 1321 | '@nodelib/fs.scandir': 2.1.5 1322 | fastq: 1.18.0 1323 | 1324 | '@rollup/plugin-commonjs@28.0.3(rollup@4.42.0)': 1325 | dependencies: 1326 | '@rollup/pluginutils': 5.1.4(rollup@4.42.0) 1327 | commondir: 1.0.1 1328 | estree-walker: 2.0.2 1329 | fdir: 6.4.2(picomatch@4.0.2) 1330 | is-reference: 1.2.1 1331 | magic-string: 0.30.17 1332 | picomatch: 4.0.2 1333 | optionalDependencies: 1334 | rollup: 4.42.0 1335 | 1336 | '@rollup/plugin-node-resolve@16.0.1(rollup@4.42.0)': 1337 | dependencies: 1338 | '@rollup/pluginutils': 5.1.4(rollup@4.42.0) 1339 | '@types/resolve': 1.20.2 1340 | deepmerge: 4.3.1 1341 | is-module: 1.0.0 1342 | resolve: 1.22.10 1343 | optionalDependencies: 1344 | rollup: 4.42.0 1345 | 1346 | '@rollup/plugin-typescript@12.1.2(rollup@4.42.0)(tslib@2.8.1)(typescript@5.8.3)': 1347 | dependencies: 1348 | '@rollup/pluginutils': 5.1.4(rollup@4.42.0) 1349 | resolve: 1.22.10 1350 | typescript: 5.8.3 1351 | optionalDependencies: 1352 | rollup: 4.42.0 1353 | tslib: 2.8.1 1354 | 1355 | '@rollup/pluginutils@5.1.4(rollup@4.42.0)': 1356 | dependencies: 1357 | '@types/estree': 1.0.6 1358 | estree-walker: 2.0.2 1359 | picomatch: 4.0.2 1360 | optionalDependencies: 1361 | rollup: 4.42.0 1362 | 1363 | '@rollup/rollup-android-arm-eabi@4.42.0': 1364 | optional: true 1365 | 1366 | '@rollup/rollup-android-arm64@4.42.0': 1367 | optional: true 1368 | 1369 | '@rollup/rollup-darwin-arm64@4.42.0': 1370 | optional: true 1371 | 1372 | '@rollup/rollup-darwin-x64@4.42.0': 1373 | optional: true 1374 | 1375 | '@rollup/rollup-freebsd-arm64@4.42.0': 1376 | optional: true 1377 | 1378 | '@rollup/rollup-freebsd-x64@4.42.0': 1379 | optional: true 1380 | 1381 | '@rollup/rollup-linux-arm-gnueabihf@4.42.0': 1382 | optional: true 1383 | 1384 | '@rollup/rollup-linux-arm-musleabihf@4.42.0': 1385 | optional: true 1386 | 1387 | '@rollup/rollup-linux-arm64-gnu@4.42.0': 1388 | optional: true 1389 | 1390 | '@rollup/rollup-linux-arm64-musl@4.42.0': 1391 | optional: true 1392 | 1393 | '@rollup/rollup-linux-loongarch64-gnu@4.42.0': 1394 | optional: true 1395 | 1396 | '@rollup/rollup-linux-powerpc64le-gnu@4.42.0': 1397 | optional: true 1398 | 1399 | '@rollup/rollup-linux-riscv64-gnu@4.42.0': 1400 | optional: true 1401 | 1402 | '@rollup/rollup-linux-riscv64-musl@4.42.0': 1403 | optional: true 1404 | 1405 | '@rollup/rollup-linux-s390x-gnu@4.42.0': 1406 | optional: true 1407 | 1408 | '@rollup/rollup-linux-x64-gnu@4.42.0': 1409 | optional: true 1410 | 1411 | '@rollup/rollup-linux-x64-musl@4.42.0': 1412 | optional: true 1413 | 1414 | '@rollup/rollup-win32-arm64-msvc@4.42.0': 1415 | optional: true 1416 | 1417 | '@rollup/rollup-win32-ia32-msvc@4.42.0': 1418 | optional: true 1419 | 1420 | '@rollup/rollup-win32-x64-msvc@4.42.0': 1421 | optional: true 1422 | 1423 | '@types/estree@1.0.6': {} 1424 | 1425 | '@types/estree@1.0.7': {} 1426 | 1427 | '@types/json-schema@7.0.15': {} 1428 | 1429 | '@types/react-dom@19.1.6(@types/react@19.1.7)': 1430 | dependencies: 1431 | '@types/react': 19.1.7 1432 | 1433 | '@types/react@19.1.7': 1434 | dependencies: 1435 | csstype: 3.1.3 1436 | 1437 | '@types/resolve@1.20.2': {} 1438 | 1439 | '@typescript-eslint/eslint-plugin@8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3)': 1440 | dependencies: 1441 | '@eslint-community/regexpp': 4.12.1 1442 | '@typescript-eslint/parser': 8.34.0(eslint@9.28.0)(typescript@5.8.3) 1443 | '@typescript-eslint/scope-manager': 8.34.0 1444 | '@typescript-eslint/type-utils': 8.34.0(eslint@9.28.0)(typescript@5.8.3) 1445 | '@typescript-eslint/utils': 8.34.0(eslint@9.28.0)(typescript@5.8.3) 1446 | '@typescript-eslint/visitor-keys': 8.34.0 1447 | eslint: 9.28.0 1448 | graphemer: 1.4.0 1449 | ignore: 7.0.5 1450 | natural-compare: 1.4.0 1451 | ts-api-utils: 2.1.0(typescript@5.8.3) 1452 | typescript: 5.8.3 1453 | transitivePeerDependencies: 1454 | - supports-color 1455 | 1456 | '@typescript-eslint/parser@8.34.0(eslint@9.28.0)(typescript@5.8.3)': 1457 | dependencies: 1458 | '@typescript-eslint/scope-manager': 8.34.0 1459 | '@typescript-eslint/types': 8.34.0 1460 | '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) 1461 | '@typescript-eslint/visitor-keys': 8.34.0 1462 | debug: 4.4.0 1463 | eslint: 9.28.0 1464 | typescript: 5.8.3 1465 | transitivePeerDependencies: 1466 | - supports-color 1467 | 1468 | '@typescript-eslint/project-service@8.34.0(typescript@5.8.3)': 1469 | dependencies: 1470 | '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3) 1471 | '@typescript-eslint/types': 8.34.0 1472 | debug: 4.4.0 1473 | typescript: 5.8.3 1474 | transitivePeerDependencies: 1475 | - supports-color 1476 | 1477 | '@typescript-eslint/scope-manager@8.34.0': 1478 | dependencies: 1479 | '@typescript-eslint/types': 8.34.0 1480 | '@typescript-eslint/visitor-keys': 8.34.0 1481 | 1482 | '@typescript-eslint/tsconfig-utils@8.34.0(typescript@5.8.3)': 1483 | dependencies: 1484 | typescript: 5.8.3 1485 | 1486 | '@typescript-eslint/type-utils@8.34.0(eslint@9.28.0)(typescript@5.8.3)': 1487 | dependencies: 1488 | '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) 1489 | '@typescript-eslint/utils': 8.34.0(eslint@9.28.0)(typescript@5.8.3) 1490 | debug: 4.4.0 1491 | eslint: 9.28.0 1492 | ts-api-utils: 2.1.0(typescript@5.8.3) 1493 | typescript: 5.8.3 1494 | transitivePeerDependencies: 1495 | - supports-color 1496 | 1497 | '@typescript-eslint/types@8.34.0': {} 1498 | 1499 | '@typescript-eslint/typescript-estree@8.34.0(typescript@5.8.3)': 1500 | dependencies: 1501 | '@typescript-eslint/project-service': 8.34.0(typescript@5.8.3) 1502 | '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3) 1503 | '@typescript-eslint/types': 8.34.0 1504 | '@typescript-eslint/visitor-keys': 8.34.0 1505 | debug: 4.4.0 1506 | fast-glob: 3.3.2 1507 | is-glob: 4.0.3 1508 | minimatch: 9.0.5 1509 | semver: 7.6.3 1510 | ts-api-utils: 2.1.0(typescript@5.8.3) 1511 | typescript: 5.8.3 1512 | transitivePeerDependencies: 1513 | - supports-color 1514 | 1515 | '@typescript-eslint/utils@8.34.0(eslint@9.28.0)(typescript@5.8.3)': 1516 | dependencies: 1517 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) 1518 | '@typescript-eslint/scope-manager': 8.34.0 1519 | '@typescript-eslint/types': 8.34.0 1520 | '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) 1521 | eslint: 9.28.0 1522 | typescript: 5.8.3 1523 | transitivePeerDependencies: 1524 | - supports-color 1525 | 1526 | '@typescript-eslint/visitor-keys@8.34.0': 1527 | dependencies: 1528 | '@typescript-eslint/types': 8.34.0 1529 | eslint-visitor-keys: 4.2.0 1530 | 1531 | acorn-jsx@5.3.2(acorn@8.14.0): 1532 | dependencies: 1533 | acorn: 8.14.0 1534 | 1535 | acorn@8.14.0: {} 1536 | 1537 | ajv@6.12.6: 1538 | dependencies: 1539 | fast-deep-equal: 3.1.3 1540 | fast-json-stable-stringify: 2.1.0 1541 | json-schema-traverse: 0.4.1 1542 | uri-js: 4.4.1 1543 | 1544 | ansi-styles@4.3.0: 1545 | dependencies: 1546 | color-convert: 2.0.1 1547 | 1548 | argparse@2.0.1: {} 1549 | 1550 | array-buffer-byte-length@1.0.2: 1551 | dependencies: 1552 | call-bound: 1.0.3 1553 | is-array-buffer: 3.0.5 1554 | 1555 | array-includes@3.1.8: 1556 | dependencies: 1557 | call-bind: 1.0.8 1558 | define-properties: 1.2.1 1559 | es-abstract: 1.23.8 1560 | es-object-atoms: 1.0.0 1561 | get-intrinsic: 1.2.6 1562 | is-string: 1.1.1 1563 | 1564 | array.prototype.findlast@1.2.5: 1565 | dependencies: 1566 | call-bind: 1.0.8 1567 | define-properties: 1.2.1 1568 | es-abstract: 1.23.8 1569 | es-errors: 1.3.0 1570 | es-object-atoms: 1.0.0 1571 | es-shim-unscopables: 1.0.2 1572 | 1573 | array.prototype.flat@1.3.3: 1574 | dependencies: 1575 | call-bind: 1.0.8 1576 | define-properties: 1.2.1 1577 | es-abstract: 1.23.8 1578 | es-shim-unscopables: 1.0.2 1579 | 1580 | array.prototype.flatmap@1.3.3: 1581 | dependencies: 1582 | call-bind: 1.0.8 1583 | define-properties: 1.2.1 1584 | es-abstract: 1.23.8 1585 | es-shim-unscopables: 1.0.2 1586 | 1587 | array.prototype.tosorted@1.1.4: 1588 | dependencies: 1589 | call-bind: 1.0.8 1590 | define-properties: 1.2.1 1591 | es-abstract: 1.23.8 1592 | es-errors: 1.3.0 1593 | es-shim-unscopables: 1.0.2 1594 | 1595 | arraybuffer.prototype.slice@1.0.4: 1596 | dependencies: 1597 | array-buffer-byte-length: 1.0.2 1598 | call-bind: 1.0.8 1599 | define-properties: 1.2.1 1600 | es-abstract: 1.23.8 1601 | es-errors: 1.3.0 1602 | get-intrinsic: 1.2.6 1603 | is-array-buffer: 3.0.5 1604 | 1605 | available-typed-arrays@1.0.7: 1606 | dependencies: 1607 | possible-typed-array-names: 1.0.0 1608 | 1609 | balanced-match@1.0.2: {} 1610 | 1611 | brace-expansion@1.1.11: 1612 | dependencies: 1613 | balanced-match: 1.0.2 1614 | concat-map: 0.0.1 1615 | 1616 | brace-expansion@2.0.1: 1617 | dependencies: 1618 | balanced-match: 1.0.2 1619 | 1620 | braces@3.0.3: 1621 | dependencies: 1622 | fill-range: 7.1.1 1623 | 1624 | call-bind-apply-helpers@1.0.1: 1625 | dependencies: 1626 | es-errors: 1.3.0 1627 | function-bind: 1.1.2 1628 | 1629 | call-bind-apply-helpers@1.0.2: 1630 | dependencies: 1631 | es-errors: 1.3.0 1632 | function-bind: 1.1.2 1633 | 1634 | call-bind@1.0.8: 1635 | dependencies: 1636 | call-bind-apply-helpers: 1.0.1 1637 | es-define-property: 1.0.1 1638 | get-intrinsic: 1.2.6 1639 | set-function-length: 1.2.2 1640 | 1641 | call-bound@1.0.3: 1642 | dependencies: 1643 | call-bind-apply-helpers: 1.0.1 1644 | get-intrinsic: 1.2.6 1645 | 1646 | call-bound@1.0.4: 1647 | dependencies: 1648 | call-bind-apply-helpers: 1.0.2 1649 | get-intrinsic: 1.3.0 1650 | 1651 | callsites@3.1.0: {} 1652 | 1653 | chalk@4.1.2: 1654 | dependencies: 1655 | ansi-styles: 4.3.0 1656 | supports-color: 7.2.0 1657 | 1658 | color-convert@2.0.1: 1659 | dependencies: 1660 | color-name: 1.1.4 1661 | 1662 | color-name@1.1.4: {} 1663 | 1664 | commondir@1.0.1: {} 1665 | 1666 | concat-map@0.0.1: {} 1667 | 1668 | cross-spawn@7.0.6: 1669 | dependencies: 1670 | path-key: 3.1.1 1671 | shebang-command: 2.0.0 1672 | which: 2.0.2 1673 | 1674 | csstype@3.1.3: {} 1675 | 1676 | data-view-buffer@1.0.2: 1677 | dependencies: 1678 | call-bound: 1.0.3 1679 | es-errors: 1.3.0 1680 | is-data-view: 1.0.2 1681 | 1682 | data-view-byte-length@1.0.2: 1683 | dependencies: 1684 | call-bound: 1.0.3 1685 | es-errors: 1.3.0 1686 | is-data-view: 1.0.2 1687 | 1688 | data-view-byte-offset@1.0.1: 1689 | dependencies: 1690 | call-bound: 1.0.3 1691 | es-errors: 1.3.0 1692 | is-data-view: 1.0.2 1693 | 1694 | debug@4.4.0: 1695 | dependencies: 1696 | ms: 2.1.3 1697 | 1698 | deep-is@0.1.4: {} 1699 | 1700 | deepmerge@4.3.1: {} 1701 | 1702 | define-data-property@1.1.4: 1703 | dependencies: 1704 | es-define-property: 1.0.1 1705 | es-errors: 1.3.0 1706 | gopd: 1.2.0 1707 | 1708 | define-properties@1.2.1: 1709 | dependencies: 1710 | define-data-property: 1.1.4 1711 | has-property-descriptors: 1.0.2 1712 | object-keys: 1.1.1 1713 | 1714 | doctrine@2.1.0: 1715 | dependencies: 1716 | esutils: 2.0.3 1717 | 1718 | dunder-proto@1.0.1: 1719 | dependencies: 1720 | call-bind-apply-helpers: 1.0.1 1721 | es-errors: 1.3.0 1722 | gopd: 1.2.0 1723 | 1724 | es-abstract@1.23.8: 1725 | dependencies: 1726 | array-buffer-byte-length: 1.0.2 1727 | arraybuffer.prototype.slice: 1.0.4 1728 | available-typed-arrays: 1.0.7 1729 | call-bind: 1.0.8 1730 | call-bound: 1.0.3 1731 | data-view-buffer: 1.0.2 1732 | data-view-byte-length: 1.0.2 1733 | data-view-byte-offset: 1.0.1 1734 | es-define-property: 1.0.1 1735 | es-errors: 1.3.0 1736 | es-object-atoms: 1.0.0 1737 | es-set-tostringtag: 2.0.3 1738 | es-to-primitive: 1.3.0 1739 | function.prototype.name: 1.1.8 1740 | get-intrinsic: 1.2.6 1741 | get-symbol-description: 1.1.0 1742 | globalthis: 1.0.4 1743 | gopd: 1.2.0 1744 | has-property-descriptors: 1.0.2 1745 | has-proto: 1.2.0 1746 | has-symbols: 1.1.0 1747 | hasown: 2.0.2 1748 | internal-slot: 1.1.0 1749 | is-array-buffer: 3.0.5 1750 | is-callable: 1.2.7 1751 | is-data-view: 1.0.2 1752 | is-regex: 1.2.1 1753 | is-shared-array-buffer: 1.0.4 1754 | is-string: 1.1.1 1755 | is-typed-array: 1.1.15 1756 | is-weakref: 1.1.0 1757 | math-intrinsics: 1.1.0 1758 | object-inspect: 1.13.3 1759 | object-keys: 1.1.1 1760 | object.assign: 4.1.7 1761 | own-keys: 1.0.1 1762 | regexp.prototype.flags: 1.5.3 1763 | safe-array-concat: 1.1.3 1764 | safe-push-apply: 1.0.0 1765 | safe-regex-test: 1.1.0 1766 | string.prototype.trim: 1.2.10 1767 | string.prototype.trimend: 1.0.9 1768 | string.prototype.trimstart: 1.0.8 1769 | typed-array-buffer: 1.0.3 1770 | typed-array-byte-length: 1.0.3 1771 | typed-array-byte-offset: 1.0.4 1772 | typed-array-length: 1.0.7 1773 | unbox-primitive: 1.1.0 1774 | which-typed-array: 1.1.18 1775 | 1776 | es-define-property@1.0.1: {} 1777 | 1778 | es-errors@1.3.0: {} 1779 | 1780 | es-iterator-helpers@1.2.1: 1781 | dependencies: 1782 | call-bind: 1.0.8 1783 | call-bound: 1.0.3 1784 | define-properties: 1.2.1 1785 | es-abstract: 1.23.8 1786 | es-errors: 1.3.0 1787 | es-set-tostringtag: 2.0.3 1788 | function-bind: 1.1.2 1789 | get-intrinsic: 1.2.6 1790 | globalthis: 1.0.4 1791 | gopd: 1.2.0 1792 | has-property-descriptors: 1.0.2 1793 | has-proto: 1.2.0 1794 | has-symbols: 1.1.0 1795 | internal-slot: 1.1.0 1796 | iterator.prototype: 1.1.4 1797 | safe-array-concat: 1.1.3 1798 | 1799 | es-object-atoms@1.0.0: 1800 | dependencies: 1801 | es-errors: 1.3.0 1802 | 1803 | es-object-atoms@1.1.1: 1804 | dependencies: 1805 | es-errors: 1.3.0 1806 | 1807 | es-set-tostringtag@2.0.3: 1808 | dependencies: 1809 | get-intrinsic: 1.2.6 1810 | has-tostringtag: 1.0.2 1811 | hasown: 2.0.2 1812 | 1813 | es-shim-unscopables@1.0.2: 1814 | dependencies: 1815 | hasown: 2.0.2 1816 | 1817 | es-to-primitive@1.3.0: 1818 | dependencies: 1819 | is-callable: 1.2.7 1820 | is-date-object: 1.1.0 1821 | is-symbol: 1.1.1 1822 | 1823 | es-toolkit@1.39.6: {} 1824 | 1825 | escape-string-regexp@4.0.0: {} 1826 | 1827 | eslint-config-prettier@10.1.5(eslint@9.28.0): 1828 | dependencies: 1829 | eslint: 9.28.0 1830 | 1831 | eslint-plugin-react@7.37.5(eslint@9.28.0): 1832 | dependencies: 1833 | array-includes: 3.1.8 1834 | array.prototype.findlast: 1.2.5 1835 | array.prototype.flatmap: 1.3.3 1836 | array.prototype.tosorted: 1.1.4 1837 | doctrine: 2.1.0 1838 | es-iterator-helpers: 1.2.1 1839 | eslint: 9.28.0 1840 | estraverse: 5.3.0 1841 | hasown: 2.0.2 1842 | jsx-ast-utils: 3.3.5 1843 | minimatch: 3.1.2 1844 | object.entries: 1.1.9 1845 | object.fromentries: 2.0.8 1846 | object.values: 1.2.1 1847 | prop-types: 15.8.1 1848 | resolve: 2.0.0-next.5 1849 | semver: 6.3.1 1850 | string.prototype.matchall: 4.0.12 1851 | string.prototype.repeat: 1.0.0 1852 | 1853 | eslint-scope@8.4.0: 1854 | dependencies: 1855 | esrecurse: 4.3.0 1856 | estraverse: 5.3.0 1857 | 1858 | eslint-visitor-keys@3.4.3: {} 1859 | 1860 | eslint-visitor-keys@4.2.0: {} 1861 | 1862 | eslint@9.28.0: 1863 | dependencies: 1864 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.28.0) 1865 | '@eslint-community/regexpp': 4.12.1 1866 | '@eslint/config-array': 0.20.0 1867 | '@eslint/config-helpers': 0.2.2 1868 | '@eslint/core': 0.14.0 1869 | '@eslint/eslintrc': 3.3.1 1870 | '@eslint/js': 9.28.0 1871 | '@eslint/plugin-kit': 0.3.1 1872 | '@humanfs/node': 0.16.6 1873 | '@humanwhocodes/module-importer': 1.0.1 1874 | '@humanwhocodes/retry': 0.4.3 1875 | '@types/estree': 1.0.6 1876 | '@types/json-schema': 7.0.15 1877 | ajv: 6.12.6 1878 | chalk: 4.1.2 1879 | cross-spawn: 7.0.6 1880 | debug: 4.4.0 1881 | escape-string-regexp: 4.0.0 1882 | eslint-scope: 8.4.0 1883 | eslint-visitor-keys: 4.2.0 1884 | espree: 10.3.0 1885 | esquery: 1.6.0 1886 | esutils: 2.0.3 1887 | fast-deep-equal: 3.1.3 1888 | file-entry-cache: 8.0.0 1889 | find-up: 5.0.0 1890 | glob-parent: 6.0.2 1891 | ignore: 5.3.2 1892 | imurmurhash: 0.1.4 1893 | is-glob: 4.0.3 1894 | json-stable-stringify-without-jsonify: 1.0.1 1895 | lodash.merge: 4.6.2 1896 | minimatch: 3.1.2 1897 | natural-compare: 1.4.0 1898 | optionator: 0.9.4 1899 | transitivePeerDependencies: 1900 | - supports-color 1901 | 1902 | espree@10.3.0: 1903 | dependencies: 1904 | acorn: 8.14.0 1905 | acorn-jsx: 5.3.2(acorn@8.14.0) 1906 | eslint-visitor-keys: 4.2.0 1907 | 1908 | esquery@1.6.0: 1909 | dependencies: 1910 | estraverse: 5.3.0 1911 | 1912 | esrecurse@4.3.0: 1913 | dependencies: 1914 | estraverse: 5.3.0 1915 | 1916 | estraverse@5.3.0: {} 1917 | 1918 | estree-walker@2.0.2: {} 1919 | 1920 | esutils@2.0.3: {} 1921 | 1922 | fast-deep-equal@3.1.3: {} 1923 | 1924 | fast-glob@3.3.2: 1925 | dependencies: 1926 | '@nodelib/fs.stat': 2.0.5 1927 | '@nodelib/fs.walk': 1.2.8 1928 | glob-parent: 5.1.2 1929 | merge2: 1.4.1 1930 | micromatch: 4.0.8 1931 | 1932 | fast-json-stable-stringify@2.1.0: {} 1933 | 1934 | fast-levenshtein@2.0.6: {} 1935 | 1936 | fastq@1.18.0: 1937 | dependencies: 1938 | reusify: 1.0.4 1939 | 1940 | fdir@6.4.2(picomatch@4.0.2): 1941 | optionalDependencies: 1942 | picomatch: 4.0.2 1943 | 1944 | file-entry-cache@8.0.0: 1945 | dependencies: 1946 | flat-cache: 4.0.1 1947 | 1948 | fill-range@7.1.1: 1949 | dependencies: 1950 | to-regex-range: 5.0.1 1951 | 1952 | find-up@5.0.0: 1953 | dependencies: 1954 | locate-path: 6.0.0 1955 | path-exists: 4.0.0 1956 | 1957 | flat-cache@4.0.1: 1958 | dependencies: 1959 | flatted: 3.3.2 1960 | keyv: 4.5.4 1961 | 1962 | flatted@3.3.2: {} 1963 | 1964 | for-each@0.3.3: 1965 | dependencies: 1966 | is-callable: 1.2.7 1967 | 1968 | fsevents@2.3.3: 1969 | optional: true 1970 | 1971 | function-bind@1.1.2: {} 1972 | 1973 | function.prototype.name@1.1.8: 1974 | dependencies: 1975 | call-bind: 1.0.8 1976 | call-bound: 1.0.3 1977 | define-properties: 1.2.1 1978 | functions-have-names: 1.2.3 1979 | hasown: 2.0.2 1980 | is-callable: 1.2.7 1981 | 1982 | functions-have-names@1.2.3: {} 1983 | 1984 | get-intrinsic@1.2.6: 1985 | dependencies: 1986 | call-bind-apply-helpers: 1.0.1 1987 | dunder-proto: 1.0.1 1988 | es-define-property: 1.0.1 1989 | es-errors: 1.3.0 1990 | es-object-atoms: 1.0.0 1991 | function-bind: 1.1.2 1992 | gopd: 1.2.0 1993 | has-symbols: 1.1.0 1994 | hasown: 2.0.2 1995 | math-intrinsics: 1.1.0 1996 | 1997 | get-intrinsic@1.3.0: 1998 | dependencies: 1999 | call-bind-apply-helpers: 1.0.2 2000 | es-define-property: 1.0.1 2001 | es-errors: 1.3.0 2002 | es-object-atoms: 1.1.1 2003 | function-bind: 1.1.2 2004 | get-proto: 1.0.1 2005 | gopd: 1.2.0 2006 | has-symbols: 1.1.0 2007 | hasown: 2.0.2 2008 | math-intrinsics: 1.1.0 2009 | 2010 | get-proto@1.0.1: 2011 | dependencies: 2012 | dunder-proto: 1.0.1 2013 | es-object-atoms: 1.1.1 2014 | 2015 | get-symbol-description@1.1.0: 2016 | dependencies: 2017 | call-bound: 1.0.3 2018 | es-errors: 1.3.0 2019 | get-intrinsic: 1.2.6 2020 | 2021 | glob-parent@5.1.2: 2022 | dependencies: 2023 | is-glob: 4.0.3 2024 | 2025 | glob-parent@6.0.2: 2026 | dependencies: 2027 | is-glob: 4.0.3 2028 | 2029 | globals@14.0.0: {} 2030 | 2031 | globalthis@1.0.4: 2032 | dependencies: 2033 | define-properties: 1.2.1 2034 | gopd: 1.2.0 2035 | 2036 | gopd@1.2.0: {} 2037 | 2038 | graphemer@1.4.0: {} 2039 | 2040 | has-bigints@1.1.0: {} 2041 | 2042 | has-flag@4.0.0: {} 2043 | 2044 | has-property-descriptors@1.0.2: 2045 | dependencies: 2046 | es-define-property: 1.0.1 2047 | 2048 | has-proto@1.2.0: 2049 | dependencies: 2050 | dunder-proto: 1.0.1 2051 | 2052 | has-symbols@1.1.0: {} 2053 | 2054 | has-tostringtag@1.0.2: 2055 | dependencies: 2056 | has-symbols: 1.1.0 2057 | 2058 | hasown@2.0.2: 2059 | dependencies: 2060 | function-bind: 1.1.2 2061 | 2062 | ignore@5.3.2: {} 2063 | 2064 | ignore@7.0.5: {} 2065 | 2066 | import-fresh@3.3.0: 2067 | dependencies: 2068 | parent-module: 1.0.1 2069 | resolve-from: 4.0.0 2070 | 2071 | imurmurhash@0.1.4: {} 2072 | 2073 | internal-slot@1.1.0: 2074 | dependencies: 2075 | es-errors: 1.3.0 2076 | hasown: 2.0.2 2077 | side-channel: 1.1.0 2078 | 2079 | is-array-buffer@3.0.5: 2080 | dependencies: 2081 | call-bind: 1.0.8 2082 | call-bound: 1.0.3 2083 | get-intrinsic: 1.2.6 2084 | 2085 | is-async-function@2.0.0: 2086 | dependencies: 2087 | has-tostringtag: 1.0.2 2088 | 2089 | is-bigint@1.1.0: 2090 | dependencies: 2091 | has-bigints: 1.1.0 2092 | 2093 | is-boolean-object@1.2.1: 2094 | dependencies: 2095 | call-bound: 1.0.3 2096 | has-tostringtag: 1.0.2 2097 | 2098 | is-callable@1.2.7: {} 2099 | 2100 | is-core-module@2.16.1: 2101 | dependencies: 2102 | hasown: 2.0.2 2103 | 2104 | is-data-view@1.0.2: 2105 | dependencies: 2106 | call-bound: 1.0.3 2107 | get-intrinsic: 1.2.6 2108 | is-typed-array: 1.1.15 2109 | 2110 | is-date-object@1.1.0: 2111 | dependencies: 2112 | call-bound: 1.0.3 2113 | has-tostringtag: 1.0.2 2114 | 2115 | is-extglob@2.1.1: {} 2116 | 2117 | is-finalizationregistry@1.1.1: 2118 | dependencies: 2119 | call-bound: 1.0.3 2120 | 2121 | is-generator-function@1.0.10: 2122 | dependencies: 2123 | has-tostringtag: 1.0.2 2124 | 2125 | is-glob@4.0.3: 2126 | dependencies: 2127 | is-extglob: 2.1.1 2128 | 2129 | is-map@2.0.3: {} 2130 | 2131 | is-module@1.0.0: {} 2132 | 2133 | is-number-object@1.1.1: 2134 | dependencies: 2135 | call-bound: 1.0.3 2136 | has-tostringtag: 1.0.2 2137 | 2138 | is-number@7.0.0: {} 2139 | 2140 | is-reference@1.2.1: 2141 | dependencies: 2142 | '@types/estree': 1.0.6 2143 | 2144 | is-regex@1.2.1: 2145 | dependencies: 2146 | call-bound: 1.0.3 2147 | gopd: 1.2.0 2148 | has-tostringtag: 1.0.2 2149 | hasown: 2.0.2 2150 | 2151 | is-set@2.0.3: {} 2152 | 2153 | is-shared-array-buffer@1.0.4: 2154 | dependencies: 2155 | call-bound: 1.0.3 2156 | 2157 | is-string@1.1.1: 2158 | dependencies: 2159 | call-bound: 1.0.3 2160 | has-tostringtag: 1.0.2 2161 | 2162 | is-symbol@1.1.1: 2163 | dependencies: 2164 | call-bound: 1.0.3 2165 | has-symbols: 1.1.0 2166 | safe-regex-test: 1.1.0 2167 | 2168 | is-typed-array@1.1.15: 2169 | dependencies: 2170 | which-typed-array: 1.1.18 2171 | 2172 | is-weakmap@2.0.2: {} 2173 | 2174 | is-weakref@1.1.0: 2175 | dependencies: 2176 | call-bound: 1.0.3 2177 | 2178 | is-weakset@2.0.4: 2179 | dependencies: 2180 | call-bound: 1.0.3 2181 | get-intrinsic: 1.2.6 2182 | 2183 | isarray@2.0.5: {} 2184 | 2185 | isexe@2.0.0: {} 2186 | 2187 | iterator.prototype@1.1.4: 2188 | dependencies: 2189 | define-data-property: 1.1.4 2190 | es-object-atoms: 1.0.0 2191 | get-intrinsic: 1.2.6 2192 | has-symbols: 1.1.0 2193 | reflect.getprototypeof: 1.0.9 2194 | set-function-name: 2.0.2 2195 | 2196 | js-tokens@4.0.0: {} 2197 | 2198 | js-yaml@4.1.0: 2199 | dependencies: 2200 | argparse: 2.0.1 2201 | 2202 | json-buffer@3.0.1: {} 2203 | 2204 | json-schema-traverse@0.4.1: {} 2205 | 2206 | json-stable-stringify-without-jsonify@1.0.1: {} 2207 | 2208 | jsx-ast-utils@3.3.5: 2209 | dependencies: 2210 | array-includes: 3.1.8 2211 | array.prototype.flat: 1.3.3 2212 | object.assign: 4.1.7 2213 | object.values: 1.2.1 2214 | 2215 | keyv@4.5.4: 2216 | dependencies: 2217 | json-buffer: 3.0.1 2218 | 2219 | levn@0.4.1: 2220 | dependencies: 2221 | prelude-ls: 1.2.1 2222 | type-check: 0.4.0 2223 | 2224 | locate-path@6.0.0: 2225 | dependencies: 2226 | p-locate: 5.0.0 2227 | 2228 | lodash.merge@4.6.2: {} 2229 | 2230 | loose-envify@1.4.0: 2231 | dependencies: 2232 | js-tokens: 4.0.0 2233 | 2234 | magic-string@0.30.17: 2235 | dependencies: 2236 | '@jridgewell/sourcemap-codec': 1.5.0 2237 | 2238 | math-intrinsics@1.1.0: {} 2239 | 2240 | merge2@1.4.1: {} 2241 | 2242 | micromatch@4.0.8: 2243 | dependencies: 2244 | braces: 3.0.3 2245 | picomatch: 2.3.1 2246 | 2247 | minimatch@3.1.2: 2248 | dependencies: 2249 | brace-expansion: 1.1.11 2250 | 2251 | minimatch@9.0.5: 2252 | dependencies: 2253 | brace-expansion: 2.0.1 2254 | 2255 | ms@2.1.3: {} 2256 | 2257 | natural-compare@1.4.0: {} 2258 | 2259 | object-assign@4.1.1: {} 2260 | 2261 | object-inspect@1.13.3: {} 2262 | 2263 | object-keys@1.1.1: {} 2264 | 2265 | object.assign@4.1.7: 2266 | dependencies: 2267 | call-bind: 1.0.8 2268 | call-bound: 1.0.3 2269 | define-properties: 1.2.1 2270 | es-object-atoms: 1.0.0 2271 | has-symbols: 1.1.0 2272 | object-keys: 1.1.1 2273 | 2274 | object.entries@1.1.9: 2275 | dependencies: 2276 | call-bind: 1.0.8 2277 | call-bound: 1.0.4 2278 | define-properties: 1.2.1 2279 | es-object-atoms: 1.1.1 2280 | 2281 | object.fromentries@2.0.8: 2282 | dependencies: 2283 | call-bind: 1.0.8 2284 | define-properties: 1.2.1 2285 | es-abstract: 1.23.8 2286 | es-object-atoms: 1.0.0 2287 | 2288 | object.values@1.2.1: 2289 | dependencies: 2290 | call-bind: 1.0.8 2291 | call-bound: 1.0.3 2292 | define-properties: 1.2.1 2293 | es-object-atoms: 1.0.0 2294 | 2295 | optionator@0.9.4: 2296 | dependencies: 2297 | deep-is: 0.1.4 2298 | fast-levenshtein: 2.0.6 2299 | levn: 0.4.1 2300 | prelude-ls: 1.2.1 2301 | type-check: 0.4.0 2302 | word-wrap: 1.2.5 2303 | 2304 | own-keys@1.0.1: 2305 | dependencies: 2306 | get-intrinsic: 1.2.6 2307 | object-keys: 1.1.1 2308 | safe-push-apply: 1.0.0 2309 | 2310 | p-limit@3.1.0: 2311 | dependencies: 2312 | yocto-queue: 0.1.0 2313 | 2314 | p-locate@5.0.0: 2315 | dependencies: 2316 | p-limit: 3.1.0 2317 | 2318 | parent-module@1.0.1: 2319 | dependencies: 2320 | callsites: 3.1.0 2321 | 2322 | path-exists@4.0.0: {} 2323 | 2324 | path-key@3.1.1: {} 2325 | 2326 | path-parse@1.0.7: {} 2327 | 2328 | picomatch@2.3.1: {} 2329 | 2330 | picomatch@4.0.2: {} 2331 | 2332 | possible-typed-array-names@1.0.0: {} 2333 | 2334 | prelude-ls@1.2.1: {} 2335 | 2336 | prettier@3.5.3: {} 2337 | 2338 | prop-types@15.8.1: 2339 | dependencies: 2340 | loose-envify: 1.4.0 2341 | object-assign: 4.1.1 2342 | react-is: 16.13.1 2343 | 2344 | punycode@2.3.1: {} 2345 | 2346 | queue-microtask@1.2.3: {} 2347 | 2348 | react-is@16.13.1: {} 2349 | 2350 | react@19.0.0: {} 2351 | 2352 | reflect.getprototypeof@1.0.9: 2353 | dependencies: 2354 | call-bind: 1.0.8 2355 | define-properties: 1.2.1 2356 | dunder-proto: 1.0.1 2357 | es-abstract: 1.23.8 2358 | es-errors: 1.3.0 2359 | get-intrinsic: 1.2.6 2360 | gopd: 1.2.0 2361 | which-builtin-type: 1.2.1 2362 | 2363 | regexp.prototype.flags@1.5.3: 2364 | dependencies: 2365 | call-bind: 1.0.8 2366 | define-properties: 1.2.1 2367 | es-errors: 1.3.0 2368 | set-function-name: 2.0.2 2369 | 2370 | resolve-from@4.0.0: {} 2371 | 2372 | resolve@1.22.10: 2373 | dependencies: 2374 | is-core-module: 2.16.1 2375 | path-parse: 1.0.7 2376 | supports-preserve-symlinks-flag: 1.0.0 2377 | 2378 | resolve@2.0.0-next.5: 2379 | dependencies: 2380 | is-core-module: 2.16.1 2381 | path-parse: 1.0.7 2382 | supports-preserve-symlinks-flag: 1.0.0 2383 | 2384 | reusify@1.0.4: {} 2385 | 2386 | rollup-plugin-node-externals@8.0.0(rollup@4.42.0): 2387 | dependencies: 2388 | rollup: 4.42.0 2389 | 2390 | rollup@4.42.0: 2391 | dependencies: 2392 | '@types/estree': 1.0.7 2393 | optionalDependencies: 2394 | '@rollup/rollup-android-arm-eabi': 4.42.0 2395 | '@rollup/rollup-android-arm64': 4.42.0 2396 | '@rollup/rollup-darwin-arm64': 4.42.0 2397 | '@rollup/rollup-darwin-x64': 4.42.0 2398 | '@rollup/rollup-freebsd-arm64': 4.42.0 2399 | '@rollup/rollup-freebsd-x64': 4.42.0 2400 | '@rollup/rollup-linux-arm-gnueabihf': 4.42.0 2401 | '@rollup/rollup-linux-arm-musleabihf': 4.42.0 2402 | '@rollup/rollup-linux-arm64-gnu': 4.42.0 2403 | '@rollup/rollup-linux-arm64-musl': 4.42.0 2404 | '@rollup/rollup-linux-loongarch64-gnu': 4.42.0 2405 | '@rollup/rollup-linux-powerpc64le-gnu': 4.42.0 2406 | '@rollup/rollup-linux-riscv64-gnu': 4.42.0 2407 | '@rollup/rollup-linux-riscv64-musl': 4.42.0 2408 | '@rollup/rollup-linux-s390x-gnu': 4.42.0 2409 | '@rollup/rollup-linux-x64-gnu': 4.42.0 2410 | '@rollup/rollup-linux-x64-musl': 4.42.0 2411 | '@rollup/rollup-win32-arm64-msvc': 4.42.0 2412 | '@rollup/rollup-win32-ia32-msvc': 4.42.0 2413 | '@rollup/rollup-win32-x64-msvc': 4.42.0 2414 | fsevents: 2.3.3 2415 | 2416 | run-parallel@1.2.0: 2417 | dependencies: 2418 | queue-microtask: 1.2.3 2419 | 2420 | safe-array-concat@1.1.3: 2421 | dependencies: 2422 | call-bind: 1.0.8 2423 | call-bound: 1.0.3 2424 | get-intrinsic: 1.2.6 2425 | has-symbols: 1.1.0 2426 | isarray: 2.0.5 2427 | 2428 | safe-push-apply@1.0.0: 2429 | dependencies: 2430 | es-errors: 1.3.0 2431 | isarray: 2.0.5 2432 | 2433 | safe-regex-test@1.1.0: 2434 | dependencies: 2435 | call-bound: 1.0.3 2436 | es-errors: 1.3.0 2437 | is-regex: 1.2.1 2438 | 2439 | semver@6.3.1: {} 2440 | 2441 | semver@7.6.3: {} 2442 | 2443 | set-function-length@1.2.2: 2444 | dependencies: 2445 | define-data-property: 1.1.4 2446 | es-errors: 1.3.0 2447 | function-bind: 1.1.2 2448 | get-intrinsic: 1.2.6 2449 | gopd: 1.2.0 2450 | has-property-descriptors: 1.0.2 2451 | 2452 | set-function-name@2.0.2: 2453 | dependencies: 2454 | define-data-property: 1.1.4 2455 | es-errors: 1.3.0 2456 | functions-have-names: 1.2.3 2457 | has-property-descriptors: 1.0.2 2458 | 2459 | shebang-command@2.0.0: 2460 | dependencies: 2461 | shebang-regex: 3.0.0 2462 | 2463 | shebang-regex@3.0.0: {} 2464 | 2465 | side-channel-list@1.0.0: 2466 | dependencies: 2467 | es-errors: 1.3.0 2468 | object-inspect: 1.13.3 2469 | 2470 | side-channel-map@1.0.1: 2471 | dependencies: 2472 | call-bound: 1.0.3 2473 | es-errors: 1.3.0 2474 | get-intrinsic: 1.2.6 2475 | object-inspect: 1.13.3 2476 | 2477 | side-channel-weakmap@1.0.2: 2478 | dependencies: 2479 | call-bound: 1.0.3 2480 | es-errors: 1.3.0 2481 | get-intrinsic: 1.2.6 2482 | object-inspect: 1.13.3 2483 | side-channel-map: 1.0.1 2484 | 2485 | side-channel@1.1.0: 2486 | dependencies: 2487 | es-errors: 1.3.0 2488 | object-inspect: 1.13.3 2489 | side-channel-list: 1.0.0 2490 | side-channel-map: 1.0.1 2491 | side-channel-weakmap: 1.0.2 2492 | 2493 | string.prototype.matchall@4.0.12: 2494 | dependencies: 2495 | call-bind: 1.0.8 2496 | call-bound: 1.0.3 2497 | define-properties: 1.2.1 2498 | es-abstract: 1.23.8 2499 | es-errors: 1.3.0 2500 | es-object-atoms: 1.0.0 2501 | get-intrinsic: 1.2.6 2502 | gopd: 1.2.0 2503 | has-symbols: 1.1.0 2504 | internal-slot: 1.1.0 2505 | regexp.prototype.flags: 1.5.3 2506 | set-function-name: 2.0.2 2507 | side-channel: 1.1.0 2508 | 2509 | string.prototype.repeat@1.0.0: 2510 | dependencies: 2511 | define-properties: 1.2.1 2512 | es-abstract: 1.23.8 2513 | 2514 | string.prototype.trim@1.2.10: 2515 | dependencies: 2516 | call-bind: 1.0.8 2517 | call-bound: 1.0.3 2518 | define-data-property: 1.1.4 2519 | define-properties: 1.2.1 2520 | es-abstract: 1.23.8 2521 | es-object-atoms: 1.0.0 2522 | has-property-descriptors: 1.0.2 2523 | 2524 | string.prototype.trimend@1.0.9: 2525 | dependencies: 2526 | call-bind: 1.0.8 2527 | call-bound: 1.0.3 2528 | define-properties: 1.2.1 2529 | es-object-atoms: 1.0.0 2530 | 2531 | string.prototype.trimstart@1.0.8: 2532 | dependencies: 2533 | call-bind: 1.0.8 2534 | define-properties: 1.2.1 2535 | es-object-atoms: 1.0.0 2536 | 2537 | strip-json-comments@3.1.1: {} 2538 | 2539 | supports-color@7.2.0: 2540 | dependencies: 2541 | has-flag: 4.0.0 2542 | 2543 | supports-preserve-symlinks-flag@1.0.0: {} 2544 | 2545 | to-regex-range@5.0.1: 2546 | dependencies: 2547 | is-number: 7.0.0 2548 | 2549 | ts-api-utils@2.1.0(typescript@5.8.3): 2550 | dependencies: 2551 | typescript: 5.8.3 2552 | 2553 | tslib@2.8.1: {} 2554 | 2555 | type-check@0.4.0: 2556 | dependencies: 2557 | prelude-ls: 1.2.1 2558 | 2559 | typed-array-buffer@1.0.3: 2560 | dependencies: 2561 | call-bound: 1.0.3 2562 | es-errors: 1.3.0 2563 | is-typed-array: 1.1.15 2564 | 2565 | typed-array-byte-length@1.0.3: 2566 | dependencies: 2567 | call-bind: 1.0.8 2568 | for-each: 0.3.3 2569 | gopd: 1.2.0 2570 | has-proto: 1.2.0 2571 | is-typed-array: 1.1.15 2572 | 2573 | typed-array-byte-offset@1.0.4: 2574 | dependencies: 2575 | available-typed-arrays: 1.0.7 2576 | call-bind: 1.0.8 2577 | for-each: 0.3.3 2578 | gopd: 1.2.0 2579 | has-proto: 1.2.0 2580 | is-typed-array: 1.1.15 2581 | reflect.getprototypeof: 1.0.9 2582 | 2583 | typed-array-length@1.0.7: 2584 | dependencies: 2585 | call-bind: 1.0.8 2586 | for-each: 0.3.3 2587 | gopd: 1.2.0 2588 | is-typed-array: 1.1.15 2589 | possible-typed-array-names: 1.0.0 2590 | reflect.getprototypeof: 1.0.9 2591 | 2592 | typescript-eslint@8.34.0(eslint@9.28.0)(typescript@5.8.3): 2593 | dependencies: 2594 | '@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3) 2595 | '@typescript-eslint/parser': 8.34.0(eslint@9.28.0)(typescript@5.8.3) 2596 | '@typescript-eslint/utils': 8.34.0(eslint@9.28.0)(typescript@5.8.3) 2597 | eslint: 9.28.0 2598 | typescript: 5.8.3 2599 | transitivePeerDependencies: 2600 | - supports-color 2601 | 2602 | typescript@5.8.3: {} 2603 | 2604 | unbox-primitive@1.1.0: 2605 | dependencies: 2606 | call-bound: 1.0.3 2607 | has-bigints: 1.1.0 2608 | has-symbols: 1.1.0 2609 | which-boxed-primitive: 1.1.1 2610 | 2611 | uri-js@4.4.1: 2612 | dependencies: 2613 | punycode: 2.3.1 2614 | 2615 | which-boxed-primitive@1.1.1: 2616 | dependencies: 2617 | is-bigint: 1.1.0 2618 | is-boolean-object: 1.2.1 2619 | is-number-object: 1.1.1 2620 | is-string: 1.1.1 2621 | is-symbol: 1.1.1 2622 | 2623 | which-builtin-type@1.2.1: 2624 | dependencies: 2625 | call-bound: 1.0.3 2626 | function.prototype.name: 1.1.8 2627 | has-tostringtag: 1.0.2 2628 | is-async-function: 2.0.0 2629 | is-date-object: 1.1.0 2630 | is-finalizationregistry: 1.1.1 2631 | is-generator-function: 1.0.10 2632 | is-regex: 1.2.1 2633 | is-weakref: 1.1.0 2634 | isarray: 2.0.5 2635 | which-boxed-primitive: 1.1.1 2636 | which-collection: 1.0.2 2637 | which-typed-array: 1.1.18 2638 | 2639 | which-collection@1.0.2: 2640 | dependencies: 2641 | is-map: 2.0.3 2642 | is-set: 2.0.3 2643 | is-weakmap: 2.0.2 2644 | is-weakset: 2.0.4 2645 | 2646 | which-typed-array@1.1.18: 2647 | dependencies: 2648 | available-typed-arrays: 1.0.7 2649 | call-bind: 1.0.8 2650 | call-bound: 1.0.3 2651 | for-each: 0.3.3 2652 | gopd: 1.2.0 2653 | has-tostringtag: 1.0.2 2654 | 2655 | which@2.0.2: 2656 | dependencies: 2657 | isexe: 2.0.0 2658 | 2659 | word-wrap@1.2.5: {} 2660 | 2661 | yocto-queue@0.1.0: {} 2662 | --------------------------------------------------------------------------------