├── .eslintrc.cjs
├── .gitignore
├── .prettierrc
├── LICENSE
├── README.md
├── index.html
├── package.json
├── src
├── App.tsx
├── components
│ ├── PrepareProgress.module.scss
│ ├── PrepareProgress.tsx
│ ├── Slider.module.scss
│ ├── Slider.tsx
│ ├── Steps.module.scss
│ ├── Steps.tsx
│ ├── VideoCrop.module.scss
│ ├── VideoCrop.tsx
│ ├── VideoTrim.module.scss
│ └── VideoTrim.tsx
├── helpers.ts
├── index.scss
├── main.tsx
├── steps
│ ├── Crop.module.scss
│ ├── Crop.tsx
│ ├── Render.module.scss
│ ├── Render.tsx
│ ├── SelectFile.module.scss
│ └── SelectFile.tsx
├── stores
│ └── main.ts
├── types.ts
└── vite-env.d.ts
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.ts
└── yarn.lock
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: { browser: true, es2020: true },
4 | extends: [
5 | 'eslint:recommended',
6 | 'plugin:@typescript-eslint/recommended',
7 | 'plugin:react-hooks/recommended',
8 | ],
9 | ignorePatterns: ['dist', '.eslintrc.cjs'],
10 | parser: '@typescript-eslint/parser',
11 | plugins: ['react-refresh'],
12 | rules: {
13 | 'react-refresh/only-export-components': [
14 | 'warn',
15 | { allowConstantExport: true },
16 | ],
17 | },
18 | }
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "tabWidth": 2,
3 | "singleQuote": true,
4 | "semi": true,
5 | "arrowParens": "avoid"
6 | }
7 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2023, Mat Sz
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted (subject to the limitations in the disclaimer
6 | below) provided that the following conditions are met:
7 |
8 | * Redistributions of source code must retain the above copyright notice,
9 | this list of conditions and the following disclaimer.
10 |
11 | * Redistributions in binary form must reproduce the above copyright
12 | notice, this list of conditions and the following disclaimer in the
13 | documentation and/or other materials provided with the distribution.
14 |
15 | * Neither the name of the copyright holder nor the names of its
16 | contributors may be used to endorse or promote products derived from this
17 | software without specific prior written permission.
18 |
19 | NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY
20 | THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
21 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23 | PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
24 | CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
27 | BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
28 | IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 | POSSIBILITY OF SUCH DAMAGE.
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # crop.mov
2 |
3 | Quick video edits, right in your web browser. Built with React and [ffmpeg.wasm](https://github.com/ffmpegwasm/ffmpeg.wasm)
4 |
5 | https://crop.mov
6 |
7 | - ✔️ Simple UI
8 | - ✔️ No watermarks
9 | - ✔️ Your video files stay on your computer
10 |
11 | ## Building
12 |
13 | Install the project with `yarn` and then run `yarn build`.
14 |
15 | ## Multi-core ffmpeg.wasm
16 |
17 | To enable multi-core ffmpeg.wasm, SharedArrayBuffer needs to be available and env variable `VITE_ENABLE_MT` needs to equal `1`.
18 |
19 | This is a work-in-progress feature and it may not work as expected.
20 |
21 | ### Nginx:
22 |
23 | ```nginx
24 | server {
25 | # ...
26 | add_header Cross-Origin-Embedder-Policy 'require-corp';
27 | add_header Cross-Origin-Opener-Policy 'same-origin';
28 | # ...
29 | }
30 |
31 | ```
32 |
33 | See: https://developer.chrome.com/blog/enabling-shared-array-buffer/
34 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
14 |
15 |
16 |
17 |
21 |
22 |
23 |
24 |
25 |
29 |
30 | crop.mov
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "crop",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "start": "vite --force",
8 | "build": "tsc && vite build",
9 | "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
10 | "preview": "vite preview"
11 | },
12 | "husky": {
13 | "hooks": {
14 | "pre-commit": "lint-staged"
15 | }
16 | },
17 | "lint-staged": {
18 | "src/**/*.{js,jsx,ts,tsx,json,css,scss,md}": [
19 | "prettier --write"
20 | ],
21 | "__tests__/**/*.{js,jsx,ts,tsx,json,css,scss,md}": [
22 | "prettier --write"
23 | ]
24 | },
25 | "dependencies": {
26 | "@ffmpeg/ffmpeg": "^0.12.15",
27 | "@ffmpeg/util": "^0.12.2",
28 | "clsx": "^2.0.0",
29 | "idb-keyval": "^6.2.1",
30 | "mobx": "^6.10.2",
31 | "mobx-react-lite": "^4.0.4",
32 | "react": "^19.0.0",
33 | "react-dom": "^19.0.0",
34 | "react-icons": "^5.4.0",
35 | "react-use-pointer-drag": "^0.1.2"
36 | },
37 | "devDependencies": {
38 | "@types/react": "^18.2.15",
39 | "@types/react-dom": "^18.2.7",
40 | "@typescript-eslint/eslint-plugin": "^6.0.0",
41 | "@typescript-eslint/parser": "^6.0.0",
42 | "@vitejs/plugin-react": "^4.3.4",
43 | "eslint": "^8.45.0",
44 | "eslint-plugin-react-hooks": "^4.6.0",
45 | "eslint-plugin-react-refresh": "^0.4.3",
46 | "husky": "^8.0.3",
47 | "lint-staged": "^14.0.1",
48 | "prettier": "^3.0.3",
49 | "sass-embedded": "^1.83.4",
50 | "typescript": "^5.7.3",
51 | "vite": "^6.0.11"
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { observer } from 'mobx-react-lite';
3 | import { runInAction } from 'mobx';
4 |
5 | import './index.scss';
6 | import { Steps } from './components/Steps';
7 | import { SelectFile } from './steps/SelectFile';
8 | import { mainStore } from './stores/main';
9 | import { Crop } from './steps/Crop';
10 | import { Render } from './steps/Render';
11 |
12 | export const App: React.FC = observer(() => {
13 | const step = mainStore.step;
14 |
15 | return (
16 |
17 |
crop.mov
18 | {
21 | runInAction(() => {
22 | mainStore.step = step;
23 | });
24 | }}
25 | steps={['Select file', 'Crop', 'Render']}
26 | />
27 |
28 | {step === 0 && }
29 | {step === 1 && }
30 | {step === 2 && }
31 |
32 | );
33 | });
34 |
--------------------------------------------------------------------------------
/src/components/PrepareProgress.module.scss:
--------------------------------------------------------------------------------
1 | .progress {
2 | min-width: 0;
3 | width: 100%;
4 | max-width: 500px;
5 |
6 | progress {
7 | width: 100%;
8 | }
9 |
10 | pre {
11 | max-width: 100%;
12 | max-height: 500px;
13 | overflow-wrap: break-word;
14 | word-wrap: break-word;
15 | white-space: pre-wrap;
16 | overflow-y: auto;
17 | overflow-x: hidden;
18 | }
19 |
20 | video {
21 | max-width: 100%;
22 | }
23 | }
24 |
25 | .info,
26 | .actions {
27 | margin-bottom: 0.25rem;
28 | }
29 |
30 | .actions {
31 | display: flex;
32 | align-items: center;
33 | }
34 |
--------------------------------------------------------------------------------
/src/components/PrepareProgress.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { observer } from 'mobx-react-lite';
3 | import { runInAction } from 'mobx';
4 |
5 | import styles from './PrepareProgress.module.scss';
6 | import { mainStore } from '../stores/main';
7 |
8 | export const PrepareProgress: React.FC = observer(() => {
9 | const { ffmpeg, fileLoading } = mainStore;
10 |
11 | if (!fileLoading) {
12 | return null;
13 | }
14 |
15 | if (!ffmpeg.loaded) {
16 | return (
17 |
18 |
19 | {
21 | runInAction(() => {
22 | ffmpeg.onLoadCallback = undefined;
23 | mainStore.fileLoading = false;
24 | });
25 | }}
26 | >
27 | Cancel
28 |
29 |
30 |
31 |
Preparing video preview - loading FFMpeg
32 |
33 |
34 |
35 | );
36 | }
37 |
38 | if (ffmpeg.running) {
39 | return (
40 |
41 |
42 | {
44 | runInAction(() => {
45 | ffmpeg.cancel();
46 | mainStore.fileLoading = false;
47 | });
48 | }}
49 | >
50 | Cancel
51 |
52 |
53 |
54 |
Preparing video preview - remuxing
55 |
56 |
{ffmpeg.output}
57 |
58 |
59 | );
60 | }
61 |
62 | return Loading...
;
63 | });
64 |
--------------------------------------------------------------------------------
/src/components/Slider.module.scss:
--------------------------------------------------------------------------------
1 | .slider {
2 | padding: 1rem 0;
3 |
4 | .track {
5 | background: var(--color-interactive-dark);
6 | position: relative;
7 | height: 0.5rem;
8 | border-radius: 5px;
9 | }
10 |
11 | .thumb {
12 | position: absolute;
13 | border-radius: 5px;
14 | top: -0.75rem;
15 | bottom: -0.75rem;
16 | height: 2rem;
17 | width: 0.75rem;
18 | background: var(--color-interactive-hover);
19 | transform: translate(-50%, 0);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/components/Slider.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { IPointerDragData, usePointerDrag } from 'react-use-pointer-drag';
3 |
4 | import styles from './Slider.module.scss';
5 | import { clamp } from '../helpers';
6 |
7 | interface SliderProps {
8 | min: number;
9 | max: number;
10 | value: number;
11 | onChange?(value: number): void;
12 | }
13 |
14 | export const Slider: React.FC = ({
15 | min,
16 | max,
17 | value,
18 | onChange,
19 | }) => {
20 | const trackRef = useRef(null);
21 |
22 | const handleEvent = ({ x }: IPointerDragData) => {
23 | const rect = trackRef.current!.getBoundingClientRect();
24 | const value = clamp(
25 | ((x - rect.left) / rect.width) * (max - min) + min,
26 | min,
27 | max,
28 | );
29 | onChange?.(value);
30 | };
31 |
32 | const { dragProps } = usePointerDrag({
33 | preventDefault: true,
34 | stopPropagation: true,
35 | onClick: handleEvent,
36 | onMove: handleEvent,
37 | });
38 | return (
39 |
49 | );
50 | };
51 |
--------------------------------------------------------------------------------
/src/components/Steps.module.scss:
--------------------------------------------------------------------------------
1 | .steps {
2 | counter-reset: steps;
3 | list-style-type: none;
4 | display: grid;
5 | padding: 0;
6 | position: relative;
7 | grid-template-columns: 1fr 1fr 1fr;
8 |
9 | &:before {
10 | content: '';
11 | display: block;
12 | position: absolute;
13 | border-top: 1px solid var(--color-fg-soft);
14 | left: 0;
15 | top: 0.75rem;
16 | right: 0;
17 | bottom: 0;
18 | }
19 |
20 | li {
21 | counter-increment: steps;
22 | position: relative;
23 | padding: 1rem;
24 | padding-top: 1.5rem;
25 | cursor: pointer;
26 | text-align: center;
27 | color: var(--color-fg-soft);
28 | font-size: 0.9rem;
29 |
30 | &:before {
31 | content: '';
32 | display: block;
33 | position: absolute;
34 | left: 50%;
35 | width: 2rem;
36 | transform: translate(-50%);
37 | top: 0;
38 | height: 1.5rem;
39 | background: var(--color-bg);
40 | }
41 |
42 | &:first-child {
43 | &:before {
44 | left: 0;
45 | width: calc(50% + 1rem);
46 | transform: unset;
47 | }
48 | }
49 |
50 | &:last-child {
51 | &:before {
52 | left: unset;
53 | right: 0;
54 | width: calc(50% + 1rem);
55 | transform: unset;
56 | }
57 | }
58 |
59 | &:after {
60 | width: 1.2rem;
61 | height: 1.2rem;
62 | font-size: 0.8rem;
63 | padding: 0.5rem 0.3rem;
64 | box-sizing: border-box;
65 |
66 | position: absolute;
67 | top: 0.25rem;
68 | left: 50%;
69 | transform: translate(-50%, 0);
70 | border: 1px solid var(--color-fg);
71 | border-radius: 100%;
72 | content: counter(steps);
73 | line-height: 0;
74 | background: var(--color-bg);
75 | }
76 |
77 | &.current {
78 | &:after {
79 | background: var(--color-fg-soft);
80 | color: var(--color-bg);
81 | }
82 | }
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/src/components/Steps.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import clsx from 'clsx';
3 |
4 | import styles from './Steps.module.scss';
5 |
6 | interface StepsProps {
7 | current: number;
8 | steps: string[];
9 | onChange?: (step: number) => void;
10 | }
11 |
12 | export const Steps: React.FC = ({ current, steps, onChange }) => {
13 | return (
14 |
15 | {steps.map((step, i) => (
16 | {
20 | onChange?.(i);
21 | }}
22 | >
23 | {step}
24 |
25 | ))}
26 |
27 | );
28 | };
29 |
--------------------------------------------------------------------------------
/src/components/VideoCrop.module.scss:
--------------------------------------------------------------------------------
1 | $handle-width: 3px;
2 | $handle-size: 2rem;
3 | $box-width: 2px;
4 |
5 | $handle-offset: -$handle-width - $box-width;
6 |
7 | .videoPreview {
8 | box-shadow: 0 0 20px 5px rgba(0, 0, 0, 0.3);
9 | overflow: hidden;
10 | width: 100%;
11 | }
12 |
13 | .crop {
14 | position: relative;
15 | font-size: 0;
16 |
17 | .box {
18 | border: $box-width solid white;
19 | position: absolute;
20 | inset: 0;
21 | touch-action: none;
22 |
23 | .dimensions {
24 | position: absolute;
25 | top: -2rem;
26 | right: 0;
27 | z-index: 9999;
28 | color: white;
29 | font-size: 0.9rem;
30 | background: rgba(0, 0, 0, 0.3);
31 | padding: 0.25rem;
32 | }
33 |
34 | svg {
35 | position: absolute;
36 | inset: 0;
37 | width: 100%;
38 | height: 100%;
39 | cursor: move;
40 | touch-action: manipulation;
41 |
42 | line {
43 | stroke: white;
44 | stroke-width: $box-width;
45 | }
46 | }
47 | }
48 |
49 | .handles {
50 | & > div {
51 | position: absolute;
52 | width: $handle-size;
53 | height: $handle-size;
54 | border-color: white;
55 | border-width: $handle-width;
56 | touch-action: manipulation;
57 | }
58 | }
59 |
60 | .handle-nw,
61 | .handle-n,
62 | .handle-ne {
63 | top: $handle-offset;
64 | border-top-style: solid;
65 | }
66 |
67 | .handle-nw,
68 | .handle-w,
69 | .handle-sw {
70 | left: $handle-offset;
71 | border-left-style: solid;
72 | }
73 |
74 | .handle-ne,
75 | .handle-e,
76 | .handle-se {
77 | right: $handle-offset;
78 | border-right-style: solid;
79 | }
80 |
81 | .handle-sw,
82 | .handle-s,
83 | .handle-se {
84 | bottom: $handle-offset;
85 | border-bottom-style: solid;
86 | }
87 |
88 | .handle-n,
89 | .handle-s {
90 | left: 50%;
91 | transform: translate(-50%, 0);
92 | }
93 |
94 | .handle-e,
95 | .handle-w {
96 | top: 50%;
97 | transform: translate(0, -50%);
98 | }
99 | }
100 |
101 | .options {
102 | margin-bottom: 0.25rem;
103 | }
104 |
--------------------------------------------------------------------------------
/src/components/VideoCrop.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef, useState } from 'react';
2 | import { usePointerDrag } from 'react-use-pointer-drag';
3 |
4 | import styles from './VideoCrop.module.scss';
5 | import { clamp } from '../helpers';
6 | import { Area, Ratio, VideoTransform } from '../types';
7 |
8 | const MIN_CROP_SIZE = 100;
9 |
10 | interface VideoCropProps {
11 | onChange: (area: Area) => void;
12 | transform: VideoTransform;
13 | video: HTMLVideoElement;
14 | }
15 |
16 | function ensureRatio(ratio: Ratio, area: Area): Area {
17 | const newArea: Area = [...area];
18 |
19 | if (ratio > 1) {
20 | newArea[3] = newArea[2] / ratio;
21 | } else {
22 | newArea[2] = newArea[3] * ratio;
23 | }
24 |
25 | return newArea;
26 | }
27 |
28 | const handleDirections = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
29 |
30 | export const VideoCrop: React.FC = ({
31 | transform,
32 | onChange,
33 | video,
34 | }) => {
35 | const { area = [0, 0, video.videoWidth, video.videoHeight] } = transform;
36 | const [ratioName, setRatioName] = useState('free');
37 | const [ratio, setRatio] = useState();
38 | const canvasPreviewRef = useRef(null);
39 | const transformRef = useRef(transform);
40 |
41 | useEffect(() => {
42 | transformRef.current = transform;
43 | }, [transform]);
44 |
45 | const { dragProps } = usePointerDrag<{
46 | dirX: number;
47 | dirY: number;
48 | area: Area;
49 | }>({
50 | preventDefault: true,
51 | stopPropagation: true,
52 | onMove: ({ x, y, deltaX, deltaY, state: { dirX, dirY, area } }) => {
53 | const rect = canvasPreviewRef.current!.getBoundingClientRect();
54 |
55 | const newArea: Area = [...area];
56 |
57 | if (dirX === 0 && dirY === 0) {
58 | newArea[0] = clamp(
59 | area[0] + deltaX / (rect.width / video.videoWidth),
60 | 0,
61 | video.videoWidth - area[2],
62 | );
63 | newArea[1] = clamp(
64 | area[1] + deltaY / (rect.height / video.videoHeight),
65 | 0,
66 | video.videoHeight - area[3],
67 | );
68 | } else {
69 | const relativeX = clamp(
70 | (x - rect.left) / (rect.width / video.videoWidth),
71 | 0,
72 | video.videoWidth,
73 | );
74 | const relativeY = clamp(
75 | (y - rect.top) / (rect.height / video.videoHeight),
76 | 0,
77 | video.videoHeight,
78 | );
79 |
80 | const endX = area[0] + area[2];
81 | const endY = area[1] + area[3];
82 |
83 | if (ratio) {
84 | const dX = dirX === -1 ? area[0] - relativeX : relativeX - endX;
85 | const dY = dirY === -1 ? area[1] - relativeY : relativeY - endY;
86 |
87 | const cX = endX - area[2] / 2;
88 | const cY = endY - area[3] / 2;
89 |
90 | const newMaxWidth = area[2] + dX;
91 | const newMaxHeight = area[3] + dY;
92 |
93 | let newWidth = MIN_CROP_SIZE;
94 |
95 | if (dirX === 0) {
96 | newWidth = Math.min(
97 | cX * 2,
98 | (video.videoWidth - cX) * 2,
99 | newMaxHeight * ratio,
100 | );
101 | } else if (dirY === 0) {
102 | newWidth = Math.min(
103 | cY * 2 * ratio,
104 | (video.videoHeight - cY) * 2 * ratio,
105 | newMaxWidth,
106 | );
107 | } else {
108 | const maxWidth = dirX === -1 ? endX : video.videoWidth - area[0];
109 | const maxHeight = dirY === -1 ? endY : video.videoHeight - area[1];
110 |
111 | newWidth = Math.max(
112 | Math.min(maxWidth, newMaxHeight * ratio),
113 | Math.min(newMaxWidth, maxHeight * ratio),
114 | );
115 | }
116 |
117 | newWidth = Math.max(
118 | MIN_CROP_SIZE / (dirY === 0 ? 1 : ratio),
119 | newWidth,
120 | );
121 | const newHeight = newWidth / ratio;
122 |
123 | newArea[0] -= (area[2] - newWidth) * (0.5 * dirX - 0.5);
124 | newArea[1] -= (area[3] - newHeight) * (0.5 * dirY - 0.5);
125 | newArea[2] = newWidth;
126 | newArea[3] = newHeight;
127 | } else {
128 | if (dirY === -1) {
129 | newArea[1] = Math.min(relativeY, Math.max(endY - MIN_CROP_SIZE, 0));
130 | newArea[3] = endY - newArea[1];
131 | } else if (dirY === 1) {
132 | newArea[3] = Math.max(
133 | relativeY - newArea[1],
134 | Math.min(MIN_CROP_SIZE, video.videoHeight),
135 | );
136 | }
137 |
138 | if (dirX === -1) {
139 | newArea[0] = Math.min(relativeX, Math.max(endX - MIN_CROP_SIZE, 0));
140 | newArea[2] = endX - newArea[0];
141 | } else if (dirX === 1) {
142 | newArea[2] = Math.max(
143 | relativeX - newArea[0],
144 | Math.min(MIN_CROP_SIZE, video.videoWidth),
145 | );
146 | }
147 | }
148 | }
149 |
150 | onChange(newArea);
151 | },
152 | });
153 |
154 | useEffect(() => {
155 | let updating = true;
156 |
157 | const canvas = canvasPreviewRef.current;
158 | const context = canvas?.getContext('2d');
159 |
160 | const CANVAS_FRAME_TIME = 1000 / 30;
161 | let time = Date.now();
162 |
163 | const update = () => {
164 | if (!updating) {
165 | return;
166 | }
167 |
168 | const now = Date.now();
169 | const shouldDraw =
170 | now - time > CANVAS_FRAME_TIME && video.readyState === 4;
171 |
172 | if (canvas && context && shouldDraw) {
173 | time = now;
174 | context.reset();
175 | const transform = transformRef.current;
176 | context.clearRect(0, 0, canvas.width, canvas.height);
177 |
178 | if (transform.flipH) {
179 | context.translate(canvas.width, 0);
180 | context.scale(-1, 1);
181 | }
182 |
183 | if (transform.flipV) {
184 | context.translate(0, canvas.height);
185 | context.scale(1, -1);
186 | }
187 |
188 | const area = transform.area!;
189 |
190 | if (!area) {
191 | context.drawImage(video, 0, 0, canvas.width, canvas.height);
192 | } else {
193 | context.filter = 'brightness(0.25)';
194 | context.drawImage(video, 0, 0, canvas.width, canvas.height);
195 |
196 | const x =
197 | (transform.flipH ? video.videoWidth - area[2] - area[0] : area[0]) *
198 | (video.videoWidth / canvas.width);
199 | const y =
200 | (transform.flipV
201 | ? video.videoHeight - area[3] - area[1]
202 | : area[1]) *
203 | (video.videoHeight / canvas.height);
204 | const w = area[2] * (video.videoWidth / canvas.width);
205 | const h = area[3] * (video.videoHeight / canvas.height);
206 |
207 | context.filter = 'none';
208 | context.drawImage(video, x, y, w, h, x, y, w, h);
209 | }
210 | }
211 |
212 | requestAnimationFrame(update);
213 | };
214 |
215 | requestAnimationFrame(update);
216 |
217 | return () => {
218 | updating = false;
219 | };
220 | }, [video]);
221 |
222 | const cropWidth = Math.trunc(area[2] / 2) * 2;
223 | const cropHeight = Math.trunc(area[3] / 2) * 2;
224 |
225 | return (
226 |
227 |
228 |
229 | {
232 | const name = e.target.value;
233 | setRatioName(name);
234 |
235 | if (name !== 'free') {
236 | const split = name.split(':');
237 | const newRatio = +split[0] / +split[1];
238 | setRatio(newRatio);
239 |
240 | const ensuredArea = ensureRatio(newRatio, area);
241 | if (ensuredArea) {
242 | onChange(ensuredArea);
243 | }
244 | } else {
245 | setRatio(undefined);
246 | }
247 | }}
248 | >
249 | Free
250 | 1:1
251 | 2:3
252 | 3:2
253 | 3:4
254 | 4:3
255 | 9:16
256 | 16:9
257 |
258 |
259 |
260 |
261 |
267 |
276 |
277 | {cropWidth}px x {cropHeight}px
278 |
279 |
285 |
292 |
299 |
306 |
313 |
314 |
315 | {handleDirections.map(direction => (
316 |
334 | ))}
335 |
336 |
337 |
338 |
339 | );
340 | };
341 |
--------------------------------------------------------------------------------
/src/components/VideoTrim.module.scss:
--------------------------------------------------------------------------------
1 | .timeline {
2 | background: var(--color-interactive-dark);
3 | height: 2rem;
4 | flex: 1;
5 |
6 | position: relative;
7 | box-shadow: 0 0 20px 5px rgba(0, 0, 0, 0.2);
8 | touch-action: none;
9 |
10 | .range {
11 | position: absolute;
12 | top: 0;
13 | left: 0;
14 | right: 0;
15 | bottom: 0;
16 | background: var(--color-interactive);
17 | cursor: move;
18 | touch-action: manipulation;
19 | }
20 |
21 | .current,
22 | .handleLeft,
23 | .handleRight {
24 | position: absolute;
25 |
26 | &:after {
27 | display: none;
28 | position: absolute;
29 | bottom: -1.75rem;
30 | content: attr(data-time);
31 | z-index: 9999;
32 | color: white;
33 | font-size: 0.9rem;
34 | background: rgba(0, 0, 0, 0.3);
35 | padding: 0.25rem;
36 | font-size: 0.9rem;
37 | }
38 |
39 | &.active:after {
40 | display: block;
41 | }
42 | }
43 |
44 | .handleLeft,
45 | .handleRight {
46 | position: absolute;
47 | top: -3px;
48 | bottom: -3px;
49 | width: 1rem;
50 | border: 3px solid white;
51 | touch-action: manipulation;
52 | }
53 |
54 | .current {
55 | border-left: 3px solid white;
56 | touch-action: manipulation;
57 | top: 0;
58 | bottom: 0;
59 | transform: translate(-1.5px, 0);
60 | cursor: ew-resize;
61 |
62 | &.active:after {
63 | transform: translate(-50%, 0);
64 | }
65 | }
66 |
67 | .handleLeft {
68 | left: -3px;
69 | border-right-style: none;
70 | cursor: w-resize;
71 |
72 | &:after {
73 | left: 0;
74 | }
75 | }
76 |
77 | .handleRight {
78 | right: -3px;
79 | border-left-style: none;
80 | cursor: e-resize;
81 |
82 | &:after {
83 | right: 0;
84 | }
85 | }
86 | }
87 |
88 | .controls {
89 | display: flex;
90 | margin-bottom: 0.25rem;
91 | margin-top: 0.25rem;
92 | }
93 |
--------------------------------------------------------------------------------
/src/components/VideoTrim.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef, useState } from 'react';
2 | import { BsPlay, BsPause } from 'react-icons/bs';
3 | import { usePointerDrag } from 'react-use-pointer-drag';
4 | import clsx from 'clsx';
5 |
6 | import styles from './VideoTrim.module.scss';
7 | import { clamp, humanTime } from '../helpers';
8 | import { Time } from '../types';
9 |
10 | interface VideoTrimProps {
11 | onChange: (time: Time) => void;
12 | time?: Time;
13 | video: HTMLVideoElement;
14 | }
15 |
16 | const MIN_DURATION = 1;
17 | const DURATION_SNAP_FACTOR = 0.02;
18 |
19 | export const VideoTrim: React.FC = ({
20 | onChange,
21 | video,
22 | time = [0, video.duration],
23 | }) => {
24 | const [currentTime, setCurrentTime] = useState(video.currentTime);
25 | const [playing, setPlaying] = useState(!video.paused);
26 | const ignoreTimeUpdatesRef = useRef(false);
27 |
28 | const timelineRef = useRef(null);
29 | const { dragProps, dragState } = usePointerDrag<{
30 | direction: string;
31 | time?: Time;
32 | currentTime?: number;
33 | paused: boolean;
34 | }>({
35 | stopPropagation: true,
36 | pointerDownStopPropagation: true,
37 | onStart: () => {
38 | video.pause();
39 | },
40 | onClick: ({ state, x }) => {
41 | if (state.direction !== 'move') {
42 | return;
43 | }
44 |
45 | const rect = timelineRef.current!.getBoundingClientRect();
46 | const relativeX =
47 | clamp((x - rect.left) / rect.width, 0, 1) * video.duration;
48 | const currentTime = clamp(relativeX, state.time![0], state.time![1]);
49 | setCurrentTime(currentTime);
50 | video.currentTime = currentTime;
51 | },
52 | onMove: ({ x, deltaX, state }) => {
53 | ignoreTimeUpdatesRef.current = true;
54 | const rect = timelineRef.current!.getBoundingClientRect();
55 |
56 | let relativeX =
57 | clamp((x - rect.left) / rect.width, 0, 1) * video.duration;
58 | const newTime: Time = [...time];
59 |
60 | switch (state.direction) {
61 | case 'move':
62 | {
63 | relativeX = clamp(
64 | (deltaX / rect.width) * video.duration,
65 | -1 * state.time![0],
66 | video.duration - state.time![1],
67 | );
68 | newTime[0] = state.time![0] + relativeX;
69 | newTime[1] = state.time![1] + relativeX;
70 |
71 | const currentTime = clamp(
72 | video.currentTime,
73 | newTime[0],
74 | newTime[1],
75 | );
76 | setCurrentTime(currentTime);
77 | video.currentTime = currentTime;
78 | }
79 | break;
80 | case 'left':
81 | newTime[0] = Math.min(
82 | relativeX,
83 | Math.max(newTime[1] - MIN_DURATION, 0),
84 | );
85 | if (
86 | Math.abs(newTime[0] - currentTime) <=
87 | video.duration * DURATION_SNAP_FACTOR
88 | ) {
89 | newTime[0] = currentTime;
90 | }
91 |
92 | video.currentTime = newTime[0] + 0.01;
93 | break;
94 | case 'right':
95 | newTime[1] = Math.max(
96 | relativeX,
97 | Math.min(newTime[0] + MIN_DURATION, video.duration),
98 | );
99 | if (
100 | Math.abs(newTime[1] - currentTime) <=
101 | video.duration * DURATION_SNAP_FACTOR
102 | ) {
103 | newTime[1] = currentTime;
104 | }
105 |
106 | video.currentTime = newTime[1];
107 | break;
108 | case 'seek':
109 | {
110 | const currentTime = clamp(
111 | relativeX,
112 | state.time![0],
113 | state.time![1],
114 | );
115 | setCurrentTime(currentTime);
116 | video.currentTime = currentTime;
117 | }
118 | break;
119 | }
120 |
121 | onChange(newTime);
122 | },
123 | onEnd: ({ state }) => {
124 | ignoreTimeUpdatesRef.current = false;
125 | if (typeof state.currentTime !== 'undefined') {
126 | video.currentTime = state.currentTime;
127 | }
128 |
129 | if (!state.paused) {
130 | video.play();
131 | }
132 | },
133 | });
134 |
135 | useEffect(() => {
136 | const update = () => {
137 | setPlaying(!video.paused);
138 |
139 | if (!ignoreTimeUpdatesRef.current) {
140 | setCurrentTime(video.currentTime);
141 | }
142 | };
143 |
144 | video.addEventListener('pause', update);
145 | video.addEventListener('playing', update);
146 | video.addEventListener('play', update);
147 | video.addEventListener('timeupdate', update);
148 |
149 | return () => {
150 | video.removeEventListener('pause', update);
151 | video.removeEventListener('playing', update);
152 | video.removeEventListener('play', update);
153 | video.removeEventListener('timeupdate', update);
154 | };
155 | }, [video, setPlaying]);
156 |
157 | return (
158 | <>
159 |
160 |
{
162 | if (video.paused) {
163 | video.play();
164 | } else {
165 | video.pause();
166 | }
167 | }}
168 | >
169 | {playing ? : }
170 |
171 |
222 |
223 | >
224 | );
225 | };
226 |
--------------------------------------------------------------------------------
/src/helpers.ts:
--------------------------------------------------------------------------------
1 | export function humanTime(time?: number): string {
2 | if (typeof time === 'undefined') {
3 | return '';
4 | }
5 |
6 | const minutes = Math.floor(time / 60);
7 | const seconds = Math.floor(time % 60);
8 | const centiseconds = Math.floor((time * 100) % 100);
9 |
10 | return `${minutes}:${seconds.toString().padStart(2, '0')}.${centiseconds
11 | .toString()
12 | .padStart(2, '0')}`;
13 | }
14 |
15 | export function clamp(value: number, min: number, max: number) {
16 | return Math.min(Math.max(value, min), max);
17 | }
18 |
--------------------------------------------------------------------------------
/src/index.scss:
--------------------------------------------------------------------------------
1 | :root {
2 | --color-bg: #f1f1fa;
3 | --color-bg-soft: #d1d1e4;
4 | --color-fg: #222222;
5 | --color-fg-soft: #444444;
6 | --color-interactive-dark: #111111;
7 | --color-interactive: #33333a;
8 | --color-interactive-hover: #444444;
9 | }
10 |
11 | @media (prefers-color-scheme: dark) {
12 | :root {
13 | --color-bg: #11111a;
14 | --color-bg-soft: #23232a;
15 | --color-fg: #ffffff;
16 | --color-fg-soft: #eeeeee;
17 | --color-interactive-dark: #29292a;
18 | --color-interactive: #33333a;
19 | --color-interactive-hover: #444444;
20 | }
21 | }
22 |
23 | body {
24 | font-family:
25 | system-ui,
26 | -apple-system,
27 | BlinkMacSystemFont,
28 | 'Segoe UI',
29 | Roboto,
30 | Oxygen,
31 | Ubuntu,
32 | Cantarell,
33 | 'Open Sans',
34 | 'Helvetica Neue',
35 | sans-serif;
36 | background: var(--color-bg);
37 | color: var(--color-fg);
38 | overflow-x: hidden;
39 | max-width: 100vw;
40 | padding: 0;
41 | margin: 0;
42 | }
43 |
44 | * {
45 | box-sizing: border-box;
46 | user-select: none;
47 | }
48 |
49 | .app {
50 | display: flex;
51 | flex-direction: column;
52 | align-items: center;
53 | margin: 1rem;
54 | }
55 |
56 | progress {
57 | background: rgba(0, 0, 0, 0.3);
58 | border: none;
59 | border-radius: 8px;
60 | -webkit-appearance: none;
61 | -moz-appearance: none;
62 | overflow: hidden;
63 | height: 6px;
64 | display: block;
65 | margin: 4px 0;
66 | width: 100%;
67 |
68 | &::-moz-progress-bar {
69 | background-color: var(--color-interactive-hover);
70 | }
71 |
72 | &::-webkit-progress-value {
73 | background-color: var(--color-interactive-hover);
74 | }
75 |
76 | &::-webkit-progress-bar {
77 | background: rgba(0, 0, 0, 0.3);
78 | border-radius: 8px;
79 | }
80 | }
81 |
82 | button,
83 | .button {
84 | display: inline-flex;
85 | align-items: center;
86 | text-decoration: none;
87 | background: var(--color-interactive);
88 | color: white;
89 | cursor: pointer;
90 | border: none;
91 | padding: 0.4rem 1rem;
92 | height: 2rem;
93 | margin-right: 0.25rem;
94 | font-size: 0.9rem;
95 |
96 | svg {
97 | font-size: 1.2rem;
98 | }
99 |
100 | svg:not(:last-child) {
101 | margin-right: 0.25rem;
102 | }
103 |
104 | &:hover {
105 | background: #444444;
106 | }
107 | }
108 |
109 | .select {
110 | display: inline-block;
111 | background: var(--color-interactive);
112 | padding: 0 0.25rem;
113 | }
114 |
115 | select {
116 | background: var(--color-interactive);
117 | color: white;
118 | border: none;
119 | outline: none !important;
120 | padding: 0.25rem 0;
121 | height: 2rem;
122 | }
123 |
--------------------------------------------------------------------------------
/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 |
4 | import { App } from './App.tsx';
5 |
6 | ReactDOM.createRoot(document.getElementById('root')!).render(
7 |
8 |
9 | ,
10 | );
11 |
--------------------------------------------------------------------------------
/src/steps/Crop.module.scss:
--------------------------------------------------------------------------------
1 | .controls {
2 | display: flex;
3 | align-items: center;
4 | justify-content: space-between;
5 |
6 | button:last-child {
7 | margin-right: 0;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/steps/Crop.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { observer } from 'mobx-react-lite';
3 | import { runInAction } from 'mobx';
4 | import {
5 | BsCheck,
6 | BsVolumeMute,
7 | BsSymmetryVertical,
8 | BsSymmetryHorizontal,
9 | BsVolumeUp,
10 | BsArrowCounterclockwise,
11 | } from 'react-icons/bs';
12 |
13 | import styles from './Crop.module.scss';
14 | import { mainStore } from '../stores/main';
15 | import { VideoCrop } from '../components/VideoCrop';
16 | import { VideoTrim } from '../components/VideoTrim';
17 |
18 | export const Crop: React.FC = observer(() => {
19 | const video = mainStore.video;
20 | if (!video) {
21 | return (
22 |
23 | No video selected.
24 |
25 | );
26 | }
27 |
28 | return (
29 |
30 |
31 |
32 | {
35 | runInAction(() => {
36 | const mute = !mainStore.transform.mute;
37 | mainStore.transform = {
38 | ...mainStore.transform,
39 | mute,
40 | };
41 | video.muted = mute;
42 | });
43 | }}
44 | >
45 | {mainStore.transform.mute ? : }
46 |
47 | {
50 | runInAction(() => {
51 | const { flipH, area } = mainStore.transform;
52 | mainStore.transform = {
53 | ...mainStore.transform,
54 | flipH: !flipH,
55 | area: area
56 | ? [
57 | video.videoWidth - area[2] - area[0],
58 | area[1],
59 | area[2],
60 | area[3],
61 | ]
62 | : undefined,
63 | };
64 | });
65 | }}
66 | >
67 |
68 |
69 | {
72 | runInAction(() => {
73 | const { flipV, area } = mainStore.transform;
74 | mainStore.transform = {
75 | ...mainStore.transform,
76 | flipV: !flipV,
77 | area: area
78 | ? [
79 | area[0],
80 | video.videoHeight - area[3] - area[1],
81 | area[2],
82 | area[3],
83 | ]
84 | : undefined,
85 | };
86 | });
87 | }}
88 | >
89 |
90 |
91 |
92 |
93 | {
95 | mainStore.reset();
96 | }}
97 | title="Reset"
98 | >
99 |
100 |
101 | {
103 | runInAction(() => {
104 | video.pause();
105 | mainStore.step = 2;
106 | });
107 | }}
108 | title="Confirm"
109 | >
110 |
111 |
112 |
113 |
114 |
{
118 | runInAction(() => {
119 | mainStore.transform = {
120 | ...mainStore.transform,
121 | time,
122 | };
123 | });
124 | }}
125 | />
126 |
130 | runInAction(() => {
131 | mainStore.transform = {
132 | ...mainStore.transform,
133 | area,
134 | };
135 | })
136 | }
137 | />
138 |
139 | );
140 | });
141 |
--------------------------------------------------------------------------------
/src/steps/Render.module.scss:
--------------------------------------------------------------------------------
1 | .step {
2 | min-width: 0;
3 | width: 100%;
4 | max-width: 500px;
5 |
6 | progress {
7 | width: 100%;
8 | }
9 |
10 | pre {
11 | max-width: 100%;
12 | max-height: 500px;
13 | overflow-wrap: break-word;
14 | word-wrap: break-word;
15 | white-space: pre-wrap;
16 | overflow-y: auto;
17 | overflow-x: hidden;
18 | }
19 |
20 | video {
21 | max-width: 100%;
22 | }
23 | }
24 |
25 | .info,
26 | .actions {
27 | margin-bottom: 0.25rem;
28 | }
29 |
30 | .actions {
31 | display: flex;
32 | align-items: center;
33 | }
34 |
--------------------------------------------------------------------------------
/src/steps/Render.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import clsx from 'clsx';
3 | import { observer } from 'mobx-react-lite';
4 | import { BsDownload } from 'react-icons/bs';
5 | import { runInAction } from 'mobx';
6 |
7 | import styles from './Render.module.scss';
8 | import { mainStore } from '../stores/main';
9 | import { Slider } from '../components/Slider';
10 |
11 | export const Render: React.FC = observer(() => {
12 | const [outputUrl, setOutputUrl] = useState();
13 | const [logVisible, setLogVisible] = useState(false);
14 |
15 | const { ffmpeg, video } = mainStore;
16 |
17 | if (!ffmpeg.loaded) {
18 | return (
19 |
20 |
FFmpeg is loading... please wait!
21 |
22 |
23 | );
24 | }
25 |
26 | if (!video) {
27 | return (
28 |
29 | No video selected.
30 |
31 | );
32 | }
33 |
34 | const { area, scale = 1 } = mainStore.transform;
35 | const x = Math.trunc((scale * (area ? area[0] : 0)) / 2) * 2;
36 | const y = Math.trunc((scale * (area ? area[1] : 0)) / 2) * 2;
37 | const width =
38 | Math.trunc((scale * (area ? area[2] : video.videoWidth)) / 2) * 2;
39 | const height =
40 | Math.trunc((scale * (area ? area[3] : video.videoHeight)) / 2) * 2;
41 |
42 | const crop = async () => {
43 | setOutputUrl(undefined);
44 |
45 | const args: string[] = [];
46 | const filters: string[] = [];
47 |
48 | const { flipH, flipV, area, time, mute } = mainStore.transform;
49 |
50 | if (flipH) {
51 | filters.push('hflip');
52 | }
53 |
54 | if (flipV) {
55 | filters.push('vflip');
56 | }
57 |
58 | if (scale !== 1) {
59 | filters.push(
60 | `scale=${Math.trunc((video.videoWidth * scale) / 2) * 2}:${
61 | Math.trunc((video.videoHeight * scale) / 2) * 2
62 | }`,
63 | );
64 | }
65 |
66 | if (
67 | area &&
68 | (area[0] !== 0 || area[1] !== 0 || area[2] !== 1 || area[3] !== 1)
69 | ) {
70 | filters.push(`crop=${width}:${height}:${x}:${y}`);
71 | }
72 |
73 | // Add filters
74 | if (filters.length > 0) {
75 | args.push('-vf', filters.join(', '));
76 | }
77 |
78 | if (time) {
79 | let start = 0;
80 | if (time[0] > 0) {
81 | start = time[0];
82 | args.push('-ss', `${start}`);
83 | }
84 |
85 | if (time[1] < video.duration) {
86 | args.push('-t', `${time[1] - start}`);
87 | }
88 | }
89 |
90 | args.push('-c:v', 'libx264');
91 | args.push('-preset', 'veryfast');
92 |
93 | if (mute) {
94 | args.push('-an');
95 | } else {
96 | args.push('-c:a', 'copy');
97 | }
98 |
99 | const newFile = await ffmpeg.exec(mainStore.file!, args);
100 | setOutputUrl(URL.createObjectURL(newFile));
101 | };
102 |
103 | return (
104 |
105 | {ffmpeg.running ? (
106 | <>
107 |
108 | ffmpeg.cancel()}>
109 | Cancel
110 |
111 |
112 |
113 |
Running
114 |
115 |
{ffmpeg.output}
116 |
117 | >
118 | ) : (
119 | <>
120 |
121 |
122 | Resolution: {width}px x {height}px
123 |
124 |
125 | Scale: {Math.round(scale * 100) / 100}
126 | {
131 | runInAction(() => {
132 | mainStore.transform.scale = value;
133 | });
134 | }}
135 | />
136 |
137 |
138 |
153 | >
154 | )}
155 | {outputUrl && !ffmpeg.running && (
156 |
157 |
158 |
159 | )}
160 | {!!ffmpeg.log && (
161 |
162 |
setLogVisible(value => !value)}>
163 | {logVisible ? 'Hide log' : 'Show log'}
164 |
165 | {logVisible &&
{ffmpeg.log} }
166 |
167 | )}
168 |
169 | );
170 | });
171 |
--------------------------------------------------------------------------------
/src/steps/SelectFile.module.scss:
--------------------------------------------------------------------------------
1 | label,
2 | .loading {
3 | position: relative;
4 | background: var(--color-interactive);
5 | color: white;
6 | border-radius: 5px;
7 | padding: 2rem;
8 | width: 20rem;
9 | text-align: center;
10 | display: block;
11 | box-shadow: 0 10px 20px -10px rgba(0, 0, 0, 0.1);
12 |
13 | &:hover {
14 | background: var(--color-interactive-hover);
15 | }
16 |
17 | input {
18 | cursor: pointer;
19 | position: absolute;
20 | inset: 0;
21 | display: block;
22 | background: transparent;
23 | opacity: 0.01;
24 | font-size: 0;
25 | }
26 | }
27 |
28 | .credits {
29 | width: 20rem;
30 | margin-top: 1rem;
31 | text-align: center;
32 | font-size: 0.9rem;
33 |
34 | ul {
35 | text-align: left;
36 | list-style-type: none;
37 | padding: 0;
38 | }
39 |
40 | div {
41 | margin-bottom: 1rem;
42 | }
43 |
44 | a {
45 | color: var(--color-fg);
46 |
47 | svg {
48 | font-size: 1.2rem;
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/steps/SelectFile.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { BsGithub } from 'react-icons/bs';
3 | import { observer } from 'mobx-react-lite';
4 |
5 | import styles from './SelectFile.module.scss';
6 | import { mainStore } from '../stores/main';
7 | import { PrepareProgress } from '../components/PrepareProgress';
8 |
9 | export const SelectFile: React.FC = observer(() => {
10 | return (
11 |
12 | {mainStore.fileLoading ? (
13 |
14 | ) : (
15 |
16 | {
20 | const file = e.target.files?.[0];
21 | if (file) {
22 | mainStore.loadVideo(file);
23 | }
24 | e.target.value = '';
25 | }}
26 | />
27 | Select a video file
28 |
29 | )}
30 |
31 |
32 | ✔️ Free and open source
33 | ✔️ Crop, trim, mirror or mute your video easily
34 | ✔️ No watermarks
35 | ✔️ Your video files stay on your computer
36 |
37 |
48 |
57 |
58 |
59 | );
60 | });
61 |
--------------------------------------------------------------------------------
/src/stores/main.ts:
--------------------------------------------------------------------------------
1 | import { FFmpeg } from '@ffmpeg/ffmpeg';
2 | import { makeAutoObservable, reaction, runInAction } from 'mobx';
3 | import { get, set } from 'idb-keyval';
4 |
5 | import { VideoTransform } from '../types';
6 |
7 | const canUseMT =
8 | import.meta.env.VITE_ENABLE_MT === '1' && 'SharedArrayBuffer' in window;
9 | const ffmpegVersion = '0.12.10';
10 | const ffmpegName = canUseMT ? 'core-mt' : 'core';
11 | const ffmpegWorker = canUseMT ? 'ffmpeg-core.worker.js' : undefined;
12 | const ffmpegBaseURL = `https://unpkg.com/@ffmpeg/${ffmpegName}@${ffmpegVersion}/dist/esm`;
13 |
14 | async function retrieveBlob(
15 | url: string,
16 | type: string,
17 | onProgress?: (progress: number) => void,
18 | ) {
19 | let buffer = await get(url);
20 | if (!buffer) {
21 | const response = await fetch(url);
22 | const reader = response.body?.getReader();
23 | if (!reader) {
24 | throw new Error(`Unable to fetch: ${url}`);
25 | }
26 |
27 | const contentLength = +response.headers.get('Content-Length')!;
28 | let receivedLength = 0;
29 | const chunks = [];
30 |
31 | // eslint-disable-next-line no-constant-condition
32 | while (true) {
33 | const { done, value } = await reader.read();
34 |
35 | if (done) {
36 | break;
37 | }
38 |
39 | chunks.push(value);
40 | receivedLength += value.length;
41 | onProgress?.(receivedLength / contentLength);
42 | }
43 |
44 | buffer = await new Blob(chunks).arrayBuffer();
45 |
46 | try {
47 | set(url, buffer);
48 | console.log(`Saved to IndexedDB: ${url}`);
49 | } catch {
50 | //
51 | }
52 | } else {
53 | console.log(`Loaded from IndexedDB: ${url}`);
54 | }
55 |
56 | const blob = new Blob([buffer], { type });
57 | return URL.createObjectURL(blob);
58 | }
59 |
60 | class FfmpegStore {
61 | loaded = false;
62 | loadProgress = 0;
63 | ffmpeg = new FFmpeg();
64 |
65 | running = false;
66 | execProgress = 0;
67 | outputUrl: string | undefined = undefined;
68 | output: string = '';
69 | log: string = '';
70 |
71 | onLoadCallback: (() => void) | undefined = undefined;
72 |
73 | constructor() {
74 | makeAutoObservable(this);
75 |
76 | this.ffmpeg.on('log', e => {
77 | console.log(e);
78 | runInAction(() => {
79 | this.output = e.message;
80 | this.log += `${e.message}\n`;
81 | });
82 | });
83 |
84 | this.ffmpeg.on('progress', e => {
85 | runInAction(() => {
86 | this.execProgress = e.progress;
87 | });
88 | });
89 | }
90 |
91 | async load() {
92 | // toBlobURL is used to bypass CORS issue, urls with the same
93 | // domain can be used directly.
94 | await this.ffmpeg.load({
95 | coreURL: await retrieveBlob(
96 | `${ffmpegBaseURL}/ffmpeg-core.js`,
97 | 'text/javascript',
98 | ),
99 | wasmURL: await retrieveBlob(
100 | `${ffmpegBaseURL}/ffmpeg-core.wasm`,
101 | 'application/wasm',
102 | progress => {
103 | runInAction(() => {
104 | this.loadProgress = progress;
105 | });
106 | },
107 | ),
108 | workerURL: ffmpegWorker
109 | ? await retrieveBlob(
110 | `${ffmpegBaseURL}/${ffmpegWorker}`,
111 | 'text/javascript',
112 | )
113 | : undefined,
114 | });
115 |
116 | runInAction(() => {
117 | this.loadProgress = 1;
118 | this.loaded = true;
119 |
120 | if (this.onLoadCallback) {
121 | this.onLoadCallback();
122 | this.onLoadCallback = undefined;
123 | }
124 | });
125 | }
126 |
127 | async exec(file: File, args: string[]) {
128 | this.running = true;
129 | this.execProgress = 0;
130 | this.output = '';
131 |
132 | try {
133 | await this.ffmpeg.writeFile(
134 | 'input',
135 | new Uint8Array(await file.arrayBuffer()),
136 | );
137 | await this.ffmpeg.exec(['-i', 'input', ...args, 'output.mp4']);
138 |
139 | const data = (await this.ffmpeg.readFile('output.mp4')) as Uint8Array;
140 | return new File([data.buffer], 'output.mp4', { type: 'video/mp4' });
141 | } finally {
142 | try {
143 | await this.ffmpeg.deleteFile('input');
144 | } catch {
145 | //
146 | }
147 | try {
148 | await this.ffmpeg.deleteFile('output.mp4');
149 | } catch {
150 | //
151 | }
152 |
153 | runInAction(() => {
154 | this.running = false;
155 | });
156 | }
157 | }
158 |
159 | cancel() {
160 | this.ffmpeg.terminate();
161 | this.load();
162 | }
163 | }
164 |
165 | class MainStore {
166 | file: File | undefined = undefined;
167 | fileLoading = false;
168 | transform: VideoTransform = {};
169 |
170 | ffmpeg = new FfmpegStore();
171 |
172 | step = 0;
173 | video: HTMLVideoElement | undefined = undefined;
174 |
175 | constructor() {
176 | makeAutoObservable(this);
177 | this.ffmpeg.load();
178 |
179 | reaction(
180 | () => [this.step],
181 | () => this.video?.pause(),
182 | );
183 | }
184 |
185 | reset() {
186 | this.transform = {};
187 |
188 | if (this.video) {
189 | this.video.pause();
190 | this.video.currentTime = 0.1;
191 | }
192 | }
193 |
194 | async loadVideo(file: File) {
195 | this.video?.pause();
196 | this.video = undefined;
197 | this.file = file;
198 | this.fileLoading = true;
199 | this.ffmpeg.onLoadCallback = undefined;
200 | this.reset();
201 |
202 | const video = document.createElement('video');
203 | if (!video.canPlayType(file.type)) {
204 | const remux = async () => {
205 | const newFile = await this.ffmpeg.exec(file, [
206 | '-c:v',
207 | 'copy',
208 | '-c:a',
209 | 'copy',
210 | ]);
211 | if (newFile) {
212 | this.loadVideo(newFile);
213 | } else {
214 | // TODO: Error handling.
215 | runInAction(() => {
216 | this.fileLoading = false;
217 | });
218 | }
219 | };
220 | if (this.ffmpeg.loaded) {
221 | remux();
222 | } else {
223 | this.ffmpeg.onLoadCallback = remux;
224 | }
225 | return;
226 | }
227 |
228 | video.setAttribute('playsinline', '');
229 | video.preload = 'metadata';
230 | video.autoplay = false;
231 |
232 | // Required when using a Service Worker on iOS Safari.
233 | video.crossOrigin = 'anonymous';
234 |
235 | video.addEventListener('loadedmetadata', () => {
236 | runInAction(() => {
237 | video.currentTime = 0.01;
238 | this.video = video;
239 | });
240 | });
241 |
242 | video.addEventListener('canplay', () => {
243 | if (this.fileLoading) {
244 | this.fileLoading = false;
245 | this.step = 1;
246 | }
247 | });
248 |
249 | video.addEventListener('ended', () => {
250 | const start = this.transform.time?.[0] || 0;
251 | video.currentTime = start;
252 | });
253 |
254 | video.addEventListener('timeupdate', () => {
255 | const start = this.transform.time?.[0] || 0;
256 | const end = this.transform.time?.[1] || video.duration;
257 |
258 | if (video.currentTime > end) {
259 | video.currentTime = start;
260 | } else if (video.currentTime < start - 1) {
261 | video.currentTime = start;
262 | }
263 | });
264 |
265 | video.src = URL.createObjectURL(file);
266 | }
267 | }
268 |
269 | export const mainStore = new MainStore();
270 |
--------------------------------------------------------------------------------
/src/types.ts:
--------------------------------------------------------------------------------
1 | export type Time = [start: number, end: number];
2 | export type Area = [x: number, y: number, width: number, height: number];
3 |
4 | export interface VideoTransform {
5 | time?: Time;
6 | area?: Area;
7 | mute?: boolean;
8 | flipH?: boolean;
9 | flipV?: boolean;
10 | scale?: number;
11 | }
12 |
13 | /**
14 | * Width / height
15 | */
16 | export type Ratio = number;
17 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "noEmit": true,
15 | "jsx": "react-jsx",
16 |
17 | /* Linting */
18 | "strict": true,
19 | "noUnusedLocals": true,
20 | "noUnusedParameters": true,
21 | "noFallthroughCasesInSwitch": true
22 | },
23 | "include": ["src"],
24 | "references": [{ "path": "./tsconfig.node.json" }]
25 | }
26 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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(({ mode }) => ({
6 | build: {
7 | assetsInlineLimit: 0,
8 | },
9 | plugins: [
10 | react(),
11 | {
12 | name: 'configure-sharedarraybuffer',
13 | configureServer: server => {
14 | server.middlewares.use((_req, res, next) => {
15 | res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
16 | res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
17 | next();
18 | });
19 | },
20 | },
21 | ],
22 | optimizeDeps: {
23 | exclude: ['@ffmpeg/ffmpeg'],
24 | },
25 | resolve:
26 | mode === 'production'
27 | ? {
28 | // Enables MobX production build
29 | mainFields: ['jsnext:main', 'module', 'main'],
30 | }
31 | : undefined,
32 | }));
33 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@aashutoshrathi/word-wrap@^1.2.3":
6 | version "1.2.6"
7 | resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
9 |
10 | "@ampproject/remapping@^2.2.0":
11 | version "2.2.1"
12 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
13 | integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
14 | dependencies:
15 | "@jridgewell/gen-mapping" "^0.3.0"
16 | "@jridgewell/trace-mapping" "^0.3.9"
17 |
18 | "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.2":
19 | version "7.26.2"
20 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
21 | integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
22 | dependencies:
23 | "@babel/helper-validator-identifier" "^7.25.9"
24 | js-tokens "^4.0.0"
25 | picocolors "^1.0.0"
26 |
27 | "@babel/compat-data@^7.26.5":
28 | version "7.26.5"
29 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.5.tgz#df93ac37f4417854130e21d72c66ff3d4b897fc7"
30 | integrity sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==
31 |
32 | "@babel/core@^7.26.0":
33 | version "7.26.7"
34 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.7.tgz#0439347a183b97534d52811144d763a17f9d2b24"
35 | integrity sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==
36 | dependencies:
37 | "@ampproject/remapping" "^2.2.0"
38 | "@babel/code-frame" "^7.26.2"
39 | "@babel/generator" "^7.26.5"
40 | "@babel/helper-compilation-targets" "^7.26.5"
41 | "@babel/helper-module-transforms" "^7.26.0"
42 | "@babel/helpers" "^7.26.7"
43 | "@babel/parser" "^7.26.7"
44 | "@babel/template" "^7.25.9"
45 | "@babel/traverse" "^7.26.7"
46 | "@babel/types" "^7.26.7"
47 | convert-source-map "^2.0.0"
48 | debug "^4.1.0"
49 | gensync "^1.0.0-beta.2"
50 | json5 "^2.2.3"
51 | semver "^6.3.1"
52 |
53 | "@babel/generator@^7.26.5":
54 | version "7.26.5"
55 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458"
56 | integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==
57 | dependencies:
58 | "@babel/parser" "^7.26.5"
59 | "@babel/types" "^7.26.5"
60 | "@jridgewell/gen-mapping" "^0.3.5"
61 | "@jridgewell/trace-mapping" "^0.3.25"
62 | jsesc "^3.0.2"
63 |
64 | "@babel/helper-compilation-targets@^7.26.5":
65 | version "7.26.5"
66 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8"
67 | integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==
68 | dependencies:
69 | "@babel/compat-data" "^7.26.5"
70 | "@babel/helper-validator-option" "^7.25.9"
71 | browserslist "^4.24.0"
72 | lru-cache "^5.1.1"
73 | semver "^6.3.1"
74 |
75 | "@babel/helper-module-imports@^7.25.9":
76 | version "7.25.9"
77 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
78 | integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
79 | dependencies:
80 | "@babel/traverse" "^7.25.9"
81 | "@babel/types" "^7.25.9"
82 |
83 | "@babel/helper-module-transforms@^7.26.0":
84 | version "7.26.0"
85 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
86 | integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
87 | dependencies:
88 | "@babel/helper-module-imports" "^7.25.9"
89 | "@babel/helper-validator-identifier" "^7.25.9"
90 | "@babel/traverse" "^7.25.9"
91 |
92 | "@babel/helper-plugin-utils@^7.25.9":
93 | version "7.26.5"
94 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
95 | integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
96 |
97 | "@babel/helper-string-parser@^7.25.9":
98 | version "7.25.9"
99 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
100 | integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
101 |
102 | "@babel/helper-validator-identifier@^7.25.9":
103 | version "7.25.9"
104 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
105 | integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
106 |
107 | "@babel/helper-validator-option@^7.25.9":
108 | version "7.25.9"
109 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
110 | integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
111 |
112 | "@babel/helpers@^7.26.7":
113 | version "7.26.7"
114 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.7.tgz#fd1d2a7c431b6e39290277aacfd8367857c576a4"
115 | integrity sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==
116 | dependencies:
117 | "@babel/template" "^7.25.9"
118 | "@babel/types" "^7.26.7"
119 |
120 | "@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.5", "@babel/parser@^7.26.7":
121 | version "7.26.7"
122 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.7.tgz#e114cd099e5f7d17b05368678da0fb9f69b3385c"
123 | integrity sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==
124 | dependencies:
125 | "@babel/types" "^7.26.7"
126 |
127 | "@babel/plugin-transform-react-jsx-self@^7.25.9":
128 | version "7.25.9"
129 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz#c0b6cae9c1b73967f7f9eb2fca9536ba2fad2858"
130 | integrity sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==
131 | dependencies:
132 | "@babel/helper-plugin-utils" "^7.25.9"
133 |
134 | "@babel/plugin-transform-react-jsx-source@^7.25.9":
135 | version "7.25.9"
136 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz#4c6b8daa520b5f155b5fb55547d7c9fa91417503"
137 | integrity sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==
138 | dependencies:
139 | "@babel/helper-plugin-utils" "^7.25.9"
140 |
141 | "@babel/template@^7.25.9":
142 | version "7.25.9"
143 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016"
144 | integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==
145 | dependencies:
146 | "@babel/code-frame" "^7.25.9"
147 | "@babel/parser" "^7.25.9"
148 | "@babel/types" "^7.25.9"
149 |
150 | "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.7":
151 | version "7.26.7"
152 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.7.tgz#99a0a136f6a75e7fb8b0a1ace421e0b25994b8bb"
153 | integrity sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==
154 | dependencies:
155 | "@babel/code-frame" "^7.26.2"
156 | "@babel/generator" "^7.26.5"
157 | "@babel/parser" "^7.26.7"
158 | "@babel/template" "^7.25.9"
159 | "@babel/types" "^7.26.7"
160 | debug "^4.3.1"
161 | globals "^11.1.0"
162 |
163 | "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.5", "@babel/types@^7.26.7":
164 | version "7.26.7"
165 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.7.tgz#5e2b89c0768e874d4d061961f3a5a153d71dc17a"
166 | integrity sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==
167 | dependencies:
168 | "@babel/helper-string-parser" "^7.25.9"
169 | "@babel/helper-validator-identifier" "^7.25.9"
170 |
171 | "@bufbuild/protobuf@^2.0.0":
172 | version "2.2.3"
173 | resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-2.2.3.tgz#9cd136f6b687e63e9b517b3a54211ece942897ee"
174 | integrity sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==
175 |
176 | "@esbuild/aix-ppc64@0.24.2":
177 | version "0.24.2"
178 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461"
179 | integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==
180 |
181 | "@esbuild/android-arm64@0.24.2":
182 | version "0.24.2"
183 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894"
184 | integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==
185 |
186 | "@esbuild/android-arm@0.24.2":
187 | version "0.24.2"
188 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3"
189 | integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==
190 |
191 | "@esbuild/android-x64@0.24.2":
192 | version "0.24.2"
193 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb"
194 | integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==
195 |
196 | "@esbuild/darwin-arm64@0.24.2":
197 | version "0.24.2"
198 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936"
199 | integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==
200 |
201 | "@esbuild/darwin-x64@0.24.2":
202 | version "0.24.2"
203 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9"
204 | integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==
205 |
206 | "@esbuild/freebsd-arm64@0.24.2":
207 | version "0.24.2"
208 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00"
209 | integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==
210 |
211 | "@esbuild/freebsd-x64@0.24.2":
212 | version "0.24.2"
213 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f"
214 | integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==
215 |
216 | "@esbuild/linux-arm64@0.24.2":
217 | version "0.24.2"
218 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43"
219 | integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==
220 |
221 | "@esbuild/linux-arm@0.24.2":
222 | version "0.24.2"
223 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736"
224 | integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==
225 |
226 | "@esbuild/linux-ia32@0.24.2":
227 | version "0.24.2"
228 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5"
229 | integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==
230 |
231 | "@esbuild/linux-loong64@0.24.2":
232 | version "0.24.2"
233 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc"
234 | integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==
235 |
236 | "@esbuild/linux-mips64el@0.24.2":
237 | version "0.24.2"
238 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb"
239 | integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==
240 |
241 | "@esbuild/linux-ppc64@0.24.2":
242 | version "0.24.2"
243 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412"
244 | integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==
245 |
246 | "@esbuild/linux-riscv64@0.24.2":
247 | version "0.24.2"
248 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694"
249 | integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==
250 |
251 | "@esbuild/linux-s390x@0.24.2":
252 | version "0.24.2"
253 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577"
254 | integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==
255 |
256 | "@esbuild/linux-x64@0.24.2":
257 | version "0.24.2"
258 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f"
259 | integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==
260 |
261 | "@esbuild/netbsd-arm64@0.24.2":
262 | version "0.24.2"
263 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6"
264 | integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==
265 |
266 | "@esbuild/netbsd-x64@0.24.2":
267 | version "0.24.2"
268 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40"
269 | integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==
270 |
271 | "@esbuild/openbsd-arm64@0.24.2":
272 | version "0.24.2"
273 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f"
274 | integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==
275 |
276 | "@esbuild/openbsd-x64@0.24.2":
277 | version "0.24.2"
278 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205"
279 | integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==
280 |
281 | "@esbuild/sunos-x64@0.24.2":
282 | version "0.24.2"
283 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6"
284 | integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==
285 |
286 | "@esbuild/win32-arm64@0.24.2":
287 | version "0.24.2"
288 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85"
289 | integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==
290 |
291 | "@esbuild/win32-ia32@0.24.2":
292 | version "0.24.2"
293 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2"
294 | integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==
295 |
296 | "@esbuild/win32-x64@0.24.2":
297 | version "0.24.2"
298 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b"
299 | integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==
300 |
301 | "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
302 | version "4.4.0"
303 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
304 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
305 | dependencies:
306 | eslint-visitor-keys "^3.3.0"
307 |
308 | "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1":
309 | version "4.8.0"
310 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005"
311 | integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==
312 |
313 | "@eslint/eslintrc@^2.1.2":
314 | version "2.1.2"
315 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396"
316 | integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==
317 | dependencies:
318 | ajv "^6.12.4"
319 | debug "^4.3.2"
320 | espree "^9.6.0"
321 | globals "^13.19.0"
322 | ignore "^5.2.0"
323 | import-fresh "^3.2.1"
324 | js-yaml "^4.1.0"
325 | minimatch "^3.1.2"
326 | strip-json-comments "^3.1.1"
327 |
328 | "@eslint/js@8.48.0":
329 | version "8.48.0"
330 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb"
331 | integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==
332 |
333 | "@ffmpeg/ffmpeg@^0.12.15":
334 | version "0.12.15"
335 | resolved "https://registry.yarnpkg.com/@ffmpeg/ffmpeg/-/ffmpeg-0.12.15.tgz#e5b05c2b5c946f3464b3aa85461e4654a4649d80"
336 | integrity sha512-1C8Obr4GsN3xw+/1Ww6PFM84wSQAGsdoTuTWPOj2OizsRDLT4CXTaVjPhkw6ARyDus1B9X/L2LiXHqYYsGnRFw==
337 | dependencies:
338 | "@ffmpeg/types" "^0.12.4"
339 |
340 | "@ffmpeg/types@^0.12.4":
341 | version "0.12.4"
342 | resolved "https://registry.yarnpkg.com/@ffmpeg/types/-/types-0.12.4.tgz#aecd9b1a035882ee0bdf8853af37271a3b447473"
343 | integrity sha512-k9vJQNBGTxE5AhYDtOYR5rO5fKsspbg51gbcwtbkw2lCdoIILzklulcjJfIDwrtn7XhDeF2M+THwJ2FGrLeV6A==
344 |
345 | "@ffmpeg/util@^0.12.2":
346 | version "0.12.2"
347 | resolved "https://registry.yarnpkg.com/@ffmpeg/util/-/util-0.12.2.tgz#6bab9d8022a5bed9a6ff0933e5235b9b38698599"
348 | integrity sha512-ouyoW+4JB7WxjeZ2y6KpRvB+dLp7Cp4ro8z0HIVpZVCM7AwFlHa0c4R8Y/a4M3wMqATpYKhC7lSFHQ0T11MEDw==
349 |
350 | "@humanwhocodes/config-array@^0.11.10":
351 | version "0.11.11"
352 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844"
353 | integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==
354 | dependencies:
355 | "@humanwhocodes/object-schema" "^1.2.1"
356 | debug "^4.1.1"
357 | minimatch "^3.0.5"
358 |
359 | "@humanwhocodes/module-importer@^1.0.1":
360 | version "1.0.1"
361 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
362 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
363 |
364 | "@humanwhocodes/object-schema@^1.2.1":
365 | version "1.2.1"
366 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
367 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
368 |
369 | "@jridgewell/gen-mapping@^0.3.0":
370 | version "0.3.3"
371 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
372 | integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
373 | dependencies:
374 | "@jridgewell/set-array" "^1.0.1"
375 | "@jridgewell/sourcemap-codec" "^1.4.10"
376 | "@jridgewell/trace-mapping" "^0.3.9"
377 |
378 | "@jridgewell/gen-mapping@^0.3.5":
379 | version "0.3.8"
380 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
381 | integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
382 | dependencies:
383 | "@jridgewell/set-array" "^1.2.1"
384 | "@jridgewell/sourcemap-codec" "^1.4.10"
385 | "@jridgewell/trace-mapping" "^0.3.24"
386 |
387 | "@jridgewell/resolve-uri@^3.1.0":
388 | version "3.1.1"
389 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
390 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
391 |
392 | "@jridgewell/set-array@^1.0.1":
393 | version "1.1.2"
394 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
395 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
396 |
397 | "@jridgewell/set-array@^1.2.1":
398 | version "1.2.1"
399 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
400 | integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
401 |
402 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
403 | version "1.4.15"
404 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
405 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
406 |
407 | "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
408 | version "0.3.25"
409 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
410 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
411 | dependencies:
412 | "@jridgewell/resolve-uri" "^3.1.0"
413 | "@jridgewell/sourcemap-codec" "^1.4.14"
414 |
415 | "@jridgewell/trace-mapping@^0.3.9":
416 | version "0.3.19"
417 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811"
418 | integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==
419 | dependencies:
420 | "@jridgewell/resolve-uri" "^3.1.0"
421 | "@jridgewell/sourcemap-codec" "^1.4.14"
422 |
423 | "@nodelib/fs.scandir@2.1.5":
424 | version "2.1.5"
425 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
426 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
427 | dependencies:
428 | "@nodelib/fs.stat" "2.0.5"
429 | run-parallel "^1.1.9"
430 |
431 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
432 | version "2.0.5"
433 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
434 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
435 |
436 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
437 | version "1.2.8"
438 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
439 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
440 | dependencies:
441 | "@nodelib/fs.scandir" "2.1.5"
442 | fastq "^1.6.0"
443 |
444 | "@rollup/rollup-android-arm-eabi@4.32.1":
445 | version "4.32.1"
446 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.1.tgz#c18bad635ba24220a6c8cc427ab2cab12e1531a3"
447 | integrity sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==
448 |
449 | "@rollup/rollup-android-arm64@4.32.1":
450 | version "4.32.1"
451 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.1.tgz#b5c00344b80f20889b72bfe65d3c209cef247362"
452 | integrity sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==
453 |
454 | "@rollup/rollup-darwin-arm64@4.32.1":
455 | version "4.32.1"
456 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.1.tgz#78e5358d4a2a08c090f75dd87fa2eada42eca1e5"
457 | integrity sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==
458 |
459 | "@rollup/rollup-darwin-x64@4.32.1":
460 | version "4.32.1"
461 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.1.tgz#c04c9e173244d44de50278f3f893fb68d987fcc6"
462 | integrity sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==
463 |
464 | "@rollup/rollup-freebsd-arm64@4.32.1":
465 | version "4.32.1"
466 | resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.1.tgz#3bdf18d4ef32dcfe9b20bba18d7a53a101ed79d9"
467 | integrity sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==
468 |
469 | "@rollup/rollup-freebsd-x64@4.32.1":
470 | version "4.32.1"
471 | resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.1.tgz#35867b15c276f4b4ca8eb226f7dd6df8c64640db"
472 | integrity sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==
473 |
474 | "@rollup/rollup-linux-arm-gnueabihf@4.32.1":
475 | version "4.32.1"
476 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.1.tgz#92c212d1b38c105bd1eb101254722d27d869b1ac"
477 | integrity sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==
478 |
479 | "@rollup/rollup-linux-arm-musleabihf@4.32.1":
480 | version "4.32.1"
481 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.1.tgz#ebb94d8cd438f23e38caa4a87ca80d4cf5b50fa1"
482 | integrity sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==
483 |
484 | "@rollup/rollup-linux-arm64-gnu@4.32.1":
485 | version "4.32.1"
486 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.1.tgz#ce6a5eacbd5fd4bdf7bf27bd818980230bdb9fab"
487 | integrity sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==
488 |
489 | "@rollup/rollup-linux-arm64-musl@4.32.1":
490 | version "4.32.1"
491 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.1.tgz#31b4e0a543607e6eb4f982ffb45830919a952a83"
492 | integrity sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==
493 |
494 | "@rollup/rollup-linux-loongarch64-gnu@4.32.1":
495 | version "4.32.1"
496 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.1.tgz#ad7b35f193f1d2e0dc37eba733069b4af5f6498d"
497 | integrity sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==
498 |
499 | "@rollup/rollup-linux-powerpc64le-gnu@4.32.1":
500 | version "4.32.1"
501 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.1.tgz#b713a55d7eac4d2c8a0109c3daca6ea85fc178b3"
502 | integrity sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==
503 |
504 | "@rollup/rollup-linux-riscv64-gnu@4.32.1":
505 | version "4.32.1"
506 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.1.tgz#bea4fd8ad190e9bc1d11efafa2efc9d121f50b96"
507 | integrity sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==
508 |
509 | "@rollup/rollup-linux-s390x-gnu@4.32.1":
510 | version "4.32.1"
511 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.1.tgz#cc98c32733ca472635759c78a79b5f8d887b2a6a"
512 | integrity sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==
513 |
514 | "@rollup/rollup-linux-x64-gnu@4.32.1":
515 | version "4.32.1"
516 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.1.tgz#5c009c264a7ce0e19b40890ca9945440bb420691"
517 | integrity sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==
518 |
519 | "@rollup/rollup-linux-x64-musl@4.32.1":
520 | version "4.32.1"
521 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.1.tgz#73d2f44070c23e031262b601927fdb4eec253bc1"
522 | integrity sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==
523 |
524 | "@rollup/rollup-win32-arm64-msvc@4.32.1":
525 | version "4.32.1"
526 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.1.tgz#fa106304818078f9d3fc9005642ad99f596eed2d"
527 | integrity sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==
528 |
529 | "@rollup/rollup-win32-ia32-msvc@4.32.1":
530 | version "4.32.1"
531 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.1.tgz#a1a394c705a0d2a974a124c4b471fc1cf851a56f"
532 | integrity sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==
533 |
534 | "@rollup/rollup-win32-x64-msvc@4.32.1":
535 | version "4.32.1"
536 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.1.tgz#512db088df67afee8f07183cdf8c9eecd64f6ef8"
537 | integrity sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==
538 |
539 | "@types/babel__core@^7.20.5":
540 | version "7.20.5"
541 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
542 | integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
543 | dependencies:
544 | "@babel/parser" "^7.20.7"
545 | "@babel/types" "^7.20.7"
546 | "@types/babel__generator" "*"
547 | "@types/babel__template" "*"
548 | "@types/babel__traverse" "*"
549 |
550 | "@types/babel__generator@*":
551 | version "7.6.8"
552 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab"
553 | integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
554 | dependencies:
555 | "@babel/types" "^7.0.0"
556 |
557 | "@types/babel__template@*":
558 | version "7.4.4"
559 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
560 | integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
561 | dependencies:
562 | "@babel/parser" "^7.1.0"
563 | "@babel/types" "^7.0.0"
564 |
565 | "@types/babel__traverse@*":
566 | version "7.20.6"
567 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7"
568 | integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==
569 | dependencies:
570 | "@babel/types" "^7.20.7"
571 |
572 | "@types/estree@1.0.6":
573 | version "1.0.6"
574 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
575 | integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
576 |
577 | "@types/json-schema@^7.0.12":
578 | version "7.0.12"
579 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb"
580 | integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==
581 |
582 | "@types/prop-types@*":
583 | version "15.7.5"
584 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
585 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
586 |
587 | "@types/react-dom@^18.2.7":
588 | version "18.2.7"
589 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.7.tgz#67222a08c0a6ae0a0da33c3532348277c70abb63"
590 | integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==
591 | dependencies:
592 | "@types/react" "*"
593 |
594 | "@types/react@*", "@types/react@^18.2.15":
595 | version "18.2.21"
596 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.21.tgz#774c37fd01b522d0b91aed04811b58e4e0514ed9"
597 | integrity sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==
598 | dependencies:
599 | "@types/prop-types" "*"
600 | "@types/scheduler" "*"
601 | csstype "^3.0.2"
602 |
603 | "@types/scheduler@*":
604 | version "0.16.3"
605 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5"
606 | integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==
607 |
608 | "@types/semver@^7.5.0":
609 | version "7.5.1"
610 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367"
611 | integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==
612 |
613 | "@typescript-eslint/eslint-plugin@^6.0.0":
614 | version "6.6.0"
615 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.6.0.tgz#19ba09aa34fd504696445100262e5a9e1b1d7024"
616 | integrity sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA==
617 | dependencies:
618 | "@eslint-community/regexpp" "^4.5.1"
619 | "@typescript-eslint/scope-manager" "6.6.0"
620 | "@typescript-eslint/type-utils" "6.6.0"
621 | "@typescript-eslint/utils" "6.6.0"
622 | "@typescript-eslint/visitor-keys" "6.6.0"
623 | debug "^4.3.4"
624 | graphemer "^1.4.0"
625 | ignore "^5.2.4"
626 | natural-compare "^1.4.0"
627 | semver "^7.5.4"
628 | ts-api-utils "^1.0.1"
629 |
630 | "@typescript-eslint/parser@^6.0.0":
631 | version "6.6.0"
632 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.6.0.tgz#fe323a7b4eafb6d5ea82b96216561810394a739e"
633 | integrity sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==
634 | dependencies:
635 | "@typescript-eslint/scope-manager" "6.6.0"
636 | "@typescript-eslint/types" "6.6.0"
637 | "@typescript-eslint/typescript-estree" "6.6.0"
638 | "@typescript-eslint/visitor-keys" "6.6.0"
639 | debug "^4.3.4"
640 |
641 | "@typescript-eslint/scope-manager@6.6.0":
642 | version "6.6.0"
643 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz#57105d4419d6de971f7d2c30a2ff4ac40003f61a"
644 | integrity sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==
645 | dependencies:
646 | "@typescript-eslint/types" "6.6.0"
647 | "@typescript-eslint/visitor-keys" "6.6.0"
648 |
649 | "@typescript-eslint/type-utils@6.6.0":
650 | version "6.6.0"
651 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.6.0.tgz#14f651d13b884915c4fca0d27adeb652a4499e86"
652 | integrity sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg==
653 | dependencies:
654 | "@typescript-eslint/typescript-estree" "6.6.0"
655 | "@typescript-eslint/utils" "6.6.0"
656 | debug "^4.3.4"
657 | ts-api-utils "^1.0.1"
658 |
659 | "@typescript-eslint/types@6.6.0":
660 | version "6.6.0"
661 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.6.0.tgz#95e7ea650a2b28bc5af5ea8907114a48f54618c2"
662 | integrity sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==
663 |
664 | "@typescript-eslint/typescript-estree@6.6.0":
665 | version "6.6.0"
666 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz#373c420d2e12c28220f4a83352280a04823a91b7"
667 | integrity sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==
668 | dependencies:
669 | "@typescript-eslint/types" "6.6.0"
670 | "@typescript-eslint/visitor-keys" "6.6.0"
671 | debug "^4.3.4"
672 | globby "^11.1.0"
673 | is-glob "^4.0.3"
674 | semver "^7.5.4"
675 | ts-api-utils "^1.0.1"
676 |
677 | "@typescript-eslint/utils@6.6.0":
678 | version "6.6.0"
679 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.6.0.tgz#2d686c0f0786da6362d909e27a9de1c13ba2e7dc"
680 | integrity sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw==
681 | dependencies:
682 | "@eslint-community/eslint-utils" "^4.4.0"
683 | "@types/json-schema" "^7.0.12"
684 | "@types/semver" "^7.5.0"
685 | "@typescript-eslint/scope-manager" "6.6.0"
686 | "@typescript-eslint/types" "6.6.0"
687 | "@typescript-eslint/typescript-estree" "6.6.0"
688 | semver "^7.5.4"
689 |
690 | "@typescript-eslint/visitor-keys@6.6.0":
691 | version "6.6.0"
692 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz#1109088b4346c8b2446f3845db526374d9a3bafc"
693 | integrity sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==
694 | dependencies:
695 | "@typescript-eslint/types" "6.6.0"
696 | eslint-visitor-keys "^3.4.1"
697 |
698 | "@vitejs/plugin-react@^4.3.4":
699 | version "4.3.4"
700 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz#c64be10b54c4640135a5b28a2432330e88ad7c20"
701 | integrity sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==
702 | dependencies:
703 | "@babel/core" "^7.26.0"
704 | "@babel/plugin-transform-react-jsx-self" "^7.25.9"
705 | "@babel/plugin-transform-react-jsx-source" "^7.25.9"
706 | "@types/babel__core" "^7.20.5"
707 | react-refresh "^0.14.2"
708 |
709 | acorn-jsx@^5.3.2:
710 | version "5.3.2"
711 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
712 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
713 |
714 | acorn@^8.9.0:
715 | version "8.10.0"
716 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
717 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
718 |
719 | ajv@^6.12.4:
720 | version "6.12.6"
721 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
722 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
723 | dependencies:
724 | fast-deep-equal "^3.1.1"
725 | fast-json-stable-stringify "^2.0.0"
726 | json-schema-traverse "^0.4.1"
727 | uri-js "^4.2.2"
728 |
729 | ansi-escapes@^5.0.0:
730 | version "5.0.0"
731 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6"
732 | integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==
733 | dependencies:
734 | type-fest "^1.0.2"
735 |
736 | ansi-regex@^5.0.1:
737 | version "5.0.1"
738 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
739 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
740 |
741 | ansi-regex@^6.0.1:
742 | version "6.0.1"
743 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
744 | integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
745 |
746 | ansi-styles@^4.1.0:
747 | version "4.3.0"
748 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
749 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
750 | dependencies:
751 | color-convert "^2.0.1"
752 |
753 | ansi-styles@^6.0.0, ansi-styles@^6.1.0:
754 | version "6.2.1"
755 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
756 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
757 |
758 | argparse@^2.0.1:
759 | version "2.0.1"
760 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
761 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
762 |
763 | array-union@^2.1.0:
764 | version "2.1.0"
765 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
766 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
767 |
768 | balanced-match@^1.0.0:
769 | version "1.0.2"
770 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
771 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
772 |
773 | brace-expansion@^1.1.7:
774 | version "1.1.11"
775 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
776 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
777 | dependencies:
778 | balanced-match "^1.0.0"
779 | concat-map "0.0.1"
780 |
781 | braces@^3.0.2:
782 | version "3.0.2"
783 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
784 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
785 | dependencies:
786 | fill-range "^7.0.1"
787 |
788 | browserslist@^4.24.0:
789 | version "4.24.4"
790 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b"
791 | integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
792 | dependencies:
793 | caniuse-lite "^1.0.30001688"
794 | electron-to-chromium "^1.5.73"
795 | node-releases "^2.0.19"
796 | update-browserslist-db "^1.1.1"
797 |
798 | buffer-builder@^0.2.0:
799 | version "0.2.0"
800 | resolved "https://registry.yarnpkg.com/buffer-builder/-/buffer-builder-0.2.0.tgz#3322cd307d8296dab1f604618593b261a3fade8f"
801 | integrity sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==
802 |
803 | callsites@^3.0.0:
804 | version "3.1.0"
805 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
806 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
807 |
808 | caniuse-lite@^1.0.30001688:
809 | version "1.0.30001696"
810 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz#00c30a2fc11e3c98c25e5125418752af3ae2f49f"
811 | integrity sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==
812 |
813 | chalk@5.3.0:
814 | version "5.3.0"
815 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
816 | integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
817 |
818 | chalk@^4.0.0:
819 | version "4.1.2"
820 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
821 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
822 | dependencies:
823 | ansi-styles "^4.1.0"
824 | supports-color "^7.1.0"
825 |
826 | cli-cursor@^4.0.0:
827 | version "4.0.0"
828 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea"
829 | integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==
830 | dependencies:
831 | restore-cursor "^4.0.0"
832 |
833 | cli-truncate@^3.1.0:
834 | version "3.1.0"
835 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389"
836 | integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==
837 | dependencies:
838 | slice-ansi "^5.0.0"
839 | string-width "^5.0.0"
840 |
841 | clsx@^2.0.0:
842 | version "2.0.0"
843 | resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b"
844 | integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==
845 |
846 | color-convert@^2.0.1:
847 | version "2.0.1"
848 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
849 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
850 | dependencies:
851 | color-name "~1.1.4"
852 |
853 | color-name@~1.1.4:
854 | version "1.1.4"
855 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
856 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
857 |
858 | colorette@^2.0.20:
859 | version "2.0.20"
860 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
861 | integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
862 |
863 | colorjs.io@^0.5.0:
864 | version "0.5.2"
865 | resolved "https://registry.yarnpkg.com/colorjs.io/-/colorjs.io-0.5.2.tgz#63b20139b007591ebc3359932bef84628eb3fcef"
866 | integrity sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==
867 |
868 | commander@11.0.0:
869 | version "11.0.0"
870 | resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67"
871 | integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==
872 |
873 | concat-map@0.0.1:
874 | version "0.0.1"
875 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
876 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
877 |
878 | convert-source-map@^2.0.0:
879 | version "2.0.0"
880 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
881 | integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
882 |
883 | cross-spawn@^7.0.2, cross-spawn@^7.0.3:
884 | version "7.0.3"
885 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
886 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
887 | dependencies:
888 | path-key "^3.1.0"
889 | shebang-command "^2.0.0"
890 | which "^2.0.1"
891 |
892 | csstype@^3.0.2:
893 | version "3.1.2"
894 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
895 | integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
896 |
897 | debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
898 | version "4.3.4"
899 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
900 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
901 | dependencies:
902 | ms "2.1.2"
903 |
904 | debug@^4.3.1:
905 | version "4.4.0"
906 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
907 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
908 | dependencies:
909 | ms "^2.1.3"
910 |
911 | deep-is@^0.1.3:
912 | version "0.1.4"
913 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
914 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
915 |
916 | dir-glob@^3.0.1:
917 | version "3.0.1"
918 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
919 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
920 | dependencies:
921 | path-type "^4.0.0"
922 |
923 | doctrine@^3.0.0:
924 | version "3.0.0"
925 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
926 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
927 | dependencies:
928 | esutils "^2.0.2"
929 |
930 | eastasianwidth@^0.2.0:
931 | version "0.2.0"
932 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
933 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
934 |
935 | electron-to-chromium@^1.5.73:
936 | version "1.5.90"
937 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz#4717e5a5413f95bbb12d0af14c35057e9c65e0b6"
938 | integrity sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==
939 |
940 | emoji-regex@^9.2.2:
941 | version "9.2.2"
942 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
943 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
944 |
945 | esbuild@^0.24.2:
946 | version "0.24.2"
947 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d"
948 | integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==
949 | optionalDependencies:
950 | "@esbuild/aix-ppc64" "0.24.2"
951 | "@esbuild/android-arm" "0.24.2"
952 | "@esbuild/android-arm64" "0.24.2"
953 | "@esbuild/android-x64" "0.24.2"
954 | "@esbuild/darwin-arm64" "0.24.2"
955 | "@esbuild/darwin-x64" "0.24.2"
956 | "@esbuild/freebsd-arm64" "0.24.2"
957 | "@esbuild/freebsd-x64" "0.24.2"
958 | "@esbuild/linux-arm" "0.24.2"
959 | "@esbuild/linux-arm64" "0.24.2"
960 | "@esbuild/linux-ia32" "0.24.2"
961 | "@esbuild/linux-loong64" "0.24.2"
962 | "@esbuild/linux-mips64el" "0.24.2"
963 | "@esbuild/linux-ppc64" "0.24.2"
964 | "@esbuild/linux-riscv64" "0.24.2"
965 | "@esbuild/linux-s390x" "0.24.2"
966 | "@esbuild/linux-x64" "0.24.2"
967 | "@esbuild/netbsd-arm64" "0.24.2"
968 | "@esbuild/netbsd-x64" "0.24.2"
969 | "@esbuild/openbsd-arm64" "0.24.2"
970 | "@esbuild/openbsd-x64" "0.24.2"
971 | "@esbuild/sunos-x64" "0.24.2"
972 | "@esbuild/win32-arm64" "0.24.2"
973 | "@esbuild/win32-ia32" "0.24.2"
974 | "@esbuild/win32-x64" "0.24.2"
975 |
976 | escalade@^3.2.0:
977 | version "3.2.0"
978 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
979 | integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
980 |
981 | escape-string-regexp@^4.0.0:
982 | version "4.0.0"
983 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
984 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
985 |
986 | eslint-plugin-react-hooks@^4.6.0:
987 | version "4.6.0"
988 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
989 | integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
990 |
991 | eslint-plugin-react-refresh@^0.4.3:
992 | version "0.4.3"
993 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.3.tgz#59dae8c00a119f06ea16b1d3e6891df3775947c7"
994 | integrity sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==
995 |
996 | eslint-scope@^7.2.2:
997 | version "7.2.2"
998 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
999 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
1000 | dependencies:
1001 | esrecurse "^4.3.0"
1002 | estraverse "^5.2.0"
1003 |
1004 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
1005 | version "3.4.3"
1006 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
1007 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
1008 |
1009 | eslint@^8.45.0:
1010 | version "8.48.0"
1011 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155"
1012 | integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==
1013 | dependencies:
1014 | "@eslint-community/eslint-utils" "^4.2.0"
1015 | "@eslint-community/regexpp" "^4.6.1"
1016 | "@eslint/eslintrc" "^2.1.2"
1017 | "@eslint/js" "8.48.0"
1018 | "@humanwhocodes/config-array" "^0.11.10"
1019 | "@humanwhocodes/module-importer" "^1.0.1"
1020 | "@nodelib/fs.walk" "^1.2.8"
1021 | ajv "^6.12.4"
1022 | chalk "^4.0.0"
1023 | cross-spawn "^7.0.2"
1024 | debug "^4.3.2"
1025 | doctrine "^3.0.0"
1026 | escape-string-regexp "^4.0.0"
1027 | eslint-scope "^7.2.2"
1028 | eslint-visitor-keys "^3.4.3"
1029 | espree "^9.6.1"
1030 | esquery "^1.4.2"
1031 | esutils "^2.0.2"
1032 | fast-deep-equal "^3.1.3"
1033 | file-entry-cache "^6.0.1"
1034 | find-up "^5.0.0"
1035 | glob-parent "^6.0.2"
1036 | globals "^13.19.0"
1037 | graphemer "^1.4.0"
1038 | ignore "^5.2.0"
1039 | imurmurhash "^0.1.4"
1040 | is-glob "^4.0.0"
1041 | is-path-inside "^3.0.3"
1042 | js-yaml "^4.1.0"
1043 | json-stable-stringify-without-jsonify "^1.0.1"
1044 | levn "^0.4.1"
1045 | lodash.merge "^4.6.2"
1046 | minimatch "^3.1.2"
1047 | natural-compare "^1.4.0"
1048 | optionator "^0.9.3"
1049 | strip-ansi "^6.0.1"
1050 | text-table "^0.2.0"
1051 |
1052 | espree@^9.6.0, espree@^9.6.1:
1053 | version "9.6.1"
1054 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
1055 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
1056 | dependencies:
1057 | acorn "^8.9.0"
1058 | acorn-jsx "^5.3.2"
1059 | eslint-visitor-keys "^3.4.1"
1060 |
1061 | esquery@^1.4.2:
1062 | version "1.5.0"
1063 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
1064 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
1065 | dependencies:
1066 | estraverse "^5.1.0"
1067 |
1068 | esrecurse@^4.3.0:
1069 | version "4.3.0"
1070 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
1071 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
1072 | dependencies:
1073 | estraverse "^5.2.0"
1074 |
1075 | estraverse@^5.1.0, estraverse@^5.2.0:
1076 | version "5.3.0"
1077 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
1078 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
1079 |
1080 | esutils@^2.0.2:
1081 | version "2.0.3"
1082 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
1083 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
1084 |
1085 | eventemitter3@^5.0.1:
1086 | version "5.0.1"
1087 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
1088 | integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
1089 |
1090 | execa@7.2.0:
1091 | version "7.2.0"
1092 | resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9"
1093 | integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==
1094 | dependencies:
1095 | cross-spawn "^7.0.3"
1096 | get-stream "^6.0.1"
1097 | human-signals "^4.3.0"
1098 | is-stream "^3.0.0"
1099 | merge-stream "^2.0.0"
1100 | npm-run-path "^5.1.0"
1101 | onetime "^6.0.0"
1102 | signal-exit "^3.0.7"
1103 | strip-final-newline "^3.0.0"
1104 |
1105 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
1106 | version "3.1.3"
1107 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
1108 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
1109 |
1110 | fast-glob@^3.2.9:
1111 | version "3.3.1"
1112 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
1113 | integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
1114 | dependencies:
1115 | "@nodelib/fs.stat" "^2.0.2"
1116 | "@nodelib/fs.walk" "^1.2.3"
1117 | glob-parent "^5.1.2"
1118 | merge2 "^1.3.0"
1119 | micromatch "^4.0.4"
1120 |
1121 | fast-json-stable-stringify@^2.0.0:
1122 | version "2.1.0"
1123 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
1124 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
1125 |
1126 | fast-levenshtein@^2.0.6:
1127 | version "2.0.6"
1128 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
1129 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
1130 |
1131 | fastq@^1.6.0:
1132 | version "1.15.0"
1133 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
1134 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
1135 | dependencies:
1136 | reusify "^1.0.4"
1137 |
1138 | file-entry-cache@^6.0.1:
1139 | version "6.0.1"
1140 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
1141 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
1142 | dependencies:
1143 | flat-cache "^3.0.4"
1144 |
1145 | fill-range@^7.0.1:
1146 | version "7.0.1"
1147 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
1148 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
1149 | dependencies:
1150 | to-regex-range "^5.0.1"
1151 |
1152 | find-up@^5.0.0:
1153 | version "5.0.0"
1154 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
1155 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
1156 | dependencies:
1157 | locate-path "^6.0.0"
1158 | path-exists "^4.0.0"
1159 |
1160 | flat-cache@^3.0.4:
1161 | version "3.1.0"
1162 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f"
1163 | integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==
1164 | dependencies:
1165 | flatted "^3.2.7"
1166 | keyv "^4.5.3"
1167 | rimraf "^3.0.2"
1168 |
1169 | flatted@^3.2.7:
1170 | version "3.2.7"
1171 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
1172 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
1173 |
1174 | fs.realpath@^1.0.0:
1175 | version "1.0.0"
1176 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1177 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
1178 |
1179 | fsevents@~2.3.2, fsevents@~2.3.3:
1180 | version "2.3.3"
1181 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
1182 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
1183 |
1184 | gensync@^1.0.0-beta.2:
1185 | version "1.0.0-beta.2"
1186 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
1187 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
1188 |
1189 | get-stream@^6.0.1:
1190 | version "6.0.1"
1191 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
1192 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
1193 |
1194 | glob-parent@^5.1.2:
1195 | version "5.1.2"
1196 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1197 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1198 | dependencies:
1199 | is-glob "^4.0.1"
1200 |
1201 | glob-parent@^6.0.2:
1202 | version "6.0.2"
1203 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
1204 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
1205 | dependencies:
1206 | is-glob "^4.0.3"
1207 |
1208 | glob@^7.1.3:
1209 | version "7.2.3"
1210 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
1211 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
1212 | dependencies:
1213 | fs.realpath "^1.0.0"
1214 | inflight "^1.0.4"
1215 | inherits "2"
1216 | minimatch "^3.1.1"
1217 | once "^1.3.0"
1218 | path-is-absolute "^1.0.0"
1219 |
1220 | globals@^11.1.0:
1221 | version "11.12.0"
1222 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
1223 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
1224 |
1225 | globals@^13.19.0:
1226 | version "13.21.0"
1227 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571"
1228 | integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==
1229 | dependencies:
1230 | type-fest "^0.20.2"
1231 |
1232 | globby@^11.1.0:
1233 | version "11.1.0"
1234 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
1235 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
1236 | dependencies:
1237 | array-union "^2.1.0"
1238 | dir-glob "^3.0.1"
1239 | fast-glob "^3.2.9"
1240 | ignore "^5.2.0"
1241 | merge2 "^1.4.1"
1242 | slash "^3.0.0"
1243 |
1244 | graphemer@^1.4.0:
1245 | version "1.4.0"
1246 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
1247 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
1248 |
1249 | has-flag@^4.0.0:
1250 | version "4.0.0"
1251 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1252 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1253 |
1254 | human-signals@^4.3.0:
1255 | version "4.3.1"
1256 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
1257 | integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
1258 |
1259 | husky@^8.0.3:
1260 | version "8.0.3"
1261 | resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184"
1262 | integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==
1263 |
1264 | idb-keyval@^6.2.1:
1265 | version "6.2.1"
1266 | resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33"
1267 | integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==
1268 |
1269 | ignore@^5.2.0, ignore@^5.2.4:
1270 | version "5.2.4"
1271 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
1272 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
1273 |
1274 | immutable@^5.0.2:
1275 | version "5.0.3"
1276 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.0.3.tgz#aa037e2313ea7b5d400cd9298fa14e404c933db1"
1277 | integrity sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==
1278 |
1279 | import-fresh@^3.2.1:
1280 | version "3.3.0"
1281 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
1282 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
1283 | dependencies:
1284 | parent-module "^1.0.0"
1285 | resolve-from "^4.0.0"
1286 |
1287 | imurmurhash@^0.1.4:
1288 | version "0.1.4"
1289 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1290 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
1291 |
1292 | inflight@^1.0.4:
1293 | version "1.0.6"
1294 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1295 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
1296 | dependencies:
1297 | once "^1.3.0"
1298 | wrappy "1"
1299 |
1300 | inherits@2:
1301 | version "2.0.4"
1302 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1303 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1304 |
1305 | is-extglob@^2.1.1:
1306 | version "2.1.1"
1307 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1308 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
1309 |
1310 | is-fullwidth-code-point@^4.0.0:
1311 | version "4.0.0"
1312 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
1313 | integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
1314 |
1315 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
1316 | version "4.0.3"
1317 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1318 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1319 | dependencies:
1320 | is-extglob "^2.1.1"
1321 |
1322 | is-number@^7.0.0:
1323 | version "7.0.0"
1324 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1325 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1326 |
1327 | is-path-inside@^3.0.3:
1328 | version "3.0.3"
1329 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
1330 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
1331 |
1332 | is-stream@^3.0.0:
1333 | version "3.0.0"
1334 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
1335 | integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
1336 |
1337 | isexe@^2.0.0:
1338 | version "2.0.0"
1339 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1340 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1341 |
1342 | js-tokens@^4.0.0:
1343 | version "4.0.0"
1344 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1345 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1346 |
1347 | js-yaml@^4.1.0:
1348 | version "4.1.0"
1349 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1350 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1351 | dependencies:
1352 | argparse "^2.0.1"
1353 |
1354 | jsesc@^3.0.2:
1355 | version "3.1.0"
1356 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
1357 | integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
1358 |
1359 | json-buffer@3.0.1:
1360 | version "3.0.1"
1361 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
1362 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
1363 |
1364 | json-schema-traverse@^0.4.1:
1365 | version "0.4.1"
1366 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1367 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1368 |
1369 | json-stable-stringify-without-jsonify@^1.0.1:
1370 | version "1.0.1"
1371 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1372 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
1373 |
1374 | json5@^2.2.3:
1375 | version "2.2.3"
1376 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
1377 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
1378 |
1379 | keyv@^4.5.3:
1380 | version "4.5.3"
1381 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25"
1382 | integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==
1383 | dependencies:
1384 | json-buffer "3.0.1"
1385 |
1386 | levn@^0.4.1:
1387 | version "0.4.1"
1388 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1389 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1390 | dependencies:
1391 | prelude-ls "^1.2.1"
1392 | type-check "~0.4.0"
1393 |
1394 | lilconfig@2.1.0:
1395 | version "2.1.0"
1396 | resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
1397 | integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
1398 |
1399 | lint-staged@^14.0.1:
1400 | version "14.0.1"
1401 | resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-14.0.1.tgz#57dfa3013a3d60762d9af5d9c83bdb51291a6232"
1402 | integrity sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==
1403 | dependencies:
1404 | chalk "5.3.0"
1405 | commander "11.0.0"
1406 | debug "4.3.4"
1407 | execa "7.2.0"
1408 | lilconfig "2.1.0"
1409 | listr2 "6.6.1"
1410 | micromatch "4.0.5"
1411 | pidtree "0.6.0"
1412 | string-argv "0.3.2"
1413 | yaml "2.3.1"
1414 |
1415 | listr2@6.6.1:
1416 | version "6.6.1"
1417 | resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d"
1418 | integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==
1419 | dependencies:
1420 | cli-truncate "^3.1.0"
1421 | colorette "^2.0.20"
1422 | eventemitter3 "^5.0.1"
1423 | log-update "^5.0.1"
1424 | rfdc "^1.3.0"
1425 | wrap-ansi "^8.1.0"
1426 |
1427 | locate-path@^6.0.0:
1428 | version "6.0.0"
1429 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
1430 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
1431 | dependencies:
1432 | p-locate "^5.0.0"
1433 |
1434 | lodash.merge@^4.6.2:
1435 | version "4.6.2"
1436 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1437 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1438 |
1439 | log-update@^5.0.1:
1440 | version "5.0.1"
1441 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09"
1442 | integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==
1443 | dependencies:
1444 | ansi-escapes "^5.0.0"
1445 | cli-cursor "^4.0.0"
1446 | slice-ansi "^5.0.0"
1447 | strip-ansi "^7.0.1"
1448 | wrap-ansi "^8.0.1"
1449 |
1450 | lru-cache@^5.1.1:
1451 | version "5.1.1"
1452 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
1453 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
1454 | dependencies:
1455 | yallist "^3.0.2"
1456 |
1457 | lru-cache@^6.0.0:
1458 | version "6.0.0"
1459 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1460 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1461 | dependencies:
1462 | yallist "^4.0.0"
1463 |
1464 | merge-stream@^2.0.0:
1465 | version "2.0.0"
1466 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1467 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1468 |
1469 | merge2@^1.3.0, merge2@^1.4.1:
1470 | version "1.4.1"
1471 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1472 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1473 |
1474 | micromatch@4.0.5, micromatch@^4.0.4:
1475 | version "4.0.5"
1476 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
1477 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
1478 | dependencies:
1479 | braces "^3.0.2"
1480 | picomatch "^2.3.1"
1481 |
1482 | mimic-fn@^2.1.0:
1483 | version "2.1.0"
1484 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
1485 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
1486 |
1487 | mimic-fn@^4.0.0:
1488 | version "4.0.0"
1489 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
1490 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
1491 |
1492 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
1493 | version "3.1.2"
1494 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1495 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1496 | dependencies:
1497 | brace-expansion "^1.1.7"
1498 |
1499 | mobx-react-lite@^4.0.4:
1500 | version "4.0.4"
1501 | resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-4.0.4.tgz#eee3c55dfa6841365d5a7764971c456db12570fb"
1502 | integrity sha512-68uNYvQC/5Dazs3sIBv+bnpzRwcWde8y4ujHiLizhq8yeQtJ2tlNUGSh4r40gyE5M0utACIofBDsAj2hplcovQ==
1503 | dependencies:
1504 | use-sync-external-store "^1.2.0"
1505 |
1506 | mobx@^6.10.2:
1507 | version "6.10.2"
1508 | resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.10.2.tgz#96e123deef140750360ca9a5b02a8b91fbffd4d9"
1509 | integrity sha512-B1UGC3ieK3boCjnMEcZSwxqRDMdzX65H/8zOHbuTY8ZhvrIjTUoLRR2TP2bPqIgYRfb3+dUigu8yMZufNjn0LQ==
1510 |
1511 | ms@2.1.2:
1512 | version "2.1.2"
1513 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1514 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1515 |
1516 | ms@^2.1.3:
1517 | version "2.1.3"
1518 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1519 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1520 |
1521 | nanoid@^3.3.8:
1522 | version "3.3.8"
1523 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
1524 | integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
1525 |
1526 | natural-compare@^1.4.0:
1527 | version "1.4.0"
1528 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1529 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
1530 |
1531 | node-releases@^2.0.19:
1532 | version "2.0.19"
1533 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
1534 | integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
1535 |
1536 | npm-run-path@^5.1.0:
1537 | version "5.1.0"
1538 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
1539 | integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
1540 | dependencies:
1541 | path-key "^4.0.0"
1542 |
1543 | once@^1.3.0:
1544 | version "1.4.0"
1545 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1546 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
1547 | dependencies:
1548 | wrappy "1"
1549 |
1550 | onetime@^5.1.0:
1551 | version "5.1.2"
1552 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
1553 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
1554 | dependencies:
1555 | mimic-fn "^2.1.0"
1556 |
1557 | onetime@^6.0.0:
1558 | version "6.0.0"
1559 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
1560 | integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
1561 | dependencies:
1562 | mimic-fn "^4.0.0"
1563 |
1564 | optionator@^0.9.3:
1565 | version "0.9.3"
1566 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
1567 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
1568 | dependencies:
1569 | "@aashutoshrathi/word-wrap" "^1.2.3"
1570 | deep-is "^0.1.3"
1571 | fast-levenshtein "^2.0.6"
1572 | levn "^0.4.1"
1573 | prelude-ls "^1.2.1"
1574 | type-check "^0.4.0"
1575 |
1576 | p-limit@^3.0.2:
1577 | version "3.1.0"
1578 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1579 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1580 | dependencies:
1581 | yocto-queue "^0.1.0"
1582 |
1583 | p-locate@^5.0.0:
1584 | version "5.0.0"
1585 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1586 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1587 | dependencies:
1588 | p-limit "^3.0.2"
1589 |
1590 | parent-module@^1.0.0:
1591 | version "1.0.1"
1592 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1593 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1594 | dependencies:
1595 | callsites "^3.0.0"
1596 |
1597 | path-exists@^4.0.0:
1598 | version "4.0.0"
1599 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1600 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1601 |
1602 | path-is-absolute@^1.0.0:
1603 | version "1.0.1"
1604 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1605 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
1606 |
1607 | path-key@^3.1.0:
1608 | version "3.1.1"
1609 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1610 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1611 |
1612 | path-key@^4.0.0:
1613 | version "4.0.0"
1614 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
1615 | integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
1616 |
1617 | path-type@^4.0.0:
1618 | version "4.0.0"
1619 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1620 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1621 |
1622 | picocolors@^1.0.0:
1623 | version "1.0.0"
1624 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
1625 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
1626 |
1627 | picocolors@^1.1.1:
1628 | version "1.1.1"
1629 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
1630 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
1631 |
1632 | picomatch@^2.3.1:
1633 | version "2.3.1"
1634 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1635 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1636 |
1637 | pidtree@0.6.0:
1638 | version "0.6.0"
1639 | resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
1640 | integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==
1641 |
1642 | postcss@^8.4.49:
1643 | version "8.5.1"
1644 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214"
1645 | integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==
1646 | dependencies:
1647 | nanoid "^3.3.8"
1648 | picocolors "^1.1.1"
1649 | source-map-js "^1.2.1"
1650 |
1651 | prelude-ls@^1.2.1:
1652 | version "1.2.1"
1653 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1654 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1655 |
1656 | prettier@^3.0.3:
1657 | version "3.0.3"
1658 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643"
1659 | integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==
1660 |
1661 | punycode@^2.1.0:
1662 | version "2.3.0"
1663 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
1664 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
1665 |
1666 | queue-microtask@^1.2.2:
1667 | version "1.2.3"
1668 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1669 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1670 |
1671 | react-dom@^19.0.0:
1672 | version "19.0.0"
1673 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57"
1674 | integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==
1675 | dependencies:
1676 | scheduler "^0.25.0"
1677 |
1678 | react-icons@^5.4.0:
1679 | version "5.4.0"
1680 | resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.4.0.tgz#443000f6e5123ee1b21ea8c0a716f6e7797f7416"
1681 | integrity sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==
1682 |
1683 | react-refresh@^0.14.2:
1684 | version "0.14.2"
1685 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9"
1686 | integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
1687 |
1688 | react-use-pointer-drag@^0.1.2:
1689 | version "0.1.2"
1690 | resolved "https://registry.yarnpkg.com/react-use-pointer-drag/-/react-use-pointer-drag-0.1.2.tgz#f5418f8eea6246b8969e93a97790bb995ddd04d5"
1691 | integrity sha512-Sm53xOun8NEYLFLUvywOSSnzYoxnx79TU2tecOrdhYKkSQyaoxoNvxA1+KtaKxqT/gy2TqxrvrgerkwoeF7S7g==
1692 |
1693 | react@^19.0.0:
1694 | version "19.0.0"
1695 | resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd"
1696 | integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==
1697 |
1698 | resolve-from@^4.0.0:
1699 | version "4.0.0"
1700 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1701 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1702 |
1703 | restore-cursor@^4.0.0:
1704 | version "4.0.0"
1705 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9"
1706 | integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==
1707 | dependencies:
1708 | onetime "^5.1.0"
1709 | signal-exit "^3.0.2"
1710 |
1711 | reusify@^1.0.4:
1712 | version "1.0.4"
1713 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
1714 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
1715 |
1716 | rfdc@^1.3.0:
1717 | version "1.3.0"
1718 | resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
1719 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
1720 |
1721 | rimraf@^3.0.2:
1722 | version "3.0.2"
1723 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1724 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1725 | dependencies:
1726 | glob "^7.1.3"
1727 |
1728 | rollup@^4.23.0:
1729 | version "4.32.1"
1730 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.32.1.tgz#95309604d92c3d21cbf06c3ee46a098209ce13a4"
1731 | integrity sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==
1732 | dependencies:
1733 | "@types/estree" "1.0.6"
1734 | optionalDependencies:
1735 | "@rollup/rollup-android-arm-eabi" "4.32.1"
1736 | "@rollup/rollup-android-arm64" "4.32.1"
1737 | "@rollup/rollup-darwin-arm64" "4.32.1"
1738 | "@rollup/rollup-darwin-x64" "4.32.1"
1739 | "@rollup/rollup-freebsd-arm64" "4.32.1"
1740 | "@rollup/rollup-freebsd-x64" "4.32.1"
1741 | "@rollup/rollup-linux-arm-gnueabihf" "4.32.1"
1742 | "@rollup/rollup-linux-arm-musleabihf" "4.32.1"
1743 | "@rollup/rollup-linux-arm64-gnu" "4.32.1"
1744 | "@rollup/rollup-linux-arm64-musl" "4.32.1"
1745 | "@rollup/rollup-linux-loongarch64-gnu" "4.32.1"
1746 | "@rollup/rollup-linux-powerpc64le-gnu" "4.32.1"
1747 | "@rollup/rollup-linux-riscv64-gnu" "4.32.1"
1748 | "@rollup/rollup-linux-s390x-gnu" "4.32.1"
1749 | "@rollup/rollup-linux-x64-gnu" "4.32.1"
1750 | "@rollup/rollup-linux-x64-musl" "4.32.1"
1751 | "@rollup/rollup-win32-arm64-msvc" "4.32.1"
1752 | "@rollup/rollup-win32-ia32-msvc" "4.32.1"
1753 | "@rollup/rollup-win32-x64-msvc" "4.32.1"
1754 | fsevents "~2.3.2"
1755 |
1756 | run-parallel@^1.1.9:
1757 | version "1.2.0"
1758 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1759 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1760 | dependencies:
1761 | queue-microtask "^1.2.2"
1762 |
1763 | rxjs@^7.4.0:
1764 | version "7.8.1"
1765 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
1766 | integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
1767 | dependencies:
1768 | tslib "^2.1.0"
1769 |
1770 | sass-embedded-android-arm64@1.83.4:
1771 | version "1.83.4"
1772 | resolved "https://registry.yarnpkg.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.83.4.tgz#60af9d787e74276af95e4a1a1507567435bc61d2"
1773 | integrity sha512-tgX4FzmbVqnQmD67ZxQDvI+qFNABrboOQgwsG05E5bA/US42zGajW9AxpECJYiMXVOHmg+d81ICbjb0fsVHskw==
1774 |
1775 | sass-embedded-android-arm@1.83.4:
1776 | version "1.83.4"
1777 | resolved "https://registry.yarnpkg.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.83.4.tgz#960953d094bf28c3e10a2e0ebd14459d4ec6e2d2"
1778 | integrity sha512-9Z4pJAOgEkXa3VDY/o+U6l5XvV0mZTJcSl0l/mSPHihjAHSpLYnOW6+KOWeM8dxqrsqTYcd6COzhanI/a++5Gw==
1779 |
1780 | sass-embedded-android-ia32@1.83.4:
1781 | version "1.83.4"
1782 | resolved "https://registry.yarnpkg.com/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.83.4.tgz#2293cb9920181094edfa477ba503f1f187d21624"
1783 | integrity sha512-RsFOziFqPcfZXdFRULC4Ayzy9aK6R6FwQ411broCjlOBX+b0gurjRadkue3cfUEUR5mmy0KeCbp7zVKPLTK+5Q==
1784 |
1785 | sass-embedded-android-riscv64@1.83.4:
1786 | version "1.83.4"
1787 | resolved "https://registry.yarnpkg.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.83.4.tgz#84f86f2e96955a415343a2f24bae1af7bde26e5f"
1788 | integrity sha512-EHwh0nmQarBBrMRU928eTZkFGx19k/XW2YwbPR4gBVdWLkbTgCA5aGe8hTE6/1zStyx++3nDGvTZ78+b/VvvLg==
1789 |
1790 | sass-embedded-android-x64@1.83.4:
1791 | version "1.83.4"
1792 | resolved "https://registry.yarnpkg.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.83.4.tgz#8db3bb08b941889918f8435a97487cd84e7fd748"
1793 | integrity sha512-0PgQNuPWYy1jEOEPDVsV89KfqOsMLIp9CSbjBY7jRcwRhyVAcigqrUG6bDeNtojHUYKA1kU+Eh/85WxOHUOgBw==
1794 |
1795 | sass-embedded-darwin-arm64@1.83.4:
1796 | version "1.83.4"
1797 | resolved "https://registry.yarnpkg.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.83.4.tgz#d0f3d82eea999ab0ae7ec8abd7fa364f0defc75e"
1798 | integrity sha512-rp2ywymWc3nymnSnAFG5R/8hvxWCsuhK3wOnD10IDlmNB7o4rzKby1c+2ZfpQGowlYGWsWWTgz8FW2qzmZsQRw==
1799 |
1800 | sass-embedded-darwin-x64@1.83.4:
1801 | version "1.83.4"
1802 | resolved "https://registry.yarnpkg.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.83.4.tgz#cd2ac7f209fe823a8a5fc1a064cdfe2833680034"
1803 | integrity sha512-kLkN2lXz9PCgGfDS8Ev5YVcl/V2173L6379en/CaFuJJi7WiyPgBymW7hOmfCt4uO4R1y7CP2Uc08DRtZsBlAA==
1804 |
1805 | sass-embedded-linux-arm64@1.83.4:
1806 | version "1.83.4"
1807 | resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.83.4.tgz#057adf6e337357787331d40714cb8bba4a96dafe"
1808 | integrity sha512-E0zjsZX2HgESwyqw31EHtI39DKa7RgK7nvIhIRco1d0QEw227WnoR9pjH3M/ZQy4gQj3GKilOFHM5Krs/omeIA==
1809 |
1810 | sass-embedded-linux-arm@1.83.4:
1811 | version "1.83.4"
1812 | resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.83.4.tgz#aea8b56f3844633f0bfaf13e0694c79511218fc0"
1813 | integrity sha512-nL90ryxX2lNmFucr9jYUyHHx21AoAgdCL1O5Ltx2rKg2xTdytAGHYo2MT5S0LIeKLa/yKP/hjuSvrbICYNDvtA==
1814 |
1815 | sass-embedded-linux-ia32@1.83.4:
1816 | version "1.83.4"
1817 | resolved "https://registry.yarnpkg.com/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.83.4.tgz#2cedba9f41be61ded3cede5abd16f8ec163d7f46"
1818 | integrity sha512-ew5HpchSzgAYbQoriRh8QhlWn5Kw2nQ2jHoV9YLwGKe3fwwOWA0KDedssvDv7FWnY/FCqXyymhLd6Bxae4Xquw==
1819 |
1820 | sass-embedded-linux-musl-arm64@1.83.4:
1821 | version "1.83.4"
1822 | resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.83.4.tgz#1c5f50c9df93abce7d5ffb4d86eed65b8ffba2f4"
1823 | integrity sha512-IzMgalf6MZOxgp4AVCgsaWAFDP/IVWOrgVXxkyhw29fyAEoSWBJH4k87wyPhEtxSuzVHLxKNbc8k3UzdWmlBFg==
1824 |
1825 | sass-embedded-linux-musl-arm@1.83.4:
1826 | version "1.83.4"
1827 | resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.83.4.tgz#00f241dbc750ee73242bfde1ec5d64ef2d5d7956"
1828 | integrity sha512-0RrJRwMrmm+gG0VOB5b5Cjs7Sd+lhqpQJa6EJNEaZHljJokEfpE5GejZsGMRMIQLxEvVphZnnxl6sonCGFE/QQ==
1829 |
1830 | sass-embedded-linux-musl-ia32@1.83.4:
1831 | version "1.83.4"
1832 | resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.83.4.tgz#27537a309d39f8e35a7dba34a3edc29a3ee16adf"
1833 | integrity sha512-LLb4lYbcxPzX4UaJymYXC+WwokxUlfTJEFUv5VF0OTuSsHAGNRs/rslPtzVBTvMeG9TtlOQDhku1F7G6iaDotA==
1834 |
1835 | sass-embedded-linux-musl-riscv64@1.83.4:
1836 | version "1.83.4"
1837 | resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.83.4.tgz#a32edf2ddb7f7d9b526e971e80cadef1e025cce8"
1838 | integrity sha512-zoKlPzD5Z13HKin1UGR74QkEy+kZEk2AkGX5RelRG494mi+IWwRuWCppXIovor9+BQb9eDWPYPoMVahwN5F7VA==
1839 |
1840 | sass-embedded-linux-musl-x64@1.83.4:
1841 | version "1.83.4"
1842 | resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.83.4.tgz#668b90b80bf35830c2f1ea2a47557d5e60842598"
1843 | integrity sha512-hB8+/PYhfEf2zTIcidO5Bpof9trK6WJjZ4T8g2MrxQh8REVtdPcgIkoxczRynqybf9+fbqbUwzXtiUao2GV+vQ==
1844 |
1845 | sass-embedded-linux-riscv64@1.83.4:
1846 | version "1.83.4"
1847 | resolved "https://registry.yarnpkg.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.83.4.tgz#b7718df2adf1cbcb4c26609215018dd2e8bab595"
1848 | integrity sha512-83fL4n+oeDJ0Y4KjASmZ9jHS1Vl9ESVQYHMhJE0i4xDi/P3BNarm2rsKljq/QtrwGpbqwn8ujzOu7DsNCMDSHA==
1849 |
1850 | sass-embedded-linux-x64@1.83.4:
1851 | version "1.83.4"
1852 | resolved "https://registry.yarnpkg.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.83.4.tgz#52e61bd582dfc56b8f638f2b9cfdb8a53db1e57e"
1853 | integrity sha512-NlnGdvCmTD5PK+LKXlK3sAuxOgbRIEoZfnHvxd157imCm/s2SYF/R28D0DAAjEViyI8DovIWghgbcqwuertXsA==
1854 |
1855 | sass-embedded-win32-arm64@1.83.4:
1856 | version "1.83.4"
1857 | resolved "https://registry.yarnpkg.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.83.4.tgz#b6ca8f65177e24770e87e43ffea5868fea34de27"
1858 | integrity sha512-J2BFKrEaeSrVazU2qTjyQdAk+MvbzJeTuCET0uAJEXSKtvQ3AzxvzndS7LqkDPbF32eXAHLw8GVpwcBwKbB3Uw==
1859 |
1860 | sass-embedded-win32-ia32@1.83.4:
1861 | version "1.83.4"
1862 | resolved "https://registry.yarnpkg.com/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.83.4.tgz#94f8da72e253532f8d857516b99e1caf61e7b08f"
1863 | integrity sha512-uPAe9T/5sANFhJS5dcfAOhOJy8/l2TRYG4r+UO3Wp4yhqbN7bggPvY9c7zMYS0OC8tU/bCvfYUDFHYMCl91FgA==
1864 |
1865 | sass-embedded-win32-x64@1.83.4:
1866 | version "1.83.4"
1867 | resolved "https://registry.yarnpkg.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.83.4.tgz#2179d4e2fc2f9086aecd64209a2d84f7d8e9edbe"
1868 | integrity sha512-C9fkDY0jKITdJFij4UbfPFswxoXN9O/Dr79v17fJnstVwtUojzVJWKHUXvF0Zg2LIR7TCc4ju3adejKFxj7ueA==
1869 |
1870 | sass-embedded@^1.83.4:
1871 | version "1.83.4"
1872 | resolved "https://registry.yarnpkg.com/sass-embedded/-/sass-embedded-1.83.4.tgz#9b05cdc22ae71a1b27b5996a39054ba59bebc04a"
1873 | integrity sha512-Hf2burRA/y5PGxsg6jB9UpoK/xZ6g/pgrkOcdl6j+rRg1Zj8XhGKZ1MTysZGtTPUUmiiErqzkP5+Kzp95yv9GQ==
1874 | dependencies:
1875 | "@bufbuild/protobuf" "^2.0.0"
1876 | buffer-builder "^0.2.0"
1877 | colorjs.io "^0.5.0"
1878 | immutable "^5.0.2"
1879 | rxjs "^7.4.0"
1880 | supports-color "^8.1.1"
1881 | sync-child-process "^1.0.2"
1882 | varint "^6.0.0"
1883 | optionalDependencies:
1884 | sass-embedded-android-arm "1.83.4"
1885 | sass-embedded-android-arm64 "1.83.4"
1886 | sass-embedded-android-ia32 "1.83.4"
1887 | sass-embedded-android-riscv64 "1.83.4"
1888 | sass-embedded-android-x64 "1.83.4"
1889 | sass-embedded-darwin-arm64 "1.83.4"
1890 | sass-embedded-darwin-x64 "1.83.4"
1891 | sass-embedded-linux-arm "1.83.4"
1892 | sass-embedded-linux-arm64 "1.83.4"
1893 | sass-embedded-linux-ia32 "1.83.4"
1894 | sass-embedded-linux-musl-arm "1.83.4"
1895 | sass-embedded-linux-musl-arm64 "1.83.4"
1896 | sass-embedded-linux-musl-ia32 "1.83.4"
1897 | sass-embedded-linux-musl-riscv64 "1.83.4"
1898 | sass-embedded-linux-musl-x64 "1.83.4"
1899 | sass-embedded-linux-riscv64 "1.83.4"
1900 | sass-embedded-linux-x64 "1.83.4"
1901 | sass-embedded-win32-arm64 "1.83.4"
1902 | sass-embedded-win32-ia32 "1.83.4"
1903 | sass-embedded-win32-x64 "1.83.4"
1904 |
1905 | scheduler@^0.25.0:
1906 | version "0.25.0"
1907 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015"
1908 | integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==
1909 |
1910 | semver@^6.3.1:
1911 | version "6.3.1"
1912 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
1913 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
1914 |
1915 | semver@^7.5.4:
1916 | version "7.5.4"
1917 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
1918 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
1919 | dependencies:
1920 | lru-cache "^6.0.0"
1921 |
1922 | shebang-command@^2.0.0:
1923 | version "2.0.0"
1924 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1925 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1926 | dependencies:
1927 | shebang-regex "^3.0.0"
1928 |
1929 | shebang-regex@^3.0.0:
1930 | version "3.0.0"
1931 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1932 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1933 |
1934 | signal-exit@^3.0.2, signal-exit@^3.0.7:
1935 | version "3.0.7"
1936 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
1937 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
1938 |
1939 | slash@^3.0.0:
1940 | version "3.0.0"
1941 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
1942 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
1943 |
1944 | slice-ansi@^5.0.0:
1945 | version "5.0.0"
1946 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
1947 | integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
1948 | dependencies:
1949 | ansi-styles "^6.0.0"
1950 | is-fullwidth-code-point "^4.0.0"
1951 |
1952 | source-map-js@^1.2.1:
1953 | version "1.2.1"
1954 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
1955 | integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
1956 |
1957 | string-argv@0.3.2:
1958 | version "0.3.2"
1959 | resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
1960 | integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
1961 |
1962 | string-width@^5.0.0, string-width@^5.0.1:
1963 | version "5.1.2"
1964 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
1965 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
1966 | dependencies:
1967 | eastasianwidth "^0.2.0"
1968 | emoji-regex "^9.2.2"
1969 | strip-ansi "^7.0.1"
1970 |
1971 | strip-ansi@^6.0.1:
1972 | version "6.0.1"
1973 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1974 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1975 | dependencies:
1976 | ansi-regex "^5.0.1"
1977 |
1978 | strip-ansi@^7.0.1:
1979 | version "7.1.0"
1980 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
1981 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
1982 | dependencies:
1983 | ansi-regex "^6.0.1"
1984 |
1985 | strip-final-newline@^3.0.0:
1986 | version "3.0.0"
1987 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
1988 | integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
1989 |
1990 | strip-json-comments@^3.1.1:
1991 | version "3.1.1"
1992 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1993 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1994 |
1995 | supports-color@^7.1.0:
1996 | version "7.2.0"
1997 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1998 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1999 | dependencies:
2000 | has-flag "^4.0.0"
2001 |
2002 | supports-color@^8.1.1:
2003 | version "8.1.1"
2004 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
2005 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
2006 | dependencies:
2007 | has-flag "^4.0.0"
2008 |
2009 | sync-child-process@^1.0.2:
2010 | version "1.0.2"
2011 | resolved "https://registry.yarnpkg.com/sync-child-process/-/sync-child-process-1.0.2.tgz#45e7c72e756d1243e80b547ea2e17957ab9e367f"
2012 | integrity sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==
2013 | dependencies:
2014 | sync-message-port "^1.0.0"
2015 |
2016 | sync-message-port@^1.0.0:
2017 | version "1.1.3"
2018 | resolved "https://registry.yarnpkg.com/sync-message-port/-/sync-message-port-1.1.3.tgz#6055c565ee8c81d2f9ee5aae7db757e6d9088c0c"
2019 | integrity sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==
2020 |
2021 | text-table@^0.2.0:
2022 | version "0.2.0"
2023 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
2024 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
2025 |
2026 | to-regex-range@^5.0.1:
2027 | version "5.0.1"
2028 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2029 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2030 | dependencies:
2031 | is-number "^7.0.0"
2032 |
2033 | ts-api-utils@^1.0.1:
2034 | version "1.0.2"
2035 | resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.2.tgz#7c094f753b6705ee4faee25c3c684ade52d66d99"
2036 | integrity sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==
2037 |
2038 | tslib@^2.1.0:
2039 | version "2.8.1"
2040 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
2041 | integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
2042 |
2043 | type-check@^0.4.0, type-check@~0.4.0:
2044 | version "0.4.0"
2045 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
2046 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
2047 | dependencies:
2048 | prelude-ls "^1.2.1"
2049 |
2050 | type-fest@^0.20.2:
2051 | version "0.20.2"
2052 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
2053 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
2054 |
2055 | type-fest@^1.0.2:
2056 | version "1.4.0"
2057 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
2058 | integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
2059 |
2060 | typescript@^5.7.3:
2061 | version "5.7.3"
2062 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e"
2063 | integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==
2064 |
2065 | update-browserslist-db@^1.1.1:
2066 | version "1.1.2"
2067 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580"
2068 | integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==
2069 | dependencies:
2070 | escalade "^3.2.0"
2071 | picocolors "^1.1.1"
2072 |
2073 | uri-js@^4.2.2:
2074 | version "4.4.1"
2075 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
2076 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
2077 | dependencies:
2078 | punycode "^2.1.0"
2079 |
2080 | use-sync-external-store@^1.2.0:
2081 | version "1.2.0"
2082 | resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
2083 | integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
2084 |
2085 | varint@^6.0.0:
2086 | version "6.0.0"
2087 | resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0"
2088 | integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==
2089 |
2090 | vite@^6.0.11:
2091 | version "6.0.11"
2092 | resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.11.tgz#224497e93e940b34c3357c9ebf2ec20803091ed8"
2093 | integrity sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==
2094 | dependencies:
2095 | esbuild "^0.24.2"
2096 | postcss "^8.4.49"
2097 | rollup "^4.23.0"
2098 | optionalDependencies:
2099 | fsevents "~2.3.3"
2100 |
2101 | which@^2.0.1:
2102 | version "2.0.2"
2103 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
2104 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2105 | dependencies:
2106 | isexe "^2.0.0"
2107 |
2108 | wrap-ansi@^8.0.1, wrap-ansi@^8.1.0:
2109 | version "8.1.0"
2110 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
2111 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
2112 | dependencies:
2113 | ansi-styles "^6.1.0"
2114 | string-width "^5.0.1"
2115 | strip-ansi "^7.0.1"
2116 |
2117 | wrappy@1:
2118 | version "1.0.2"
2119 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2120 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
2121 |
2122 | yallist@^3.0.2:
2123 | version "3.1.1"
2124 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
2125 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
2126 |
2127 | yallist@^4.0.0:
2128 | version "4.0.0"
2129 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
2130 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
2131 |
2132 | yaml@2.3.1:
2133 | version "2.3.1"
2134 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b"
2135 | integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==
2136 |
2137 | yocto-queue@^0.1.0:
2138 | version "0.1.0"
2139 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
2140 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
2141 |
--------------------------------------------------------------------------------