├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── VRChatConfigurationEditor.sln
├── VRChatConfigurationEditor
├── App.config
├── App.xaml
├── App.xaml.cs
├── Bind.cs
├── MainWindow.xaml
├── MainWindow.xaml.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── Utils.cs
├── VRChatConfigurationEditor.csproj
├── icon.ico
├── languages
│ ├── en.xaml
│ ├── ja.xaml
│ ├── ko.xaml
│ ├── zh-CN.xaml
│ └── zh-TW.xaml
└── packages.config
├── images
└── jetbrains.svg
└── web-ui
├── .gitignore
├── index.html
├── locales
├── en.yaml
└── zh-CN.yaml
├── package.json
├── pnpm-lock.yaml
├── public
└── favicon.png
├── src
├── App.vue
├── api.ts
├── components
│ ├── Header.vue
│ ├── HelpIcon.vue
│ └── Locale.vue
├── i18n.ts
├── main.ts
├── shims-vue.d.ts
├── utils.ts
├── views
│ └── Home.vue
├── vite-env.d.ts
└── webview2.ts
├── tsconfig.json
└── vite.config.ts
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Ww][Ii][Nn]32/
27 | [Aa][Rr][Mm]/
28 | [Aa][Rr][Mm]64/
29 | bld/
30 | [Bb]in/
31 | [Oo]bj/
32 | [Oo]ut/
33 | [Ll]og/
34 | [Ll]ogs/
35 |
36 | # Visual Studio 2015/2017 cache/options directory
37 | .vs/
38 | # Uncomment if you have tasks that create the project's static files in wwwroot
39 | #wwwroot/
40 |
41 | # Visual Studio 2017 auto generated files
42 | Generated\ Files/
43 |
44 | # MSTest test Results
45 | [Tt]est[Rr]esult*/
46 | [Bb]uild[Ll]og.*
47 |
48 | # NUnit
49 | *.VisualState.xml
50 | TestResult.xml
51 | nunit-*.xml
52 |
53 | # Build Results of an ATL Project
54 | [Dd]ebugPS/
55 | [Rr]eleasePS/
56 | dlldata.c
57 |
58 | # Benchmark Results
59 | BenchmarkDotNet.Artifacts/
60 |
61 | # .NET Core
62 | project.lock.json
63 | project.fragment.lock.json
64 | artifacts/
65 |
66 | # ASP.NET Scaffolding
67 | ScaffoldingReadMe.txt
68 |
69 | # StyleCop
70 | StyleCopReport.xml
71 |
72 | # Files built by Visual Studio
73 | *_i.c
74 | *_p.c
75 | *_h.h
76 | *.ilk
77 | *.meta
78 | *.obj
79 | *.iobj
80 | *.pch
81 | *.pdb
82 | *.ipdb
83 | *.pgc
84 | *.pgd
85 | *.rsp
86 | *.sbr
87 | *.tlb
88 | *.tli
89 | *.tlh
90 | *.tmp
91 | *.tmp_proj
92 | *_wpftmp.csproj
93 | *.log
94 | *.vspscc
95 | *.vssscc
96 | .builds
97 | *.pidb
98 | *.svclog
99 | *.scc
100 |
101 | # Chutzpah Test files
102 | _Chutzpah*
103 |
104 | # Visual C++ cache files
105 | ipch/
106 | *.aps
107 | *.ncb
108 | *.opendb
109 | *.opensdf
110 | *.sdf
111 | *.cachefile
112 | *.VC.db
113 | *.VC.VC.opendb
114 |
115 | # Visual Studio profiler
116 | *.psess
117 | *.vsp
118 | *.vspx
119 | *.sap
120 |
121 | # Visual Studio Trace Files
122 | *.e2e
123 |
124 | # TFS 2012 Local Workspace
125 | $tf/
126 |
127 | # Guidance Automation Toolkit
128 | *.gpState
129 |
130 | # ReSharper is a .NET coding add-in
131 | _ReSharper*/
132 | *.[Rr]e[Ss]harper
133 | *.DotSettings.user
134 |
135 | # TeamCity is a build add-in
136 | _TeamCity*
137 |
138 | # DotCover is a Code Coverage Tool
139 | *.dotCover
140 |
141 | # AxoCover is a Code Coverage Tool
142 | .axoCover/*
143 | !.axoCover/settings.json
144 |
145 | # Coverlet is a free, cross platform Code Coverage Tool
146 | coverage*.json
147 | coverage*.xml
148 | coverage*.info
149 |
150 | # Visual Studio code coverage results
151 | *.coverage
152 | *.coveragexml
153 |
154 | # NCrunch
155 | _NCrunch_*
156 | .*crunch*.local.xml
157 | nCrunchTemp_*
158 |
159 | # MightyMoose
160 | *.mm.*
161 | AutoTest.Net/
162 |
163 | # Web workbench (sass)
164 | .sass-cache/
165 |
166 | # Installshield output folder
167 | [Ee]xpress/
168 |
169 | # DocProject is a documentation generator add-in
170 | DocProject/buildhelp/
171 | DocProject/Help/*.HxT
172 | DocProject/Help/*.HxC
173 | DocProject/Help/*.hhc
174 | DocProject/Help/*.hhk
175 | DocProject/Help/*.hhp
176 | DocProject/Help/Html2
177 | DocProject/Help/html
178 |
179 | # Click-Once directory
180 | publish/
181 |
182 | # Publish Web Output
183 | *.[Pp]ublish.xml
184 | *.azurePubxml
185 | # Note: Comment the next line if you want to checkin your web deploy settings,
186 | # but database connection strings (with potential passwords) will be unencrypted
187 | *.pubxml
188 | *.publishproj
189 |
190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
191 | # checkin your Azure Web App publish settings, but sensitive information contained
192 | # in these scripts will be unencrypted
193 | PublishScripts/
194 |
195 | # NuGet Packages
196 | *.nupkg
197 | # NuGet Symbol Packages
198 | *.snupkg
199 | # The packages folder can be ignored because of Package Restore
200 | **/[Pp]ackages/*
201 | # except build/, which is used as an MSBuild target.
202 | !**/[Pp]ackages/build/
203 | # Uncomment if necessary however generally it will be regenerated when needed
204 | #!**/[Pp]ackages/repositories.config
205 | # NuGet v3's project.json files produces more ignorable files
206 | *.nuget.props
207 | *.nuget.targets
208 |
209 | # Microsoft Azure Build Output
210 | csx/
211 | *.build.csdef
212 |
213 | # Microsoft Azure Emulator
214 | ecf/
215 | rcf/
216 |
217 | # Windows Store app package directories and files
218 | AppPackages/
219 | BundleArtifacts/
220 | Package.StoreAssociation.xml
221 | _pkginfo.txt
222 | *.appx
223 | *.appxbundle
224 | *.appxupload
225 |
226 | # Visual Studio cache files
227 | # files ending in .cache can be ignored
228 | *.[Cc]ache
229 | # but keep track of directories ending in .cache
230 | !?*.[Cc]ache/
231 |
232 | # Others
233 | ClientBin/
234 | ~$*
235 | *~
236 | *.dbmdl
237 | *.dbproj.schemaview
238 | *.jfm
239 | *.pfx
240 | *.publishsettings
241 | orleans.codegen.cs
242 |
243 | # Including strong name files can present a security risk
244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
245 | #*.snk
246 |
247 | # Since there are multiple workflows, uncomment next line to ignore bower_components
248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
249 | #bower_components/
250 |
251 | # RIA/Silverlight projects
252 | Generated_Code/
253 |
254 | # Backup & report files from converting an old project file
255 | # to a newer Visual Studio version. Backup files are not needed,
256 | # because we have git ;-)
257 | _UpgradeReport_Files/
258 | Backup*/
259 | UpgradeLog*.XML
260 | UpgradeLog*.htm
261 | ServiceFabricBackup/
262 | *.rptproj.bak
263 |
264 | # SQL Server files
265 | *.mdf
266 | *.ldf
267 | *.ndf
268 |
269 | # Business Intelligence projects
270 | *.rdl.data
271 | *.bim.layout
272 | *.bim_*.settings
273 | *.rptproj.rsuser
274 | *- [Bb]ackup.rdl
275 | *- [Bb]ackup ([0-9]).rdl
276 | *- [Bb]ackup ([0-9][0-9]).rdl
277 |
278 | # Microsoft Fakes
279 | FakesAssemblies/
280 |
281 | # GhostDoc plugin setting file
282 | *.GhostDoc.xml
283 |
284 | # Node.js Tools for Visual Studio
285 | .ntvs_analysis.dat
286 | node_modules/
287 |
288 | # Visual Studio 6 build log
289 | *.plg
290 |
291 | # Visual Studio 6 workspace options file
292 | *.opt
293 |
294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
295 | *.vbw
296 |
297 | # Visual Studio LightSwitch build output
298 | **/*.HTMLClient/GeneratedArtifacts
299 | **/*.DesktopClient/GeneratedArtifacts
300 | **/*.DesktopClient/ModelManifest.xml
301 | **/*.Server/GeneratedArtifacts
302 | **/*.Server/ModelManifest.xml
303 | _Pvt_Extensions
304 |
305 | # Paket dependency manager
306 | .paket/paket.exe
307 | paket-files/
308 |
309 | # FAKE - F# Make
310 | .fake/
311 |
312 | # CodeRush personal settings
313 | .cr/personal
314 |
315 | # Python Tools for Visual Studio (PTVS)
316 | __pycache__/
317 | *.pyc
318 |
319 | # Cake - Uncomment if you are using it
320 | # tools/**
321 | # !tools/packages.config
322 |
323 | # Tabs Studio
324 | *.tss
325 |
326 | # Telerik's JustMock configuration file
327 | *.jmconfig
328 |
329 | # BizTalk build output
330 | *.btp.cs
331 | *.btm.cs
332 | *.odx.cs
333 | *.xsd.cs
334 |
335 | # OpenCover UI analysis results
336 | OpenCover/
337 |
338 | # Azure Stream Analytics local run output
339 | ASALocalRun/
340 |
341 | # MSBuild Binary and Structured Log
342 | *.binlog
343 |
344 | # NVidia Nsight GPU debugger configuration file
345 | *.nvuser
346 |
347 | # MFractors (Xamarin productivity tool) working folder
348 | .mfractor/
349 |
350 | # Local History for Visual Studio
351 | .localhistory/
352 |
353 | # BeatPulse healthcheck temp database
354 | healthchecksdb
355 |
356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
357 | MigrationBackup/
358 |
359 | # Ionide (cross platform F# VS Code tools) working folder
360 | .ionide/
361 |
362 | # Fody - auto-generated XML schema
363 | FodyWeavers.xsd
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Gizmo
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 | # VRChat Configuration Editor
2 |
3 | [](https://github.com/project-vrcat/VRChatConfigurationEditor/releases/latest)
4 | [](./LICENSE)
5 |
6 | ## Installation
7 |
8 | ### Install pre-built binary
9 |
10 | Pre-built binary are available here:
11 | [Release](https://github.com/project-vrcat/VRChatConfigurationEditor/releases/latest)
12 |
13 | Download the binary compatible with your platform, unpack and run.
14 |
15 | ## Thanks
16 |
17 | Thanks to [JetBrains](https://jb.gg/OpenSource) for the open source license(s).
18 |
19 | [](https://jb.gg/OpenSource)
20 |
21 | ## License
22 |
23 | Code is distributed under MIT license, feel free to use it in your proprietary projects as well.
--------------------------------------------------------------------------------
/VRChatConfigurationEditor.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.31702.278
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VRChatConfigurationEditor", "VRChatConfigurationEditor\VRChatConfigurationEditor.csproj", "{519744D4-B729-4183-A276-6C5E409B0E68}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|x64 = Debug|x64
12 | Release|Any CPU = Release|Any CPU
13 | Release|x64 = Release|x64
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {519744D4-B729-4183-A276-6C5E409B0E68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {519744D4-B729-4183-A276-6C5E409B0E68}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {519744D4-B729-4183-A276-6C5E409B0E68}.Debug|x64.ActiveCfg = Debug|x64
19 | {519744D4-B729-4183-A276-6C5E409B0E68}.Debug|x64.Build.0 = Debug|x64
20 | {519744D4-B729-4183-A276-6C5E409B0E68}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {519744D4-B729-4183-A276-6C5E409B0E68}.Release|Any CPU.Build.0 = Release|Any CPU
22 | {519744D4-B729-4183-A276-6C5E409B0E68}.Release|x64.ActiveCfg = Release|x64
23 | {519744D4-B729-4183-A276-6C5E409B0E68}.Release|x64.Build.0 = Release|x64
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {CD068749-E31B-44A1-898F-A17352A4174A}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Configuration;
4 | using System.Data;
5 | using System.Linq;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 |
9 | namespace VRChatConfigurationEditor
10 | {
11 | ///
12 | /// App.xaml 的交互逻辑
13 | ///
14 | public partial class App : Application
15 | {
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/Bind.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Web.WebView2.Core;
2 | using Microsoft.Web.WebView2.Wpf;
3 | using Newtonsoft.Json;
4 | using Ookii.Dialogs.Wpf;
5 | using System;
6 | using System.Collections.Generic;
7 | using System.Diagnostics;
8 | using System.IO;
9 | using System.Runtime.InteropServices;
10 |
11 | namespace VRChatConfigurationEditor
12 | {
13 | class Message
14 | {
15 | public string Method { get; set; }
16 | public List Args { get; set; }
17 | }
18 |
19 | class Bind
20 | {
21 | private readonly WebView2 _webView;
22 | private readonly string _vrcPath;
23 |
24 | public Bind(WebView2 webView)
25 | {
26 | _webView = webView;
27 |
28 | string localLow = GetLocalLow();
29 | if (localLow != "") _vrcPath = Path.Combine(localLow, @"VRChat\VRChat");
30 | }
31 |
32 | public void MessageReceived(CoreWebView2WebMessageReceivedEventArgs args)
33 | {
34 | string jsonMessage = args.WebMessageAsJson;
35 | Message message = JsonConvert.DeserializeObject(jsonMessage);
36 | if (message == null) return;
37 | switch (message.Method)
38 | {
39 | case "openURL":
40 | if (message.Args == null || message.Args.Count < 1) break;
41 | OpenURL(message.Args[0]);
42 | break;
43 | case "selectDirectory":
44 | if (message.Args == null || message.Args.Count < 1) return;
45 | SelectDirectory(message.Args[0], message.Args.Count >= 2 ? message.Args[1] : "");
46 | break;
47 | case "loadConfigFile":
48 | if (message.Args == null || message.Args.Count < 1) return;
49 | LoadConfigFile(message.Args[0]);
50 | break;
51 | case "saveConfigFile":
52 | if (message.Args == null || message.Args.Count < 1) return;
53 | SaveConfigFile(message.Args[0], message.Args[1]);
54 | break;
55 | }
56 | }
57 |
58 | private void OpenURL(string url)
59 | {
60 | Process.Start(new ProcessStartInfo(url));
61 | }
62 |
63 | private void SelectDirectory(string key, string title)
64 | {
65 | VistaFolderBrowserDialog dialog = new VistaFolderBrowserDialog()
66 | {
67 | Description = title,
68 | UseDescriptionForTitle = true
69 | };
70 | var ok = dialog.ShowDialog();
71 | string path;
72 | if (!ok.HasValue || !(bool)ok) path = "";
73 | else path = dialog.SelectedPath;
74 | string data = JsonConvert.SerializeObject(new Message()
75 | {
76 | Method = "selectDirectory",
77 | Args = new List() { key, path }
78 | });
79 | _webView.CoreWebView2.PostWebMessageAsJson(data);
80 | }
81 |
82 | [DllImport("shell32.dll")]
83 | static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out IntPtr pszPath);
84 | public string GetLocalLow()
85 | {
86 | // https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid#FOLDERID_LOCALAPPDATALOW
87 | Guid localLowId = new Guid("A520A1A4-1780-4FF6-BD18-167343C5AF16");
88 | int hr = SHGetKnownFolderPath(localLowId, 0, IntPtr.Zero, out IntPtr pPath);
89 | return hr >= 0 ? Marshal.PtrToStringAuto(pPath) : "";
90 | }
91 |
92 | public void LoadConfigFile(string key)
93 | {
94 | string configFile = Path.Combine(_vrcPath, "config.json");
95 | string configData = "{}";
96 | if (File.Exists(configFile)) configData = File.ReadAllText(configFile);
97 | string data = JsonConvert.SerializeObject(new Message()
98 | {
99 | Method = "loadConfigFile",
100 | Args = new List() { key, configData }
101 | });
102 | _webView.CoreWebView2.PostWebMessageAsJson(data);
103 | }
104 |
105 | public void SaveConfigFile(string key, string data)
106 | {
107 | string configFile = Path.Combine(_vrcPath, "config.json");
108 | Message message = new Message()
109 | {
110 | Method = "saveConfigFile",
111 | Args = new List() { key, "success" }
112 | };
113 | try
114 | {
115 | File.WriteAllText(configFile, data);
116 | }
117 | catch (Exception e)
118 | {
119 | Debug.WriteLine(e);
120 | message.Args[1] = e.Message;
121 | }
122 | _webView.CoreWebView2.PostWebMessageAsJson(JsonConvert.SerializeObject(message));
123 | }
124 | }
125 | }
126 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/MainWindow.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/MainWindow.xaml.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Web.WebView2.Core;
2 | using Microsoft.Web.WebView2.Wpf;
3 | using System;
4 | using System.Diagnostics;
5 | using System.IO;
6 | using System.Reflection;
7 | using System.Windows;
8 | using System.Windows.Controls;
9 |
10 | namespace VRChatConfigurationEditor
11 | {
12 | ///
13 | /// MainWindow.xaml 的交互逻辑
14 | ///
15 | public partial class MainWindow : Window
16 | {
17 | private readonly WebView2 _webView = new WebView2();
18 | private Bind _bind;
19 | private const string VirtualHost = "vrc.conf.editor.invalid";
20 | public MainWindow()
21 | {
22 | InitializeComponent();
23 | AppInit();
24 | WebViewInit();
25 | }
26 |
27 | private void AppInit()
28 | {
29 | string systemLanguage = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
30 | ResourceDictionary lang = LoadLanguage(systemLanguage);
31 | if (lang == null && systemLanguage.Contains("-")) lang = LoadLanguage(systemLanguage.Split('-')[0]);
32 | if (lang == null) return;
33 | if (Resources.MergedDictionaries.Count > 0) Resources.MergedDictionaries.Clear();
34 | Resources.MergedDictionaries.Add(lang);
35 | }
36 |
37 | private void WebViewInit()
38 | {
39 | if (GetWebView2Version() == "") return;
40 |
41 | _webView.CoreWebView2InitializationCompleted += _webView_CoreWebView2InitializationCompleted;
42 | _webView.Loaded += _webView_Loaded;
43 |
44 | DockPanel panel = new DockPanel();
45 | panel.Children.Add(_webView);
46 | Content = panel;
47 | }
48 |
49 | private void _webView_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
50 | {
51 | if (!e.IsSuccess) return;
52 | CoreWebView2Settings settings = _webView.CoreWebView2.Settings;
53 | #if !DEBUG
54 | settings.AreDevToolsEnabled = false;
55 | #endif
56 | settings.IsPinchZoomEnabled = false;
57 | settings.IsZoomControlEnabled = false;
58 | settings.IsPasswordAutosaveEnabled = false;
59 | settings.IsStatusBarEnabled = false;
60 | }
61 |
62 | private void CoreWebView2_WebMessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs args)
63 | {
64 | _bind.MessageReceived(args);
65 | }
66 |
67 | private async void _webView_Loaded(object sender, RoutedEventArgs e)
68 | {
69 | AssemblyName name = Assembly.GetExecutingAssembly().GetName();
70 | string cacheFolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), name.Name);
71 | CoreWebView2Environment env = await CoreWebView2Environment.
72 | CreateAsync(null, cacheFolderPath).ConfigureAwait(true);
73 |
74 | await _webView.EnsureCoreWebView2Async(env);
75 |
76 | _webView.CoreWebView2.SetVirtualHostNameToFolderMapping(
77 | VirtualHost, @"public", CoreWebView2HostResourceAccessKind.DenyCors);
78 |
79 | _webView.Source = new Uri($"https://{VirtualHost}/index.html");
80 | //_webView.Source = new Uri("http://localhost:3000/index.html");
81 | _webView.CoreWebView2.WebMessageReceived += CoreWebView2_WebMessageReceived;
82 |
83 | _bind = new Bind(_webView);
84 | }
85 |
86 | private void RuntimeDownloadButton_OnClick(object sender, RoutedEventArgs e)
87 | {
88 | //string url = "https://go.microsoft.com/fwlink/p/?LinkId=2124703";
89 | string url = "https://developer.microsoft.com/microsoft-edge/webview2/#download-section";
90 | _ = Process.Start(new ProcessStartInfo(url));
91 | }
92 |
93 | private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
94 | {
95 | Visibility = Visibility.Hidden;
96 | _webView.Dispose();
97 | }
98 |
99 | private void Window_Initialized(object sender, EventArgs e)
100 | {
101 | Version version = Assembly.GetExecutingAssembly().GetName().Version;
102 | string buildDate = File.GetLastWriteTime(Assembly.GetExecutingAssembly().Location).ToString("yyyyMMdd");
103 | Title = $"{Title} v{version.Major}.{version.Minor}.{version.Build} build-{buildDate}";
104 | }
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Resources;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 | using System.Windows;
6 |
7 | // 有关程序集的一般信息由以下
8 | // 控制。更改这些特性值可修改
9 | // 与程序集关联的信息。
10 | [assembly: AssemblyTitle("VRChatConfigurationEditor")]
11 | [assembly: AssemblyDescription("")]
12 | [assembly: AssemblyConfiguration("")]
13 | [assembly: AssemblyCompany("")]
14 | [assembly: AssemblyProduct("VRChatConfigurationEditor")]
15 | [assembly: AssemblyCopyright("Copyright © Gizmo 2021")]
16 | [assembly: AssemblyTrademark("https://github.com/project-vrcat")]
17 | [assembly: AssemblyCulture("")]
18 |
19 | // 将 ComVisible 设置为 false 会使此程序集中的类型
20 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
21 | //请将此类型的 ComVisible 特性设置为 true。
22 | [assembly: ComVisible(false)]
23 |
24 | //若要开始生成可本地化的应用程序,请设置
25 | //.csproj 文件中的 CultureYouAreCodingWith
26 | //例如,如果您在源文件中使用的是美国英语,
27 | //使用的是美国英语,请将 设置为 en-US。 然后取消
28 | //对以下 NeutralResourceLanguage 特性的注释。 更新
29 | //以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
30 |
31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
32 |
33 |
34 | [assembly: ThemeInfo(
35 | ResourceDictionaryLocation.None, //主题特定资源词典所处位置
36 | //(未在页面中找到资源时使用,
37 | //或应用程序资源字典中找到时使用)
38 | ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
39 | //(未在页面中找到资源时使用,
40 | //、应用程序或任何主题专用资源字典中找到时使用)
41 | )]
42 |
43 |
44 | // 程序集的版本信息由下列四个值组成:
45 | //
46 | // 主版本
47 | // 次版本
48 | // 生成号
49 | // 修订号
50 | //
51 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
52 | //通过使用 "*",如下所示:
53 | // [assembly: AssemblyVersion("1.0.*")]
54 | [assembly: AssemblyVersion("1.1.0.0")]
55 | [assembly: AssemblyFileVersion("1.1.0.0")]
56 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace VRChatConfigurationEditor.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// 一个强类型的资源类,用于查找本地化的字符串等。
17 | ///
18 | // 此类是由 StronglyTypedResourceBuilder
19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
21 | // (以 /str 作为命令选项),或重新生成 VS 项目。
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// 返回此类使用的缓存的 ResourceManager 实例。
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VRChatConfigurationEditor.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 重写当前线程的 CurrentUICulture 属性,对
51 | /// 使用此强类型资源类的所有资源查找执行重写。
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace VRChatConfigurationEditor.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/Utils.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Web.WebView2.Core;
2 | using System;
3 | using System.Windows;
4 |
5 | namespace VRChatConfigurationEditor
6 | {
7 | public partial class MainWindow
8 | {
9 | public static string GetWebView2Version()
10 | {
11 | try { return CoreWebView2Environment.GetAvailableBrowserVersionString(); }
12 | catch (Exception) { return ""; }
13 | }
14 |
15 | public ResourceDictionary LoadLanguage(string name)
16 | {
17 | try
18 | {
19 | return Application.LoadComponent(new Uri($@"languages\{name}.xaml", UriKind.Relative)) as
20 | ResourceDictionary;
21 | }
22 | catch (Exception) { return null; }
23 | }
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/VRChatConfigurationEditor.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {519744D4-B729-4183-A276-6C5E409B0E68}
8 | WinExe
9 | VRChatConfigurationEditor
10 | VRChatConfigurationEditor
11 | v4.8
12 | 512
13 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
14 | 4
15 | true
16 | true
17 |
18 |
19 |
20 |
21 |
22 | AnyCPU
23 | true
24 | full
25 | false
26 | bin\Debug\
27 | DEBUG;TRACE
28 | prompt
29 | 4
30 |
31 |
32 | AnyCPU
33 | pdbonly
34 | true
35 | bin\Release\
36 | TRACE
37 | prompt
38 | 4
39 |
40 |
41 | true
42 | bin\x64\Debug\
43 | DEBUG;TRACE
44 | full
45 | x64
46 | 7.3
47 | prompt
48 | true
49 |
50 |
51 | bin\x64\Release\
52 | TRACE
53 | true
54 | pdbonly
55 | x64
56 | 7.3
57 | prompt
58 | true
59 |
60 |
61 | icon.ico
62 |
63 |
64 | VRChatConfigurationEditor.App
65 |
66 |
67 |
68 | ..\packages\Microsoft.Web.WebView2.1.0.1020.30\lib\net45\Microsoft.Web.WebView2.Core.dll
69 |
70 |
71 | ..\packages\Microsoft.Web.WebView2.1.0.1020.30\lib\net45\Microsoft.Web.WebView2.Wpf.dll
72 |
73 |
74 | ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
75 |
76 |
77 | ..\packages\Ookii.Dialogs.Wpf.4.0.0\lib\net45\Ookii.Dialogs.Wpf.dll
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | 4.0
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 | MSBuild:Compile
101 | Designer
102 |
103 |
104 |
105 | MSBuild:Compile
106 | Designer
107 | PreserveNewest
108 |
109 |
110 | MSBuild:Compile
111 | Designer
112 | PreserveNewest
113 |
114 |
115 | MSBuild:Compile
116 | Designer
117 | PreserveNewest
118 |
119 |
120 | MSBuild:Compile
121 | Designer
122 | PreserveNewest
123 |
124 |
125 | Designer
126 | MSBuild:Compile
127 | PreserveNewest
128 |
129 |
130 | MSBuild:Compile
131 | Designer
132 |
133 |
134 | App.xaml
135 | Code
136 |
137 |
138 | MainWindow.xaml
139 | Code
140 |
141 |
142 |
143 |
144 |
145 | Code
146 |
147 |
148 | True
149 | True
150 | Resources.resx
151 |
152 |
153 | True
154 | Settings.settings
155 | True
156 |
157 |
158 | ResXFileCodeGenerator
159 | Resources.Designer.cs
160 |
161 |
162 |
163 | SettingsSingleFileGenerator
164 | Settings.Designer.cs
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 | 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。
178 |
179 |
180 |
181 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/project-vrcat/VRChatConfigurationEditor/2f1dcbd4cac436bbd751be645122d322f80907ff/VRChatConfigurationEditor/icon.ico
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/languages/en.xaml:
--------------------------------------------------------------------------------
1 |
4 | Download the WebView2 Runtime
5 | WebView2 Runtime not installed.
6 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/languages/ja.xaml:
--------------------------------------------------------------------------------
1 |
4 | WebView2 ランタイムをダウンロード
5 | WebView2 Runtime not installed.
6 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/languages/ko.xaml:
--------------------------------------------------------------------------------
1 |
4 | WebView2 런타임 다운로드
5 | WebView2 Runtime not installed.
6 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/languages/zh-CN.xaml:
--------------------------------------------------------------------------------
1 |
4 | 下载 WebView2 运行时安装程序
5 | WebView2运行时未安装.
6 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/languages/zh-TW.xaml:
--------------------------------------------------------------------------------
1 |
4 | 下載 WebView2 執行階段
5 | WebView2執行階段未安裝.
6 |
--------------------------------------------------------------------------------
/VRChatConfigurationEditor/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/images/jetbrains.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
67 |
--------------------------------------------------------------------------------
/web-ui/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | dist
4 | dist-ssr
5 | *.local
6 |
--------------------------------------------------------------------------------
/web-ui/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | VRChat Configuration Editor
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/web-ui/locales/en.yaml:
--------------------------------------------------------------------------------
1 | title: VRChat Configuration Editor
2 | cache-location:
3 | label: Custom Cache Directory Location
4 | placeholder: Default Location (%AppData%\..\LocalLow\VRChat\VRChat)
5 | button: Select
6 | tooltip: Defines the location where VRChat should store its cache data
7 | cache_size:
8 | label: Cache Size
9 | suffix: GB
10 | cache_expiry_delay:
11 | label: Cache Expiry Time
12 | suffix: Day
13 | rich-presence:
14 | label: Rich Presence
15 | tooltip: You can enable or disable Discord and Steam Rich Presence functions
16 | camera_and_screenshot:
17 | default: Default
18 | camera:
19 | label: Camera resolution
20 | screenshot:
21 | label: Screenshot resolution
22 | first_person_steadycam_fov:
23 | label: First-Person Steadycam FOV
24 | avatar_dynamic_bone_limits:
25 | label: Avatar Dynamic Bone Limits
26 | max_affected_transforms: Max Affected Transforms
27 | max_collision_checks: Max Collision Checks
28 |
29 | switch:
30 | enable: Enable
31 | disable: Disable
32 | button:
33 | confirm: Confirm
34 | cancel: Cancel
35 | reset: Reset
36 | save: Save
37 |
--------------------------------------------------------------------------------
/web-ui/locales/zh-CN.yaml:
--------------------------------------------------------------------------------
1 | title: VRChat配置编辑器
2 | cache-location:
3 | label: 自定义缓存位置
4 | placeholder: 默认位置 (%AppData%\..\LocalLow\VRChat\VRChat)
5 | button: 选择位置
6 | tooltip: 定义VRChat缓存的储存位置
7 | cache_size:
8 | label: 缓存大小
9 | suffix: GB
10 | cache_expiry_delay:
11 | label: 缓存有效期
12 | suffix: 天
13 | rich-presence:
14 | label: 扩展信息集成
15 | tooltip: 是否开启Discord和Steam的扩展信息集成, 开启后将会在Discord和Steam中显示更多的游戏信息
16 | camera_and_screenshot:
17 | default: 默认
18 | camera:
19 | label: 相机分辨率
20 | screenshot:
21 | label: 截图分辨率
22 | first_person_steadycam_fov:
23 | label: First-Person Steadycam FOV
24 | avatar_dynamic_bone_limits:
25 | label: Avatar Dynamic Bone Limits
26 | max_affected_transforms: Max Affected Transforms
27 | max_collision_checks: Max Collision Checks
28 |
29 | switch:
30 | enable: 启用
31 | disable: 禁用
32 | button:
33 | confirm: 确认
34 | cancel: 取消
35 | reset: 重置
36 | save: 保存
37 |
--------------------------------------------------------------------------------
/web-ui/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.0.0",
3 | "scripts": {
4 | "dev": "vite",
5 | "build": "vue-tsc --noEmit && vite build --emptyOutDir",
6 | "serve": "vite preview",
7 | "bundle": "goab-cli pack -o public.ab ./dist"
8 | },
9 | "dependencies": {
10 | "vue": "^3.2.4",
11 | "vue-i18n": "^9.1.7"
12 | },
13 | "devDependencies": {
14 | "@intlify/vite-plugin-vue-i18n": "^2.4.0",
15 | "@types/node": "^16.7.0",
16 | "@vicons/tabler": "^0.11.0",
17 | "@vitejs/plugin-vue": "^1.4.0",
18 | "@vue/compiler-sfc": "^3.2.4",
19 | "naive-ui": "^2.16.5",
20 | "sass": "^1.38.0",
21 | "typescript": "^4.3.5",
22 | "vfonts": "^0.1.0",
23 | "vite": "^2.5.0",
24 | "vue-tsc": "^0.0.24"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/web-ui/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.3
2 |
3 | specifiers:
4 | '@intlify/vite-plugin-vue-i18n': ^2.4.0
5 | '@types/node': ^16.7.0
6 | '@vicons/tabler': ^0.11.0
7 | '@vitejs/plugin-vue': ^1.4.0
8 | '@vue/compiler-sfc': ^3.2.4
9 | naive-ui: ^2.16.5
10 | sass: ^1.38.0
11 | typescript: ^4.3.5
12 | vfonts: ^0.1.0
13 | vite: ^2.5.0
14 | vue: ^3.2.4
15 | vue-i18n: ^9.1.7
16 | vue-tsc: ^0.0.24
17 |
18 | dependencies:
19 | vue: 3.2.4
20 | vue-i18n: 9.1.7_vue@3.2.4
21 |
22 | devDependencies:
23 | '@intlify/vite-plugin-vue-i18n': 2.4.0_vite@2.5.0+vue-i18n@9.1.7
24 | '@types/node': 16.7.1
25 | '@vicons/tabler': 0.11.0
26 | '@vitejs/plugin-vue': 1.4.0_@vue+compiler-sfc@3.2.4
27 | '@vue/compiler-sfc': 3.2.4
28 | naive-ui: 2.16.5_vue@3.2.4
29 | sass: 1.38.0
30 | typescript: 4.3.5
31 | vfonts: 0.1.0
32 | vite: 2.5.0
33 | vue-tsc: 0.0.24
34 |
35 | packages:
36 |
37 | /@babel/helper-validator-identifier/7.14.9:
38 | resolution: {integrity: sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==}
39 | engines: {node: '>=6.9.0'}
40 |
41 | /@babel/parser/7.15.3:
42 | resolution: {integrity: sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==}
43 | engines: {node: '>=6.0.0'}
44 | hasBin: true
45 |
46 | /@babel/types/7.15.0:
47 | resolution: {integrity: sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==}
48 | engines: {node: '>=6.9.0'}
49 | dependencies:
50 | '@babel/helper-validator-identifier': 7.14.9
51 | to-fast-properties: 2.0.0
52 |
53 | /@css-render/plugin-bem/0.15.5:
54 | resolution: {integrity: sha512-+vf68Tqj0rg9mieh463+nEolMbvpRRi60dK0OW10z3Vd6KH1ojaPnTzmTu4feE14f4ez5Ogb7IpC5CsT1+DEvA==}
55 | dependencies:
56 | css-render: 0.15.5
57 | dev: true
58 |
59 | /@css-render/vue3-ssr/0.15.5_vue@3.2.4:
60 | resolution: {integrity: sha512-1CFF12uJv6aMtUeKW7x3f/qdXiMe/jZ5xNZoDIbPyRIWmsFYI6kw/7+uyaGFUe6HhXFc8F/j42SvuaX9vlF4XQ==}
61 | peerDependencies:
62 | vue: ^3.0.11
63 | dependencies:
64 | vue: 3.2.4
65 | dev: true
66 |
67 | /@emotion/hash/0.8.0:
68 | resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
69 | dev: true
70 |
71 | /@intlify/bundle-utils/0.2.0:
72 | resolution: {integrity: sha512-P6H+jNT9CqU7d5gMOeaklHYo2vO6sVD7dYFvU7/T5rRBubmEikem7mSFfqMvYnOdIPRxhQSqxGEh+Jj4Act5nQ==}
73 | engines: {node: '>= 12'}
74 | dependencies:
75 | '@intlify/core': 9.1.7
76 | '@intlify/message-compiler': 9.1.7
77 | '@intlify/shared': 9.1.7
78 | jsonc-eslint-parser: 1.2.0
79 | source-map: 0.6.1
80 | yaml-eslint-parser: 0.3.2
81 | transitivePeerDependencies:
82 | - eslint
83 | dev: true
84 |
85 | /@intlify/core-base/9.1.7:
86 | resolution: {integrity: sha512-q1W2j81xbHyfKrNcca/CeJyf0Bcx4u9UDu05l7AaiJbqOseTme2o2I3wp1hDDCtmC7k7HgX0sAygyHNJH9swuQ==}
87 | engines: {node: '>= 10'}
88 | dependencies:
89 | '@intlify/devtools-if': 9.1.7
90 | '@intlify/message-compiler': 9.1.7
91 | '@intlify/message-resolver': 9.1.7
92 | '@intlify/runtime': 9.1.7
93 | '@intlify/shared': 9.1.7
94 | '@intlify/vue-devtools': 9.1.7
95 |
96 | /@intlify/core/9.1.7:
97 | resolution: {integrity: sha512-iWlzl1CiG9iF0h+90ZkxLIgVkaznhmjcfR/bfXk/Usp/IqkeBV8z5QGxtuFdzS3iurOHfylUCopSaT87hPOGmw==}
98 | engines: {node: '>= 10'}
99 | dependencies:
100 | '@intlify/core-base': 9.1.7
101 | dev: true
102 |
103 | /@intlify/devtools-if/9.1.7:
104 | resolution: {integrity: sha512-/DcN5FUySSkQhDqx5y1RvxfuCXO3Ot/dUEIOs472qbM7Hyb2qif+eXCnwHBzlI4+wEfQVT6L0PiM1a7Er/ro9g==}
105 | engines: {node: '>= 10'}
106 | dependencies:
107 | '@intlify/shared': 9.1.7
108 |
109 | /@intlify/message-compiler/9.1.7:
110 | resolution: {integrity: sha512-JZNkAhr3O7tnbdbRBcpYfqr/Ai26WTzX0K/lV8Y1KVdOIj/dGiamaffdWUdFiDXUnbJRNbPiOaKxy7Pwip3KxQ==}
111 | engines: {node: '>= 10'}
112 | dependencies:
113 | '@intlify/message-resolver': 9.1.7
114 | '@intlify/shared': 9.1.7
115 | source-map: 0.6.1
116 |
117 | /@intlify/message-resolver/9.1.7:
118 | resolution: {integrity: sha512-WTK+OaXJYjyquLGhuCyDvU2WHkG+kXzXeHagmVFHn+s118Jf2143zzkLLUrapP5CtZ/csuyjmYg7b3xQRQAmvw==}
119 | engines: {node: '>= 10'}
120 |
121 | /@intlify/runtime/9.1.7:
122 | resolution: {integrity: sha512-QURPSlzhOVnRwS2XMGpCDsDkP42kfVBh94aAORxh/gVGzdgJip2vagrIFij/J69aEqdB476WJkMhVjP8VSHmiA==}
123 | engines: {node: '>= 10'}
124 | dependencies:
125 | '@intlify/message-compiler': 9.1.7
126 | '@intlify/message-resolver': 9.1.7
127 | '@intlify/shared': 9.1.7
128 |
129 | /@intlify/shared/9.1.7:
130 | resolution: {integrity: sha512-zt0zlUdalumvT9AjQNxPXA36UgOndUyvBMplh8uRZU0fhWHAwhnJTcf0NaG9Qvr8I1n3HPSs96+kLb/YdwTavQ==}
131 | engines: {node: '>= 10'}
132 |
133 | /@intlify/vite-plugin-vue-i18n/2.4.0_vite@2.5.0+vue-i18n@9.1.7:
134 | resolution: {integrity: sha512-DXBvl7JEEcChjrsCUHIBJUSqgAXJSUzbaZskzTuJy5K3FDCX/g9XfHVaw8lCUaW7jYF60BIsPr87sAP1QSGB0Q==}
135 | engines: {node: '>= 12'}
136 | peerDependencies:
137 | vite: ^2.3.6
138 | vue-i18n: ^9.1.6
139 | dependencies:
140 | '@intlify/bundle-utils': 0.2.0
141 | '@intlify/shared': 9.1.7
142 | '@rollup/pluginutils': 4.1.1
143 | debug: 4.3.2
144 | fast-glob: 3.2.7
145 | vite: 2.5.0
146 | vue-i18n: 9.1.7_vue@3.2.4
147 | transitivePeerDependencies:
148 | - eslint
149 | - supports-color
150 | dev: true
151 |
152 | /@intlify/vue-devtools/9.1.7:
153 | resolution: {integrity: sha512-DI5Wc0aOiohtBUGUkKAcryCWbbuaO4/PK4Pa/LaNCsFNxbtgR5qkIDmhBv9xVPYGTUhySXxaDDAMvOpBjhPJjw==}
154 | engines: {node: '>= 10'}
155 | dependencies:
156 | '@intlify/message-resolver': 9.1.7
157 | '@intlify/runtime': 9.1.7
158 | '@intlify/shared': 9.1.7
159 |
160 | /@jest/types/26.6.2:
161 | resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==}
162 | engines: {node: '>= 10.14.2'}
163 | dependencies:
164 | '@types/istanbul-lib-coverage': 2.0.3
165 | '@types/istanbul-reports': 3.0.1
166 | '@types/node': 16.7.1
167 | '@types/yargs': 15.0.14
168 | chalk: 4.1.2
169 | dev: true
170 |
171 | /@nodelib/fs.scandir/2.1.5:
172 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
173 | engines: {node: '>= 8'}
174 | dependencies:
175 | '@nodelib/fs.stat': 2.0.5
176 | run-parallel: 1.2.0
177 | dev: true
178 |
179 | /@nodelib/fs.stat/2.0.5:
180 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
181 | engines: {node: '>= 8'}
182 | dev: true
183 |
184 | /@nodelib/fs.walk/1.2.8:
185 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
186 | engines: {node: '>= 8'}
187 | dependencies:
188 | '@nodelib/fs.scandir': 2.1.5
189 | fastq: 1.12.0
190 | dev: true
191 |
192 | /@rollup/pluginutils/4.1.1:
193 | resolution: {integrity: sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==}
194 | engines: {node: '>= 8.0.0'}
195 | dependencies:
196 | estree-walker: 2.0.2
197 | picomatch: 2.3.0
198 | dev: true
199 |
200 | /@types/estree/0.0.48:
201 | resolution: {integrity: sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==}
202 | dev: true
203 |
204 | /@types/istanbul-lib-coverage/2.0.3:
205 | resolution: {integrity: sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==}
206 | dev: true
207 |
208 | /@types/istanbul-lib-report/3.0.0:
209 | resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==}
210 | dependencies:
211 | '@types/istanbul-lib-coverage': 2.0.3
212 | dev: true
213 |
214 | /@types/istanbul-reports/3.0.1:
215 | resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==}
216 | dependencies:
217 | '@types/istanbul-lib-report': 3.0.0
218 | dev: true
219 |
220 | /@types/jest/26.0.24:
221 | resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==}
222 | dependencies:
223 | jest-diff: 26.6.2
224 | pretty-format: 26.6.2
225 | dev: true
226 |
227 | /@types/lodash-es/4.17.4:
228 | resolution: {integrity: sha512-BBz79DCJbD2CVYZH67MBeHZRX++HF+5p8Mo5MzjZi64Wac39S3diedJYHZtScbRVf4DjZyN6LzA0SB0zy+HSSQ==}
229 | dependencies:
230 | '@types/lodash': 4.14.172
231 | dev: true
232 |
233 | /@types/lodash/4.14.172:
234 | resolution: {integrity: sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==}
235 | dev: true
236 |
237 | /@types/node/14.14.45:
238 | resolution: {integrity: sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==}
239 | dev: true
240 |
241 | /@types/node/14.17.11:
242 | resolution: {integrity: sha512-n2OQ+0Bz6WEsUjrvcHD1xZ8K+Kgo4cn9/w94s1bJS690QMUWfJPW/m7CCb7gPkA1fcYwL2UpjXP/rq/Eo41m6w==}
243 | dev: true
244 |
245 | /@types/node/16.7.1:
246 | resolution: {integrity: sha512-ncRdc45SoYJ2H4eWU9ReDfp3vtFqDYhjOsKlFFUDEn8V1Bgr2RjYal8YT5byfadWIRluhPFU6JiDOl0H6Sl87A==}
247 | dev: true
248 |
249 | /@types/yargs-parser/20.2.1:
250 | resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==}
251 | dev: true
252 |
253 | /@types/yargs/15.0.14:
254 | resolution: {integrity: sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==}
255 | dependencies:
256 | '@types/yargs-parser': 20.2.1
257 | dev: true
258 |
259 | /@vicons/tabler/0.11.0:
260 | resolution: {integrity: sha512-ijVUphdgqTde22/4+hlZ9j2AQutpxd3piOW4cWovcnS/ELlMc/4di2/0SDxsJ6282VdZoE9Xv0dI1iSr0XKPEg==}
261 | dev: true
262 |
263 | /@vitejs/plugin-vue/1.4.0_@vue+compiler-sfc@3.2.4:
264 | resolution: {integrity: sha512-RkqfJHz9wdLKBp5Yi+kQL8BAljdrvPoccQm2PTZc/UcL4EjD11xsv2PPCduYx2oV1a/bpSKA3sD5sxOHFhz+LA==}
265 | engines: {node: '>=12.0.0'}
266 | peerDependencies:
267 | '@vue/compiler-sfc': ^3.0.8
268 | dependencies:
269 | '@vue/compiler-sfc': 3.2.4
270 | dev: true
271 |
272 | /@vue/compiler-core/3.2.4:
273 | resolution: {integrity: sha512-c8NuQq7mUXXxA4iqD5VUKpyVeklK53+DMbojYMyZ0VPPrb0BUWrZWFiqSDT+MFDv0f6Hv3QuLiHWb1BWMXBbrw==}
274 | dependencies:
275 | '@babel/parser': 7.15.3
276 | '@babel/types': 7.15.0
277 | '@vue/shared': 3.2.4
278 | estree-walker: 2.0.2
279 | source-map: 0.6.1
280 |
281 | /@vue/compiler-dom/3.2.4:
282 | resolution: {integrity: sha512-uj1nwO4794fw2YsYas5QT+FU/YGrXbS0Qk+1c7Kp1kV7idhZIghWLTjyvYibpGoseFbYLPd+sW2/noJG5H04EQ==}
283 | dependencies:
284 | '@vue/compiler-core': 3.2.4
285 | '@vue/shared': 3.2.4
286 |
287 | /@vue/compiler-sfc/3.2.4:
288 | resolution: {integrity: sha512-GM+ouDdDzhqgkLmBH4bgq4kiZxJQArSppJiZHWHIx9XRaefHLmc1LBNPmN8ivm4SVfi2i7M2t9k8ZnjsScgzPQ==}
289 | dependencies:
290 | '@babel/parser': 7.15.3
291 | '@babel/types': 7.15.0
292 | '@types/estree': 0.0.48
293 | '@vue/compiler-core': 3.2.4
294 | '@vue/compiler-dom': 3.2.4
295 | '@vue/compiler-ssr': 3.2.4
296 | '@vue/shared': 3.2.4
297 | consolidate: 0.16.0
298 | estree-walker: 2.0.2
299 | hash-sum: 2.0.0
300 | lru-cache: 5.1.1
301 | magic-string: 0.25.7
302 | merge-source-map: 1.1.0
303 | postcss: 8.3.6
304 | postcss-modules: 4.2.2_postcss@8.3.6
305 | postcss-selector-parser: 6.0.6
306 | source-map: 0.6.1
307 | dev: true
308 |
309 | /@vue/compiler-ssr/3.2.4:
310 | resolution: {integrity: sha512-bKZuXu9/4XwsFHFWIKQK+5kN7mxIIWmMmT2L4VVek7cvY/vm3p4WTsXYDGZJy0htOTXvM2ifr6sflg012T0hsw==}
311 | dependencies:
312 | '@vue/compiler-dom': 3.2.4
313 | '@vue/shared': 3.2.4
314 | dev: true
315 |
316 | /@vue/devtools-api/6.0.0-beta.15:
317 | resolution: {integrity: sha512-quBx4Jjpexo6KDiNUGFr/zF/2A4srKM9S9v2uHgMXSU//hjgq1eGzqkIFql8T9gfX5ZaVOUzYBP3jIdIR3PKIA==}
318 | dev: false
319 |
320 | /@vue/reactivity/3.2.4:
321 | resolution: {integrity: sha512-ljWTR0hr8Tn09hM2tlmWxZzCBPlgGLnq/k8K8X6EcJhtV+C8OzFySnbWqMWataojbrQOocThwsC8awKthSl2uQ==}
322 | dependencies:
323 | '@vue/shared': 3.2.4
324 | dev: false
325 |
326 | /@vue/runtime-core/3.2.4:
327 | resolution: {integrity: sha512-W6PtEOs8P8jKYPo3JwaMAozZQivxInUleGfNwI2pK1t8ZLZIxn4kAf7p4VF4jJdQB8SZBzpfWdLUc06j7IOmpQ==}
328 | dependencies:
329 | '@vue/reactivity': 3.2.4
330 | '@vue/shared': 3.2.4
331 | dev: false
332 |
333 | /@vue/runtime-dom/3.2.4:
334 | resolution: {integrity: sha512-HcVtLyn2SGwsf6BFPwkvDPDOhOqkOKcfHDpBp5R1coX+qMsOFrY8lJnGXIY+JnxqFjND00E9+u+lq5cs/W7ooA==}
335 | dependencies:
336 | '@vue/runtime-core': 3.2.4
337 | '@vue/shared': 3.2.4
338 | csstype: 2.6.17
339 | dev: false
340 |
341 | /@vue/shared/3.2.4:
342 | resolution: {integrity: sha512-j2j1MRmjalVKr3YBTxl/BClSIc8UQ8NnPpLYclxerK65JIowI4O7n8O8lElveEtEoHxy1d7BelPUDI0Q4bumqg==}
343 |
344 | /acorn-jsx/5.3.2_acorn@7.4.1:
345 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
346 | peerDependencies:
347 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
348 | dependencies:
349 | acorn: 7.4.1
350 | dev: true
351 |
352 | /acorn/7.4.1:
353 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
354 | engines: {node: '>=0.4.0'}
355 | hasBin: true
356 | dev: true
357 |
358 | /ansi-regex/5.0.0:
359 | resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==}
360 | engines: {node: '>=8'}
361 | dev: true
362 |
363 | /ansi-styles/4.3.0:
364 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
365 | engines: {node: '>=8'}
366 | dependencies:
367 | color-convert: 2.0.1
368 | dev: true
369 |
370 | /anymatch/3.1.2:
371 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
372 | engines: {node: '>= 8'}
373 | dependencies:
374 | normalize-path: 3.0.0
375 | picomatch: 2.3.0
376 | dev: true
377 |
378 | /async-validator/4.0.2:
379 | resolution: {integrity: sha512-wPFnOgf9uIu/7uvptlX7PepSf2ArGt60Wng0bYrQ08eZVFG65LRLQpHKQebWEyAYtJcdPN31kndy4nS0jVnf0Q==}
380 | dev: true
381 |
382 | /balanced-match/1.0.2:
383 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
384 | dev: true
385 |
386 | /big-integer/1.6.48:
387 | resolution: {integrity: sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==}
388 | engines: {node: '>=0.6'}
389 | dev: true
390 |
391 | /big.js/5.2.2:
392 | resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
393 | dev: true
394 |
395 | /binary-extensions/2.2.0:
396 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
397 | engines: {node: '>=8'}
398 | dev: true
399 |
400 | /binary/0.3.0:
401 | resolution: {integrity: sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=}
402 | dependencies:
403 | buffers: 0.1.1
404 | chainsaw: 0.1.0
405 | dev: true
406 |
407 | /bluebird/3.4.7:
408 | resolution: {integrity: sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=}
409 | dev: true
410 |
411 | /bluebird/3.7.2:
412 | resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
413 | dev: true
414 |
415 | /brace-expansion/1.1.11:
416 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
417 | dependencies:
418 | balanced-match: 1.0.2
419 | concat-map: 0.0.1
420 | dev: true
421 |
422 | /braces/3.0.2:
423 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
424 | engines: {node: '>=8'}
425 | dependencies:
426 | fill-range: 7.0.1
427 | dev: true
428 |
429 | /buffer-indexof-polyfill/1.0.2:
430 | resolution: {integrity: sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==}
431 | engines: {node: '>=0.10'}
432 | dev: true
433 |
434 | /buffers/0.1.1:
435 | resolution: {integrity: sha1-skV5w77U1tOWru5tmorn9Ugqt7s=}
436 | engines: {node: '>=0.2.0'}
437 | dev: true
438 |
439 | /chainsaw/0.1.0:
440 | resolution: {integrity: sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=}
441 | dependencies:
442 | traverse: 0.3.9
443 | dev: true
444 |
445 | /chalk/4.1.2:
446 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
447 | engines: {node: '>=10'}
448 | dependencies:
449 | ansi-styles: 4.3.0
450 | supports-color: 7.2.0
451 | dev: true
452 |
453 | /chokidar/3.5.2:
454 | resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==}
455 | engines: {node: '>= 8.10.0'}
456 | dependencies:
457 | anymatch: 3.1.2
458 | braces: 3.0.2
459 | glob-parent: 5.1.2
460 | is-binary-path: 2.1.0
461 | is-glob: 4.0.1
462 | normalize-path: 3.0.0
463 | readdirp: 3.6.0
464 | optionalDependencies:
465 | fsevents: 2.3.2
466 | dev: true
467 |
468 | /color-convert/2.0.1:
469 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
470 | engines: {node: '>=7.0.0'}
471 | dependencies:
472 | color-name: 1.1.4
473 | dev: true
474 |
475 | /color-name/1.1.4:
476 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
477 | dev: true
478 |
479 | /colorette/1.3.0:
480 | resolution: {integrity: sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==}
481 | dev: true
482 |
483 | /concat-map/0.0.1:
484 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
485 | dev: true
486 |
487 | /consolidate/0.16.0:
488 | resolution: {integrity: sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==}
489 | engines: {node: '>= 0.10.0'}
490 | dependencies:
491 | bluebird: 3.7.2
492 | dev: true
493 |
494 | /core-util-is/1.0.2:
495 | resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=}
496 | dev: true
497 |
498 | /css-render/0.15.5:
499 | resolution: {integrity: sha512-i33v56jCiq+TPmYbwCA0N9VKWVy+BjPBuBJg1FKdCcrZDLGZrEc5vDfedHrWwFA0J9MCiPtz1HLAGl7R1LLQBg==}
500 | dependencies:
501 | '@emotion/hash': 0.8.0
502 | '@types/node': 14.14.45
503 | csstype: 3.0.8
504 | dev: true
505 |
506 | /cssesc/3.0.0:
507 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
508 | engines: {node: '>=4'}
509 | hasBin: true
510 | dev: true
511 |
512 | /csstype/2.6.17:
513 | resolution: {integrity: sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==}
514 | dev: false
515 |
516 | /csstype/3.0.8:
517 | resolution: {integrity: sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==}
518 | dev: true
519 |
520 | /date-fns/2.23.0:
521 | resolution: {integrity: sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==}
522 | engines: {node: '>=0.11'}
523 | dev: true
524 |
525 | /debug/4.3.2:
526 | resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==}
527 | engines: {node: '>=6.0'}
528 | peerDependencies:
529 | supports-color: '*'
530 | peerDependenciesMeta:
531 | supports-color:
532 | optional: true
533 | dependencies:
534 | ms: 2.1.2
535 | dev: true
536 |
537 | /diff-sequences/26.6.2:
538 | resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==}
539 | engines: {node: '>= 10.14.2'}
540 | dev: true
541 |
542 | /duplexer2/0.1.4:
543 | resolution: {integrity: sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=}
544 | dependencies:
545 | readable-stream: 2.3.7
546 | dev: true
547 |
548 | /emojis-list/3.0.0:
549 | resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
550 | engines: {node: '>= 4'}
551 | dev: true
552 |
553 | /esbuild/0.12.22:
554 | resolution: {integrity: sha512-yWCr9RoFehpqoe/+MwZXJpYOEIt7KOEvNnjIeMZpMSyQt+KCBASM3y7yViiN5dJRphf1wGdUz1+M4rTtWd/ulA==}
555 | hasBin: true
556 | requiresBuild: true
557 | dev: true
558 |
559 | /eslint-utils/3.0.0:
560 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
561 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
562 | peerDependencies:
563 | eslint: '>=5'
564 | dependencies:
565 | eslint-visitor-keys: 2.1.0
566 | dev: true
567 |
568 | /eslint-visitor-keys/1.3.0:
569 | resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
570 | engines: {node: '>=4'}
571 | dev: true
572 |
573 | /eslint-visitor-keys/2.1.0:
574 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
575 | engines: {node: '>=10'}
576 | dev: true
577 |
578 | /eslint-visitor-keys/3.0.0:
579 | resolution: {integrity: sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==}
580 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
581 | dev: true
582 |
583 | /espree/7.3.1:
584 | resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==}
585 | engines: {node: ^10.12.0 || >=12.0.0}
586 | dependencies:
587 | acorn: 7.4.1
588 | acorn-jsx: 5.3.2_acorn@7.4.1
589 | eslint-visitor-keys: 1.3.0
590 | dev: true
591 |
592 | /estree-walker/2.0.2:
593 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
594 |
595 | /evtd/0.2.2:
596 | resolution: {integrity: sha512-YRUY9BHnnOmeeaOOLlIfUEp3itg4oFEd+uWPGMs0m4WUJaGcEgxFx8PLRRQaaDKvN2B+19lYzhATILGfXuprnA==}
597 | dev: true
598 |
599 | /fast-glob/3.2.7:
600 | resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==}
601 | engines: {node: '>=8'}
602 | dependencies:
603 | '@nodelib/fs.stat': 2.0.5
604 | '@nodelib/fs.walk': 1.2.8
605 | glob-parent: 5.1.2
606 | merge2: 1.4.1
607 | micromatch: 4.0.4
608 | dev: true
609 |
610 | /fastq/1.12.0:
611 | resolution: {integrity: sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==}
612 | dependencies:
613 | reusify: 1.0.4
614 | dev: true
615 |
616 | /fill-range/7.0.1:
617 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
618 | engines: {node: '>=8'}
619 | dependencies:
620 | to-regex-range: 5.0.1
621 | dev: true
622 |
623 | /fs.realpath/1.0.0:
624 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
625 | dev: true
626 |
627 | /fsevents/2.3.2:
628 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
629 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
630 | os: [darwin]
631 | dev: true
632 | optional: true
633 |
634 | /fstream/1.0.12:
635 | resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==}
636 | engines: {node: '>=0.6'}
637 | dependencies:
638 | graceful-fs: 4.2.8
639 | inherits: 2.0.4
640 | mkdirp: 0.5.5
641 | rimraf: 2.7.1
642 | dev: true
643 |
644 | /function-bind/1.1.1:
645 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
646 | dev: true
647 |
648 | /generic-names/2.0.1:
649 | resolution: {integrity: sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==}
650 | dependencies:
651 | loader-utils: 1.4.0
652 | dev: true
653 |
654 | /glob-parent/5.1.2:
655 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
656 | engines: {node: '>= 6'}
657 | dependencies:
658 | is-glob: 4.0.1
659 | dev: true
660 |
661 | /glob/7.1.7:
662 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
663 | dependencies:
664 | fs.realpath: 1.0.0
665 | inflight: 1.0.6
666 | inherits: 2.0.4
667 | minimatch: 3.0.4
668 | once: 1.4.0
669 | path-is-absolute: 1.0.1
670 | dev: true
671 |
672 | /graceful-fs/4.2.8:
673 | resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==}
674 | dev: true
675 |
676 | /has-flag/4.0.0:
677 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
678 | engines: {node: '>=8'}
679 | dev: true
680 |
681 | /has/1.0.3:
682 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
683 | engines: {node: '>= 0.4.0'}
684 | dependencies:
685 | function-bind: 1.1.1
686 | dev: true
687 |
688 | /hash-sum/2.0.0:
689 | resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
690 | dev: true
691 |
692 | /highlight.js/11.2.0:
693 | resolution: {integrity: sha512-JOySjtOEcyG8s4MLR2MNbLUyaXqUunmSnL2kdV/KuGJOmHZuAR5xC54Ko7goAXBWNhf09Vy3B+U7vR62UZ/0iw==}
694 | engines: {node: '>=12.0.0'}
695 | dev: true
696 |
697 | /icss-replace-symbols/1.1.0:
698 | resolution: {integrity: sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=}
699 | dev: true
700 |
701 | /icss-utils/5.1.0_postcss@8.3.6:
702 | resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
703 | engines: {node: ^10 || ^12 || >= 14}
704 | peerDependencies:
705 | postcss: ^8.1.0
706 | dependencies:
707 | postcss: 8.3.6
708 | dev: true
709 |
710 | /inflight/1.0.6:
711 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
712 | dependencies:
713 | once: 1.4.0
714 | wrappy: 1.0.2
715 | dev: true
716 |
717 | /inherits/2.0.4:
718 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
719 | dev: true
720 |
721 | /is-binary-path/2.1.0:
722 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
723 | engines: {node: '>=8'}
724 | dependencies:
725 | binary-extensions: 2.2.0
726 | dev: true
727 |
728 | /is-core-module/2.6.0:
729 | resolution: {integrity: sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==}
730 | dependencies:
731 | has: 1.0.3
732 | dev: true
733 |
734 | /is-extglob/2.1.1:
735 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
736 | engines: {node: '>=0.10.0'}
737 | dev: true
738 |
739 | /is-glob/4.0.1:
740 | resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==}
741 | engines: {node: '>=0.10.0'}
742 | dependencies:
743 | is-extglob: 2.1.1
744 | dev: true
745 |
746 | /is-number/7.0.0:
747 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
748 | engines: {node: '>=0.12.0'}
749 | dev: true
750 |
751 | /isarray/1.0.0:
752 | resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=}
753 | dev: true
754 |
755 | /jest-diff/26.6.2:
756 | resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==}
757 | engines: {node: '>= 10.14.2'}
758 | dependencies:
759 | chalk: 4.1.2
760 | diff-sequences: 26.6.2
761 | jest-get-type: 26.3.0
762 | pretty-format: 26.6.2
763 | dev: true
764 |
765 | /jest-get-type/26.3.0:
766 | resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==}
767 | engines: {node: '>= 10.14.2'}
768 | dev: true
769 |
770 | /json5/1.0.1:
771 | resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==}
772 | hasBin: true
773 | dependencies:
774 | minimist: 1.2.5
775 | dev: true
776 |
777 | /jsonc-eslint-parser/1.2.0:
778 | resolution: {integrity: sha512-+vnjPNITAoDX2G9/IWV5vo234gQM3Gz40VuLIr74mc86f8UIKJ9blre+HnX2pHXejxolevV2a+BpaC0nhTq8yA==}
779 | engines: {node: '>=8.10.0'}
780 | dependencies:
781 | eslint-utils: 3.0.0
782 | eslint-visitor-keys: 3.0.0
783 | espree: 7.3.1
784 | semver: 6.3.0
785 | transitivePeerDependencies:
786 | - eslint
787 | dev: true
788 |
789 | /listenercount/1.0.1:
790 | resolution: {integrity: sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=}
791 | dev: true
792 |
793 | /loader-utils/1.4.0:
794 | resolution: {integrity: sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==}
795 | engines: {node: '>=4.0.0'}
796 | dependencies:
797 | big.js: 5.2.2
798 | emojis-list: 3.0.0
799 | json5: 1.0.1
800 | dev: true
801 |
802 | /lodash-es/4.17.21:
803 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
804 | dev: true
805 |
806 | /lodash.camelcase/4.3.0:
807 | resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=}
808 | dev: true
809 |
810 | /lodash/4.17.21:
811 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
812 | dev: true
813 |
814 | /lru-cache/5.1.1:
815 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
816 | dependencies:
817 | yallist: 3.1.1
818 | dev: true
819 |
820 | /magic-string/0.25.7:
821 | resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==}
822 | dependencies:
823 | sourcemap-codec: 1.4.8
824 | dev: true
825 |
826 | /merge-source-map/1.1.0:
827 | resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==}
828 | dependencies:
829 | source-map: 0.6.1
830 | dev: true
831 |
832 | /merge2/1.4.1:
833 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
834 | engines: {node: '>= 8'}
835 | dev: true
836 |
837 | /micromatch/4.0.4:
838 | resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==}
839 | engines: {node: '>=8.6'}
840 | dependencies:
841 | braces: 3.0.2
842 | picomatch: 2.3.0
843 | dev: true
844 |
845 | /minimatch/3.0.4:
846 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
847 | dependencies:
848 | brace-expansion: 1.1.11
849 | dev: true
850 |
851 | /minimist/1.2.5:
852 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==}
853 | dev: true
854 |
855 | /mkdirp/0.5.5:
856 | resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==}
857 | hasBin: true
858 | dependencies:
859 | minimist: 1.2.5
860 | dev: true
861 |
862 | /ms/2.1.2:
863 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
864 | dev: true
865 |
866 | /naive-ui/2.16.5_vue@3.2.4:
867 | resolution: {integrity: sha512-nqIQTivPETbHR+Z7It0iSXlYe71Az5Hi5IBJ1l2tRSNWZU2Tz9v5vMf9F78xfIz1o2Mb+cmQV7PuMazc/EbGXQ==}
868 | peerDependencies:
869 | vue: ^3.0.0
870 | dependencies:
871 | '@css-render/plugin-bem': 0.15.5
872 | '@css-render/vue3-ssr': 0.15.5_vue@3.2.4
873 | '@types/lodash': 4.14.172
874 | '@types/lodash-es': 4.17.4
875 | async-validator: 4.0.2
876 | css-render: 0.15.5
877 | date-fns: 2.23.0
878 | evtd: 0.2.2
879 | highlight.js: 11.2.0
880 | lodash: 4.17.21
881 | lodash-es: 4.17.21
882 | seemly: 0.3.1
883 | treemate: 0.3.2
884 | vdirs: 0.1.4_vue@3.2.4
885 | vfonts: 0.1.0
886 | vooks: 0.2.8_vue@3.2.4
887 | vue: 3.2.4
888 | vueuc: 0.4.10_40aa6ddc39895f444e6b44d47c0da1ac
889 | dev: true
890 |
891 | /nanoid/3.1.25:
892 | resolution: {integrity: sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==}
893 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
894 | hasBin: true
895 | dev: true
896 |
897 | /normalize-path/3.0.0:
898 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
899 | engines: {node: '>=0.10.0'}
900 | dev: true
901 |
902 | /once/1.4.0:
903 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
904 | dependencies:
905 | wrappy: 1.0.2
906 | dev: true
907 |
908 | /path-is-absolute/1.0.1:
909 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
910 | engines: {node: '>=0.10.0'}
911 | dev: true
912 |
913 | /path-parse/1.0.7:
914 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
915 | dev: true
916 |
917 | /picomatch/2.3.0:
918 | resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==}
919 | engines: {node: '>=8.6'}
920 | dev: true
921 |
922 | /postcss-modules-extract-imports/3.0.0_postcss@8.3.6:
923 | resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
924 | engines: {node: ^10 || ^12 || >= 14}
925 | peerDependencies:
926 | postcss: ^8.1.0
927 | dependencies:
928 | postcss: 8.3.6
929 | dev: true
930 |
931 | /postcss-modules-local-by-default/4.0.0_postcss@8.3.6:
932 | resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==}
933 | engines: {node: ^10 || ^12 || >= 14}
934 | peerDependencies:
935 | postcss: ^8.1.0
936 | dependencies:
937 | icss-utils: 5.1.0_postcss@8.3.6
938 | postcss: 8.3.6
939 | postcss-selector-parser: 6.0.6
940 | postcss-value-parser: 4.1.0
941 | dev: true
942 |
943 | /postcss-modules-scope/3.0.0_postcss@8.3.6:
944 | resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==}
945 | engines: {node: ^10 || ^12 || >= 14}
946 | peerDependencies:
947 | postcss: ^8.1.0
948 | dependencies:
949 | postcss: 8.3.6
950 | postcss-selector-parser: 6.0.6
951 | dev: true
952 |
953 | /postcss-modules-values/4.0.0_postcss@8.3.6:
954 | resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
955 | engines: {node: ^10 || ^12 || >= 14}
956 | peerDependencies:
957 | postcss: ^8.1.0
958 | dependencies:
959 | icss-utils: 5.1.0_postcss@8.3.6
960 | postcss: 8.3.6
961 | dev: true
962 |
963 | /postcss-modules/4.2.2_postcss@8.3.6:
964 | resolution: {integrity: sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==}
965 | peerDependencies:
966 | postcss: ^8.0.0
967 | dependencies:
968 | generic-names: 2.0.1
969 | icss-replace-symbols: 1.1.0
970 | lodash.camelcase: 4.3.0
971 | postcss: 8.3.6
972 | postcss-modules-extract-imports: 3.0.0_postcss@8.3.6
973 | postcss-modules-local-by-default: 4.0.0_postcss@8.3.6
974 | postcss-modules-scope: 3.0.0_postcss@8.3.6
975 | postcss-modules-values: 4.0.0_postcss@8.3.6
976 | string-hash: 1.1.3
977 | dev: true
978 |
979 | /postcss-selector-parser/6.0.6:
980 | resolution: {integrity: sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==}
981 | engines: {node: '>=4'}
982 | dependencies:
983 | cssesc: 3.0.0
984 | util-deprecate: 1.0.2
985 | dev: true
986 |
987 | /postcss-value-parser/4.1.0:
988 | resolution: {integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==}
989 | dev: true
990 |
991 | /postcss/8.3.6:
992 | resolution: {integrity: sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==}
993 | engines: {node: ^10 || ^12 || >=14}
994 | dependencies:
995 | colorette: 1.3.0
996 | nanoid: 3.1.25
997 | source-map-js: 0.6.2
998 | dev: true
999 |
1000 | /pretty-format/26.6.2:
1001 | resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==}
1002 | engines: {node: '>= 10'}
1003 | dependencies:
1004 | '@jest/types': 26.6.2
1005 | ansi-regex: 5.0.0
1006 | ansi-styles: 4.3.0
1007 | react-is: 17.0.2
1008 | dev: true
1009 |
1010 | /process-nextick-args/2.0.1:
1011 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
1012 | dev: true
1013 |
1014 | /queue-microtask/1.2.3:
1015 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1016 | dev: true
1017 |
1018 | /react-is/17.0.2:
1019 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
1020 | dev: true
1021 |
1022 | /readable-stream/2.3.7:
1023 | resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
1024 | dependencies:
1025 | core-util-is: 1.0.2
1026 | inherits: 2.0.4
1027 | isarray: 1.0.0
1028 | process-nextick-args: 2.0.1
1029 | safe-buffer: 5.1.2
1030 | string_decoder: 1.1.1
1031 | util-deprecate: 1.0.2
1032 | dev: true
1033 |
1034 | /readdirp/3.6.0:
1035 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1036 | engines: {node: '>=8.10.0'}
1037 | dependencies:
1038 | picomatch: 2.3.0
1039 | dev: true
1040 |
1041 | /resize-observer-polyfill/1.5.1:
1042 | resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
1043 | dev: true
1044 |
1045 | /resolve/1.20.0:
1046 | resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==}
1047 | dependencies:
1048 | is-core-module: 2.6.0
1049 | path-parse: 1.0.7
1050 | dev: true
1051 |
1052 | /reusify/1.0.4:
1053 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1054 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1055 | dev: true
1056 |
1057 | /rimraf/2.7.1:
1058 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
1059 | hasBin: true
1060 | dependencies:
1061 | glob: 7.1.7
1062 | dev: true
1063 |
1064 | /rollup/2.56.2:
1065 | resolution: {integrity: sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==}
1066 | engines: {node: '>=10.0.0'}
1067 | hasBin: true
1068 | optionalDependencies:
1069 | fsevents: 2.3.2
1070 | dev: true
1071 |
1072 | /run-parallel/1.2.0:
1073 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1074 | dependencies:
1075 | queue-microtask: 1.2.3
1076 | dev: true
1077 |
1078 | /safe-buffer/5.1.2:
1079 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1080 | dev: true
1081 |
1082 | /sass/1.38.0:
1083 | resolution: {integrity: sha512-WBccZeMigAGKoI+NgD7Adh0ab1HUq+6BmyBUEaGxtErbUtWUevEbdgo5EZiJQofLUGcKtlNaO2IdN73AHEua5g==}
1084 | engines: {node: '>=8.9.0'}
1085 | hasBin: true
1086 | dependencies:
1087 | chokidar: 3.5.2
1088 | dev: true
1089 |
1090 | /seemly/0.3.1:
1091 | resolution: {integrity: sha512-7P4+IJU9SIP6EBl2jjVitbgrHPb0MqWRy4j2iXGOUiDrHpdG3tH/3j5Xpyv1qWAY3IBrCKOkmVXEfwTsT4UzDg==}
1092 | dependencies:
1093 | '@types/jest': 26.0.24
1094 | dev: true
1095 |
1096 | /semver/6.3.0:
1097 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
1098 | hasBin: true
1099 | dev: true
1100 |
1101 | /setimmediate/1.0.5:
1102 | resolution: {integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=}
1103 | dev: true
1104 |
1105 | /source-map-js/0.6.2:
1106 | resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==}
1107 | engines: {node: '>=0.10.0'}
1108 | dev: true
1109 |
1110 | /source-map/0.6.1:
1111 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1112 | engines: {node: '>=0.10.0'}
1113 |
1114 | /sourcemap-codec/1.4.8:
1115 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
1116 | dev: true
1117 |
1118 | /string-hash/1.1.3:
1119 | resolution: {integrity: sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=}
1120 | dev: true
1121 |
1122 | /string_decoder/1.1.1:
1123 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
1124 | dependencies:
1125 | safe-buffer: 5.1.2
1126 | dev: true
1127 |
1128 | /supports-color/7.2.0:
1129 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1130 | engines: {node: '>=8'}
1131 | dependencies:
1132 | has-flag: 4.0.0
1133 | dev: true
1134 |
1135 | /to-fast-properties/2.0.0:
1136 | resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
1137 | engines: {node: '>=4'}
1138 |
1139 | /to-regex-range/5.0.1:
1140 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1141 | engines: {node: '>=8.0'}
1142 | dependencies:
1143 | is-number: 7.0.0
1144 | dev: true
1145 |
1146 | /traverse/0.3.9:
1147 | resolution: {integrity: sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=}
1148 | dev: true
1149 |
1150 | /treemate/0.3.2:
1151 | resolution: {integrity: sha512-vy4x0kVfNHxNh+AmXbvrCklYc6HlPpIgqy2zzCStBnqdlhuHP+PaOfKUS3YyISAPhj4g4KdqmvfYrgQV2SF6Ag==}
1152 | dev: true
1153 |
1154 | /typescript/4.3.5:
1155 | resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==}
1156 | engines: {node: '>=4.2.0'}
1157 | hasBin: true
1158 | dev: true
1159 |
1160 | /unzipper/0.10.11:
1161 | resolution: {integrity: sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==}
1162 | dependencies:
1163 | big-integer: 1.6.48
1164 | binary: 0.3.0
1165 | bluebird: 3.4.7
1166 | buffer-indexof-polyfill: 1.0.2
1167 | duplexer2: 0.1.4
1168 | fstream: 1.0.12
1169 | graceful-fs: 4.2.8
1170 | listenercount: 1.0.1
1171 | readable-stream: 2.3.7
1172 | setimmediate: 1.0.5
1173 | dev: true
1174 |
1175 | /util-deprecate/1.0.2:
1176 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
1177 | dev: true
1178 |
1179 | /vdirs/0.1.4_vue@3.2.4:
1180 | resolution: {integrity: sha512-g2wJgE8hj/ruqEnGFEXFVC8IR4kRaPDr7Cl+SSy+A8kmNr47rL1l+0wMi51amlrTL6eQsRk+wcl4bjjfPXNzZQ==}
1181 | peerDependencies:
1182 | vue: ^3.0.11
1183 | dependencies:
1184 | '@types/node': 14.17.11
1185 | evtd: 0.2.2
1186 | vue: 3.2.4
1187 | dev: true
1188 |
1189 | /vfonts/0.1.0:
1190 | resolution: {integrity: sha512-vQBcvntBlnAPonAkGNM8iJ9NxE3PucA+V2W95xiN75YJKxirLJvOws2kEyOEO45T4N+YTbQOCR2m77Y05pfVhQ==}
1191 | dev: true
1192 |
1193 | /vite/2.5.0:
1194 | resolution: {integrity: sha512-Dn4B+g54PJsMG5WCc4QeFy1ygMXRdTtFrUPegqfk4+vzVQcbF/DqqmI/1bxezArzbujBJg/67QeT5wz8edfJVQ==}
1195 | engines: {node: '>=12.2.0'}
1196 | hasBin: true
1197 | dependencies:
1198 | esbuild: 0.12.22
1199 | postcss: 8.3.6
1200 | resolve: 1.20.0
1201 | rollup: 2.56.2
1202 | optionalDependencies:
1203 | fsevents: 2.3.2
1204 | dev: true
1205 |
1206 | /vooks/0.2.8_vue@3.2.4:
1207 | resolution: {integrity: sha512-d+MHX5mTHeNZn0XTILMUKjpxS1+dUKCI/kw9+LnvfHzCawL8bZ1itViAbWfwJI246uSc47rL3ECPgPMyS8wQrQ==}
1208 | peerDependencies:
1209 | vue: ^3.0.0
1210 | dependencies:
1211 | evtd: 0.2.2
1212 | vue: 3.2.4
1213 | dev: true
1214 |
1215 | /vue-i18n/9.1.7_vue@3.2.4:
1216 | resolution: {integrity: sha512-ujuuDanoHqtEd4GejWrbG/fXE9nrP51ElsEGxp0WBHfv+/ki0/wyUqkO+4fLikki2obGtXdviTPH0VNpas5K6g==}
1217 | engines: {node: '>= 10'}
1218 | peerDependencies:
1219 | vue: ^3.0.0
1220 | dependencies:
1221 | '@intlify/core-base': 9.1.7
1222 | '@intlify/shared': 9.1.7
1223 | '@intlify/vue-devtools': 9.1.7
1224 | '@vue/devtools-api': 6.0.0-beta.15
1225 | vue: 3.2.4
1226 | dev: false
1227 |
1228 | /vue-tsc/0.0.24:
1229 | resolution: {integrity: sha512-Qx0V7jkWMtvddtaWa1SA8YKkBCRmjq9zZUB2UIMZiso6JSH538oHD2VumSzkoDnAfFbY3t0/j1mB2abpA0bGWA==}
1230 | hasBin: true
1231 | dependencies:
1232 | unzipper: 0.10.11
1233 | dev: true
1234 |
1235 | /vue/3.2.4:
1236 | resolution: {integrity: sha512-rNCFmoewm8IwmTK0nj3ysKq53iRpNEFKoBJ4inar6tIh7Oj7juubS39RI8UI+VE7x+Cs2z6PBsadtZu7z2qppg==}
1237 | dependencies:
1238 | '@vue/compiler-dom': 3.2.4
1239 | '@vue/runtime-dom': 3.2.4
1240 | '@vue/shared': 3.2.4
1241 | dev: false
1242 |
1243 | /vueuc/0.4.10_40aa6ddc39895f444e6b44d47c0da1ac:
1244 | resolution: {integrity: sha512-d/GITEBOtrkMyhJPB72SNYeO7rYrsTYMlJ+uT7bwuTT1ag15O63vwUesqhY7Vf65FybJRcQwUtGAYShDOqRiJQ==}
1245 | peerDependencies:
1246 | '@css-render/vue3-ssr': ^0.15.3
1247 | vue: ^3.0.11
1248 | dependencies:
1249 | '@css-render/vue3-ssr': 0.15.5_vue@3.2.4
1250 | css-render: 0.15.5
1251 | evtd: 0.2.2
1252 | resize-observer-polyfill: 1.5.1
1253 | seemly: 0.3.1
1254 | vdirs: 0.1.4_vue@3.2.4
1255 | vooks: 0.2.8_vue@3.2.4
1256 | vue: 3.2.4
1257 | dev: true
1258 |
1259 | /wrappy/1.0.2:
1260 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
1261 | dev: true
1262 |
1263 | /yallist/3.1.1:
1264 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1265 | dev: true
1266 |
1267 | /yaml-eslint-parser/0.3.2:
1268 | resolution: {integrity: sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg==}
1269 | dependencies:
1270 | eslint-visitor-keys: 1.3.0
1271 | lodash: 4.17.21
1272 | yaml: 1.10.2
1273 | dev: true
1274 |
1275 | /yaml/1.10.2:
1276 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
1277 | engines: {node: '>= 6'}
1278 | dev: true
1279 |
--------------------------------------------------------------------------------
/web-ui/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/project-vrcat/VRChatConfigurationEditor/2f1dcbd4cac436bbd751be645122d322f80907ff/web-ui/public/favicon.png
--------------------------------------------------------------------------------
/web-ui/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/web-ui/src/api.ts:
--------------------------------------------------------------------------------
1 | import { postMessage, postMessageAsync } from "./webview2";
2 |
3 | export function openURL(url: string) {
4 | postMessage("openURL", [url]);
5 | }
6 |
7 | export async function selectDirectory(title: string): Promise {
8 | return postMessageAsync("selectDirectory", [title]);
9 | }
10 |
11 | export async function loadConfigFile(): Promise {
12 | return postMessageAsync("loadConfigFile", []);
13 | }
14 |
15 | export async function saveConfigFile(data: string): Promise {
16 | return new Promise((resolve, reject) => {
17 | postMessageAsync("saveConfigFile", [data]).then((i) => {
18 | if (i === "success") return resolve(true);
19 | reject(i);
20 | }).catch((err) => {
21 | reject(err);
22 | });
23 | });
24 | }
25 |
--------------------------------------------------------------------------------
/web-ui/src/components/Header.vue:
--------------------------------------------------------------------------------
1 |
2 |
15 |
16 |
17 |
23 |
24 |
67 |
--------------------------------------------------------------------------------
/web-ui/src/components/HelpIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ props.tooltip }}
9 |
10 |
11 |
12 |
17 |
--------------------------------------------------------------------------------
/web-ui/src/components/Locale.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
39 |
40 |
53 |
--------------------------------------------------------------------------------
/web-ui/src/i18n.ts:
--------------------------------------------------------------------------------
1 | import { createI18n } from 'vue-i18n'
2 | import messages from '@intlify/vite-plugin-vue-i18n/messages'
3 |
4 | export const i18n = createI18n({
5 | legacy: false,
6 | locale: 'en',
7 | fallbackLocale: 'en',
8 | messages,
9 | })
10 |
--------------------------------------------------------------------------------
/web-ui/src/main.ts:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App.vue'
3 | import { i18n } from './i18n'
4 |
5 | const app = createApp(App)
6 |
7 | app.use(i18n)
8 |
9 | app.mount('#app')
10 |
--------------------------------------------------------------------------------
/web-ui/src/shims-vue.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.vue' {
2 | import { DefineComponent } from 'vue'
3 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
4 | const component: DefineComponent<{}, {}, any>
5 | export default component
6 | }
--------------------------------------------------------------------------------
/web-ui/src/utils.ts:
--------------------------------------------------------------------------------
1 | export interface resolution {
2 | height: number;
3 | width: number;
4 | }
5 |
6 | export function name2resolution(name: string): resolution {
7 | switch (name) {
8 | case "720p":
9 | return { width: 1280, height: 720 };
10 | case "2k":
11 | return { width: 2560, height: 1440 };
12 | case "4k":
13 | return { width: 3840, height: 2160 };
14 | default:
15 | return { width: 1920, height: 1080 };
16 | }
17 | }
18 |
19 | export function resolution2name(r: resolution): string {
20 | if (r.height === 720 && r.width === 1280) return "720p";
21 | if (r.height === 1440 && r.width === 2560) return "2k";
22 | if (r.height === 2160 && r.width === 3840) return "4k";
23 | return "1080p";
24 | }
25 |
--------------------------------------------------------------------------------
/web-ui/src/views/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{ t("cache-location.label") }}
6 |
7 |
8 |
9 |
15 | {{ t("cache-location.button") }}
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | {{ t("cache-location.cache_size.suffix") }}
24 |
25 |
26 |
27 |
28 |
29 |
30 | {{ t("cache-location.cache_expiry_delay.suffix") }}
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | {{ t("rich-presence.label") }}
39 |
40 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
56 |
57 |
58 |
59 |
60 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | {{ t('avatar_dynamic_bone_limits.label') }}
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | {{ t('button.reset') }}
89 | {{ t('button.save') }}
90 |
91 |
92 |
93 |
94 |
241 |
242 |
247 |
248 |
267 |
--------------------------------------------------------------------------------
/web-ui/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/web-ui/src/webview2.ts:
--------------------------------------------------------------------------------
1 | //@ts-nocheck
2 | let values = {};
3 |
4 | window.chrome.webview.addEventListener("message", (event: any) => {
5 | // console.log(event);
6 | if (!event.data || !event.data.Method) return;
7 | if (event.data.Args.length === 2) {
8 | values[event.data.Args[0]] = event.data.Args[1];
9 | }
10 | // console.log(values);
11 | });
12 |
13 | export async function postMessageAsync(
14 | method: string,
15 | args: string[],
16 | ): Promise {
17 | return new Promise((resolve, reject) => {
18 | let valueInterval;
19 | const key = method + Math.floor(Date.now() / 1000);
20 | const promiseTimeout = setTimeout(() => {
21 | clearInterval(valueInterval);
22 | reject("timeout");
23 | }, 30000);
24 |
25 | postMessage(method, [key].concat(args));
26 |
27 | valueInterval = setInterval(() => {
28 | if (values[key]) {
29 | clearTimeout(promiseTimeout);
30 | resolve(values[key]);
31 | delete (values[key]);
32 | clearInterval(valueInterval);
33 | }
34 | }, 500);
35 | });
36 | }
37 |
38 | export function postMessage(method: string, args: string[]) {
39 | window.chrome.webview.postMessage({ method: method, args: args });
40 | }
41 |
--------------------------------------------------------------------------------
/web-ui/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "allowJs": true,
4 | "baseUrl": ".",
5 | "module": "ESNext",
6 | "target": "es2016",
7 | "lib": ["DOM", "ESNext"],
8 | "strict": true,
9 | "esModuleInterop": true,
10 | "incremental": false,
11 | "skipLibCheck": true,
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "noUnusedLocals": true,
15 | "strictNullChecks": true,
16 | "forceConsistentCasingInFileNames": true,
17 | "types": ["vite/client", "@intlify/vite-plugin-vue-i18n/client"],
18 | "paths": {
19 | "~/*": ["src/*"]
20 | }
21 | },
22 | "exclude": ["dist", "node_modules"]
23 | }
24 |
--------------------------------------------------------------------------------
/web-ui/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path'
2 | import { defineConfig } from 'vite'
3 | import vue from '@vitejs/plugin-vue'
4 | import vueI18n from '@intlify/vite-plugin-vue-i18n'
5 |
6 | // https://vitejs.dev/config/
7 | export default defineConfig({
8 | base: "./",
9 | build: {
10 | outDir: './dist',
11 | },
12 | resolve: {
13 | alias: {
14 | '~/': `${path.resolve(__dirname, 'src')}/`,
15 | },
16 | },
17 | plugins: [
18 | vue(),
19 | vueI18n({
20 | include: [path.resolve(__dirname, 'locales/**')],
21 | }),
22 | ],
23 | })
24 |
--------------------------------------------------------------------------------