├── .gitignore
├── .npmignore
├── .prettierignore
├── .prettierrc.mjs
├── .travis.yml
├── LICENSE
├── README.md
├── eslint.config.mjs
├── package.json
├── playground
├── .gitignore
├── .prettierignore
├── .prettierrc
├── eslint.config.js
├── index.html
├── package.json
├── pnpm-lock.yaml
├── public
│ ├── favicon.ico
│ └── robots.txt
├── src
│ ├── BackgroundImage.tsx
│ ├── ResizeCard.tsx
│ ├── Sidebar.tsx
│ ├── Snippet.tsx
│ ├── context.tsx
│ ├── index.css
│ ├── main.tsx
│ ├── useCopyToClipboard.ts
│ └── useDimensions.tsx
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
├── pnpm-lock.yaml
├── rollup.config.mjs
├── src
├── index.ts
├── types.ts
├── useResizeDetector.ts
└── utils.ts
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | */**/dist
3 | *.log
4 | .DS_Store
5 | build
6 | yarn.lock
7 | .eslintcache
8 | .yarn
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 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | */**/dist
3 | *.log
4 | .DS_Store
5 | build
6 | yarn.lock
7 | pnpm-lock.yaml
8 | .eslintcache
9 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 'iojs'
4 | script: npm run test
5 |
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/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 | ## Is it necessary for you to use this library?
20 |
21 | Container queries now work in [all major browsers](https://caniuse.com/css-container-queries). It's very likely you can solve your task using [pure CSS](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Container_Queries).
22 |
23 | 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 | ## Installation
55 |
56 | ```ssh
57 | npm i react-resize-detector
58 | // OR
59 | yarn add react-resize-detector
60 | ```
61 |
62 | ## Example
63 |
64 | ```jsx
65 | import { useResizeDetector } from 'react-resize-detector';
66 |
67 | const CustomComponent = () => {
68 | const { width, height, ref } = useResizeDetector();
69 | return
{`${width}x${height}`}
;
70 | };
71 | ```
72 |
73 | #### With props
74 |
75 | ```js
76 | import { useResizeDetector } from 'react-resize-detector';
77 |
78 | const CustomComponent = () => {
79 | const onResize = useCallback(() => {
80 | // on resize logic
81 | }, []);
82 |
83 | const { width, height, ref } = useResizeDetector({
84 | handleHeight: false,
85 | refreshMode: 'debounce',
86 | refreshRate: 1000,
87 | onResize,
88 | });
89 |
90 | return {`${width}x${height}`}
;
91 | };
92 | ```
93 |
94 | #### With custom ref
95 |
96 | _It's not advised to use this approach, as dynamically mounting and unmounting the observed element could lead to unexpected behavior._
97 |
98 | ```js
99 | import { useResizeDetector } from 'react-resize-detector';
100 |
101 | const CustomComponent = () => {
102 | const targetRef = useRef();
103 | const { width, height } = useResizeDetector({ targetRef });
104 | return {`${width}x${height}`}
;
105 | };
106 | ```
107 |
108 | ## API
109 |
110 | | Prop | Type | Description | Default |
111 | | --------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
112 | | onResize | Func | Function that will be invoked with `width`, `height` and ResizeObserver `entry` arguments | `undefined` |
113 | | handleWidth | Bool | Trigger `onResize` on width change | `true` |
114 | | handleHeight | Bool | Trigger `onResize` on height change | `true` |
115 | | skipOnMount | Bool | Do not trigger onResize when a component mounts | `false` |
116 | | refreshMode | String | Possible values: `throttle` and `debounce` See [lodash docs](https://lodash.com/docs#debounce) for more information. `undefined` - callback will be fired for every frame | `undefined` |
117 | | refreshRate | Number | Use this in conjunction with `refreshMode`. Important! It's a numeric prop so set it accordingly, e.g. `refreshRate={500}` | `1000` |
118 | | refreshOptions | Object | Use this in conjunction with `refreshMode`. An object in shape of `{ leading: bool, trailing: bool }`. Please refer to [lodash's docs](https://lodash.com/docs/4.17.11#throttle) for more info | `undefined` |
119 | | observerOptions | Object | These options will be used as a second parameter of [`resizeObserver.observe`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe) method. | `undefined` |
120 | | targetRef | Ref | Use this prop to pass a reference to the element you want to attach resize handlers to. It must be an instance of `React.useRef` or `React.createRef` functions | `undefined` |
121 |
122 | ## Testing with Enzyme and Jest
123 |
124 | Thanks to [@Primajin](https://github.com/Primajin) for posting this [snippet](https://github.com/maslianok/react-resize-detector/issues/145)
125 |
126 | ```jsx
127 | const { ResizeObserver } = window;
128 |
129 | beforeEach(() => {
130 | delete window.ResizeObserver;
131 | window.ResizeObserver = jest.fn().mockImplementation(() => ({
132 | observe: jest.fn(),
133 | unobserve: jest.fn(),
134 | disconnect: jest.fn(),
135 | }));
136 |
137 | wrapper = mount( );
138 | });
139 |
140 | afterEach(() => {
141 | window.ResizeObserver = ResizeObserver;
142 | jest.restoreAllMocks();
143 | });
144 |
145 | it('should do my test', () => {
146 | // [...]
147 | });
148 | ```
149 |
150 | ## License
151 |
152 | MIT
153 |
154 | ## ❤️
155 |
156 | Show us some love and STAR ⭐ the project if you find it useful
157 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-resize-detector",
3 | "version": "12.0.2",
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 | "build": "rollup -c",
17 | "prettier": "prettier --write .",
18 | "lint": "eslint . --fix",
19 | "fix": "npm run prettier && npm run lint",
20 | "prerelease": "npm version prerelease --preid=rc",
21 | "prepublishOnly": "npm run build"
22 | },
23 | "dependencies": {
24 | "lodash": "^4.17.21"
25 | },
26 | "devDependencies": {
27 | "@rollup/plugin-commonjs": "^28.0.2",
28 | "@rollup/plugin-node-resolve": "^16.0.0",
29 | "@rollup/plugin-typescript": "^12.1.2",
30 | "@types/lodash": "^4.17.13",
31 | "@types/react": "^19.0.2",
32 | "@types/react-dom": "^19.0.2",
33 | "eslint": "^9.17.0",
34 | "eslint-config-prettier": "^9.1.0",
35 | "eslint-plugin-react": "^7.37.3",
36 | "prettier": "^3.4.2",
37 | "rollup": "^4.29.1",
38 | "rollup-plugin-node-externals": "^8.0.0",
39 | "tslib": "^2.8.1",
40 | "typescript": "^5.7.2",
41 | "typescript-eslint": "^8.19.0"
42 | },
43 | "peerDependencies": {
44 | "react": "^18.0.0 || ^19.0.0"
45 | },
46 | "author": "Vitalii Maslianok (https://github.com/maslianok)",
47 | "bugs": {
48 | "url": "https://github.com/maslianok/react-resize-detector/issues"
49 | },
50 | "homepage": "https://github.com/maslianok/react-resize-detector",
51 | "keywords": [
52 | "react",
53 | "resize",
54 | "detector",
55 | "resizeObserver",
56 | "observer"
57 | ],
58 | "license": "MIT",
59 | "sideEffects": false,
60 | "maintainers": [
61 | {
62 | "name": "Vitalii Maslianok",
63 | "email": "maslianok@gmail.com"
64 | }
65 | ],
66 | "contributors": [
67 | {
68 | "name": "James J. Womack (@james_womack)"
69 | },
70 | {
71 | "name": "Roman Zhuravlov (@snelsi)"
72 | }
73 | ]
74 | }
75 |
--------------------------------------------------------------------------------
/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/.prettierignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | public
3 | build
4 |
--------------------------------------------------------------------------------
/playground/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 120,
3 | "singleQuote": true
4 | }
5 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/playground/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | React-resize-detector demo
8 |
9 |
10 | You need to enable JavaScript to run this app.
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/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/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maslianok/react-resize-detector/62b05b67964a63b803163f827902390025467b52/playground/public/favicon.ico
--------------------------------------------------------------------------------
/playground/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/playground/src/ResizeCard.tsx:
--------------------------------------------------------------------------------
1 | import { 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 |
14 | const [count, setCount] = useState(0);
15 | const { refreshMode, box, handleHeight, handleWidth, isLoading } = useDemoContext();
16 |
17 | // 2) Call `useResizeDetector` to get dimensions of the element.
18 | // It will return `width` and `height` of the element in pixels.
19 | // You need to pass a `ref` to the element you want to observe.
20 | const { ref, width, height } = useResizeDetector({
21 | // 3) You can customize `useResizeDetector` behavior by overriding default options.
22 | // For example, you can throttle the refresh rate of the resize event
23 |
24 | // Limit the refresh rate of the resize event.
25 | // Refs: https://lodash.com/docs#debounce
26 | refreshMode,
27 | refreshRate: 200,
28 |
29 | // If you only need to observe the width or height, you can disable the other dimension
30 | handleHeight,
31 | handleWidth,
32 |
33 | // You can pass additional options directly to the ResizeObserver
34 | // For example, you can change the box model used to calculate the dimensions
35 | // By default padding and border are not included in the dimensions
36 | observerOptions: {
37 | box,
38 | },
39 |
40 | // You can attach a side effect to the resize event
41 | // For example, count the number of times the element has been resized
42 | onResize: ({ width, height, entry }) => {
43 | if (width && height) {
44 | setCount((count) => count + 1);
45 | setDimensions(getDimensions(entry));
46 | }
47 | },
48 |
49 | // For the full list of options, see the API section in the README:
50 | // https://github.com/maslianok/react-resize-detector/tree/master?tab=readme-ov-file#api
51 | });
52 |
53 | // 4) `useResizeDetector` supports dynamic ref change. It's useful when you
54 | // need to use conditional rendering or when the ref is not available immediately.
55 | if (isLoading) {
56 | return (
57 |
58 |
59 |
60 | );
61 | }
62 |
63 | return (
64 |
69 |
70 |
71 |
72 | Card resized {count} times
73 |
74 |
75 | Width:{' '}
76 |
77 | {width}px
78 |
79 | , Height:{' '}
80 |
81 | {height}px
82 |
83 |
84 |
85 |
86 | );
87 | };
88 |
--------------------------------------------------------------------------------
/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, ResfreshModeType, 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 | } = useDemoContext();
39 |
40 | const toggleLoading = useCallback(() => {
41 | setIsLoading(true);
42 | setTimeout(() => setIsLoading(false), 1000);
43 | }, []);
44 |
45 | return (
46 |
47 |
48 |
49 |
50 |
51 | react-resize-detector Playground
52 |
53 |
54 |
55 |
56 | maslianok/react-resize-detector
57 |
58 |
59 |
60 |
61 |
62 | {/* version */}
63 |
64 | {/* MIT */}
65 |
66 | {/* npm downloads */}
67 |
68 | {/* size */}
69 |
70 |
71 |
72 |
73 | Harnesses the power of{' '}
74 | ResizeObservers, a
75 | feature in modern browsers that can detect when elements change size. useResizeDetector
{' '}
76 | hook makes it easy to manage these size changes within React applications, ensuring smooth and
77 | responsive user experiences.
78 |
79 |
80 |
81 |
82 | npm
83 | yarn
84 | pnpm
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | The Box Model
104 |
105 |
106 |
107 | ResizeObserver provides different{' '}
108 |
109 | box models
110 | {' '}
111 | to measure the size of an element. By default border and padding are not included in
112 | the size. You can use the box
option to change this behavior.
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 | Value
121 |
122 |
123 |
124 |
125 | Includes Border
126 |
127 |
128 | Includes Padding
129 |
130 |
131 | Includes Inner Content
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 | undefined
140 |
141 |
142 | No
143 |
144 |
145 |
148 | Docs say that padding should be included by default, but{' '}
149 |
150 | contentRect
151 | {' '}
152 | actually only includes the inner content.
153 | >
154 | }
155 | side="top"
156 | >
157 |
164 | No
165 |
166 |
167 |
168 |
169 | Yes
170 |
171 |
172 |
173 |
174 |
175 | content-box
176 |
177 |
178 | No
179 |
180 |
181 | No
182 |
183 |
184 | Yes
185 |
186 |
187 |
188 |
189 |
190 | border-box
191 |
192 |
193 | Yes
194 |
195 |
196 | Yes
197 |
198 |
199 | Yes
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 | Hover to visualize card's border / padding / inner content with a different color
212 |
213 |
214 |
215 |
216 |
setBox((v || undefined) as Box)} columns="3">
217 | undefined (Default)
218 | content-box
219 | border-box
220 |
221 |
222 |
223 |
224 |
225 | Refresh Mode
226 |
227 |
228 |
229 | Uses{' '}
230 |
231 | lodash
232 | {' '}
233 | to limit the amount of times the resize event can be fired per second. It's useful to prevent
234 | unnecessary re-renders when the user is resizing the window.
235 | -{' '}
236 |
237 | Throttle docs
238 |
239 | -{' '}
240 |
241 | Debounce docs
242 |
243 |
244 |
245 | setRefreshMode((v || undefined) as ResfreshModeType)}
248 | columns="3"
249 | >
250 | No Throttle (Default)
251 | Throttle
252 | Debounce
253 |
254 |
255 |
256 |
257 |
258 | Customize Axis
259 |
260 |
261 |
262 | If you only need to detect changes in one axis, you can disable the other axis to improve performance.
263 |
264 |
265 |
266 |
267 |
268 | Handle Width
269 |
270 |
271 |
272 |
273 | Handle Height
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 | Conditional Rendering
282 |
283 |
284 |
285 | useResizeDetector
hook supports conditional rendering and will automatically detect{' '}
286 | ref
changes.
287 |
288 |
289 |
290 |
291 | Toggle Loading
292 |
293 |
294 |
295 |
296 |
297 | Additional Resources
298 |
299 |
300 |
301 |
302 |
303 |
304 | Submit an issue / Ask a question
305 |
306 |
307 |
308 |
309 |
310 | View source code
311 |
312 |
313 |
314 |
315 |
316 | Releases
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 | );
326 | };
327 |
--------------------------------------------------------------------------------
/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 |
17 | {copied ? : }
18 |
19 |
20 |
21 | );
22 | };
23 |
--------------------------------------------------------------------------------
/playground/src/context.tsx:
--------------------------------------------------------------------------------
1 | import { createContext, useContext, useMemo, useState } from 'react';
2 |
3 | export type ResfreshModeType = '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: ResfreshModeType;
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 |
24 | const defaultContext = {} as DemoContext;
25 |
26 | export const DemoContext = createContext(defaultContext);
27 |
28 | export const useDemoContext = () => useContext(DemoContext);
29 |
30 | export const DemoProvider = ({ children }: { children: React.ReactNode }) => {
31 | const [box, setBox] = useState(undefined);
32 | const [refreshMode, setRefreshMode] = useState(undefined);
33 | const [isLoading, setIsLoading] = useState(false);
34 | const [handleHeight, setHandleHeight] = useState(true);
35 | const [handleWidth, setHandleWidth] = useState(true);
36 |
37 | const value = useMemo(
38 | () => ({
39 | refreshMode,
40 | setRefreshMode,
41 | isLoading,
42 | setIsLoading,
43 | handleHeight,
44 | setHandleHeight,
45 | handleWidth,
46 | setHandleWidth,
47 | box,
48 | setBox,
49 | }),
50 | [refreshMode, isLoading, handleHeight, handleWidth, box],
51 | );
52 |
53 | return {children} ;
54 | };
55 |
--------------------------------------------------------------------------------
/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/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/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 |
--------------------------------------------------------------------------------
/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/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/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | lodash:
12 | specifier: ^4.17.21
13 | version: 4.17.21
14 | react:
15 | specifier: ^18.0.0 || ^19.0.0
16 | version: 19.0.0
17 | devDependencies:
18 | '@rollup/plugin-commonjs':
19 | specifier: ^28.0.2
20 | version: 28.0.2(rollup@4.29.1)
21 | '@rollup/plugin-node-resolve':
22 | specifier: ^16.0.0
23 | version: 16.0.0(rollup@4.29.1)
24 | '@rollup/plugin-typescript':
25 | specifier: ^12.1.2
26 | version: 12.1.2(rollup@4.29.1)(tslib@2.8.1)(typescript@5.7.2)
27 | '@types/lodash':
28 | specifier: ^4.17.13
29 | version: 4.17.13
30 | '@types/react':
31 | specifier: ^19.0.2
32 | version: 19.0.2
33 | '@types/react-dom':
34 | specifier: ^19.0.2
35 | version: 19.0.2(@types/react@19.0.2)
36 | eslint:
37 | specifier: ^9.17.0
38 | version: 9.17.0
39 | eslint-config-prettier:
40 | specifier: ^9.1.0
41 | version: 9.1.0(eslint@9.17.0)
42 | eslint-plugin-react:
43 | specifier: ^7.37.3
44 | version: 7.37.3(eslint@9.17.0)
45 | prettier:
46 | specifier: ^3.4.2
47 | version: 3.4.2
48 | rollup:
49 | specifier: ^4.29.1
50 | version: 4.29.1
51 | rollup-plugin-node-externals:
52 | specifier: ^8.0.0
53 | version: 8.0.0(rollup@4.29.1)
54 | tslib:
55 | specifier: ^2.8.1
56 | version: 2.8.1
57 | typescript:
58 | specifier: ^5.7.2
59 | version: 5.7.2
60 | typescript-eslint:
61 | specifier: ^8.19.0
62 | version: 8.19.0(eslint@9.17.0)(typescript@5.7.2)
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/regexpp@4.12.1':
73 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
74 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
75 |
76 | '@eslint/config-array@0.19.1':
77 | resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==}
78 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
79 |
80 | '@eslint/core@0.9.1':
81 | resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==}
82 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
83 |
84 | '@eslint/eslintrc@3.2.0':
85 | resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
86 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
87 |
88 | '@eslint/js@9.17.0':
89 | resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==}
90 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
91 |
92 | '@eslint/object-schema@2.1.5':
93 | resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==}
94 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
95 |
96 | '@eslint/plugin-kit@0.2.4':
97 | resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==}
98 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
99 |
100 | '@humanfs/core@0.19.1':
101 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
102 | engines: {node: '>=18.18.0'}
103 |
104 | '@humanfs/node@0.16.6':
105 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
106 | engines: {node: '>=18.18.0'}
107 |
108 | '@humanwhocodes/module-importer@1.0.1':
109 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
110 | engines: {node: '>=12.22'}
111 |
112 | '@humanwhocodes/retry@0.3.1':
113 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
114 | engines: {node: '>=18.18'}
115 |
116 | '@humanwhocodes/retry@0.4.1':
117 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
118 | engines: {node: '>=18.18'}
119 |
120 | '@jridgewell/sourcemap-codec@1.5.0':
121 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
122 |
123 | '@nodelib/fs.scandir@2.1.5':
124 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
125 | engines: {node: '>= 8'}
126 |
127 | '@nodelib/fs.stat@2.0.5':
128 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
129 | engines: {node: '>= 8'}
130 |
131 | '@nodelib/fs.walk@1.2.8':
132 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
133 | engines: {node: '>= 8'}
134 |
135 | '@rollup/plugin-commonjs@28.0.2':
136 | resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==}
137 | engines: {node: '>=16.0.0 || 14 >= 14.17'}
138 | peerDependencies:
139 | rollup: ^2.68.0||^3.0.0||^4.0.0
140 | peerDependenciesMeta:
141 | rollup:
142 | optional: true
143 |
144 | '@rollup/plugin-node-resolve@16.0.0':
145 | resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==}
146 | engines: {node: '>=14.0.0'}
147 | peerDependencies:
148 | rollup: ^2.78.0||^3.0.0||^4.0.0
149 | peerDependenciesMeta:
150 | rollup:
151 | optional: true
152 |
153 | '@rollup/plugin-typescript@12.1.2':
154 | resolution: {integrity: sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==}
155 | engines: {node: '>=14.0.0'}
156 | peerDependencies:
157 | rollup: ^2.14.0||^3.0.0||^4.0.0
158 | tslib: '*'
159 | typescript: '>=3.7.0'
160 | peerDependenciesMeta:
161 | rollup:
162 | optional: true
163 | tslib:
164 | optional: true
165 |
166 | '@rollup/pluginutils@5.1.4':
167 | resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
168 | engines: {node: '>=14.0.0'}
169 | peerDependencies:
170 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
171 | peerDependenciesMeta:
172 | rollup:
173 | optional: true
174 |
175 | '@rollup/rollup-android-arm-eabi@4.29.1':
176 | resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==}
177 | cpu: [arm]
178 | os: [android]
179 |
180 | '@rollup/rollup-android-arm64@4.29.1':
181 | resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==}
182 | cpu: [arm64]
183 | os: [android]
184 |
185 | '@rollup/rollup-darwin-arm64@4.29.1':
186 | resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==}
187 | cpu: [arm64]
188 | os: [darwin]
189 |
190 | '@rollup/rollup-darwin-x64@4.29.1':
191 | resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==}
192 | cpu: [x64]
193 | os: [darwin]
194 |
195 | '@rollup/rollup-freebsd-arm64@4.29.1':
196 | resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==}
197 | cpu: [arm64]
198 | os: [freebsd]
199 |
200 | '@rollup/rollup-freebsd-x64@4.29.1':
201 | resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==}
202 | cpu: [x64]
203 | os: [freebsd]
204 |
205 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1':
206 | resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==}
207 | cpu: [arm]
208 | os: [linux]
209 |
210 | '@rollup/rollup-linux-arm-musleabihf@4.29.1':
211 | resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==}
212 | cpu: [arm]
213 | os: [linux]
214 |
215 | '@rollup/rollup-linux-arm64-gnu@4.29.1':
216 | resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==}
217 | cpu: [arm64]
218 | os: [linux]
219 |
220 | '@rollup/rollup-linux-arm64-musl@4.29.1':
221 | resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==}
222 | cpu: [arm64]
223 | os: [linux]
224 |
225 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1':
226 | resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==}
227 | cpu: [loong64]
228 | os: [linux]
229 |
230 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
231 | resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==}
232 | cpu: [ppc64]
233 | os: [linux]
234 |
235 | '@rollup/rollup-linux-riscv64-gnu@4.29.1':
236 | resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==}
237 | cpu: [riscv64]
238 | os: [linux]
239 |
240 | '@rollup/rollup-linux-s390x-gnu@4.29.1':
241 | resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==}
242 | cpu: [s390x]
243 | os: [linux]
244 |
245 | '@rollup/rollup-linux-x64-gnu@4.29.1':
246 | resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==}
247 | cpu: [x64]
248 | os: [linux]
249 |
250 | '@rollup/rollup-linux-x64-musl@4.29.1':
251 | resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==}
252 | cpu: [x64]
253 | os: [linux]
254 |
255 | '@rollup/rollup-win32-arm64-msvc@4.29.1':
256 | resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==}
257 | cpu: [arm64]
258 | os: [win32]
259 |
260 | '@rollup/rollup-win32-ia32-msvc@4.29.1':
261 | resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==}
262 | cpu: [ia32]
263 | os: [win32]
264 |
265 | '@rollup/rollup-win32-x64-msvc@4.29.1':
266 | resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==}
267 | cpu: [x64]
268 | os: [win32]
269 |
270 | '@types/estree@1.0.6':
271 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
272 |
273 | '@types/json-schema@7.0.15':
274 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
275 |
276 | '@types/lodash@4.17.13':
277 | resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==}
278 |
279 | '@types/react-dom@19.0.2':
280 | resolution: {integrity: sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==}
281 | peerDependencies:
282 | '@types/react': ^19.0.0
283 |
284 | '@types/react@19.0.2':
285 | resolution: {integrity: sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==}
286 |
287 | '@types/resolve@1.20.2':
288 | resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
289 |
290 | '@typescript-eslint/eslint-plugin@8.19.0':
291 | resolution: {integrity: sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==}
292 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
293 | peerDependencies:
294 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
295 | eslint: ^8.57.0 || ^9.0.0
296 | typescript: '>=4.8.4 <5.8.0'
297 |
298 | '@typescript-eslint/parser@8.19.0':
299 | resolution: {integrity: sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==}
300 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
301 | peerDependencies:
302 | eslint: ^8.57.0 || ^9.0.0
303 | typescript: '>=4.8.4 <5.8.0'
304 |
305 | '@typescript-eslint/scope-manager@8.19.0':
306 | resolution: {integrity: sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==}
307 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
308 |
309 | '@typescript-eslint/type-utils@8.19.0':
310 | resolution: {integrity: sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==}
311 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
312 | peerDependencies:
313 | eslint: ^8.57.0 || ^9.0.0
314 | typescript: '>=4.8.4 <5.8.0'
315 |
316 | '@typescript-eslint/types@8.19.0':
317 | resolution: {integrity: sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==}
318 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
319 |
320 | '@typescript-eslint/typescript-estree@8.19.0':
321 | resolution: {integrity: sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==}
322 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
323 | peerDependencies:
324 | typescript: '>=4.8.4 <5.8.0'
325 |
326 | '@typescript-eslint/utils@8.19.0':
327 | resolution: {integrity: sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==}
328 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
329 | peerDependencies:
330 | eslint: ^8.57.0 || ^9.0.0
331 | typescript: '>=4.8.4 <5.8.0'
332 |
333 | '@typescript-eslint/visitor-keys@8.19.0':
334 | resolution: {integrity: sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==}
335 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
336 |
337 | acorn-jsx@5.3.2:
338 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
339 | peerDependencies:
340 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
341 |
342 | acorn@8.14.0:
343 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
344 | engines: {node: '>=0.4.0'}
345 | hasBin: true
346 |
347 | ajv@6.12.6:
348 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
349 |
350 | ansi-styles@4.3.0:
351 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
352 | engines: {node: '>=8'}
353 |
354 | argparse@2.0.1:
355 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
356 |
357 | array-buffer-byte-length@1.0.2:
358 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
359 | engines: {node: '>= 0.4'}
360 |
361 | array-includes@3.1.8:
362 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
363 | engines: {node: '>= 0.4'}
364 |
365 | array.prototype.findlast@1.2.5:
366 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
367 | engines: {node: '>= 0.4'}
368 |
369 | array.prototype.flat@1.3.3:
370 | resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
371 | engines: {node: '>= 0.4'}
372 |
373 | array.prototype.flatmap@1.3.3:
374 | resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
375 | engines: {node: '>= 0.4'}
376 |
377 | array.prototype.tosorted@1.1.4:
378 | resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
379 | engines: {node: '>= 0.4'}
380 |
381 | arraybuffer.prototype.slice@1.0.4:
382 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
383 | engines: {node: '>= 0.4'}
384 |
385 | available-typed-arrays@1.0.7:
386 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
387 | engines: {node: '>= 0.4'}
388 |
389 | balanced-match@1.0.2:
390 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
391 |
392 | brace-expansion@1.1.11:
393 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
394 |
395 | brace-expansion@2.0.1:
396 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
397 |
398 | braces@3.0.3:
399 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
400 | engines: {node: '>=8'}
401 |
402 | call-bind-apply-helpers@1.0.1:
403 | resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==}
404 | engines: {node: '>= 0.4'}
405 |
406 | call-bind@1.0.8:
407 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
408 | engines: {node: '>= 0.4'}
409 |
410 | call-bound@1.0.3:
411 | resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
412 | engines: {node: '>= 0.4'}
413 |
414 | callsites@3.1.0:
415 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
416 | engines: {node: '>=6'}
417 |
418 | chalk@4.1.2:
419 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
420 | engines: {node: '>=10'}
421 |
422 | color-convert@2.0.1:
423 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
424 | engines: {node: '>=7.0.0'}
425 |
426 | color-name@1.1.4:
427 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
428 |
429 | commondir@1.0.1:
430 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
431 |
432 | concat-map@0.0.1:
433 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
434 |
435 | cross-spawn@7.0.6:
436 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
437 | engines: {node: '>= 8'}
438 |
439 | csstype@3.1.3:
440 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
441 |
442 | data-view-buffer@1.0.2:
443 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
444 | engines: {node: '>= 0.4'}
445 |
446 | data-view-byte-length@1.0.2:
447 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
448 | engines: {node: '>= 0.4'}
449 |
450 | data-view-byte-offset@1.0.1:
451 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
452 | engines: {node: '>= 0.4'}
453 |
454 | debug@4.4.0:
455 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
456 | engines: {node: '>=6.0'}
457 | peerDependencies:
458 | supports-color: '*'
459 | peerDependenciesMeta:
460 | supports-color:
461 | optional: true
462 |
463 | deep-is@0.1.4:
464 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
465 |
466 | deepmerge@4.3.1:
467 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
468 | engines: {node: '>=0.10.0'}
469 |
470 | define-data-property@1.1.4:
471 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
472 | engines: {node: '>= 0.4'}
473 |
474 | define-properties@1.2.1:
475 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
476 | engines: {node: '>= 0.4'}
477 |
478 | doctrine@2.1.0:
479 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
480 | engines: {node: '>=0.10.0'}
481 |
482 | dunder-proto@1.0.1:
483 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
484 | engines: {node: '>= 0.4'}
485 |
486 | es-abstract@1.23.8:
487 | resolution: {integrity: sha512-lfab8IzDn6EpI1ibZakcgS6WsfEBiB+43cuJo+wgylx1xKXf+Sp+YR3vFuQwC/u3sxYwV8Cxe3B0DpVUu/WiJQ==}
488 | engines: {node: '>= 0.4'}
489 |
490 | es-define-property@1.0.1:
491 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
492 | engines: {node: '>= 0.4'}
493 |
494 | es-errors@1.3.0:
495 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
496 | engines: {node: '>= 0.4'}
497 |
498 | es-iterator-helpers@1.2.1:
499 | resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
500 | engines: {node: '>= 0.4'}
501 |
502 | es-object-atoms@1.0.0:
503 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
504 | engines: {node: '>= 0.4'}
505 |
506 | es-set-tostringtag@2.0.3:
507 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
508 | engines: {node: '>= 0.4'}
509 |
510 | es-shim-unscopables@1.0.2:
511 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
512 |
513 | es-to-primitive@1.3.0:
514 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
515 | engines: {node: '>= 0.4'}
516 |
517 | escape-string-regexp@4.0.0:
518 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
519 | engines: {node: '>=10'}
520 |
521 | eslint-config-prettier@9.1.0:
522 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
523 | hasBin: true
524 | peerDependencies:
525 | eslint: '>=7.0.0'
526 |
527 | eslint-plugin-react@7.37.3:
528 | resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==}
529 | engines: {node: '>=4'}
530 | peerDependencies:
531 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
532 |
533 | eslint-scope@8.2.0:
534 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
535 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
536 |
537 | eslint-visitor-keys@3.4.3:
538 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
539 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
540 |
541 | eslint-visitor-keys@4.2.0:
542 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
543 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
544 |
545 | eslint@9.17.0:
546 | resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==}
547 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
548 | hasBin: true
549 | peerDependencies:
550 | jiti: '*'
551 | peerDependenciesMeta:
552 | jiti:
553 | optional: true
554 |
555 | espree@10.3.0:
556 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
557 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
558 |
559 | esquery@1.6.0:
560 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
561 | engines: {node: '>=0.10'}
562 |
563 | esrecurse@4.3.0:
564 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
565 | engines: {node: '>=4.0'}
566 |
567 | estraverse@5.3.0:
568 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
569 | engines: {node: '>=4.0'}
570 |
571 | estree-walker@2.0.2:
572 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
573 |
574 | esutils@2.0.3:
575 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
576 | engines: {node: '>=0.10.0'}
577 |
578 | fast-deep-equal@3.1.3:
579 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
580 |
581 | fast-glob@3.3.2:
582 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
583 | engines: {node: '>=8.6.0'}
584 |
585 | fast-json-stable-stringify@2.1.0:
586 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
587 |
588 | fast-levenshtein@2.0.6:
589 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
590 |
591 | fastq@1.18.0:
592 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==}
593 |
594 | fdir@6.4.2:
595 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==}
596 | peerDependencies:
597 | picomatch: ^3 || ^4
598 | peerDependenciesMeta:
599 | picomatch:
600 | optional: true
601 |
602 | file-entry-cache@8.0.0:
603 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
604 | engines: {node: '>=16.0.0'}
605 |
606 | fill-range@7.1.1:
607 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
608 | engines: {node: '>=8'}
609 |
610 | find-up@5.0.0:
611 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
612 | engines: {node: '>=10'}
613 |
614 | flat-cache@4.0.1:
615 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
616 | engines: {node: '>=16'}
617 |
618 | flatted@3.3.2:
619 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==}
620 |
621 | for-each@0.3.3:
622 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
623 |
624 | fsevents@2.3.3:
625 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
626 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
627 | os: [darwin]
628 |
629 | function-bind@1.1.2:
630 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
631 |
632 | function.prototype.name@1.1.8:
633 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
634 | engines: {node: '>= 0.4'}
635 |
636 | functions-have-names@1.2.3:
637 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
638 |
639 | get-intrinsic@1.2.6:
640 | resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==}
641 | engines: {node: '>= 0.4'}
642 |
643 | get-symbol-description@1.1.0:
644 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
645 | engines: {node: '>= 0.4'}
646 |
647 | glob-parent@5.1.2:
648 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
649 | engines: {node: '>= 6'}
650 |
651 | glob-parent@6.0.2:
652 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
653 | engines: {node: '>=10.13.0'}
654 |
655 | globals@14.0.0:
656 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
657 | engines: {node: '>=18'}
658 |
659 | globalthis@1.0.4:
660 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
661 | engines: {node: '>= 0.4'}
662 |
663 | gopd@1.2.0:
664 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
665 | engines: {node: '>= 0.4'}
666 |
667 | graphemer@1.4.0:
668 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
669 |
670 | has-bigints@1.1.0:
671 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
672 | engines: {node: '>= 0.4'}
673 |
674 | has-flag@4.0.0:
675 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
676 | engines: {node: '>=8'}
677 |
678 | has-property-descriptors@1.0.2:
679 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
680 |
681 | has-proto@1.2.0:
682 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
683 | engines: {node: '>= 0.4'}
684 |
685 | has-symbols@1.1.0:
686 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
687 | engines: {node: '>= 0.4'}
688 |
689 | has-tostringtag@1.0.2:
690 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
691 | engines: {node: '>= 0.4'}
692 |
693 | hasown@2.0.2:
694 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
695 | engines: {node: '>= 0.4'}
696 |
697 | ignore@5.3.2:
698 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
699 | engines: {node: '>= 4'}
700 |
701 | import-fresh@3.3.0:
702 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
703 | engines: {node: '>=6'}
704 |
705 | imurmurhash@0.1.4:
706 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
707 | engines: {node: '>=0.8.19'}
708 |
709 | internal-slot@1.1.0:
710 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
711 | engines: {node: '>= 0.4'}
712 |
713 | is-array-buffer@3.0.5:
714 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
715 | engines: {node: '>= 0.4'}
716 |
717 | is-async-function@2.0.0:
718 | resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
719 | engines: {node: '>= 0.4'}
720 |
721 | is-bigint@1.1.0:
722 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
723 | engines: {node: '>= 0.4'}
724 |
725 | is-boolean-object@1.2.1:
726 | resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==}
727 | engines: {node: '>= 0.4'}
728 |
729 | is-callable@1.2.7:
730 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
731 | engines: {node: '>= 0.4'}
732 |
733 | is-core-module@2.16.1:
734 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
735 | engines: {node: '>= 0.4'}
736 |
737 | is-data-view@1.0.2:
738 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
739 | engines: {node: '>= 0.4'}
740 |
741 | is-date-object@1.1.0:
742 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
743 | engines: {node: '>= 0.4'}
744 |
745 | is-extglob@2.1.1:
746 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
747 | engines: {node: '>=0.10.0'}
748 |
749 | is-finalizationregistry@1.1.1:
750 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
751 | engines: {node: '>= 0.4'}
752 |
753 | is-generator-function@1.0.10:
754 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
755 | engines: {node: '>= 0.4'}
756 |
757 | is-glob@4.0.3:
758 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
759 | engines: {node: '>=0.10.0'}
760 |
761 | is-map@2.0.3:
762 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
763 | engines: {node: '>= 0.4'}
764 |
765 | is-module@1.0.0:
766 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
767 |
768 | is-number-object@1.1.1:
769 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
770 | engines: {node: '>= 0.4'}
771 |
772 | is-number@7.0.0:
773 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
774 | engines: {node: '>=0.12.0'}
775 |
776 | is-reference@1.2.1:
777 | resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
778 |
779 | is-regex@1.2.1:
780 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
781 | engines: {node: '>= 0.4'}
782 |
783 | is-set@2.0.3:
784 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
785 | engines: {node: '>= 0.4'}
786 |
787 | is-shared-array-buffer@1.0.4:
788 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
789 | engines: {node: '>= 0.4'}
790 |
791 | is-string@1.1.1:
792 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
793 | engines: {node: '>= 0.4'}
794 |
795 | is-symbol@1.1.1:
796 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
797 | engines: {node: '>= 0.4'}
798 |
799 | is-typed-array@1.1.15:
800 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
801 | engines: {node: '>= 0.4'}
802 |
803 | is-weakmap@2.0.2:
804 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
805 | engines: {node: '>= 0.4'}
806 |
807 | is-weakref@1.1.0:
808 | resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==}
809 | engines: {node: '>= 0.4'}
810 |
811 | is-weakset@2.0.4:
812 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
813 | engines: {node: '>= 0.4'}
814 |
815 | isarray@2.0.5:
816 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
817 |
818 | isexe@2.0.0:
819 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
820 |
821 | iterator.prototype@1.1.4:
822 | resolution: {integrity: sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==}
823 | engines: {node: '>= 0.4'}
824 |
825 | js-tokens@4.0.0:
826 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
827 |
828 | js-yaml@4.1.0:
829 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
830 | hasBin: true
831 |
832 | json-buffer@3.0.1:
833 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
834 |
835 | json-schema-traverse@0.4.1:
836 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
837 |
838 | json-stable-stringify-without-jsonify@1.0.1:
839 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
840 |
841 | jsx-ast-utils@3.3.5:
842 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
843 | engines: {node: '>=4.0'}
844 |
845 | keyv@4.5.4:
846 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
847 |
848 | levn@0.4.1:
849 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
850 | engines: {node: '>= 0.8.0'}
851 |
852 | locate-path@6.0.0:
853 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
854 | engines: {node: '>=10'}
855 |
856 | lodash.merge@4.6.2:
857 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
858 |
859 | lodash@4.17.21:
860 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
861 |
862 | loose-envify@1.4.0:
863 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
864 | hasBin: true
865 |
866 | magic-string@0.30.17:
867 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
868 |
869 | math-intrinsics@1.1.0:
870 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
871 | engines: {node: '>= 0.4'}
872 |
873 | merge2@1.4.1:
874 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
875 | engines: {node: '>= 8'}
876 |
877 | micromatch@4.0.8:
878 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
879 | engines: {node: '>=8.6'}
880 |
881 | minimatch@3.1.2:
882 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
883 |
884 | minimatch@9.0.5:
885 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
886 | engines: {node: '>=16 || 14 >=14.17'}
887 |
888 | ms@2.1.3:
889 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
890 |
891 | natural-compare@1.4.0:
892 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
893 |
894 | object-assign@4.1.1:
895 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
896 | engines: {node: '>=0.10.0'}
897 |
898 | object-inspect@1.13.3:
899 | resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==}
900 | engines: {node: '>= 0.4'}
901 |
902 | object-keys@1.1.1:
903 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
904 | engines: {node: '>= 0.4'}
905 |
906 | object.assign@4.1.7:
907 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
908 | engines: {node: '>= 0.4'}
909 |
910 | object.entries@1.1.8:
911 | resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==}
912 | engines: {node: '>= 0.4'}
913 |
914 | object.fromentries@2.0.8:
915 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
916 | engines: {node: '>= 0.4'}
917 |
918 | object.values@1.2.1:
919 | resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
920 | engines: {node: '>= 0.4'}
921 |
922 | optionator@0.9.4:
923 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
924 | engines: {node: '>= 0.8.0'}
925 |
926 | own-keys@1.0.1:
927 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
928 | engines: {node: '>= 0.4'}
929 |
930 | p-limit@3.1.0:
931 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
932 | engines: {node: '>=10'}
933 |
934 | p-locate@5.0.0:
935 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
936 | engines: {node: '>=10'}
937 |
938 | parent-module@1.0.1:
939 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
940 | engines: {node: '>=6'}
941 |
942 | path-exists@4.0.0:
943 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
944 | engines: {node: '>=8'}
945 |
946 | path-key@3.1.1:
947 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
948 | engines: {node: '>=8'}
949 |
950 | path-parse@1.0.7:
951 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
952 |
953 | picomatch@2.3.1:
954 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
955 | engines: {node: '>=8.6'}
956 |
957 | picomatch@4.0.2:
958 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
959 | engines: {node: '>=12'}
960 |
961 | possible-typed-array-names@1.0.0:
962 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
963 | engines: {node: '>= 0.4'}
964 |
965 | prelude-ls@1.2.1:
966 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
967 | engines: {node: '>= 0.8.0'}
968 |
969 | prettier@3.4.2:
970 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==}
971 | engines: {node: '>=14'}
972 | hasBin: true
973 |
974 | prop-types@15.8.1:
975 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
976 |
977 | punycode@2.3.1:
978 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
979 | engines: {node: '>=6'}
980 |
981 | queue-microtask@1.2.3:
982 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
983 |
984 | react-is@16.13.1:
985 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
986 |
987 | react@19.0.0:
988 | resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==}
989 | engines: {node: '>=0.10.0'}
990 |
991 | reflect.getprototypeof@1.0.9:
992 | resolution: {integrity: sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==}
993 | engines: {node: '>= 0.4'}
994 |
995 | regexp.prototype.flags@1.5.3:
996 | resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==}
997 | engines: {node: '>= 0.4'}
998 |
999 | resolve-from@4.0.0:
1000 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1001 | engines: {node: '>=4'}
1002 |
1003 | resolve@1.22.10:
1004 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1005 | engines: {node: '>= 0.4'}
1006 | hasBin: true
1007 |
1008 | resolve@2.0.0-next.5:
1009 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
1010 | hasBin: true
1011 |
1012 | reusify@1.0.4:
1013 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1014 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1015 |
1016 | rollup-plugin-node-externals@8.0.0:
1017 | resolution: {integrity: sha512-2HIOpWsWn5DqBoYl6iCAmB4kd5GoGbF68PR4xKR1YBPvywiqjtYvDEjHFodyqRL51iAMDITP074Zxs0OKs6F+g==}
1018 | engines: {node: '>= 21 || ^20.6.0 || ^18.19.0'}
1019 | peerDependencies:
1020 | rollup: ^4.0.0
1021 |
1022 | rollup@4.29.1:
1023 | resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==}
1024 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1025 | hasBin: true
1026 |
1027 | run-parallel@1.2.0:
1028 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1029 |
1030 | safe-array-concat@1.1.3:
1031 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
1032 | engines: {node: '>=0.4'}
1033 |
1034 | safe-push-apply@1.0.0:
1035 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
1036 | engines: {node: '>= 0.4'}
1037 |
1038 | safe-regex-test@1.1.0:
1039 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
1040 | engines: {node: '>= 0.4'}
1041 |
1042 | semver@6.3.1:
1043 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1044 | hasBin: true
1045 |
1046 | semver@7.6.3:
1047 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
1048 | engines: {node: '>=10'}
1049 | hasBin: true
1050 |
1051 | set-function-length@1.2.2:
1052 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
1053 | engines: {node: '>= 0.4'}
1054 |
1055 | set-function-name@2.0.2:
1056 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
1057 | engines: {node: '>= 0.4'}
1058 |
1059 | shebang-command@2.0.0:
1060 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1061 | engines: {node: '>=8'}
1062 |
1063 | shebang-regex@3.0.0:
1064 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1065 | engines: {node: '>=8'}
1066 |
1067 | side-channel-list@1.0.0:
1068 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
1069 | engines: {node: '>= 0.4'}
1070 |
1071 | side-channel-map@1.0.1:
1072 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
1073 | engines: {node: '>= 0.4'}
1074 |
1075 | side-channel-weakmap@1.0.2:
1076 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
1077 | engines: {node: '>= 0.4'}
1078 |
1079 | side-channel@1.1.0:
1080 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
1081 | engines: {node: '>= 0.4'}
1082 |
1083 | string.prototype.matchall@4.0.12:
1084 | resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
1085 | engines: {node: '>= 0.4'}
1086 |
1087 | string.prototype.repeat@1.0.0:
1088 | resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
1089 |
1090 | string.prototype.trim@1.2.10:
1091 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
1092 | engines: {node: '>= 0.4'}
1093 |
1094 | string.prototype.trimend@1.0.9:
1095 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
1096 | engines: {node: '>= 0.4'}
1097 |
1098 | string.prototype.trimstart@1.0.8:
1099 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
1100 | engines: {node: '>= 0.4'}
1101 |
1102 | strip-json-comments@3.1.1:
1103 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1104 | engines: {node: '>=8'}
1105 |
1106 | supports-color@7.2.0:
1107 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1108 | engines: {node: '>=8'}
1109 |
1110 | supports-preserve-symlinks-flag@1.0.0:
1111 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1112 | engines: {node: '>= 0.4'}
1113 |
1114 | to-regex-range@5.0.1:
1115 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1116 | engines: {node: '>=8.0'}
1117 |
1118 | ts-api-utils@1.4.3:
1119 | resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
1120 | engines: {node: '>=16'}
1121 | peerDependencies:
1122 | typescript: '>=4.2.0'
1123 |
1124 | tslib@2.8.1:
1125 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1126 |
1127 | type-check@0.4.0:
1128 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1129 | engines: {node: '>= 0.8.0'}
1130 |
1131 | typed-array-buffer@1.0.3:
1132 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
1133 | engines: {node: '>= 0.4'}
1134 |
1135 | typed-array-byte-length@1.0.3:
1136 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
1137 | engines: {node: '>= 0.4'}
1138 |
1139 | typed-array-byte-offset@1.0.4:
1140 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
1141 | engines: {node: '>= 0.4'}
1142 |
1143 | typed-array-length@1.0.7:
1144 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
1145 | engines: {node: '>= 0.4'}
1146 |
1147 | typescript-eslint@8.19.0:
1148 | resolution: {integrity: sha512-Ni8sUkVWYK4KAcTtPjQ/UTiRk6jcsuDhPpxULapUDi8A/l8TSBk+t1GtJA1RsCzIJg0q6+J7bf35AwQigENWRQ==}
1149 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1150 | peerDependencies:
1151 | eslint: ^8.57.0 || ^9.0.0
1152 | typescript: '>=4.8.4 <5.8.0'
1153 |
1154 | typescript@5.7.2:
1155 | resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
1156 | engines: {node: '>=14.17'}
1157 | hasBin: true
1158 |
1159 | unbox-primitive@1.1.0:
1160 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
1161 | engines: {node: '>= 0.4'}
1162 |
1163 | uri-js@4.4.1:
1164 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1165 |
1166 | which-boxed-primitive@1.1.1:
1167 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
1168 | engines: {node: '>= 0.4'}
1169 |
1170 | which-builtin-type@1.2.1:
1171 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
1172 | engines: {node: '>= 0.4'}
1173 |
1174 | which-collection@1.0.2:
1175 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
1176 | engines: {node: '>= 0.4'}
1177 |
1178 | which-typed-array@1.1.18:
1179 | resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==}
1180 | engines: {node: '>= 0.4'}
1181 |
1182 | which@2.0.2:
1183 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1184 | engines: {node: '>= 8'}
1185 | hasBin: true
1186 |
1187 | word-wrap@1.2.5:
1188 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1189 | engines: {node: '>=0.10.0'}
1190 |
1191 | yocto-queue@0.1.0:
1192 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1193 | engines: {node: '>=10'}
1194 |
1195 | snapshots:
1196 |
1197 | '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)':
1198 | dependencies:
1199 | eslint: 9.17.0
1200 | eslint-visitor-keys: 3.4.3
1201 |
1202 | '@eslint-community/regexpp@4.12.1': {}
1203 |
1204 | '@eslint/config-array@0.19.1':
1205 | dependencies:
1206 | '@eslint/object-schema': 2.1.5
1207 | debug: 4.4.0
1208 | minimatch: 3.1.2
1209 | transitivePeerDependencies:
1210 | - supports-color
1211 |
1212 | '@eslint/core@0.9.1':
1213 | dependencies:
1214 | '@types/json-schema': 7.0.15
1215 |
1216 | '@eslint/eslintrc@3.2.0':
1217 | dependencies:
1218 | ajv: 6.12.6
1219 | debug: 4.4.0
1220 | espree: 10.3.0
1221 | globals: 14.0.0
1222 | ignore: 5.3.2
1223 | import-fresh: 3.3.0
1224 | js-yaml: 4.1.0
1225 | minimatch: 3.1.2
1226 | strip-json-comments: 3.1.1
1227 | transitivePeerDependencies:
1228 | - supports-color
1229 |
1230 | '@eslint/js@9.17.0': {}
1231 |
1232 | '@eslint/object-schema@2.1.5': {}
1233 |
1234 | '@eslint/plugin-kit@0.2.4':
1235 | dependencies:
1236 | levn: 0.4.1
1237 |
1238 | '@humanfs/core@0.19.1': {}
1239 |
1240 | '@humanfs/node@0.16.6':
1241 | dependencies:
1242 | '@humanfs/core': 0.19.1
1243 | '@humanwhocodes/retry': 0.3.1
1244 |
1245 | '@humanwhocodes/module-importer@1.0.1': {}
1246 |
1247 | '@humanwhocodes/retry@0.3.1': {}
1248 |
1249 | '@humanwhocodes/retry@0.4.1': {}
1250 |
1251 | '@jridgewell/sourcemap-codec@1.5.0': {}
1252 |
1253 | '@nodelib/fs.scandir@2.1.5':
1254 | dependencies:
1255 | '@nodelib/fs.stat': 2.0.5
1256 | run-parallel: 1.2.0
1257 |
1258 | '@nodelib/fs.stat@2.0.5': {}
1259 |
1260 | '@nodelib/fs.walk@1.2.8':
1261 | dependencies:
1262 | '@nodelib/fs.scandir': 2.1.5
1263 | fastq: 1.18.0
1264 |
1265 | '@rollup/plugin-commonjs@28.0.2(rollup@4.29.1)':
1266 | dependencies:
1267 | '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
1268 | commondir: 1.0.1
1269 | estree-walker: 2.0.2
1270 | fdir: 6.4.2(picomatch@4.0.2)
1271 | is-reference: 1.2.1
1272 | magic-string: 0.30.17
1273 | picomatch: 4.0.2
1274 | optionalDependencies:
1275 | rollup: 4.29.1
1276 |
1277 | '@rollup/plugin-node-resolve@16.0.0(rollup@4.29.1)':
1278 | dependencies:
1279 | '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
1280 | '@types/resolve': 1.20.2
1281 | deepmerge: 4.3.1
1282 | is-module: 1.0.0
1283 | resolve: 1.22.10
1284 | optionalDependencies:
1285 | rollup: 4.29.1
1286 |
1287 | '@rollup/plugin-typescript@12.1.2(rollup@4.29.1)(tslib@2.8.1)(typescript@5.7.2)':
1288 | dependencies:
1289 | '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
1290 | resolve: 1.22.10
1291 | typescript: 5.7.2
1292 | optionalDependencies:
1293 | rollup: 4.29.1
1294 | tslib: 2.8.1
1295 |
1296 | '@rollup/pluginutils@5.1.4(rollup@4.29.1)':
1297 | dependencies:
1298 | '@types/estree': 1.0.6
1299 | estree-walker: 2.0.2
1300 | picomatch: 4.0.2
1301 | optionalDependencies:
1302 | rollup: 4.29.1
1303 |
1304 | '@rollup/rollup-android-arm-eabi@4.29.1':
1305 | optional: true
1306 |
1307 | '@rollup/rollup-android-arm64@4.29.1':
1308 | optional: true
1309 |
1310 | '@rollup/rollup-darwin-arm64@4.29.1':
1311 | optional: true
1312 |
1313 | '@rollup/rollup-darwin-x64@4.29.1':
1314 | optional: true
1315 |
1316 | '@rollup/rollup-freebsd-arm64@4.29.1':
1317 | optional: true
1318 |
1319 | '@rollup/rollup-freebsd-x64@4.29.1':
1320 | optional: true
1321 |
1322 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1':
1323 | optional: true
1324 |
1325 | '@rollup/rollup-linux-arm-musleabihf@4.29.1':
1326 | optional: true
1327 |
1328 | '@rollup/rollup-linux-arm64-gnu@4.29.1':
1329 | optional: true
1330 |
1331 | '@rollup/rollup-linux-arm64-musl@4.29.1':
1332 | optional: true
1333 |
1334 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1':
1335 | optional: true
1336 |
1337 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
1338 | optional: true
1339 |
1340 | '@rollup/rollup-linux-riscv64-gnu@4.29.1':
1341 | optional: true
1342 |
1343 | '@rollup/rollup-linux-s390x-gnu@4.29.1':
1344 | optional: true
1345 |
1346 | '@rollup/rollup-linux-x64-gnu@4.29.1':
1347 | optional: true
1348 |
1349 | '@rollup/rollup-linux-x64-musl@4.29.1':
1350 | optional: true
1351 |
1352 | '@rollup/rollup-win32-arm64-msvc@4.29.1':
1353 | optional: true
1354 |
1355 | '@rollup/rollup-win32-ia32-msvc@4.29.1':
1356 | optional: true
1357 |
1358 | '@rollup/rollup-win32-x64-msvc@4.29.1':
1359 | optional: true
1360 |
1361 | '@types/estree@1.0.6': {}
1362 |
1363 | '@types/json-schema@7.0.15': {}
1364 |
1365 | '@types/lodash@4.17.13': {}
1366 |
1367 | '@types/react-dom@19.0.2(@types/react@19.0.2)':
1368 | dependencies:
1369 | '@types/react': 19.0.2
1370 |
1371 | '@types/react@19.0.2':
1372 | dependencies:
1373 | csstype: 3.1.3
1374 |
1375 | '@types/resolve@1.20.2': {}
1376 |
1377 | '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)':
1378 | dependencies:
1379 | '@eslint-community/regexpp': 4.12.1
1380 | '@typescript-eslint/parser': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
1381 | '@typescript-eslint/scope-manager': 8.19.0
1382 | '@typescript-eslint/type-utils': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
1383 | '@typescript-eslint/utils': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
1384 | '@typescript-eslint/visitor-keys': 8.19.0
1385 | eslint: 9.17.0
1386 | graphemer: 1.4.0
1387 | ignore: 5.3.2
1388 | natural-compare: 1.4.0
1389 | ts-api-utils: 1.4.3(typescript@5.7.2)
1390 | typescript: 5.7.2
1391 | transitivePeerDependencies:
1392 | - supports-color
1393 |
1394 | '@typescript-eslint/parser@8.19.0(eslint@9.17.0)(typescript@5.7.2)':
1395 | dependencies:
1396 | '@typescript-eslint/scope-manager': 8.19.0
1397 | '@typescript-eslint/types': 8.19.0
1398 | '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
1399 | '@typescript-eslint/visitor-keys': 8.19.0
1400 | debug: 4.4.0
1401 | eslint: 9.17.0
1402 | typescript: 5.7.2
1403 | transitivePeerDependencies:
1404 | - supports-color
1405 |
1406 | '@typescript-eslint/scope-manager@8.19.0':
1407 | dependencies:
1408 | '@typescript-eslint/types': 8.19.0
1409 | '@typescript-eslint/visitor-keys': 8.19.0
1410 |
1411 | '@typescript-eslint/type-utils@8.19.0(eslint@9.17.0)(typescript@5.7.2)':
1412 | dependencies:
1413 | '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
1414 | '@typescript-eslint/utils': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
1415 | debug: 4.4.0
1416 | eslint: 9.17.0
1417 | ts-api-utils: 1.4.3(typescript@5.7.2)
1418 | typescript: 5.7.2
1419 | transitivePeerDependencies:
1420 | - supports-color
1421 |
1422 | '@typescript-eslint/types@8.19.0': {}
1423 |
1424 | '@typescript-eslint/typescript-estree@8.19.0(typescript@5.7.2)':
1425 | dependencies:
1426 | '@typescript-eslint/types': 8.19.0
1427 | '@typescript-eslint/visitor-keys': 8.19.0
1428 | debug: 4.4.0
1429 | fast-glob: 3.3.2
1430 | is-glob: 4.0.3
1431 | minimatch: 9.0.5
1432 | semver: 7.6.3
1433 | ts-api-utils: 1.4.3(typescript@5.7.2)
1434 | typescript: 5.7.2
1435 | transitivePeerDependencies:
1436 | - supports-color
1437 |
1438 | '@typescript-eslint/utils@8.19.0(eslint@9.17.0)(typescript@5.7.2)':
1439 | dependencies:
1440 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0)
1441 | '@typescript-eslint/scope-manager': 8.19.0
1442 | '@typescript-eslint/types': 8.19.0
1443 | '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
1444 | eslint: 9.17.0
1445 | typescript: 5.7.2
1446 | transitivePeerDependencies:
1447 | - supports-color
1448 |
1449 | '@typescript-eslint/visitor-keys@8.19.0':
1450 | dependencies:
1451 | '@typescript-eslint/types': 8.19.0
1452 | eslint-visitor-keys: 4.2.0
1453 |
1454 | acorn-jsx@5.3.2(acorn@8.14.0):
1455 | dependencies:
1456 | acorn: 8.14.0
1457 |
1458 | acorn@8.14.0: {}
1459 |
1460 | ajv@6.12.6:
1461 | dependencies:
1462 | fast-deep-equal: 3.1.3
1463 | fast-json-stable-stringify: 2.1.0
1464 | json-schema-traverse: 0.4.1
1465 | uri-js: 4.4.1
1466 |
1467 | ansi-styles@4.3.0:
1468 | dependencies:
1469 | color-convert: 2.0.1
1470 |
1471 | argparse@2.0.1: {}
1472 |
1473 | array-buffer-byte-length@1.0.2:
1474 | dependencies:
1475 | call-bound: 1.0.3
1476 | is-array-buffer: 3.0.5
1477 |
1478 | array-includes@3.1.8:
1479 | dependencies:
1480 | call-bind: 1.0.8
1481 | define-properties: 1.2.1
1482 | es-abstract: 1.23.8
1483 | es-object-atoms: 1.0.0
1484 | get-intrinsic: 1.2.6
1485 | is-string: 1.1.1
1486 |
1487 | array.prototype.findlast@1.2.5:
1488 | dependencies:
1489 | call-bind: 1.0.8
1490 | define-properties: 1.2.1
1491 | es-abstract: 1.23.8
1492 | es-errors: 1.3.0
1493 | es-object-atoms: 1.0.0
1494 | es-shim-unscopables: 1.0.2
1495 |
1496 | array.prototype.flat@1.3.3:
1497 | dependencies:
1498 | call-bind: 1.0.8
1499 | define-properties: 1.2.1
1500 | es-abstract: 1.23.8
1501 | es-shim-unscopables: 1.0.2
1502 |
1503 | array.prototype.flatmap@1.3.3:
1504 | dependencies:
1505 | call-bind: 1.0.8
1506 | define-properties: 1.2.1
1507 | es-abstract: 1.23.8
1508 | es-shim-unscopables: 1.0.2
1509 |
1510 | array.prototype.tosorted@1.1.4:
1511 | dependencies:
1512 | call-bind: 1.0.8
1513 | define-properties: 1.2.1
1514 | es-abstract: 1.23.8
1515 | es-errors: 1.3.0
1516 | es-shim-unscopables: 1.0.2
1517 |
1518 | arraybuffer.prototype.slice@1.0.4:
1519 | dependencies:
1520 | array-buffer-byte-length: 1.0.2
1521 | call-bind: 1.0.8
1522 | define-properties: 1.2.1
1523 | es-abstract: 1.23.8
1524 | es-errors: 1.3.0
1525 | get-intrinsic: 1.2.6
1526 | is-array-buffer: 3.0.5
1527 |
1528 | available-typed-arrays@1.0.7:
1529 | dependencies:
1530 | possible-typed-array-names: 1.0.0
1531 |
1532 | balanced-match@1.0.2: {}
1533 |
1534 | brace-expansion@1.1.11:
1535 | dependencies:
1536 | balanced-match: 1.0.2
1537 | concat-map: 0.0.1
1538 |
1539 | brace-expansion@2.0.1:
1540 | dependencies:
1541 | balanced-match: 1.0.2
1542 |
1543 | braces@3.0.3:
1544 | dependencies:
1545 | fill-range: 7.1.1
1546 |
1547 | call-bind-apply-helpers@1.0.1:
1548 | dependencies:
1549 | es-errors: 1.3.0
1550 | function-bind: 1.1.2
1551 |
1552 | call-bind@1.0.8:
1553 | dependencies:
1554 | call-bind-apply-helpers: 1.0.1
1555 | es-define-property: 1.0.1
1556 | get-intrinsic: 1.2.6
1557 | set-function-length: 1.2.2
1558 |
1559 | call-bound@1.0.3:
1560 | dependencies:
1561 | call-bind-apply-helpers: 1.0.1
1562 | get-intrinsic: 1.2.6
1563 |
1564 | callsites@3.1.0: {}
1565 |
1566 | chalk@4.1.2:
1567 | dependencies:
1568 | ansi-styles: 4.3.0
1569 | supports-color: 7.2.0
1570 |
1571 | color-convert@2.0.1:
1572 | dependencies:
1573 | color-name: 1.1.4
1574 |
1575 | color-name@1.1.4: {}
1576 |
1577 | commondir@1.0.1: {}
1578 |
1579 | concat-map@0.0.1: {}
1580 |
1581 | cross-spawn@7.0.6:
1582 | dependencies:
1583 | path-key: 3.1.1
1584 | shebang-command: 2.0.0
1585 | which: 2.0.2
1586 |
1587 | csstype@3.1.3: {}
1588 |
1589 | data-view-buffer@1.0.2:
1590 | dependencies:
1591 | call-bound: 1.0.3
1592 | es-errors: 1.3.0
1593 | is-data-view: 1.0.2
1594 |
1595 | data-view-byte-length@1.0.2:
1596 | dependencies:
1597 | call-bound: 1.0.3
1598 | es-errors: 1.3.0
1599 | is-data-view: 1.0.2
1600 |
1601 | data-view-byte-offset@1.0.1:
1602 | dependencies:
1603 | call-bound: 1.0.3
1604 | es-errors: 1.3.0
1605 | is-data-view: 1.0.2
1606 |
1607 | debug@4.4.0:
1608 | dependencies:
1609 | ms: 2.1.3
1610 |
1611 | deep-is@0.1.4: {}
1612 |
1613 | deepmerge@4.3.1: {}
1614 |
1615 | define-data-property@1.1.4:
1616 | dependencies:
1617 | es-define-property: 1.0.1
1618 | es-errors: 1.3.0
1619 | gopd: 1.2.0
1620 |
1621 | define-properties@1.2.1:
1622 | dependencies:
1623 | define-data-property: 1.1.4
1624 | has-property-descriptors: 1.0.2
1625 | object-keys: 1.1.1
1626 |
1627 | doctrine@2.1.0:
1628 | dependencies:
1629 | esutils: 2.0.3
1630 |
1631 | dunder-proto@1.0.1:
1632 | dependencies:
1633 | call-bind-apply-helpers: 1.0.1
1634 | es-errors: 1.3.0
1635 | gopd: 1.2.0
1636 |
1637 | es-abstract@1.23.8:
1638 | dependencies:
1639 | array-buffer-byte-length: 1.0.2
1640 | arraybuffer.prototype.slice: 1.0.4
1641 | available-typed-arrays: 1.0.7
1642 | call-bind: 1.0.8
1643 | call-bound: 1.0.3
1644 | data-view-buffer: 1.0.2
1645 | data-view-byte-length: 1.0.2
1646 | data-view-byte-offset: 1.0.1
1647 | es-define-property: 1.0.1
1648 | es-errors: 1.3.0
1649 | es-object-atoms: 1.0.0
1650 | es-set-tostringtag: 2.0.3
1651 | es-to-primitive: 1.3.0
1652 | function.prototype.name: 1.1.8
1653 | get-intrinsic: 1.2.6
1654 | get-symbol-description: 1.1.0
1655 | globalthis: 1.0.4
1656 | gopd: 1.2.0
1657 | has-property-descriptors: 1.0.2
1658 | has-proto: 1.2.0
1659 | has-symbols: 1.1.0
1660 | hasown: 2.0.2
1661 | internal-slot: 1.1.0
1662 | is-array-buffer: 3.0.5
1663 | is-callable: 1.2.7
1664 | is-data-view: 1.0.2
1665 | is-regex: 1.2.1
1666 | is-shared-array-buffer: 1.0.4
1667 | is-string: 1.1.1
1668 | is-typed-array: 1.1.15
1669 | is-weakref: 1.1.0
1670 | math-intrinsics: 1.1.0
1671 | object-inspect: 1.13.3
1672 | object-keys: 1.1.1
1673 | object.assign: 4.1.7
1674 | own-keys: 1.0.1
1675 | regexp.prototype.flags: 1.5.3
1676 | safe-array-concat: 1.1.3
1677 | safe-push-apply: 1.0.0
1678 | safe-regex-test: 1.1.0
1679 | string.prototype.trim: 1.2.10
1680 | string.prototype.trimend: 1.0.9
1681 | string.prototype.trimstart: 1.0.8
1682 | typed-array-buffer: 1.0.3
1683 | typed-array-byte-length: 1.0.3
1684 | typed-array-byte-offset: 1.0.4
1685 | typed-array-length: 1.0.7
1686 | unbox-primitive: 1.1.0
1687 | which-typed-array: 1.1.18
1688 |
1689 | es-define-property@1.0.1: {}
1690 |
1691 | es-errors@1.3.0: {}
1692 |
1693 | es-iterator-helpers@1.2.1:
1694 | dependencies:
1695 | call-bind: 1.0.8
1696 | call-bound: 1.0.3
1697 | define-properties: 1.2.1
1698 | es-abstract: 1.23.8
1699 | es-errors: 1.3.0
1700 | es-set-tostringtag: 2.0.3
1701 | function-bind: 1.1.2
1702 | get-intrinsic: 1.2.6
1703 | globalthis: 1.0.4
1704 | gopd: 1.2.0
1705 | has-property-descriptors: 1.0.2
1706 | has-proto: 1.2.0
1707 | has-symbols: 1.1.0
1708 | internal-slot: 1.1.0
1709 | iterator.prototype: 1.1.4
1710 | safe-array-concat: 1.1.3
1711 |
1712 | es-object-atoms@1.0.0:
1713 | dependencies:
1714 | es-errors: 1.3.0
1715 |
1716 | es-set-tostringtag@2.0.3:
1717 | dependencies:
1718 | get-intrinsic: 1.2.6
1719 | has-tostringtag: 1.0.2
1720 | hasown: 2.0.2
1721 |
1722 | es-shim-unscopables@1.0.2:
1723 | dependencies:
1724 | hasown: 2.0.2
1725 |
1726 | es-to-primitive@1.3.0:
1727 | dependencies:
1728 | is-callable: 1.2.7
1729 | is-date-object: 1.1.0
1730 | is-symbol: 1.1.1
1731 |
1732 | escape-string-regexp@4.0.0: {}
1733 |
1734 | eslint-config-prettier@9.1.0(eslint@9.17.0):
1735 | dependencies:
1736 | eslint: 9.17.0
1737 |
1738 | eslint-plugin-react@7.37.3(eslint@9.17.0):
1739 | dependencies:
1740 | array-includes: 3.1.8
1741 | array.prototype.findlast: 1.2.5
1742 | array.prototype.flatmap: 1.3.3
1743 | array.prototype.tosorted: 1.1.4
1744 | doctrine: 2.1.0
1745 | es-iterator-helpers: 1.2.1
1746 | eslint: 9.17.0
1747 | estraverse: 5.3.0
1748 | hasown: 2.0.2
1749 | jsx-ast-utils: 3.3.5
1750 | minimatch: 3.1.2
1751 | object.entries: 1.1.8
1752 | object.fromentries: 2.0.8
1753 | object.values: 1.2.1
1754 | prop-types: 15.8.1
1755 | resolve: 2.0.0-next.5
1756 | semver: 6.3.1
1757 | string.prototype.matchall: 4.0.12
1758 | string.prototype.repeat: 1.0.0
1759 |
1760 | eslint-scope@8.2.0:
1761 | dependencies:
1762 | esrecurse: 4.3.0
1763 | estraverse: 5.3.0
1764 |
1765 | eslint-visitor-keys@3.4.3: {}
1766 |
1767 | eslint-visitor-keys@4.2.0: {}
1768 |
1769 | eslint@9.17.0:
1770 | dependencies:
1771 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0)
1772 | '@eslint-community/regexpp': 4.12.1
1773 | '@eslint/config-array': 0.19.1
1774 | '@eslint/core': 0.9.1
1775 | '@eslint/eslintrc': 3.2.0
1776 | '@eslint/js': 9.17.0
1777 | '@eslint/plugin-kit': 0.2.4
1778 | '@humanfs/node': 0.16.6
1779 | '@humanwhocodes/module-importer': 1.0.1
1780 | '@humanwhocodes/retry': 0.4.1
1781 | '@types/estree': 1.0.6
1782 | '@types/json-schema': 7.0.15
1783 | ajv: 6.12.6
1784 | chalk: 4.1.2
1785 | cross-spawn: 7.0.6
1786 | debug: 4.4.0
1787 | escape-string-regexp: 4.0.0
1788 | eslint-scope: 8.2.0
1789 | eslint-visitor-keys: 4.2.0
1790 | espree: 10.3.0
1791 | esquery: 1.6.0
1792 | esutils: 2.0.3
1793 | fast-deep-equal: 3.1.3
1794 | file-entry-cache: 8.0.0
1795 | find-up: 5.0.0
1796 | glob-parent: 6.0.2
1797 | ignore: 5.3.2
1798 | imurmurhash: 0.1.4
1799 | is-glob: 4.0.3
1800 | json-stable-stringify-without-jsonify: 1.0.1
1801 | lodash.merge: 4.6.2
1802 | minimatch: 3.1.2
1803 | natural-compare: 1.4.0
1804 | optionator: 0.9.4
1805 | transitivePeerDependencies:
1806 | - supports-color
1807 |
1808 | espree@10.3.0:
1809 | dependencies:
1810 | acorn: 8.14.0
1811 | acorn-jsx: 5.3.2(acorn@8.14.0)
1812 | eslint-visitor-keys: 4.2.0
1813 |
1814 | esquery@1.6.0:
1815 | dependencies:
1816 | estraverse: 5.3.0
1817 |
1818 | esrecurse@4.3.0:
1819 | dependencies:
1820 | estraverse: 5.3.0
1821 |
1822 | estraverse@5.3.0: {}
1823 |
1824 | estree-walker@2.0.2: {}
1825 |
1826 | esutils@2.0.3: {}
1827 |
1828 | fast-deep-equal@3.1.3: {}
1829 |
1830 | fast-glob@3.3.2:
1831 | dependencies:
1832 | '@nodelib/fs.stat': 2.0.5
1833 | '@nodelib/fs.walk': 1.2.8
1834 | glob-parent: 5.1.2
1835 | merge2: 1.4.1
1836 | micromatch: 4.0.8
1837 |
1838 | fast-json-stable-stringify@2.1.0: {}
1839 |
1840 | fast-levenshtein@2.0.6: {}
1841 |
1842 | fastq@1.18.0:
1843 | dependencies:
1844 | reusify: 1.0.4
1845 |
1846 | fdir@6.4.2(picomatch@4.0.2):
1847 | optionalDependencies:
1848 | picomatch: 4.0.2
1849 |
1850 | file-entry-cache@8.0.0:
1851 | dependencies:
1852 | flat-cache: 4.0.1
1853 |
1854 | fill-range@7.1.1:
1855 | dependencies:
1856 | to-regex-range: 5.0.1
1857 |
1858 | find-up@5.0.0:
1859 | dependencies:
1860 | locate-path: 6.0.0
1861 | path-exists: 4.0.0
1862 |
1863 | flat-cache@4.0.1:
1864 | dependencies:
1865 | flatted: 3.3.2
1866 | keyv: 4.5.4
1867 |
1868 | flatted@3.3.2: {}
1869 |
1870 | for-each@0.3.3:
1871 | dependencies:
1872 | is-callable: 1.2.7
1873 |
1874 | fsevents@2.3.3:
1875 | optional: true
1876 |
1877 | function-bind@1.1.2: {}
1878 |
1879 | function.prototype.name@1.1.8:
1880 | dependencies:
1881 | call-bind: 1.0.8
1882 | call-bound: 1.0.3
1883 | define-properties: 1.2.1
1884 | functions-have-names: 1.2.3
1885 | hasown: 2.0.2
1886 | is-callable: 1.2.7
1887 |
1888 | functions-have-names@1.2.3: {}
1889 |
1890 | get-intrinsic@1.2.6:
1891 | dependencies:
1892 | call-bind-apply-helpers: 1.0.1
1893 | dunder-proto: 1.0.1
1894 | es-define-property: 1.0.1
1895 | es-errors: 1.3.0
1896 | es-object-atoms: 1.0.0
1897 | function-bind: 1.1.2
1898 | gopd: 1.2.0
1899 | has-symbols: 1.1.0
1900 | hasown: 2.0.2
1901 | math-intrinsics: 1.1.0
1902 |
1903 | get-symbol-description@1.1.0:
1904 | dependencies:
1905 | call-bound: 1.0.3
1906 | es-errors: 1.3.0
1907 | get-intrinsic: 1.2.6
1908 |
1909 | glob-parent@5.1.2:
1910 | dependencies:
1911 | is-glob: 4.0.3
1912 |
1913 | glob-parent@6.0.2:
1914 | dependencies:
1915 | is-glob: 4.0.3
1916 |
1917 | globals@14.0.0: {}
1918 |
1919 | globalthis@1.0.4:
1920 | dependencies:
1921 | define-properties: 1.2.1
1922 | gopd: 1.2.0
1923 |
1924 | gopd@1.2.0: {}
1925 |
1926 | graphemer@1.4.0: {}
1927 |
1928 | has-bigints@1.1.0: {}
1929 |
1930 | has-flag@4.0.0: {}
1931 |
1932 | has-property-descriptors@1.0.2:
1933 | dependencies:
1934 | es-define-property: 1.0.1
1935 |
1936 | has-proto@1.2.0:
1937 | dependencies:
1938 | dunder-proto: 1.0.1
1939 |
1940 | has-symbols@1.1.0: {}
1941 |
1942 | has-tostringtag@1.0.2:
1943 | dependencies:
1944 | has-symbols: 1.1.0
1945 |
1946 | hasown@2.0.2:
1947 | dependencies:
1948 | function-bind: 1.1.2
1949 |
1950 | ignore@5.3.2: {}
1951 |
1952 | import-fresh@3.3.0:
1953 | dependencies:
1954 | parent-module: 1.0.1
1955 | resolve-from: 4.0.0
1956 |
1957 | imurmurhash@0.1.4: {}
1958 |
1959 | internal-slot@1.1.0:
1960 | dependencies:
1961 | es-errors: 1.3.0
1962 | hasown: 2.0.2
1963 | side-channel: 1.1.0
1964 |
1965 | is-array-buffer@3.0.5:
1966 | dependencies:
1967 | call-bind: 1.0.8
1968 | call-bound: 1.0.3
1969 | get-intrinsic: 1.2.6
1970 |
1971 | is-async-function@2.0.0:
1972 | dependencies:
1973 | has-tostringtag: 1.0.2
1974 |
1975 | is-bigint@1.1.0:
1976 | dependencies:
1977 | has-bigints: 1.1.0
1978 |
1979 | is-boolean-object@1.2.1:
1980 | dependencies:
1981 | call-bound: 1.0.3
1982 | has-tostringtag: 1.0.2
1983 |
1984 | is-callable@1.2.7: {}
1985 |
1986 | is-core-module@2.16.1:
1987 | dependencies:
1988 | hasown: 2.0.2
1989 |
1990 | is-data-view@1.0.2:
1991 | dependencies:
1992 | call-bound: 1.0.3
1993 | get-intrinsic: 1.2.6
1994 | is-typed-array: 1.1.15
1995 |
1996 | is-date-object@1.1.0:
1997 | dependencies:
1998 | call-bound: 1.0.3
1999 | has-tostringtag: 1.0.2
2000 |
2001 | is-extglob@2.1.1: {}
2002 |
2003 | is-finalizationregistry@1.1.1:
2004 | dependencies:
2005 | call-bound: 1.0.3
2006 |
2007 | is-generator-function@1.0.10:
2008 | dependencies:
2009 | has-tostringtag: 1.0.2
2010 |
2011 | is-glob@4.0.3:
2012 | dependencies:
2013 | is-extglob: 2.1.1
2014 |
2015 | is-map@2.0.3: {}
2016 |
2017 | is-module@1.0.0: {}
2018 |
2019 | is-number-object@1.1.1:
2020 | dependencies:
2021 | call-bound: 1.0.3
2022 | has-tostringtag: 1.0.2
2023 |
2024 | is-number@7.0.0: {}
2025 |
2026 | is-reference@1.2.1:
2027 | dependencies:
2028 | '@types/estree': 1.0.6
2029 |
2030 | is-regex@1.2.1:
2031 | dependencies:
2032 | call-bound: 1.0.3
2033 | gopd: 1.2.0
2034 | has-tostringtag: 1.0.2
2035 | hasown: 2.0.2
2036 |
2037 | is-set@2.0.3: {}
2038 |
2039 | is-shared-array-buffer@1.0.4:
2040 | dependencies:
2041 | call-bound: 1.0.3
2042 |
2043 | is-string@1.1.1:
2044 | dependencies:
2045 | call-bound: 1.0.3
2046 | has-tostringtag: 1.0.2
2047 |
2048 | is-symbol@1.1.1:
2049 | dependencies:
2050 | call-bound: 1.0.3
2051 | has-symbols: 1.1.0
2052 | safe-regex-test: 1.1.0
2053 |
2054 | is-typed-array@1.1.15:
2055 | dependencies:
2056 | which-typed-array: 1.1.18
2057 |
2058 | is-weakmap@2.0.2: {}
2059 |
2060 | is-weakref@1.1.0:
2061 | dependencies:
2062 | call-bound: 1.0.3
2063 |
2064 | is-weakset@2.0.4:
2065 | dependencies:
2066 | call-bound: 1.0.3
2067 | get-intrinsic: 1.2.6
2068 |
2069 | isarray@2.0.5: {}
2070 |
2071 | isexe@2.0.0: {}
2072 |
2073 | iterator.prototype@1.1.4:
2074 | dependencies:
2075 | define-data-property: 1.1.4
2076 | es-object-atoms: 1.0.0
2077 | get-intrinsic: 1.2.6
2078 | has-symbols: 1.1.0
2079 | reflect.getprototypeof: 1.0.9
2080 | set-function-name: 2.0.2
2081 |
2082 | js-tokens@4.0.0: {}
2083 |
2084 | js-yaml@4.1.0:
2085 | dependencies:
2086 | argparse: 2.0.1
2087 |
2088 | json-buffer@3.0.1: {}
2089 |
2090 | json-schema-traverse@0.4.1: {}
2091 |
2092 | json-stable-stringify-without-jsonify@1.0.1: {}
2093 |
2094 | jsx-ast-utils@3.3.5:
2095 | dependencies:
2096 | array-includes: 3.1.8
2097 | array.prototype.flat: 1.3.3
2098 | object.assign: 4.1.7
2099 | object.values: 1.2.1
2100 |
2101 | keyv@4.5.4:
2102 | dependencies:
2103 | json-buffer: 3.0.1
2104 |
2105 | levn@0.4.1:
2106 | dependencies:
2107 | prelude-ls: 1.2.1
2108 | type-check: 0.4.0
2109 |
2110 | locate-path@6.0.0:
2111 | dependencies:
2112 | p-locate: 5.0.0
2113 |
2114 | lodash.merge@4.6.2: {}
2115 |
2116 | lodash@4.17.21: {}
2117 |
2118 | loose-envify@1.4.0:
2119 | dependencies:
2120 | js-tokens: 4.0.0
2121 |
2122 | magic-string@0.30.17:
2123 | dependencies:
2124 | '@jridgewell/sourcemap-codec': 1.5.0
2125 |
2126 | math-intrinsics@1.1.0: {}
2127 |
2128 | merge2@1.4.1: {}
2129 |
2130 | micromatch@4.0.8:
2131 | dependencies:
2132 | braces: 3.0.3
2133 | picomatch: 2.3.1
2134 |
2135 | minimatch@3.1.2:
2136 | dependencies:
2137 | brace-expansion: 1.1.11
2138 |
2139 | minimatch@9.0.5:
2140 | dependencies:
2141 | brace-expansion: 2.0.1
2142 |
2143 | ms@2.1.3: {}
2144 |
2145 | natural-compare@1.4.0: {}
2146 |
2147 | object-assign@4.1.1: {}
2148 |
2149 | object-inspect@1.13.3: {}
2150 |
2151 | object-keys@1.1.1: {}
2152 |
2153 | object.assign@4.1.7:
2154 | dependencies:
2155 | call-bind: 1.0.8
2156 | call-bound: 1.0.3
2157 | define-properties: 1.2.1
2158 | es-object-atoms: 1.0.0
2159 | has-symbols: 1.1.0
2160 | object-keys: 1.1.1
2161 |
2162 | object.entries@1.1.8:
2163 | dependencies:
2164 | call-bind: 1.0.8
2165 | define-properties: 1.2.1
2166 | es-object-atoms: 1.0.0
2167 |
2168 | object.fromentries@2.0.8:
2169 | dependencies:
2170 | call-bind: 1.0.8
2171 | define-properties: 1.2.1
2172 | es-abstract: 1.23.8
2173 | es-object-atoms: 1.0.0
2174 |
2175 | object.values@1.2.1:
2176 | dependencies:
2177 | call-bind: 1.0.8
2178 | call-bound: 1.0.3
2179 | define-properties: 1.2.1
2180 | es-object-atoms: 1.0.0
2181 |
2182 | optionator@0.9.4:
2183 | dependencies:
2184 | deep-is: 0.1.4
2185 | fast-levenshtein: 2.0.6
2186 | levn: 0.4.1
2187 | prelude-ls: 1.2.1
2188 | type-check: 0.4.0
2189 | word-wrap: 1.2.5
2190 |
2191 | own-keys@1.0.1:
2192 | dependencies:
2193 | get-intrinsic: 1.2.6
2194 | object-keys: 1.1.1
2195 | safe-push-apply: 1.0.0
2196 |
2197 | p-limit@3.1.0:
2198 | dependencies:
2199 | yocto-queue: 0.1.0
2200 |
2201 | p-locate@5.0.0:
2202 | dependencies:
2203 | p-limit: 3.1.0
2204 |
2205 | parent-module@1.0.1:
2206 | dependencies:
2207 | callsites: 3.1.0
2208 |
2209 | path-exists@4.0.0: {}
2210 |
2211 | path-key@3.1.1: {}
2212 |
2213 | path-parse@1.0.7: {}
2214 |
2215 | picomatch@2.3.1: {}
2216 |
2217 | picomatch@4.0.2: {}
2218 |
2219 | possible-typed-array-names@1.0.0: {}
2220 |
2221 | prelude-ls@1.2.1: {}
2222 |
2223 | prettier@3.4.2: {}
2224 |
2225 | prop-types@15.8.1:
2226 | dependencies:
2227 | loose-envify: 1.4.0
2228 | object-assign: 4.1.1
2229 | react-is: 16.13.1
2230 |
2231 | punycode@2.3.1: {}
2232 |
2233 | queue-microtask@1.2.3: {}
2234 |
2235 | react-is@16.13.1: {}
2236 |
2237 | react@19.0.0: {}
2238 |
2239 | reflect.getprototypeof@1.0.9:
2240 | dependencies:
2241 | call-bind: 1.0.8
2242 | define-properties: 1.2.1
2243 | dunder-proto: 1.0.1
2244 | es-abstract: 1.23.8
2245 | es-errors: 1.3.0
2246 | get-intrinsic: 1.2.6
2247 | gopd: 1.2.0
2248 | which-builtin-type: 1.2.1
2249 |
2250 | regexp.prototype.flags@1.5.3:
2251 | dependencies:
2252 | call-bind: 1.0.8
2253 | define-properties: 1.2.1
2254 | es-errors: 1.3.0
2255 | set-function-name: 2.0.2
2256 |
2257 | resolve-from@4.0.0: {}
2258 |
2259 | resolve@1.22.10:
2260 | dependencies:
2261 | is-core-module: 2.16.1
2262 | path-parse: 1.0.7
2263 | supports-preserve-symlinks-flag: 1.0.0
2264 |
2265 | resolve@2.0.0-next.5:
2266 | dependencies:
2267 | is-core-module: 2.16.1
2268 | path-parse: 1.0.7
2269 | supports-preserve-symlinks-flag: 1.0.0
2270 |
2271 | reusify@1.0.4: {}
2272 |
2273 | rollup-plugin-node-externals@8.0.0(rollup@4.29.1):
2274 | dependencies:
2275 | rollup: 4.29.1
2276 |
2277 | rollup@4.29.1:
2278 | dependencies:
2279 | '@types/estree': 1.0.6
2280 | optionalDependencies:
2281 | '@rollup/rollup-android-arm-eabi': 4.29.1
2282 | '@rollup/rollup-android-arm64': 4.29.1
2283 | '@rollup/rollup-darwin-arm64': 4.29.1
2284 | '@rollup/rollup-darwin-x64': 4.29.1
2285 | '@rollup/rollup-freebsd-arm64': 4.29.1
2286 | '@rollup/rollup-freebsd-x64': 4.29.1
2287 | '@rollup/rollup-linux-arm-gnueabihf': 4.29.1
2288 | '@rollup/rollup-linux-arm-musleabihf': 4.29.1
2289 | '@rollup/rollup-linux-arm64-gnu': 4.29.1
2290 | '@rollup/rollup-linux-arm64-musl': 4.29.1
2291 | '@rollup/rollup-linux-loongarch64-gnu': 4.29.1
2292 | '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1
2293 | '@rollup/rollup-linux-riscv64-gnu': 4.29.1
2294 | '@rollup/rollup-linux-s390x-gnu': 4.29.1
2295 | '@rollup/rollup-linux-x64-gnu': 4.29.1
2296 | '@rollup/rollup-linux-x64-musl': 4.29.1
2297 | '@rollup/rollup-win32-arm64-msvc': 4.29.1
2298 | '@rollup/rollup-win32-ia32-msvc': 4.29.1
2299 | '@rollup/rollup-win32-x64-msvc': 4.29.1
2300 | fsevents: 2.3.3
2301 |
2302 | run-parallel@1.2.0:
2303 | dependencies:
2304 | queue-microtask: 1.2.3
2305 |
2306 | safe-array-concat@1.1.3:
2307 | dependencies:
2308 | call-bind: 1.0.8
2309 | call-bound: 1.0.3
2310 | get-intrinsic: 1.2.6
2311 | has-symbols: 1.1.0
2312 | isarray: 2.0.5
2313 |
2314 | safe-push-apply@1.0.0:
2315 | dependencies:
2316 | es-errors: 1.3.0
2317 | isarray: 2.0.5
2318 |
2319 | safe-regex-test@1.1.0:
2320 | dependencies:
2321 | call-bound: 1.0.3
2322 | es-errors: 1.3.0
2323 | is-regex: 1.2.1
2324 |
2325 | semver@6.3.1: {}
2326 |
2327 | semver@7.6.3: {}
2328 |
2329 | set-function-length@1.2.2:
2330 | dependencies:
2331 | define-data-property: 1.1.4
2332 | es-errors: 1.3.0
2333 | function-bind: 1.1.2
2334 | get-intrinsic: 1.2.6
2335 | gopd: 1.2.0
2336 | has-property-descriptors: 1.0.2
2337 |
2338 | set-function-name@2.0.2:
2339 | dependencies:
2340 | define-data-property: 1.1.4
2341 | es-errors: 1.3.0
2342 | functions-have-names: 1.2.3
2343 | has-property-descriptors: 1.0.2
2344 |
2345 | shebang-command@2.0.0:
2346 | dependencies:
2347 | shebang-regex: 3.0.0
2348 |
2349 | shebang-regex@3.0.0: {}
2350 |
2351 | side-channel-list@1.0.0:
2352 | dependencies:
2353 | es-errors: 1.3.0
2354 | object-inspect: 1.13.3
2355 |
2356 | side-channel-map@1.0.1:
2357 | dependencies:
2358 | call-bound: 1.0.3
2359 | es-errors: 1.3.0
2360 | get-intrinsic: 1.2.6
2361 | object-inspect: 1.13.3
2362 |
2363 | side-channel-weakmap@1.0.2:
2364 | dependencies:
2365 | call-bound: 1.0.3
2366 | es-errors: 1.3.0
2367 | get-intrinsic: 1.2.6
2368 | object-inspect: 1.13.3
2369 | side-channel-map: 1.0.1
2370 |
2371 | side-channel@1.1.0:
2372 | dependencies:
2373 | es-errors: 1.3.0
2374 | object-inspect: 1.13.3
2375 | side-channel-list: 1.0.0
2376 | side-channel-map: 1.0.1
2377 | side-channel-weakmap: 1.0.2
2378 |
2379 | string.prototype.matchall@4.0.12:
2380 | dependencies:
2381 | call-bind: 1.0.8
2382 | call-bound: 1.0.3
2383 | define-properties: 1.2.1
2384 | es-abstract: 1.23.8
2385 | es-errors: 1.3.0
2386 | es-object-atoms: 1.0.0
2387 | get-intrinsic: 1.2.6
2388 | gopd: 1.2.0
2389 | has-symbols: 1.1.0
2390 | internal-slot: 1.1.0
2391 | regexp.prototype.flags: 1.5.3
2392 | set-function-name: 2.0.2
2393 | side-channel: 1.1.0
2394 |
2395 | string.prototype.repeat@1.0.0:
2396 | dependencies:
2397 | define-properties: 1.2.1
2398 | es-abstract: 1.23.8
2399 |
2400 | string.prototype.trim@1.2.10:
2401 | dependencies:
2402 | call-bind: 1.0.8
2403 | call-bound: 1.0.3
2404 | define-data-property: 1.1.4
2405 | define-properties: 1.2.1
2406 | es-abstract: 1.23.8
2407 | es-object-atoms: 1.0.0
2408 | has-property-descriptors: 1.0.2
2409 |
2410 | string.prototype.trimend@1.0.9:
2411 | dependencies:
2412 | call-bind: 1.0.8
2413 | call-bound: 1.0.3
2414 | define-properties: 1.2.1
2415 | es-object-atoms: 1.0.0
2416 |
2417 | string.prototype.trimstart@1.0.8:
2418 | dependencies:
2419 | call-bind: 1.0.8
2420 | define-properties: 1.2.1
2421 | es-object-atoms: 1.0.0
2422 |
2423 | strip-json-comments@3.1.1: {}
2424 |
2425 | supports-color@7.2.0:
2426 | dependencies:
2427 | has-flag: 4.0.0
2428 |
2429 | supports-preserve-symlinks-flag@1.0.0: {}
2430 |
2431 | to-regex-range@5.0.1:
2432 | dependencies:
2433 | is-number: 7.0.0
2434 |
2435 | ts-api-utils@1.4.3(typescript@5.7.2):
2436 | dependencies:
2437 | typescript: 5.7.2
2438 |
2439 | tslib@2.8.1: {}
2440 |
2441 | type-check@0.4.0:
2442 | dependencies:
2443 | prelude-ls: 1.2.1
2444 |
2445 | typed-array-buffer@1.0.3:
2446 | dependencies:
2447 | call-bound: 1.0.3
2448 | es-errors: 1.3.0
2449 | is-typed-array: 1.1.15
2450 |
2451 | typed-array-byte-length@1.0.3:
2452 | dependencies:
2453 | call-bind: 1.0.8
2454 | for-each: 0.3.3
2455 | gopd: 1.2.0
2456 | has-proto: 1.2.0
2457 | is-typed-array: 1.1.15
2458 |
2459 | typed-array-byte-offset@1.0.4:
2460 | dependencies:
2461 | available-typed-arrays: 1.0.7
2462 | call-bind: 1.0.8
2463 | for-each: 0.3.3
2464 | gopd: 1.2.0
2465 | has-proto: 1.2.0
2466 | is-typed-array: 1.1.15
2467 | reflect.getprototypeof: 1.0.9
2468 |
2469 | typed-array-length@1.0.7:
2470 | dependencies:
2471 | call-bind: 1.0.8
2472 | for-each: 0.3.3
2473 | gopd: 1.2.0
2474 | is-typed-array: 1.1.15
2475 | possible-typed-array-names: 1.0.0
2476 | reflect.getprototypeof: 1.0.9
2477 |
2478 | typescript-eslint@8.19.0(eslint@9.17.0)(typescript@5.7.2):
2479 | dependencies:
2480 | '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)
2481 | '@typescript-eslint/parser': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
2482 | '@typescript-eslint/utils': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
2483 | eslint: 9.17.0
2484 | typescript: 5.7.2
2485 | transitivePeerDependencies:
2486 | - supports-color
2487 |
2488 | typescript@5.7.2: {}
2489 |
2490 | unbox-primitive@1.1.0:
2491 | dependencies:
2492 | call-bound: 1.0.3
2493 | has-bigints: 1.1.0
2494 | has-symbols: 1.1.0
2495 | which-boxed-primitive: 1.1.1
2496 |
2497 | uri-js@4.4.1:
2498 | dependencies:
2499 | punycode: 2.3.1
2500 |
2501 | which-boxed-primitive@1.1.1:
2502 | dependencies:
2503 | is-bigint: 1.1.0
2504 | is-boolean-object: 1.2.1
2505 | is-number-object: 1.1.1
2506 | is-string: 1.1.1
2507 | is-symbol: 1.1.1
2508 |
2509 | which-builtin-type@1.2.1:
2510 | dependencies:
2511 | call-bound: 1.0.3
2512 | function.prototype.name: 1.1.8
2513 | has-tostringtag: 1.0.2
2514 | is-async-function: 2.0.0
2515 | is-date-object: 1.1.0
2516 | is-finalizationregistry: 1.1.1
2517 | is-generator-function: 1.0.10
2518 | is-regex: 1.2.1
2519 | is-weakref: 1.1.0
2520 | isarray: 2.0.5
2521 | which-boxed-primitive: 1.1.1
2522 | which-collection: 1.0.2
2523 | which-typed-array: 1.1.18
2524 |
2525 | which-collection@1.0.2:
2526 | dependencies:
2527 | is-map: 2.0.3
2528 | is-set: 2.0.3
2529 | is-weakmap: 2.0.2
2530 | is-weakset: 2.0.4
2531 |
2532 | which-typed-array@1.1.18:
2533 | dependencies:
2534 | available-typed-arrays: 1.0.7
2535 | call-bind: 1.0.8
2536 | call-bound: 1.0.3
2537 | for-each: 0.3.3
2538 | gopd: 1.2.0
2539 | has-tostringtag: 1.0.2
2540 |
2541 | which@2.0.2:
2542 | dependencies:
2543 | isexe: 2.0.0
2544 |
2545 | word-wrap@1.2.5: {}
2546 |
2547 | yocto-queue@0.1.0: {}
2548 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import useResizeDetector from './useResizeDetector';
2 |
3 | export { useResizeDetector };
4 | export type {
5 | UseResizeDetectorReturn,
6 | useResizeDetectorProps,
7 | OnResizeCallback,
8 | ResizePayload,
9 | ResfreshModeType,
10 | ResfreshOptionsType,
11 | Dimensions,
12 | } from './types';
13 |
--------------------------------------------------------------------------------
/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 ResfreshModeType = 'throttle' | 'debounce';
15 | export type ResfreshOptionsType = { 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 | * Changes the update strategy. Possible values: "throttle" and "debounce".
42 | * See `lodash` docs for more information https://lodash.com/docs/
43 | * undefined - callback will be fired for every frame.
44 | * Default: undefined
45 | */
46 | refreshMode?: ResfreshModeType;
47 | /**
48 | * Set the timeout/interval for `refreshMode` strategy
49 | * Default: undefined
50 | */
51 | refreshRate?: number;
52 | /**
53 | * Pass additional params to `refreshMode` according to lodash docs
54 | * Default: undefined
55 | */
56 | refreshOptions?: ResfreshOptionsType;
57 | /**
58 | * These options will be used as a second parameter of `resizeObserver.observe` method
59 | * @see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe
60 | * Default: undefined
61 | */
62 | observerOptions?: ResizeObserverOptions;
63 | };
64 |
65 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
66 | export type OnRefChangeType = {
67 | (node: T | null): void;
68 | current?: T | null;
69 | };
70 |
71 | export interface UseResizeDetectorReturn extends Dimensions {
72 | ref: OnRefChangeType;
73 | }
74 |
75 | export interface useResizeDetectorProps extends Props {
76 | targetRef?: MutableRefObject;
77 | }
78 |
--------------------------------------------------------------------------------
/src/useResizeDetector.ts:
--------------------------------------------------------------------------------
1 | import { useEffect, useState, useRef, useCallback } from 'react';
2 | import type { DebouncedFunc } from 'lodash';
3 |
4 | import { getDimensions, patchResizeCallback, useCallbackRef, useRefProxy } from './utils';
5 |
6 | import type { Dimensions, UseResizeDetectorReturn, useResizeDetectorProps } from './types';
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 | }: useResizeDetectorProps = {}): UseResizeDetectorReturn {
20 | // If `skipOnMount` is enabled, skip the first resize event
21 | const skipResize = useRef(skipOnMount);
22 |
23 | // Wrap the `onResize` callback with a ref to avoid re-renders
24 | const onResizeRef = useCallbackRef(onResize);
25 |
26 | const [size, setSize] = useState({
27 | width: undefined,
28 | height: undefined,
29 | });
30 |
31 | // Create a proxy ref to handle conditional rendering and dynamic ref changes of the target element
32 | const { refProxy, refElement } = useRefProxy(targetRef);
33 |
34 | const { box } = observerOptions || {};
35 |
36 | const resizeCallback: ResizeObserverCallback = useCallback(
37 | (entries: ResizeObserverEntry[]) => {
38 | if (!handleWidth && !handleHeight) return;
39 |
40 | if (skipResize.current) {
41 | skipResize.current = false;
42 | return;
43 | }
44 |
45 | // Only update the size if one of the observed dimensions has changed
46 | const shouldSetSize = (prevSize: Dimensions, nextSize: Dimensions) =>
47 | (handleWidth && prevSize.width !== nextSize.width) || (handleHeight && prevSize.height !== nextSize.height);
48 |
49 | entries.forEach((entry) => {
50 | const dimensions = getDimensions(entry, box);
51 | setSize((prevSize) => {
52 | if (!shouldSetSize(prevSize, dimensions)) return prevSize;
53 | onResizeRef?.({
54 | width: dimensions.width,
55 | height: dimensions.height,
56 | entry,
57 | });
58 | return dimensions;
59 | });
60 | });
61 | },
62 | [handleWidth, handleHeight, skipResize, box],
63 | );
64 |
65 | // Throttle/Debounce the resize event if refreshMode is configured
66 | const resizeHandler = useCallback(patchResizeCallback(resizeCallback, refreshMode, refreshRate, refreshOptions), [
67 | resizeCallback,
68 | refreshMode,
69 | refreshRate,
70 | refreshOptions,
71 | ]);
72 |
73 | // Attach ResizeObserver to the element
74 | useEffect(() => {
75 | let resizeObserver: ResizeObserver | undefined;
76 | if (refElement) {
77 | resizeObserver = new window.ResizeObserver(resizeHandler);
78 | resizeObserver.observe(refElement, observerOptions);
79 | }
80 | // If refElement is not available, reset the size
81 | else if (size.width || size.height) {
82 | onResizeRef?.({
83 | width: null,
84 | height: null,
85 | entry: null,
86 | });
87 | setSize({ width: undefined, height: undefined });
88 | }
89 |
90 | // Disconnect the ResizeObserver when the component is unmounted
91 | return () => {
92 | resizeObserver?.disconnect?.();
93 | (resizeHandler as DebouncedFunc).cancel?.();
94 | };
95 | }, [resizeHandler, refElement]);
96 |
97 | return { ref: refProxy, ...size };
98 | }
99 |
100 | export default useResizeDetector;
101 |
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import debounce from 'lodash/debounce.js';
3 | import throttle from 'lodash/throttle.js';
4 | import type { DebouncedFunc } from 'lodash';
5 |
6 | import { OnRefChangeType, Props } from './types';
7 |
8 | export type PatchedResizeObserverCallback = DebouncedFunc | ResizeObserverCallback;
9 |
10 | /**
11 | * Wraps the resize callback with a lodash 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 | if (box === 'border-box') {
109 | return {
110 | width: entry.borderBoxSize[0].inlineSize,
111 | height: entry.borderBoxSize[0].blockSize,
112 | };
113 | }
114 |
115 | if (box === 'content-box') {
116 | return {
117 | width: entry.contentBoxSize[0].inlineSize,
118 | height: entry.contentBoxSize[0].blockSize,
119 | };
120 | }
121 |
122 | return {
123 | width: entry.contentRect.width,
124 | height: entry.contentRect.height,
125 | };
126 | };
127 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "rootDir": "src",
4 | "declaration": true,
5 | "declarationDir": "build",
6 | "module": "esnext",
7 | "target": "es6",
8 | "lib": ["es6", "dom", "es2016", "es2017"],
9 | "sourceMap": true,
10 | "strict": true,
11 | "jsx": "react",
12 | "moduleResolution": "node",
13 | "allowSyntheticDefaultImports": true,
14 | "esModuleInterop": true,
15 | "noImplicitAny": false,
16 | "skipLibCheck": true,
17 | "inlineSources": true
18 | },
19 | "include": ["src/**/*"],
20 | "exclude": ["node_modules", "build", "src/**/*.test.tsx"]
21 | }
22 |
--------------------------------------------------------------------------------