├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
└── workflows
│ ├── tauri.yaml
│ └── test.yaml
├── .gitignore
├── .vscode
└── extensions.json
├── LICENSE
├── README.md
├── index.html
├── package.json
├── public
├── tauri.svg
└── vite.svg
├── src-tauri
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── build.rs
├── gooey_config.json
├── icons
│ ├── 128x128.png
│ ├── 128x128@2x.png
│ ├── 32x32.png
│ ├── Square107x107Logo.png
│ ├── Square142x142Logo.png
│ ├── Square150x150Logo.png
│ ├── Square284x284Logo.png
│ ├── Square30x30Logo.png
│ ├── Square310x310Logo.png
│ ├── Square44x44Logo.png
│ ├── Square71x71Logo.png
│ ├── Square89x89Logo.png
│ ├── StoreLogo.png
│ ├── icon.icns
│ ├── icon.ico
│ └── icon.png
├── src
│ └── main.rs
└── tauri.conf.json
├── src
├── App.css
├── App.tsx
├── Gpu.ts
├── assets
│ └── react.svg
├── commands
│ ├── convert.test.ts
│ ├── convert.ts
│ ├── docker.test.ts
│ ├── docker.ts
│ ├── dreambooth.test.ts
│ ├── dreambooth.ts
│ └── runner.ts
├── components
│ ├── ConfigTrainer.tsx
│ ├── Gallery.tsx
│ ├── ImagePicker.tsx
│ ├── Trainer.tsx
│ ├── Training.tsx
│ └── utils.ts
├── docker.ts
├── main.tsx
├── state.ts
├── style.css
├── vite-env.d.ts
└── vite.config.ts
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.ts
└── yarn.lock
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 | - GPU: [eg. GTX 3060]
31 |
32 | **Additional context**
33 | Add any other context about the problem here.
34 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/workflows/tauri.yaml:
--------------------------------------------------------------------------------
1 | name: Release
2 | on:
3 | push:
4 | tags:
5 | - 'v*'
6 | workflow_dispatch:
7 |
8 | jobs:
9 | release:
10 | strategy:
11 | fail-fast: false
12 | matrix:
13 | platform: [ubuntu-latest, windows-latest]
14 | runs-on: ${{ matrix.platform }}
15 | steps:
16 | - name: Checkout repository
17 | uses: actions/checkout@v2
18 |
19 | - name: Node.js setup
20 | uses: actions/setup-node@v1
21 | with:
22 | node-version: 16
23 |
24 | - name: Rust setup
25 | uses: actions-rs/toolchain@v1
26 | with:
27 | toolchain: stable
28 |
29 | - name: Install dependencies (ubuntu only)
30 | if: matrix.platform == 'ubuntu-latest'
31 | run: |
32 | sudo apt-get update
33 | sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf
34 | - name: Install app dependencies and build web
35 | run: yarn && yarn build
36 |
37 | - name: Build the app
38 | uses: tauri-apps/tauri-action@v0
39 |
40 | env:
41 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
42 | with:
43 | tagName: v__VERSION__ # tauri-action replaces \_\_VERSION\_\_ with the app version
44 | releaseName: 'v__VERSION__'
45 | releaseBody: 'See the assets to download this version and install.'
46 | releaseDraft: false
47 | prerelease: false
48 |
--------------------------------------------------------------------------------
/.github/workflows/test.yaml:
--------------------------------------------------------------------------------
1 | name: "test"
2 | on:
3 | push:
4 | workflow_dispatch:
5 |
6 | jobs:
7 | test-tauri:
8 | strategy:
9 | fail-fast: false
10 | matrix:
11 | platform: [macos-latest, ubuntu-20.04, windows-latest]
12 |
13 | runs-on: ${{ matrix.platform }}
14 | steps:
15 | - uses: actions/checkout@v2
16 | - name: setup node
17 | uses: actions/setup-node@v1
18 | with:
19 | node-version: 16
20 | - name: install Rust stable
21 | uses: actions-rs/toolchain@v1
22 | with:
23 | toolchain: stable
24 | - name: install dependencies (ubuntu only)
25 | if: matrix.platform == 'ubuntu-20.04'
26 | run: |
27 | sudo apt-get update
28 | sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf
29 | - name: build the app and test it
30 | run: yarn && yarn test
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"]
3 | }
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 smy20011
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Dreambooth Gui
2 |
3 | Provides a easy-to-use gui for users to train Dreambooth with custom images. This
4 | Gui supports any NVIDIA card with >10GB VRAM.
5 |
6 | 
7 |
8 | ## Screenshots
9 |
10 | 
11 | 
12 | 
13 |
14 |
15 |
16 | ## Highlights
17 |
18 | 1. Automatically decide training params that fit your available VRAM.
19 | 2. Easy to use Gui for you to select images.
20 | 3. Support prior preservation training with class images.
21 | 4. Automatically cache models.
22 |
23 | ## Install (Windows)
24 |
25 | 1. Download and install docker from https://www.docker.com/
26 | 2. Setup WSL2 for windows. https://learn.microsoft.com/en-us/windows/wsl/install
27 | 3. If you find 'WSL 2 installation is incomplete' when starting docker, you can follow this video to fix it. https://www.youtube.com/watch?v=Ffzud5xLH4c
28 | 4. [Download](https://github.com/smy20011/dreambooth-gui/releases/latest) and install dreambooth-gui_*_x64_en-US.msi
29 | from [release page](https://github.com/smy20011/dreambooth-gui/releases/latest).
30 | 5. Run the dreambooth-gui as administrator.
31 |
32 | ## Install (Linux)
33 |
34 | 1. Download and install docker from https://www.docker.com/
35 | 2. Download AppImage from [release page](https://github.com/smy20011/dreambooth-gui/releases/latest).
36 | 3. Run `chmod +x dreambooth-gui_*amd64.AppImage`
37 | 4. Run `sudo dreambooth-gui_*amd64.AppImage`
38 |
39 | ## FAQs
40 |
41 | 1. Failed to create directory
42 |
43 | Please make sure you have the latest verion of GUI. This is a old bug that fixed in v0.1.3
44 |
45 | 2. PIL.UnidentifiedImageEnnon: cannot identify image file
46 |
47 | Make sure the instance image folder only have image.
48 |
49 | 3. Read-only file system error
50 |
51 | Make sure you have enough space in C(or home folder) before running the Gui.
52 |
53 | 4. Train with SD v2
54 |
55 | Training with SD v2 is supported. However, you need to type `stabilityai/stable-diffusion-2` as model name. Local v2 training is not supported right now.
56 |
57 | 5. I have other questions!
58 |
59 | Please use the [discussion](https://github.com/smy20011/dreambooth-gui/discussions) page for Q&A.
60 |
61 | I will convert FAQs to a bug if necessary. I perfer to keep the issue section clean but keep getting questions
62 | that I answered before.
63 |
64 |
65 | ## Roadmap
66 |
67 | - [X] Refactor the state management.
68 | - [X] Better error handling to cover FAQs.
69 | - [ ] Allow advanced customization
70 | - [X] Load local model.
71 | - [ ] Save/Load config for users.
72 | - [ ] Save model / pics in places other than $APP_DIR
73 | - [ ] Better training progress report.
74 | - [X] Create a dialog when training finished.
75 | - [ ] Progress bar.
76 | - [X] Support model converstion.
77 |
78 | ## Additional Resources
79 |
80 | 1. Someone in japan write a [doc](https://gigazine.net/gsc_news/en/20221103-dreambooth-gui/) regarding how to use it.
81 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Tauri + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dreambooth-gui",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "license": "MIT",
7 | "scripts": {
8 | "dev": "vite",
9 | "build": "tsc && vite build",
10 | "preview": "vite preview",
11 | "tauri": "tauri",
12 | "test": "vitest"
13 | },
14 | "dependencies": {
15 | "@emotion/react": "^11.10.4",
16 | "@emotion/styled": "^11.10.4",
17 | "@mui/material": "^5.10.8",
18 | "@tauri-apps/api": "^1.1.0",
19 | "bootstrap": "^5.2.2",
20 | "jotai": "^1.8.6",
21 | "react": "^18.2.0",
22 | "react-bootstrap": "^2.5.0",
23 | "react-dom": "^18.2.0",
24 | "react-hook-form": "^7.36.1"
25 | },
26 | "devDependencies": {
27 | "@tauri-apps/cli": "^1.1.0",
28 | "@types/lodash": "^4.14.186",
29 | "@types/node": "^18.7.10",
30 | "@types/react": "^18.0.15",
31 | "@types/react-dom": "^18.0.6",
32 | "@vitejs/plugin-react": "^2.0.0",
33 | "lodash": "^4.17.21",
34 | "typescript": "^4.6.4",
35 | "vite": "^3.0.2",
36 | "vitest": "^0.24.3"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/public/tauri.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src-tauri/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | # will have compiled files and executables
3 | /target/
4 |
5 |
--------------------------------------------------------------------------------
/src-tauri/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "dreambooth-gui"
3 | version = "0.0.0"
4 | description = "A Tauri App"
5 | authors = ["you"]
6 | license = ""
7 | repository = ""
8 | edition = "2021"
9 | rust-version = "1.57"
10 |
11 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
12 |
13 | [build-dependencies]
14 | tauri-build = { version = "1.1", features = [] }
15 |
16 | [dependencies]
17 | serde_json = "1.0"
18 | serde = { version = "1.0", features = ["derive"] }
19 | tauri = { version = "1.1", features = ["api-all"] }
20 | nvml-wrapper = { version = "0.8.0", features = ["serde"] }
21 |
22 | [features]
23 | # by default Tauri runs in production mode
24 | # when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL
25 | default = [ "custom-protocol"]
26 | # this feature is used used for production builds where `devPath` points to the filesystem
27 | # DO NOT remove this
28 | custom-protocol = [ "tauri/custom-protocol" ]
29 |
--------------------------------------------------------------------------------
/src-tauri/build.rs:
--------------------------------------------------------------------------------
1 | fn main() {
2 | tauri_build::build()
3 | }
4 |
--------------------------------------------------------------------------------
/src-tauri/gooey_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "language": "english",
3 | "target": "'/home/smy/miniconda3/envs/dev/bin/python' -u 'train_dreambooth.py'",
4 | "suppress_gooey_flag": false,
5 | "program_name": "dreambooth",
6 | "program_description": "Simple example of a training script.",
7 | "sidebar_title": "Actions",
8 | "default_size": [
9 | 610,
10 | 530
11 | ],
12 | "auto_start": false,
13 | "show_advanced": true,
14 | "run_validators": true,
15 | "encoding": "utf-8",
16 | "show_stop_warning": true,
17 | "show_success_modal": true,
18 | "show_failure_modal": true,
19 | "force_stop_is_error": true,
20 | "poll_external_updates": false,
21 | "return_to_config": false,
22 | "show_restart_button": true,
23 | "requires_shell": true,
24 | "menu": [],
25 | "clear_before_run": false,
26 | "fullscreen": false,
27 | "use_legacy_titles": true,
28 | "num_required_cols": 2,
29 | "num_optional_cols": 2,
30 | "manual_start": false,
31 | "monospace_display": false,
32 | "image_dir": "::gooey/default",
33 | "language_dir": "/home/smy/miniconda3/envs/dev/lib/python3.9/site-packages/gooey/languages",
34 | "progress_regex": null,
35 | "progress_expr": null,
36 | "hide_progress_msg": false,
37 | "timing_options": {
38 | "show_time_remaining": false,
39 | "hide_time_remaining_on_complete": true
40 | },
41 | "disable_progress_bar_animation": false,
42 | "disable_stop_button": false,
43 | "navigation": "SIDEBAR",
44 | "show_sidebar": false,
45 | "tabbed_groups": true,
46 | "group_by_type": true,
47 | "body_bg_color": "#f0f0f0",
48 | "header_bg_color": "#ffffff",
49 | "header_height": 80,
50 | "header_show_title": true,
51 | "header_show_subtitle": true,
52 | "header_image_center": false,
53 | "footer_bg_color": "#f0f0f0",
54 | "sidebar_bg_color": "#f2f2f2",
55 | "terminal_panel_color": "#F0F0F0",
56 | "terminal_font_color": "#000000",
57 | "terminal_font_family": null,
58 | "terminal_font_weight": 400,
59 | "terminal_font_size": null,
60 | "richtext_controls": false,
61 | "error_color": "#ea7878",
62 | "layout": "standard",
63 | "widgets": {
64 | "dreambooth": {
65 | "command": "::gooey/default",
66 | "name": "dreambooth",
67 | "help": null,
68 | "description": "",
69 | "contents": [
70 | {
71 | "name": "Basic",
72 | "items": [
73 | {
74 | "id": "--training_folder",
75 | "type": "TextField",
76 | "cli_type": "optional",
77 | "required": true,
78 | "data": {
79 | "display_name": "training_folder",
80 | "help": "Path to a folder that store all training data.",
81 | "required": true,
82 | "nargs": "",
83 | "commands": [
84 | "--training_folder"
85 | ],
86 | "choices": [],
87 | "default": "/home/smy/Downloads/cyan",
88 | "dest": "training_folder"
89 | },
90 | "options": {
91 | "error_color": "#ea7878",
92 | "label_color": "#000000",
93 | "help_color": "#363636",
94 | "full_width": false,
95 | "validator": {
96 | "type": "ExpressionValidator",
97 | "test": "user_input and not user_input.isspace()",
98 | "message": "This field is required"
99 | },
100 | "external_validator": {
101 | "cmd": ""
102 | }
103 | }
104 | },
105 | {
106 | "id": "--pretrained_model_name_or_path",
107 | "type": "TextField",
108 | "cli_type": "optional",
109 | "required": true,
110 | "data": {
111 | "display_name": "pretrained_model_name_or_path",
112 | "help": "Path to pretrained model or model identifier from huggingface.co/models.",
113 | "required": true,
114 | "nargs": "",
115 | "commands": [
116 | "--pretrained_model_name_or_path"
117 | ],
118 | "choices": [],
119 | "default": "hakurei/waifu-diffusion",
120 | "dest": "pretrained_model_name_or_path"
121 | },
122 | "options": {
123 | "error_color": "#ea7878",
124 | "label_color": "#000000",
125 | "help_color": "#363636",
126 | "full_width": false,
127 | "validator": {
128 | "type": "ExpressionValidator",
129 | "test": "user_input and not user_input.isspace()",
130 | "message": "This field is required"
131 | },
132 | "external_validator": {
133 | "cmd": ""
134 | }
135 | }
136 | },
137 | {
138 | "id": "--instance_data_dir",
139 | "type": "TextField",
140 | "cli_type": "optional",
141 | "required": true,
142 | "data": {
143 | "display_name": "instance_data_dir",
144 | "help": "A folder containing the training data of instance images.",
145 | "required": true,
146 | "nargs": "",
147 | "commands": [
148 | "--instance_data_dir"
149 | ],
150 | "choices": [],
151 | "default": "/home/smy/Downloads/cyan/instance",
152 | "dest": "instance_data_dir"
153 | },
154 | "options": {
155 | "error_color": "#ea7878",
156 | "label_color": "#000000",
157 | "help_color": "#363636",
158 | "full_width": false,
159 | "validator": {
160 | "type": "ExpressionValidator",
161 | "test": "user_input and not user_input.isspace()",
162 | "message": "This field is required"
163 | },
164 | "external_validator": {
165 | "cmd": ""
166 | }
167 | }
168 | },
169 | {
170 | "id": "--instance_prompt",
171 | "type": "TextField",
172 | "cli_type": "optional",
173 | "required": false,
174 | "data": {
175 | "display_name": "instance_prompt",
176 | "help": "The prompt with identifier specifing the instance",
177 | "required": false,
178 | "nargs": "",
179 | "commands": [
180 | "--instance_prompt"
181 | ],
182 | "choices": [],
183 | "default": "a sks girl",
184 | "dest": "instance_prompt"
185 | },
186 | "options": {
187 | "error_color": "#ea7878",
188 | "label_color": "#000000",
189 | "help_color": "#363636",
190 | "full_width": false,
191 | "validator": {
192 | "type": "ExpressionValidator",
193 | "test": "True",
194 | "message": ""
195 | },
196 | "external_validator": {
197 | "cmd": ""
198 | }
199 | }
200 | },
201 | {
202 | "id": "--resolution",
203 | "type": "TextField",
204 | "cli_type": "optional",
205 | "required": false,
206 | "data": {
207 | "display_name": "resolution",
208 | "help": "The resolution for input images, all the images in the train/validation dataset will be resized to this resolution",
209 | "required": false,
210 | "nargs": "",
211 | "commands": [
212 | "--resolution"
213 | ],
214 | "choices": [],
215 | "default": 512,
216 | "dest": "resolution"
217 | },
218 | "options": {
219 | "error_color": "#ea7878",
220 | "label_color": "#000000",
221 | "help_color": "#363636",
222 | "full_width": false,
223 | "validator": {
224 | "type": "ExpressionValidator",
225 | "test": "True",
226 | "message": ""
227 | },
228 | "external_validator": {
229 | "cmd": ""
230 | }
231 | }
232 | },
233 | {
234 | "id": "--auth_token",
235 | "type": "TextField",
236 | "cli_type": "optional",
237 | "required": true,
238 | "data": {
239 | "display_name": "auth_token",
240 | "help": "Huggingface auth token to access model, https://huggingface.co/settings/tokens",
241 | "required": true,
242 | "nargs": "",
243 | "commands": [
244 | "--auth_token"
245 | ],
246 | "choices": [],
247 | "default": "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",
248 | "dest": "auth_token"
249 | },
250 | "options": {
251 | "error_color": "#ea7878",
252 | "label_color": "#000000",
253 | "help_color": "#363636",
254 | "full_width": false,
255 | "validator": {
256 | "type": "ExpressionValidator",
257 | "test": "user_input and not user_input.isspace()",
258 | "message": "This field is required"
259 | },
260 | "external_validator": {
261 | "cmd": ""
262 | }
263 | }
264 | }
265 | ],
266 | "groups": [],
267 | "description": "Basic dreambooth training config.",
268 | "options": {
269 | "label_color": "#000000",
270 | "description_color": "#363636",
271 | "legacy": {
272 | "required_cols": 2,
273 | "optional_cols": 2
274 | },
275 | "columns": 2,
276 | "padding": 10,
277 | "show_border": false
278 | }
279 | },
280 | {
281 | "name": "Prior Preservation",
282 | "items": [
283 | {
284 | "id": "--class_data_dir",
285 | "type": "TextField",
286 | "cli_type": "optional",
287 | "required": false,
288 | "data": {
289 | "display_name": "class_data_dir",
290 | "help": "A folder containing the training data of class images.",
291 | "required": false,
292 | "nargs": "",
293 | "commands": [
294 | "--class_data_dir"
295 | ],
296 | "choices": [],
297 | "default": null,
298 | "dest": "class_data_dir"
299 | },
300 | "options": {
301 | "error_color": "#ea7878",
302 | "label_color": "#000000",
303 | "help_color": "#363636",
304 | "full_width": false,
305 | "validator": {
306 | "type": "ExpressionValidator",
307 | "test": "True",
308 | "message": ""
309 | },
310 | "external_validator": {
311 | "cmd": ""
312 | }
313 | }
314 | },
315 | {
316 | "id": "--class_prompt",
317 | "type": "TextField",
318 | "cli_type": "optional",
319 | "required": false,
320 | "data": {
321 | "display_name": "class_prompt",
322 | "help": "The prompt to specify images in the same class as provided intance images.",
323 | "required": false,
324 | "nargs": "",
325 | "commands": [
326 | "--class_prompt"
327 | ],
328 | "choices": [],
329 | "default": null,
330 | "dest": "class_prompt"
331 | },
332 | "options": {
333 | "error_color": "#ea7878",
334 | "label_color": "#000000",
335 | "help_color": "#363636",
336 | "full_width": false,
337 | "validator": {
338 | "type": "ExpressionValidator",
339 | "test": "True",
340 | "message": ""
341 | },
342 | "external_validator": {
343 | "cmd": ""
344 | }
345 | }
346 | },
347 | {
348 | "id": "--with_prior_preservation",
349 | "type": "CheckBox",
350 | "cli_type": "optional",
351 | "required": false,
352 | "data": {
353 | "display_name": "with_prior_preservation",
354 | "help": "Flag to add prior perservation loss.",
355 | "required": false,
356 | "nargs": "",
357 | "commands": [
358 | "--with_prior_preservation"
359 | ],
360 | "choices": [],
361 | "default": false,
362 | "dest": "with_prior_preservation"
363 | },
364 | "options": {
365 | "error_color": "#ea7878",
366 | "label_color": "#000000",
367 | "help_color": "#363636",
368 | "full_width": false,
369 | "validator": {
370 | "type": "ExpressionValidator",
371 | "test": "True",
372 | "message": ""
373 | },
374 | "external_validator": {
375 | "cmd": ""
376 | }
377 | }
378 | },
379 | {
380 | "id": "--prior_loss_weight",
381 | "type": "TextField",
382 | "cli_type": "optional",
383 | "required": false,
384 | "data": {
385 | "display_name": "prior_loss_weight",
386 | "help": "The weight of prior preservation loss.",
387 | "required": false,
388 | "nargs": "",
389 | "commands": [
390 | "--prior_loss_weight"
391 | ],
392 | "choices": [],
393 | "default": 1.0,
394 | "dest": "prior_loss_weight"
395 | },
396 | "options": {
397 | "error_color": "#ea7878",
398 | "label_color": "#000000",
399 | "help_color": "#363636",
400 | "full_width": false,
401 | "validator": {
402 | "type": "ExpressionValidator",
403 | "test": "True",
404 | "message": ""
405 | },
406 | "external_validator": {
407 | "cmd": ""
408 | }
409 | }
410 | },
411 | {
412 | "id": "--num_class_images",
413 | "type": "TextField",
414 | "cli_type": "optional",
415 | "required": false,
416 | "data": {
417 | "display_name": "num_class_images",
418 | "help": "Minimal class images for prior perversation loss. If not have enough images, additional images will be sampled with class_prompt.",
419 | "required": false,
420 | "nargs": "",
421 | "commands": [
422 | "--num_class_images"
423 | ],
424 | "choices": [],
425 | "default": 100,
426 | "dest": "num_class_images"
427 | },
428 | "options": {
429 | "error_color": "#ea7878",
430 | "label_color": "#000000",
431 | "help_color": "#363636",
432 | "full_width": false,
433 | "validator": {
434 | "type": "ExpressionValidator",
435 | "test": "True",
436 | "message": ""
437 | },
438 | "external_validator": {
439 | "cmd": ""
440 | }
441 | }
442 | }
443 | ],
444 | "groups": [],
445 | "description": "Prior-preservation is used to avoid overfitting and language-drift.",
446 | "options": {
447 | "label_color": "#000000",
448 | "description_color": "#363636",
449 | "legacy": {
450 | "required_cols": 2,
451 | "optional_cols": 2
452 | },
453 | "columns": 2,
454 | "padding": 10,
455 | "show_border": false
456 | }
457 | },
458 | {
459 | "name": "Training Config",
460 | "items": [
461 | {
462 | "id": "--train_batch_size",
463 | "type": "TextField",
464 | "cli_type": "optional",
465 | "required": false,
466 | "data": {
467 | "display_name": "train_batch_size",
468 | "help": "Batch size (per device) for the training dataloader.",
469 | "required": false,
470 | "nargs": "",
471 | "commands": [
472 | "--train_batch_size"
473 | ],
474 | "choices": [],
475 | "default": 1,
476 | "dest": "train_batch_size"
477 | },
478 | "options": {
479 | "error_color": "#ea7878",
480 | "label_color": "#000000",
481 | "help_color": "#363636",
482 | "full_width": false,
483 | "validator": {
484 | "type": "ExpressionValidator",
485 | "test": "True",
486 | "message": ""
487 | },
488 | "external_validator": {
489 | "cmd": ""
490 | }
491 | }
492 | },
493 | {
494 | "id": "--sample_batch_size",
495 | "type": "TextField",
496 | "cli_type": "optional",
497 | "required": false,
498 | "data": {
499 | "display_name": "sample_batch_size",
500 | "help": "Batch size (per device) for sampling images.",
501 | "required": false,
502 | "nargs": "",
503 | "commands": [
504 | "--sample_batch_size"
505 | ],
506 | "choices": [],
507 | "default": 1,
508 | "dest": "sample_batch_size"
509 | },
510 | "options": {
511 | "error_color": "#ea7878",
512 | "label_color": "#000000",
513 | "help_color": "#363636",
514 | "full_width": false,
515 | "validator": {
516 | "type": "ExpressionValidator",
517 | "test": "True",
518 | "message": ""
519 | },
520 | "external_validator": {
521 | "cmd": ""
522 | }
523 | }
524 | },
525 | {
526 | "id": "--num_train_epochs",
527 | "type": "TextField",
528 | "cli_type": "optional",
529 | "required": false,
530 | "data": {
531 | "display_name": "num_train_epochs",
532 | "help": null,
533 | "required": false,
534 | "nargs": "",
535 | "commands": [
536 | "--num_train_epochs"
537 | ],
538 | "choices": [],
539 | "default": 1,
540 | "dest": "num_train_epochs"
541 | },
542 | "options": {
543 | "error_color": "#ea7878",
544 | "label_color": "#000000",
545 | "help_color": "#363636",
546 | "full_width": false,
547 | "validator": {
548 | "type": "ExpressionValidator",
549 | "test": "True",
550 | "message": ""
551 | },
552 | "external_validator": {
553 | "cmd": ""
554 | }
555 | }
556 | },
557 | {
558 | "id": "--max_train_steps",
559 | "type": "TextField",
560 | "cli_type": "optional",
561 | "required": false,
562 | "data": {
563 | "display_name": "max_train_steps",
564 | "help": "Total number of training steps to perform. If provided, overrides num_train_epochs.",
565 | "required": false,
566 | "nargs": "",
567 | "commands": [
568 | "--max_train_steps"
569 | ],
570 | "choices": [],
571 | "default": 800,
572 | "dest": "max_train_steps"
573 | },
574 | "options": {
575 | "error_color": "#ea7878",
576 | "label_color": "#000000",
577 | "help_color": "#363636",
578 | "full_width": false,
579 | "validator": {
580 | "type": "ExpressionValidator",
581 | "test": "True",
582 | "message": ""
583 | },
584 | "external_validator": {
585 | "cmd": ""
586 | }
587 | }
588 | },
589 | {
590 | "id": "--gradient_accumulation_steps",
591 | "type": "TextField",
592 | "cli_type": "optional",
593 | "required": false,
594 | "data": {
595 | "display_name": "gradient_accumulation_steps",
596 | "help": "Number of updates steps to accumulate before performing a backward/update pass.",
597 | "required": false,
598 | "nargs": "",
599 | "commands": [
600 | "--gradient_accumulation_steps"
601 | ],
602 | "choices": [],
603 | "default": 1,
604 | "dest": "gradient_accumulation_steps"
605 | },
606 | "options": {
607 | "error_color": "#ea7878",
608 | "label_color": "#000000",
609 | "help_color": "#363636",
610 | "full_width": false,
611 | "validator": {
612 | "type": "ExpressionValidator",
613 | "test": "True",
614 | "message": ""
615 | },
616 | "external_validator": {
617 | "cmd": ""
618 | }
619 | }
620 | },
621 | {
622 | "id": "--gradient_checkpointing",
623 | "type": "CheckBox",
624 | "cli_type": "optional",
625 | "required": false,
626 | "data": {
627 | "display_name": "gradient_checkpointing",
628 | "help": "Whether or not to use gradient checkpointing to save memory at the expense of slower backward pass.",
629 | "required": false,
630 | "nargs": "",
631 | "commands": [
632 | "--gradient_checkpointing"
633 | ],
634 | "choices": [],
635 | "default": true,
636 | "dest": "gradient_checkpointing"
637 | },
638 | "options": {
639 | "error_color": "#ea7878",
640 | "label_color": "#000000",
641 | "help_color": "#363636",
642 | "full_width": false,
643 | "validator": {
644 | "type": "ExpressionValidator",
645 | "test": "True",
646 | "message": ""
647 | },
648 | "external_validator": {
649 | "cmd": ""
650 | }
651 | }
652 | },
653 | {
654 | "id": "--use_8bit_adam",
655 | "type": "CheckBox",
656 | "cli_type": "optional",
657 | "required": false,
658 | "data": {
659 | "display_name": "use_8bit_adam",
660 | "help": "Whether or not to use 8-bit Adam from bitsandbytes.",
661 | "required": false,
662 | "nargs": "",
663 | "commands": [
664 | "--use_8bit_adam"
665 | ],
666 | "choices": [],
667 | "default": true,
668 | "dest": "use_8bit_adam"
669 | },
670 | "options": {
671 | "error_color": "#ea7878",
672 | "label_color": "#000000",
673 | "help_color": "#363636",
674 | "full_width": false,
675 | "validator": {
676 | "type": "ExpressionValidator",
677 | "test": "True",
678 | "message": ""
679 | },
680 | "external_validator": {
681 | "cmd": ""
682 | }
683 | }
684 | },
685 | {
686 | "id": "--mixed_precision",
687 | "type": "Dropdown",
688 | "cli_type": "optional",
689 | "required": false,
690 | "data": {
691 | "display_name": "mixed_precision",
692 | "help": "Whether to use mixed precision. Choosebetween fp16 and bf16 (bfloat16). Bf16 requires PyTorch >= 1.10.and an Nvidia Ampere GPU.",
693 | "required": false,
694 | "nargs": "",
695 | "commands": [
696 | "--mixed_precision"
697 | ],
698 | "choices": [
699 | "no",
700 | "fp16",
701 | "bf16"
702 | ],
703 | "default": "no",
704 | "dest": "mixed_precision"
705 | },
706 | "options": {
707 | "error_color": "#ea7878",
708 | "label_color": "#000000",
709 | "help_color": "#363636",
710 | "full_width": false,
711 | "validator": {
712 | "type": "ExpressionValidator",
713 | "test": "True",
714 | "message": ""
715 | },
716 | "external_validator": {
717 | "cmd": ""
718 | }
719 | }
720 | },
721 | {
722 | "id": "--local_rank",
723 | "type": "TextField",
724 | "cli_type": "optional",
725 | "required": false,
726 | "data": {
727 | "display_name": "local_rank",
728 | "help": "For distributed training: local_rank",
729 | "required": false,
730 | "nargs": "",
731 | "commands": [
732 | "--local_rank"
733 | ],
734 | "choices": [],
735 | "default": -1,
736 | "dest": "local_rank"
737 | },
738 | "options": {
739 | "error_color": "#ea7878",
740 | "label_color": "#000000",
741 | "help_color": "#363636",
742 | "full_width": false,
743 | "validator": {
744 | "type": "ExpressionValidator",
745 | "test": "True",
746 | "message": ""
747 | },
748 | "external_validator": {
749 | "cmd": ""
750 | }
751 | }
752 | }
753 | ],
754 | "groups": [],
755 | "description": "Basic config for training",
756 | "options": {
757 | "label_color": "#000000",
758 | "description_color": "#363636",
759 | "legacy": {
760 | "required_cols": 2,
761 | "optional_cols": 2
762 | },
763 | "columns": 2,
764 | "padding": 10,
765 | "show_border": false
766 | }
767 | },
768 | {
769 | "name": "Learning rate config",
770 | "items": [
771 | {
772 | "id": "--learning_rate",
773 | "type": "TextField",
774 | "cli_type": "optional",
775 | "required": false,
776 | "data": {
777 | "display_name": "learning_rate",
778 | "help": "Initial learning rate (after the potential warmup period) to use.",
779 | "required": false,
780 | "nargs": "",
781 | "commands": [
782 | "--learning_rate"
783 | ],
784 | "choices": [],
785 | "default": 5e-06,
786 | "dest": "learning_rate"
787 | },
788 | "options": {
789 | "error_color": "#ea7878",
790 | "label_color": "#000000",
791 | "help_color": "#363636",
792 | "full_width": false,
793 | "validator": {
794 | "type": "ExpressionValidator",
795 | "test": "True",
796 | "message": ""
797 | },
798 | "external_validator": {
799 | "cmd": ""
800 | }
801 | }
802 | },
803 | {
804 | "id": "--scale_lr",
805 | "type": "CheckBox",
806 | "cli_type": "optional",
807 | "required": false,
808 | "data": {
809 | "display_name": "scale_lr",
810 | "help": "Scale the learning rate by the number of GPUs, gradient accumulation steps, and batch size.",
811 | "required": false,
812 | "nargs": "",
813 | "commands": [
814 | "--scale_lr"
815 | ],
816 | "choices": [],
817 | "default": false,
818 | "dest": "scale_lr"
819 | },
820 | "options": {
821 | "error_color": "#ea7878",
822 | "label_color": "#000000",
823 | "help_color": "#363636",
824 | "full_width": false,
825 | "validator": {
826 | "type": "ExpressionValidator",
827 | "test": "True",
828 | "message": ""
829 | },
830 | "external_validator": {
831 | "cmd": ""
832 | }
833 | }
834 | },
835 | {
836 | "id": "--lr_scheduler",
837 | "type": "TextField",
838 | "cli_type": "optional",
839 | "required": false,
840 | "data": {
841 | "display_name": "lr_scheduler",
842 | "help": "The scheduler type to use. Choose between [\"linear\", \"cosine\", \"cosine_with_restarts\", \"polynomial\", \"constant\", \"constant_with_warmup\"]",
843 | "required": false,
844 | "nargs": "",
845 | "commands": [
846 | "--lr_scheduler"
847 | ],
848 | "choices": [],
849 | "default": "constant",
850 | "dest": "lr_scheduler"
851 | },
852 | "options": {
853 | "error_color": "#ea7878",
854 | "label_color": "#000000",
855 | "help_color": "#363636",
856 | "full_width": false,
857 | "validator": {
858 | "type": "ExpressionValidator",
859 | "test": "True",
860 | "message": ""
861 | },
862 | "external_validator": {
863 | "cmd": ""
864 | }
865 | }
866 | },
867 | {
868 | "id": "--lr_warmup_steps",
869 | "type": "TextField",
870 | "cli_type": "optional",
871 | "required": false,
872 | "data": {
873 | "display_name": "lr_warmup_steps",
874 | "help": "Number of steps for the warmup in the lr scheduler.",
875 | "required": false,
876 | "nargs": "",
877 | "commands": [
878 | "--lr_warmup_steps"
879 | ],
880 | "choices": [],
881 | "default": 500,
882 | "dest": "lr_warmup_steps"
883 | },
884 | "options": {
885 | "error_color": "#ea7878",
886 | "label_color": "#000000",
887 | "help_color": "#363636",
888 | "full_width": false,
889 | "validator": {
890 | "type": "ExpressionValidator",
891 | "test": "True",
892 | "message": ""
893 | },
894 | "external_validator": {
895 | "cmd": ""
896 | }
897 | }
898 | },
899 | {
900 | "id": "--tokenizer_name",
901 | "type": "TextField",
902 | "cli_type": "optional",
903 | "required": false,
904 | "data": {
905 | "display_name": "tokenizer_name",
906 | "help": "Pretrained tokenizer name or path if not the same as model_name",
907 | "required": false,
908 | "nargs": "",
909 | "commands": [
910 | "--tokenizer_name"
911 | ],
912 | "choices": [],
913 | "default": null,
914 | "dest": "tokenizer_name"
915 | },
916 | "options": {
917 | "error_color": "#ea7878",
918 | "label_color": "#000000",
919 | "help_color": "#363636",
920 | "full_width": false,
921 | "validator": {
922 | "type": "ExpressionValidator",
923 | "test": "True",
924 | "message": ""
925 | },
926 | "external_validator": {
927 | "cmd": ""
928 | }
929 | }
930 | },
931 | {
932 | "id": "--seed",
933 | "type": "TextField",
934 | "cli_type": "optional",
935 | "required": false,
936 | "data": {
937 | "display_name": "seed",
938 | "help": "A seed for reproducible training.",
939 | "required": false,
940 | "nargs": "",
941 | "commands": [
942 | "--seed"
943 | ],
944 | "choices": [],
945 | "default": null,
946 | "dest": "seed"
947 | },
948 | "options": {
949 | "error_color": "#ea7878",
950 | "label_color": "#000000",
951 | "help_color": "#363636",
952 | "full_width": false,
953 | "validator": {
954 | "type": "ExpressionValidator",
955 | "test": "True",
956 | "message": ""
957 | },
958 | "external_validator": {
959 | "cmd": ""
960 | }
961 | }
962 | },
963 | {
964 | "id": "--center_crop",
965 | "type": "CheckBox",
966 | "cli_type": "optional",
967 | "required": false,
968 | "data": {
969 | "display_name": "center_crop",
970 | "help": "Whether to center crop images before resizing to resolution",
971 | "required": false,
972 | "nargs": "",
973 | "commands": [
974 | "--center_crop"
975 | ],
976 | "choices": [],
977 | "default": false,
978 | "dest": "center_crop"
979 | },
980 | "options": {
981 | "error_color": "#ea7878",
982 | "label_color": "#000000",
983 | "help_color": "#363636",
984 | "full_width": false,
985 | "validator": {
986 | "type": "ExpressionValidator",
987 | "test": "True",
988 | "message": ""
989 | },
990 | "external_validator": {
991 | "cmd": ""
992 | }
993 | }
994 | },
995 | {
996 | "id": "--adam_beta1",
997 | "type": "TextField",
998 | "cli_type": "optional",
999 | "required": false,
1000 | "data": {
1001 | "display_name": "adam_beta1",
1002 | "help": "The beta1 parameter for the Adam optimizer.",
1003 | "required": false,
1004 | "nargs": "",
1005 | "commands": [
1006 | "--adam_beta1"
1007 | ],
1008 | "choices": [],
1009 | "default": 0.9,
1010 | "dest": "adam_beta1"
1011 | },
1012 | "options": {
1013 | "error_color": "#ea7878",
1014 | "label_color": "#000000",
1015 | "help_color": "#363636",
1016 | "full_width": false,
1017 | "validator": {
1018 | "type": "ExpressionValidator",
1019 | "test": "True",
1020 | "message": ""
1021 | },
1022 | "external_validator": {
1023 | "cmd": ""
1024 | }
1025 | }
1026 | },
1027 | {
1028 | "id": "--adam_beta2",
1029 | "type": "TextField",
1030 | "cli_type": "optional",
1031 | "required": false,
1032 | "data": {
1033 | "display_name": "adam_beta2",
1034 | "help": "The beta2 parameter for the Adam optimizer.",
1035 | "required": false,
1036 | "nargs": "",
1037 | "commands": [
1038 | "--adam_beta2"
1039 | ],
1040 | "choices": [],
1041 | "default": 0.999,
1042 | "dest": "adam_beta2"
1043 | },
1044 | "options": {
1045 | "error_color": "#ea7878",
1046 | "label_color": "#000000",
1047 | "help_color": "#363636",
1048 | "full_width": false,
1049 | "validator": {
1050 | "type": "ExpressionValidator",
1051 | "test": "True",
1052 | "message": ""
1053 | },
1054 | "external_validator": {
1055 | "cmd": ""
1056 | }
1057 | }
1058 | },
1059 | {
1060 | "id": "--adam_weight_decay",
1061 | "type": "TextField",
1062 | "cli_type": "optional",
1063 | "required": false,
1064 | "data": {
1065 | "display_name": "adam_weight_decay",
1066 | "help": "Weight decay to use.",
1067 | "required": false,
1068 | "nargs": "",
1069 | "commands": [
1070 | "--adam_weight_decay"
1071 | ],
1072 | "choices": [],
1073 | "default": 0.01,
1074 | "dest": "adam_weight_decay"
1075 | },
1076 | "options": {
1077 | "error_color": "#ea7878",
1078 | "label_color": "#000000",
1079 | "help_color": "#363636",
1080 | "full_width": false,
1081 | "validator": {
1082 | "type": "ExpressionValidator",
1083 | "test": "True",
1084 | "message": ""
1085 | },
1086 | "external_validator": {
1087 | "cmd": ""
1088 | }
1089 | }
1090 | },
1091 | {
1092 | "id": "--adam_epsilon",
1093 | "type": "TextField",
1094 | "cli_type": "optional",
1095 | "required": false,
1096 | "data": {
1097 | "display_name": "adam_epsilon",
1098 | "help": "Epsilon value for the Adam optimizer",
1099 | "required": false,
1100 | "nargs": "",
1101 | "commands": [
1102 | "--adam_epsilon"
1103 | ],
1104 | "choices": [],
1105 | "default": 1e-08,
1106 | "dest": "adam_epsilon"
1107 | },
1108 | "options": {
1109 | "error_color": "#ea7878",
1110 | "label_color": "#000000",
1111 | "help_color": "#363636",
1112 | "full_width": false,
1113 | "validator": {
1114 | "type": "ExpressionValidator",
1115 | "test": "True",
1116 | "message": ""
1117 | },
1118 | "external_validator": {
1119 | "cmd": ""
1120 | }
1121 | }
1122 | },
1123 | {
1124 | "id": "--max_grad_norm",
1125 | "type": "TextField",
1126 | "cli_type": "optional",
1127 | "required": false,
1128 | "data": {
1129 | "display_name": "max_grad_norm",
1130 | "help": "Max gradient norm.",
1131 | "required": false,
1132 | "nargs": "",
1133 | "commands": [
1134 | "--max_grad_norm"
1135 | ],
1136 | "choices": [],
1137 | "default": 1.0,
1138 | "dest": "max_grad_norm"
1139 | },
1140 | "options": {
1141 | "error_color": "#ea7878",
1142 | "label_color": "#000000",
1143 | "help_color": "#363636",
1144 | "full_width": false,
1145 | "validator": {
1146 | "type": "ExpressionValidator",
1147 | "test": "True",
1148 | "message": ""
1149 | },
1150 | "external_validator": {
1151 | "cmd": ""
1152 | }
1153 | }
1154 | }
1155 | ],
1156 | "groups": [],
1157 | "description": "Fine tune learning rate",
1158 | "options": {
1159 | "label_color": "#000000",
1160 | "description_color": "#363636",
1161 | "legacy": {
1162 | "required_cols": 2,
1163 | "optional_cols": 2
1164 | },
1165 | "columns": 2,
1166 | "padding": 10,
1167 | "show_border": false
1168 | }
1169 | },
1170 | {
1171 | "name": "Push to Huggingface Hub",
1172 | "items": [
1173 | {
1174 | "id": "--push_to_hub",
1175 | "type": "CheckBox",
1176 | "cli_type": "optional",
1177 | "required": false,
1178 | "data": {
1179 | "display_name": "push_to_hub",
1180 | "help": "Whether or not to push the model to the Hub.",
1181 | "required": false,
1182 | "nargs": "",
1183 | "commands": [
1184 | "--push_to_hub"
1185 | ],
1186 | "choices": [],
1187 | "default": false,
1188 | "dest": "push_to_hub"
1189 | },
1190 | "options": {
1191 | "error_color": "#ea7878",
1192 | "label_color": "#000000",
1193 | "help_color": "#363636",
1194 | "full_width": false,
1195 | "validator": {
1196 | "type": "ExpressionValidator",
1197 | "test": "True",
1198 | "message": ""
1199 | },
1200 | "external_validator": {
1201 | "cmd": ""
1202 | }
1203 | }
1204 | },
1205 | {
1206 | "id": "--hub_token",
1207 | "type": "TextField",
1208 | "cli_type": "optional",
1209 | "required": false,
1210 | "data": {
1211 | "display_name": "hub_token",
1212 | "help": "The token to use to push to the Model Hub.",
1213 | "required": false,
1214 | "nargs": "",
1215 | "commands": [
1216 | "--hub_token"
1217 | ],
1218 | "choices": [],
1219 | "default": null,
1220 | "dest": "hub_token"
1221 | },
1222 | "options": {
1223 | "error_color": "#ea7878",
1224 | "label_color": "#000000",
1225 | "help_color": "#363636",
1226 | "full_width": false,
1227 | "validator": {
1228 | "type": "ExpressionValidator",
1229 | "test": "True",
1230 | "message": ""
1231 | },
1232 | "external_validator": {
1233 | "cmd": ""
1234 | }
1235 | }
1236 | },
1237 | {
1238 | "id": "--hub_model_id",
1239 | "type": "TextField",
1240 | "cli_type": "optional",
1241 | "required": false,
1242 | "data": {
1243 | "display_name": "hub_model_id",
1244 | "help": "The name of the repository to keep in sync with the local `output_dir`.",
1245 | "required": false,
1246 | "nargs": "",
1247 | "commands": [
1248 | "--hub_model_id"
1249 | ],
1250 | "choices": [],
1251 | "default": null,
1252 | "dest": "hub_model_id"
1253 | },
1254 | "options": {
1255 | "error_color": "#ea7878",
1256 | "label_color": "#000000",
1257 | "help_color": "#363636",
1258 | "full_width": false,
1259 | "validator": {
1260 | "type": "ExpressionValidator",
1261 | "test": "True",
1262 | "message": ""
1263 | },
1264 | "external_validator": {
1265 | "cmd": ""
1266 | }
1267 | }
1268 | }
1269 | ],
1270 | "groups": [],
1271 | "description": "Whether or not push model to huggingface hub",
1272 | "options": {
1273 | "label_color": "#000000",
1274 | "description_color": "#363636",
1275 | "legacy": {
1276 | "required_cols": 2,
1277 | "optional_cols": 2
1278 | },
1279 | "columns": 2,
1280 | "padding": 10,
1281 | "show_border": false
1282 | }
1283 | }
1284 | ]
1285 | }
1286 | }
1287 | }
--------------------------------------------------------------------------------
/src-tauri/icons/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/128x128.png
--------------------------------------------------------------------------------
/src-tauri/icons/128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/128x128@2x.png
--------------------------------------------------------------------------------
/src-tauri/icons/32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/32x32.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square107x107Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/Square107x107Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square142x142Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/Square142x142Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square150x150Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/Square150x150Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square284x284Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/Square284x284Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square30x30Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/Square30x30Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square310x310Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/Square310x310Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square44x44Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/Square44x44Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square71x71Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/Square71x71Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square89x89Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/Square89x89Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/StoreLogo.png
--------------------------------------------------------------------------------
/src-tauri/icons/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/icon.icns
--------------------------------------------------------------------------------
/src-tauri/icons/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/icon.ico
--------------------------------------------------------------------------------
/src-tauri/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smy20011/dreambooth-gui/f9c5ca6964b371ffc82497536ccb81699ee4735e/src-tauri/icons/icon.png
--------------------------------------------------------------------------------
/src-tauri/src/main.rs:
--------------------------------------------------------------------------------
1 | #![cfg_attr(
2 | all(not(debug_assertions), target_os = "windows"),
3 | windows_subsystem = "windows"
4 | )]
5 |
6 | use std::str;
7 |
8 | use nvml_wrapper::{error::NvmlError, struct_wrappers::device::MemoryInfo, Nvml};
9 | use serde::{Deserialize, Serialize};
10 |
11 | // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
12 | #[tauri::command]
13 | fn greet(name: &str) -> String {
14 | format!("Hello, {}! You've been greeted from Rust!", name)
15 | }
16 |
17 | #[derive(Serialize, Deserialize)]
18 | struct GpuInfo {
19 | name: String,
20 | meminfo: MemoryInfo,
21 | }
22 |
23 | fn gpu_info_impl() -> Result {
24 | let nvml = Nvml::init()?;
25 | let device = nvml.device_by_index(0)?;
26 |
27 | return Ok(GpuInfo {
28 | name: device.name()?,
29 | meminfo: device.memory_info()?,
30 | });
31 | }
32 |
33 | #[tauri::command]
34 | async fn gpu_info() -> Result {
35 | gpu_info_impl().map_err(|e| e.to_string())
36 | }
37 |
38 | fn main() {
39 | tauri::Builder::default()
40 | .invoke_handler(tauri::generate_handler![greet, gpu_info])
41 | .run(tauri::generate_context!())
42 | .expect("error while running tauri application");
43 | }
44 |
--------------------------------------------------------------------------------
/src-tauri/tauri.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "beforeDevCommand": "yarn dev",
4 | "beforeBuildCommand": "yarn build",
5 | "devPath": "http://localhost:1420",
6 | "distDir": "../dist"
7 | },
8 | "package": {
9 | "productName": "dreambooth-gui",
10 | "version": "0.1.11"
11 | },
12 | "tauri": {
13 | "allowlist": {
14 | "all": true,
15 | "fs": {
16 | "all": true,
17 | "scope": [
18 | "*"
19 | ]
20 | },
21 | "shell": {
22 | "all": true,
23 | "execute": true,
24 | "scope": [
25 | {
26 | "name": "docker",
27 | "cmd": "docker",
28 | "args": true
29 | }
30 | ]
31 | }
32 | },
33 | "bundle": {
34 | "active": true,
35 | "category": "DeveloperTool",
36 | "copyright": "",
37 | "deb": {
38 | "depends": []
39 | },
40 | "externalBin": [],
41 | "icon": [
42 | "icons/32x32.png",
43 | "icons/128x128.png",
44 | "icons/128x128@2x.png",
45 | "icons/icon.icns",
46 | "icons/icon.ico"
47 | ],
48 | "identifier": "smy20011.dreambooth",
49 | "longDescription": "",
50 | "macOS": {
51 | "entitlements": null,
52 | "exceptionDomain": "",
53 | "frameworks": [],
54 | "providerShortName": null,
55 | "signingIdentity": null
56 | },
57 | "resources": [
58 | "gooey_config.json"
59 | ],
60 | "shortDescription": "",
61 | "targets": "all",
62 | "windows": {
63 | "certificateThumbprint": null,
64 | "digestAlgorithm": "sha256",
65 | "timestampUrl": ""
66 | }
67 | },
68 | "security": {
69 | "csp": null
70 | },
71 | "updater": {
72 | "active": false
73 | },
74 | "windows": [
75 | {
76 | "fullscreen": false,
77 | "height": 800,
78 | "resizable": true,
79 | "title": "dreambooth-gui",
80 | "width": 800
81 | }
82 | ]
83 | }
84 | }
--------------------------------------------------------------------------------
/src/App.css:
--------------------------------------------------------------------------------
1 | .logo.vite:hover {
2 | filter: drop-shadow(0 0 2em #747bff);
3 | }
4 |
5 | .logo.react:hover {
6 | filter: drop-shadow(0 0 2em #61dafb);
7 | }
8 |
--------------------------------------------------------------------------------
/src/App.tsx:
--------------------------------------------------------------------------------
1 | import { Suspense } from "react";
2 | import { Container } from "react-bootstrap";
3 | import "./App.css";
4 | import Trainer from "./components/Trainer";
5 |
6 |
7 | function App() {
8 | return (
9 |
10 |
11 |
12 |
13 |
14 | );
15 | }
16 |
17 | export default App;
18 |
--------------------------------------------------------------------------------
/src/Gpu.ts:
--------------------------------------------------------------------------------
1 | import { invoke } from "@tauri-apps/api";
2 |
3 | export interface MemoryInfo {
4 | free: number;
5 | total: number;
6 | used: number;
7 | }
8 |
9 | export interface GpuInfo {
10 | name: string;
11 | meminfo: MemoryInfo;
12 | }
13 | export function GetGpuInfo(): Promise {
14 | return invoke('gpu_info');
15 | }
16 |
--------------------------------------------------------------------------------
/src/assets/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/commands/convert.test.ts:
--------------------------------------------------------------------------------
1 | import { assert, expect, test } from 'vitest'
2 | import Converter from './convert';
3 |
4 | test('Convert Commands', () => {
5 | const convert = new Converter("/a", "/b");
6 | const command = convert.getDiffuserToCkptCommand();
7 | expect(command.executable).toEqual("python");
8 | expect(command.arguments).toEqual([
9 | convert.diffuserToOriginScript,
10 | "--model_path=/a",
11 | "--checkpoint_path=/b/model.ckpt",
12 | ]);
13 | expect(command.environment).toBeUndefined();
14 | });
--------------------------------------------------------------------------------
/src/commands/convert.ts:
--------------------------------------------------------------------------------
1 | import { Command } from "./runner";
2 |
3 | export default class Converter {
4 | constructor(
5 | public source: string,
6 | public dest: string,
7 | public diffuserToOriginScript = "/diffusers/scripts/convert_diffusers_to_original_stable_diffusion.py",
8 | public originToDiffuerScript = "/diffusers/scripts/convert_original_stable_diffusion_to_diffusers.py",
9 | ) { }
10 |
11 | public getDiffuserToCkptCommand(): Command {
12 | return {
13 | executable: "python",
14 | arguments: [
15 | this.diffuserToOriginScript,
16 | `--model_path=${this.source}`,
17 | `--checkpoint_path=${this.dest}/model.ckpt`
18 | ]
19 | }
20 | }
21 |
22 | public getCkptToDiffuserCommand(): Command {
23 | return {
24 | executable: "python",
25 | arguments: [
26 | this.originToDiffuerScript,
27 | `--checkpoint_path=${this.source}`,
28 | `--dump_path=${this.dest}`
29 | ]
30 | };
31 | }
32 | }
--------------------------------------------------------------------------------
/src/commands/docker.test.ts:
--------------------------------------------------------------------------------
1 | import { describe, expect, test } from "vitest";
2 | import Converter from "./convert";
3 | import { DockerCommand } from "./docker";
4 | import Dreambooth from "./dreambooth";
5 |
6 | describe("TestDocker", () => {
7 | test("Docker volume mapping", () => {
8 | const dockerCommand = new DockerCommand(
9 | { executable: "echo", arguments: ["hello"] },
10 | [["/path/to/a", "/a"]]
11 | );
12 | expect(dockerCommand.getCommand().arguments).toEqual([
13 | "run", "--rm", "-t", "--pull", "always", "-v=/path/to/a:/a", "smy20011/dreambooth:v0.1.10", "echo", "hello"
14 | ]);
15 | });
16 | test("Docker additional arguments", () => {
17 | const dockerCommand = new DockerCommand(
18 | { executable: "echo", arguments: ["hello"] },
19 | [["/path/to/a", "/a"]],
20 | ["--gpu", "all"]
21 | );
22 | expect(dockerCommand.getCommand().arguments).toEqual([
23 | "run", "--rm", "-t", "--pull", "always", "--gpu", "all", "-v=/path/to/a:/a", "smy20011/dreambooth:v0.1.10", "echo", "hello"
24 | ]);
25 | });
26 |
27 | test("Docker environment mapping", () => {
28 | const dockerCommand = new DockerCommand(
29 | { executable: "echo", arguments: ["hello"], environment: { 'HELLO': "world" } },
30 | [["/path/to/a", "/a"]],
31 | );
32 | expect(dockerCommand.getCommand().arguments).toEqual([
33 | "run", "--rm", "-t", "--pull", "always", "-v=/path/to/a:/a", "-e", "HELLO=world", "smy20011/dreambooth:v0.1.10", "echo", "hello"
34 | ]);
35 | });
36 |
37 | test("Docker run convert ckpt", () => {
38 | let converter = new Converter("/a", "/b", "/convert.py")
39 | const dockerCommand = DockerCommand.runDiffusersToCkpt(converter);
40 | expect(converter.source).toEqual("/a");
41 | expect(converter.dest).toEqual("/b");
42 | expect(dockerCommand.getCommand().arguments).toEqual([
43 | "run", "--rm", "-t", "--pull", "always", "--gpus=all", "-v=/a:/source", "-v=/b:/dest", "smy20011/dreambooth:v0.1.10", "python",
44 | "/convert.py", "--model_path=/source", "--checkpoint_path=/dest/model.ckpt",
45 | ]);
46 | });
47 | test("Docker run ckpt to diffusers", () => {
48 | let converter = new Converter("/a", "/b", "/convert.py")
49 | const dockerCommand = DockerCommand.runCkptToDiffusers(converter, '/cache');
50 | expect(converter.source).toEqual("/a");
51 | expect(converter.dest).toEqual("/b");
52 | expect(dockerCommand.getCommand().arguments).toEqual([
53 | "run",
54 | "--rm",
55 | "-t",
56 | "--pull",
57 | "always",
58 | "--gpus=all",
59 | "--mount",
60 | "type=bind,source=/a,target=/source.ckpt",
61 | "-v=/b:/dest",
62 | "-v=/cache:/train",
63 | "smy20011/dreambooth:v0.1.10",
64 | "python",
65 | "/diffusers/scripts/convert_original_stable_diffusion_to_diffusers.py",
66 | "--checkpoint_path=/source.ckpt",
67 | "--dump_path=/dest",
68 | ]);
69 | });
70 |
71 | test("Docker run dreambooth training", () => {
72 | let dreambooth = new Dreambooth("sks", "");
73 | dreambooth.instanceDir = "/path/instance";
74 | dreambooth.outputDir = "/path/output";
75 | dreambooth.token = "abc";
76 | expect(DockerCommand.runDreambooth(dreambooth, "/cache").getCommand().arguments).toEqual([
77 | "run",
78 | "--rm",
79 | "-t",
80 | "--pull",
81 | "always",
82 | "--gpus=all",
83 | "-v=/path/instance:/instance",
84 | "-v=/path/output:/output",
85 | "-v=/cache:/train",
86 | "-e",
87 | "HUGGING_FACE_HUB_TOKEN=abc",
88 | "smy20011/dreambooth:v0.1.10",
89 | "/start_training",
90 | "/train_dreambooth.py",
91 | "--pretrained_model_name_or_path=CompVis/stable-diffusion-v1-4",
92 | "--instance_prompt=sks",
93 | "--instance_data_dir=/instance",
94 | "--max_train_steps=600",
95 | "--learning_rate=5e-6",
96 | "--lr_scheduler=constant",
97 | "--lr_warmup_steps=0",
98 | "--save_interval=10000",
99 | "--save_min_steps=100000",
100 | "--resolution=512",
101 | "--output_dir=/output",
102 | ]);
103 | });
104 | });
--------------------------------------------------------------------------------
/src/commands/docker.ts:
--------------------------------------------------------------------------------
1 | import Converter from "./convert";
2 | import Dreambooth from "./dreambooth";
3 | import { Command } from "./runner";
4 | import _ from "lodash";
5 |
6 | // Run a command within docker.
7 | export class DockerCommand {
8 | constructor(
9 | private subCommand: Command,
10 | private volumeMapping: [string, string][] = [],
11 | private additionalArguments: string[] = [],
12 | private image = "smy20011/dreambooth:v0.1.10",
13 | private alwaysPull = true,
14 | ) { }
15 |
16 | public getCommand(): Command {
17 | return {
18 | executable: "docker",
19 | arguments: [
20 | "run",
21 | "--rm",
22 | "-t",
23 | ...this.getPullingArguments(),
24 | ...this.additionalArguments,
25 | ...this.volumeMapping.map(it => `-v=${it[0]}:${it[1]}`),
26 | ...Object.entries(this.subCommand.environment ?? {}).sort().flatMap(it => ['-e', `${it[0]}=${it[1]}`]),
27 | this.image,
28 | this.subCommand.executable,
29 | ...this.subCommand.arguments
30 | ]
31 | }
32 | }
33 |
34 | private getPullingArguments(): string[] {
35 | if (this.alwaysPull) {
36 | return ["--pull", "always"];
37 | }
38 | return [];
39 | }
40 |
41 | private static rewrite(mapping: [string, string][], obj: T, key: keyof T, newFolder: string) {
42 | mapping.push([obj[key] as string, newFolder]);
43 | obj[key] = newFolder as T[keyof T];
44 | }
45 |
46 | private static forceNewLine(command: Command): Command {
47 | return {
48 | executable: '/start_training',
49 | arguments: [
50 | ...command.arguments
51 | ],
52 | environment: command.environment
53 | }
54 | }
55 |
56 | public static runDreambooth(dreambooth: Dreambooth, cacheDir: string, classDir?: string, isLocalModel = false): DockerCommand {
57 | let mapping: [string, string][] = [];
58 | dreambooth = _.clone(dreambooth);
59 | this.rewrite(mapping, dreambooth, "instanceDir", "/instance");
60 | if (dreambooth.classPrompt && classDir) {
61 | dreambooth.classDir = classDir;
62 | this.rewrite(mapping, dreambooth, "classDir", "/class");
63 | }
64 | this.rewrite(mapping, dreambooth, "outputDir", "/output");
65 | if (isLocalModel) {
66 | this.rewrite(mapping, dreambooth, "model", "/input_model");
67 | }
68 | mapping.push([cacheDir, '/train']);
69 | return new DockerCommand(
70 | this.forceNewLine(dreambooth.getTrainingCommand()),
71 | mapping,
72 | [
73 | '--gpus=all',
74 | ]
75 | );
76 | }
77 |
78 | public static runDiffusersToCkpt(converter: Converter): DockerCommand {
79 | let mapping: [string, string][] = [];
80 | converter = _.clone(converter);
81 | this.rewrite(mapping, converter, "source", "/source");
82 | this.rewrite(mapping, converter, "dest", "/dest");
83 | return new DockerCommand(
84 | converter.getDiffuserToCkptCommand(),
85 | mapping,
86 | ['--gpus=all'],
87 | );
88 | }
89 |
90 | public static runCkptToDiffusers(converter: Converter, cacheDir: string): DockerCommand {
91 | let mapping: [string, string][] = [];
92 | converter = _.clone(converter);
93 | this.rewrite(mapping, converter, "dest", "/dest");
94 | mapping.push([cacheDir, '/train']);
95 | let source = converter.source;
96 | converter.source = "/source.ckpt";
97 | return new DockerCommand(
98 | converter.getCkptToDiffuserCommand(),
99 | mapping,
100 | ['--gpus=all', "--mount", `type=bind,source=${source},target=/source.ckpt`],
101 | );
102 | }
103 |
104 | }
--------------------------------------------------------------------------------
/src/commands/dreambooth.test.ts:
--------------------------------------------------------------------------------
1 | import { expect, test, describe, beforeEach } from 'vitest'
2 | import Dreambooth from './dreambooth';
3 | describe('Dreambooth Test', () => {
4 | let dreambooth: Dreambooth;
5 | beforeEach(() => {
6 | dreambooth = new Dreambooth("sks");
7 | dreambooth.instanceDir = "/instance";
8 | dreambooth.classDir = "/class";
9 | dreambooth.outputDir = "/output"
10 | dreambooth.token = "abc";
11 | });
12 |
13 | test('Instance prompt only training', () => {
14 | const command = dreambooth.getTrainingCommand();
15 | expect(command.arguments).toEqual([
16 | "/train_dreambooth.py",
17 | "--pretrained_model_name_or_path=CompVis/stable-diffusion-v1-4",
18 | "--instance_prompt=sks",
19 | "--instance_data_dir=/instance",
20 | "--max_train_steps=600",
21 | "--learning_rate=5e-6",
22 | "--lr_scheduler=constant",
23 | "--lr_warmup_steps=0",
24 | "--save_interval=10000",
25 | "--save_min_steps=100000",
26 | "--resolution=512",
27 | "--output_dir=/output",
28 | ]);
29 | expect(command.environment).toEqual({
30 | "HUGGING_FACE_HUB_TOKEN": "abc"
31 | })
32 | });
33 | test('Class training', () => {
34 | dreambooth.classPrompt = "class"
35 | const command = dreambooth.getTrainingCommand();
36 | expect(command.arguments).toEqual([
37 | "/train_dreambooth.py",
38 | "--pretrained_model_name_or_path=CompVis/stable-diffusion-v1-4",
39 | "--instance_prompt=sks",
40 | "--instance_data_dir=/instance",
41 | "--class_data_dir=/class",
42 | "--with_prior_preservation",
43 | "--prior_loss_weight=1.0",
44 | "--class_prompt=class",
45 | "--max_train_steps=600",
46 | "--learning_rate=5e-6",
47 | "--lr_scheduler=constant",
48 | "--lr_warmup_steps=0",
49 | "--save_interval=10000",
50 | "--save_min_steps=100000",
51 | "--resolution=512",
52 | "--output_dir=/output",
53 | ]);
54 | expect(command.environment).toEqual({
55 | "HUGGING_FACE_HUB_TOKEN": "abc"
56 | })
57 | });
58 |
59 | });
--------------------------------------------------------------------------------
/src/commands/dreambooth.ts:
--------------------------------------------------------------------------------
1 | import _ from "lodash";
2 | import { GpuInfo } from "../Gpu";
3 | import { Command } from "./runner";
4 |
5 | function recordToArgs(obj: Record): string[] {
6 | return Object.entries(obj)
7 | .map(([key, value]) => {
8 | if (typeof value == "boolean") {
9 | return value ? `--${key}` : null;
10 | }
11 | return `--${key}=${value}`;
12 | })
13 | .filter(v => v !== null) as string[];
14 | }
15 |
16 | function pickTrainingArgs(gpuInfo: GpuInfo) {
17 | const GIB = 1024 * 1024 * 1024;
18 | if (gpuInfo.name == "unknown") {
19 | return [];
20 | }
21 | // Config for GPU with < 10GB varm
22 | let config = {
23 | mixed_precision: 'fp16',
24 | train_batch_size: 1,
25 | gradient_accumulation_steps: 1,
26 | gradient_checkpointing: true,
27 | use_8bit_adam: true,
28 | };
29 | if (gpuInfo.meminfo.free > 13.7 * GIB) {
30 | // Train with better quality and disable checkpoint.
31 | config.gradient_accumulation_steps = 2;
32 | config.gradient_checkpointing = false;
33 | } else if (gpuInfo.meminfo.free > 11.2 * GIB) {
34 | // Disbale gradient checkpoint for faster training.
35 | config.gradient_checkpointing = false;
36 | } else if (gpuInfo.meminfo.free > 10.4 * GIB) {
37 | // Increase batch size for better training quality.
38 | config.train_batch_size = 2;
39 | }
40 | return recordToArgs(config);
41 | }
42 |
43 |
44 |
45 | export default class Dreambooth {
46 | constructor(
47 | // Prompt of dir.
48 | public instancePrompt: string,
49 | // Train dreambooth with class images.
50 | public classPrompt: string = "",
51 | // User defined additional arguments to train the model.
52 | public additionalArguments: string[] = [],
53 | // Max training steps
54 | public steps: number = 600,
55 | // Learning rate.
56 | public learningRate: string = "5e-6",
57 | // Model dir or name.
58 | public model: string = "CompVis/stable-diffusion-v1-4",
59 | // Model output dir
60 | public outputDir = "",
61 | // Class image directory.
62 | public classDir = "",
63 | // Dir of images.
64 | public instanceDir = "",
65 | // Script location
66 | public scriptLocation: string = "/train_dreambooth.py",
67 | // Additional training arguments
68 | public extraTrainingArgs: string[] = [],
69 | // Token
70 | public token = "",
71 | // Save every n steps
72 | public saveInterval = 10000,
73 | // Steps to save model
74 | public saveMinSteps = 100000,
75 | ) { }
76 |
77 | public withGpu(gpuInfo: GpuInfo): Dreambooth {
78 | let newDb = _.clone(this);
79 | newDb.additionalArguments = pickTrainingArgs(gpuInfo);
80 | return newDb;
81 | }
82 |
83 | public with(update: Partial>): Dreambooth {
84 | return _.assign(_.clone(this), update);
85 | }
86 |
87 | public verifyState(): string {
88 | if (!this.instanceDir) {
89 | return "Please select instance images in the image tab.";
90 | }
91 | if (!this.instancePrompt) {
92 | return "Please set your instance prompt in the training tab.";
93 | }
94 | if (!this.model) {
95 | return "Please select your based model in the training tab.";
96 | }
97 | if (!this.steps || this.steps < 0) {
98 | return "Steps cannot be negative."
99 | }
100 | if (!this.outputDir) {
101 | return "Please select output dir.";
102 | }
103 | if (!this.token) {
104 | return "Please set your hugging face token.";
105 | }
106 | return "";
107 | }
108 |
109 | public getTrainingCommand(): Command {
110 | return {
111 | executable: "python",
112 | arguments: [
113 | this.scriptLocation,
114 | `--pretrained_model_name_or_path=${this.model}`,
115 | ...this.getInstantArguments(),
116 | ...this.getClassArguments(),
117 | ...this.getTrainingArguments(),
118 | ...this.getOutputArguments(),
119 | ...this.additionalArguments
120 | ],
121 | environment: {
122 | "HUGGING_FACE_HUB_TOKEN": this.token,
123 | }
124 | };
125 | }
126 |
127 | private getInstantArguments(): string[] {
128 | return [
129 | `--instance_prompt=${this.instancePrompt}`,
130 | `--instance_data_dir=${this.instanceDir}`
131 | ];
132 | }
133 |
134 | private getClassArguments(): string[] {
135 | if (this.classPrompt) {
136 | return [
137 | `--class_data_dir=${this.classDir}`,
138 | "--with_prior_preservation",
139 | "--prior_loss_weight=1.0",
140 | `--class_prompt=${this.classPrompt}`
141 | ];
142 | }
143 | return [];
144 | }
145 |
146 | private getTrainingArguments(): string[] {
147 | return [
148 | `--max_train_steps=${this.steps}`,
149 | `--learning_rate=${this.learningRate}`,
150 | "--lr_scheduler=constant",
151 | "--lr_warmup_steps=0",
152 | `--save_interval=${this.saveInterval}`,
153 | `--save_min_steps=${this.saveMinSteps}`,
154 | ...this.extraTrainingArgs
155 | ];
156 | }
157 |
158 | private getOutputArguments(): string[] {
159 | return [
160 | "--resolution=512",
161 | `--output_dir=${this.outputDir}`,
162 | ]
163 | }
164 | }
--------------------------------------------------------------------------------
/src/commands/runner.ts:
--------------------------------------------------------------------------------
1 | import { shell } from "@tauri-apps/api";
2 |
3 | export interface Command {
4 | executable: string;
5 | arguments: string[];
6 | environment?: Record;
7 | }
8 |
9 | // Run docker with command, pipe output to outputCallback and returns the exit value.
10 | export async function run(command: Command, outputCallback: (line: string) => void): Promise {
11 | return new Promise((resolve, reject) => {
12 | const process = new shell.Command(command.executable, command.arguments, { env: command.environment });
13 | process.on("close", payload => resolve(payload.code));
14 | process.on("error", reject);
15 | process.stdout.on("data", outputCallback);
16 | process.stderr.on("data", outputCallback);
17 | process.spawn().catch(reject);
18 | })
19 | }
--------------------------------------------------------------------------------
/src/components/ConfigTrainer.tsx:
--------------------------------------------------------------------------------
1 | import { dialog } from "@tauri-apps/api";
2 | import { useAtom, useAtomValue, useSetAtom } from "jotai";
3 | import _ from "lodash";
4 | import { Form, InputGroup, Button, Row, Col } from "react-bootstrap";
5 | import { dreamboothAtom, gpuAtom, updateClassPromptAtom } from "../state";
6 | import { bind, updateStateField, useAtomForm } from "./utils";
7 |
8 | export default function ConfigTrainer() {
9 | const GIB = 1024 * 1024 * 1024;
10 | const [state, setState, bind] = useAtomForm(dreamboothAtom);
11 | const gpuInfo = useAtomValue(gpuAtom);
12 | const setClassPrompt = useSetAtom(updateClassPromptAtom);
13 |
14 | if (!gpuInfo) {
15 | return Cannot find your GPU infomation.
16 | }
17 | const selectModelFolder = async () => {
18 | const result = await dialog.open({
19 | filters: [{
20 | name: "Model Checkpoint",
21 | extensions: ["ckpt"],
22 | }]
23 | });
24 | if (result != null && typeof result === 'string') {
25 | setState(s => _.assign(_.clone(s), { model: result }));
26 | }
27 | };
28 |
29 | return (
30 |
33 | Model
34 |
35 |
36 |
39 |
40 |
41 | Name of the base model, (eg, CompVis/stable-diffusion-v1-4)
42 |
43 |
44 |
45 | Instance prompt
46 |
47 |
48 | Name of the instance, use a rare word if possible. (Eg, sks)
49 |
50 |
51 |
52 | Class prompt
53 | {
55 | setClassPrompt(t.target.value);
56 | }
57 | } />
58 |
59 | If you want training with prior-preservation loss, set the class prompt. (Eg, a person)
60 |
61 |
62 |
63 | Training Steps
64 |
65 |
66 |
67 |
68 |
69 | Save Every # Steps
70 |
71 |
72 |
73 | Start saving at # Steps
74 |
75 |
76 |
77 |
78 |
79 | Learning Rate
80 |
81 |
82 |
83 | Training arguments
84 |
85 | Add your custom arguments here.
86 |
87 | {
92 | setState(_.assign(_.clone(state), { "additionalArguments": t.target.value.split("\n") }));
93 | }}
94 | />
95 |
96 |
97 | );
98 | }
99 |
--------------------------------------------------------------------------------
/src/components/Gallery.tsx:
--------------------------------------------------------------------------------
1 | import { readDir } from "@tauri-apps/api/fs";
2 | import { convertFileSrc } from "@tauri-apps/api/tauri";
3 | import { useEffect, useState } from "react";
4 | import { Col } from "react-bootstrap";
5 |
6 | async function getImageUrisInForlder(folder: string): Promise {
7 | if (!folder) {
8 | return [];
9 | }
10 | const files = await readDir(folder);
11 | return Promise.all(files.map(f => convertFileSrc(f.path)));
12 | }
13 |
14 | export default function Gallery({ imageDir }: { imageDir: string }) {
15 | const [imageUri, setImageUri] = useState([]);
16 | useEffect(() => {
17 | getImageUrisInForlder(imageDir).then(setImageUri);
18 | }, [imageDir]);
19 | return <>
20 | {imageUri.slice(0, 50).map(uri =>
21 |
22 | )}
23 | >
24 | }
--------------------------------------------------------------------------------
/src/components/ImagePicker.tsx:
--------------------------------------------------------------------------------
1 | import { dialog } from "@tauri-apps/api";
2 | import { useAtom } from "jotai";
3 | import _ from "lodash";
4 | import { Col, Button, Row } from "react-bootstrap";
5 | import { dreamboothAtom } from "../state";
6 | import Gallery from "./Gallery";
7 | import { useAtomForm } from "./utils";
8 |
9 | export default function ImagePicker() {
10 | const [state, setState, bind] = useAtomForm(dreamboothAtom);
11 | const showDialog = async () => {
12 | const result = await dialog.open({
13 | directory: true,
14 | });
15 | if (result != null && typeof result === 'string') {
16 | setState(_.assign(_.clone(state), { "instanceDir": result }));
17 | }
18 | }
19 | return (
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | );
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/src/components/Trainer.tsx:
--------------------------------------------------------------------------------
1 | import { shell } from "@tauri-apps/api";
2 | import { useAtom, useSetAtom } from "jotai";
3 | import { useEffect, useState } from "react";
4 | import { Tab, Tabs } from "react-bootstrap";
5 | import { GetGpuInfo } from "../Gpu";
6 | import { updateGpuAtom } from "../state";
7 | import ConfigTrainer from "./ConfigTrainer";
8 | import ImagePicker from "./ImagePicker";
9 | import { Training } from "./Training";
10 |
11 |
12 |
13 |
14 | function Trainer() {
15 | const [error, setError] = useState("");
16 | const updateGpu = useSetAtom(updateGpuAtom);
17 |
18 | useEffect(() => {
19 | GetGpuInfo().then(updateGpu).catch(err => setError(`Failed to fetch GPU info ${error}`));
20 | const command = new shell.Command("docker", "version");
21 | command.execute()
22 | .catch(err => setError("Failed to execute docker command, make sure docker is installed in your system.\n\nOpen the docker GUI and make sure it's running."))
23 | .then(res => {
24 | if (res && res.code != 0) {
25 | setError(`Docker command returns error, make sure you run this program as admin/root user. \n\n'docker version' output: ${res.stderr}\n\nOpen the docker GUI and make sure it's running.`);
26 | }
27 | });
28 | }, []);
29 |
30 | return (
31 | error ? {error}
:
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | )
44 | }
45 |
46 | export default Trainer;
--------------------------------------------------------------------------------
/src/components/Training.tsx:
--------------------------------------------------------------------------------
1 | import { dialog } from "@tauri-apps/api";
2 | import { message } from "@tauri-apps/api/dialog";
3 | import { exists, readDir, writeTextFile } from "@tauri-apps/api/fs";
4 | import { appDir, join } from "@tauri-apps/api/path";
5 | import { appWindow } from "@tauri-apps/api/window";
6 | import { atom, useAtom, useAtomValue } from "jotai";
7 | import _ from "lodash";
8 | import { FormEvent, useEffect, useRef, useState } from "react";
9 | import { Button, Form, InputGroup } from "react-bootstrap";
10 | import Converter from "../commands/convert";
11 | import { DockerCommand } from "../commands/docker";
12 | import Dreambooth from "../commands/dreambooth";
13 | import { Command, run } from "../commands/runner";
14 | import { killDocker } from "../docker";
15 | import { appDirAtom, dreamboothAtom } from "../state";
16 | import { getClassDir, ensureDir, bind, updateStateField, useAtomForm, asyncAtomWithCache } from "./utils";
17 |
18 | const trainingCommandAtom = atom(async (get) => {
19 | let db = get(dreamboothAtom);
20 | const isLocalModel = await exists(db.model) as unknown as boolean;
21 | const appDir = get(appDirAtom);
22 | const classDir = await getClassDir(db.classPrompt);
23 | let commands = [];
24 | if (isLocalModel) {
25 | const model_dir = db.model.replace(".ckpt", "");
26 | commands.push(DockerCommand.runCkptToDiffusers(new Converter(db.model, model_dir), appDir).getCommand());
27 | db = db.with({ model: model_dir });
28 | }
29 | return [
30 | ...commands,
31 | DockerCommand.runDreambooth(db, appDir, classDir, isLocalModel).getCommand()
32 | ];
33 | });
34 |
35 | const cachedTrainingCommandAtom = asyncAtomWithCache(trainingCommandAtom, []);
36 |
37 | export function Training() {
38 | const [running, setRunning] = useState(false);
39 | const [genCkpt, setGenCkpt] = useState(true);
40 | const [lines, setLines] = useState([]);
41 | const [state, setState, bind] = useAtomForm(dreamboothAtom);
42 | const dockerTrainCommand = useAtomValue(cachedTrainingCommandAtom);
43 |
44 | const outputRef = useRef();
45 |
46 | useEffect(() => {
47 | const area = outputRef.current!!;
48 | area.scrollTop = area.scrollHeight;
49 | }, [lines]);
50 |
51 | useEffect(() => {
52 | const unlisten = appWindow.onCloseRequested(async () => {
53 | try {
54 | await killDocker();
55 | } catch {
56 | }
57 | });
58 | }, []);
59 |
60 | const onSubmit = async (e: FormEvent) => {
61 | e.preventDefault();
62 | if (running) {
63 | await killDocker();
64 | setRunning(false);
65 | } else {
66 | const verificationMessage = state.verifyState();
67 | if (verificationMessage) {
68 | await message(`Cannot start training: ${verificationMessage}`);
69 | return;
70 | }
71 | const dirs = [
72 | await getClassDir(state.classDir),
73 | await appDir(),
74 | state.outputDir,
75 | ];
76 |
77 | for (const dir of dirs) {
78 | try {
79 | if (dir) {
80 | ensureDir(dir);
81 | }
82 | } catch (e) {
83 | await message(`Failed to create dir ${dir}, ${e}`);
84 | return;
85 | }
86 | }
87 |
88 | try {
89 | setRunning(true);
90 | setLines([]);
91 | for (const command of dockerTrainCommand) {
92 | const ret = await run(
93 | command,
94 | line => setLines(list => list.concat(line)));
95 | if (ret != 0) {
96 | await message(`Failed to train model, see output for detailed error.`);
97 | setRunning(false);
98 | return;
99 | }
100 | }
101 | await writeTextFile(await join(state.outputDir, "trainer_config"), JSON.stringify(state));
102 | if (genCkpt) {
103 | for (const f of await readDir(state.outputDir)) {
104 | // TODO: We still don't have a good API to check whether or not the f is a dir.
105 | // Tauri are planning to add such a API, refactor it later.
106 | if (f.name?.match(/\d+/) && f.name !== "0") {
107 | let genCkptOuput: string[] = [];
108 | setLines(line => line.concat(`Converting model in ${f.path} to ckpt.`))
109 | const ret = await run(
110 | DockerCommand.runDiffusersToCkpt(new Converter(f.path, f.path)).getCommand(),
111 | l => genCkptOuput.push(l));
112 | if (ret != 0) {
113 | await message(`Failed to convert model, output: ${genCkptOuput.join("\n")}`);
114 | }
115 | }
116 | }
117 | }
118 | setRunning(false);
119 | } catch (e) {
120 | await message(`Failed to start docker ${e}`);
121 | }
122 | await message(`Training finished, check ${state.outputDir} for model output.`, 'Finished!');
123 | }
124 | };
125 |
126 | const selectOutputFolder = async () => {
127 | const result = await dialog.open({
128 | directory: true,
129 | });
130 | if (result != null && typeof result === 'string') {
131 | setState(_.assign(_.clone(state), { "outputDir": result }));
132 | }
133 | };
134 |
135 | return (
136 |
138 | Hugging Face Token
139 |
140 |
141 |
142 | Output Dir
143 |
144 |
145 |
148 |
149 |
150 |
151 | setGenCkpt(t.target.checked)} />
152 |
153 |
154 | Training Command
155 | `${c.executable} ${c.arguments.join(" ")}`).join("\n")} disabled />
157 |
158 |
159 | Training Output
160 |
161 |
162 | {!running ?
163 | :
166 | }
169 |
170 | );
171 | }
172 |
--------------------------------------------------------------------------------
/src/components/utils.ts:
--------------------------------------------------------------------------------
1 | import { exists, createDir } from "@tauri-apps/api/fs";
2 | import { join, appDir } from "@tauri-apps/api/path";
3 | import { Atom, SetStateAction, useAtom, atom } from "jotai";
4 | import { PrimitiveAtom, SetAtom } from "jotai/core/atom";
5 | import { loadable } from "jotai/utils"
6 | import _ from "lodash";
7 |
8 |
9 | export function updateStateField(setState: (update: SetStateAction) => void, name: keyof T, value: any) {
10 | setState(s => _.assign(_.clone(s), { [name]: value }));
11 | }
12 |
13 | export function bind(state: T, setState: (update: SetStateAction) => void, name: keyof T) {
14 | return {
15 | value: state[name] as any,
16 | onChange: (t: any) => updateStateField(setState, name, t.target.value)
17 | }
18 | }
19 |
20 | export function useAtomForm(atom: PrimitiveAtom): [Value, SetAtom, void>, (name: keyof Value) => any] {
21 | const [state, setState] = useAtom(atom);
22 | return [
23 | state, setState, (name: keyof Value) => bind(state, setState, name)
24 | ]
25 | }
26 |
27 | export function asyncAtomWithCache(orig: Atom>, defaultValue: Value): Atom {
28 | const loadableAtom = loadable(orig);
29 | let cache = [defaultValue];
30 | return atom((get) => {
31 | const value = get(loadableAtom);
32 | if (value.state == "hasData") {
33 | cache[0] = value.data;
34 | }
35 | return cache[0];
36 | });
37 | }
38 |
39 | export async function getClassDir(prompt: string | undefined) {
40 | if (!prompt) {
41 | return "";
42 | }
43 | return await join(await appDir(), prompt);
44 | }
45 |
46 | export async function ensureDir(dir: string) {
47 | if (dir && !(await exists(dir) as unknown as boolean)) {
48 | await createDir(dir, { recursive: true });
49 | }
50 | }
51 |
52 |
--------------------------------------------------------------------------------
/src/docker.ts:
--------------------------------------------------------------------------------
1 |
2 | import { shell } from "@tauri-apps/api";
3 |
4 | // Kill all running instance of docker.
5 | export async function killDocker() {
6 | const process = new shell.Command("docker", ["ps", "--format", "{{.Image}} {{.ID}}"]);
7 | const dockerIds = (await process.execute()).stdout;
8 | const futures = dockerIds.split("\n").map(async (s) => {
9 | const [image, id] = s.split(" ");
10 | if (image.startsWith("smy20011")) {
11 | const killProcess = new shell.Command("docker", ["kill", id]);
12 | const ret = await killProcess.execute();
13 | console.log(`Killed docker image ${id}, retcode=${ret.code}`);
14 | }
15 | });
16 | await Promise.all(futures);
17 | }
--------------------------------------------------------------------------------
/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 | import App from "./App";
4 | import "./style.css";
5 | import 'bootstrap/dist/css/bootstrap.min.css';
6 |
7 | ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
8 |
9 |
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/src/state.ts:
--------------------------------------------------------------------------------
1 | import { appDir, join } from "@tauri-apps/api/path";
2 | import { atom } from "jotai";
3 | import _ from "lodash";
4 | import Dreambooth from "./commands/dreambooth";
5 | import { GpuInfo } from "./Gpu";
6 |
7 | export const gpuAtom = atom({
8 | name: "unknown",
9 | meminfo: {
10 | free: 0,
11 | total: 0,
12 | used: 0,
13 | }
14 | });
15 |
16 | export const updateGpuAtom = atom(null, (get, set, update: GpuInfo) => {
17 | set(gpuAtom, update);
18 | set(dreamboothAtom, get(dreamboothAtom).withGpu(update));
19 | });
20 |
21 | export const dreamboothAtom = atom(new Dreambooth("sks"));
22 | export const updateClassPromptAtom = atom(null, async (get, set, prompt: string) => {
23 | const classDir = await join(get(appDirAtom), prompt);
24 | set(dreamboothAtom, get(dreamboothAtom).with({ "classDir": classDir, "classPrompt": prompt }));
25 | });
26 | export const appDirAtom = atom(async () => appDir());
--------------------------------------------------------------------------------
/src/style.css:
--------------------------------------------------------------------------------
1 | html,
2 | body,
3 | #root,
4 | .container {
5 | margin: 0;
6 | padding: 0;
7 | height: 100%;
8 | }
9 |
10 | .trainer-error {
11 | white-space: pre-line;
12 | }
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/src/vite.config.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | // Configure Vitest (https://vitest.dev/config/)
4 |
5 | import { defineConfig } from 'vite'
6 |
7 | export default defineConfig({
8 | })
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "useDefineForClassFields": true,
5 | "lib": ["DOM", "DOM.Iterable", "ESNext"],
6 | "allowJs": false,
7 | "skipLibCheck": true,
8 | "esModuleInterop": false,
9 | "allowSyntheticDefaultImports": true,
10 | "strict": true,
11 | "forceConsistentCasingInFileNames": true,
12 | "module": "ESNext",
13 | "moduleResolution": "Node",
14 | "resolveJsonModule": true,
15 | "isolatedModules": true,
16 | "noEmit": true,
17 | "jsx": "react-jsx"
18 | },
19 | "include": ["src"],
20 | "references": [{ "path": "./tsconfig.node.json" }]
21 | }
22 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "module": "ESNext",
5 | "moduleResolution": "Node",
6 | "allowSyntheticDefaultImports": true
7 | },
8 | "include": ["vite.config.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import react from "@vitejs/plugin-react";
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 |
8 | // Vite optons tailored for Tauri development and only applied in `tauri dev` or `tauri build`
9 | // prevent vite from obscuring rust errors
10 | clearScreen: false,
11 | // tauri expects a fixed port, fail if that port is not available
12 | server: {
13 | port: 1420,
14 | strictPort: true,
15 | },
16 | // to make use of `TAURI_DEBUG` and other env variables
17 | // https://tauri.studio/v1/api/config#buildconfig.beforedevcommand
18 | envPrefix: ["VITE_", "TAURI_"],
19 | build: {
20 | // Tauri supports es2021
21 | target: ["es2021", "chrome100", "safari13"],
22 | // don't minify for debug builds
23 | minify: !process.env.TAURI_DEBUG ? "esbuild" : false,
24 | // produce sourcemaps for debug builds
25 | sourcemap: !!process.env.TAURI_DEBUG,
26 | },
27 | });
28 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@ampproject/remapping@^2.1.0":
6 | version "2.2.0"
7 | resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz"
8 | integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
9 | dependencies:
10 | "@jridgewell/gen-mapping" "^0.1.0"
11 | "@jridgewell/trace-mapping" "^0.3.9"
12 |
13 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6":
14 | version "7.18.6"
15 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz"
16 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
17 | dependencies:
18 | "@babel/highlight" "^7.18.6"
19 |
20 | "@babel/compat-data@^7.19.3":
21 | version "7.19.3"
22 | resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz"
23 | integrity sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==
24 |
25 | "@babel/core@^7.18.13":
26 | version "7.19.3"
27 | resolved "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz"
28 | integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==
29 | dependencies:
30 | "@ampproject/remapping" "^2.1.0"
31 | "@babel/code-frame" "^7.18.6"
32 | "@babel/generator" "^7.19.3"
33 | "@babel/helper-compilation-targets" "^7.19.3"
34 | "@babel/helper-module-transforms" "^7.19.0"
35 | "@babel/helpers" "^7.19.0"
36 | "@babel/parser" "^7.19.3"
37 | "@babel/template" "^7.18.10"
38 | "@babel/traverse" "^7.19.3"
39 | "@babel/types" "^7.19.3"
40 | convert-source-map "^1.7.0"
41 | debug "^4.1.0"
42 | gensync "^1.0.0-beta.2"
43 | json5 "^2.2.1"
44 | semver "^6.3.0"
45 |
46 | "@babel/generator@^7.19.3":
47 | version "7.19.3"
48 | resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz"
49 | integrity sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==
50 | dependencies:
51 | "@babel/types" "^7.19.3"
52 | "@jridgewell/gen-mapping" "^0.3.2"
53 | jsesc "^2.5.1"
54 |
55 | "@babel/helper-annotate-as-pure@^7.18.6":
56 | version "7.18.6"
57 | resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz"
58 | integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==
59 | dependencies:
60 | "@babel/types" "^7.18.6"
61 |
62 | "@babel/helper-compilation-targets@^7.19.3":
63 | version "7.19.3"
64 | resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz"
65 | integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==
66 | dependencies:
67 | "@babel/compat-data" "^7.19.3"
68 | "@babel/helper-validator-option" "^7.18.6"
69 | browserslist "^4.21.3"
70 | semver "^6.3.0"
71 |
72 | "@babel/helper-environment-visitor@^7.18.9":
73 | version "7.18.9"
74 | resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz"
75 | integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
76 |
77 | "@babel/helper-function-name@^7.19.0":
78 | version "7.19.0"
79 | resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz"
80 | integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
81 | dependencies:
82 | "@babel/template" "^7.18.10"
83 | "@babel/types" "^7.19.0"
84 |
85 | "@babel/helper-hoist-variables@^7.18.6":
86 | version "7.18.6"
87 | resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz"
88 | integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
89 | dependencies:
90 | "@babel/types" "^7.18.6"
91 |
92 | "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6":
93 | version "7.18.6"
94 | resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz"
95 | integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
96 | dependencies:
97 | "@babel/types" "^7.18.6"
98 |
99 | "@babel/helper-module-transforms@^7.19.0":
100 | version "7.19.0"
101 | resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz"
102 | integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==
103 | dependencies:
104 | "@babel/helper-environment-visitor" "^7.18.9"
105 | "@babel/helper-module-imports" "^7.18.6"
106 | "@babel/helper-simple-access" "^7.18.6"
107 | "@babel/helper-split-export-declaration" "^7.18.6"
108 | "@babel/helper-validator-identifier" "^7.18.6"
109 | "@babel/template" "^7.18.10"
110 | "@babel/traverse" "^7.19.0"
111 | "@babel/types" "^7.19.0"
112 |
113 | "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0":
114 | version "7.19.0"
115 | resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz"
116 | integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==
117 |
118 | "@babel/helper-simple-access@^7.18.6":
119 | version "7.18.6"
120 | resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz"
121 | integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==
122 | dependencies:
123 | "@babel/types" "^7.18.6"
124 |
125 | "@babel/helper-split-export-declaration@^7.18.6":
126 | version "7.18.6"
127 | resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz"
128 | integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
129 | dependencies:
130 | "@babel/types" "^7.18.6"
131 |
132 | "@babel/helper-string-parser@^7.18.10":
133 | version "7.18.10"
134 | resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz"
135 | integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==
136 |
137 | "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
138 | version "7.19.1"
139 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz"
140 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
141 |
142 | "@babel/helper-validator-option@^7.18.6":
143 | version "7.18.6"
144 | resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz"
145 | integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==
146 |
147 | "@babel/helpers@^7.19.0":
148 | version "7.19.0"
149 | resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz"
150 | integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==
151 | dependencies:
152 | "@babel/template" "^7.18.10"
153 | "@babel/traverse" "^7.19.0"
154 | "@babel/types" "^7.19.0"
155 |
156 | "@babel/highlight@^7.18.6":
157 | version "7.18.6"
158 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz"
159 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
160 | dependencies:
161 | "@babel/helper-validator-identifier" "^7.18.6"
162 | chalk "^2.0.0"
163 | js-tokens "^4.0.0"
164 |
165 | "@babel/parser@^7.18.10", "@babel/parser@^7.19.3":
166 | version "7.19.3"
167 | resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz"
168 | integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==
169 |
170 | "@babel/plugin-syntax-jsx@^7.17.12", "@babel/plugin-syntax-jsx@^7.18.6":
171 | version "7.18.6"
172 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz"
173 | integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
174 | dependencies:
175 | "@babel/helper-plugin-utils" "^7.18.6"
176 |
177 | "@babel/plugin-transform-react-jsx-development@^7.18.6":
178 | version "7.18.6"
179 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz"
180 | integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==
181 | dependencies:
182 | "@babel/plugin-transform-react-jsx" "^7.18.6"
183 |
184 | "@babel/plugin-transform-react-jsx-self@^7.18.6":
185 | version "7.18.6"
186 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz"
187 | integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==
188 | dependencies:
189 | "@babel/helper-plugin-utils" "^7.18.6"
190 |
191 | "@babel/plugin-transform-react-jsx-source@^7.18.6":
192 | version "7.18.6"
193 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz"
194 | integrity sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==
195 | dependencies:
196 | "@babel/helper-plugin-utils" "^7.18.6"
197 |
198 | "@babel/plugin-transform-react-jsx@^7.18.10", "@babel/plugin-transform-react-jsx@^7.18.6":
199 | version "7.19.0"
200 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz"
201 | integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==
202 | dependencies:
203 | "@babel/helper-annotate-as-pure" "^7.18.6"
204 | "@babel/helper-module-imports" "^7.18.6"
205 | "@babel/helper-plugin-utils" "^7.19.0"
206 | "@babel/plugin-syntax-jsx" "^7.18.6"
207 | "@babel/types" "^7.19.0"
208 |
209 | "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7":
210 | version "7.19.0"
211 | resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz"
212 | integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==
213 | dependencies:
214 | regenerator-runtime "^0.13.4"
215 |
216 | "@babel/template@^7.18.10":
217 | version "7.18.10"
218 | resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz"
219 | integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==
220 | dependencies:
221 | "@babel/code-frame" "^7.18.6"
222 | "@babel/parser" "^7.18.10"
223 | "@babel/types" "^7.18.10"
224 |
225 | "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.3":
226 | version "7.19.3"
227 | resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz"
228 | integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==
229 | dependencies:
230 | "@babel/code-frame" "^7.18.6"
231 | "@babel/generator" "^7.19.3"
232 | "@babel/helper-environment-visitor" "^7.18.9"
233 | "@babel/helper-function-name" "^7.19.0"
234 | "@babel/helper-hoist-variables" "^7.18.6"
235 | "@babel/helper-split-export-declaration" "^7.18.6"
236 | "@babel/parser" "^7.19.3"
237 | "@babel/types" "^7.19.3"
238 | debug "^4.1.0"
239 | globals "^11.1.0"
240 |
241 | "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.3":
242 | version "7.19.3"
243 | resolved "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz"
244 | integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==
245 | dependencies:
246 | "@babel/helper-string-parser" "^7.18.10"
247 | "@babel/helper-validator-identifier" "^7.19.1"
248 | to-fast-properties "^2.0.0"
249 |
250 | "@emotion/babel-plugin@^11.10.0":
251 | version "11.10.2"
252 | resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz"
253 | integrity sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==
254 | dependencies:
255 | "@babel/helper-module-imports" "^7.16.7"
256 | "@babel/plugin-syntax-jsx" "^7.17.12"
257 | "@babel/runtime" "^7.18.3"
258 | "@emotion/hash" "^0.9.0"
259 | "@emotion/memoize" "^0.8.0"
260 | "@emotion/serialize" "^1.1.0"
261 | babel-plugin-macros "^3.1.0"
262 | convert-source-map "^1.5.0"
263 | escape-string-regexp "^4.0.0"
264 | find-root "^1.1.0"
265 | source-map "^0.5.7"
266 | stylis "4.0.13"
267 |
268 | "@emotion/cache@^11.10.0", "@emotion/cache@^11.10.3":
269 | version "11.10.3"
270 | resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz"
271 | integrity sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==
272 | dependencies:
273 | "@emotion/memoize" "^0.8.0"
274 | "@emotion/sheet" "^1.2.0"
275 | "@emotion/utils" "^1.2.0"
276 | "@emotion/weak-memoize" "^0.3.0"
277 | stylis "4.0.13"
278 |
279 | "@emotion/hash@^0.9.0":
280 | version "0.9.0"
281 | resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz"
282 | integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==
283 |
284 | "@emotion/is-prop-valid@^1.2.0":
285 | version "1.2.0"
286 | resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz"
287 | integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==
288 | dependencies:
289 | "@emotion/memoize" "^0.8.0"
290 |
291 | "@emotion/memoize@^0.8.0":
292 | version "0.8.0"
293 | resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz"
294 | integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==
295 |
296 | "@emotion/react@^11.10.4":
297 | version "11.10.4"
298 | resolved "https://registry.npmjs.org/@emotion/react/-/react-11.10.4.tgz"
299 | integrity sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==
300 | dependencies:
301 | "@babel/runtime" "^7.18.3"
302 | "@emotion/babel-plugin" "^11.10.0"
303 | "@emotion/cache" "^11.10.0"
304 | "@emotion/serialize" "^1.1.0"
305 | "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
306 | "@emotion/utils" "^1.2.0"
307 | "@emotion/weak-memoize" "^0.3.0"
308 | hoist-non-react-statics "^3.3.1"
309 |
310 | "@emotion/serialize@^1.1.0":
311 | version "1.1.0"
312 | resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz"
313 | integrity sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==
314 | dependencies:
315 | "@emotion/hash" "^0.9.0"
316 | "@emotion/memoize" "^0.8.0"
317 | "@emotion/unitless" "^0.8.0"
318 | "@emotion/utils" "^1.2.0"
319 | csstype "^3.0.2"
320 |
321 | "@emotion/sheet@^1.2.0":
322 | version "1.2.0"
323 | resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz"
324 | integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==
325 |
326 | "@emotion/styled@^11.10.4":
327 | version "11.10.4"
328 | resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.4.tgz"
329 | integrity sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ==
330 | dependencies:
331 | "@babel/runtime" "^7.18.3"
332 | "@emotion/babel-plugin" "^11.10.0"
333 | "@emotion/is-prop-valid" "^1.2.0"
334 | "@emotion/serialize" "^1.1.0"
335 | "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
336 | "@emotion/utils" "^1.2.0"
337 |
338 | "@emotion/unitless@^0.8.0":
339 | version "0.8.0"
340 | resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz"
341 | integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==
342 |
343 | "@emotion/use-insertion-effect-with-fallbacks@^1.0.0":
344 | version "1.0.0"
345 | resolved "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz"
346 | integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==
347 |
348 | "@emotion/utils@^1.2.0":
349 | version "1.2.0"
350 | resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz"
351 | integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==
352 |
353 | "@emotion/weak-memoize@^0.3.0":
354 | version "0.3.0"
355 | resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz"
356 | integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==
357 |
358 | "@esbuild/android-arm@0.15.10":
359 | version "0.15.10"
360 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.10.tgz#a5f9432eb221afc243c321058ef25fe899886892"
361 | integrity sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==
362 |
363 | "@esbuild/android-arm@0.15.12":
364 | version "0.15.12"
365 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz#e548b10a5e55b9e10537a049ebf0bc72c453b769"
366 | integrity sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==
367 |
368 | "@esbuild/linux-loong64@0.15.10":
369 | version "0.15.10"
370 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz#78a42897c2cf8db9fd5f1811f7590393b77774c7"
371 | integrity sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==
372 |
373 | "@esbuild/linux-loong64@0.15.12":
374 | version "0.15.12"
375 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz#475b33a2631a3d8ca8aa95ee127f9a61d95bf9c1"
376 | integrity sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==
377 |
378 | "@jridgewell/gen-mapping@^0.1.0":
379 | version "0.1.1"
380 | resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz"
381 | integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
382 | dependencies:
383 | "@jridgewell/set-array" "^1.0.0"
384 | "@jridgewell/sourcemap-codec" "^1.4.10"
385 |
386 | "@jridgewell/gen-mapping@^0.3.2":
387 | version "0.3.2"
388 | resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz"
389 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
390 | dependencies:
391 | "@jridgewell/set-array" "^1.0.1"
392 | "@jridgewell/sourcemap-codec" "^1.4.10"
393 | "@jridgewell/trace-mapping" "^0.3.9"
394 |
395 | "@jridgewell/resolve-uri@^3.0.3":
396 | version "3.1.0"
397 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz"
398 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
399 |
400 | "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
401 | version "1.1.2"
402 | resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz"
403 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
404 |
405 | "@jridgewell/sourcemap-codec@^1.4.10":
406 | version "1.4.14"
407 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz"
408 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
409 |
410 | "@jridgewell/trace-mapping@^0.3.9":
411 | version "0.3.15"
412 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz"
413 | integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==
414 | dependencies:
415 | "@jridgewell/resolve-uri" "^3.0.3"
416 | "@jridgewell/sourcemap-codec" "^1.4.10"
417 |
418 | "@mui/base@5.0.0-alpha.100":
419 | version "5.0.0-alpha.100"
420 | resolved "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.100.tgz"
421 | integrity sha512-bSoJEKCENtmJrJDECHUe9PiqztIUACuSskyqw9ypqE7Dz3WxL3e8puFsWBkUsz+WOCjXh4B4Xljn88Ucxxv5HA==
422 | dependencies:
423 | "@babel/runtime" "^7.19.0"
424 | "@emotion/is-prop-valid" "^1.2.0"
425 | "@mui/types" "^7.2.0"
426 | "@mui/utils" "^5.10.6"
427 | "@popperjs/core" "^2.11.6"
428 | clsx "^1.2.1"
429 | prop-types "^15.8.1"
430 | react-is "^18.2.0"
431 |
432 | "@mui/core-downloads-tracker@^5.10.8":
433 | version "5.10.8"
434 | resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.8.tgz"
435 | integrity sha512-V5D7OInO4P9PdT/JACg7fwjbOORm3GklaMVgdGomjyxiyetgRND5CC9r35e1LK/DqHdoyDuhbFzdfrqWtpmEIw==
436 |
437 | "@mui/material@^5.10.8":
438 | version "5.10.8"
439 | resolved "https://registry.npmjs.org/@mui/material/-/material-5.10.8.tgz"
440 | integrity sha512-sF/Ka0IJjGXV52zoT4xAWEqXVRjNYbIjATo9L4Q5oQC5iJpGrKJFY16uNtWWB0+vp/nayAuPGZHrxtV+t3ecdQ==
441 | dependencies:
442 | "@babel/runtime" "^7.19.0"
443 | "@mui/base" "5.0.0-alpha.100"
444 | "@mui/core-downloads-tracker" "^5.10.8"
445 | "@mui/system" "^5.10.8"
446 | "@mui/types" "^7.2.0"
447 | "@mui/utils" "^5.10.6"
448 | "@types/react-transition-group" "^4.4.5"
449 | clsx "^1.2.1"
450 | csstype "^3.1.1"
451 | prop-types "^15.8.1"
452 | react-is "^18.2.0"
453 | react-transition-group "^4.4.5"
454 |
455 | "@mui/private-theming@^5.10.6":
456 | version "5.10.6"
457 | resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.6.tgz"
458 | integrity sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==
459 | dependencies:
460 | "@babel/runtime" "^7.19.0"
461 | "@mui/utils" "^5.10.6"
462 | prop-types "^15.8.1"
463 |
464 | "@mui/styled-engine@^5.10.8":
465 | version "5.10.8"
466 | resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.8.tgz"
467 | integrity sha512-w+y8WI18EJV6zM/q41ug19cE70JTeO6sWFsQ7tgePQFpy6ToCVPh0YLrtqxUZXSoMStW5FMw0t9fHTFAqPbngw==
468 | dependencies:
469 | "@babel/runtime" "^7.19.0"
470 | "@emotion/cache" "^11.10.3"
471 | csstype "^3.1.1"
472 | prop-types "^15.8.1"
473 |
474 | "@mui/system@^5.10.8":
475 | version "5.10.8"
476 | resolved "https://registry.npmjs.org/@mui/system/-/system-5.10.8.tgz"
477 | integrity sha512-hRQ354zcrYP/KHqK8FheICSvE9raQaUgQaV+A3oD4JETaFUCVI9Ytt+RcQYgTqx02xlCXIjl8LK1rPjTneySqw==
478 | dependencies:
479 | "@babel/runtime" "^7.19.0"
480 | "@mui/private-theming" "^5.10.6"
481 | "@mui/styled-engine" "^5.10.8"
482 | "@mui/types" "^7.2.0"
483 | "@mui/utils" "^5.10.6"
484 | clsx "^1.2.1"
485 | csstype "^3.1.1"
486 | prop-types "^15.8.1"
487 |
488 | "@mui/types@^7.2.0":
489 | version "7.2.0"
490 | resolved "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz"
491 | integrity sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==
492 |
493 | "@mui/utils@^5.10.6":
494 | version "5.10.6"
495 | resolved "https://registry.npmjs.org/@mui/utils/-/utils-5.10.6.tgz"
496 | integrity sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==
497 | dependencies:
498 | "@babel/runtime" "^7.19.0"
499 | "@types/prop-types" "^15.7.5"
500 | "@types/react-is" "^16.7.1 || ^17.0.0"
501 | prop-types "^15.8.1"
502 | react-is "^18.2.0"
503 |
504 | "@popperjs/core@^2.11.5", "@popperjs/core@^2.11.6":
505 | version "2.11.6"
506 | resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz"
507 | integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==
508 |
509 | "@react-aria/ssr@^3.2.0":
510 | version "3.3.0"
511 | resolved "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.3.0.tgz"
512 | integrity sha512-yNqUDuOVZIUGP81R87BJVi/ZUZp/nYOBXbPsRe7oltJOfErQZD+UezMpw4vM2KRz18cURffvmC8tJ6JTeyDtaQ==
513 | dependencies:
514 | "@babel/runtime" "^7.6.2"
515 |
516 | "@restart/hooks@^0.4.6", "@restart/hooks@^0.4.7":
517 | version "0.4.7"
518 | resolved "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.7.tgz"
519 | integrity sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A==
520 | dependencies:
521 | dequal "^2.0.2"
522 |
523 | "@restart/ui@^1.3.1":
524 | version "1.4.0"
525 | resolved "https://registry.npmjs.org/@restart/ui/-/ui-1.4.0.tgz"
526 | integrity sha512-5dDj5uDzUgK1iijWPRg6AnxjkHM04XhTQDJirM1h/8tIc7KyLtF9YyjcCpNEn259hPMXswpkfXKNgiag0skPFg==
527 | dependencies:
528 | "@babel/runtime" "^7.18.3"
529 | "@popperjs/core" "^2.11.5"
530 | "@react-aria/ssr" "^3.2.0"
531 | "@restart/hooks" "^0.4.7"
532 | "@types/warning" "^3.0.0"
533 | dequal "^2.0.2"
534 | dom-helpers "^5.2.0"
535 | uncontrollable "^7.2.1"
536 | warning "^4.0.3"
537 |
538 | "@tauri-apps/api@^1.1.0":
539 | version "1.1.0"
540 | resolved "https://registry.npmjs.org/@tauri-apps/api/-/api-1.1.0.tgz"
541 | integrity sha512-n13pIqdPd3KtaMmmAcrU7BTfdMtIlGNnfZD0dNX8L4p8dgmuNyikm6JAA+yCpl9gqq6I8x5cV2Y0muqdgD0cWw==
542 |
543 | "@tauri-apps/cli-darwin-arm64@1.1.1":
544 | version "1.1.1"
545 | resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.1.1.tgz#c6f4553cfb338f24131910a1ebbe9fe74d89b8ae"
546 | integrity sha512-qBG11ig525/qf0f5OQxn0ON3hT8YdpTfpa4Y4kVqBJhdW50R5fadPv6tv5Dpl2TS2X7nWh/zg5mEXYoCK3HZ9w==
547 |
548 | "@tauri-apps/cli-darwin-x64@1.1.1":
549 | version "1.1.1"
550 | resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.1.1.tgz#11beb8b3dfc43725f0acd3736cd9d181f93526a2"
551 | integrity sha512-M3dMsp78OdxisbTwAWGvy3jIb3uqThtQcUYVvqOu9LeEOHyldOBFDSht+6PTBpaJLAHFMQK2rmNxiWgigklJaA==
552 |
553 | "@tauri-apps/cli-linux-arm-gnueabihf@1.1.1":
554 | version "1.1.1"
555 | resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.1.1.tgz#f4bd3f5839cfcd69132d213efee09ce5da5c6d90"
556 | integrity sha512-LYlvdAd73cq+yTi6rw7j/DWIvDpeApwgQkIn+HYsNNeFhyFmABU7tmw+pekK3W3nHAkYAJ69Rl4ZdoxdNGKmHg==
557 |
558 | "@tauri-apps/cli-linux-arm64-gnu@1.1.1":
559 | version "1.1.1"
560 | resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.1.1.tgz#2631b2a68e7901ea7281af022d8826c0d82b9edd"
561 | integrity sha512-o/hbMQIKuFI7cTNpeQBHD/OCNJOBIci78faKms/t6AstLXx0QJuRHDk477Rg6VVy/I3BBKbyATALbmcTq+ti0A==
562 |
563 | "@tauri-apps/cli-linux-arm64-musl@1.1.1":
564 | version "1.1.1"
565 | resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.1.1.tgz#11a4bdc52696583152fc70ea373cf31717cb0f4c"
566 | integrity sha512-8Ci4qlDnXIp93XqUrtzFCBDatUzPHpZq7L3bociUbWpvy/bnlzxp1C/C+vwdc4uS1MiAp9v3BFgrU4i0f0Z3QQ==
567 |
568 | "@tauri-apps/cli-linux-x64-gnu@1.1.1":
569 | version "1.1.1"
570 | resolved "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.1.1.tgz"
571 | integrity sha512-ES4Bkx2JAI8+dDNDJswhLS3yqt+yT/4C6UfGOPIHFxcXUh6fe36eUllrTt+HLRS9xTZbYnteJy7ebq2TqMkaxw==
572 |
573 | "@tauri-apps/cli-linux-x64-musl@1.1.1":
574 | version "1.1.1"
575 | resolved "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.1.1.tgz"
576 | integrity sha512-qrN1WOMAaDl+LE8P8iO0+DYlrWNTc9jIu/CsnVY/LImTn79ZPxEkcVBo0UGeKRI7f10TfvkVmLCBLxTz8QhEyA==
577 |
578 | "@tauri-apps/cli-win32-ia32-msvc@1.1.1":
579 | version "1.1.1"
580 | resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.1.1.tgz#1d106ae1c3766f95d7f49bac51eba0d2cd2daf33"
581 | integrity sha512-vw7VOmrQlywHhFV3pf54udf2FRNj9dg9WP1gL0My55FnB+w+PWS9Ipm871kX5qepmChdnZHKq9fsqE2uTjX//Q==
582 |
583 | "@tauri-apps/cli-win32-x64-msvc@1.1.1":
584 | version "1.1.1"
585 | resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.1.1.tgz#ce931d299fcc8c60aceec3f9e18b0987f9951c25"
586 | integrity sha512-OukxlLLi3AoCN4ABnqCDTiiC7xJGWukAjrKCIx7wFISrLjNfsrnH7/UOzuopfGpZChSe2c+AamVmcpBfVsEmJA==
587 |
588 | "@tauri-apps/cli@^1.1.0":
589 | version "1.1.1"
590 | resolved "https://registry.npmjs.org/@tauri-apps/cli/-/cli-1.1.1.tgz"
591 | integrity sha512-80kjMEMPBwLYCp0tTKSquy90PHHGGBvZsneNr3B/mWxNsvjzA1C0vOyGJGFrJuT2OmkvrdvuJZ5mch5hL8O1Xg==
592 | optionalDependencies:
593 | "@tauri-apps/cli-darwin-arm64" "1.1.1"
594 | "@tauri-apps/cli-darwin-x64" "1.1.1"
595 | "@tauri-apps/cli-linux-arm-gnueabihf" "1.1.1"
596 | "@tauri-apps/cli-linux-arm64-gnu" "1.1.1"
597 | "@tauri-apps/cli-linux-arm64-musl" "1.1.1"
598 | "@tauri-apps/cli-linux-x64-gnu" "1.1.1"
599 | "@tauri-apps/cli-linux-x64-musl" "1.1.1"
600 | "@tauri-apps/cli-win32-ia32-msvc" "1.1.1"
601 | "@tauri-apps/cli-win32-x64-msvc" "1.1.1"
602 |
603 | "@types/chai-subset@^1.3.3":
604 | version "1.3.3"
605 | resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94"
606 | integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==
607 | dependencies:
608 | "@types/chai" "*"
609 |
610 | "@types/chai@*", "@types/chai@^4.3.3":
611 | version "4.3.3"
612 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.3.tgz#3c90752792660c4b562ad73b3fbd68bf3bc7ae07"
613 | integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==
614 |
615 | "@types/lodash@^4.14.186":
616 | version "4.14.186"
617 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.186.tgz#862e5514dd7bd66ada6c70ee5fce844b06c8ee97"
618 | integrity sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==
619 |
620 | "@types/node@*":
621 | version "18.11.7"
622 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.7.tgz#8ccef136f240770c1379d50100796a6952f01f94"
623 | integrity sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ==
624 |
625 | "@types/node@^18.7.10":
626 | version "18.8.0"
627 | resolved "https://registry.npmjs.org/@types/node/-/node-18.8.0.tgz"
628 | integrity sha512-u+h43R6U8xXDt2vzUaVP3VwjjLyOJk6uEciZS8OSyziUQGOwmk+l+4drxcsDboHXwyTaqS1INebghmWMRxq3LA==
629 |
630 | "@types/parse-json@^4.0.0":
631 | version "4.0.0"
632 | resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz"
633 | integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
634 |
635 | "@types/prop-types@*", "@types/prop-types@^15.7.5":
636 | version "15.7.5"
637 | resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz"
638 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
639 |
640 | "@types/react-dom@^18.0.6":
641 | version "18.0.6"
642 | resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz"
643 | integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==
644 | dependencies:
645 | "@types/react" "*"
646 |
647 | "@types/react-is@^16.7.1 || ^17.0.0":
648 | version "17.0.3"
649 | resolved "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz"
650 | integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==
651 | dependencies:
652 | "@types/react" "*"
653 |
654 | "@types/react-transition-group@^4.4.4", "@types/react-transition-group@^4.4.5":
655 | version "4.4.5"
656 | resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz"
657 | integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==
658 | dependencies:
659 | "@types/react" "*"
660 |
661 | "@types/react@*", "@types/react@>=16.9.11", "@types/react@^18.0.15":
662 | version "18.0.21"
663 | resolved "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz"
664 | integrity sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==
665 | dependencies:
666 | "@types/prop-types" "*"
667 | "@types/scheduler" "*"
668 | csstype "^3.0.2"
669 |
670 | "@types/scheduler@*":
671 | version "0.16.2"
672 | resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz"
673 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
674 |
675 | "@types/warning@^3.0.0":
676 | version "3.0.0"
677 | resolved "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz"
678 | integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==
679 |
680 | "@vitejs/plugin-react@^2.0.0":
681 | version "2.1.0"
682 | resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.1.0.tgz"
683 | integrity sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==
684 | dependencies:
685 | "@babel/core" "^7.18.13"
686 | "@babel/plugin-transform-react-jsx" "^7.18.10"
687 | "@babel/plugin-transform-react-jsx-development" "^7.18.6"
688 | "@babel/plugin-transform-react-jsx-self" "^7.18.6"
689 | "@babel/plugin-transform-react-jsx-source" "^7.18.6"
690 | magic-string "^0.26.2"
691 | react-refresh "^0.14.0"
692 |
693 | acorn@^8.8.0:
694 | version "8.8.1"
695 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
696 | integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
697 |
698 | ansi-styles@^3.2.1:
699 | version "3.2.1"
700 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
701 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
702 | dependencies:
703 | color-convert "^1.9.0"
704 |
705 | assertion-error@^1.1.0:
706 | version "1.1.0"
707 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
708 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
709 |
710 | babel-plugin-macros@^3.1.0:
711 | version "3.1.0"
712 | resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz"
713 | integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==
714 | dependencies:
715 | "@babel/runtime" "^7.12.5"
716 | cosmiconfig "^7.0.0"
717 | resolve "^1.19.0"
718 |
719 | bootstrap@^5.2.2:
720 | version "5.2.2"
721 | resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.2.tgz"
722 | integrity sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ==
723 |
724 | browserslist@^4.21.3:
725 | version "4.21.4"
726 | resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz"
727 | integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==
728 | dependencies:
729 | caniuse-lite "^1.0.30001400"
730 | electron-to-chromium "^1.4.251"
731 | node-releases "^2.0.6"
732 | update-browserslist-db "^1.0.9"
733 |
734 | callsites@^3.0.0:
735 | version "3.1.0"
736 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
737 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
738 |
739 | caniuse-lite@^1.0.30001400:
740 | version "1.0.30001414"
741 | resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz"
742 | integrity sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==
743 |
744 | chai@^4.3.6:
745 | version "4.3.6"
746 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c"
747 | integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==
748 | dependencies:
749 | assertion-error "^1.1.0"
750 | check-error "^1.0.2"
751 | deep-eql "^3.0.1"
752 | get-func-name "^2.0.0"
753 | loupe "^2.3.1"
754 | pathval "^1.1.1"
755 | type-detect "^4.0.5"
756 |
757 | chalk@^2.0.0:
758 | version "2.4.2"
759 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
760 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
761 | dependencies:
762 | ansi-styles "^3.2.1"
763 | escape-string-regexp "^1.0.5"
764 | supports-color "^5.3.0"
765 |
766 | check-error@^1.0.2:
767 | version "1.0.2"
768 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
769 | integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==
770 |
771 | classnames@^2.3.1:
772 | version "2.3.2"
773 | resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz"
774 | integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
775 |
776 | clsx@^1.2.1:
777 | version "1.2.1"
778 | resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz"
779 | integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
780 |
781 | color-convert@^1.9.0:
782 | version "1.9.3"
783 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
784 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
785 | dependencies:
786 | color-name "1.1.3"
787 |
788 | color-name@1.1.3:
789 | version "1.1.3"
790 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
791 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
792 |
793 | convert-source-map@^1.5.0, convert-source-map@^1.7.0:
794 | version "1.8.0"
795 | resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz"
796 | integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
797 | dependencies:
798 | safe-buffer "~5.1.1"
799 |
800 | cosmiconfig@^7.0.0:
801 | version "7.0.1"
802 | resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz"
803 | integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==
804 | dependencies:
805 | "@types/parse-json" "^4.0.0"
806 | import-fresh "^3.2.1"
807 | parse-json "^5.0.0"
808 | path-type "^4.0.0"
809 | yaml "^1.10.0"
810 |
811 | csstype@^3.0.2, csstype@^3.1.1:
812 | version "3.1.1"
813 | resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz"
814 | integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
815 |
816 | debug@^4.1.0, debug@^4.3.4:
817 | version "4.3.4"
818 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
819 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
820 | dependencies:
821 | ms "2.1.2"
822 |
823 | deep-eql@^3.0.1:
824 | version "3.0.1"
825 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
826 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==
827 | dependencies:
828 | type-detect "^4.0.0"
829 |
830 | dequal@^2.0.2:
831 | version "2.0.3"
832 | resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz"
833 | integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
834 |
835 | dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1:
836 | version "5.2.1"
837 | resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz"
838 | integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
839 | dependencies:
840 | "@babel/runtime" "^7.8.7"
841 | csstype "^3.0.2"
842 |
843 | electron-to-chromium@^1.4.251:
844 | version "1.4.270"
845 | resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz"
846 | integrity sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg==
847 |
848 | error-ex@^1.3.1:
849 | version "1.3.2"
850 | resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"
851 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
852 | dependencies:
853 | is-arrayish "^0.2.1"
854 |
855 | esbuild-android-64@0.15.10:
856 | version "0.15.10"
857 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz#8a59a84acbf2eca96996cadc35642cf055c494f0"
858 | integrity sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==
859 |
860 | esbuild-android-64@0.15.12:
861 | version "0.15.12"
862 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz#5e8151d5f0a748c71a7fbea8cee844ccf008e6fc"
863 | integrity sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==
864 |
865 | esbuild-android-arm64@0.15.10:
866 | version "0.15.10"
867 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz#f453851dc1d8c5409a38cf7613a33852faf4915d"
868 | integrity sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==
869 |
870 | esbuild-android-arm64@0.15.12:
871 | version "0.15.12"
872 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz#5ee72a6baa444bc96ffcb472a3ba4aba2cc80666"
873 | integrity sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==
874 |
875 | esbuild-darwin-64@0.15.10:
876 | version "0.15.10"
877 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz#778bd29c8186ff47b176c8af58c08cf0fb8e6b86"
878 | integrity sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==
879 |
880 | esbuild-darwin-64@0.15.12:
881 | version "0.15.12"
882 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz#70047007e093fa1b3ba7ef86f9b3fa63db51fe25"
883 | integrity sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==
884 |
885 | esbuild-darwin-arm64@0.15.10:
886 | version "0.15.10"
887 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz#b30bbefb46dc3c5d4708b0435e52f6456578d6df"
888 | integrity sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==
889 |
890 | esbuild-darwin-arm64@0.15.12:
891 | version "0.15.12"
892 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz#41c951f23d9a70539bcca552bae6e5196696ae04"
893 | integrity sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==
894 |
895 | esbuild-freebsd-64@0.15.10:
896 | version "0.15.10"
897 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz#ab301c5f6ded5110dbdd611140bef1a7c2e99236"
898 | integrity sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==
899 |
900 | esbuild-freebsd-64@0.15.12:
901 | version "0.15.12"
902 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz#a761b5afd12bbedb7d56c612e9cfa4d2711f33f0"
903 | integrity sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==
904 |
905 | esbuild-freebsd-arm64@0.15.10:
906 | version "0.15.10"
907 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz#a5b09b867a6ff49110f52343b6f12265db63d43f"
908 | integrity sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==
909 |
910 | esbuild-freebsd-arm64@0.15.12:
911 | version "0.15.12"
912 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz#6b0839d4d58deabc6cbd96276eb8cbf94f7f335e"
913 | integrity sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==
914 |
915 | esbuild-linux-32@0.15.10:
916 | version "0.15.10"
917 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz#5282fe9915641caf9c8070e4ba2c3e16d358f837"
918 | integrity sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==
919 |
920 | esbuild-linux-32@0.15.12:
921 | version "0.15.12"
922 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz#bd50bfe22514d434d97d5150977496e2631345b4"
923 | integrity sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==
924 |
925 | esbuild-linux-64@0.15.10:
926 | version "0.15.10"
927 | resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz"
928 | integrity sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==
929 |
930 | esbuild-linux-64@0.15.12:
931 | version "0.15.12"
932 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz#074bb2b194bf658245f8490f29c01ffcdfa8c931"
933 | integrity sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==
934 |
935 | esbuild-linux-arm64@0.15.10:
936 | version "0.15.10"
937 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz#2f0056e9d5286edb0185b56655caa8c574d8dbe7"
938 | integrity sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==
939 |
940 | esbuild-linux-arm64@0.15.12:
941 | version "0.15.12"
942 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz#3bf789c4396dc032875a122988efd6f3733f28f5"
943 | integrity sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==
944 |
945 | esbuild-linux-arm@0.15.10:
946 | version "0.15.10"
947 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz#40a9270da3c8ffa32cf72e24a79883e323dff08d"
948 | integrity sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==
949 |
950 | esbuild-linux-arm@0.15.12:
951 | version "0.15.12"
952 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz#b91b5a8d470053f6c2c9c8a5e67ec10a71fe4a67"
953 | integrity sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==
954 |
955 | esbuild-linux-mips64le@0.15.10:
956 | version "0.15.10"
957 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz#90ce1c4ee0202edb4ac69807dea77f7e5804abc4"
958 | integrity sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==
959 |
960 | esbuild-linux-mips64le@0.15.12:
961 | version "0.15.12"
962 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz#2fb54099ada3c950a7536dfcba46172c61e580e2"
963 | integrity sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==
964 |
965 | esbuild-linux-ppc64le@0.15.10:
966 | version "0.15.10"
967 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz#782837ae7bd5b279178106c9dd801755a21fabdf"
968 | integrity sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==
969 |
970 | esbuild-linux-ppc64le@0.15.12:
971 | version "0.15.12"
972 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz#9e3b8c09825fb27886249dfb3142a750df29a1b7"
973 | integrity sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==
974 |
975 | esbuild-linux-riscv64@0.15.10:
976 | version "0.15.10"
977 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz#d7420d806ece5174f24f4634303146f915ab4207"
978 | integrity sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==
979 |
980 | esbuild-linux-riscv64@0.15.12:
981 | version "0.15.12"
982 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz#923d0f5b6e12ee0d1fe116b08e4ae4478fe40693"
983 | integrity sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==
984 |
985 | esbuild-linux-s390x@0.15.10:
986 | version "0.15.10"
987 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz#21fdf0cb3494a7fb520a71934e4dffce67fe47be"
988 | integrity sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==
989 |
990 | esbuild-linux-s390x@0.15.12:
991 | version "0.15.12"
992 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz#3b1620220482b96266a0c6d9d471d451a1eab86f"
993 | integrity sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==
994 |
995 | esbuild-netbsd-64@0.15.10:
996 | version "0.15.10"
997 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz#6c06b3107e3df53de381e6299184d4597db0440f"
998 | integrity sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==
999 |
1000 | esbuild-netbsd-64@0.15.12:
1001 | version "0.15.12"
1002 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz#276730f80da646859b1af5a740e7802d8cd73e42"
1003 | integrity sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==
1004 |
1005 | esbuild-openbsd-64@0.15.10:
1006 | version "0.15.10"
1007 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz#4daef5f5d8e74bbda53b65160029445d582570cf"
1008 | integrity sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==
1009 |
1010 | esbuild-openbsd-64@0.15.12:
1011 | version "0.15.12"
1012 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz#bd0eea1dd2ca0722ed489d88c26714034429f8ae"
1013 | integrity sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==
1014 |
1015 | esbuild-sunos-64@0.15.10:
1016 | version "0.15.10"
1017 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz#5fe7bef267a02f322fd249a8214d0274937388a7"
1018 | integrity sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==
1019 |
1020 | esbuild-sunos-64@0.15.12:
1021 | version "0.15.12"
1022 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz#5e56bf9eef3b2d92360d6d29dcde7722acbecc9e"
1023 | integrity sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==
1024 |
1025 | esbuild-windows-32@0.15.10:
1026 | version "0.15.10"
1027 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz#48e3dde25ab0135579a288b30ab6ddef6d1f0b28"
1028 | integrity sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==
1029 |
1030 | esbuild-windows-32@0.15.12:
1031 | version "0.15.12"
1032 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz#a4f1a301c1a2fa7701fcd4b91ef9d2620cf293d0"
1033 | integrity sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==
1034 |
1035 | esbuild-windows-64@0.15.10:
1036 | version "0.15.10"
1037 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz#387a9515bef3fee502d277a5d0a2db49a4ecda05"
1038 | integrity sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==
1039 |
1040 | esbuild-windows-64@0.15.12:
1041 | version "0.15.12"
1042 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz#bc2b467541744d653be4fe64eaa9b0dbbf8e07f6"
1043 | integrity sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==
1044 |
1045 | esbuild-windows-arm64@0.15.10:
1046 | version "0.15.10"
1047 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz#5a6fcf2fa49e895949bf5495cf088ab1b43ae879"
1048 | integrity sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==
1049 |
1050 | esbuild-windows-arm64@0.15.12:
1051 | version "0.15.12"
1052 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz#9a7266404334a86be800957eaee9aef94c3df328"
1053 | integrity sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==
1054 |
1055 | esbuild@^0.15.6:
1056 | version "0.15.10"
1057 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz"
1058 | integrity sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==
1059 | optionalDependencies:
1060 | "@esbuild/android-arm" "0.15.10"
1061 | "@esbuild/linux-loong64" "0.15.10"
1062 | esbuild-android-64 "0.15.10"
1063 | esbuild-android-arm64 "0.15.10"
1064 | esbuild-darwin-64 "0.15.10"
1065 | esbuild-darwin-arm64 "0.15.10"
1066 | esbuild-freebsd-64 "0.15.10"
1067 | esbuild-freebsd-arm64 "0.15.10"
1068 | esbuild-linux-32 "0.15.10"
1069 | esbuild-linux-64 "0.15.10"
1070 | esbuild-linux-arm "0.15.10"
1071 | esbuild-linux-arm64 "0.15.10"
1072 | esbuild-linux-mips64le "0.15.10"
1073 | esbuild-linux-ppc64le "0.15.10"
1074 | esbuild-linux-riscv64 "0.15.10"
1075 | esbuild-linux-s390x "0.15.10"
1076 | esbuild-netbsd-64 "0.15.10"
1077 | esbuild-openbsd-64 "0.15.10"
1078 | esbuild-sunos-64 "0.15.10"
1079 | esbuild-windows-32 "0.15.10"
1080 | esbuild-windows-64 "0.15.10"
1081 | esbuild-windows-arm64 "0.15.10"
1082 |
1083 | esbuild@^0.15.9:
1084 | version "0.15.12"
1085 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.12.tgz#6c8e22d6d3b7430d165c33848298d3fc9a1f251c"
1086 | integrity sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==
1087 | optionalDependencies:
1088 | "@esbuild/android-arm" "0.15.12"
1089 | "@esbuild/linux-loong64" "0.15.12"
1090 | esbuild-android-64 "0.15.12"
1091 | esbuild-android-arm64 "0.15.12"
1092 | esbuild-darwin-64 "0.15.12"
1093 | esbuild-darwin-arm64 "0.15.12"
1094 | esbuild-freebsd-64 "0.15.12"
1095 | esbuild-freebsd-arm64 "0.15.12"
1096 | esbuild-linux-32 "0.15.12"
1097 | esbuild-linux-64 "0.15.12"
1098 | esbuild-linux-arm "0.15.12"
1099 | esbuild-linux-arm64 "0.15.12"
1100 | esbuild-linux-mips64le "0.15.12"
1101 | esbuild-linux-ppc64le "0.15.12"
1102 | esbuild-linux-riscv64 "0.15.12"
1103 | esbuild-linux-s390x "0.15.12"
1104 | esbuild-netbsd-64 "0.15.12"
1105 | esbuild-openbsd-64 "0.15.12"
1106 | esbuild-sunos-64 "0.15.12"
1107 | esbuild-windows-32 "0.15.12"
1108 | esbuild-windows-64 "0.15.12"
1109 | esbuild-windows-arm64 "0.15.12"
1110 |
1111 | escalade@^3.1.1:
1112 | version "3.1.1"
1113 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
1114 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
1115 |
1116 | escape-string-regexp@^1.0.5:
1117 | version "1.0.5"
1118 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
1119 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
1120 |
1121 | escape-string-regexp@^4.0.0:
1122 | version "4.0.0"
1123 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
1124 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
1125 |
1126 | find-root@^1.1.0:
1127 | version "1.1.0"
1128 | resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz"
1129 | integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
1130 |
1131 | fsevents@~2.3.2:
1132 | version "2.3.2"
1133 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
1134 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
1135 |
1136 | function-bind@^1.1.1:
1137 | version "1.1.1"
1138 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
1139 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
1140 |
1141 | gensync@^1.0.0-beta.2:
1142 | version "1.0.0-beta.2"
1143 | resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"
1144 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
1145 |
1146 | get-func-name@^2.0.0:
1147 | version "2.0.0"
1148 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
1149 | integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==
1150 |
1151 | globals@^11.1.0:
1152 | version "11.12.0"
1153 | resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
1154 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
1155 |
1156 | has-flag@^3.0.0:
1157 | version "3.0.0"
1158 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
1159 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
1160 |
1161 | has@^1.0.3:
1162 | version "1.0.3"
1163 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
1164 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
1165 | dependencies:
1166 | function-bind "^1.1.1"
1167 |
1168 | hoist-non-react-statics@^3.3.1:
1169 | version "3.3.2"
1170 | resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz"
1171 | integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
1172 | dependencies:
1173 | react-is "^16.7.0"
1174 |
1175 | import-fresh@^3.2.1:
1176 | version "3.3.0"
1177 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
1178 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
1179 | dependencies:
1180 | parent-module "^1.0.0"
1181 | resolve-from "^4.0.0"
1182 |
1183 | invariant@^2.2.4:
1184 | version "2.2.4"
1185 | resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz"
1186 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
1187 | dependencies:
1188 | loose-envify "^1.0.0"
1189 |
1190 | is-arrayish@^0.2.1:
1191 | version "0.2.1"
1192 | resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
1193 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
1194 |
1195 | is-core-module@^2.9.0:
1196 | version "2.10.0"
1197 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz"
1198 | integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==
1199 | dependencies:
1200 | has "^1.0.3"
1201 |
1202 | jotai@^1.8.6:
1203 | version "1.8.6"
1204 | resolved "https://registry.yarnpkg.com/jotai/-/jotai-1.8.6.tgz#4112f619c0153db9fc04025b871ab02a6800cfe1"
1205 | integrity sha512-6JXNd2ewR6Ur0hGY0kRJebQ++p7lN/8kNdGNXv7XT11FDPxAtPN2XLM+m0w4bV22f1knQlG8ZpVLfY6BEGF+UQ==
1206 |
1207 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
1208 | version "4.0.0"
1209 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
1210 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1211 |
1212 | jsesc@^2.5.1:
1213 | version "2.5.2"
1214 | resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
1215 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
1216 |
1217 | json-parse-even-better-errors@^2.3.0:
1218 | version "2.3.1"
1219 | resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"
1220 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
1221 |
1222 | json5@^2.2.1:
1223 | version "2.2.1"
1224 | resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz"
1225 | integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
1226 |
1227 | lines-and-columns@^1.1.6:
1228 | version "1.2.4"
1229 | resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
1230 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
1231 |
1232 | local-pkg@^0.4.2:
1233 | version "0.4.2"
1234 | resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.2.tgz#13107310b77e74a0e513147a131a2ba288176c2f"
1235 | integrity sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==
1236 |
1237 | lodash@^4.17.21:
1238 | version "4.17.21"
1239 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
1240 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
1241 |
1242 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
1243 | version "1.4.0"
1244 | resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
1245 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1246 | dependencies:
1247 | js-tokens "^3.0.0 || ^4.0.0"
1248 |
1249 | loupe@^2.3.1:
1250 | version "2.3.4"
1251 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3"
1252 | integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==
1253 | dependencies:
1254 | get-func-name "^2.0.0"
1255 |
1256 | magic-string@^0.26.2:
1257 | version "0.26.5"
1258 | resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.5.tgz"
1259 | integrity sha512-yXUIYOOQnEHKHOftp5shMWpB9ImfgfDJpapa38j/qMtTj5QHWucvxP4lUtuRmHT9vAzvtpHkWKXW9xBwimXeNg==
1260 | dependencies:
1261 | sourcemap-codec "^1.4.8"
1262 |
1263 | ms@2.1.2:
1264 | version "2.1.2"
1265 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
1266 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1267 |
1268 | nanoid@^3.3.4:
1269 | version "3.3.4"
1270 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz"
1271 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
1272 |
1273 | node-releases@^2.0.6:
1274 | version "2.0.6"
1275 | resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz"
1276 | integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
1277 |
1278 | object-assign@^4.1.1:
1279 | version "4.1.1"
1280 | resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
1281 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
1282 |
1283 | parent-module@^1.0.0:
1284 | version "1.0.1"
1285 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
1286 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1287 | dependencies:
1288 | callsites "^3.0.0"
1289 |
1290 | parse-json@^5.0.0:
1291 | version "5.2.0"
1292 | resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz"
1293 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
1294 | dependencies:
1295 | "@babel/code-frame" "^7.0.0"
1296 | error-ex "^1.3.1"
1297 | json-parse-even-better-errors "^2.3.0"
1298 | lines-and-columns "^1.1.6"
1299 |
1300 | path-parse@^1.0.7:
1301 | version "1.0.7"
1302 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
1303 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1304 |
1305 | path-type@^4.0.0:
1306 | version "4.0.0"
1307 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
1308 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1309 |
1310 | pathval@^1.1.1:
1311 | version "1.1.1"
1312 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
1313 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
1314 |
1315 | picocolors@^1.0.0:
1316 | version "1.0.0"
1317 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
1318 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
1319 |
1320 | postcss@^8.4.16:
1321 | version "8.4.17"
1322 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz"
1323 | integrity sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==
1324 | dependencies:
1325 | nanoid "^3.3.4"
1326 | picocolors "^1.0.0"
1327 | source-map-js "^1.0.2"
1328 |
1329 | postcss@^8.4.18:
1330 | version "8.4.18"
1331 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.18.tgz#6d50046ea7d3d66a85e0e782074e7203bc7fbca2"
1332 | integrity sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==
1333 | dependencies:
1334 | nanoid "^3.3.4"
1335 | picocolors "^1.0.0"
1336 | source-map-js "^1.0.2"
1337 |
1338 | prop-types-extra@^1.1.0:
1339 | version "1.1.1"
1340 | resolved "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz"
1341 | integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==
1342 | dependencies:
1343 | react-is "^16.3.2"
1344 | warning "^4.0.0"
1345 |
1346 | prop-types@^15.6.2, prop-types@^15.8.1:
1347 | version "15.8.1"
1348 | resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
1349 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
1350 | dependencies:
1351 | loose-envify "^1.4.0"
1352 | object-assign "^4.1.1"
1353 | react-is "^16.13.1"
1354 |
1355 | react-bootstrap@^2.5.0:
1356 | version "2.5.0"
1357 | resolved "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.5.0.tgz"
1358 | integrity sha512-j/aLR+okzbYk61TM3eDOU1NqOqnUdwyVrF+ojoCRUxPdzc2R0xXvqyRsjSoyRoCo7n82Fs/LWjPCin/QJNdwvA==
1359 | dependencies:
1360 | "@babel/runtime" "^7.17.2"
1361 | "@restart/hooks" "^0.4.6"
1362 | "@restart/ui" "^1.3.1"
1363 | "@types/react-transition-group" "^4.4.4"
1364 | classnames "^2.3.1"
1365 | dom-helpers "^5.2.1"
1366 | invariant "^2.2.4"
1367 | prop-types "^15.8.1"
1368 | prop-types-extra "^1.1.0"
1369 | react-transition-group "^4.4.2"
1370 | uncontrollable "^7.2.1"
1371 | warning "^4.0.3"
1372 |
1373 | react-dom@^18.2.0:
1374 | version "18.2.0"
1375 | resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz"
1376 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
1377 | dependencies:
1378 | loose-envify "^1.1.0"
1379 | scheduler "^0.23.0"
1380 |
1381 | react-hook-form@^7.36.1:
1382 | version "7.36.1"
1383 | resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.36.1.tgz"
1384 | integrity sha512-EbYYkCG2p8ywe7ikOH2l02lAFMrrrslZi1I8fqd8ifDGNAkhomHZQzQsP6ksvzrWBKntRe8b5L5L7Zsd+Gm02Q==
1385 |
1386 | react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0:
1387 | version "16.13.1"
1388 | resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
1389 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
1390 |
1391 | react-is@^18.2.0:
1392 | version "18.2.0"
1393 | resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz"
1394 | integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
1395 |
1396 | react-lifecycles-compat@^3.0.4:
1397 | version "3.0.4"
1398 | resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz"
1399 | integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
1400 |
1401 | react-refresh@^0.14.0:
1402 | version "0.14.0"
1403 | resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz"
1404 | integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==
1405 |
1406 | react-transition-group@^4.4.2, react-transition-group@^4.4.5:
1407 | version "4.4.5"
1408 | resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz"
1409 | integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
1410 | dependencies:
1411 | "@babel/runtime" "^7.5.5"
1412 | dom-helpers "^5.0.1"
1413 | loose-envify "^1.4.0"
1414 | prop-types "^15.6.2"
1415 |
1416 | react@^18.2.0:
1417 | version "18.2.0"
1418 | resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz"
1419 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
1420 | dependencies:
1421 | loose-envify "^1.1.0"
1422 |
1423 | regenerator-runtime@^0.13.4:
1424 | version "0.13.9"
1425 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
1426 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
1427 |
1428 | resolve-from@^4.0.0:
1429 | version "4.0.0"
1430 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
1431 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1432 |
1433 | resolve@^1.19.0, resolve@^1.22.1:
1434 | version "1.22.1"
1435 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz"
1436 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
1437 | dependencies:
1438 | is-core-module "^2.9.0"
1439 | path-parse "^1.0.7"
1440 | supports-preserve-symlinks-flag "^1.0.0"
1441 |
1442 | rollup@^2.79.1:
1443 | version "2.79.1"
1444 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7"
1445 | integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
1446 | optionalDependencies:
1447 | fsevents "~2.3.2"
1448 |
1449 | rollup@~2.78.0:
1450 | version "2.78.1"
1451 | resolved "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz"
1452 | integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==
1453 | optionalDependencies:
1454 | fsevents "~2.3.2"
1455 |
1456 | safe-buffer@~5.1.1:
1457 | version "5.1.2"
1458 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
1459 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
1460 |
1461 | scheduler@^0.23.0:
1462 | version "0.23.0"
1463 | resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz"
1464 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
1465 | dependencies:
1466 | loose-envify "^1.1.0"
1467 |
1468 | semver@^6.3.0:
1469 | version "6.3.0"
1470 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
1471 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1472 |
1473 | source-map-js@^1.0.2:
1474 | version "1.0.2"
1475 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
1476 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
1477 |
1478 | source-map@^0.5.7:
1479 | version "0.5.7"
1480 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
1481 | integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
1482 |
1483 | sourcemap-codec@^1.4.8:
1484 | version "1.4.8"
1485 | resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"
1486 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
1487 |
1488 | strip-literal@^0.4.2:
1489 | version "0.4.2"
1490 | resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-0.4.2.tgz#4f9fa6c38bb157b924e9ace7155ebf8a2342cbcf"
1491 | integrity sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==
1492 | dependencies:
1493 | acorn "^8.8.0"
1494 |
1495 | stylis@4.0.13:
1496 | version "4.0.13"
1497 | resolved "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz"
1498 | integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==
1499 |
1500 | supports-color@^5.3.0:
1501 | version "5.5.0"
1502 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
1503 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1504 | dependencies:
1505 | has-flag "^3.0.0"
1506 |
1507 | supports-preserve-symlinks-flag@^1.0.0:
1508 | version "1.0.0"
1509 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
1510 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
1511 |
1512 | tinybench@^2.3.0:
1513 | version "2.3.1"
1514 | resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.3.1.tgz#14f64e6b77d7ef0b1f6ab850c7a808c6760b414d"
1515 | integrity sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==
1516 |
1517 | tinypool@^0.3.0:
1518 | version "0.3.0"
1519 | resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.3.0.tgz#c405d8b743509fc28ea4ca358433190be654f819"
1520 | integrity sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==
1521 |
1522 | tinyspy@^1.0.2:
1523 | version "1.0.2"
1524 | resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.0.2.tgz#6da0b3918bfd56170fb3cd3a2b5ef832ee1dff0d"
1525 | integrity sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==
1526 |
1527 | to-fast-properties@^2.0.0:
1528 | version "2.0.0"
1529 | resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"
1530 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
1531 |
1532 | type-detect@^4.0.0, type-detect@^4.0.5:
1533 | version "4.0.8"
1534 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
1535 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
1536 |
1537 | typescript@^4.6.4:
1538 | version "4.8.4"
1539 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz"
1540 | integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==
1541 |
1542 | uncontrollable@^7.2.1:
1543 | version "7.2.1"
1544 | resolved "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz"
1545 | integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==
1546 | dependencies:
1547 | "@babel/runtime" "^7.6.3"
1548 | "@types/react" ">=16.9.11"
1549 | invariant "^2.2.4"
1550 | react-lifecycles-compat "^3.0.4"
1551 |
1552 | update-browserslist-db@^1.0.9:
1553 | version "1.0.9"
1554 | resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz"
1555 | integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==
1556 | dependencies:
1557 | escalade "^3.1.1"
1558 | picocolors "^1.0.0"
1559 |
1560 | vite@^3.0.0:
1561 | version "3.2.1"
1562 | resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.1.tgz#dc1f54568300a7acdd89c8611e2719c21f1334f4"
1563 | integrity sha512-ADtMkfHuWq4tskJsri2n2FZkORO8ZyhI+zIz7zTrDAgDEtct1jdxOg3YsZBfHhKjmMoWLOSCr+64qrEDGo/DbQ==
1564 | dependencies:
1565 | esbuild "^0.15.9"
1566 | postcss "^8.4.18"
1567 | resolve "^1.22.1"
1568 | rollup "^2.79.1"
1569 | optionalDependencies:
1570 | fsevents "~2.3.2"
1571 |
1572 | vite@^3.0.2:
1573 | version "3.1.4"
1574 | resolved "https://registry.npmjs.org/vite/-/vite-3.1.4.tgz"
1575 | integrity sha512-JoQI08aBjY9lycL7jcEq4p9o1xUjq5aRvdH4KWaXtkSx7e7RpAh9D3IjzDWRD4Fg44LS3oDAIOG/Kq1L+82psA==
1576 | dependencies:
1577 | esbuild "^0.15.6"
1578 | postcss "^8.4.16"
1579 | resolve "^1.22.1"
1580 | rollup "~2.78.0"
1581 | optionalDependencies:
1582 | fsevents "~2.3.2"
1583 |
1584 | vitest@^0.24.3:
1585 | version "0.24.3"
1586 | resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.24.3.tgz#d91c7e2d557877d5270033efdf18add6063f0c97"
1587 | integrity sha512-aM0auuPPgMSstWvr851hB74g/LKaKBzSxcG3da7ejfZbx08Y21JpZmbmDYrMTCGhVZKqTGwzcnLMwyfz2WzkhQ==
1588 | dependencies:
1589 | "@types/chai" "^4.3.3"
1590 | "@types/chai-subset" "^1.3.3"
1591 | "@types/node" "*"
1592 | chai "^4.3.6"
1593 | debug "^4.3.4"
1594 | local-pkg "^0.4.2"
1595 | strip-literal "^0.4.2"
1596 | tinybench "^2.3.0"
1597 | tinypool "^0.3.0"
1598 | tinyspy "^1.0.2"
1599 | vite "^3.0.0"
1600 |
1601 | warning@^4.0.0, warning@^4.0.3:
1602 | version "4.0.3"
1603 | resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz"
1604 | integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
1605 | dependencies:
1606 | loose-envify "^1.0.0"
1607 |
1608 | yaml@^1.10.0:
1609 | version "1.10.2"
1610 | resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"
1611 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
1612 |
--------------------------------------------------------------------------------