From ca675c1a3d8f9e16852258b72f17bf1a3bcecf66 Mon Sep 17 00:00:00 2001 From: Mehrdad Shirvani Date: Fri, 18 Jul 2025 14:47:22 +0330 Subject: [PATCH] Add Deployment --- .gitattributes | 1 + .node-version | 1 + .npmrc | 1 + .prettierignore | 3 + .prettierrc | 7 + .../Projects/Views/wwwroot/css/CSS/.DS_Store | Bin 8196 -> 0 bytes .../Projects/Views/wwwroot/images/.DS_Store | Bin 6148 -> 0 bytes .../Projects/Views/wwwroot/js/JS/.DS_Store | Bin 8196 -> 0 bytes .../Session09/Session09 Frontend.md | 111 - Folder-Strucutre.md | 16 - index.md => README.md | 0 .../Roadmap/Roadmap.md | 0 .../Roadmap/Roadmap.pdf | Bin .../Projects/BasicWebsite/Logo-01-04.png | Bin .../Projects/BasicWebsite/Logo-02-Test-02.png | Bin .../Session00/Projects/BasicWebsite/Notes.md | 0 .../Projects/BasicWebsite/episode-one.jpg | Bin .../Projects/BasicWebsite/episode-three.png | Bin .../Projects/BasicWebsite/episode-two.jpg | Bin .../Projects/BasicWebsite/episode-zero.jpg | Bin .../Projects/BasicWebsite/index.html | 0 .../Projects/BasicWebsite/podcast-cover.jpg | Bin .../Projects/BasicWebsite/styles.css | 0 .../Session00/Projects/BasicWebsite/w.png | Bin .../DesignTimeBuild/.dtbcache.v2 | Bin ...3339d571-cd80-47be-846d-a5f1fb1ffa14.vsidx | Bin ...6bc4c5e5-b6ba-4acd-abab-a7b2e0aa4b7d.vsidx | Bin ...91fff91a-9767-4135-9b11-e852ed59896f.vsidx | Bin ...9319121f-7555-4081-9832-09846735bb02.vsidx | Bin ...ba86fa9c-c1c8-432d-ac6a-6a2034e1500c.vsidx | Bin .../config/applicationhost.config | 0 .../.vs/C01_CommentAPI/v17/.futdcache.v2 | Bin .../CommentAPI/.vs/C01_CommentAPI/v17/.suo | Bin .../c01_commentapi.metadata.v7.bin | Bin .../c01_commentapi.projects.v7.bin | Bin .../Projects/CommentAPI/C01_CommentAPI.csproj | 0 .../CommentAPI/C01_CommentAPI.csproj.user | 0 .../Projects/CommentAPI/C01_CommentAPI.sln | 0 .../Controllers/EpisodeController.cs | 0 .../Session00/Projects/CommentAPI/Episode.cs | 0 .../Session00/Projects/CommentAPI/Program.cs | 0 .../CommentAPI/Properties/launchSettings.json | 0 .../CommentAPI/appsettings.Development.json | 0 .../Projects/CommentAPI/appsettings.json | 0 .../bin/Debug/net6.0/C01_CommentAPI.deps.json | 0 .../bin/Debug/net6.0/C01_CommentAPI.dll | Bin .../bin/Debug/net6.0/C01_CommentAPI.exe | Bin .../bin/Debug/net6.0/C01_CommentAPI.pdb | Bin .../net6.0/C01_CommentAPI.runtimeconfig.json | 0 .../bin/Debug/net6.0/Microsoft.OpenApi.dll | Bin .../net6.0/Swashbuckle.AspNetCore.Swagger.dll | Bin .../Swashbuckle.AspNetCore.SwaggerGen.dll | Bin .../Swashbuckle.AspNetCore.SwaggerUI.dll | Bin .../Debug/net6.0/appsettings.Development.json | 0 .../bin/Debug/net6.0/appsettings.json | 0 .../C01_CommentAPI.csproj.nuget.dgspec.json | 0 .../obj/C01_CommentAPI.csproj.nuget.g.props | 0 .../obj/C01_CommentAPI.csproj.nuget.g.targets | 0 ...CoreApp,Version=v6.0.AssemblyAttributes.cs | 0 .../net6.0/C01_CommentAPI.AssemblyInfo.cs | 0 .../C01_CommentAPI.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../net6.0/C01_CommentAPI.GlobalUsings.g.cs | 0 ...tAPI.MvcApplicationPartsAssemblyInfo.cache | 0 ...mentAPI.MvcApplicationPartsAssemblyInfo.cs | 0 .../Debug/net6.0/C01_CommentAPI.assets.cache | Bin ..._CommentAPI.csproj.AssemblyReference.cache | Bin ...1_CommentAPI.csproj.BuildWithSkipAnalyzers | 0 .../net6.0/C01_CommentAPI.csproj.CopyComplete | 0 ..._CommentAPI.csproj.CoreCompileInputs.cache | 0 ...C01_CommentAPI.csproj.FileListAbsolute.txt | 0 .../obj/Debug/net6.0/C01_CommentAPI.dll | Bin .../C01_CommentAPI.genruntimeconfig.cache | 0 .../obj/Debug/net6.0/C01_CommentAPI.pdb | Bin .../CommentAPI/obj/Debug/net6.0/apphost.exe | Bin .../obj/Debug/net6.0/ref/C01_CommentAPI.dll | Bin .../Debug/net6.0/refint/C01_CommentAPI.dll | Bin .../Debug/net6.0/staticwebassets.build.json | 0 .../msbuild.build.C01_CommentAPI.props | 0 ...d.buildMultiTargeting.C01_CommentAPI.props | 0 ...build.buildTransitive.C01_CommentAPI.props | 0 .../CommentAPI/obj/project.assets.json | 0 .../CommentAPI/obj/project.nuget.cache | 0 .../DesignTimeBuild/.dtbcache.v2 | Bin ...182ab6a2-0364-4479-b891-e363a0e98742.vsidx | Bin ...2a1c4aa9-b595-46f2-ac4c-6c1e1556a462.vsidx | Bin ...47ae3b1e-0045-4de5-8eeb-1111cda92b0f.vsidx | Bin ...549a1b81-7342-4e0e-a139-066badd8650f.vsidx | Bin ...6e85fa36-99c2-4ec8-bc36-fbfea0fde3eb.vsidx | Bin .../config/applicationhost.config | 0 .../C01_ThePodcastWebsite/v17/.futdcache.v2 | Bin .../.vs/C01_ThePodcastWebsite/v17/.suo | Bin .../c01_thepodcastwebsite.metadata.v7.bin | Bin .../c01_thepodcastwebsite.projects.v7.bin | Bin .../C01_ThePodcastWebsite.csproj | 0 .../C01_ThePodcastWebsite.csproj.user | 0 .../C01_ThePodcastWebsite.sln | 0 .../Controllers/HomeController.cs | 0 .../ThePodcastWebsite/Models/Episode.cs | 0 .../Models/ErrorViewModel.cs | 0 .../Projects/ThePodcastWebsite/Program.cs | 0 .../Properties/launchSettings.json | 0 .../ThePodcastWebsite/Views/Home/Index.cshtml | 0 .../Views/Home/Privacy.cshtml | 0 .../Views/Shared/Error.cshtml | 0 .../Views/Shared/_Layout.cshtml | 0 .../Views/Shared/_Layout.cshtml.css | 0 .../Shared/_ValidationScriptsPartial.cshtml | 0 .../Views/_ViewImports.cshtml | 0 .../ThePodcastWebsite/Views/_ViewStart.cshtml | 0 .../appsettings.Development.json | 0 .../ThePodcastWebsite/appsettings.json | 0 .../net6.0/C01_ThePodcastWebsite.deps.json | 0 .../Debug/net6.0/C01_ThePodcastWebsite.dll | Bin .../Debug/net6.0/C01_ThePodcastWebsite.exe | Bin .../Debug/net6.0/C01_ThePodcastWebsite.pdb | Bin .../C01_ThePodcastWebsite.runtimeconfig.json | 0 ...odcastWebsite.staticwebassets.runtime.json | 0 .../Debug/net6.0/appsettings.Development.json | 0 .../bin/Debug/net6.0/appsettings.json | 0 ...ThePodcastWebsite.csproj.nuget.dgspec.json | 0 ...C01_ThePodcastWebsite.csproj.nuget.g.props | 0 ...1_ThePodcastWebsite.csproj.nuget.g.targets | 0 ...CoreApp,Version=v6.0.AssemblyAttributes.cs | 0 .../C01_ThePodcastWebsite.AssemblyInfo.cs | 0 ...ThePodcastWebsite.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../C01_ThePodcastWebsite.GlobalUsings.g.cs | 0 ...site.MvcApplicationPartsAssemblyInfo.cache | 0 ..._ThePodcastWebsite.RazorAssemblyInfo.cache | 0 ...C01_ThePodcastWebsite.RazorAssemblyInfo.cs | 0 .../net6.0/C01_ThePodcastWebsite.assets.cache | Bin ...dcastWebsite.csproj.BuildWithSkipAnalyzers | 0 ...castWebsite.csproj.CoreCompileInputs.cache | 0 ...PodcastWebsite.csproj.FileListAbsolute.txt | 0 .../Debug/net6.0/C01_ThePodcastWebsite.dll | Bin ...1_ThePodcastWebsite.genruntimeconfig.cache | 0 .../Debug/net6.0/C01_ThePodcastWebsite.pdb | Bin .../obj/Debug/net6.0/apphost.exe | Bin .../obj/Debug/net6.0/project.razor.vs.json | 0 .../net6.0/ref/C01_ThePodcastWebsite.dll | Bin .../net6.0/refint/C01_ThePodcastWebsite.dll | Bin .../Views/Shared/_Layout.cshtml.rz.scp.css | 0 .../bundle/C01_ThePodcastWebsite.styles.css | 0 .../C01_ThePodcastWebsite.bundle.scp.css | 0 .../Debug/net6.0/staticwebassets.build.json | 0 .../net6.0/staticwebassets.development.json | 0 .../Debug/net6.0/staticwebassets.pack.json | 0 ...Microsoft.AspNetCore.StaticWebAssets.props | 0 .../msbuild.build.C01_ThePodcastWebsite.props | 0 ...MultiTargeting.C01_ThePodcastWebsite.props | 0 ...uildTransitive.C01_ThePodcastWebsite.props | 0 .../ThePodcastWebsite/obj/project.assets.json | 0 .../ThePodcastWebsite/obj/project.nuget.cache | 0 .../ThePodcastWebsite/wwwroot/Logo-01-04.png | Bin .../wwwroot/Logo-02-Test-02.png | Bin .../ThePodcastWebsite/wwwroot/css/site.css | 0 .../ThePodcastWebsite/wwwroot/css/styles.css | 0 .../ThePodcastWebsite/wwwroot/episode-one.jpg | Bin .../wwwroot/episode-three.png | Bin .../ThePodcastWebsite/wwwroot/episode-two.jpg | Bin .../wwwroot/episode-zero.jpg | Bin .../ThePodcastWebsite/wwwroot/favicon.ico | Bin .../ThePodcastWebsite/wwwroot/js/site.js | 0 .../wwwroot/lib/bootstrap/LICENSE | 0 .../lib/bootstrap/dist/css/bootstrap-grid.css | 0 .../bootstrap/dist/css/bootstrap-grid.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.min.css | 0 .../dist/css/bootstrap-grid.min.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.rtl.css | 0 .../dist/css/bootstrap-grid.rtl.css.map | 0 .../dist/css/bootstrap-grid.rtl.min.css | 0 .../dist/css/bootstrap-grid.rtl.min.css.map | 0 .../bootstrap/dist/css/bootstrap-reboot.css | 0 .../dist/css/bootstrap-reboot.css.map | 0 .../dist/css/bootstrap-reboot.min.css | 0 .../dist/css/bootstrap-reboot.min.css.map | 0 .../dist/css/bootstrap-reboot.rtl.css | 0 .../dist/css/bootstrap-reboot.rtl.css.map | 0 .../dist/css/bootstrap-reboot.rtl.min.css | 0 .../dist/css/bootstrap-reboot.rtl.min.css.map | 0 .../dist/css/bootstrap-utilities.css | 0 .../dist/css/bootstrap-utilities.css.map | 0 .../dist/css/bootstrap-utilities.min.css | 0 .../dist/css/bootstrap-utilities.min.css.map | 0 .../dist/css/bootstrap-utilities.rtl.css | 0 .../dist/css/bootstrap-utilities.rtl.css.map | 0 .../dist/css/bootstrap-utilities.rtl.min.css | 0 .../css/bootstrap-utilities.rtl.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.css | 0 .../lib/bootstrap/dist/css/bootstrap.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.min.css | 0 .../bootstrap/dist/css/bootstrap.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.rtl.css | 0 .../bootstrap/dist/css/bootstrap.rtl.css.map | 0 .../bootstrap/dist/css/bootstrap.rtl.min.css | 0 .../dist/css/bootstrap.rtl.min.css.map | 0 .../lib/bootstrap/dist/js/bootstrap.bundle.js | 0 .../bootstrap/dist/js/bootstrap.bundle.js.map | 0 .../bootstrap/dist/js/bootstrap.bundle.min.js | 0 .../dist/js/bootstrap.bundle.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.esm.js | 0 .../bootstrap/dist/js/bootstrap.esm.js.map | 0 .../bootstrap/dist/js/bootstrap.esm.min.js | 0 .../dist/js/bootstrap.esm.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.js | 0 .../lib/bootstrap/dist/js/bootstrap.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.min.js | 0 .../bootstrap/dist/js/bootstrap.min.js.map | 0 .../jquery-validation-unobtrusive/LICENSE.txt | 0 .../jquery.validate.unobtrusive.js | 0 .../jquery.validate.unobtrusive.min.js | 0 .../wwwroot/lib/jquery-validation/LICENSE.md | 0 .../dist/additional-methods.js | 0 .../dist/additional-methods.min.js | 0 .../jquery-validation/dist/jquery.validate.js | 0 .../dist/jquery.validate.min.js | 0 .../wwwroot/lib/jquery/LICENSE.txt | 0 .../wwwroot/lib/jquery/dist/jquery.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.map | 0 .../wwwroot/podcast-cover.jpg | Bin .../Projects/ThePodcastWebsite/wwwroot/w.png | Bin .../Session00/Session00 Notes.md | 0 .../Session01/Practices/01MiniProject.mp4 | Bin .../Projects/Assets/images/dobby.png | Bin .../Projects/Assets/images/draco_malfoy.png | Bin .../Projects/Assets/images/dumbledore.png | Bin .../Projects/Assets/images/ginny_weasley.png | Bin .../Projects/Assets/images/harry_potter.png | Bin .../Assets/images/hermione_granger.png | Bin .../Projects/Assets/images/hogwarts.jpg | Bin .../Projects/Assets/images/luna_lovegood.png | Bin .../Projects/Assets/images/rebeus_hagrid.png | Bin .../Projects/Assets/images/ron_weasley.png | Bin .../DesignTimeBuild/.dtbcache.v2 | Bin ...267d5e36-b421-4386-9e91-f380b4d26822.vsidx | Bin ...5adee877-533a-442c-a0e4-b92277d97ca7.vsidx | Bin ...70b4abf3-83bc-4936-afb8-3bcbf2c7fc68.vsidx | Bin ...c2d554cc-2516-4f4b-8c28-6556b947721c.vsidx | Bin ...d1faab84-7741-4928-9599-457e4e0b11af.vsidx | Bin .../config/applicationhost.config | 0 .../.vs/C02_RoutingBasics/v17/.futdcache.v2 | Bin .../.vs/C02_RoutingBasics/v17/.suo | Bin .../c02_routingbasics.metadata.v7.bin | Bin .../c02_routingbasics.projects.v7.bin | Bin .../RoutingBasics/C02_RoutingBasics.csproj | 0 .../C02_RoutingBasics.csproj.user | 0 .../RoutingBasics/C02_RoutingBasics.sln | 0 .../Controllers/GalleryController.cs | 0 .../Controllers/HomeController.cs | 0 .../RoutingBasics/Models/ErrorViewModel.cs | 0 .../Projects/RoutingBasics/Program.cs | 0 .../Properties/launchSettings.json | 0 .../RoutingBasics/Views/Gallery/Main.cshtml | 0 .../RoutingBasics/Views/Home/Index.cshtml | 0 .../RoutingBasics/Views/Home/Privacy.cshtml | 0 .../RoutingBasics/Views/Shared/Error.cshtml | 0 .../RoutingBasics/Views/Shared/_Layout.cshtml | 0 .../Views/Shared/_Layout.cshtml.css | 0 .../Shared/_ValidationScriptsPartial.cshtml | 0 .../RoutingBasics/Views/_ViewImports.cshtml | 0 .../RoutingBasics/Views/_ViewStart.cshtml | 0 .../appsettings.Development.json | 0 .../Projects/RoutingBasics/appsettings.json | 0 .../Debug/net6.0/C02_RoutingBasics.deps.json | 0 .../bin/Debug/net6.0/C02_RoutingBasics.dll | Bin .../bin/Debug/net6.0/C02_RoutingBasics.exe | Bin .../bin/Debug/net6.0/C02_RoutingBasics.pdb | Bin .../C02_RoutingBasics.runtimeconfig.json | 0 ...RoutingBasics.staticwebassets.runtime.json | 0 .../Debug/net6.0/appsettings.Development.json | 0 .../bin/Debug/net6.0/appsettings.json | 0 ...C02_RoutingBasics.csproj.nuget.dgspec.json | 0 .../C02_RoutingBasics.csproj.nuget.g.props | 0 .../C02_RoutingBasics.csproj.nuget.g.targets | 0 ...CoreApp,Version=v6.0.AssemblyAttributes.cs | 0 .../net6.0/C02_RoutingBasics.AssemblyInfo.cs | 0 ...C02_RoutingBasics.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../C02_RoutingBasics.GlobalUsings.g.cs | 0 ...sics.MvcApplicationPartsAssemblyInfo.cache | 0 .../C02_RoutingBasics.RazorAssemblyInfo.cache | 0 .../C02_RoutingBasics.RazorAssemblyInfo.cs | 0 .../net6.0/C02_RoutingBasics.assets.cache | Bin ...outingBasics.csproj.BuildWithSkipAnalyzers | 0 ...utingBasics.csproj.CoreCompileInputs.cache | 0 ..._RoutingBasics.csproj.FileListAbsolute.txt | 0 .../obj/Debug/net6.0/C02_RoutingBasics.dll | Bin .../C02_RoutingBasics.genruntimeconfig.cache | 0 .../obj/Debug/net6.0/C02_RoutingBasics.pdb | Bin .../obj/Debug/net6.0/apphost.exe | Bin .../obj/Debug/net6.0/project.razor.vs.json | 0 .../Debug/net6.0/ref/C02_RoutingBasics.dll | Bin .../Debug/net6.0/refint/C02_RoutingBasics.dll | Bin .../Views/Shared/_Layout.cshtml.rz.scp.css | 0 .../bundle/C02_RoutingBasics.styles.css | 0 .../C02_RoutingBasics.bundle.scp.css | 0 .../Debug/net6.0/staticwebassets.build.json | 0 .../net6.0/staticwebassets.development.json | 0 .../Debug/net6.0/staticwebassets.pack.json | 0 ...Microsoft.AspNetCore.StaticWebAssets.props | 0 .../msbuild.build.C02_RoutingBasics.props | 0 ...uildMultiTargeting.C02_RoutingBasics.props | 0 ...ld.buildTransitive.C02_RoutingBasics.props | 0 .../RoutingBasics/obj/project.assets.json | 0 .../RoutingBasics/obj/project.nuget.cache | 0 .../RoutingBasics/wwwroot/css/site.css | 0 .../RoutingBasics/wwwroot/favicon.ico | Bin .../Projects/RoutingBasics/wwwroot/js/site.js | 0 .../wwwroot/lib/bootstrap/LICENSE | 0 .../lib/bootstrap/dist/css/bootstrap-grid.css | 0 .../bootstrap/dist/css/bootstrap-grid.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.min.css | 0 .../dist/css/bootstrap-grid.min.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.rtl.css | 0 .../dist/css/bootstrap-grid.rtl.css.map | 0 .../dist/css/bootstrap-grid.rtl.min.css | 0 .../dist/css/bootstrap-grid.rtl.min.css.map | 0 .../bootstrap/dist/css/bootstrap-reboot.css | 0 .../dist/css/bootstrap-reboot.css.map | 0 .../dist/css/bootstrap-reboot.min.css | 0 .../dist/css/bootstrap-reboot.min.css.map | 0 .../dist/css/bootstrap-reboot.rtl.css | 0 .../dist/css/bootstrap-reboot.rtl.css.map | 0 .../dist/css/bootstrap-reboot.rtl.min.css | 0 .../dist/css/bootstrap-reboot.rtl.min.css.map | 0 .../dist/css/bootstrap-utilities.css | 0 .../dist/css/bootstrap-utilities.css.map | 0 .../dist/css/bootstrap-utilities.min.css | 0 .../dist/css/bootstrap-utilities.min.css.map | 0 .../dist/css/bootstrap-utilities.rtl.css | 0 .../dist/css/bootstrap-utilities.rtl.css.map | 0 .../dist/css/bootstrap-utilities.rtl.min.css | 0 .../css/bootstrap-utilities.rtl.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.css | 0 .../lib/bootstrap/dist/css/bootstrap.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.min.css | 0 .../bootstrap/dist/css/bootstrap.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.rtl.css | 0 .../bootstrap/dist/css/bootstrap.rtl.css.map | 0 .../bootstrap/dist/css/bootstrap.rtl.min.css | 0 .../dist/css/bootstrap.rtl.min.css.map | 0 .../lib/bootstrap/dist/js/bootstrap.bundle.js | 0 .../bootstrap/dist/js/bootstrap.bundle.js.map | 0 .../bootstrap/dist/js/bootstrap.bundle.min.js | 0 .../dist/js/bootstrap.bundle.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.esm.js | 0 .../bootstrap/dist/js/bootstrap.esm.js.map | 0 .../bootstrap/dist/js/bootstrap.esm.min.js | 0 .../dist/js/bootstrap.esm.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.js | 0 .../lib/bootstrap/dist/js/bootstrap.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.min.js | 0 .../bootstrap/dist/js/bootstrap.min.js.map | 0 .../jquery-validation-unobtrusive/LICENSE.txt | 0 .../jquery.validate.unobtrusive.js | 0 .../jquery.validate.unobtrusive.min.js | 0 .../wwwroot/lib/jquery-validation/LICENSE.md | 0 .../dist/additional-methods.js | 0 .../dist/additional-methods.min.js | 0 .../jquery-validation/dist/jquery.validate.js | 0 .../dist/jquery.validate.min.js | 0 .../wwwroot/lib/jquery/LICENSE.txt | 0 .../wwwroot/lib/jquery/dist/jquery.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.map | 0 .../ProjectEvaluation/wiki.metadata.v7.bin | Bin .../ProjectEvaluation/wiki.projects.v7.bin | Bin .../.vs/Wiki/DesignTimeBuild/.dtbcache.v2 | Bin ...20ffcd25-1ea7-409a-9dff-2176b545267d.vsidx | Bin ...385817dd-78a7-4567-9242-5ec199e81d98.vsidx | Bin ...58ee53b5-65fd-4a7f-85de-1e881a5555cc.vsidx | Bin ...a5b82f0c-da34-4aa6-9024-3de210707e3e.vsidx | Bin ...cb97e310-7992-428b-b8b8-b17d098164b7.vsidx | Bin .../.vs/Wiki/config/applicationhost.config | 0 .../Projects/Wiki/.vs/Wiki/v17/.futdcache.v2 | Bin .../Session01/Projects/Wiki/.vs/Wiki/v17/.suo | Bin .../Wiki/Controllers/HomeController.cs | 0 .../Projects/Wiki/Models/Character.cs | 0 .../Projects/Wiki/Models/ErrorViewModel.cs | 0 .../Session01/Projects/Wiki/Models/Person.cs | 0 .../Session01/Projects/Wiki/Program.cs | 0 .../Wiki/Properties/launchSettings.json | 0 .../Projects/Wiki/Views/Home/Index.cshtml | 0 .../Projects/Wiki/Views/Home/Person.cshtml | 0 .../Projects/Wiki/Views/Home/Person2.cshtml | 0 .../Projects/Wiki/Views/Home/Privacy.cshtml | 0 .../Projects/Wiki/Views/Shared/Error.cshtml | 0 .../Projects/Wiki/Views/Shared/_Layout.cshtml | 0 .../Wiki/Views/Shared/_Layout.cshtml.css | 0 .../Shared/_ValidationScriptsPartial.cshtml | 0 .../Projects/Wiki/Views/_ViewImports.cshtml | 0 .../Projects/Wiki/Views/_ViewStart.cshtml | 0 .../Session01/Projects/Wiki/Wiki.csproj | 0 .../Session01/Projects/Wiki/Wiki.csproj.user | 0 .../Session01/Projects/Wiki/Wiki.sln | 0 .../Wiki/appsettings.Development.json | 0 .../Session01/Projects/Wiki/appsettings.json | 0 ...ft.AspNetCore.Authentication.Negotiate.dll | Bin ...ft.AspNetCore.Connections.Abstractions.dll | Bin .../net6.0/Microsoft.Extensions.Features.dll | Bin .../System.DirectoryServices.Protocols.dll | Bin .../bin/Debug/net6.0/System.IO.Pipelines.dll | Bin .../Wiki/bin/Debug/net6.0/Wiki.deps.json | 0 .../Projects/Wiki/bin/Debug/net6.0/Wiki.dll | Bin .../Projects/Wiki/bin/Debug/net6.0/Wiki.exe | Bin .../Projects/Wiki/bin/Debug/net6.0/Wiki.pdb | Bin .../bin/Debug/net6.0/Wiki.runtimeconfig.json | 0 .../net6.0/Wiki.staticwebassets.runtime.json | 0 .../Debug/net6.0/appsettings.Development.json | 0 .../Wiki/bin/Debug/net6.0/appsettings.json | 0 .../System.DirectoryServices.Protocols.dll | Bin .../System.DirectoryServices.Protocols.dll | Bin .../System.DirectoryServices.Protocols.dll | Bin ...CoreApp,Version=v6.0.AssemblyAttributes.cs | 0 .../obj/Debug/net6.0/Wiki.AssemblyInfo.cs | 0 .../net6.0/Wiki.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../obj/Debug/net6.0/Wiki.GlobalUsings.g.cs | 0 ...Wiki.MvcApplicationPartsAssemblyInfo.cache | 0 .../Debug/net6.0/Wiki.RazorAssemblyInfo.cache | 0 .../Debug/net6.0/Wiki.RazorAssemblyInfo.cs | 0 .../Wiki/obj/Debug/net6.0/Wiki.assets.cache | Bin .../Wiki.csproj.AssemblyReference.cache | Bin .../net6.0/Wiki.csproj.BuildWithSkipAnalyzers | 0 .../obj/Debug/net6.0/Wiki.csproj.CopyComplete | 0 .../Wiki.csproj.CoreCompileInputs.cache | 0 .../net6.0/Wiki.csproj.FileListAbsolute.txt | 0 .../Projects/Wiki/obj/Debug/net6.0/Wiki.dll | Bin .../Debug/net6.0/Wiki.genruntimeconfig.cache | 0 .../Projects/Wiki/obj/Debug/net6.0/Wiki.pdb | Bin .../Wiki/obj/Debug/net6.0/apphost.exe | Bin .../obj/Debug/net6.0/project.razor.vs.json | 0 .../Wiki/obj/Debug/net6.0/ref/Wiki.dll | Bin .../Wiki/obj/Debug/net6.0/refint/Wiki.dll | Bin .../Views/Shared/_Layout.cshtml.rz.scp.css | 0 .../net6.0/scopedcss/bundle/Wiki.styles.css | 0 .../projectbundle/Wiki.bundle.scp.css | 0 .../Debug/net6.0/staticwebassets.build.json | 0 .../net6.0/staticwebassets.development.json | 0 .../Debug/net6.0/staticwebassets.pack.json | 0 ...Microsoft.AspNetCore.StaticWebAssets.props | 0 .../staticwebassets/msbuild.build.Wiki.props | 0 .../msbuild.buildMultiTargeting.Wiki.props | 0 .../msbuild.buildTransitive.Wiki.props | 0 .../Wiki/obj/Wiki.csproj.nuget.dgspec.json | 0 .../Wiki/obj/Wiki.csproj.nuget.g.props | 0 .../Wiki/obj/Wiki.csproj.nuget.g.targets | 0 .../Projects/Wiki/obj/project.assets.json | 0 .../Projects/Wiki/obj/project.nuget.cache | 0 .../Projects/Wiki/wwwroot/css/Sample1.cs | 0 .../Projects/Wiki/wwwroot/css/Sample1.css | 0 .../Projects/Wiki/wwwroot/css/site.css | 0 .../Projects/Wiki/wwwroot/favicon.ico | Bin .../Projects/Wiki/wwwroot/img/dobby.png | Bin .../Wiki/wwwroot/img/draco_malfoy.png | Bin .../Projects/Wiki/wwwroot/img/dumbledore.png | Bin .../Wiki/wwwroot/img/ginny_weasley.png | Bin .../Wiki/wwwroot/img/harry_potter.png | Bin .../Wiki/wwwroot/img/hermione_granger.png | Bin .../Projects/Wiki/wwwroot/img/hogwarts.jpg | Bin .../Wiki/wwwroot/img/luna_lovegood.png | Bin .../Wiki/wwwroot/img/rebeus_hagrid.png | Bin .../Projects/Wiki/wwwroot/img/ron_weasley.png | Bin .../Projects/Wiki/wwwroot/js/site.js | 0 .../Wiki/wwwroot/lib/bootstrap/LICENSE | 0 .../lib/bootstrap/dist/css/bootstrap-grid.css | 0 .../bootstrap/dist/css/bootstrap-grid.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.min.css | 0 .../dist/css/bootstrap-grid.min.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.rtl.css | 0 .../dist/css/bootstrap-grid.rtl.css.map | 0 .../dist/css/bootstrap-grid.rtl.min.css | 0 .../dist/css/bootstrap-grid.rtl.min.css.map | 0 .../bootstrap/dist/css/bootstrap-reboot.css | 0 .../dist/css/bootstrap-reboot.css.map | 0 .../dist/css/bootstrap-reboot.min.css | 0 .../dist/css/bootstrap-reboot.min.css.map | 0 .../dist/css/bootstrap-reboot.rtl.css | 0 .../dist/css/bootstrap-reboot.rtl.css.map | 0 .../dist/css/bootstrap-reboot.rtl.min.css | 0 .../dist/css/bootstrap-reboot.rtl.min.css.map | 0 .../dist/css/bootstrap-utilities.css | 0 .../dist/css/bootstrap-utilities.css.map | 0 .../dist/css/bootstrap-utilities.min.css | 0 .../dist/css/bootstrap-utilities.min.css.map | 0 .../dist/css/bootstrap-utilities.rtl.css | 0 .../dist/css/bootstrap-utilities.rtl.css.map | 0 .../dist/css/bootstrap-utilities.rtl.min.css | 0 .../css/bootstrap-utilities.rtl.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.css | 0 .../lib/bootstrap/dist/css/bootstrap.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.min.css | 0 .../bootstrap/dist/css/bootstrap.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.rtl.css | 0 .../bootstrap/dist/css/bootstrap.rtl.css.map | 0 .../bootstrap/dist/css/bootstrap.rtl.min.css | 0 .../dist/css/bootstrap.rtl.min.css.map | 0 .../lib/bootstrap/dist/js/bootstrap.bundle.js | 0 .../bootstrap/dist/js/bootstrap.bundle.js.map | 0 .../bootstrap/dist/js/bootstrap.bundle.min.js | 0 .../dist/js/bootstrap.bundle.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.esm.js | 0 .../bootstrap/dist/js/bootstrap.esm.js.map | 0 .../bootstrap/dist/js/bootstrap.esm.min.js | 0 .../dist/js/bootstrap.esm.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.js | 0 .../lib/bootstrap/dist/js/bootstrap.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.min.js | 0 .../bootstrap/dist/js/bootstrap.min.js.map | 0 .../jquery-validation-unobtrusive/LICENSE.txt | 0 .../jquery.validate.unobtrusive.js | 0 .../jquery.validate.unobtrusive.min.js | 0 .../wwwroot/lib/jquery-validation/LICENSE.md | 0 .../dist/additional-methods.js | 0 .../dist/additional-methods.min.js | 0 .../jquery-validation/dist/jquery.validate.js | 0 .../dist/jquery.validate.min.js | 0 .../Wiki/wwwroot/lib/jquery/LICENSE.txt | 0 .../Wiki/wwwroot/lib/jquery/dist/jquery.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.map | 0 .../Session01/Session01 Notes.md | 0 .../Session02/Practices/Practice.md | 0 .../ProjectEvaluation/wiki.metadata.v7.bin | Bin .../ProjectEvaluation/wiki.projects.v7.bin | Bin .../.vs/Wiki/DesignTimeBuild/.dtbcache.v2 | Bin ...0605e4e6-12fb-4b45-971e-32d6b411d53e.vsidx | Bin ...25ba1b3e-1699-41c4-9182-62da94ecd2ca.vsidx | Bin ...b8cc14eb-f8bb-47c9-8b9e-95a0899e10eb.vsidx | Bin ...de108f16-cd1a-4df5-b65c-a15fce0e8c37.vsidx | Bin ...ed28d41f-bfa8-44a4-ac43-786ec64b91dd.vsidx | Bin .../.vs/Wiki/config/applicationhost.config | 0 .../Projects/Wiki/.vs/Wiki/v17/.futdcache.v2 | Bin .../Session02/Projects/Wiki/.vs/Wiki/v17/.suo | Bin .../Wiki/Controllers/HomeController.cs | 0 .../Projects/Wiki/Models/Character.cs | 0 .../Projects/Wiki/Models/ErrorViewModel.cs | 0 .../Session02/Projects/Wiki/Models/Person.cs | 0 .../Session02/Projects/Wiki/Program.cs | 0 .../Wiki/Properties/launchSettings.json | 0 .../Projects/Wiki/Views/Home/Index.cshtml | 0 .../Projects/Wiki/Views/Home/Person.cshtml | 0 .../Projects/Wiki/Views/Home/Person2.cshtml | 0 .../Projects/Wiki/Views/Home/Privacy.cshtml | 0 .../Projects/Wiki/Views/Shared/Error.cshtml | 0 .../Projects/Wiki/Views/Shared/_Layout.cshtml | 0 .../Wiki/Views/Shared/_Layout.cshtml.css | 0 .../Shared/_ValidationScriptsPartial.cshtml | 0 .../Projects/Wiki/Views/_ViewImports.cshtml | 0 .../Projects/Wiki/Views/_ViewStart.cshtml | 0 .../Session02/Projects/Wiki/Wiki.csproj | 0 .../Session02/Projects/Wiki/Wiki.csproj.user | 0 .../Session02/Projects/Wiki/Wiki.sln | 0 .../Wiki/appsettings.Development.json | 0 .../Session02/Projects/Wiki/appsettings.json | 0 ...ft.AspNetCore.Authentication.Negotiate.dll | Bin ...ft.AspNetCore.Connections.Abstractions.dll | Bin .../net6.0/Microsoft.Extensions.Features.dll | Bin .../System.DirectoryServices.Protocols.dll | Bin .../bin/Debug/net6.0/System.IO.Pipelines.dll | Bin .../Wiki/bin/Debug/net6.0/Wiki.deps.json | 0 .../Projects/Wiki/bin/Debug/net6.0/Wiki.dll | Bin .../Projects/Wiki/bin/Debug/net6.0/Wiki.exe | Bin .../Projects/Wiki/bin/Debug/net6.0/Wiki.pdb | Bin .../bin/Debug/net6.0/Wiki.runtimeconfig.json | 0 .../net6.0/Wiki.staticwebassets.runtime.json | 0 .../Debug/net6.0/appsettings.Development.json | 0 .../Wiki/bin/Debug/net6.0/appsettings.json | 0 .../System.DirectoryServices.Protocols.dll | Bin .../System.DirectoryServices.Protocols.dll | Bin .../System.DirectoryServices.Protocols.dll | Bin ...CoreApp,Version=v6.0.AssemblyAttributes.cs | 0 .../obj/Debug/net6.0/Wiki.AssemblyInfo.cs | 0 .../net6.0/Wiki.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../obj/Debug/net6.0/Wiki.GlobalUsings.g.cs | 0 ...Wiki.MvcApplicationPartsAssemblyInfo.cache | 0 .../Debug/net6.0/Wiki.RazorAssemblyInfo.cache | 0 .../Debug/net6.0/Wiki.RazorAssemblyInfo.cs | 0 .../Wiki/obj/Debug/net6.0/Wiki.assets.cache | Bin .../Wiki.csproj.AssemblyReference.cache | Bin .../net6.0/Wiki.csproj.BuildWithSkipAnalyzers | 0 .../obj/Debug/net6.0/Wiki.csproj.CopyComplete | 0 .../Wiki.csproj.CoreCompileInputs.cache | 0 .../net6.0/Wiki.csproj.FileListAbsolute.txt | 0 .../Projects/Wiki/obj/Debug/net6.0/Wiki.dll | Bin .../Debug/net6.0/Wiki.genruntimeconfig.cache | 0 .../Projects/Wiki/obj/Debug/net6.0/Wiki.pdb | Bin .../Wiki/obj/Debug/net6.0/apphost.exe | Bin .../obj/Debug/net6.0/project.razor.vs.json | 0 .../Wiki/obj/Debug/net6.0/ref/Wiki.dll | Bin .../Wiki/obj/Debug/net6.0/refint/Wiki.dll | Bin .../Views/Shared/_Layout.cshtml.rz.scp.css | 0 .../net6.0/scopedcss/bundle/Wiki.styles.css | 0 .../projectbundle/Wiki.bundle.scp.css | 0 .../Debug/net6.0/staticwebassets.build.json | 0 .../net6.0/staticwebassets.development.json | 0 .../Debug/net6.0/staticwebassets.pack.json | 0 ...Microsoft.AspNetCore.StaticWebAssets.props | 0 .../staticwebassets/msbuild.build.Wiki.props | 0 .../msbuild.buildMultiTargeting.Wiki.props | 0 .../msbuild.buildTransitive.Wiki.props | 0 .../Wiki/obj/Wiki.csproj.nuget.dgspec.json | 0 .../Wiki/obj/Wiki.csproj.nuget.g.props | 0 .../Wiki/obj/Wiki.csproj.nuget.g.targets | 0 .../Projects/Wiki/obj/project.assets.json | 0 .../Projects/Wiki/obj/project.nuget.cache | 0 .../Projects/Wiki/wwwroot/css/Sample1.cs | 0 .../Projects/Wiki/wwwroot/css/Sample1.css | 0 .../Projects/Wiki/wwwroot/css/site.css | 0 .../Projects/Wiki/wwwroot/favicon.ico | Bin .../Projects/Wiki/wwwroot/img/dobby.png | Bin .../Wiki/wwwroot/img/draco_malfoy.png | Bin .../Projects/Wiki/wwwroot/img/dumbledore.png | Bin .../Wiki/wwwroot/img/ginny_weasley.png | Bin .../Wiki/wwwroot/img/harry_potter.png | Bin .../Wiki/wwwroot/img/hermione_granger.png | Bin .../Projects/Wiki/wwwroot/img/hogwarts.jpg | Bin .../Wiki/wwwroot/img/luna_lovegood.png | Bin .../Wiki/wwwroot/img/rebeus_hagrid.png | Bin .../Projects/Wiki/wwwroot/img/ron_weasley.png | Bin .../Projects/Wiki/wwwroot/js/site.js | 0 .../Wiki/wwwroot/lib/bootstrap/LICENSE | 0 .../lib/bootstrap/dist/css/bootstrap-grid.css | 0 .../bootstrap/dist/css/bootstrap-grid.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.min.css | 0 .../dist/css/bootstrap-grid.min.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.rtl.css | 0 .../dist/css/bootstrap-grid.rtl.css.map | 0 .../dist/css/bootstrap-grid.rtl.min.css | 0 .../dist/css/bootstrap-grid.rtl.min.css.map | 0 .../bootstrap/dist/css/bootstrap-reboot.css | 0 .../dist/css/bootstrap-reboot.css.map | 0 .../dist/css/bootstrap-reboot.min.css | 0 .../dist/css/bootstrap-reboot.min.css.map | 0 .../dist/css/bootstrap-reboot.rtl.css | 0 .../dist/css/bootstrap-reboot.rtl.css.map | 0 .../dist/css/bootstrap-reboot.rtl.min.css | 0 .../dist/css/bootstrap-reboot.rtl.min.css.map | 0 .../dist/css/bootstrap-utilities.css | 0 .../dist/css/bootstrap-utilities.css.map | 0 .../dist/css/bootstrap-utilities.min.css | 0 .../dist/css/bootstrap-utilities.min.css.map | 0 .../dist/css/bootstrap-utilities.rtl.css | 0 .../dist/css/bootstrap-utilities.rtl.css.map | 0 .../dist/css/bootstrap-utilities.rtl.min.css | 0 .../css/bootstrap-utilities.rtl.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.css | 0 .../lib/bootstrap/dist/css/bootstrap.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.min.css | 0 .../bootstrap/dist/css/bootstrap.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.rtl.css | 0 .../bootstrap/dist/css/bootstrap.rtl.css.map | 0 .../bootstrap/dist/css/bootstrap.rtl.min.css | 0 .../dist/css/bootstrap.rtl.min.css.map | 0 .../lib/bootstrap/dist/js/bootstrap.bundle.js | 0 .../bootstrap/dist/js/bootstrap.bundle.js.map | 0 .../bootstrap/dist/js/bootstrap.bundle.min.js | 0 .../dist/js/bootstrap.bundle.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.esm.js | 0 .../bootstrap/dist/js/bootstrap.esm.js.map | 0 .../bootstrap/dist/js/bootstrap.esm.min.js | 0 .../dist/js/bootstrap.esm.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.js | 0 .../lib/bootstrap/dist/js/bootstrap.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.min.js | 0 .../bootstrap/dist/js/bootstrap.min.js.map | 0 .../jquery-validation-unobtrusive/LICENSE.txt | 0 .../jquery.validate.unobtrusive.js | 0 .../jquery.validate.unobtrusive.min.js | 0 .../wwwroot/lib/jquery-validation/LICENSE.md | 0 .../dist/additional-methods.js | 0 .../dist/additional-methods.min.js | 0 .../jquery-validation/dist/jquery.validate.js | 0 .../dist/jquery.validate.min.js | 0 .../Wiki/wwwroot/lib/jquery/LICENSE.txt | 0 .../Wiki/wwwroot/lib/jquery/dist/jquery.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.map | 0 .../Session02/Session02 Notes.md | 0 .../Session03/Practices/Practice.md | 0 .../ProjectEvaluation/views.metadata.v7.bin | Bin .../ProjectEvaluation/views.projects.v7.bin | Bin .../.vs/Views/DesignTimeBuild/.dtbcache.v2 | Bin ...1dc6a65e-cb63-4028-9f0b-ee694efec8fa.vsidx | Bin ...5b2bb6d0-7449-46d1-b504-238dbf484e48.vsidx | Bin ...706955e6-a588-4f2f-90b5-14aa554e1d8e.vsidx | Bin ...75bb4db1-15e1-4c20-aceb-f58f88b17922.vsidx | Bin ...963f1fbf-154d-44e8-858f-5989a4fa3fd0.vsidx | Bin .../.vs/Views/config/applicationhost.config | 0 .../Views/.vs/Views/v17/.futdcache.v2 | Bin .../Projects/Views/.vs/Views/v17/.suo | Bin .../Views/Controllers/HomeController.cs | 0 .../Views/Controllers/MicroController.cs | 0 .../Projects/Views/Models/ErrorViewModel.cs | 0 .../Session03/Projects/Views/Program.cs | 0 .../Views/Properties/launchSettings.json | 0 .../Session03/Projects/Views/Views.csproj | 0 .../Projects/Views/Views.csproj.user | 0 .../Session03/Projects/Views/Views.sln | 0 .../Projects/Views/Views/Home/Index.cshtml | 0 .../Projects/Views/Views/Home/Privacy.cshtml | 0 .../Projects/Views/Views/Micro/Index.cshtml | 0 .../Projects/Views/Views/Shared/Error.cshtml | 0 .../Projects/Views/Views/Shared/Index2.cshtml | 0 .../Views/Views/Shared/_Layout.cshtml | 0 .../Views/Views/Shared/_Layout.cshtml.css | 0 .../Shared/_ValidationScriptsPartial.cshtml | 0 .../Projects/Views/Views/_ViewImports.cshtml | 0 .../Projects/Views/Views/_ViewStart.cshtml | 0 .../Views/appsettings.Development.json | 0 .../Session03/Projects/Views/appsettings.json | 0 .../Views/bin/Debug/net6.0/Views.deps.json | 0 .../Projects/Views/bin/Debug/net6.0/Views.dll | Bin .../Projects/Views/bin/Debug/net6.0/Views.exe | Bin .../Projects/Views/bin/Debug/net6.0/Views.pdb | Bin .../bin/Debug/net6.0/Views.runtimeconfig.json | 0 .../net6.0/Views.staticwebassets.runtime.json | 0 .../Debug/net6.0/appsettings.Development.json | 0 .../Views/bin/Debug/net6.0/appsettings.json | 0 ...CoreApp,Version=v6.0.AssemblyAttributes.cs | 0 .../obj/Debug/net6.0/Views.AssemblyInfo.cs | 0 .../net6.0/Views.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../obj/Debug/net6.0/Views.GlobalUsings.g.cs | 0 ...iews.MvcApplicationPartsAssemblyInfo.cache | 0 .../net6.0/Views.RazorAssemblyInfo.cache | 0 .../Debug/net6.0/Views.RazorAssemblyInfo.cs | 0 .../Views/obj/Debug/net6.0/Views.assets.cache | Bin .../Views.csproj.BuildWithSkipAnalyzers | 0 .../Views.csproj.CoreCompileInputs.cache | 0 .../net6.0/Views.csproj.FileListAbsolute.txt | 0 .../Projects/Views/obj/Debug/net6.0/Views.dll | Bin .../Debug/net6.0/Views.genruntimeconfig.cache | 0 .../Projects/Views/obj/Debug/net6.0/Views.pdb | Bin .../Views/obj/Debug/net6.0/apphost.exe | Bin .../obj/Debug/net6.0/project.razor.vs.json | 0 .../Views/obj/Debug/net6.0/ref/Views.dll | Bin .../Views/obj/Debug/net6.0/refint/Views.dll | Bin .../Views/Shared/_Layout.cshtml.rz.scp.css | 0 .../net6.0/scopedcss/bundle/Views.styles.css | 0 .../projectbundle/Views.bundle.scp.css | 0 .../Debug/net6.0/staticwebassets.build.json | 0 .../net6.0/staticwebassets.development.json | 0 .../Debug/net6.0/staticwebassets.pack.json | 0 ...Microsoft.AspNetCore.StaticWebAssets.props | 0 .../staticwebassets/msbuild.build.Views.props | 0 .../msbuild.buildMultiTargeting.Views.props | 0 .../msbuild.buildTransitive.Views.props | 0 .../Views/obj/Views.csproj.nuget.dgspec.json | 0 .../Views/obj/Views.csproj.nuget.g.props | 0 .../Views/obj/Views.csproj.nuget.g.targets | 0 .../Projects/Views/obj/project.assets.json | 0 .../Projects/Views/obj/project.nuget.cache | 0 .../Views/wwwroot/css/CSS/bootstrap-grid.css | 0 .../wwwroot/css/CSS/bootstrap-grid.css.map | 0 .../wwwroot/css/CSS/bootstrap-grid.min.css | 0 .../css/CSS/bootstrap-grid.min.css.map | 0 .../wwwroot/css/CSS/bootstrap-reboot.css | 0 .../wwwroot/css/CSS/bootstrap-reboot.css.map | 0 .../wwwroot/css/CSS/bootstrap-reboot.min.css | 0 .../css/CSS/bootstrap-reboot.min.css.map | 0 .../Views/wwwroot/css/CSS/bootstrap.css | 0 .../Views/wwwroot/css/CSS/bootstrap.css.map | 0 .../Views/wwwroot/css/CSS/bootstrap.min.css | 0 .../wwwroot/css/CSS/bootstrap.min.css.map | 0 .../wwwroot/css/CSS/font-awesome.min.css | 0 .../css/CSS/jquery.mCustomScrollbar.min.css | 0 .../Views/wwwroot/css/CSS/meanmenu.css | 0 .../Views/wwwroot/css/CSS/owl.carousel.css | 0 .../wwwroot/css/CSS/owl.carousel.min.css | 0 .../wwwroot/css/CSS/owl.theme.default.css | 0 .../wwwroot/css/CSS/owl.theme.default.min.css | 0 .../Views/wwwroot/css/CSS/owl.theme.green.css | 0 .../wwwroot/css/CSS/owl.theme.green.min.css | 0 .../Views/wwwroot/css/CSS/responsive.css | 0 .../Projects/Views/wwwroot/css/CSS/style.css | 0 .../Projects/Views/wwwroot/css/site.css | 0 .../Projects/Views/wwwroot/favicon.ico | Bin .../Views/wwwroot/images/about_img.jpg | Bin .../Projects/Views/wwwroot/images/banner.jpg | Bin .../Projects/Views/wwwroot/images/banner2.jpg | Bin .../Projects/Views/wwwroot/images/bbnner.png | Bin .../Projects/Views/wwwroot/images/footer.jpg | Bin .../Projects/Views/wwwroot/images/icon.png | Bin .../Views/wwwroot/images/icon_right.png | Bin .../Projects/Views/wwwroot/images/loading.gif | Bin .../Projects/Views/wwwroot/images/logo.png | Bin .../Views/wwwroot/images/menu_btn.png | Bin .../Views/wwwroot/images/mics_img1.jpg | Bin .../Views/wwwroot/images/mics_img2.jpg | Bin .../Views/wwwroot/images/mics_img3.jpg | Bin .../Views/wwwroot/images/mics_img4.jpg | Bin .../Views/wwwroot/images/mics_img5.jpg | Bin .../Views/wwwroot/images/mics_img6.jpg | Bin .../Views/wwwroot/images/right_side.png | Bin .../Views/wwwroot/images/service1.png | Bin .../Views/wwwroot/images/service2.png | Bin .../Views/wwwroot/images/service3.png | Bin .../Projects/Views/wwwroot/images/test.png | Bin .../Views/wwwroot/js/JS/bootstrap.bundle.js | 0 .../wwwroot/js/JS/bootstrap.bundle.js.map | 0 .../wwwroot/js/JS/bootstrap.bundle.min.js | 0 .../wwwroot/js/JS/bootstrap.bundle.min.js.map | 0 .../Projects/Views/wwwroot/js/JS/bootstrap.js | 0 .../Views/wwwroot/js/JS/bootstrap.js.map | 0 .../Views/wwwroot/js/JS/bootstrap.min.js | 0 .../Views/wwwroot/js/JS/bootstrap.min.js.map | 0 .../Projects/Views/wwwroot/js/JS/custom.js | 0 .../Views/wwwroot/js/JS/jquery-3.0.0.min.js | 0 .../JS/jquery.mCustomScrollbar.concat.min.js | 0 .../Views/wwwroot/js/JS/jquery.min.js | 0 .../Views/wwwroot/js/JS/owl.carousel.js | 0 .../Views/wwwroot/js/JS/owl.carousel.min.js | 0 .../Views/wwwroot/js/JS/popper.min.js | 0 .../Projects/Views/wwwroot/js/site.js | 0 .../Views/wwwroot/lib/bootstrap/LICENSE | 0 .../lib/bootstrap/dist/css/bootstrap-grid.css | 0 .../bootstrap/dist/css/bootstrap-grid.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.min.css | 0 .../dist/css/bootstrap-grid.min.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.rtl.css | 0 .../dist/css/bootstrap-grid.rtl.css.map | 0 .../dist/css/bootstrap-grid.rtl.min.css | 0 .../dist/css/bootstrap-grid.rtl.min.css.map | 0 .../bootstrap/dist/css/bootstrap-reboot.css | 0 .../dist/css/bootstrap-reboot.css.map | 0 .../dist/css/bootstrap-reboot.min.css | 0 .../dist/css/bootstrap-reboot.min.css.map | 0 .../dist/css/bootstrap-reboot.rtl.css | 0 .../dist/css/bootstrap-reboot.rtl.css.map | 0 .../dist/css/bootstrap-reboot.rtl.min.css | 0 .../dist/css/bootstrap-reboot.rtl.min.css.map | 0 .../dist/css/bootstrap-utilities.css | 0 .../dist/css/bootstrap-utilities.css.map | 0 .../dist/css/bootstrap-utilities.min.css | 0 .../dist/css/bootstrap-utilities.min.css.map | 0 .../dist/css/bootstrap-utilities.rtl.css | 0 .../dist/css/bootstrap-utilities.rtl.css.map | 0 .../dist/css/bootstrap-utilities.rtl.min.css | 0 .../css/bootstrap-utilities.rtl.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.css | 0 .../lib/bootstrap/dist/css/bootstrap.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.min.css | 0 .../bootstrap/dist/css/bootstrap.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.rtl.css | 0 .../bootstrap/dist/css/bootstrap.rtl.css.map | 0 .../bootstrap/dist/css/bootstrap.rtl.min.css | 0 .../dist/css/bootstrap.rtl.min.css.map | 0 .../lib/bootstrap/dist/js/bootstrap.bundle.js | 0 .../bootstrap/dist/js/bootstrap.bundle.js.map | 0 .../bootstrap/dist/js/bootstrap.bundle.min.js | 0 .../dist/js/bootstrap.bundle.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.esm.js | 0 .../bootstrap/dist/js/bootstrap.esm.js.map | 0 .../bootstrap/dist/js/bootstrap.esm.min.js | 0 .../dist/js/bootstrap.esm.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.js | 0 .../lib/bootstrap/dist/js/bootstrap.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.min.js | 0 .../bootstrap/dist/js/bootstrap.min.js.map | 0 .../jquery-validation-unobtrusive/LICENSE.txt | 0 .../jquery.validate.unobtrusive.js | 0 .../jquery.validate.unobtrusive.min.js | 0 .../wwwroot/lib/jquery-validation/LICENSE.md | 0 .../dist/additional-methods.js | 0 .../dist/additional-methods.min.js | 0 .../jquery-validation/dist/jquery.validate.js | 0 .../dist/jquery.validate.min.js | 0 .../Views/wwwroot/lib/jquery/LICENSE.txt | 0 .../Views/wwwroot/lib/jquery/dist/jquery.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.map | 0 .../Session03/Session03 Notes.md | 0 .../ProjectEvaluation/wiki.metadata.v7.bin | Bin .../ProjectEvaluation/wiki.projects.v7.bin | Bin .../.vs/Wiki/DesignTimeBuild/.dtbcache.v2 | Bin ...0605e4e6-12fb-4b45-971e-32d6b411d53e.vsidx | Bin ...25ba1b3e-1699-41c4-9182-62da94ecd2ca.vsidx | Bin ...83c5c398-3324-4619-b37c-94f19f5456d5.vsidx | Bin ...8deb53db-2d41-4ac5-8657-d5d77e4fc1fa.vsidx | Bin ...b8cc14eb-f8bb-47c9-8b9e-95a0899e10eb.vsidx | Bin .../.vs/Wiki/config/applicationhost.config | 0 .../Projects/Wiki/.vs/Wiki/v17/.futdcache.v2 | Bin .../Session04/Projects/Wiki/.vs/Wiki/v17/.suo | Bin .../Wiki/Controllers/HomeController.cs | 0 .../Projects/Wiki/Models/Character.cs | 0 .../Projects/Wiki/Models/ErrorViewModel.cs | 0 .../Session04/Projects/Wiki/Models/Person.cs | 0 .../Session04/Projects/Wiki/Program.cs | 0 .../Wiki/Properties/launchSettings.json | 0 .../Projects/Wiki/Views/Home/Index.cshtml | 0 .../Projects/Wiki/Views/Home/Person.cshtml | 0 .../Projects/Wiki/Views/Home/Person2.cshtml | 0 .../Projects/Wiki/Views/Home/Privacy.cshtml | 0 .../Projects/Wiki/Views/Shared/Error.cshtml | 0 .../Projects/Wiki/Views/Shared/_Layout.cshtml | 0 .../Wiki/Views/Shared/_Layout.cshtml.css | 0 .../Shared/_ValidationScriptsPartial.cshtml | 0 .../Projects/Wiki/Views/_ViewImports.cshtml | 0 .../Projects/Wiki/Views/_ViewStart.cshtml | 0 .../Session04/Projects/Wiki/Wiki.csproj | 0 .../Session04/Projects/Wiki/Wiki.csproj.user | 0 .../Session04/Projects/Wiki/Wiki.sln | 0 .../Wiki/appsettings.Development.json | 0 .../Session04/Projects/Wiki/appsettings.json | 0 ...ft.AspNetCore.Authentication.Negotiate.dll | Bin ...ft.AspNetCore.Connections.Abstractions.dll | Bin .../net6.0/Microsoft.Extensions.Features.dll | Bin .../System.DirectoryServices.Protocols.dll | Bin .../bin/Debug/net6.0/System.IO.Pipelines.dll | Bin .../Wiki/bin/Debug/net6.0/Wiki.deps.json | 0 .../Projects/Wiki/bin/Debug/net6.0/Wiki.dll | Bin .../Projects/Wiki/bin/Debug/net6.0/Wiki.exe | Bin .../Projects/Wiki/bin/Debug/net6.0/Wiki.pdb | Bin .../bin/Debug/net6.0/Wiki.runtimeconfig.json | 0 .../net6.0/Wiki.staticwebassets.runtime.json | 0 .../Debug/net6.0/appsettings.Development.json | 0 .../Wiki/bin/Debug/net6.0/appsettings.json | 0 .../System.DirectoryServices.Protocols.dll | Bin .../System.DirectoryServices.Protocols.dll | Bin .../System.DirectoryServices.Protocols.dll | Bin ...CoreApp,Version=v6.0.AssemblyAttributes.cs | 0 .../obj/Debug/net6.0/Wiki.AssemblyInfo.cs | 0 .../net6.0/Wiki.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../obj/Debug/net6.0/Wiki.GlobalUsings.g.cs | 0 ...Wiki.MvcApplicationPartsAssemblyInfo.cache | 0 .../Debug/net6.0/Wiki.RazorAssemblyInfo.cache | 0 .../Debug/net6.0/Wiki.RazorAssemblyInfo.cs | 0 .../Wiki/obj/Debug/net6.0/Wiki.assets.cache | Bin .../Wiki.csproj.AssemblyReference.cache | Bin .../net6.0/Wiki.csproj.BuildWithSkipAnalyzers | 0 .../obj/Debug/net6.0/Wiki.csproj.CopyComplete | 0 .../Wiki.csproj.CoreCompileInputs.cache | 0 .../net6.0/Wiki.csproj.FileListAbsolute.txt | 0 .../Projects/Wiki/obj/Debug/net6.0/Wiki.dll | Bin .../Debug/net6.0/Wiki.genruntimeconfig.cache | 0 .../Projects/Wiki/obj/Debug/net6.0/Wiki.pdb | Bin .../Wiki/obj/Debug/net6.0/apphost.exe | Bin .../obj/Debug/net6.0/project.razor.vs.json | 0 .../Wiki/obj/Debug/net6.0/ref/Wiki.dll | Bin .../Wiki/obj/Debug/net6.0/refint/Wiki.dll | Bin .../Views/Shared/_Layout.cshtml.rz.scp.css | 0 .../net6.0/scopedcss/bundle/Wiki.styles.css | 0 .../projectbundle/Wiki.bundle.scp.css | 0 .../Debug/net6.0/staticwebassets.build.json | 0 .../net6.0/staticwebassets.development.json | 0 .../Debug/net6.0/staticwebassets.pack.json | 0 ...Microsoft.AspNetCore.StaticWebAssets.props | 0 .../staticwebassets/msbuild.build.Wiki.props | 0 .../msbuild.buildMultiTargeting.Wiki.props | 0 .../msbuild.buildTransitive.Wiki.props | 0 .../Wiki/obj/Wiki.csproj.nuget.dgspec.json | 0 .../Wiki/obj/Wiki.csproj.nuget.g.props | 0 .../Wiki/obj/Wiki.csproj.nuget.g.targets | 0 .../Projects/Wiki/obj/project.assets.json | 0 .../Projects/Wiki/obj/project.nuget.cache | 0 .../Projects/Wiki/wwwroot/css/Sample1.cs | 0 .../Projects/Wiki/wwwroot/css/Sample1.css | 0 .../Projects/Wiki/wwwroot/css/site.css | 0 .../Projects/Wiki/wwwroot/favicon.ico | Bin .../Projects/Wiki/wwwroot/img/dobby.png | Bin .../Wiki/wwwroot/img/draco_malfoy.png | Bin .../Projects/Wiki/wwwroot/img/dumbledore.png | Bin .../Wiki/wwwroot/img/ginny_weasley.png | Bin .../Wiki/wwwroot/img/harry_potter.png | Bin .../Wiki/wwwroot/img/hermione_granger.png | Bin .../Projects/Wiki/wwwroot/img/hogwarts.jpg | Bin .../Wiki/wwwroot/img/luna_lovegood.png | Bin .../Wiki/wwwroot/img/rebeus_hagrid.png | Bin .../Projects/Wiki/wwwroot/img/ron_weasley.png | Bin .../Projects/Wiki/wwwroot/js/site.js | 0 .../Wiki/wwwroot/lib/bootstrap/LICENSE | 0 .../lib/bootstrap/dist/css/bootstrap-grid.css | 0 .../bootstrap/dist/css/bootstrap-grid.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.min.css | 0 .../dist/css/bootstrap-grid.min.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.rtl.css | 0 .../dist/css/bootstrap-grid.rtl.css.map | 0 .../dist/css/bootstrap-grid.rtl.min.css | 0 .../dist/css/bootstrap-grid.rtl.min.css.map | 0 .../bootstrap/dist/css/bootstrap-reboot.css | 0 .../dist/css/bootstrap-reboot.css.map | 0 .../dist/css/bootstrap-reboot.min.css | 0 .../dist/css/bootstrap-reboot.min.css.map | 0 .../dist/css/bootstrap-reboot.rtl.css | 0 .../dist/css/bootstrap-reboot.rtl.css.map | 0 .../dist/css/bootstrap-reboot.rtl.min.css | 0 .../dist/css/bootstrap-reboot.rtl.min.css.map | 0 .../dist/css/bootstrap-utilities.css | 0 .../dist/css/bootstrap-utilities.css.map | 0 .../dist/css/bootstrap-utilities.min.css | 0 .../dist/css/bootstrap-utilities.min.css.map | 0 .../dist/css/bootstrap-utilities.rtl.css | 0 .../dist/css/bootstrap-utilities.rtl.css.map | 0 .../dist/css/bootstrap-utilities.rtl.min.css | 0 .../css/bootstrap-utilities.rtl.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.css | 0 .../lib/bootstrap/dist/css/bootstrap.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.min.css | 0 .../bootstrap/dist/css/bootstrap.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.rtl.css | 0 .../bootstrap/dist/css/bootstrap.rtl.css.map | 0 .../bootstrap/dist/css/bootstrap.rtl.min.css | 0 .../dist/css/bootstrap.rtl.min.css.map | 0 .../lib/bootstrap/dist/js/bootstrap.bundle.js | 0 .../bootstrap/dist/js/bootstrap.bundle.js.map | 0 .../bootstrap/dist/js/bootstrap.bundle.min.js | 0 .../dist/js/bootstrap.bundle.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.esm.js | 0 .../bootstrap/dist/js/bootstrap.esm.js.map | 0 .../bootstrap/dist/js/bootstrap.esm.min.js | 0 .../dist/js/bootstrap.esm.min.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.js | 0 .../lib/bootstrap/dist/js/bootstrap.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.min.js | 0 .../bootstrap/dist/js/bootstrap.min.js.map | 0 .../jquery-validation-unobtrusive/LICENSE.txt | 0 .../jquery.validate.unobtrusive.js | 0 .../jquery.validate.unobtrusive.min.js | 0 .../wwwroot/lib/jquery-validation/LICENSE.md | 0 .../dist/additional-methods.js | 0 .../dist/additional-methods.min.js | 0 .../jquery-validation/dist/jquery.validate.js | 0 .../dist/jquery.validate.min.js | 0 .../Wiki/wwwroot/lib/jquery/LICENSE.txt | 0 .../Wiki/wwwroot/lib/jquery/dist/jquery.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.map | 0 .../Session04/Session04 Notes.md | 0 .../.vs/Library/DesignTimeBuild/.dtbcache.v2 | Bin ...1d7496b4-8151-4b38-bde7-d4b09f5b8b81.vsidx | Bin ...77877600-2260-422b-990b-614c52647132.vsidx | Bin ...a41404ef-a388-4eca-b879-26c1a30e5145.vsidx | Bin ...bc9b12df-89a0-4df4-9dec-70f9d8ed2e5e.vsidx | Bin ...dd215e9e-a355-46b8-86e5-50941ef9f01e.vsidx | Bin .../MyLibrary/DesignTimeBuild/.dtbcache.v2 | Bin ...477a85fb-37bf-424c-9a31-f9d785606db2.vsidx | Bin .../Library/.vs/MyLibrary/v17/.futdcache.v2 | Bin .../Projects/Library/.vs/MyLibrary/v17/.suo | Bin .../ProjectEvaluation/library.metadata.v7.bin | Bin .../ProjectEvaluation/library.projects.v7.bin | Bin .../mylibrary.metadata.v7.bin | Bin .../mylibrary.projects.v7.bin | Bin .../Session05/Projects/Library/Address.cs | 0 .../Session05/Projects/Library/Book.cs | 0 .../Session05/Projects/Library/Bookshelf.cs | 0 .../Session05/Projects/Library/Librarian.cs | 0 .../Session05/Projects/Library/LibraryCard.cs | 0 .../Session05/Projects/Library/Member.cs | 0 .../Projects/Library/MyLibrary.csproj | 0 .../Session05/Projects/Library/MyLibrary.sln | 0 .../Session05/Projects/Library/Person.cs | 0 .../Session05/Projects/Library/Program.cs | 0 .../Session05/Projects/Library/TheLibrary.cs | 0 .../bin/Debug/net6.0/Library.deps.json | 0 .../Library/bin/Debug/net6.0/Library.dll | Bin .../Library/bin/Debug/net6.0/Library.exe | Bin .../Library/bin/Debug/net6.0/Library.pdb | Bin .../Debug/net6.0/Library.runtimeconfig.json | 0 .../bin/Debug/net6.0/MyLibrary.deps.json | 0 .../Library/bin/Debug/net6.0/MyLibrary.dll | Bin .../Library/bin/Debug/net6.0/MyLibrary.exe | Bin .../Library/bin/Debug/net6.0/MyLibrary.pdb | Bin .../Debug/net6.0/MyLibrary.runtimeconfig.json | 0 ...CoreApp,Version=v6.0.AssemblyAttributes.cs | 0 .../obj/Debug/net6.0/Library.AssemblyInfo.cs | 0 .../net6.0/Library.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../Debug/net6.0/Library.GlobalUsings.g.cs | 0 .../obj/Debug/net6.0/Library.assets.cache | Bin .../Library.csproj.BuildWithSkipAnalyzers | 0 .../Library.csproj.CoreCompileInputs.cache | 0 .../Library.csproj.FileListAbsolute.txt | 0 .../Library/obj/Debug/net6.0/Library.dll | Bin .../net6.0/Library.genruntimeconfig.cache | 0 .../Library/obj/Debug/net6.0/Library.pdb | Bin .../Debug/net6.0/MyLibrary.AssemblyInfo.cs | 0 .../net6.0/MyLibrary.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../Debug/net6.0/MyLibrary.GlobalUsings.g.cs | 0 .../obj/Debug/net6.0/MyLibrary.assets.cache | Bin .../MyLibrary.csproj.BuildWithSkipAnalyzers | 0 .../MyLibrary.csproj.CoreCompileInputs.cache | 0 .../MyLibrary.csproj.FileListAbsolute.txt | 0 .../Library/obj/Debug/net6.0/MyLibrary.dll | Bin .../net6.0/MyLibrary.genruntimeconfig.cache | 0 .../Library/obj/Debug/net6.0/MyLibrary.pdb | Bin .../Library/obj/Debug/net6.0/apphost.exe | Bin .../Library/obj/Debug/net6.0/ref/Library.dll | Bin .../obj/Debug/net6.0/ref/MyLibrary.dll | Bin .../obj/Debug/net6.0/refint/Library.dll | Bin .../obj/Debug/net6.0/refint/MyLibrary.dll | Bin .../obj/Library.csproj.nuget.dgspec.json | 0 .../Library/obj/Library.csproj.nuget.g.props | 0 .../obj/Library.csproj.nuget.g.targets | 0 .../obj/MyLibrary.csproj.nuget.dgspec.json | 0 .../obj/MyLibrary.csproj.nuget.g.props | 0 .../obj/MyLibrary.csproj.nuget.g.targets | 0 .../Projects/Library/obj/project.assets.json | 0 .../Projects/Library/obj/project.nuget.cache | 0 .../Session05/Projects/OOP/EmailSender.cs | 0 .../Session05/Projects/OOP/ISender.cs | 0 .../Session05/Projects/OOP/OOP.csproj | 0 .../Session05/Projects/OOP/Person.cs | 0 .../Session05/Projects/OOP/Program.cs | 0 .../Session05/Projects/OOP/SMSSender.cs | 0 .../Session05/Projects/OOP/User.cs | 0 .../OOP/bin/Debug/net6.0/OOP.deps.json | 0 .../Projects/OOP/bin/Debug/net6.0/OOP.dll | Bin .../Projects/OOP/bin/Debug/net6.0/OOP.exe | Bin .../Projects/OOP/bin/Debug/net6.0/OOP.pdb | Bin .../bin/Debug/net6.0/OOP.runtimeconfig.json | 0 ...CoreApp,Version=v6.0.AssemblyAttributes.cs | 0 .../OOP/obj/Debug/net6.0/OOP.AssemblyInfo.cs | 0 .../Debug/net6.0/OOP.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../obj/Debug/net6.0/OOP.GlobalUsings.g.cs | 0 .../OOP/obj/Debug/net6.0/OOP.assets.cache | Bin .../net6.0/OOP.csproj.BuildWithSkipAnalyzers | 0 .../net6.0/OOP.csproj.CoreCompileInputs.cache | 0 .../net6.0/OOP.csproj.FileListAbsolute.txt | 0 .../Projects/OOP/obj/Debug/net6.0/OOP.dll | Bin .../Debug/net6.0/OOP.genruntimeconfig.cache | 0 .../Projects/OOP/obj/Debug/net6.0/OOP.pdb | Bin .../Projects/OOP/obj/Debug/net6.0/apphost.exe | Bin .../Projects/OOP/obj/Debug/net6.0/ref/OOP.dll | Bin .../OOP/obj/Debug/net6.0/refint/OOP.dll | Bin .../OOP/obj/OOP.csproj.nuget.dgspec.json | 0 .../Projects/OOP/obj/OOP.csproj.nuget.g.props | 0 .../OOP/obj/OOP.csproj.nuget.g.targets | 0 .../Projects/OOP/obj/project.assets.json | 0 .../Projects/OOP/obj/project.nuget.cache | 0 .../Session05/Session05 Notes.md | 0 .../Session06/Session06 Notes.md | 0 ...794c0bb5-712e-4ca0-a462-b9205f93f5e5.vsidx | Bin ...ec0a0821-a410-4fd0-ad0d-393b5ba9f39b.vsidx | Bin .../Session07/Projects/.vs/Session07/v16/.suo | Bin .../Session07/Projects/.vs/Session07/v17/.suo | Bin .../Session07/v17/DocumentLayout.backup.json | 0 .../.vs/Session07/v17/DocumentLayout.json | 0 .../DesignTimeBuild/.dtbcache.v2 | Bin ...358bcc67-b3e5-4cd2-9984-3aecd4842c87.vsidx | Bin ...99aeb7ce-2563-4631-b966-40de4255c41b.vsidx | Bin ...d07aa008-5d90-4a0f-91a4-fd404b9f6842.vsidx | Bin .../.vs/DILastSession/v17/.futdcache.v2 | Bin .../DILastSession/.vs/DILastSession/v17/.suo | Bin .../v17/DocumentLayout.backup.json | 0 .../.vs/DILastSession/v17/DocumentLayout.json | 0 .../dilastsession.metadata.v9.bin | Bin .../dilastsession.projects.v9.bin | Bin .../dilastsession.strings.v9.bin | Bin .../DILastSession/DILastSession.csproj | 0 .../DILastSession/DILastSession.sln | 0 .../ExternalService/Service01.cs | 0 .../ExternalService/Service02.cs | 0 .../ExternalService/Service03.cs | 0 .../Framework/Base/BaseService.cs | 0 .../Framework/Interface/IService.cs | 0 .../DILastSession/LifeCycle/A.cs | 0 .../DILastSession/LifeCycle/B.cs | 0 .../DILastSession/LifeCycle/C.cs | 0 .../DILastSession/DILastSession/Program.cs | 0 .../bin/Debug/net8.0/DILastSession.deps.json | 0 .../bin/Debug/net8.0/DILastSession.dll | Bin .../bin/Debug/net8.0/DILastSession.exe | Bin .../bin/Debug/net8.0/DILastSession.pdb | Bin .../net8.0/DILastSession.runtimeconfig.json | 0 .../DILastSession.csproj.nuget.dgspec.json | 0 .../obj/DILastSession.csproj.nuget.g.props | 0 .../obj/DILastSession.csproj.nuget.g.targets | 0 ...CoreApp,Version=v8.0.AssemblyAttributes.cs | 0 .../net8.0/DILastSession.AssemblyInfo.cs | 0 .../DILastSession.AssemblyInfoInputs.cache | 0 ....GeneratedMSBuildEditorConfig.editorconfig | 0 .../net8.0/DILastSession.GlobalUsings.g.cs | 0 .../Debug/net8.0/DILastSession.assets.cache | Bin ...ILastSession.csproj.BuildWithSkipAnalyzers | 0 ...LastSession.csproj.CoreCompileInputs.cache | 0 .../DILastSession.csproj.FileListAbsolute.txt | 0 .../obj/Debug/net8.0/DILastSession.dll | Bin .../DILastSession.genruntimeconfig.cache | 0 .../obj/Debug/net8.0/DILastSession.pdb | Bin .../net8.0/DILastSession.sourcelink.json | 0 .../obj/Debug/net8.0/apphost.exe | Bin .../obj/Debug/net8.0/ref/DILastSession.dll | Bin .../obj/Debug/net8.0/refint/DILastSession.dll | Bin .../DILastSession/obj/project.assets.json | 0 .../DILastSession/obj/project.nuget.cache | 0 .../Projects/DILastSession/Session Notes.txt | 0 .../Session07/Projects/DIP_Solution01.rar | Bin .../Session07/Projects/DIP_Solution01.zip | Bin .../Projects/DIP_Solution01/App.config | 0 .../DIP_Solution01/DIP_Solution01.csproj | 0 .../ExternalService/Service01.cs | 0 .../ExternalService/Service02.cs | 0 .../ExternalService/Service03.cs | 0 .../Projects/DIP_Solution01/LifeCycle/A.cs | 0 .../Projects/DIP_Solution01/LifeCycle/B.cs | 0 .../Projects/DIP_Solution01/LifeCycle/C.cs | 0 .../Projects/DIP_Solution01/Program.cs | 0 .../DIP_Solution01/Properties/AssemblyInfo.cs | 0 .../bin/Debug/DIP_Solution01.exe | Bin .../bin/Debug/DIP_Solution01.exe.config | 0 .../bin/Debug/DIP_Solution01.pdb | Bin ...ework,Version=v4.7.2.AssemblyAttributes.cs | 0 ..._Solution01.csproj.AssemblyReference.cache | Bin ..._Solution01.csproj.CoreCompileInputs.cache | 0 ...DIP_Solution01.csproj.FileListAbsolute.txt | 0 .../obj/Debug/DIP_Solution01.exe | Bin .../obj/Debug/DIP_Solution01.pdb | Bin ...gnTimeResolveAssemblyReferencesInput.cache | Bin .../Projects/DIP_Solution02/App.config | 0 .../DIP_Solution02/DIP_Solution02.csproj | 0 .../ExternalService/Service01.cs | 0 .../ExternalService/Service02.cs | 0 .../ExternalService/Service03.cs | 0 .../Projects/DIP_Solution02/LifeCycle/A.cs | 0 .../Projects/DIP_Solution02/LifeCycle/B.cs | 0 .../Projects/DIP_Solution02/LifeCycle/C.cs | 0 .../Projects/DIP_Solution02/Program.cs | 0 .../DIP_Solution02/Properties/AssemblyInfo.cs | 0 .../bin/Debug/DIP_Solution02.exe | Bin .../bin/Debug/DIP_Solution02.exe.config | 0 .../bin/Debug/DIP_Solution02.pdb | Bin ...ework,Version=v4.7.2.AssemblyAttributes.cs | 0 ..._Solution02.csproj.AssemblyReference.cache | Bin ..._Solution02.csproj.CoreCompileInputs.cache | 0 ...DIP_Solution02.csproj.FileListAbsolute.txt | 0 .../obj/Debug/DIP_Solution02.exe | Bin .../obj/Debug/DIP_Solution02.pdb | Bin ...gnTimeResolveAssemblyReferencesInput.cache | Bin .../Session07/Projects/DIP_Solution03.zip | Bin .../Projects/DIP_Solution03/App.config | 0 .../DIP_Solution03/DIP_Solution03.csproj | 0 .../ExternalService/Service01.cs | 0 .../ExternalService/Service02.cs | 0 .../ExternalService/Service03.cs | 0 .../Projects/DIP_Solution03/LifeCycle/A.cs | 0 .../Projects/DIP_Solution03/LifeCycle/B.cs | 0 .../Projects/DIP_Solution03/LifeCycle/C.cs | 0 .../Projects/DIP_Solution03/Program.cs | 0 .../DIP_Solution03/Properties/AssemblyInfo.cs | 0 .../Projects/DIP_Solution03/Service.cs | 0 .../bin/Debug/DIP_Solution03.exe | Bin .../bin/Debug/DIP_Solution03.exe.config | 0 .../bin/Debug/DIP_Solution03.pdb | Bin ...ework,Version=v4.7.2.AssemblyAttributes.cs | 0 ..._Solution03.csproj.AssemblyReference.cache | Bin ..._Solution03.csproj.CoreCompileInputs.cache | 0 ...DIP_Solution03.csproj.FileListAbsolute.txt | 0 .../obj/Debug/DIP_Solution03.exe | Bin .../obj/Debug/DIP_Solution03.pdb | Bin ...gnTimeResolveAssemblyReferencesInput.cache | Bin .../Projects/DIP_Solution04/App.config | 0 .../DIP_Solution04/DIP_Solution04.csproj | 0 .../ExternalService/Service01.cs | 0 .../ExternalService/Service02.cs | 0 .../ExternalService/Service03.cs | 0 .../Framework/Base/BaseService.cs | 0 .../Framework/Interface/IService.cs | 0 .../Projects/DIP_Solution04/LifeCycle/A.cs | 0 .../Projects/DIP_Solution04/LifeCycle/B.cs | 0 .../Projects/DIP_Solution04/LifeCycle/C.cs | 0 .../Projects/DIP_Solution04/Program.cs | 0 .../DIP_Solution04/Properties/AssemblyInfo.cs | 0 .../bin/Debug/DIP_Solution04.exe | Bin .../bin/Debug/DIP_Solution04.exe.config | 0 .../bin/Debug/DIP_Solution04.pdb | Bin ...ework,Version=v4.7.2.AssemblyAttributes.cs | 0 ..._Solution04.csproj.AssemblyReference.cache | Bin ..._Solution04.csproj.CoreCompileInputs.cache | 0 ...DIP_Solution04.csproj.FileListAbsolute.txt | 0 .../obj/Debug/DIP_Solution04.exe | Bin .../obj/Debug/DIP_Solution04.pdb | Bin ...gnTimeResolveAssemblyReferencesInput.cache | Bin .../Projects/DIP_Solution05/App.config | 0 .../DIP_Solution05/DIP_Solution05.csproj | 0 .../ExternalService/Service01.cs | 0 .../ExternalService/Service02.cs | 0 .../ExternalService/Service03.cs | 0 .../Framework/Base/BaseService.cs | 0 .../Framework/Interface/IService.cs | 0 .../Projects/DIP_Solution05/LifeCycle/A.cs | 0 .../Projects/DIP_Solution05/LifeCycle/B.cs | 0 .../Projects/DIP_Solution05/LifeCycle/C.cs | 0 .../Projects/DIP_Solution05/Program.cs | 0 .../DIP_Solution05/Properties/AssemblyInfo.cs | 0 .../bin/Debug/DIP_Solution05.exe | Bin .../bin/Debug/DIP_Solution05.exe.config | 0 .../bin/Debug/DIP_Solution05.pdb | Bin ...ework,Version=v4.7.2.AssemblyAttributes.cs | 0 ..._Solution05.csproj.AssemblyReference.cache | Bin ..._Solution05.csproj.CoreCompileInputs.cache | 0 ...DIP_Solution05.csproj.FileListAbsolute.txt | 0 .../obj/Debug/DIP_Solution05.exe | Bin .../obj/Debug/DIP_Solution05.pdb | Bin ...gnTimeResolveAssemblyReferencesInput.cache | Bin .../Session07/Projects/Session07.sln | 0 .../Session07/Session07 Notes.md | 0 .../Session00/Session00 Architecture.md | 0 .../Session01/Session01 Additional Info.md | 0 .../Session01/Session01 Backend.md | 0 .../Session02/Session02 Additional Info.md | 0 .../Session02/Session02 Backend.md | 0 .../Session03/Session03 Additional Info.md | 0 .../Session03/Session03 Backend.md | 0 .../Session04/Session04 Additional Info.md | 0 .../Session04/Session04 Backend.md | 0 .../TransportationRelatedSampleData.sql | Bin .../Session05/Session05 Additional Info.md | 0 .../Session05/Session05 Backend.md | 0 .../Session05/Session05 Frontend.md | 0 .../Session06/Session06 Additional Info.md | 0 .../Session06/Session06 Frontend.md | 0 .../Session07/Session07 Additional Info.md | 0 .../Session07/Session07 Backend.md | 0 .../Session07/Session07 Frontend.md | 0 .../Session08/SeatGenerator.py | 0 .../Session08/Session08 Backend.md | 0 .../Session08/Session08 Frontend.md | 0 .../Session09/Session09 Additional Info.md | 0 .../Session09/Session09 Backend.md | 0 .../Session09/Session09 Frontend.md | 270 + .../Session10/Docker – Overview.md | 0 .../02-Project-Based}/Session10/VPS.md | 0 .../02-Project-Based}/Wrapping up.md | 0 .../docs/AlibabaERD-Version02.pdf | Bin .../docs/AlibabaERD-Version02.vsdx | Bin .../02-Project-Based}/docs/AlibabaERD.pdf | Bin .../02-Project-Based}/docs/AlibabaERD.vsdx | Bin .../Assets}/Pasted image 20241021170855.png | Bin .../Assets}/Pasted image 20241022113251.png | Bin .../Assets}/Pasted image 20241022115013.png | Bin .../Assets}/Pasted image 20241022131756.png | Bin .../Assets}/Pasted image 20241105101014.png | Bin .../Assets}/Pasted image 20241105111022.png | Bin .../Assets}/Pasted image 20241105111037.png | Bin .../Assets}/Pasted image 20241121120517.png | Bin .../Assets}/Pasted image 20241203000244.png | Bin .../Assets}/Pasted image 20250212171204.png | Bin .../Assets}/Pasted image 20250212184706.png | Bin .../Assets}/Pasted image 20250306182113.png | Bin .../Assets}/Pasted image 20250306182209.png | Bin .../Assets}/Pasted image 20250306182246.png | Bin .../Assets}/Pasted image 20250306182313.png | Bin .../Assets}/Pasted image 20250306182324.png | Bin .../Assets}/Pasted image 20250427152717.png | Bin .../Assets}/Pasted image 20250427154917.png | Bin .../Assets}/Pasted image 20250706234844.png | Bin .../Assets}/photo_2024-11-21_12-09-39.jpg | Bin content/Folder-Strucutre.md | 7 + .../Introductory Session Template.md | 0 .../Project-Based Session Template.md | 0 content/index.md | 122 + globals.d.ts | 17 + index.d.ts | 15 + package-lock.json | 7145 ++++++++++++++++ package.json | 115 + quartz.config.ts | 97 + quartz.layout.ts | 68 + quartz/bootstrap-cli.mjs | 41 + quartz/bootstrap-worker.mjs | 8 + quartz/build.ts | 302 + quartz/cfg.ts | 92 + quartz/cli/args.js | 108 + quartz/cli/constants.js | 15 + quartz/cli/handlers.js | 620 ++ quartz/cli/helpers.js | 54 + quartz/components/ArticleTitle.tsx | 19 + quartz/components/Backlinks.tsx | 55 + quartz/components/Body.tsx | 13 + quartz/components/Breadcrumbs.tsx | 93 + quartz/components/Comments.tsx | 62 + quartz/components/ConditionalRender.tsx | 22 + quartz/components/ContentMeta.tsx | 58 + quartz/components/Darkmode.tsx | 48 + quartz/components/Date.tsx | 31 + quartz/components/DesktopOnly.tsx | 14 + quartz/components/Explorer.tsx | 162 + quartz/components/Flex.tsx | 59 + quartz/components/Footer.tsx | 33 + quartz/components/Graph.tsx | 109 + quartz/components/Head.tsx | 105 + quartz/components/Header.tsx | 22 + quartz/components/MobileOnly.tsx | 14 + quartz/components/OverflowList.tsx | 48 + quartz/components/PageList.tsx | 114 + quartz/components/PageTitle.tsx | 24 + quartz/components/ReaderMode.tsx | 38 + quartz/components/RecentNotes.tsx | 93 + quartz/components/Search.tsx | 53 + quartz/components/Spacer.tsx | 8 + quartz/components/TableOfContents.tsx | 96 + quartz/components/TagList.tsx | 56 + quartz/components/index.ts | 53 + quartz/components/pages/404.tsx | 18 + quartz/components/pages/Content.tsx | 12 + quartz/components/pages/FolderContent.tsx | 126 + quartz/components/pages/TagContent.tsx | 133 + quartz/components/renderPage.tsx | 274 + quartz/components/scripts/callout.inline.ts | 27 + quartz/components/scripts/checkbox.inline.ts | 23 + quartz/components/scripts/clipboard.inline.ts | 37 + quartz/components/scripts/comments.inline.ts | 92 + quartz/components/scripts/darkmode.inline.ts | 37 + quartz/components/scripts/explorer.inline.ts | 301 + quartz/components/scripts/graph.inline.ts | 674 ++ quartz/components/scripts/mermaid.inline.ts | 258 + quartz/components/scripts/popover.inline.ts | 133 + .../components/scripts/readermode.inline.ts | 25 + quartz/components/scripts/search.inline.ts | 496 ++ quartz/components/scripts/spa.inline.ts | 214 + quartz/components/scripts/toc.inline.ts | 44 + quartz/components/scripts/util.ts | 46 + quartz/components/styles/backlinks.scss | 24 + quartz/components/styles/breadcrumbs.scss | 22 + quartz/components/styles/clipboard.scss | 36 + quartz/components/styles/contentMeta.scss | 14 + quartz/components/styles/darkmode.scss | 47 + quartz/components/styles/explorer.scss | 270 + quartz/components/styles/footer.scss | 15 + quartz/components/styles/graph.scss | 73 + quartz/components/styles/legacyToc.scss | 27 + quartz/components/styles/listPage.scss | 40 + quartz/components/styles/mermaid.inline.scss | 133 + quartz/components/styles/popover.scss | 89 + quartz/components/styles/readermode.scss | 34 + quartz/components/styles/recentNotes.scss | 24 + quartz/components/styles/search.scss | 242 + quartz/components/styles/toc.scss | 66 + quartz/components/types.ts | 29 + quartz/i18n/index.ts | 86 + quartz/i18n/locales/ar-SA.ts | 92 + quartz/i18n/locales/ca-ES.ts | 87 + quartz/i18n/locales/cs-CZ.ts | 87 + quartz/i18n/locales/de-DE.ts | 87 + quartz/i18n/locales/definition.ts | 87 + quartz/i18n/locales/en-GB.ts | 87 + quartz/i18n/locales/en-US.ts | 87 + quartz/i18n/locales/es-ES.ts | 87 + quartz/i18n/locales/fa-IR.ts | 87 + quartz/i18n/locales/fi-FI.ts | 87 + quartz/i18n/locales/fr-FR.ts | 87 + quartz/i18n/locales/hu-HU.ts | 85 + quartz/i18n/locales/id-ID.ts | 87 + quartz/i18n/locales/it-IT.ts | 87 + quartz/i18n/locales/ja-JP.ts | 85 + quartz/i18n/locales/ko-KR.ts | 85 + quartz/i18n/locales/lt-LT.ts | 107 + quartz/i18n/locales/nb-NO.ts | 87 + quartz/i18n/locales/nl-NL.ts | 89 + quartz/i18n/locales/pl-PL.ts | 87 + quartz/i18n/locales/pt-BR.ts | 87 + quartz/i18n/locales/ro-RO.ts | 88 + quartz/i18n/locales/ru-RU.ts | 99 + quartz/i18n/locales/th-TH.ts | 85 + quartz/i18n/locales/tr-TR.ts | 87 + quartz/i18n/locales/uk-UA.ts | 87 + quartz/i18n/locales/vi-VN.ts | 87 + quartz/i18n/locales/zh-CN.ts | 85 + quartz/i18n/locales/zh-TW.ts | 85 + quartz/plugins/emitters/404.tsx | 63 + quartz/plugins/emitters/aliases.ts | 55 + quartz/plugins/emitters/assets.ts | 52 + quartz/plugins/emitters/cname.ts | 29 + quartz/plugins/emitters/componentResources.ts | 323 + quartz/plugins/emitters/contentIndex.tsx | 174 + quartz/plugins/emitters/contentPage.tsx | 121 + quartz/plugins/emitters/favicon.ts | 22 + quartz/plugins/emitters/folderPage.tsx | 170 + quartz/plugins/emitters/helpers.ts | 20 + quartz/plugins/emitters/index.ts | 12 + quartz/plugins/emitters/ogImage.tsx | 182 + quartz/plugins/emitters/static.ts | 23 + quartz/plugins/emitters/tagPage.tsx | 170 + quartz/plugins/filters/draft.ts | 10 + quartz/plugins/filters/explicit.ts | 8 + quartz/plugins/filters/index.ts | 2 + quartz/plugins/index.ts | 56 + quartz/plugins/transformers/citations.ts | 54 + quartz/plugins/transformers/description.ts | 90 + quartz/plugins/transformers/frontmatter.ts | 156 + quartz/plugins/transformers/gfm.ts | 78 + quartz/plugins/transformers/index.ts | 13 + quartz/plugins/transformers/lastmod.ts | 115 + quartz/plugins/transformers/latex.ts | 65 + quartz/plugins/transformers/linebreaks.ts | 11 + quartz/plugins/transformers/links.ts | 172 + quartz/plugins/transformers/ofm.ts | 802 ++ quartz/plugins/transformers/oxhugofm.ts | 106 + quartz/plugins/transformers/roam.ts | 211 + quartz/plugins/transformers/syntax.ts | 31 + quartz/plugins/transformers/toc.ts | 73 + quartz/plugins/types.ts | 65 + quartz/plugins/vfile.ts | 14 + quartz/processors/emit.ts | 50 + quartz/processors/filter.ts | 24 + quartz/processors/parse.ts | 222 + quartz/static/giscus/dark.css | 99 + quartz/static/giscus/light.css | 99 + quartz/static/icon.png | Bin 0 -> 17368 bytes quartz/static/og-image.png | Bin 0 -> 39281 bytes quartz/styles/base.scss | 643 ++ quartz/styles/callouts.scss | 170 + quartz/styles/custom.scss | 3 + quartz/styles/syntax.scss | 17 + quartz/styles/variables.scss | 58 + quartz/util/clone.ts | 3 + quartz/util/ctx.ts | 50 + quartz/util/emoji.ts | 47 + quartz/util/emojimap.json | 7568 +++++++++++++++++ quartz/util/escape.ts | 17 + quartz/util/fileTrie.test.ts | 415 + quartz/util/fileTrie.ts | 170 + quartz/util/glob.ts | 22 + quartz/util/jsx.tsx | 27 + quartz/util/lang.ts | 13 + quartz/util/log.ts | 58 + quartz/util/og.tsx | 378 + quartz/util/path.test.ts | 363 + quartz/util/path.ts | 318 + quartz/util/perf.ts | 19 + quartz/util/random.ts | 3 + quartz/util/resources.tsx | 74 + quartz/util/sourcemap.ts | 18 + quartz/util/theme.ts | 176 + quartz/util/trace.ts | 43 + quartz/worker.ts | 37 + tsconfig.json | 22 + 1533 files changed, 32177 insertions(+), 127 deletions(-) create mode 100644 .gitattributes create mode 100644 .node-version create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc delete mode 100644 01-Introductory-Sessions/Session03/Projects/Views/wwwroot/css/CSS/.DS_Store delete mode 100644 01-Introductory-Sessions/Session03/Projects/Views/wwwroot/images/.DS_Store delete mode 100644 01-Introductory-Sessions/Session03/Projects/Views/wwwroot/js/JS/.DS_Store delete mode 100644 02-Project-Based/Session09/Session09 Frontend.md delete mode 100644 Folder-Strucutre.md rename index.md => README.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Roadmap/Roadmap.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Roadmap/Roadmap.pdf (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/Logo-01-04.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/Logo-02-Test-02.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/Notes.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/episode-one.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/episode-three.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/episode-two.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/episode-zero.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/index.html (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/podcast-cover.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/styles.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/BasicWebsite/w.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/C01_CommentAPI/DesignTimeBuild/.dtbcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/C01_CommentAPI/FileContentIndex/3339d571-cd80-47be-846d-a5f1fb1ffa14.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/C01_CommentAPI/FileContentIndex/6bc4c5e5-b6ba-4acd-abab-a7b2e0aa4b7d.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/C01_CommentAPI/FileContentIndex/91fff91a-9767-4135-9b11-e852ed59896f.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/C01_CommentAPI/FileContentIndex/9319121f-7555-4081-9832-09846735bb02.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/C01_CommentAPI/FileContentIndex/ba86fa9c-c1c8-432d-ac6a-6a2034e1500c.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/C01_CommentAPI/config/applicationhost.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/C01_CommentAPI/v17/.futdcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/C01_CommentAPI/v17/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/ProjectEvaluation/c01_commentapi.metadata.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/.vs/ProjectEvaluation/c01_commentapi.projects.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/C01_CommentAPI.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/C01_CommentAPI.csproj.user (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/C01_CommentAPI.sln (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/Controllers/EpisodeController.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/Episode.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/Properties/launchSettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/C01_CommentAPI.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/C01_CommentAPI.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/C01_CommentAPI.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/C01_CommentAPI.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/C01_CommentAPI.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/Microsoft.OpenApi.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/Swashbuckle.AspNetCore.Swagger.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/bin/Debug/net6.0/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/C01_CommentAPI.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/C01_CommentAPI.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/C01_CommentAPI.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.MvcApplicationPartsAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.MvcApplicationPartsAssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.csproj.AssemblyReference.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.csproj.CopyComplete (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/C01_CommentAPI.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/apphost.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/ref/C01_CommentAPI.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/refint/C01_CommentAPI.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/staticwebassets.build.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/staticwebassets/msbuild.build.C01_CommentAPI.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/staticwebassets/msbuild.buildMultiTargeting.C01_CommentAPI.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/Debug/net6.0/staticwebassets/msbuild.buildTransitive.C01_CommentAPI.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/project.assets.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/CommentAPI/obj/project.nuget.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/C01_ThePodcastWebsite/DesignTimeBuild/.dtbcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/C01_ThePodcastWebsite/FileContentIndex/182ab6a2-0364-4479-b891-e363a0e98742.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/C01_ThePodcastWebsite/FileContentIndex/2a1c4aa9-b595-46f2-ac4c-6c1e1556a462.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/C01_ThePodcastWebsite/FileContentIndex/47ae3b1e-0045-4de5-8eeb-1111cda92b0f.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/C01_ThePodcastWebsite/FileContentIndex/549a1b81-7342-4e0e-a139-066badd8650f.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/C01_ThePodcastWebsite/FileContentIndex/6e85fa36-99c2-4ec8-bc36-fbfea0fde3eb.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/C01_ThePodcastWebsite/config/applicationhost.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/C01_ThePodcastWebsite/v17/.futdcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/C01_ThePodcastWebsite/v17/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/ProjectEvaluation/c01_thepodcastwebsite.metadata.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/.vs/ProjectEvaluation/c01_thepodcastwebsite.projects.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/C01_ThePodcastWebsite.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/C01_ThePodcastWebsite.csproj.user (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/C01_ThePodcastWebsite.sln (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Controllers/HomeController.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Models/Episode.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Models/ErrorViewModel.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Properties/launchSettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Views/Home/Index.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Views/Home/Privacy.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Views/Shared/Error.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Views/Shared/_Layout.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Views/Shared/_Layout.cshtml.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Views/Shared/_ValidationScriptsPartial.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Views/_ViewImports.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/Views/_ViewStart.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/bin/Debug/net6.0/C01_ThePodcastWebsite.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/bin/Debug/net6.0/C01_ThePodcastWebsite.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/bin/Debug/net6.0/C01_ThePodcastWebsite.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/bin/Debug/net6.0/C01_ThePodcastWebsite.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/bin/Debug/net6.0/C01_ThePodcastWebsite.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/bin/Debug/net6.0/C01_ThePodcastWebsite.staticwebassets.runtime.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/bin/Debug/net6.0/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/bin/Debug/net6.0/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/C01_ThePodcastWebsite.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/C01_ThePodcastWebsite.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/C01_ThePodcastWebsite.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.MvcApplicationPartsAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.RazorAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.RazorAssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/C01_ThePodcastWebsite.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/apphost.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/project.razor.vs.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/ref/C01_ThePodcastWebsite.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/refint/C01_ThePodcastWebsite.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/scopedcss/Views/Shared/_Layout.cshtml.rz.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/scopedcss/bundle/C01_ThePodcastWebsite.styles.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/scopedcss/projectbundle/C01_ThePodcastWebsite.bundle.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/staticwebassets.build.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/staticwebassets.development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/staticwebassets.pack.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/staticwebassets/msbuild.C01_ThePodcastWebsite.Microsoft.AspNetCore.StaticWebAssets.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/staticwebassets/msbuild.build.C01_ThePodcastWebsite.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/staticwebassets/msbuild.buildMultiTargeting.C01_ThePodcastWebsite.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/Debug/net6.0/staticwebassets/msbuild.buildTransitive.C01_ThePodcastWebsite.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/project.assets.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/obj/project.nuget.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/Logo-01-04.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/Logo-02-Test-02.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/css/site.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/css/styles.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/episode-one.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/episode-three.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/episode-two.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/episode-zero.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/favicon.ico (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/js/site.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/LICENSE (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery-validation/LICENSE.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery-validation/dist/additional-methods.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery-validation/dist/additional-methods.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery-validation/dist/jquery.validate.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery/dist/jquery.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery/dist/jquery.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/lib/jquery/dist/jquery.min.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/podcast-cover.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Projects/ThePodcastWebsite/wwwroot/w.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session00/Session00 Notes.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Practices/01MiniProject.mp4 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Assets/images/dobby.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Assets/images/draco_malfoy.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Assets/images/dumbledore.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Assets/images/ginny_weasley.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Assets/images/harry_potter.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Assets/images/hermione_granger.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Assets/images/hogwarts.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Assets/images/luna_lovegood.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Assets/images/rebeus_hagrid.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Assets/images/ron_weasley.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/C02_RoutingBasics/DesignTimeBuild/.dtbcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/C02_RoutingBasics/FileContentIndex/267d5e36-b421-4386-9e91-f380b4d26822.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/C02_RoutingBasics/FileContentIndex/5adee877-533a-442c-a0e4-b92277d97ca7.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/C02_RoutingBasics/FileContentIndex/70b4abf3-83bc-4936-afb8-3bcbf2c7fc68.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/C02_RoutingBasics/FileContentIndex/c2d554cc-2516-4f4b-8c28-6556b947721c.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/C02_RoutingBasics/FileContentIndex/d1faab84-7741-4928-9599-457e4e0b11af.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/C02_RoutingBasics/config/applicationhost.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/C02_RoutingBasics/v17/.futdcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/C02_RoutingBasics/v17/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/ProjectEvaluation/c02_routingbasics.metadata.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/.vs/ProjectEvaluation/c02_routingbasics.projects.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/C02_RoutingBasics.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/C02_RoutingBasics.csproj.user (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/C02_RoutingBasics.sln (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Controllers/GalleryController.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Controllers/HomeController.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Models/ErrorViewModel.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Properties/launchSettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Views/Gallery/Main.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Views/Home/Index.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Views/Home/Privacy.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Views/Shared/Error.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Views/Shared/_Layout.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Views/Shared/_Layout.cshtml.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Views/Shared/_ValidationScriptsPartial.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Views/_ViewImports.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/Views/_ViewStart.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/bin/Debug/net6.0/C02_RoutingBasics.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/bin/Debug/net6.0/C02_RoutingBasics.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/bin/Debug/net6.0/C02_RoutingBasics.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/bin/Debug/net6.0/C02_RoutingBasics.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/bin/Debug/net6.0/C02_RoutingBasics.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/bin/Debug/net6.0/C02_RoutingBasics.staticwebassets.runtime.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/bin/Debug/net6.0/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/bin/Debug/net6.0/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/C02_RoutingBasics.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/C02_RoutingBasics.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/C02_RoutingBasics.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.MvcApplicationPartsAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.RazorAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.RazorAssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/C02_RoutingBasics.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/apphost.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/project.razor.vs.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/ref/C02_RoutingBasics.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/refint/C02_RoutingBasics.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/scopedcss/Views/Shared/_Layout.cshtml.rz.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/scopedcss/bundle/C02_RoutingBasics.styles.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/scopedcss/projectbundle/C02_RoutingBasics.bundle.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/staticwebassets.build.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/staticwebassets.development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/staticwebassets.pack.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/staticwebassets/msbuild.C02_RoutingBasics.Microsoft.AspNetCore.StaticWebAssets.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/staticwebassets/msbuild.build.C02_RoutingBasics.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/staticwebassets/msbuild.buildMultiTargeting.C02_RoutingBasics.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/Debug/net6.0/staticwebassets/msbuild.buildTransitive.C02_RoutingBasics.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/project.assets.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/obj/project.nuget.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/css/site.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/favicon.ico (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/js/site.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/LICENSE (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery-validation/LICENSE.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery-validation/dist/additional-methods.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery-validation/dist/additional-methods.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery-validation/dist/jquery.validate.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery/dist/jquery.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery/dist/jquery.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/RoutingBasics/wwwroot/lib/jquery/dist/jquery.min.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/ProjectEvaluation/wiki.metadata.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/ProjectEvaluation/wiki.projects.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/Wiki/DesignTimeBuild/.dtbcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/Wiki/FileContentIndex/20ffcd25-1ea7-409a-9dff-2176b545267d.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/Wiki/FileContentIndex/385817dd-78a7-4567-9242-5ec199e81d98.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/Wiki/FileContentIndex/58ee53b5-65fd-4a7f-85de-1e881a5555cc.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/Wiki/FileContentIndex/a5b82f0c-da34-4aa6-9024-3de210707e3e.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/Wiki/FileContentIndex/cb97e310-7992-428b-b8b8-b17d098164b7.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/Wiki/config/applicationhost.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/Wiki/v17/.futdcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/.vs/Wiki/v17/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Controllers/HomeController.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Models/Character.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Models/ErrorViewModel.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Models/Person.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Properties/launchSettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Views/Home/Index.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Views/Home/Person.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Views/Home/Person2.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Views/Home/Privacy.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Views/Shared/Error.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Views/Shared/_Layout.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Views/Shared/_Layout.cshtml.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Views/Shared/_ValidationScriptsPartial.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Views/_ViewImports.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Views/_ViewStart.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Wiki.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Wiki.csproj.user (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/Wiki.sln (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/Microsoft.AspNetCore.Authentication.Negotiate.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/Microsoft.AspNetCore.Connections.Abstractions.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/Microsoft.Extensions.Features.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/System.IO.Pipelines.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/Wiki.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/Wiki.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/Wiki.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/Wiki.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/Wiki.staticwebassets.runtime.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/runtimes/linux/lib/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/runtimes/osx/lib/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/bin/Debug/net6.0/runtimes/win/lib/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.MvcApplicationPartsAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.RazorAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.RazorAssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.AssemblyReference.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.CopyComplete (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/Wiki.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/apphost.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/project.razor.vs.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/ref/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/refint/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/scopedcss/Views/Shared/_Layout.cshtml.rz.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/scopedcss/bundle/Wiki.styles.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/scopedcss/projectbundle/Wiki.bundle.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/staticwebassets.build.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/staticwebassets.development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/staticwebassets.pack.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.Wiki.Microsoft.AspNetCore.StaticWebAssets.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.build.Wiki.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.buildMultiTargeting.Wiki.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.buildTransitive.Wiki.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Wiki.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Wiki.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/Wiki.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/project.assets.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/obj/project.nuget.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/css/Sample1.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/css/Sample1.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/css/site.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/favicon.ico (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/img/dobby.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/img/draco_malfoy.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/img/dumbledore.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/img/ginny_weasley.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/img/harry_potter.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/img/hermione_granger.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/img/hogwarts.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/img/luna_lovegood.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/img/rebeus_hagrid.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/img/ron_weasley.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/js/site.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/LICENSE (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery-validation/LICENSE.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery-validation/dist/additional-methods.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery-validation/dist/additional-methods.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery-validation/dist/jquery.validate.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery/dist/jquery.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery/dist/jquery.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Projects/Wiki/wwwroot/lib/jquery/dist/jquery.min.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session01/Session01 Notes.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Practices/Practice.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/ProjectEvaluation/wiki.metadata.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/ProjectEvaluation/wiki.projects.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/Wiki/DesignTimeBuild/.dtbcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/Wiki/FileContentIndex/0605e4e6-12fb-4b45-971e-32d6b411d53e.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/Wiki/FileContentIndex/25ba1b3e-1699-41c4-9182-62da94ecd2ca.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/Wiki/FileContentIndex/b8cc14eb-f8bb-47c9-8b9e-95a0899e10eb.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/Wiki/FileContentIndex/de108f16-cd1a-4df5-b65c-a15fce0e8c37.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/Wiki/FileContentIndex/ed28d41f-bfa8-44a4-ac43-786ec64b91dd.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/Wiki/config/applicationhost.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/Wiki/v17/.futdcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/.vs/Wiki/v17/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Controllers/HomeController.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Models/Character.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Models/ErrorViewModel.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Models/Person.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Properties/launchSettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Views/Home/Index.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Views/Home/Person.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Views/Home/Person2.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Views/Home/Privacy.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Views/Shared/Error.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Views/Shared/_Layout.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Views/Shared/_Layout.cshtml.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Views/Shared/_ValidationScriptsPartial.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Views/_ViewImports.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Views/_ViewStart.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Wiki.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Wiki.csproj.user (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/Wiki.sln (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/Microsoft.AspNetCore.Authentication.Negotiate.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/Microsoft.AspNetCore.Connections.Abstractions.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/Microsoft.Extensions.Features.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/System.IO.Pipelines.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/Wiki.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/Wiki.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/Wiki.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/Wiki.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/Wiki.staticwebassets.runtime.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/runtimes/linux/lib/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/runtimes/osx/lib/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/bin/Debug/net6.0/runtimes/win/lib/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.MvcApplicationPartsAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.RazorAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.RazorAssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.AssemblyReference.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.CopyComplete (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/Wiki.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/apphost.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/project.razor.vs.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/ref/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/refint/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/scopedcss/Views/Shared/_Layout.cshtml.rz.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/scopedcss/bundle/Wiki.styles.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/scopedcss/projectbundle/Wiki.bundle.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/staticwebassets.build.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/staticwebassets.development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/staticwebassets.pack.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.Wiki.Microsoft.AspNetCore.StaticWebAssets.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.build.Wiki.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.buildMultiTargeting.Wiki.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.buildTransitive.Wiki.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Wiki.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Wiki.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/Wiki.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/project.assets.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/obj/project.nuget.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/css/Sample1.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/css/Sample1.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/css/site.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/favicon.ico (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/img/dobby.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/img/draco_malfoy.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/img/dumbledore.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/img/ginny_weasley.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/img/harry_potter.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/img/hermione_granger.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/img/hogwarts.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/img/luna_lovegood.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/img/rebeus_hagrid.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/img/ron_weasley.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/js/site.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/LICENSE (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery-validation/LICENSE.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery-validation/dist/additional-methods.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery-validation/dist/additional-methods.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery-validation/dist/jquery.validate.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery/dist/jquery.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery/dist/jquery.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Projects/Wiki/wwwroot/lib/jquery/dist/jquery.min.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session02/Session02 Notes.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Practices/Practice.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/ProjectEvaluation/views.metadata.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/ProjectEvaluation/views.projects.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/Views/DesignTimeBuild/.dtbcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/Views/FileContentIndex/1dc6a65e-cb63-4028-9f0b-ee694efec8fa.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/Views/FileContentIndex/5b2bb6d0-7449-46d1-b504-238dbf484e48.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/Views/FileContentIndex/706955e6-a588-4f2f-90b5-14aa554e1d8e.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/Views/FileContentIndex/75bb4db1-15e1-4c20-aceb-f58f88b17922.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/Views/FileContentIndex/963f1fbf-154d-44e8-858f-5989a4fa3fd0.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/Views/config/applicationhost.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/Views/v17/.futdcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/.vs/Views/v17/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Controllers/HomeController.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Controllers/MicroController.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Models/ErrorViewModel.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Properties/launchSettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views.csproj.user (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views.sln (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views/Home/Index.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views/Home/Privacy.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views/Micro/Index.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views/Shared/Error.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views/Shared/Index2.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views/Shared/_Layout.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views/Shared/_Layout.cshtml.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views/Shared/_ValidationScriptsPartial.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views/_ViewImports.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/Views/_ViewStart.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/bin/Debug/net6.0/Views.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/bin/Debug/net6.0/Views.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/bin/Debug/net6.0/Views.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/bin/Debug/net6.0/Views.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/bin/Debug/net6.0/Views.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/bin/Debug/net6.0/Views.staticwebassets.runtime.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/bin/Debug/net6.0/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/bin/Debug/net6.0/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.MvcApplicationPartsAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.RazorAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.RazorAssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/Views.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/apphost.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/project.razor.vs.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/ref/Views.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/refint/Views.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/scopedcss/Views/Shared/_Layout.cshtml.rz.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/scopedcss/bundle/Views.styles.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/scopedcss/projectbundle/Views.bundle.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/staticwebassets.build.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/staticwebassets.development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/staticwebassets.pack.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/staticwebassets/msbuild.Views.Microsoft.AspNetCore.StaticWebAssets.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/staticwebassets/msbuild.build.Views.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/staticwebassets/msbuild.buildMultiTargeting.Views.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Debug/net6.0/staticwebassets/msbuild.buildTransitive.Views.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Views.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Views.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/Views.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/project.assets.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/obj/project.nuget.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap-grid.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap-grid.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap-grid.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap-grid.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap-reboot.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap-reboot.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap-reboot.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap-reboot.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/bootstrap.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/font-awesome.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/jquery.mCustomScrollbar.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/meanmenu.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/owl.carousel.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/owl.carousel.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/owl.theme.default.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/owl.theme.default.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/owl.theme.green.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/owl.theme.green.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/responsive.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/CSS/style.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/css/site.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/favicon.ico (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/about_img.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/banner.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/banner2.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/bbnner.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/footer.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/icon.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/icon_right.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/loading.gif (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/logo.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/menu_btn.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/mics_img1.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/mics_img2.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/mics_img3.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/mics_img4.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/mics_img5.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/mics_img6.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/right_side.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/service1.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/service2.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/service3.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/images/test.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/bootstrap.bundle.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/bootstrap.bundle.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/bootstrap.bundle.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/bootstrap.bundle.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/bootstrap.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/bootstrap.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/bootstrap.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/bootstrap.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/custom.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/jquery-3.0.0.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/jquery.mCustomScrollbar.concat.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/jquery.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/owl.carousel.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/owl.carousel.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/JS/popper.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/js/site.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/LICENSE (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery-validation/LICENSE.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery-validation/dist/additional-methods.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery-validation/dist/additional-methods.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery-validation/dist/jquery.validate.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery/dist/jquery.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery/dist/jquery.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Projects/Views/wwwroot/lib/jquery/dist/jquery.min.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session03/Session03 Notes.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/ProjectEvaluation/wiki.metadata.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/ProjectEvaluation/wiki.projects.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/Wiki/DesignTimeBuild/.dtbcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/Wiki/FileContentIndex/0605e4e6-12fb-4b45-971e-32d6b411d53e.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/Wiki/FileContentIndex/25ba1b3e-1699-41c4-9182-62da94ecd2ca.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/Wiki/FileContentIndex/83c5c398-3324-4619-b37c-94f19f5456d5.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/Wiki/FileContentIndex/8deb53db-2d41-4ac5-8657-d5d77e4fc1fa.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/Wiki/FileContentIndex/b8cc14eb-f8bb-47c9-8b9e-95a0899e10eb.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/Wiki/config/applicationhost.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/Wiki/v17/.futdcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/.vs/Wiki/v17/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Controllers/HomeController.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Models/Character.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Models/ErrorViewModel.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Models/Person.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Properties/launchSettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Views/Home/Index.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Views/Home/Person.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Views/Home/Person2.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Views/Home/Privacy.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Views/Shared/Error.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Views/Shared/_Layout.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Views/Shared/_Layout.cshtml.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Views/Shared/_ValidationScriptsPartial.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Views/_ViewImports.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Views/_ViewStart.cshtml (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Wiki.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Wiki.csproj.user (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/Wiki.sln (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/Microsoft.AspNetCore.Authentication.Negotiate.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/Microsoft.AspNetCore.Connections.Abstractions.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/Microsoft.Extensions.Features.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/System.IO.Pipelines.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/Wiki.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/Wiki.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/Wiki.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/Wiki.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/Wiki.staticwebassets.runtime.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/appsettings.Development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/appsettings.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/runtimes/linux/lib/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/runtimes/osx/lib/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/bin/Debug/net6.0/runtimes/win/lib/net6.0/System.DirectoryServices.Protocols.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.MvcApplicationPartsAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.RazorAssemblyInfo.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.RazorAssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.AssemblyReference.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.CopyComplete (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/Wiki.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/apphost.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/project.razor.vs.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/ref/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/refint/Wiki.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/scopedcss/Views/Shared/_Layout.cshtml.rz.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/scopedcss/bundle/Wiki.styles.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/scopedcss/projectbundle/Wiki.bundle.scp.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/staticwebassets.build.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/staticwebassets.development.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/staticwebassets.pack.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.Wiki.Microsoft.AspNetCore.StaticWebAssets.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.build.Wiki.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.buildMultiTargeting.Wiki.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Debug/net6.0/staticwebassets/msbuild.buildTransitive.Wiki.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Wiki.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Wiki.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/Wiki.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/project.assets.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/obj/project.nuget.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/css/Sample1.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/css/Sample1.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/css/site.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/favicon.ico (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/img/dobby.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/img/draco_malfoy.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/img/dumbledore.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/img/ginny_weasley.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/img/harry_potter.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/img/hermione_granger.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/img/hogwarts.jpg (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/img/luna_lovegood.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/img/rebeus_hagrid.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/img/ron_weasley.png (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/js/site.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/LICENSE (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery-validation/LICENSE.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery-validation/dist/additional-methods.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery-validation/dist/additional-methods.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery-validation/dist/jquery.validate.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery/LICENSE.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery/dist/jquery.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery/dist/jquery.min.js (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Projects/Wiki/wwwroot/lib/jquery/dist/jquery.min.map (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session04/Session04 Notes.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/Library/DesignTimeBuild/.dtbcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/Library/FileContentIndex/1d7496b4-8151-4b38-bde7-d4b09f5b8b81.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/Library/FileContentIndex/77877600-2260-422b-990b-614c52647132.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/Library/FileContentIndex/a41404ef-a388-4eca-b879-26c1a30e5145.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/Library/FileContentIndex/bc9b12df-89a0-4df4-9dec-70f9d8ed2e5e.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/Library/FileContentIndex/dd215e9e-a355-46b8-86e5-50941ef9f01e.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/MyLibrary/DesignTimeBuild/.dtbcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/MyLibrary/FileContentIndex/477a85fb-37bf-424c-9a31-f9d785606db2.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/MyLibrary/v17/.futdcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/MyLibrary/v17/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/ProjectEvaluation/library.metadata.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/ProjectEvaluation/library.projects.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/ProjectEvaluation/mylibrary.metadata.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/.vs/ProjectEvaluation/mylibrary.projects.v7.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/Address.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/Book.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/Bookshelf.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/Librarian.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/LibraryCard.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/Member.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/MyLibrary.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/MyLibrary.sln (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/Person.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/TheLibrary.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/bin/Debug/net6.0/Library.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/bin/Debug/net6.0/Library.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/bin/Debug/net6.0/Library.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/bin/Debug/net6.0/Library.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/bin/Debug/net6.0/Library.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/bin/Debug/net6.0/MyLibrary.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/bin/Debug/net6.0/MyLibrary.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/bin/Debug/net6.0/MyLibrary.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/bin/Debug/net6.0/MyLibrary.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/bin/Debug/net6.0/MyLibrary.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/Library.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/MyLibrary.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/apphost.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/ref/Library.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/ref/MyLibrary.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/refint/Library.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Debug/net6.0/refint/MyLibrary.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Library.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Library.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/Library.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/MyLibrary.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/MyLibrary.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/MyLibrary.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/project.assets.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/Library/obj/project.nuget.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/EmailSender.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/ISender.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/OOP.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/Person.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/SMSSender.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/User.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/bin/Debug/net6.0/OOP.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/bin/Debug/net6.0/OOP.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/bin/Debug/net6.0/OOP.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/bin/Debug/net6.0/OOP.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/bin/Debug/net6.0/OOP.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/OOP.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/apphost.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/ref/OOP.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/Debug/net6.0/refint/OOP.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/OOP.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/OOP.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/OOP.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/project.assets.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Projects/OOP/obj/project.nuget.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session05/Session05 Notes.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session06/Session06 Notes.md (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/.vs/Session07/FileContentIndex/794c0bb5-712e-4ca0-a462-b9205f93f5e5.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/.vs/Session07/FileContentIndex/ec0a0821-a410-4fd0-ad0d-393b5ba9f39b.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/.vs/Session07/v16/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/.vs/Session07/v17/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/.vs/Session07/v17/DocumentLayout.backup.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/.vs/Session07/v17/DocumentLayout.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/DILastSession/DesignTimeBuild/.dtbcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/DILastSession/FileContentIndex/358bcc67-b3e5-4cd2-9984-3aecd4842c87.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/DILastSession/FileContentIndex/99aeb7ce-2563-4631-b966-40de4255c41b.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/DILastSession/FileContentIndex/d07aa008-5d90-4a0f-91a4-fd404b9f6842.vsidx (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/DILastSession/v17/.futdcache.v2 (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/DILastSession/v17/.suo (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/DILastSession/v17/DocumentLayout.backup.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/DILastSession/v17/DocumentLayout.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/ProjectEvaluation/dilastsession.metadata.v9.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/ProjectEvaluation/dilastsession.projects.v9.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/.vs/ProjectEvaluation/dilastsession.strings.v9.bin (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/DILastSession.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/DILastSession.sln (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/ExternalService/Service01.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/ExternalService/Service02.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/ExternalService/Service03.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/Framework/Base/BaseService.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/Framework/Interface/IService.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/LifeCycle/A.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/LifeCycle/B.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/LifeCycle/C.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/bin/Debug/net8.0/DILastSession.deps.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/bin/Debug/net8.0/DILastSession.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/bin/Debug/net8.0/DILastSession.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/bin/Debug/net8.0/DILastSession.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/bin/Debug/net8.0/DILastSession.runtimeconfig.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/DILastSession.csproj.nuget.dgspec.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/DILastSession.csproj.nuget.g.props (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/DILastSession.csproj.nuget.g.targets (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.AssemblyInfoInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.GeneratedMSBuildEditorConfig.editorconfig (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.GlobalUsings.g.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.assets.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.csproj.BuildWithSkipAnalyzers (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.genruntimeconfig.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/DILastSession.sourcelink.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/apphost.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/ref/DILastSession.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/Debug/net8.0/refint/DILastSession.dll (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/project.assets.json (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/DILastSession/obj/project.nuget.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DILastSession/Session Notes.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01.rar (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01.zip (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/App.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/DIP_Solution01.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/ExternalService/Service01.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/ExternalService/Service02.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/ExternalService/Service03.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/LifeCycle/A.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/LifeCycle/B.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/LifeCycle/C.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/Properties/AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/bin/Debug/DIP_Solution01.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/bin/Debug/DIP_Solution01.exe.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/bin/Debug/DIP_Solution01.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/obj/Debug/DIP_Solution01.csproj.AssemblyReference.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/obj/Debug/DIP_Solution01.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/obj/Debug/DIP_Solution01.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/obj/Debug/DIP_Solution01.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/obj/Debug/DIP_Solution01.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution01/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/App.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/DIP_Solution02.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/ExternalService/Service01.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/ExternalService/Service02.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/ExternalService/Service03.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/LifeCycle/A.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/LifeCycle/B.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/LifeCycle/C.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/Properties/AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/bin/Debug/DIP_Solution02.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/bin/Debug/DIP_Solution02.exe.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/bin/Debug/DIP_Solution02.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/obj/Debug/DIP_Solution02.csproj.AssemblyReference.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/obj/Debug/DIP_Solution02.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/obj/Debug/DIP_Solution02.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/obj/Debug/DIP_Solution02.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/obj/Debug/DIP_Solution02.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution02/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03.zip (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/App.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/DIP_Solution03.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/ExternalService/Service01.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/ExternalService/Service02.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/ExternalService/Service03.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/LifeCycle/A.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/LifeCycle/B.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/LifeCycle/C.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/Properties/AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/Service.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/bin/Debug/DIP_Solution03.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/bin/Debug/DIP_Solution03.exe.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/bin/Debug/DIP_Solution03.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/obj/Debug/DIP_Solution03.csproj.AssemblyReference.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/obj/Debug/DIP_Solution03.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/obj/Debug/DIP_Solution03.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/obj/Debug/DIP_Solution03.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/obj/Debug/DIP_Solution03.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution03/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/App.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/DIP_Solution04.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/ExternalService/Service01.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/ExternalService/Service02.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/ExternalService/Service03.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/Framework/Base/BaseService.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/Framework/Interface/IService.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/LifeCycle/A.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/LifeCycle/B.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/LifeCycle/C.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/Properties/AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/bin/Debug/DIP_Solution04.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/bin/Debug/DIP_Solution04.exe.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/bin/Debug/DIP_Solution04.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/obj/Debug/DIP_Solution04.csproj.AssemblyReference.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/obj/Debug/DIP_Solution04.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/obj/Debug/DIP_Solution04.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/obj/Debug/DIP_Solution04.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/obj/Debug/DIP_Solution04.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution04/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/App.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/DIP_Solution05.csproj (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/ExternalService/Service01.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/ExternalService/Service02.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/ExternalService/Service03.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/Framework/Base/BaseService.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/Framework/Interface/IService.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/LifeCycle/A.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/LifeCycle/B.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/LifeCycle/C.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/Program.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/Properties/AssemblyInfo.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/bin/Debug/DIP_Solution05.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/bin/Debug/DIP_Solution05.exe.config (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/bin/Debug/DIP_Solution05.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/obj/Debug/DIP_Solution05.csproj.AssemblyReference.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/obj/Debug/DIP_Solution05.csproj.CoreCompileInputs.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/obj/Debug/DIP_Solution05.csproj.FileListAbsolute.txt (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/obj/Debug/DIP_Solution05.exe (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/obj/Debug/DIP_Solution05.pdb (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/DIP_Solution05/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Projects/Session07.sln (100%) rename {01-Introductory-Sessions => content/01-Introductory-Sessions}/Session07/Session07 Notes.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session00/Session00 Architecture.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session01/Session01 Additional Info.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session01/Session01 Backend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session02/Session02 Additional Info.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session02/Session02 Backend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session03/Session03 Additional Info.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session03/Session03 Backend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session04/Session04 Additional Info.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session04/Session04 Backend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session04/TransportationRelatedSampleData.sql (100%) rename {02-Project-Based => content/02-Project-Based}/Session05/Session05 Additional Info.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session05/Session05 Backend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session05/Session05 Frontend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session06/Session06 Additional Info.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session06/Session06 Frontend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session07/Session07 Additional Info.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session07/Session07 Backend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session07/Session07 Frontend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session08/SeatGenerator.py (100%) rename {02-Project-Based => content/02-Project-Based}/Session08/Session08 Backend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session08/Session08 Frontend.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session09/Session09 Additional Info.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session09/Session09 Backend.md (100%) create mode 100644 content/02-Project-Based/Session09/Session09 Frontend.md rename {02-Project-Based => content/02-Project-Based}/Session10/Docker – Overview.md (100%) rename {02-Project-Based => content/02-Project-Based}/Session10/VPS.md (100%) rename {02-Project-Based => content/02-Project-Based}/Wrapping up.md (100%) rename {02-Project-Based => content/02-Project-Based}/docs/AlibabaERD-Version02.pdf (100%) rename {02-Project-Based => content/02-Project-Based}/docs/AlibabaERD-Version02.vsdx (100%) rename {02-Project-Based => content/02-Project-Based}/docs/AlibabaERD.pdf (100%) rename {02-Project-Based => content/02-Project-Based}/docs/AlibabaERD.vsdx (100%) rename {Assets => content/Assets}/Pasted image 20241021170855.png (100%) rename {Assets => content/Assets}/Pasted image 20241022113251.png (100%) rename {Assets => content/Assets}/Pasted image 20241022115013.png (100%) rename {Assets => content/Assets}/Pasted image 20241022131756.png (100%) rename {Assets => content/Assets}/Pasted image 20241105101014.png (100%) rename {Assets => content/Assets}/Pasted image 20241105111022.png (100%) rename {Assets => content/Assets}/Pasted image 20241105111037.png (100%) rename {Assets => content/Assets}/Pasted image 20241121120517.png (100%) rename {Assets => content/Assets}/Pasted image 20241203000244.png (100%) rename {Assets => content/Assets}/Pasted image 20250212171204.png (100%) rename {Assets => content/Assets}/Pasted image 20250212184706.png (100%) rename {Assets => content/Assets}/Pasted image 20250306182113.png (100%) rename {Assets => content/Assets}/Pasted image 20250306182209.png (100%) rename {Assets => content/Assets}/Pasted image 20250306182246.png (100%) rename {Assets => content/Assets}/Pasted image 20250306182313.png (100%) rename {Assets => content/Assets}/Pasted image 20250306182324.png (100%) rename {Assets => content/Assets}/Pasted image 20250427152717.png (100%) rename {Assets => content/Assets}/Pasted image 20250427154917.png (100%) rename {Assets => content/Assets}/Pasted image 20250706234844.png (100%) rename {Assets => content/Assets}/photo_2024-11-21_12-09-39.jpg (100%) create mode 100644 content/Folder-Strucutre.md rename Introductory Session Template.md => content/Introductory Session Template.md (100%) rename Project-Based Session Template.md => content/Project-Based Session Template.md (100%) create mode 100644 content/index.md create mode 100644 globals.d.ts create mode 100644 index.d.ts create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 quartz.config.ts create mode 100644 quartz.layout.ts create mode 100644 quartz/bootstrap-cli.mjs create mode 100644 quartz/bootstrap-worker.mjs create mode 100644 quartz/build.ts create mode 100644 quartz/cfg.ts create mode 100644 quartz/cli/args.js create mode 100644 quartz/cli/constants.js create mode 100644 quartz/cli/handlers.js create mode 100644 quartz/cli/helpers.js create mode 100644 quartz/components/ArticleTitle.tsx create mode 100644 quartz/components/Backlinks.tsx create mode 100644 quartz/components/Body.tsx create mode 100644 quartz/components/Breadcrumbs.tsx create mode 100644 quartz/components/Comments.tsx create mode 100644 quartz/components/ConditionalRender.tsx create mode 100644 quartz/components/ContentMeta.tsx create mode 100644 quartz/components/Darkmode.tsx create mode 100644 quartz/components/Date.tsx create mode 100644 quartz/components/DesktopOnly.tsx create mode 100644 quartz/components/Explorer.tsx create mode 100644 quartz/components/Flex.tsx create mode 100644 quartz/components/Footer.tsx create mode 100644 quartz/components/Graph.tsx create mode 100644 quartz/components/Head.tsx create mode 100644 quartz/components/Header.tsx create mode 100644 quartz/components/MobileOnly.tsx create mode 100644 quartz/components/OverflowList.tsx create mode 100644 quartz/components/PageList.tsx create mode 100644 quartz/components/PageTitle.tsx create mode 100644 quartz/components/ReaderMode.tsx create mode 100644 quartz/components/RecentNotes.tsx create mode 100644 quartz/components/Search.tsx create mode 100644 quartz/components/Spacer.tsx create mode 100644 quartz/components/TableOfContents.tsx create mode 100644 quartz/components/TagList.tsx create mode 100644 quartz/components/index.ts create mode 100644 quartz/components/pages/404.tsx create mode 100644 quartz/components/pages/Content.tsx create mode 100644 quartz/components/pages/FolderContent.tsx create mode 100644 quartz/components/pages/TagContent.tsx create mode 100644 quartz/components/renderPage.tsx create mode 100644 quartz/components/scripts/callout.inline.ts create mode 100644 quartz/components/scripts/checkbox.inline.ts create mode 100644 quartz/components/scripts/clipboard.inline.ts create mode 100644 quartz/components/scripts/comments.inline.ts create mode 100644 quartz/components/scripts/darkmode.inline.ts create mode 100644 quartz/components/scripts/explorer.inline.ts create mode 100644 quartz/components/scripts/graph.inline.ts create mode 100644 quartz/components/scripts/mermaid.inline.ts create mode 100644 quartz/components/scripts/popover.inline.ts create mode 100644 quartz/components/scripts/readermode.inline.ts create mode 100644 quartz/components/scripts/search.inline.ts create mode 100644 quartz/components/scripts/spa.inline.ts create mode 100644 quartz/components/scripts/toc.inline.ts create mode 100644 quartz/components/scripts/util.ts create mode 100644 quartz/components/styles/backlinks.scss create mode 100644 quartz/components/styles/breadcrumbs.scss create mode 100644 quartz/components/styles/clipboard.scss create mode 100644 quartz/components/styles/contentMeta.scss create mode 100644 quartz/components/styles/darkmode.scss create mode 100644 quartz/components/styles/explorer.scss create mode 100644 quartz/components/styles/footer.scss create mode 100644 quartz/components/styles/graph.scss create mode 100644 quartz/components/styles/legacyToc.scss create mode 100644 quartz/components/styles/listPage.scss create mode 100644 quartz/components/styles/mermaid.inline.scss create mode 100644 quartz/components/styles/popover.scss create mode 100644 quartz/components/styles/readermode.scss create mode 100644 quartz/components/styles/recentNotes.scss create mode 100644 quartz/components/styles/search.scss create mode 100644 quartz/components/styles/toc.scss create mode 100644 quartz/components/types.ts create mode 100644 quartz/i18n/index.ts create mode 100644 quartz/i18n/locales/ar-SA.ts create mode 100644 quartz/i18n/locales/ca-ES.ts create mode 100644 quartz/i18n/locales/cs-CZ.ts create mode 100644 quartz/i18n/locales/de-DE.ts create mode 100644 quartz/i18n/locales/definition.ts create mode 100644 quartz/i18n/locales/en-GB.ts create mode 100644 quartz/i18n/locales/en-US.ts create mode 100644 quartz/i18n/locales/es-ES.ts create mode 100644 quartz/i18n/locales/fa-IR.ts create mode 100644 quartz/i18n/locales/fi-FI.ts create mode 100644 quartz/i18n/locales/fr-FR.ts create mode 100644 quartz/i18n/locales/hu-HU.ts create mode 100644 quartz/i18n/locales/id-ID.ts create mode 100644 quartz/i18n/locales/it-IT.ts create mode 100644 quartz/i18n/locales/ja-JP.ts create mode 100644 quartz/i18n/locales/ko-KR.ts create mode 100644 quartz/i18n/locales/lt-LT.ts create mode 100644 quartz/i18n/locales/nb-NO.ts create mode 100644 quartz/i18n/locales/nl-NL.ts create mode 100644 quartz/i18n/locales/pl-PL.ts create mode 100644 quartz/i18n/locales/pt-BR.ts create mode 100644 quartz/i18n/locales/ro-RO.ts create mode 100644 quartz/i18n/locales/ru-RU.ts create mode 100644 quartz/i18n/locales/th-TH.ts create mode 100644 quartz/i18n/locales/tr-TR.ts create mode 100644 quartz/i18n/locales/uk-UA.ts create mode 100644 quartz/i18n/locales/vi-VN.ts create mode 100644 quartz/i18n/locales/zh-CN.ts create mode 100644 quartz/i18n/locales/zh-TW.ts create mode 100644 quartz/plugins/emitters/404.tsx create mode 100644 quartz/plugins/emitters/aliases.ts create mode 100644 quartz/plugins/emitters/assets.ts create mode 100644 quartz/plugins/emitters/cname.ts create mode 100644 quartz/plugins/emitters/componentResources.ts create mode 100644 quartz/plugins/emitters/contentIndex.tsx create mode 100644 quartz/plugins/emitters/contentPage.tsx create mode 100644 quartz/plugins/emitters/favicon.ts create mode 100644 quartz/plugins/emitters/folderPage.tsx create mode 100644 quartz/plugins/emitters/helpers.ts create mode 100644 quartz/plugins/emitters/index.ts create mode 100644 quartz/plugins/emitters/ogImage.tsx create mode 100644 quartz/plugins/emitters/static.ts create mode 100644 quartz/plugins/emitters/tagPage.tsx create mode 100644 quartz/plugins/filters/draft.ts create mode 100644 quartz/plugins/filters/explicit.ts create mode 100644 quartz/plugins/filters/index.ts create mode 100644 quartz/plugins/index.ts create mode 100644 quartz/plugins/transformers/citations.ts create mode 100644 quartz/plugins/transformers/description.ts create mode 100644 quartz/plugins/transformers/frontmatter.ts create mode 100644 quartz/plugins/transformers/gfm.ts create mode 100644 quartz/plugins/transformers/index.ts create mode 100644 quartz/plugins/transformers/lastmod.ts create mode 100644 quartz/plugins/transformers/latex.ts create mode 100644 quartz/plugins/transformers/linebreaks.ts create mode 100644 quartz/plugins/transformers/links.ts create mode 100644 quartz/plugins/transformers/ofm.ts create mode 100644 quartz/plugins/transformers/oxhugofm.ts create mode 100644 quartz/plugins/transformers/roam.ts create mode 100644 quartz/plugins/transformers/syntax.ts create mode 100644 quartz/plugins/transformers/toc.ts create mode 100644 quartz/plugins/types.ts create mode 100644 quartz/plugins/vfile.ts create mode 100644 quartz/processors/emit.ts create mode 100644 quartz/processors/filter.ts create mode 100644 quartz/processors/parse.ts create mode 100644 quartz/static/giscus/dark.css create mode 100644 quartz/static/giscus/light.css create mode 100644 quartz/static/icon.png create mode 100644 quartz/static/og-image.png create mode 100644 quartz/styles/base.scss create mode 100644 quartz/styles/callouts.scss create mode 100644 quartz/styles/custom.scss create mode 100644 quartz/styles/syntax.scss create mode 100644 quartz/styles/variables.scss create mode 100644 quartz/util/clone.ts create mode 100644 quartz/util/ctx.ts create mode 100644 quartz/util/emoji.ts create mode 100644 quartz/util/emojimap.json create mode 100644 quartz/util/escape.ts create mode 100644 quartz/util/fileTrie.test.ts create mode 100644 quartz/util/fileTrie.ts create mode 100644 quartz/util/glob.ts create mode 100644 quartz/util/jsx.tsx create mode 100644 quartz/util/lang.ts create mode 100644 quartz/util/log.ts create mode 100644 quartz/util/og.tsx create mode 100644 quartz/util/path.test.ts create mode 100644 quartz/util/path.ts create mode 100644 quartz/util/perf.ts create mode 100644 quartz/util/random.ts create mode 100644 quartz/util/resources.tsx create mode 100644 quartz/util/sourcemap.ts create mode 100644 quartz/util/theme.ts create mode 100644 quartz/util/trace.ts create mode 100644 quartz/worker.ts create mode 100644 tsconfig.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/.node-version b/.node-version new file mode 100644 index 0000000..aebd91c --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +v22.16.0 diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..3c0687a --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +public +node_modules +.quartz-cache diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..5788b66 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "quoteProps": "as-needed", + "trailingComma": "all", + "tabWidth": 2, + "semi": false +} diff --git a/01-Introductory-Sessions/Session03/Projects/Views/wwwroot/css/CSS/.DS_Store b/01-Introductory-Sessions/Session03/Projects/Views/wwwroot/css/CSS/.DS_Store deleted file mode 100644 index 94c415975d879461f456c82826bc8bfa6d95b090..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMU2fAr5T0=osTDsekhTH!!4g6Up(1ettf~n0xfdX5T0lx-R6A6>`3i_*(DGJs z4_>(emnh%tt|EKAb^{Lxh1qC#ob`U+&VKgTnGF%~-hBL=Xh1}3sA4y6pa~Q?FSS-8 z*Ruu7z!PPZ(>jRIKyOL*8jdhUe}+ zT8g2vimEEz&mO~O(1!{`*q5HXy2>%rrxQfo3~{%Ms5ry@li~XmR^p`b9`B{#c~XkK zn+7uklVE2w2R;z9y`R86E#WpW+Zj#F=pmv#1u_GJ?Wx5)kAeSE!uMP7E&kIB@SK-; zHWxfOy~X@ifiaFwpvxTodJ(lfjSz3JR z?09Uq&FmR=S>^7@aHo8LFTrb07r>UaUdQ;HK0?z51ou1yzG_)X1v++B1IhniHt+wh znB72xjv;rl*>BzpbJKE|q`d==&dnXjwf4egTKtH1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0xvWf}2m+M2cLO+A6(Z*&sUd zff93E;RrJfTD{F+3YY?>fGJ=Km;(QT0-Up@taZ%${;IX6fGO}_Dj?qvDXU->u=1#1 z9c*+7Kul=X!eg!jl#>R`0#+WCN}qo9-~!c!C5H2KUQeYvF$-9E^mI5+hYOKiSfMzL zPF||r;WCfbngXUkTLD?SZy`s)&wOe9o@0RvoM3`6SMz5m4=2TOJ}GiC`-TR@1 zN5IZ%Ug&EoI|L1HcYok*ic@A7$<4iJczd=&ZZ&W59NkUB>(i*$mQwC}gSXkmi^uJq zuf(tAzpQQVTZ6wHjbG!(^XR{6_<4+DjuF}ODfmny&ms9j#;`USM2!` zALwn&9i$RNju9Cr7d#r#R^nXa%y?dMf9aI5uNilUPqa@tN{2E=*#hw>??RNwRdUwJ zzU19V^lQEUjtYcA=V#)zTUZ$yc)LZ_U void; + logout: () => void; +} + +export const useAuthStore = create()( + persist( + (set) => ({ + user: null, + login: (user: AuthResponseDto) => set({ user }), + logout: () => set({ user: null }), + }), + { + name: "auth-storage", // storage key in localStorage + storage: createJSONStorage(() => localStorage), + } + ) +); + +``` + +## Profile and User Info Enhancements + +- [ ] Fix and align `birthDate` types in `PersonDto`, `TransportationSearchResult`, and `ListOfTravelers`. Make sure to use `Date | string` data type for them + +## Branching + +- [ ] Create the feature/themes branch based on develop + +### 🎨 Theming and UI Styling + +- [ ] Install and import `preline` +```bash +npm install preline +``` +- [ ] Add theme colors and global styles (index.css). Take a look at their [Documentation](https://preline.co/docs/index.html) +- [ ] Add `ThemeSwitcher` and integrate it into the navbar +- [ ] If you decide to do this part after implementing pages, make sure to add theme support to the following components: + - [ ] `transportationCard`, `transportationSearchForm`, `ReviewAndConfirm` + - [ ] All modals: `LoginModal`, `RegisterModal`, `SelectFromPeopleModal` + - [ ] Profile section: `ProfilePage`, `ProfileSummary`, `PersonalInformation`, `AccountInfo`, `PersonalAccountInfo`, `BankAccountDetails`, `MyTravels`, `MyTransactions`, `ListOfTravelers` + - [ ] Reservation views and components + +### Merge +- [ ] Create a PR and merge the current branch with develop + +## Branching for reservation + +- [ ] Create the feature/ticket-reservation branch based on develop + +## Backend Agent Methods + +- [ ] Add `CreateTicketOrderDto` and `CreateTravelerTicketDto`. Check backend endpoints for the dtos you need for this session +- [ ] Add `TransportationSeatDto` +- [ ] Add related methods in `TicketOrder` and add it to agent +```ts +const TicketOrder = { + create: (data : CreateTicketOrderDto) => request.post('/ticketOrder/create', data), + downloadPdf: (ticketOrderId : number) => request.get(`/ticketOrder/${ticketOrderId}/pdf`, { + responseType: 'blob', + }), +} +``` + +## Reservation Process & Step Management + +- [ ] Implement `useReservationStore` using `zustand` to manage reservation state +```ts +import { PersonDto } from '@/shared/models/account/PersonDto'; +import { CreateTravelerTicketDto } from '@/shared/models/ticketOrder/createTravelerTicketDto'; +import { TransportationSearchResult } from '@/shared/models/transportation/transportationSearchResult'; +import { create } from 'zustand'; + +const defaultTraveler: CreateTravelerTicketDto = { + id: 0, + creatorAccountId: 0, + firstName: '', + lastName: '', + genderId: 0, + birthDate: '', + idNumber: '', + phoneNumber: '', + englishFirstName: '', + englishLastName: '', + isVIP: false, + seatId: null, + description: '', +}; + +type ReservationStep = "transportation" | "travelers" | "review" | "payment" | "success"; + +interface ReservationState { + transportation: TransportationSearchResult | null; + travelers: CreateTravelerTicketDto[]; + ticketOrderId: number; + couponCode: string | null; + paymentInfo: any; + people: PersonDto[], + currentStep: ReservationStep, + isConfirmed: boolean, + isPayed: boolean, + isTravelerPartDone: boolean, + addTraveler: (traveler: CreateTravelerTicketDto) => void; + setTravelers: (travelers: CreateTravelerTicketDto[]) => void; + updateTraveler: (index: number, traveler: CreateTravelerTicketDto) => void; + removeTraveler: (index: number) => void; + setTicketOrderId: (newId: number) => void; + setTransportation: (transportation: TransportationSearchResult) => void; + setCouponCode: (code: string | null) => void; + setPaymentInfo: (info: any) => void; + setPeople: (people: PersonDto[]) => void; + + setCurrentStep: (step: ReservationStep) => void; + setIsConfirmed: (value: boolean) => void; + setIsPayed: (value: boolean) => void; + setIsTravelerPartDone: (value: boolean) => void; + + resetReservation: () => void; +} + +export const useReservationStore = create((set) => ({ + transportation: null, + people: [], + travelers: [defaultTraveler], + couponCode: null, + paymentInfo: null, + ticketOrderId : 0, + currentStep: "transportation", + isConfirmed: false, + isPayed : false, + isTravelerPartDone : false, + setTicketOrderId: (newId) => set(() =>({ + ticketOrderId : newId + })), + addTraveler: (traveler) => set((state) => ({ travelers: [...state.travelers, traveler] })), + setTravelers: (newTravelers) => set(() => ({ + travelers : newTravelers + })), + setPeople: (newPeople) => set(() => ({ + people : newPeople + })), + updateTraveler: (index, traveler) => + set((state) => { + const updated = [...state.travelers]; + updated[index] = traveler; + return { travelers: updated }; + }), + + removeTraveler: (index) => + set((state) => { + if (state.travelers.length <= 1) return state; + const updated = [...state.travelers]; + updated.splice(index, 1); + return { travelers: updated }; + }), + + setTransportation: (theTransportation) => set({ transportation: theTransportation }), + setCouponCode: (code) => set({ couponCode: code }), + setPaymentInfo: (info) => set({ paymentInfo: info }), + setCurrentStep: (step) => set({ currentStep: step }), + + resetReservation: () => + set({ + transportation: null, + travelers: [], + ticketOrderId: 0, + couponCode: null, + paymentInfo: null, + people: [], + currentStep: "transportation", + isConfirmed: false, + isPayed: false, + isTravelerPartDone: false + }), + + setIsConfirmed: (value) => set(() => ({ + isConfirmed : value + })), + setIsPayed: (value) => set(() => ({ + isPayed : value + })), + setIsTravelerPartDone: (value) => set(() => ({ + isTravelerPartDone : value + })), +})); +``` + +- [ ] Create step-based routing using `ReservationLayout`. Step-based routing, in the context of contact centers or workflow management, refers to a method of directing work items (like customer service calls or support tickets) to the most appropriate agent or resource based on a series of predefined steps or conditions. + +- [ ] Add routing for reservation steps in `App.tsx` + +- [ ] Add `StepIndicator` component to show step progress visually (optional) + - [ ] Add `stepGuard` logic to prevent accessing future steps prematurely + - [ ] Add logic to skip back only if previous steps are completed + +- [ ] Create `TravelerForm` to gather passenger info, with the possibility to load data from the related people of the account. + +- [ ] Create `TravelerDetailsForm` to gather passengers info with `TravelerForm` integration + +- [ ] Create `ReviewAndConfirm` page to review selections + +- [ ] Create `PaymentForm` for transaction process + +- [ ] Create `TicketIssued` page for confirmation + +- [ ] Add validation to show error if `seatId` is missing + +## Seat Selection +- [ ] Add DTO: +```tsx +export interface transportationSeatDto{ +    id : number, +    vehicleId : number, +    row : number, +    column : number, +    isVIP : boolean, +    isAvailable : boolean, +    description : string | null, +    isReserved : boolean, +    genderId : number | null +} +``` + +- [ ] Add `getSeats()` method to `agent.ts` +- [ ] Add `SeatGridSelector` component for graphical seat layout in `TravelerDetailForm` and integrate it with traveler list, only for Buses +- [ ] Modify `TransportationCard` to integrate with seat selection +- [ ] Add `SeatOnlyGridSeatMap` for simpler seat-only display + +### Coupon Integration + +- [ ] Add `CouponValidationRequestDto` and `DiscountDto` +- [ ] Add `validateCoupon()` method to `agent.ts` +- [ ] Update `useReservationStore` to include `CouponCode` +- [ ] Ensure `CreateTicketOrderDto` uses `CouponCode` instead of `couponId` +- [ ] Connect coupon validation flow in `ReviewAndConfirm` + +## Search, Filter, and Sort Functionality + +- [ ] Add filters (company) and sorting (time or price) UI to `SearchResultPage` +- [ ] Add company logo support in result cards and filters +- [ ] Add `previous/next day` buttons for time navigation +- [ ] Add remaining capacity check to transportation cards +- [ ] Add refund policy info display +- [ ] Implement showing seat map in `TransportaionCard` using `ReadOnlySeatMap` + +### 📎 Notes + +- Ensure you run a full theme test after UI changes. +- Test step transitions with various invalid scenarios. +- Confirm persistent session and coupon behavior across refreshes. +- Validate all filters, sort, and search navigation works. +- Test seat selection and proper rendering of rotated layouts. + +## Merge +- [ ] Create a PR and merge the current branch with develop diff --git a/02-Project-Based/Session10/Docker – Overview.md b/content/02-Project-Based/Session10/Docker – Overview.md similarity index 100% rename from 02-Project-Based/Session10/Docker – Overview.md rename to content/02-Project-Based/Session10/Docker – Overview.md diff --git a/02-Project-Based/Session10/VPS.md b/content/02-Project-Based/Session10/VPS.md similarity index 100% rename from 02-Project-Based/Session10/VPS.md rename to content/02-Project-Based/Session10/VPS.md diff --git a/02-Project-Based/Wrapping up.md b/content/02-Project-Based/Wrapping up.md similarity index 100% rename from 02-Project-Based/Wrapping up.md rename to content/02-Project-Based/Wrapping up.md diff --git a/02-Project-Based/docs/AlibabaERD-Version02.pdf b/content/02-Project-Based/docs/AlibabaERD-Version02.pdf similarity index 100% rename from 02-Project-Based/docs/AlibabaERD-Version02.pdf rename to content/02-Project-Based/docs/AlibabaERD-Version02.pdf diff --git a/02-Project-Based/docs/AlibabaERD-Version02.vsdx b/content/02-Project-Based/docs/AlibabaERD-Version02.vsdx similarity index 100% rename from 02-Project-Based/docs/AlibabaERD-Version02.vsdx rename to content/02-Project-Based/docs/AlibabaERD-Version02.vsdx diff --git a/02-Project-Based/docs/AlibabaERD.pdf b/content/02-Project-Based/docs/AlibabaERD.pdf similarity index 100% rename from 02-Project-Based/docs/AlibabaERD.pdf rename to content/02-Project-Based/docs/AlibabaERD.pdf diff --git a/02-Project-Based/docs/AlibabaERD.vsdx b/content/02-Project-Based/docs/AlibabaERD.vsdx similarity index 100% rename from 02-Project-Based/docs/AlibabaERD.vsdx rename to content/02-Project-Based/docs/AlibabaERD.vsdx diff --git a/Assets/Pasted image 20241021170855.png b/content/Assets/Pasted image 20241021170855.png similarity index 100% rename from Assets/Pasted image 20241021170855.png rename to content/Assets/Pasted image 20241021170855.png diff --git a/Assets/Pasted image 20241022113251.png b/content/Assets/Pasted image 20241022113251.png similarity index 100% rename from Assets/Pasted image 20241022113251.png rename to content/Assets/Pasted image 20241022113251.png diff --git a/Assets/Pasted image 20241022115013.png b/content/Assets/Pasted image 20241022115013.png similarity index 100% rename from Assets/Pasted image 20241022115013.png rename to content/Assets/Pasted image 20241022115013.png diff --git a/Assets/Pasted image 20241022131756.png b/content/Assets/Pasted image 20241022131756.png similarity index 100% rename from Assets/Pasted image 20241022131756.png rename to content/Assets/Pasted image 20241022131756.png diff --git a/Assets/Pasted image 20241105101014.png b/content/Assets/Pasted image 20241105101014.png similarity index 100% rename from Assets/Pasted image 20241105101014.png rename to content/Assets/Pasted image 20241105101014.png diff --git a/Assets/Pasted image 20241105111022.png b/content/Assets/Pasted image 20241105111022.png similarity index 100% rename from Assets/Pasted image 20241105111022.png rename to content/Assets/Pasted image 20241105111022.png diff --git a/Assets/Pasted image 20241105111037.png b/content/Assets/Pasted image 20241105111037.png similarity index 100% rename from Assets/Pasted image 20241105111037.png rename to content/Assets/Pasted image 20241105111037.png diff --git a/Assets/Pasted image 20241121120517.png b/content/Assets/Pasted image 20241121120517.png similarity index 100% rename from Assets/Pasted image 20241121120517.png rename to content/Assets/Pasted image 20241121120517.png diff --git a/Assets/Pasted image 20241203000244.png b/content/Assets/Pasted image 20241203000244.png similarity index 100% rename from Assets/Pasted image 20241203000244.png rename to content/Assets/Pasted image 20241203000244.png diff --git a/Assets/Pasted image 20250212171204.png b/content/Assets/Pasted image 20250212171204.png similarity index 100% rename from Assets/Pasted image 20250212171204.png rename to content/Assets/Pasted image 20250212171204.png diff --git a/Assets/Pasted image 20250212184706.png b/content/Assets/Pasted image 20250212184706.png similarity index 100% rename from Assets/Pasted image 20250212184706.png rename to content/Assets/Pasted image 20250212184706.png diff --git a/Assets/Pasted image 20250306182113.png b/content/Assets/Pasted image 20250306182113.png similarity index 100% rename from Assets/Pasted image 20250306182113.png rename to content/Assets/Pasted image 20250306182113.png diff --git a/Assets/Pasted image 20250306182209.png b/content/Assets/Pasted image 20250306182209.png similarity index 100% rename from Assets/Pasted image 20250306182209.png rename to content/Assets/Pasted image 20250306182209.png diff --git a/Assets/Pasted image 20250306182246.png b/content/Assets/Pasted image 20250306182246.png similarity index 100% rename from Assets/Pasted image 20250306182246.png rename to content/Assets/Pasted image 20250306182246.png diff --git a/Assets/Pasted image 20250306182313.png b/content/Assets/Pasted image 20250306182313.png similarity index 100% rename from Assets/Pasted image 20250306182313.png rename to content/Assets/Pasted image 20250306182313.png diff --git a/Assets/Pasted image 20250306182324.png b/content/Assets/Pasted image 20250306182324.png similarity index 100% rename from Assets/Pasted image 20250306182324.png rename to content/Assets/Pasted image 20250306182324.png diff --git a/Assets/Pasted image 20250427152717.png b/content/Assets/Pasted image 20250427152717.png similarity index 100% rename from Assets/Pasted image 20250427152717.png rename to content/Assets/Pasted image 20250427152717.png diff --git a/Assets/Pasted image 20250427154917.png b/content/Assets/Pasted image 20250427154917.png similarity index 100% rename from Assets/Pasted image 20250427154917.png rename to content/Assets/Pasted image 20250427154917.png diff --git a/Assets/Pasted image 20250706234844.png b/content/Assets/Pasted image 20250706234844.png similarity index 100% rename from Assets/Pasted image 20250706234844.png rename to content/Assets/Pasted image 20250706234844.png diff --git a/Assets/photo_2024-11-21_12-09-39.jpg b/content/Assets/photo_2024-11-21_12-09-39.jpg similarity index 100% rename from Assets/photo_2024-11-21_12-09-39.jpg rename to content/Assets/photo_2024-11-21_12-09-39.jpg diff --git a/content/Folder-Strucutre.md b/content/Folder-Strucutre.md new file mode 100644 index 0000000..7c9f224 --- /dev/null +++ b/content/Folder-Strucutre.md @@ -0,0 +1,7 @@ +theOrderOfThePhoenix/ +├── 01-Introductory-Sessions/ +│ +├── 02-Project-Based-Sessions/ +│ +├── Assets +└── References.md diff --git a/Introductory Session Template.md b/content/Introductory Session Template.md similarity index 100% rename from Introductory Session Template.md rename to content/Introductory Session Template.md diff --git a/Project-Based Session Template.md b/content/Project-Based Session Template.md similarity index 100% rename from Project-Based Session Template.md rename to content/Project-Based Session Template.md diff --git a/content/index.md b/content/index.md new file mode 100644 index 0000000..6d7c9df --- /dev/null +++ b/content/index.md @@ -0,0 +1,122 @@ +# **🐦‍🔥 Order of the Phoenix — Website Development** + +## **📌 About the Project** + +This repository contains documents, resources, and projects created during the **first phase of the Order of the Phoenix initiative** — a self-organized learning movement started by a group of computer science students. + +What began as an effort to escape a passive academic environment evolved into a **collaborative learning experiment** — building a solid foundation in modern web development and culminating in the development of a **Transportation Management System** inspired by platforms like **Booking.com** and **Alibaba.ir**. + +The goal wasn’t just to learn a technology; it was to foster **self-driven learning, teamwork, and real-world problem-solving**. + + + +## **📚 Introductory Sessions** + +The first part of the program focused on equipping everyone with fundamental web development **and solid software architecture principles**. + +### **🗺️ Roadmap of What We Learned** + +1. **🌐 Web Fundamentals** — HTTP, REST, and the client-server model +2. **🧩 MVC (Model-View-Controller)** — basics of application structuring +3. **⚙️ Web API Development** — designing and consuming APIs +4. **🚀 ASP.NET Core Basics** — setting up and building modern backends +5. **🛠️ Dependency Injection (DI)** — + - Why DI is crucial for **maintainability & testability** + - Understanding ASP.NET Core service lifetimes (Transient, Scoped, Singleton) +6. **🏗️ Design Patterns** — + - **Repository Pattern** for data abstraction + - **Unit of Work** for transaction management + - **Factory & Builder** for complex object creation +7. **🏛️ Clean Architecture Fundamentals** — + - Separating **Domain, Application, and Infrastructure** layers + - Designing business rules independent of frameworks + +These sessions ensured that all participants, regardless of prior experience, could contribute to a real-world, **well-architected project**. + + + +## **💻 Project-Based Sessions** + +Once the fundamentals were solid, we moved to building a **real project**. + +### **📝 Planning Phase** + +- ✅ Selected the project collaboratively (**Transportation Management System**) +- ✅ Designed a detailed **ERD (Entity Relationship Diagram)**, identifying entities, aggregates, and relationships +- ✅ Wrote **full documentation** — requirements, use cases, and architecture diagrams + +### **🔨 Implementation Phase** + +Each member implemented their **own version** of the project, following Clean Architecture guidelines while experimenting with different approaches. + + +### **🔗 Backend — Transportation Management API** + +A **Clean Architecture-based** backend designed to be **modular, testable, and scalable**. + +**Key Highlights:** + +- **Domain Layer** 🏛️ + - Defined **entities** + - Applied **domain rules** to ensure data consistency +- **Application Layer** ⚙️ + - Contained **service classes** (e.g., `TicketOrderService`, `AccountService`) that orchestrated business logic. + - Services handled **validation, entity manipulation, and coordination between repositories**. + - Mapped DTOs to entities for input/output separation. +- **Infrastructure Layer** 🗄️ + - Implemented **Repository & Unit of Work patterns** using Entity Framework Core. + - Database interactions abstracted behind interfaces. +- **Presentation Layer** 🌐 + - ASP.NET Core RESTful Web API + +**Why Clean Architecture?** +- Clear **dependency direction** (outer layers depend only on inner ones). +- Easier testing (business logic independent of frameworks). +- High **maintainability and scalability**. + + + +### **🎨 Frontend — Transportation Management Web App** +A **modern, component-driven frontend** built with **React + TypeScript**, designed with a focus on **clarity, modularity, and maintainability**. + +- **State Management 🧩** + - Managed predictably using **Zustand**, organized into **well-defined slices** for clear separation of concerns. + - Promotes ease of composition and scalability as the app grows. +- **API Communication 🔗** + - All HTTP requests routed through a **centralized Axios instance**. + - Handles **global error interception, authentication headers, and response transformations** consistently. +- **UI Components 🎨** + - Built with **TailwindCSS** using a **modular, reusable component approach**. + - Encourages **visual consistency** and speeds up UI development. +- **Routing & Navigation 🗺️** + - **React Router DOM** for nested and dynamic routing. + - Clear and scalable navigation flow for multi-step processes (e.g., ticket reservation). +- **Data Flow 🔄** + - Strict **unidirectional data flow**, making interactions between components, state, and services predictable and easy to debug. +- **User Experience ✨** + - A simple but modern UI optimized for clarity and responsiveness, simulating real-world use cases with a clean architecture mindset. + +## **👥 Projects by Members** + +| **Member** | **Projects** | +| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Mehrdad Shirvani [🐙 GitHub](https://github.com/MehrdadShirvani)** | [Backend API](https://github.com/MehrdadShirvani/AlibabaClone-Backend) • [Frontend Web App](https://github.com/mehrdadShirvani/AlibabaClone-Frontend) | +| **Ali Taherzadeh [🐙 GitHub](https://github.com/AliThz)** | [Backend API](https://github.com/alithz/AlibabaClone-Backend) • [Frontend Web App](https://github.com/alithz/AlibabaClone-Frontend) | +| **Amin Ghoorchian [🐙 GitHub](https://github.com/AminGh05)** | [Backend API](https://github.com/AminGh05/Alibaba-Clone-Backend) • [Frontend Web App](https://github.com/AminGh05/Alibaba-Clone-Frontend) | + +## **🙏 Acknowledgements** + +A heartfelt thanks to: +- **All members** who dedicated their time and energy, despite busy schedules +- **The core team** who stayed committed through challenges +- Everyone who believed in creating a culture of **self-driven, high-quality software development** + +## **🚀 Aspirations for the Project** + +This is just the beginning. Our future goals: + +- **Publishing all documents and ERDs publicly** for others to learn from +- Growing this into a **community-driven tradition** of collaboration and solving real problems + +_"🔥 May this small spark inspire greater movements."_ + diff --git a/globals.d.ts b/globals.d.ts new file mode 100644 index 0000000..6cf30f8 --- /dev/null +++ b/globals.d.ts @@ -0,0 +1,17 @@ +export declare global { + interface Document { + addEventListener( + type: K, + listener: (this: Document, ev: CustomEventMap[K]) => void, + ): void + removeEventListener( + type: K, + listener: (this: Document, ev: CustomEventMap[K]) => void, + ): void + dispatchEvent(ev: CustomEventMap[K] | UIEvent): void + } + interface Window { + spaNavigate(url: URL, isBack: boolean = false) + addCleanup(fn: (...args: any[]) => void) + } +} diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..9011ee3 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,15 @@ +declare module "*.scss" { + const content: string + export = content +} + +// dom custom event +interface CustomEventMap { + prenav: CustomEvent<{}> + nav: CustomEvent<{ url: FullSlug }> + themechange: CustomEvent<{ theme: "light" | "dark" }> + readermodechange: CustomEvent<{ mode: "on" | "off" }> +} + +type ContentIndex = Record +declare const fetchData: Promise diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8bd2ac4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7145 @@ +{ + "name": "@jackyzha0/quartz", + "version": "4.5.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@jackyzha0/quartz", + "version": "4.5.1", + "license": "MIT", + "dependencies": { + "@clack/prompts": "^0.11.0", + "@floating-ui/dom": "^1.7.0", + "@myriaddreamin/rehype-typst": "^0.6.0", + "@napi-rs/simple-git": "0.1.19", + "@tweenjs/tween.js": "^25.0.0", + "@webgpu/types": "^0.1.61", + "ansi-truncate": "^1.2.0", + "async-mutex": "^0.5.0", + "chokidar": "^4.0.3", + "cli-spinner": "^0.2.10", + "d3": "^7.9.0", + "esbuild-sass-plugin": "^3.3.1", + "flexsearch": "0.7.43", + "github-slugger": "^2.0.0", + "globby": "^14.1.0", + "gray-matter": "^4.0.3", + "hast-util-to-html": "^9.0.5", + "hast-util-to-jsx-runtime": "^2.3.6", + "hast-util-to-string": "^3.0.1", + "is-absolute-url": "^4.0.1", + "js-yaml": "^4.1.0", + "lightningcss": "^1.30.1", + "mdast-util-find-and-replace": "^3.0.2", + "mdast-util-to-hast": "^13.2.0", + "mdast-util-to-string": "^4.0.0", + "micromorph": "^0.4.5", + "minimatch": "^10.0.1", + "pixi.js": "^8.9.2", + "preact": "^10.26.7", + "preact-render-to-string": "^6.5.13", + "pretty-bytes": "^7.0.0", + "pretty-time": "^1.1.0", + "reading-time": "^1.5.0", + "rehype-autolink-headings": "^7.1.0", + "rehype-citation": "^2.3.1", + "rehype-katex": "^7.0.1", + "rehype-mathjax": "^7.1.0", + "rehype-pretty-code": "^0.14.1", + "rehype-raw": "^7.0.0", + "rehype-slug": "^6.0.0", + "remark": "^15.0.1", + "remark-breaks": "^4.0.0", + "remark-frontmatter": "^5.0.0", + "remark-gfm": "^4.0.1", + "remark-math": "^6.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "rfdc": "^1.4.1", + "satori": "^0.13.1", + "serve-handler": "^6.1.6", + "sharp": "^0.34.2", + "shiki": "^1.26.2", + "source-map-support": "^0.5.21", + "to-vfile": "^8.0.0", + "toml": "^3.0.0", + "unified": "^11.0.5", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.3", + "workerpool": "^9.2.0", + "ws": "^8.18.2", + "yargs": "^18.0.0" + }, + "bin": { + "quartz": "quartz/bootstrap-cli.mjs" + }, + "devDependencies": { + "@types/d3": "^7.4.3", + "@types/hast": "^3.0.4", + "@types/js-yaml": "^4.0.9", + "@types/node": "^22.15.23", + "@types/pretty-time": "^1.1.5", + "@types/source-map-support": "^0.5.10", + "@types/ws": "^8.18.1", + "@types/yargs": "^17.0.33", + "esbuild": "^0.25.5", + "prettier": "^3.5.3", + "tsx": "^4.19.4", + "typescript": "^5.8.3" + }, + "engines": { + "node": ">=22", + "npm": ">=10.9.2" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.0.tgz", + "integrity": "sha512-+imAQkHf7U/Rwvu0wk1XWgsP3WnpCWmK7B48f0XqSNzgk64+grljTKC7pnO/xBiEMUziF7vKRfbBnOQhg126qQ==", + "peer": true + }, + "node_modules/@citation-js/core": { + "version": "0.7.14", + "resolved": "https://registry.npmjs.org/@citation-js/core/-/core-0.7.14.tgz", + "integrity": "sha512-dgeGqYDSQmn2MtnWZkwPGpJQPh43yr1lAAr9jl1NJ9pIY1RXUQxtlAUZVur0V9PHdbfQC+kkvB1KC3VpgVV3MA==", + "dependencies": { + "@citation-js/date": "^0.5.0", + "@citation-js/name": "^0.4.2", + "fetch-ponyfill": "^7.1.0", + "sync-fetch": "^0.4.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@citation-js/date": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@citation-js/date/-/date-0.5.1.tgz", + "integrity": "sha512-1iDKAZ4ie48PVhovsOXQ+C6o55dWJloXqtznnnKy6CltJBQLIuLLuUqa8zlIvma0ZigjVjgDUhnVaNU1MErtZw==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@citation-js/name": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@citation-js/name/-/name-0.4.2.tgz", + "integrity": "sha512-brSPsjs2fOVzSnARLKu0qncn6suWjHVQtrqSUrnqyaRH95r/Ad4wPF5EsoWr+Dx8HzkCGb/ogmoAzfCsqlTwTQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@citation-js/plugin-bibjson": { + "version": "0.7.14", + "resolved": "https://registry.npmjs.org/@citation-js/plugin-bibjson/-/plugin-bibjson-0.7.14.tgz", + "integrity": "sha512-Hcmk01KrpHwcl5uVoLE6TRaJRFg7/qUvpJDcKqx3LLLCsNbaBlISfRDeFETrjjipTetkX70RvtS7FfGUN58gCQ==", + "dependencies": { + "@citation-js/date": "^0.5.0", + "@citation-js/name": "^0.4.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@citation-js/core": "^0.7.0" + } + }, + "node_modules/@citation-js/plugin-bibtex": { + "version": "0.7.14", + "resolved": "https://registry.npmjs.org/@citation-js/plugin-bibtex/-/plugin-bibtex-0.7.14.tgz", + "integrity": "sha512-xHOHqhF6dthLRv46N9U+mQgYLiiWQHLvQWK9+mcBKz+/3NWge62Xb1oBouNWwLEPd5FV/8gp9fp7SOp93T0dUg==", + "dependencies": { + "@citation-js/date": "^0.5.0", + "@citation-js/name": "^0.4.2", + "moo": "^0.5.1" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@citation-js/core": "^0.7.0" + } + }, + "node_modules/@citation-js/plugin-csl": { + "version": "0.7.14", + "resolved": "https://registry.npmjs.org/@citation-js/plugin-csl/-/plugin-csl-0.7.14.tgz", + "integrity": "sha512-7AKB8lMz1IqdtoE33NnWIpteLYMuSl3xqT+Cax7sQKwAIJEoq2HBmb43Ja8xQQ36nREAupQJv1V6XksIAmYnCg==", + "dependencies": { + "@citation-js/date": "^0.5.0", + "citeproc": "^2.4.6" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@citation-js/core": "^0.7.0" + } + }, + "node_modules/@clack/core": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.5.0.tgz", + "integrity": "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.11.0.tgz", + "integrity": "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==", + "license": "MIT", + "dependencies": { + "@clack/core": "0.5.0", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz", + "integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.0.tgz", + "integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", + "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", + "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", + "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", + "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", + "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", + "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", + "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", + "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", + "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", + "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", + "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", + "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", + "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", + "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", + "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", + "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", + "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", + "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.4.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", + "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", + "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", + "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@myriaddreamin/rehype-typst": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/rehype-typst/-/rehype-typst-0.6.0.tgz", + "integrity": "sha512-WQpr2j7OYtyc2Q1WOqi1wzYrBaeuAWT1Cn1Ki6VPsKoWH7O86/+zKOqltdgMpYdkav1uXYs3RfO5Ir8h0WkZyQ==", + "license": "MIT", + "dependencies": { + "@myriaddreamin/typst-ts-node-compiler": "^0.6.0", + "@types/hast": "^3.0.0", + "@types/katex": "^0.16.0", + "hast-util-from-html-isomorphic": "^2.0.0", + "hast-util-to-text": "^4.0.0", + "https-proxy-agent": "^7.0.2", + "unist-util-visit-parents": "^6.0.0", + "vfile": "^6.0.0" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler/-/typst-ts-node-compiler-0.6.0.tgz", + "integrity": "sha512-C40MzRKZ8pDWzrS7VOtTypGyFaHTuZFFx3o/uQ6ryS2GqZkK3vGox4lIpR7ct11UHiAjQNR3LFQ5WjQ7P3niBQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@myriaddreamin/typst-ts-node-compiler-android-arm-eabi": "0.6.0", + "@myriaddreamin/typst-ts-node-compiler-android-arm64": "0.6.0", + "@myriaddreamin/typst-ts-node-compiler-darwin-arm64": "0.6.0", + "@myriaddreamin/typst-ts-node-compiler-darwin-x64": "0.6.0", + "@myriaddreamin/typst-ts-node-compiler-linux-arm-gnueabihf": "0.6.0", + "@myriaddreamin/typst-ts-node-compiler-linux-arm64-gnu": "0.6.0", + "@myriaddreamin/typst-ts-node-compiler-linux-arm64-musl": "0.6.0", + "@myriaddreamin/typst-ts-node-compiler-linux-x64-gnu": "0.6.0", + "@myriaddreamin/typst-ts-node-compiler-linux-x64-musl": "0.6.0", + "@myriaddreamin/typst-ts-node-compiler-win32-arm64-msvc": "0.6.0", + "@myriaddreamin/typst-ts-node-compiler-win32-x64-msvc": "0.6.0" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-android-arm-eabi": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-android-arm-eabi/-/typst-ts-node-compiler-android-arm-eabi-0.6.0.tgz", + "integrity": "sha512-Gfrf9Fky5iYtutGWYwqRC4gvllK1p1q6YELCbycI47NCFptONI++3dfub4PixWRn9m8NrmaNFIBQSyLHWsvbLw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-android-arm64": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-android-arm64/-/typst-ts-node-compiler-android-arm64-0.6.0.tgz", + "integrity": "sha512-EzO6W4xELC6at30hSkkOp5BveszwCmTWceu0PMh6lPxeQF1vnjxUK60MLFfJ40zb1TOXsj4l2pbdBoGqLznC1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-darwin-arm64": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-darwin-arm64/-/typst-ts-node-compiler-darwin-arm64-0.6.0.tgz", + "integrity": "sha512-8tR1GqFr+q4rNZm8z0230eF7eRCVCSaUefDw1+Qw8EnDPIvwEP8bT0/u2YqHmxthfVfs1msV8hDpRKVeBa6E3g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-darwin-x64": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-darwin-x64/-/typst-ts-node-compiler-darwin-x64-0.6.0.tgz", + "integrity": "sha512-eytv5ifNvhux9naqEb+4pu1Z4ghQBWiybP4lT/aB44I9H5xjmtYQxiKwNBz54am6RLiMcyLpw/xFdeB13bsdWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-linux-arm-gnueabihf": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-linux-arm-gnueabihf/-/typst-ts-node-compiler-linux-arm-gnueabihf-0.6.0.tgz", + "integrity": "sha512-b20do+PmbsYq07QlTW8uLU3MaoAm6DSCx1IrCEAlUpNH+/29x51Rvyq5JeRrYVOtkR6BxPzyhCM79r5jOkewbQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-linux-arm64-gnu": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-linux-arm64-gnu/-/typst-ts-node-compiler-linux-arm64-gnu-0.6.0.tgz", + "integrity": "sha512-AM92MVfEbISYvIA8NwPl2l78nOZIh5er5qQ/NZw2kx4YgTKgklJINEPHXm/aAk7PcpX7G10P45D/xGd5KpX9HQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-linux-arm64-musl": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-linux-arm64-musl/-/typst-ts-node-compiler-linux-arm64-musl-0.6.0.tgz", + "integrity": "sha512-nSokVjKQR0ZH7Jub53q7he89+m72RSbL97exSedkB4OdZAi9tAxGFIgceGJuN5AC+DiNtMmqsPwlJiERUjgPhQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-linux-x64-gnu": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-linux-x64-gnu/-/typst-ts-node-compiler-linux-x64-gnu-0.6.0.tgz", + "integrity": "sha512-3Y2ORiYuCTzQkiHSCHWiGuzTBbNvHTB2lCr3DDsZdvTZ2LZMifPwwICN26X3tlnt6GyC3o/ejZBcMnfNqYbdCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-linux-x64-musl": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-linux-x64-musl/-/typst-ts-node-compiler-linux-x64-musl-0.6.0.tgz", + "integrity": "sha512-b+kTb4vI0sFTkPtIAUE+UqjhZ4kTiAkh4F/2QKnFitAsURlLcRwTcMc9NJm6SXwW1OM0nPj1IGTfUOFpqLOIPQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-win32-arm64-msvc": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-win32-arm64-msvc/-/typst-ts-node-compiler-win32-arm64-msvc-0.6.0.tgz", + "integrity": "sha512-04omIPrXSsRKu4XDhj1WZ9uMjdcFcejBGzyOEV351HVDqg5kxgDB32iG3oLySLrzEcbi9WwI5Si46WrW0wh4mA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@myriaddreamin/typst-ts-node-compiler-win32-x64-msvc": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@myriaddreamin/typst-ts-node-compiler-win32-x64-msvc/-/typst-ts-node-compiler-win32-x64-msvc-0.6.0.tgz", + "integrity": "sha512-w5UEmXSZ+Eg7Y04EzjgqeHUo7P8bNz9S1c4CUfLrbfZvbTmYNjA0WeqZJ3+tV03BSVxiPiVhrfo95sLqKISNrg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git/-/simple-git-0.1.19.tgz", + "integrity": "sha512-jMxvwzkKzd3cXo2EB9GM2ic0eYo2rP/BS6gJt6HnWbsDO1O8GSD4k7o2Cpr2YERtMpGF/MGcDfsfj2EbQPtrXw==", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@napi-rs/simple-git-android-arm-eabi": "0.1.19", + "@napi-rs/simple-git-android-arm64": "0.1.19", + "@napi-rs/simple-git-darwin-arm64": "0.1.19", + "@napi-rs/simple-git-darwin-x64": "0.1.19", + "@napi-rs/simple-git-freebsd-x64": "0.1.19", + "@napi-rs/simple-git-linux-arm-gnueabihf": "0.1.19", + "@napi-rs/simple-git-linux-arm64-gnu": "0.1.19", + "@napi-rs/simple-git-linux-arm64-musl": "0.1.19", + "@napi-rs/simple-git-linux-powerpc64le-gnu": "0.1.19", + "@napi-rs/simple-git-linux-s390x-gnu": "0.1.19", + "@napi-rs/simple-git-linux-x64-gnu": "0.1.19", + "@napi-rs/simple-git-linux-x64-musl": "0.1.19", + "@napi-rs/simple-git-win32-arm64-msvc": "0.1.19", + "@napi-rs/simple-git-win32-x64-msvc": "0.1.19" + } + }, + "node_modules/@napi-rs/simple-git-android-arm-eabi": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-android-arm-eabi/-/simple-git-android-arm-eabi-0.1.19.tgz", + "integrity": "sha512-XryEH/hadZ4Duk/HS/HC/cA1j0RHmqUGey3MsCf65ZS0VrWMqChXM/xlTPWuY5jfCc/rPubHaqI7DZlbexnX/g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-android-arm64": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-android-arm64/-/simple-git-android-arm64-0.1.19.tgz", + "integrity": "sha512-ZQ0cPvY6nV9p7zrR9ZPo7hQBkDAcY/CHj3BjYNhykeUCiSNCrhvwX+WEeg5on8M1j4d5jcI/cwVG2FslfiByUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-darwin-arm64": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-darwin-arm64/-/simple-git-darwin-arm64-0.1.19.tgz", + "integrity": "sha512-viZB5TYgjA1vH+QluhxZo0WKro3xBA+1xSzYx8mcxUMO5gnAoUMwXn0ZO/6Zy6pai+aGae+cj6XihGnrBRu3Pg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-darwin-x64": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-darwin-x64/-/simple-git-darwin-x64-0.1.19.tgz", + "integrity": "sha512-6dNkzSNUV5X9rsVYQbpZLyJu4Gtkl2vNJ3abBXHX/Etk0ILG5ZasO3ncznIANZQpqcbn/QPHr49J2QYAXGoKJA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-freebsd-x64": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-freebsd-x64/-/simple-git-freebsd-x64-0.1.19.tgz", + "integrity": "sha512-sB9krVIchzd20FjI2ZZ8FDsTSsXLBdnwJ6CpeVyrhXHnoszfcqxt49ocZHujAS9lMpXq7i2Nv1EXJmCy4KdhwA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-linux-arm-gnueabihf": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-arm-gnueabihf/-/simple-git-linux-arm-gnueabihf-0.1.19.tgz", + "integrity": "sha512-6HPn09lr9N1n5/XKfP8Np53g4fEXVxOFqNkS6rTH3Rm1lZHdazTRH62RggXLTguZwjcE+MvOLvoTIoR5kAS8+g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-linux-arm64-gnu": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-arm64-gnu/-/simple-git-linux-arm64-gnu-0.1.19.tgz", + "integrity": "sha512-G0gISckt4cVDp3oh5Z6PV3GHJrJO6Z8bIS+9xA7vTtKdqB1i5y0n3cSFLlzQciLzhr+CajFD27doW4lEyErQ/Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-linux-arm64-musl": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-arm64-musl/-/simple-git-linux-arm64-musl-0.1.19.tgz", + "integrity": "sha512-OwTRF+H4IZYxmDFRi1IrLMfqbdIpvHeYbJl2X94NVsLVOY+3NUHvEzL3fYaVx5urBaMnIK0DD3wZLbcueWvxbA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-linux-powerpc64le-gnu": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-powerpc64le-gnu/-/simple-git-linux-powerpc64le-gnu-0.1.19.tgz", + "integrity": "sha512-p7zuNNVyzpRvkCt2RIGv9FX/WPcPbZ6/FRUgUTZkA2WU33mrbvNqSi4AOqCCl6mBvEd+EOw5NU4lS9ORRJvAEg==", + "cpu": [ + "powerpc64le" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-linux-s390x-gnu": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-s390x-gnu/-/simple-git-linux-s390x-gnu-0.1.19.tgz", + "integrity": "sha512-6N2vwJUPLiak8GLrS0a3is0gSb0UwI2CHOOqtvQxPmv+JVI8kn3vKiUscsktdDb0wGEPeZ8PvZs0y8UWix7K4g==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-linux-x64-gnu": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-x64-gnu/-/simple-git-linux-x64-gnu-0.1.19.tgz", + "integrity": "sha512-61YfeO1J13WK7MalLgP3QlV6of2rWnVw1aqxWkAgy/lGxoOFSJ4Wid6ANVCEZk4tJpPX/XNeneqkUz5xpeb2Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-linux-x64-musl": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-x64-musl/-/simple-git-linux-x64-musl-0.1.19.tgz", + "integrity": "sha512-cCTWNpMJnN3PrUBItWcs3dQKCydsIasbrS3laMzq8k7OzF93Zrp2LWDTPlLCO9brbBVpBzy2Qk5Xg9uAfe/Ukw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-win32-arm64-msvc": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-win32-arm64-msvc/-/simple-git-win32-arm64-msvc-0.1.19.tgz", + "integrity": "sha512-sWavb1BjeLKKBA+PbTsRSSzVNfb7V/dOpaJvkgR5d2kWFn/AHmCZHSSj/3nyZdYf0BdDC+DIvqk3daAEZ6QMVw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/simple-git-win32-x64-msvc": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-win32-x64-msvc/-/simple-git-win32-x64-msvc-0.1.19.tgz", + "integrity": "sha512-FmNuPoK4+qwaSCkp8lm3sJlrxk374enW+zCE5ZksXlZzj/9BDJAULJb5QUJ7o9Y8A/G+d8LkdQLPBE2Jaxe5XA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pixi/colord": { + "version": "2.9.6", + "resolved": "https://registry.npmjs.org/@pixi/colord/-/colord-2.9.6.tgz", + "integrity": "sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA==", + "license": "MIT" + }, + "node_modules/@shikijs/core": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.26.2.tgz", + "integrity": "sha512-ORyu3MrY7dCC7FDLDsFSkBM9b/AT9/Y8rH+UQ07Rtek48pp0ZhQOMPTKolqszP4bBCas6FqTZQYt18BBamVl/g==", + "dependencies": { + "@shikijs/engine-javascript": "1.26.2", + "@shikijs/engine-oniguruma": "1.26.2", + "@shikijs/types": "1.26.2", + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.26.2.tgz", + "integrity": "sha512-ngkIu9swLVo9Zt5QBtz5Sk08vmPcwuj01r7pPK/Zjmo2U2WyKMK4WMUMmkdQiUacdcLth0zt8u1onp4zhkFXKQ==", + "dependencies": { + "@shikijs/types": "1.26.2", + "@shikijs/vscode-textmate": "^10.0.1", + "oniguruma-to-es": "^1.0.0" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.26.2.tgz", + "integrity": "sha512-mlN7Qrs+w60nKrd7at7XkXSwz6728Pe34taDmHrG6LRHjzCqQ+ysg+/AT6/D2LMk0s2lsr71DjpI73430QP4/w==", + "dependencies": { + "@shikijs/types": "1.26.2", + "@shikijs/vscode-textmate": "^10.0.1" + } + }, + "node_modules/@shikijs/langs": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.26.2.tgz", + "integrity": "sha512-o5cdPycB2Kw3IgncHxWopWPiTkjAj7dG01fLkkUyj3glb5ftxL/Opecq9F54opMlrgXy7ZIqDERvFLlUzsCOuA==", + "dependencies": { + "@shikijs/types": "1.26.2" + } + }, + "node_modules/@shikijs/themes": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.26.2.tgz", + "integrity": "sha512-y4Pn6PM5mODz/e3yF6jAUG7WLKJzqL2tJ5qMJCUkMUB1VRgtQVvoa1cHh7NScryGXyrYGJ8nPnRDhdv2rw0xpA==", + "dependencies": { + "@shikijs/types": "1.26.2" + } + }, + "node_modules/@shikijs/types": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.26.2.tgz", + "integrity": "sha512-PO2jucx2FIdlLBPYbIUlMtWSLs5ulcRcuV93cR3T65lkK5SJP4MGBRt9kmWGXiQc0f7+FHj/0BEawditZcI/fQ==", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz", + "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==" + }, + "node_modules/@shuding/opentype.js": { + "version": "1.4.0-beta.0", + "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz", + "integrity": "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==", + "license": "MIT", + "dependencies": { + "fflate": "^0.7.3", + "string.prototype.codepointat": "^0.2.1" + }, + "bin": { + "ot": "bin/ot" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tweenjs/tween.js": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-25.0.0.tgz", + "integrity": "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A==", + "license": "MIT" + }, + "node_modules/@types/css-font-loading-module": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@types/css-font-loading-module/-/css-font-loading-module-0.0.12.tgz", + "integrity": "sha512-x2tZZYkSxXqWvTDgveSynfjq/T2HyiZHXb00j/+gy19yp70PHCizM48XFdjBCWH7eHBD0R5i/pw9yMBP/BH5uA==", + "license": "MIT" + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "dev": true, + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.5.tgz", + "integrity": "sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A==", + "dev": true + }, + "node_modules/@types/d3-axis": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.2.tgz", + "integrity": "sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==", + "dev": true, + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.2.tgz", + "integrity": "sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==", + "dev": true, + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.2.tgz", + "integrity": "sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw==", + "dev": true + }, + "node_modules/@types/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==", + "dev": true + }, + "node_modules/@types/d3-contour": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.2.tgz", + "integrity": "sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==", + "dev": true, + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz", + "integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==", + "dev": true + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.2.tgz", + "integrity": "sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg==", + "dev": true + }, + "node_modules/@types/d3-drag": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.2.tgz", + "integrity": "sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==", + "dev": true, + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw==", + "dev": true + }, + "node_modules/@types/d3-ease": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", + "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==", + "dev": true + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.2.tgz", + "integrity": "sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==", + "dev": true, + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.4.tgz", + "integrity": "sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw==", + "dev": true + }, + "node_modules/@types/d3-format": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz", + "integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==", + "dev": true + }, + "node_modules/@types/d3-geo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.3.tgz", + "integrity": "sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==", + "dev": true, + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-9hjRTVoZjRFR6xo8igAJyNXQyPX6Aq++Nhb5ebrUF414dv4jr2MitM2fWiOY475wa3Za7TOS2Gh9fmqEhLTt0A==", + "dev": true + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==", + "dev": true, + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz", + "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==", + "dev": true + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.0.tgz", + "integrity": "sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw==", + "dev": true + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.2.tgz", + "integrity": "sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw==", + "dev": true + }, + "node_modules/@types/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ==", + "dev": true + }, + "node_modules/@types/d3-scale": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", + "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", + "dev": true, + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==", + "dev": true + }, + "node_modules/@types/d3-selection": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.5.tgz", + "integrity": "sha512-xCB0z3Hi8eFIqyja3vW8iV01+OHGYR2di/+e+AiOcXIOrY82lcvWW8Ke1DYE/EUVMsBl4Db9RppSBS3X1U6J0w==", + "dev": true + }, + "node_modules/@types/d3-shape": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz", + "integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==", + "dev": true, + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==", + "dev": true + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.0.tgz", + "integrity": "sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw==", + "dev": true + }, + "node_modules/@types/d3-timer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz", + "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==", + "dev": true + }, + "node_modules/@types/d3-transition": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.3.tgz", + "integrity": "sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==", + "dev": true, + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.3.tgz", + "integrity": "sha512-OWk1yYIIWcZ07+igN6BeoG6rqhnJ/pYe+R1qWFM2DtW49zsoSjgb9G5xB0ZXA8hh2jAzey1XuRmMSoXdKw8MDA==", + "dev": true, + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/earcut": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.4.tgz", + "integrity": "sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.3.tgz", + "integrity": "sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/geojson": { + "version": "7946.0.10", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", + "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==", + "dev": true + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true + }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==" + }, + "node_modules/@types/mathjax": { + "version": "0.0.40", + "resolved": "https://registry.npmjs.org/@types/mathjax/-/mathjax-0.0.40.tgz", + "integrity": "sha512-rHusx08LCg92WJxrsM3SPjvLTSvK5C+gealtSuhKbEOcUZfWlwigaFoPLf6Dfxhg4oryN5qP9Sj7zOQ4HYXINw==" + }, + "node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "22.15.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.23.tgz", + "integrity": "sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/pretty-time": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/pretty-time/-/pretty-time-1.1.5.tgz", + "integrity": "sha512-5yl+BYwmnRWZb783W8YYoHXvPY8q/rp7ctHBVaGBB9RxlzGpHNJ72tGQMK7TrUSnxzl1dbDcBDuBCSbtfnSQGg==", + "dev": true + }, + "node_modules/@types/source-map-support": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@types/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-tgVP2H469x9zq34Z0m/fgPewGhg/MLClalNOiPIzQlXrSS2YrKu/xCdSCKnEDwkFha51VKEKB6A9wW26/ZNwzA==", + "dev": true, + "dependencies": { + "source-map": "^0.6.0" + } + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@webgpu/types": { + "version": "0.1.61", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.61.tgz", + "integrity": "sha512-w2HbBvH+qO19SB5pJOJFKs533CdZqxl3fcGonqL321VHkW7W/iBo6H8bjDy6pr/+pbMwIu5dnuaAxH7NxBqUrQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-truncate": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ansi-truncate/-/ansi-truncate-1.2.0.tgz", + "integrity": "sha512-/SLVrxNIP8o8iRHjdK3K9s2hDqdvb86NEjZOAB6ecWFsOo+9obaby97prnvAPn6j7ExXCpbvtlJFYPkkspg4BQ==", + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^1.2.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "peer": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/citeproc": { + "version": "2.4.63", + "resolved": "https://registry.npmjs.org/citeproc/-/citeproc-2.4.63.tgz", + "integrity": "sha512-68F95Bp4UbgZU/DBUGQn0qV3HDZLCdI9+Bb2ByrTaNJDL5VEm9LqaiNaxljsvoaExSLEXe1/r6n2Z06SCzW3/Q==" + }, + "node_modules/cli-spinner": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/cli-spinner/-/cli-spinner-0.2.10.tgz", + "integrity": "sha512-U0sSQ+JJvSLi1pAYuJykwiA8Dsr15uHEy85iCJ6A+0DjVxivr3d+N2Wjvodeg89uP5K6TswFkKBfAD7B3YSn/Q==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "peer": true + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/css-background-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/css-background-parser/-/css-background-parser-0.1.0.tgz", + "integrity": "sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==", + "license": "MIT" + }, + "node_modules/css-box-shadow": { + "version": "1.0.0-3", + "resolved": "https://registry.npmjs.org/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz", + "integrity": "sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==", + "license": "MIT" + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-gradient-parser": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/css-gradient-parser/-/css-gradient-parser-0.0.16.tgz", + "integrity": "sha512-3O5QdqgFRUbXvK1x5INf1YkBz1UKSWqrd63vWsum8MNHDBYD5urm3QtxZbKU259OrEXNM26lP/MPY3d1IGkBgA==", + "engines": { + "node": ">=16" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "dependencies": { + "robust-predicates": "^3.0.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "license": "MIT" + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "node_modules/esbuild-sass-plugin": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-3.3.1.tgz", + "integrity": "sha512-SnO1ls+d52n6j8gRRpjexXI8MsHEaumS0IdDHaYM29Y6gakzZYMls6i9ql9+AWMSQk/eryndmUpXEgT34QrX1A==", + "dependencies": { + "resolve": "^1.22.8", + "safe-identifier": "^0.4.2", + "sass": "^1.71.1" + }, + "peerDependencies": { + "esbuild": ">=0.20.1", + "sass-embedded": "^1.71.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-string-truncated-width": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-1.2.1.tgz", + "integrity": "sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", + "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/fetch-ponyfill": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-7.1.0.tgz", + "integrity": "sha512-FhbbL55dj/qdVO3YNK7ZEkshvj3eQ7EuIGV2I6ic/2YiocvyWv+7jg2s4AyS0wdRU75s3tA8ZxI/xPigb0v5Aw==", + "dependencies": { + "node-fetch": "~2.6.1" + } + }, + "node_modules/fetch-ponyfill/node_modules/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/fetch-ponyfill/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/fetch-ponyfill/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/fetch-ponyfill/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/fflate": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", + "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flexsearch": { + "version": "0.7.43", + "resolved": "https://registry.npmjs.org/flexsearch/-/flexsearch-0.7.43.tgz", + "integrity": "sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg==" + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/gifuct-js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/gifuct-js/-/gifuct-js-2.1.2.tgz", + "integrity": "sha512-rI2asw77u0mGgwhV3qA+OEgYqaDn5UNqgs+Bx0FGwSpuqfYn+Ir6RQY5ENNQ8SbIiG/m5gVa7CD5RriO4f4Lsg==", + "license": "MIT", + "dependencies": { + "js-binary-schema-parser": "^2.0.3" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-from-dom": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.0.tgz", + "integrity": "sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==", + "dependencies": { + "@types/hast": "^3.0.0", + "hastscript": "^8.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz", + "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html-isomorphic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz", + "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-dom": "^5.0.0", + "hast-util-from-html": "^2.0.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/hast-util-from-html/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/hast-util-heading-rank": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz", + "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.1.tgz", + "integrity": "sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/hast-util-to-html/node_modules/property-information": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", + "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/property-information": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", + "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.0.tgz", + "integrity": "sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hex-rgb": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz", + "integrity": "sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==" + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-absolute-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", + "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz", + "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==", + "license": "MIT" + }, + "node_modules/js-binary-schema-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz", + "integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/katex": { + "version": "0.16.21", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", + "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/linebreak": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz", + "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==", + "license": "MIT", + "dependencies": { + "base64-js": "0.0.8", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/linebreak/node_modules/base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mathjax-full": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz", + "integrity": "sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==", + "dependencies": { + "esm": "^3.2.25", + "mhchemparser": "^4.1.0", + "mj-context-menu": "^0.6.1", + "speech-rule-engine": "^4.0.6" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "longest-streak": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.1.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", + "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.0.0.tgz", + "integrity": "sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^5.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-newline-to-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-newline-to-break/-/mdast-util-newline-to-break-2.0.0.tgz", + "integrity": "sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-find-and-replace": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz", + "integrity": "sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mhchemparser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.2.1.tgz", + "integrity": "sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==" + }, + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", + "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.0.0.tgz", + "integrity": "sha512-iJ2Q28vBoEovLN5o3GO12CpqorQRYDPT+p4zW50tGwTfJB+iv/VnB6Ini+gqa24K97DwptMBBIvVX6Bjk49oyQ==", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", + "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromorph": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/micromorph/-/micromorph-0.4.5.tgz", + "integrity": "sha512-Erasr0xiDvDeEhh7B/k7RFTwwfaAX10D7BMorNpokkwDh6XsRLYWDPaWF1m5JQeMSkGdqlEtQ8s68NcdDWuGgw==" + }, + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mj-context-menu": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz", + "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==" + }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/oniguruma-to-es": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-1.0.0.tgz", + "integrity": "sha512-kihvp0O4lFwf5tZMkfanwQLIZ9ORe9OeOFgZonH0BQeThgwfJiaZFeOfvvJVnJIM9TiVmx0RDD35hUJDR0++rQ==", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^5.1.1", + "regex-recursion": "^5.1.1" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, + "node_modules/parse-css-color": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/parse-css-color/-/parse-css-color-0.2.1.tgz", + "integrity": "sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.1.4", + "hex-rgb": "^4.1.0" + } + }, + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-latin/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + }, + "node_modules/parse-svg-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", + "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==", + "license": "MIT" + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==" + }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pixi.js": { + "version": "8.9.2", + "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-8.9.2.tgz", + "integrity": "sha512-oLFBkOOA/O6OpT5T8o05AxgZB9x9yWNzEQ+WTNZZFoCvfU2GdT4sFTjpVFuHQzgZPmAm/1IFhKdNiXVnlL8PRw==", + "license": "MIT", + "dependencies": { + "@pixi/colord": "^2.9.6", + "@types/css-font-loading-module": "^0.0.12", + "@types/earcut": "^2.1.4", + "@webgpu/types": "^0.1.40", + "@xmldom/xmldom": "^0.8.10", + "earcut": "^2.2.4", + "eventemitter3": "^5.0.1", + "gifuct-js": "^2.1.2", + "ismobilejs": "^1.1.1", + "parse-svg-path": "^0.1.2" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/preact": { + "version": "10.26.7", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.7.tgz", + "integrity": "sha512-43xS+QYc1X1IPbw03faSgY6I6OYWcLrJRv3hU0+qMOfh/XCHcP0MX2CVjNARYR2cC/guu975sta4OcjlczxD7g==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/preact-render-to-string": { + "version": "6.5.13", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.5.13.tgz", + "integrity": "sha512-iGPd+hKPMFKsfpR2vL4kJ6ZPcFIoWZEcBf0Dpm3zOpdVvj77aY8RlLiQji5OMrngEyaxGogeakTb54uS2FvA6w==", + "peerDependencies": { + "preact": ">=10" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-bytes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-7.0.0.tgz", + "integrity": "sha512-U5otLYPR3L0SVjHGrkEUx5mf7MxV2ceXeE7VwWPk+hyzC5drNohsOGNPDZqxCqyX1lkbEN4kl1LiI8QFd7r0ZA==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + }, + "node_modules/regex": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/regex/-/regex-5.1.1.tgz", + "integrity": "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-5.1.1.tgz", + "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==", + "dependencies": { + "regex": "^5.1.1", + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==" + }, + "node_modules/rehype-autolink-headings": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz", + "integrity": "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==", + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-citation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/rehype-citation/-/rehype-citation-2.3.1.tgz", + "integrity": "sha512-bwSuB5SMilyS/vT7K7ByTxjeKda4GWJin6dHKKZyp5O2z+uLk2ySG7a5/IOmuGovoajN9AcYxTRE4kUiVTk51g==", + "license": "MIT", + "dependencies": { + "@citation-js/core": "^0.7.14", + "@citation-js/date": "^0.5.1", + "@citation-js/name": "^0.4.2", + "@citation-js/plugin-bibjson": "^0.7.14", + "@citation-js/plugin-bibtex": "^0.7.14", + "@citation-js/plugin-csl": "^0.7.14", + "citeproc": "^2.4.63", + "cross-fetch": "^4.0.0", + "hast-util-from-dom": "^5.0.0", + "hast-util-from-parse5": "^8.0.1", + "js-yaml": "^4.1.0", + "parse5": "^7.1.2", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0" + } + }, + "node_modules/rehype-katex": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz", + "integrity": "sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/katex": "^0.16.0", + "hast-util-from-html-isomorphic": "^2.0.0", + "hast-util-to-text": "^4.0.0", + "katex": "^0.16.0", + "unist-util-visit-parents": "^6.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-mathjax": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/rehype-mathjax/-/rehype-mathjax-7.1.0.tgz", + "integrity": "sha512-mJHNpoqCC5UZ24OKx0wNjlzV18qeJz/Q/LtEjxXzt8vqrZ1Z3GxQnVrHcF5/PogcXUK8cWwJ4U/LWOQWEiABHw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mathjax": "^0.0.40", + "hast-util-to-text": "^4.0.0", + "hastscript": "^9.0.0", + "mathjax-full": "^3.0.0", + "unified": "^11.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-mathjax/node_modules/hastscript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.0.tgz", + "integrity": "sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.0.tgz", + "integrity": "sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-pretty-code": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/rehype-pretty-code/-/rehype-pretty-code-0.14.1.tgz", + "integrity": "sha512-IpG4OL0iYlbx78muVldsK86hdfNoht0z63AP7sekQNW2QOTmjxB7RbTO+rhIYNGRljgHxgVZoPwUl6bIC9SbjA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.4", + "hast-util-to-string": "^3.0.0", + "parse-numeric-range": "^1.3.0", + "rehype-parse": "^9.0.0", + "unified": "^11.0.5", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "shiki": "^1.0.0 || ^2.0.0 || ^3.0.0" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", + "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", + "dependencies": { + "@types/hast": "^3.0.0", + "github-slugger": "^2.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz", + "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", + "dependencies": { + "@types/mdast": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-breaks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-breaks/-/remark-breaks-4.0.0.tgz", + "integrity": "sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-newline-to-break": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-math": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz", + "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-math": "^3.0.0", + "micromark-extension-math": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.1.0.tgz", + "integrity": "sha512-LDPXg95346bqFZnDMHo0S7Rq5p64+B+N8Vz733+wPMDtwb9rCOs9LIdIEhrUOU+TAywX9St+ocQWJt8wrzivcQ==", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.4.tgz", + "integrity": "sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.4.tgz", + "integrity": "sha512-3AATrtStMgxYjkit02/Ix8vx/P7qderYG6DHjmehfk5jiw53OaWVScmcGJSwp/d77kAkxDQ+Y0r+79VynGmrkw==", + "peer": true, + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", + "immutable": "^4.0.0", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.79.4", + "sass-embedded-android-arm64": "1.79.4", + "sass-embedded-android-ia32": "1.79.4", + "sass-embedded-android-riscv64": "1.79.4", + "sass-embedded-android-x64": "1.79.4", + "sass-embedded-darwin-arm64": "1.79.4", + "sass-embedded-darwin-x64": "1.79.4", + "sass-embedded-linux-arm": "1.79.4", + "sass-embedded-linux-arm64": "1.79.4", + "sass-embedded-linux-ia32": "1.79.4", + "sass-embedded-linux-musl-arm": "1.79.4", + "sass-embedded-linux-musl-arm64": "1.79.4", + "sass-embedded-linux-musl-ia32": "1.79.4", + "sass-embedded-linux-musl-riscv64": "1.79.4", + "sass-embedded-linux-musl-x64": "1.79.4", + "sass-embedded-linux-riscv64": "1.79.4", + "sass-embedded-linux-x64": "1.79.4", + "sass-embedded-win32-arm64": "1.79.4", + "sass-embedded-win32-ia32": "1.79.4", + "sass-embedded-win32-x64": "1.79.4" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.4.tgz", + "integrity": "sha512-YOVpDGDcwWUQvktpJhYo4zOkknDpdX6ALpaeHDTX6GBUvnZfx+Widh76v+QFUhiJQ/I/hndXg1jv/PKilOHRrw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.4.tgz", + "integrity": "sha512-0JAZ8TtXYv9yI3Yasaq03xvo7DLJOmD+Exb30oJKxXcWTAV9TB0ZWKoIRsFxbCyPxyn7ouxkaCEXQtaTRKrmfw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-ia32": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.4.tgz", + "integrity": "sha512-IjO3RoyvNN84ZyfAR5s/a8TIdNPfClb7CLGrswB3BN/NElYIJUJMVHD6+Y8W9QwBIZ8DrK1IdLFSTV8nn82xMA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.4.tgz", + "integrity": "sha512-uOT8nXmKxSwuIdcqvElVWBFcm/+YcIvmwfoKbpuuSOSxUe9eqFzxo+fk7ILhynzf6FBlvRUH5DcjGj+sXtCc3w==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.4.tgz", + "integrity": "sha512-W2FQoj3Z2J2DirNs3xSBVvrhMuqLnsqvOPulxOkhL/074+faKOZZnPx2tZ5zsHbY97SonciiU0SV0mm98xI42w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.4.tgz", + "integrity": "sha512-pcYtbN1VUAAcfgyHeX8ySndDWGjIvcq6rldduktPbGGuAlEWFDfnwjTbv0hS945ggdzZ6TFnaFlLEDr0SjKzBA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.4.tgz", + "integrity": "sha512-ir8CFTfc4JLx/qCP8LK1/3pWv35nRyAQkUK7lBIKM6hWzztt64gcno9rZIk4SpHr7Z/Bp1IYWWRS4ZT+4HmsbA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.4.tgz", + "integrity": "sha512-H/XEE3rY7c+tY0qDaELjPjC6VheAhBo1tPJQ6UHoBEf8xrbT/RT3dWiIS8grp9Vk54RCn05BEB/+POaljvvKGA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.4.tgz", + "integrity": "sha512-XIVn2mCuA422SR2kmKjF6jhjMs1Vrt1DbZ/ktSp+eR0sU4ugu2htg45GajiUFSKKRj7Sc+cBdThq1zPPsDLf1w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-ia32": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.4.tgz", + "integrity": "sha512-3nqZxV4nuUTb1ahLexVl4hsnx1KKwiGdHEf1xHWTZai6fYFMcwyNPrHySCQzFHqb5xiqSpPzzrKjuDhF6+guuQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.4.tgz", + "integrity": "sha512-HnbU1DEiQdUayioNzxh2WlbTEgQRBPTgIIvof8J63QLmVItUqE7EkWYkSUy4RhO+8NsuN9wzGmGTzFBvTImU7g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.4.tgz", + "integrity": "sha512-C6qX06waPEfDgOHR8jXoYxl0EtIXOyBDyyonrLO3StRjWjGx7XMQj2hA/KXSsV+Hr71fBOsaViosqWXPzTbEiQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-ia32": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.4.tgz", + "integrity": "sha512-y5b0fdOPWyhj4c+mc88GvQiC5onRH1V0iNaWNjsiZ+L4hHje6T98nDLrCJn0fz5GQnXjyLCLZduMWbfV0QjHGg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.4.tgz", + "integrity": "sha512-G2M5ADMV9SqnkwpM0S+UzDz7xR2njCOhofku/sDMZABzAjQQWTsAykKoGmzlT98fTw2HbNhb6u74umf2WLhCfw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.4.tgz", + "integrity": "sha512-kQm8dCU3DXf7DtUGWYPiPs03KJYKvFeiZJHhSx993DCM8D2b0wCXWky0S0Z46gf1sEur0SN4Lvnt1WczTqxIBw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.4.tgz", + "integrity": "sha512-GaTI/mXYWYSzG5wxtM4H2cozLpATyh+4l+rO9FFKOL8e1sUOLAzTeRdU2nSBYCuRqsxRuTZIwCXhSz9Q3NRuNA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.4.tgz", + "integrity": "sha512-f9laGkqHgC01h99Qt4LsOV+OLMffjvUcTu14hYWqMS9QVX5a4ihMwpf1NoAtTUytb7cVF3rYY/NVGuXt6G3ppQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.4.tgz", + "integrity": "sha512-cidBvtaA2cJ6dNlwQEa8qak+ezypurzKs0h0QAHLH324+j/6Jum7LCnQhZRPYJBFjHl+WYd7KwzPnJ2X5USWnQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-ia32": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.4.tgz", + "integrity": "sha512-hexdmNTIZGTKNTzlMcdvEXzYuxOJcY89zqgsf45aQ2YMy4y2M8dTOxRI/Vz7p4iRxVp1Jow6LCtaLHrNI2Ordg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.4.tgz", + "integrity": "sha512-73yrpiWIbti6DkxhWURklkgSLYKfU9itDmvHxB+oYSb4vQveIApqTwSyTOuIUb/6Da/EsgEpdJ4Lbj4sLaMZWA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/satori": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/satori/-/satori-0.13.1.tgz", + "integrity": "sha512-FlXblaCRDOONmz4JSIG9lUxSIklBZsMVwfLkvXv0MaHa3H6GWZDZccpcCeLqdQ6RjBkYMSh6zZDxkkBFJ4M61A==", + "license": "MPL-2.0", + "dependencies": { + "@shuding/opentype.js": "1.4.0-beta.0", + "css-background-parser": "^0.1.0", + "css-box-shadow": "1.0.0-3", + "css-gradient-parser": "^0.0.16", + "css-to-react-native": "^3.0.0", + "emoji-regex-xs": "^2.0.1", + "escape-html": "^1.0.3", + "linebreak": "^1.1.0", + "parse-css-color": "^0.2.1", + "postcss-value-parser": "^4.2.0", + "yoga-wasm-web": "^0.3.3" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/satori/node_modules/emoji-regex-xs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-2.0.1.tgz", + "integrity": "sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serve-handler": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", + "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/serve-handler/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sharp": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", + "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.4", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.2", + "@img/sharp-darwin-x64": "0.34.2", + "@img/sharp-libvips-darwin-arm64": "1.1.0", + "@img/sharp-libvips-darwin-x64": "1.1.0", + "@img/sharp-libvips-linux-arm": "1.1.0", + "@img/sharp-libvips-linux-arm64": "1.1.0", + "@img/sharp-libvips-linux-ppc64": "1.1.0", + "@img/sharp-libvips-linux-s390x": "1.1.0", + "@img/sharp-libvips-linux-x64": "1.1.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", + "@img/sharp-libvips-linuxmusl-x64": "1.1.0", + "@img/sharp-linux-arm": "0.34.2", + "@img/sharp-linux-arm64": "0.34.2", + "@img/sharp-linux-s390x": "0.34.2", + "@img/sharp-linux-x64": "0.34.2", + "@img/sharp-linuxmusl-arm64": "0.34.2", + "@img/sharp-linuxmusl-x64": "0.34.2", + "@img/sharp-wasm32": "0.34.2", + "@img/sharp-win32-arm64": "0.34.2", + "@img/sharp-win32-ia32": "0.34.2", + "@img/sharp-win32-x64": "0.34.2" + } + }, + "node_modules/shiki": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.26.2.tgz", + "integrity": "sha512-iP7u2NA9A6JwRRCkIUREEX2cMhlYV5EBmbbSlfSRvPThwca8HBRbVkWuNWW+kw9+i6BSUZqqG6YeUs5dC2SjZw==", + "dependencies": { + "@shikijs/core": "1.26.2", + "@shikijs/engine-javascript": "1.26.2", + "@shikijs/engine-oniguruma": "1.26.2", + "@shikijs/langs": "1.26.2", + "@shikijs/themes": "1.26.2", + "@shikijs/types": "1.26.2", + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speech-rule-engine": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz", + "integrity": "sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==", + "dependencies": { + "commander": "9.2.0", + "wicked-good-xpath": "1.3.0", + "xmldom-sre": "0.1.31" + }, + "bin": { + "sre": "bin/sre" + } + }, + "node_modules/speech-rule-engine/node_modules/commander": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", + "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", + "license": "MIT" + }, + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/style-to-js": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz", + "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.8" + } + }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sync-fetch": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/sync-fetch/-/sync-fetch-0.4.5.tgz", + "integrity": "sha512-esiWJ7ixSKGpd9DJPBTC4ckChqdOjIwJfYhVHkcQ2Gnm41323p1TRmEI+esTQ9ppD+b5opps2OTEGTCGX5kF+g==", + "dependencies": { + "buffer": "^5.7.1", + "node-fetch": "^2.6.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-vfile": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-8.0.0.tgz", + "integrity": "sha512-IcmH1xB5576MJc9qcfEC/m/nQCFt3fzMHz45sSlgJyTWjRbKW1HAkJpuf3DgE57YzIlZcwcBZA5ENQbBo4aLkg==", + "dependencies": { + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-find-after/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/unist-util-visit/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "peer": true + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/vfile/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/vfile/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/wicked-good-xpath": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz", + "integrity": "sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==" + }, + "node_modules/workerpool": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.2.0.tgz", + "integrity": "sha512-PKZqBOCo6CYkVOwAxWxQaSF2Fvb5Iv2fCeTP7buyWI2GiynWr46NcXSgK/idoV6e60dgCBfgYc+Un3HMvmqP8w==" + }, + "node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmldom-sre": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/xmldom-sre/-/xmldom-sre-0.1.31.tgz", + "integrity": "sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==", + "engines": { + "node": ">=0.1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yoga-wasm-web": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz", + "integrity": "sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==", + "license": "MIT" + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ba07693 --- /dev/null +++ b/package.json @@ -0,0 +1,115 @@ +{ + "name": "@jackyzha0/quartz", + "description": "🌱 publish your digital garden and notes as a website", + "private": true, + "version": "4.5.1", + "type": "module", + "author": "jackyzha0 ", + "license": "MIT", + "homepage": "https://quartz.jzhao.xyz", + "repository": { + "type": "git", + "url": "https://github.com/jackyzha0/quartz.git" + }, + "scripts": { + "quartz": "./quartz/bootstrap-cli.mjs", + "docs": "npx quartz build --serve -d docs", + "check": "tsc --noEmit && npx prettier . --check", + "format": "npx prettier . --write", + "test": "tsx --test", + "profile": "0x -D prof ./quartz/bootstrap-cli.mjs build --concurrency=1" + }, + "engines": { + "npm": ">=10.9.2", + "node": ">=22" + }, + "keywords": [ + "site generator", + "ssg", + "digital-garden", + "markdown", + "blog", + "quartz" + ], + "bin": { + "quartz": "./quartz/bootstrap-cli.mjs" + }, + "dependencies": { + "@clack/prompts": "^0.11.0", + "@floating-ui/dom": "^1.7.0", + "@myriaddreamin/rehype-typst": "^0.6.0", + "@napi-rs/simple-git": "0.1.19", + "@tweenjs/tween.js": "^25.0.0", + "@webgpu/types": "^0.1.61", + "ansi-truncate": "^1.2.0", + "async-mutex": "^0.5.0", + "chokidar": "^4.0.3", + "cli-spinner": "^0.2.10", + "d3": "^7.9.0", + "esbuild-sass-plugin": "^3.3.1", + "flexsearch": "0.7.43", + "github-slugger": "^2.0.0", + "globby": "^14.1.0", + "gray-matter": "^4.0.3", + "hast-util-to-html": "^9.0.5", + "hast-util-to-jsx-runtime": "^2.3.6", + "hast-util-to-string": "^3.0.1", + "is-absolute-url": "^4.0.1", + "js-yaml": "^4.1.0", + "lightningcss": "^1.30.1", + "mdast-util-find-and-replace": "^3.0.2", + "mdast-util-to-hast": "^13.2.0", + "mdast-util-to-string": "^4.0.0", + "micromorph": "^0.4.5", + "minimatch": "^10.0.1", + "pixi.js": "^8.9.2", + "preact": "^10.26.7", + "preact-render-to-string": "^6.5.13", + "pretty-bytes": "^7.0.0", + "pretty-time": "^1.1.0", + "reading-time": "^1.5.0", + "rehype-autolink-headings": "^7.1.0", + "rehype-citation": "^2.3.1", + "rehype-katex": "^7.0.1", + "rehype-mathjax": "^7.1.0", + "rehype-pretty-code": "^0.14.1", + "rehype-raw": "^7.0.0", + "rehype-slug": "^6.0.0", + "remark": "^15.0.1", + "remark-breaks": "^4.0.0", + "remark-frontmatter": "^5.0.0", + "remark-gfm": "^4.0.1", + "remark-math": "^6.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "rfdc": "^1.4.1", + "satori": "^0.13.1", + "serve-handler": "^6.1.6", + "sharp": "^0.34.2", + "shiki": "^1.26.2", + "source-map-support": "^0.5.21", + "to-vfile": "^8.0.0", + "toml": "^3.0.0", + "unified": "^11.0.5", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.3", + "workerpool": "^9.2.0", + "ws": "^8.18.2", + "yargs": "^18.0.0" + }, + "devDependencies": { + "@types/d3": "^7.4.3", + "@types/hast": "^3.0.4", + "@types/js-yaml": "^4.0.9", + "@types/node": "^22.15.23", + "@types/pretty-time": "^1.1.5", + "@types/source-map-support": "^0.5.10", + "@types/ws": "^8.18.1", + "@types/yargs": "^17.0.33", + "esbuild": "^0.25.5", + "prettier": "^3.5.3", + "tsx": "^4.19.4", + "typescript": "^5.8.3" + } +} diff --git a/quartz.config.ts b/quartz.config.ts new file mode 100644 index 0000000..523e706 --- /dev/null +++ b/quartz.config.ts @@ -0,0 +1,97 @@ +import { QuartzConfig } from "./quartz/cfg" +import * as Plugin from "./quartz/plugins" + +/** + * Quartz 4 Configuration + * + * See https://quartz.jzhao.xyz/configuration for more information. + */ +const config: QuartzConfig = { + configuration: { + pageTitle: "ASP.NET", + pageTitleSuffix: "", + enableSPA: true, + enablePopovers: true, + analytics: { + provider: "plausible", + }, + locale: "en-US", + baseUrl: "quartz.jzhao.xyz", + ignorePatterns: ["private", "templates", ".obsidian", "**/Projects/**"], + defaultDateType: "modified", + theme: { + fontOrigin: "googleFonts", + cdnCaching: true, + typography: { + header: "Schibsted Grotesk", + body: "Source Sans Pro", + code: "IBM Plex Mono", + }, + colors: { + lightMode: { + light: "#faf8f8", + lightgray: "#e5e5e5", + gray: "#b8b8b8", + darkgray: "#4e4e4e", + dark: "#2b2b2b", + secondary: "#284b63", + tertiary: "#84a59d", + highlight: "rgba(143, 159, 169, 0.15)", + textHighlight: "#fff23688", + }, + darkMode: { + light: "#161618", + lightgray: "#393639", + gray: "#646464", + darkgray: "#d4d4d4", + dark: "#ebebec", + secondary: "#7b97aa", + tertiary: "#84a59d", + highlight: "rgba(143, 159, 169, 0.15)", + textHighlight: "#b3aa0288", + }, + }, + }, + }, + plugins: { + transformers: [ + Plugin.FrontMatter(), + Plugin.CreatedModifiedDate({ + priority: ["frontmatter", "git", "filesystem"], + }), + Plugin.SyntaxHighlighting({ + theme: { + light: "github-light", + dark: "github-dark", + }, + keepBackground: false, + }), + Plugin.ObsidianFlavoredMarkdown({ enableInHtmlEmbed: false }), + Plugin.GitHubFlavoredMarkdown(), + Plugin.TableOfContents(), + Plugin.CrawlLinks({ markdownLinkResolution: "shortest" }), + Plugin.Description(), + Plugin.Latex({ renderEngine: "katex" }), + ], + filters: [Plugin.RemoveDrafts()], + emitters: [ + Plugin.AliasRedirects(), + Plugin.ComponentResources(), + Plugin.ContentPage(), + Plugin.FolderPage(), + Plugin.TagPage(), + Plugin.ContentIndex({ + enableSiteMap: true, + enableRSS: true, + }), + Plugin.Assets(), + Plugin.Static(), + Plugin.Favicon(), + Plugin.NotFoundPage(), + // Comment out CustomOgImages to speed up build time + Plugin.CustomOgImages(), + ], + }, +} + +export default config diff --git a/quartz.layout.ts b/quartz.layout.ts new file mode 100644 index 0000000..970a5be --- /dev/null +++ b/quartz.layout.ts @@ -0,0 +1,68 @@ +import { PageLayout, SharedLayout } from "./quartz/cfg" +import * as Component from "./quartz/components" + +// components shared across all pages +export const sharedPageComponents: SharedLayout = { + head: Component.Head(), + header: [], + afterBody: [], + footer: Component.Footer({ + links: { + GitHub: "https://github.com/jackyzha0/quartz", + "Discord Community": "https://discord.gg/cRFFHYye7t", + }, + }), +} + +// components for pages that display a single page (e.g. a single note) +export const defaultContentPageLayout: PageLayout = { + beforeBody: [ + Component.ConditionalRender({ + component: Component.Breadcrumbs(), + condition: (page) => page.fileData.slug !== "index", + }), + Component.ArticleTitle(), + Component.ContentMeta(), + Component.TagList(), + ], + left: [ + Component.PageTitle(), + Component.MobileOnly(Component.Spacer()), + Component.Flex({ + components: [ + { + Component: Component.Search(), + grow: true, + }, + { Component: Component.Darkmode() }, + { Component: Component.ReaderMode() }, + ], + }), + Component.Explorer(), + ], + right: [ + Component.Graph(), + Component.DesktopOnly(Component.TableOfContents()), + Component.Backlinks(), + ], +} + +// components for pages that display lists of pages (e.g. tags or folders) +export const defaultListPageLayout: PageLayout = { + beforeBody: [Component.Breadcrumbs(), Component.ArticleTitle(), Component.ContentMeta()], + left: [ + Component.PageTitle(), + Component.MobileOnly(Component.Spacer()), + Component.Flex({ + components: [ + { + Component: Component.Search(), + grow: true, + }, + { Component: Component.Darkmode() }, + ], + }), + Component.Explorer(), + ], + right: [], +} diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs new file mode 100644 index 0000000..8b0b926 --- /dev/null +++ b/quartz/bootstrap-cli.mjs @@ -0,0 +1,41 @@ +#!/usr/bin/env -S node --no-deprecation +import yargs from "yargs" +import { hideBin } from "yargs/helpers" +import { + handleBuild, + handleCreate, + handleUpdate, + handleRestore, + handleSync, +} from "./cli/handlers.js" +import { CommonArgv, BuildArgv, CreateArgv, SyncArgv } from "./cli/args.js" +import { version } from "./cli/constants.js" + +yargs(hideBin(process.argv)) + .scriptName("quartz") + .version(version) + .usage("$0 [args]") + .command("create", "Initialize Quartz", CreateArgv, async (argv) => { + await handleCreate(argv) + }) + .command("update", "Get the latest Quartz updates", CommonArgv, async (argv) => { + await handleUpdate(argv) + }) + .command( + "restore", + "Try to restore your content folder from the cache", + CommonArgv, + async (argv) => { + await handleRestore(argv) + }, + ) + .command("sync", "Sync your Quartz to and from GitHub.", SyncArgv, async (argv) => { + await handleSync(argv) + }) + .command("build", "Build Quartz into a bundle of static HTML files", BuildArgv, async (argv) => { + await handleBuild(argv) + }) + .showHelpOnFail(false) + .help() + .strict() + .demandCommand().argv diff --git a/quartz/bootstrap-worker.mjs b/quartz/bootstrap-worker.mjs new file mode 100644 index 0000000..c4c4949 --- /dev/null +++ b/quartz/bootstrap-worker.mjs @@ -0,0 +1,8 @@ +#!/usr/bin/env node +import workerpool from "workerpool" +const cacheFile = "./.quartz-cache/transpiled-worker.mjs" +const { parseMarkdown, processHtml } = await import(cacheFile) +workerpool.worker({ + parseMarkdown, + processHtml, +}) diff --git a/quartz/build.ts b/quartz/build.ts new file mode 100644 index 0000000..d9f5efc --- /dev/null +++ b/quartz/build.ts @@ -0,0 +1,302 @@ +import sourceMapSupport from "source-map-support" +sourceMapSupport.install(options) +import path from "path" +import { PerfTimer } from "./util/perf" +import { rm } from "fs/promises" +import { GlobbyFilterFunction, isGitIgnored } from "globby" +import { styleText } from "util" +import { parseMarkdown } from "./processors/parse" +import { filterContent } from "./processors/filter" +import { emitContent } from "./processors/emit" +import cfg from "../quartz.config" +import { FilePath, joinSegments, slugifyFilePath } from "./util/path" +import chokidar from "chokidar" +import { ProcessedContent } from "./plugins/vfile" +import { Argv, BuildCtx } from "./util/ctx" +import { glob, toPosixPath } from "./util/glob" +import { trace } from "./util/trace" +import { options } from "./util/sourcemap" +import { Mutex } from "async-mutex" +import { getStaticResourcesFromPlugins } from "./plugins" +import { randomIdNonSecure } from "./util/random" +import { ChangeEvent } from "./plugins/types" +import { minimatch } from "minimatch" + +type ContentMap = Map< + FilePath, + | { + type: "markdown" + content: ProcessedContent + } + | { + type: "other" + } +> + +type BuildData = { + ctx: BuildCtx + ignored: GlobbyFilterFunction + mut: Mutex + contentMap: ContentMap + changesSinceLastBuild: Record + lastBuildMs: number +} + +async function buildQuartz(argv: Argv, mut: Mutex, clientRefresh: () => void) { + const ctx: BuildCtx = { + buildId: randomIdNonSecure(), + argv, + cfg, + allSlugs: [], + allFiles: [], + incremental: false, + } + + const perf = new PerfTimer() + const output = argv.output + + const pluginCount = Object.values(cfg.plugins).flat().length + const pluginNames = (key: "transformers" | "filters" | "emitters") => + cfg.plugins[key].map((plugin) => plugin.name) + if (argv.verbose) { + console.log(`Loaded ${pluginCount} plugins`) + console.log(` Transformers: ${pluginNames("transformers").join(", ")}`) + console.log(` Filters: ${pluginNames("filters").join(", ")}`) + console.log(` Emitters: ${pluginNames("emitters").join(", ")}`) + } + + const release = await mut.acquire() + perf.addEvent("clean") + await rm(output, { recursive: true, force: true }) + console.log(`Cleaned output directory \`${output}\` in ${perf.timeSince("clean")}`) + + perf.addEvent("glob") + const allFiles = await glob("**/*.*", argv.directory, cfg.configuration.ignorePatterns) + const markdownPaths = allFiles.filter((fp) => fp.endsWith(".md")).sort() + console.log( + `Found ${markdownPaths.length} input files from \`${argv.directory}\` in ${perf.timeSince("glob")}`, + ) + + const filePaths = markdownPaths.map((fp) => joinSegments(argv.directory, fp) as FilePath) + ctx.allFiles = allFiles + ctx.allSlugs = allFiles.map((fp) => slugifyFilePath(fp as FilePath)) + + const parsedFiles = await parseMarkdown(ctx, filePaths) + const filteredContent = filterContent(ctx, parsedFiles) + + await emitContent(ctx, filteredContent) + console.log( + styleText("green", `Done processing ${markdownPaths.length} files in ${perf.timeSince()}`), + ) + release() + + if (argv.watch) { + ctx.incremental = true + return startWatching(ctx, mut, parsedFiles, clientRefresh) + } +} + +// setup watcher for rebuilds +async function startWatching( + ctx: BuildCtx, + mut: Mutex, + initialContent: ProcessedContent[], + clientRefresh: () => void, +) { + const { argv, allFiles } = ctx + + const contentMap: ContentMap = new Map() + for (const filePath of allFiles) { + contentMap.set(filePath, { + type: "other", + }) + } + + for (const content of initialContent) { + const [_tree, vfile] = content + contentMap.set(vfile.data.relativePath!, { + type: "markdown", + content, + }) + } + + const gitIgnoredMatcher = await isGitIgnored() + const buildData: BuildData = { + ctx, + mut, + contentMap, + ignored: (fp) => { + const pathStr = toPosixPath(fp.toString()) + if (pathStr.startsWith(".git/")) return true + if (gitIgnoredMatcher(pathStr)) return true + for (const pattern of cfg.configuration.ignorePatterns) { + if (minimatch(pathStr, pattern)) { + return true + } + } + + return false + }, + + changesSinceLastBuild: {}, + lastBuildMs: 0, + } + + const watcher = chokidar.watch(".", { + persistent: true, + cwd: argv.directory, + ignoreInitial: true, + }) + + const changes: ChangeEvent[] = [] + watcher + .on("add", (fp) => { + if (buildData.ignored(fp)) return + changes.push({ path: fp as FilePath, type: "add" }) + void rebuild(changes, clientRefresh, buildData) + }) + .on("change", (fp) => { + if (buildData.ignored(fp)) return + changes.push({ path: fp as FilePath, type: "change" }) + void rebuild(changes, clientRefresh, buildData) + }) + .on("unlink", (fp) => { + if (buildData.ignored(fp)) return + changes.push({ path: fp as FilePath, type: "delete" }) + void rebuild(changes, clientRefresh, buildData) + }) + + return async () => { + await watcher.close() + } +} + +async function rebuild(changes: ChangeEvent[], clientRefresh: () => void, buildData: BuildData) { + const { ctx, contentMap, mut, changesSinceLastBuild } = buildData + const { argv, cfg } = ctx + + const buildId = randomIdNonSecure() + ctx.buildId = buildId + buildData.lastBuildMs = new Date().getTime() + const numChangesInBuild = changes.length + const release = await mut.acquire() + + // if there's another build after us, release and let them do it + if (ctx.buildId !== buildId) { + release() + return + } + + const perf = new PerfTimer() + perf.addEvent("rebuild") + console.log(styleText("yellow", "Detected change, rebuilding...")) + + // update changesSinceLastBuild + for (const change of changes) { + changesSinceLastBuild[change.path] = change.type + } + + const staticResources = getStaticResourcesFromPlugins(ctx) + const pathsToParse: FilePath[] = [] + for (const [fp, type] of Object.entries(changesSinceLastBuild)) { + if (type === "delete" || path.extname(fp) !== ".md") continue + const fullPath = joinSegments(argv.directory, toPosixPath(fp)) as FilePath + pathsToParse.push(fullPath) + } + + const parsed = await parseMarkdown(ctx, pathsToParse) + for (const content of parsed) { + contentMap.set(content[1].data.relativePath!, { + type: "markdown", + content, + }) + } + + // update state using changesSinceLastBuild + // we do this weird play of add => compute change events => remove + // so that partialEmitters can do appropriate cleanup based on the content of deleted files + for (const [file, change] of Object.entries(changesSinceLastBuild)) { + if (change === "delete") { + // universal delete case + contentMap.delete(file as FilePath) + } + + // manually track non-markdown files as processed files only + // contains markdown files + if (change === "add" && path.extname(file) !== ".md") { + contentMap.set(file as FilePath, { + type: "other", + }) + } + } + + const changeEvents: ChangeEvent[] = Object.entries(changesSinceLastBuild).map(([fp, type]) => { + const path = fp as FilePath + const processedContent = contentMap.get(path) + if (processedContent?.type === "markdown") { + const [_tree, file] = processedContent.content + return { + type, + path, + file, + } + } + + return { + type, + path, + } + }) + + // update allFiles and then allSlugs with the consistent view of content map + ctx.allFiles = Array.from(contentMap.keys()) + ctx.allSlugs = ctx.allFiles.map((fp) => slugifyFilePath(fp as FilePath)) + let processedFiles = filterContent( + ctx, + Array.from(contentMap.values()) + .filter((file) => file.type === "markdown") + .map((file) => file.content), + ) + + let emittedFiles = 0 + for (const emitter of cfg.plugins.emitters) { + // Try to use partialEmit if available, otherwise assume the output is static + const emitFn = emitter.partialEmit ?? emitter.emit + const emitted = await emitFn(ctx, processedFiles, staticResources, changeEvents) + if (emitted === null) { + continue + } + + if (Symbol.asyncIterator in emitted) { + // Async generator case + for await (const file of emitted) { + emittedFiles++ + if (ctx.argv.verbose) { + console.log(`[emit:${emitter.name}] ${file}`) + } + } + } else { + // Array case + emittedFiles += emitted.length + if (ctx.argv.verbose) { + for (const file of emitted) { + console.log(`[emit:${emitter.name}] ${file}`) + } + } + } + } + + console.log(`Emitted ${emittedFiles} files to \`${argv.output}\` in ${perf.timeSince("rebuild")}`) + console.log(styleText("green", `Done rebuilding in ${perf.timeSince()}`)) + changes.splice(0, numChangesInBuild) + clientRefresh() + release() +} + +export default async (argv: Argv, mut: Mutex, clientRefresh: () => void) => { + try { + return await buildQuartz(argv, mut, clientRefresh) + } catch (err) { + trace("\nExiting Quartz due to a fatal error", err as Error) + } +} diff --git a/quartz/cfg.ts b/quartz/cfg.ts new file mode 100644 index 0000000..b5de75d --- /dev/null +++ b/quartz/cfg.ts @@ -0,0 +1,92 @@ +import { ValidDateType } from "./components/Date" +import { QuartzComponent } from "./components/types" +import { ValidLocale } from "./i18n" +import { PluginTypes } from "./plugins/types" +import { Theme } from "./util/theme" + +export type Analytics = + | null + | { + provider: "plausible" + host?: string + } + | { + provider: "google" + tagId: string + } + | { + provider: "umami" + websiteId: string + host?: string + } + | { + provider: "goatcounter" + websiteId: string + host?: string + scriptSrc?: string + } + | { + provider: "posthog" + apiKey: string + host?: string + } + | { + provider: "tinylytics" + siteId: string + } + | { + provider: "cabin" + host?: string + } + | { + provider: "clarity" + projectId?: string + } + +export interface GlobalConfiguration { + pageTitle: string + pageTitleSuffix?: string + /** Whether to enable single-page-app style rendering. this prevents flashes of unstyled content and improves smoothness of Quartz */ + enableSPA: boolean + /** Whether to display Wikipedia-style popovers when hovering over links */ + enablePopovers: boolean + /** Analytics mode */ + analytics: Analytics + /** Glob patterns to not search */ + ignorePatterns: string[] + /** Whether to use created, modified, or published as the default type of date */ + defaultDateType: ValidDateType + /** Base URL to use for CNAME files, sitemaps, and RSS feeds that require an absolute URL. + * Quartz will avoid using this as much as possible and use relative URLs most of the time + */ + baseUrl?: string + theme: Theme + /** + * Allow to translate the date in the language of your choice. + * Also used for UI translation (default: en-US) + * Need to be formatted following BCP 47: https://en.wikipedia.org/wiki/IETF_language_tag + * The first part is the language (en) and the second part is the script/region (US) + * Language Codes: https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes + * Region Codes: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 + */ + locale: ValidLocale +} + +export interface QuartzConfig { + configuration: GlobalConfiguration + plugins: PluginTypes +} + +export interface FullPageLayout { + head: QuartzComponent + header: QuartzComponent[] + beforeBody: QuartzComponent[] + pageBody: QuartzComponent + afterBody: QuartzComponent[] + left: QuartzComponent[] + right: QuartzComponent[] + footer: QuartzComponent +} + +export type PageLayout = Pick +export type SharedLayout = Pick diff --git a/quartz/cli/args.js b/quartz/cli/args.js new file mode 100644 index 0000000..d2408e9 --- /dev/null +++ b/quartz/cli/args.js @@ -0,0 +1,108 @@ +export const CommonArgv = { + directory: { + string: true, + alias: ["d"], + default: "content", + describe: "directory to look for content files", + }, + verbose: { + boolean: true, + alias: ["v"], + default: false, + describe: "print out extra logging information", + }, +} + +export const CreateArgv = { + ...CommonArgv, + source: { + string: true, + alias: ["s"], + describe: "source directory to copy/create symlink from", + }, + strategy: { + string: true, + alias: ["X"], + choices: ["new", "copy", "symlink"], + describe: "strategy for content folder setup", + }, + links: { + string: true, + alias: ["l"], + choices: ["absolute", "shortest", "relative"], + describe: "strategy to resolve links", + }, +} + +export const SyncArgv = { + ...CommonArgv, + commit: { + boolean: true, + default: true, + describe: "create a git commit for your unsaved changes", + }, + message: { + string: true, + alias: ["m"], + describe: "option to override the default Quartz commit message", + }, + push: { + boolean: true, + default: true, + describe: "push updates to your Quartz fork", + }, + pull: { + boolean: true, + default: true, + describe: "pull updates from your Quartz fork", + }, +} + +export const BuildArgv = { + ...CommonArgv, + output: { + string: true, + alias: ["o"], + default: "public", + describe: "output folder for files", + }, + serve: { + boolean: true, + default: false, + describe: "run a local server to live-preview your Quartz", + }, + watch: { + boolean: true, + default: false, + describe: "watch for changes and rebuild automatically", + }, + baseDir: { + string: true, + default: "", + describe: "base path to serve your local server on", + }, + port: { + number: true, + default: 8080, + describe: "port to serve Quartz on", + }, + wsPort: { + number: true, + default: 3001, + describe: "port to use for WebSocket-based hot-reload notifications", + }, + remoteDevHost: { + string: true, + default: "", + describe: "A URL override for the websocket connection if you are not developing on localhost", + }, + bundleInfo: { + boolean: true, + default: false, + describe: "show detailed bundle information", + }, + concurrency: { + number: true, + describe: "how many threads to use to parse notes", + }, +} diff --git a/quartz/cli/constants.js b/quartz/cli/constants.js new file mode 100644 index 0000000..f4a9ce5 --- /dev/null +++ b/quartz/cli/constants.js @@ -0,0 +1,15 @@ +import path from "path" +import { readFileSync } from "fs" + +/** + * All constants relating to helpers or handlers + */ +export const ORIGIN_NAME = "origin" +export const UPSTREAM_NAME = "upstream" +export const QUARTZ_SOURCE_BRANCH = "v4" +export const cwd = process.cwd() +export const cacheDir = path.join(cwd, ".quartz-cache") +export const cacheFile = "./quartz/.quartz-cache/transpiled-build.mjs" +export const fp = "./quartz/build.ts" +export const { version } = JSON.parse(readFileSync("./package.json").toString()) +export const contentCacheFolder = path.join(cacheDir, "content-cache") diff --git a/quartz/cli/handlers.js b/quartz/cli/handlers.js new file mode 100644 index 0000000..9b68aed --- /dev/null +++ b/quartz/cli/handlers.js @@ -0,0 +1,620 @@ +import { promises } from "fs" +import path from "path" +import esbuild from "esbuild" +import { styleText } from "util" +import { sassPlugin } from "esbuild-sass-plugin" +import fs from "fs" +import { intro, outro, select, text } from "@clack/prompts" +import { rm } from "fs/promises" +import chokidar from "chokidar" +import prettyBytes from "pretty-bytes" +import { execSync, spawnSync } from "child_process" +import http from "http" +import serveHandler from "serve-handler" +import { WebSocketServer } from "ws" +import { randomUUID } from "crypto" +import { Mutex } from "async-mutex" +import { CreateArgv } from "./args.js" +import { globby } from "globby" +import { + exitIfCancel, + escapePath, + gitPull, + popContentFolder, + stashContentFolder, +} from "./helpers.js" +import { + UPSTREAM_NAME, + QUARTZ_SOURCE_BRANCH, + ORIGIN_NAME, + version, + fp, + cacheFile, + cwd, +} from "./constants.js" + +/** + * Resolve content directory path + * @param contentPath path to resolve + */ +function resolveContentPath(contentPath) { + if (path.isAbsolute(contentPath)) return path.relative(cwd, contentPath) + return path.join(cwd, contentPath) +} + +/** + * Handles `npx quartz create` + * @param {*} argv arguments for `create` + */ +export async function handleCreate(argv) { + console.log() + intro(styleText(["bgGreen", "black"], ` Quartz v${version} `)) + const contentFolder = resolveContentPath(argv.directory) + let setupStrategy = argv.strategy?.toLowerCase() + let linkResolutionStrategy = argv.links?.toLowerCase() + const sourceDirectory = argv.source + + // If all cmd arguments were provided, check if they're valid + if (setupStrategy && linkResolutionStrategy) { + // If setup isn't, "new", source argument is required + if (setupStrategy !== "new") { + // Error handling + if (!sourceDirectory) { + outro( + styleText( + "red", + `Setup strategies (arg '${styleText( + "yellow", + `-${CreateArgv.strategy.alias[0]}`, + )}') other than '${styleText( + "yellow", + "new", + )}' require content folder argument ('${styleText( + "yellow", + `-${CreateArgv.source.alias[0]}`, + )}') to be set`, + ), + ) + process.exit(1) + } else { + if (!fs.existsSync(sourceDirectory)) { + outro( + styleText( + "red", + `Input directory to copy/symlink 'content' from not found ('${styleText( + "yellow", + sourceDirectory, + )}', invalid argument "${styleText("yellow", `-${CreateArgv.source.alias[0]}`)})`, + ), + ) + process.exit(1) + } else if (!fs.lstatSync(sourceDirectory).isDirectory()) { + outro( + styleText( + "red", + `Source directory to copy/symlink 'content' from is not a directory (found file at '${styleText( + "yellow", + sourceDirectory, + )}', invalid argument ${styleText("yellow", `-${CreateArgv.source.alias[0]}`)}")`, + ), + ) + process.exit(1) + } + } + } + } + + // Use cli process if cmd args werent provided + if (!setupStrategy) { + setupStrategy = exitIfCancel( + await select({ + message: `Choose how to initialize the content in \`${contentFolder}\``, + options: [ + { value: "new", label: "Empty Quartz" }, + { value: "copy", label: "Copy an existing folder", hint: "overwrites `content`" }, + { + value: "symlink", + label: "Symlink an existing folder", + hint: "don't select this unless you know what you are doing!", + }, + ], + }), + ) + } + + async function rmContentFolder() { + const contentStat = await fs.promises.lstat(contentFolder) + if (contentStat.isSymbolicLink()) { + await fs.promises.unlink(contentFolder) + } else { + await rm(contentFolder, { recursive: true, force: true }) + } + } + + const gitkeepPath = path.join(contentFolder, ".gitkeep") + if (fs.existsSync(gitkeepPath)) { + await fs.promises.unlink(gitkeepPath) + } + if (setupStrategy === "copy" || setupStrategy === "symlink") { + let originalFolder = sourceDirectory + + // If input directory was not passed, use cli + if (!sourceDirectory) { + originalFolder = escapePath( + exitIfCancel( + await text({ + message: "Enter the full path to existing content folder", + placeholder: + "On most terminal emulators, you can drag and drop a folder into the window and it will paste the full path", + validate(fp) { + const fullPath = escapePath(fp) + if (!fs.existsSync(fullPath)) { + return "The given path doesn't exist" + } else if (!fs.lstatSync(fullPath).isDirectory()) { + return "The given path is not a folder" + } + }, + }), + ), + ) + } + + await rmContentFolder() + if (setupStrategy === "copy") { + await fs.promises.cp(originalFolder, contentFolder, { + recursive: true, + preserveTimestamps: true, + }) + } else if (setupStrategy === "symlink") { + await fs.promises.symlink(originalFolder, contentFolder, "dir") + } + } else if (setupStrategy === "new") { + await fs.promises.writeFile( + path.join(contentFolder, "index.md"), + `--- +title: Welcome to Quartz +--- + +This is a blank Quartz installation. +See the [documentation](https://quartz.jzhao.xyz) for how to get started. +`, + ) + } + + // Use cli process if cmd args werent provided + if (!linkResolutionStrategy) { + // get a preferred link resolution strategy + linkResolutionStrategy = exitIfCancel( + await select({ + message: `Choose how Quartz should resolve links in your content. This should match Obsidian's link format. You can change this later in \`quartz.config.ts\`.`, + options: [ + { + value: "shortest", + label: "Treat links as shortest path", + hint: "(default)", + }, + { + value: "absolute", + label: "Treat links as absolute path", + }, + { + value: "relative", + label: "Treat links as relative paths", + }, + ], + }), + ) + } + + // now, do config changes + const configFilePath = path.join(cwd, "quartz.config.ts") + let configContent = await fs.promises.readFile(configFilePath, { encoding: "utf-8" }) + configContent = configContent.replace( + /markdownLinkResolution: '(.+)'/, + `markdownLinkResolution: '${linkResolutionStrategy}'`, + ) + await fs.promises.writeFile(configFilePath, configContent) + + // setup remote + execSync( + `git remote show upstream || git remote add upstream https://github.com/jackyzha0/quartz.git`, + { stdio: "ignore" }, + ) + + outro(`You're all set! Not sure what to do next? Try: + • Customizing Quartz a bit more by editing \`quartz.config.ts\` + • Running \`npx quartz build --serve\` to preview your Quartz locally + • Hosting your Quartz online (see: https://quartz.jzhao.xyz/hosting) +`) +} + +/** + * Handles `npx quartz build` + * @param {*} argv arguments for `build` + */ +export async function handleBuild(argv) { + if (argv.serve) { + argv.watch = true + } + + console.log(`\n${styleText(["bgGreen", "black"], ` Quartz v${version} `)} \n`) + const ctx = await esbuild.context({ + entryPoints: [fp], + outfile: cacheFile, + bundle: true, + keepNames: true, + minifyWhitespace: true, + minifySyntax: true, + platform: "node", + format: "esm", + jsx: "automatic", + jsxImportSource: "preact", + packages: "external", + metafile: true, + sourcemap: true, + sourcesContent: false, + plugins: [ + sassPlugin({ + type: "css-text", + cssImports: true, + }), + sassPlugin({ + filter: /\.inline\.scss$/, + type: "css", + cssImports: true, + }), + { + name: "inline-script-loader", + setup(build) { + build.onLoad({ filter: /\.inline\.(ts|js)$/ }, async (args) => { + let text = await promises.readFile(args.path, "utf8") + + // remove default exports that we manually inserted + text = text.replace("export default", "") + text = text.replace("export", "") + + const sourcefile = path.relative(path.resolve("."), args.path) + const resolveDir = path.dirname(sourcefile) + const transpiled = await esbuild.build({ + stdin: { + contents: text, + loader: "ts", + resolveDir, + sourcefile, + }, + write: false, + bundle: true, + minify: true, + platform: "browser", + format: "esm", + }) + const rawMod = transpiled.outputFiles[0].text + return { + contents: rawMod, + loader: "text", + } + }) + }, + }, + ], + }) + + const buildMutex = new Mutex() + let lastBuildMs = 0 + let cleanupBuild = null + const build = async (clientRefresh) => { + const buildStart = new Date().getTime() + lastBuildMs = buildStart + const release = await buildMutex.acquire() + if (lastBuildMs > buildStart) { + release() + return + } + + if (cleanupBuild) { + console.log(styleText("yellow", "Detected a source code change, doing a hard rebuild...")) + await cleanupBuild() + } + + const result = await ctx.rebuild().catch((err) => { + console.error(`${styleText("red", "Couldn't parse Quartz configuration:")} ${fp}`) + console.log(`Reason: ${styleText("grey", err)}`) + process.exit(1) + }) + release() + + if (argv.bundleInfo) { + const outputFileName = "quartz/.quartz-cache/transpiled-build.mjs" + const meta = result.metafile.outputs[outputFileName] + console.log( + `Successfully transpiled ${Object.keys(meta.inputs).length} files (${prettyBytes( + meta.bytes, + )})`, + ) + console.log(await esbuild.analyzeMetafile(result.metafile, { color: true })) + } + + // bypass module cache + // https://github.com/nodejs/modules/issues/307 + const { default: buildQuartz } = await import(`../../${cacheFile}?update=${randomUUID()}`) + // ^ this import is relative, so base "cacheFile" path can't be used + + cleanupBuild = await buildQuartz(argv, buildMutex, clientRefresh) + clientRefresh() + } + + let clientRefresh = () => {} + if (argv.serve) { + const connections = [] + clientRefresh = () => connections.forEach((conn) => conn.send("rebuild")) + + if (argv.baseDir !== "" && !argv.baseDir.startsWith("/")) { + argv.baseDir = "/" + argv.baseDir + } + + await build(clientRefresh) + const server = http.createServer(async (req, res) => { + if (argv.baseDir && !req.url?.startsWith(argv.baseDir)) { + console.log( + styleText( + "red", + `[404] ${req.url} (warning: link outside of site, this is likely a Quartz bug)`, + ), + ) + res.writeHead(404) + res.end() + return + } + + // strip baseDir prefix + req.url = req.url?.slice(argv.baseDir.length) + + const serve = async () => { + const release = await buildMutex.acquire() + await serveHandler(req, res, { + public: argv.output, + directoryListing: false, + headers: [ + { + source: "**/*.*", + headers: [{ key: "Content-Disposition", value: "inline" }], + }, + { + source: "**/*.webp", + headers: [{ key: "Content-Type", value: "image/webp" }], + }, + // fixes bug where avif images are displayed as text instead of images (future proof) + { + source: "**/*.avif", + headers: [{ key: "Content-Type", value: "image/avif" }], + }, + ], + }) + const status = res.statusCode + const statusString = + status >= 200 && status < 300 + ? styleText("green", `[${status}]`) + : styleText("red", `[${status}]`) + console.log(statusString + styleText("grey", ` ${argv.baseDir}${req.url}`)) + release() + } + + const redirect = (newFp) => { + newFp = argv.baseDir + newFp + res.writeHead(302, { + Location: newFp, + }) + console.log( + styleText("yellow", "[302]") + + styleText("grey", ` ${argv.baseDir}${req.url} -> ${newFp}`), + ) + res.end() + } + + let fp = req.url?.split("?")[0] ?? "/" + + // handle redirects + if (fp.endsWith("/")) { + // /trailing/ + // does /trailing/index.html exist? if so, serve it + const indexFp = path.posix.join(fp, "index.html") + if (fs.existsSync(path.posix.join(argv.output, indexFp))) { + req.url = fp + return serve() + } + + // does /trailing.html exist? if so, redirect to /trailing + let base = fp.slice(0, -1) + if (path.extname(base) === "") { + base += ".html" + } + if (fs.existsSync(path.posix.join(argv.output, base))) { + return redirect(fp.slice(0, -1)) + } + } else { + // /regular + // does /regular.html exist? if so, serve it + let base = fp + if (path.extname(base) === "") { + base += ".html" + } + if (fs.existsSync(path.posix.join(argv.output, base))) { + req.url = fp + return serve() + } + + // does /regular/index.html exist? if so, redirect to /regular/ + let indexFp = path.posix.join(fp, "index.html") + if (fs.existsSync(path.posix.join(argv.output, indexFp))) { + return redirect(fp + "/") + } + } + + return serve() + }) + + server.listen(argv.port) + const wss = new WebSocketServer({ port: argv.wsPort }) + wss.on("connection", (ws) => connections.push(ws)) + console.log( + styleText( + "cyan", + `Started a Quartz server listening at http://localhost:${argv.port}${argv.baseDir}`, + ), + ) + } else { + await build(clientRefresh) + ctx.dispose() + } + + if (argv.watch) { + const paths = await globby([ + "**/*.ts", + "quartz/cli/*.js", + "quartz/static/**/*", + "**/*.tsx", + "**/*.scss", + "package.json", + ]) + chokidar + .watch(paths, { ignoreInitial: true }) + .on("add", () => build(clientRefresh)) + .on("change", () => build(clientRefresh)) + .on("unlink", () => build(clientRefresh)) + + console.log(styleText("grey", "hint: exit with ctrl+c")) + } +} + +/** + * Handles `npx quartz update` + * @param {*} argv arguments for `update` + */ +export async function handleUpdate(argv) { + const contentFolder = resolveContentPath(argv.directory) + console.log(`\n${styleText(["bgGreen", "black"], ` Quartz v${version} `)} \n`) + console.log("Backing up your content") + execSync( + `git remote show upstream || git remote add upstream https://github.com/jackyzha0/quartz.git`, + ) + await stashContentFolder(contentFolder) + console.log( + "Pulling updates... you may need to resolve some `git` conflicts if you've made changes to components or plugins.", + ) + + try { + gitPull(UPSTREAM_NAME, QUARTZ_SOURCE_BRANCH) + } catch { + console.log(styleText("red", "An error occurred above while pulling updates.")) + await popContentFolder(contentFolder) + return + } + + await popContentFolder(contentFolder) + console.log("Ensuring dependencies are up to date") + + /* + On Windows, if the command `npm` is really `npm.cmd', this call fails + as it will be unable to find `npm`. This is often the case on systems + where `npm` is installed via a package manager. + + This means `npx quartz update` will not actually update dependencies + on Windows, without a manual `npm i` from the caller. + + However, by spawning a shell, we are able to call `npm.cmd`. + See: https://nodejs.org/api/child_process.html#spawning-bat-and-cmd-files-on-windows + */ + + const opts = { stdio: "inherit" } + if (process.platform === "win32") { + opts.shell = true + } + + const res = spawnSync("npm", ["i"], opts) + if (res.status === 0) { + console.log(styleText("green", "Done!")) + } else { + console.log(styleText("red", "An error occurred above while installing dependencies.")) + } +} + +/** + * Handles `npx quartz restore` + * @param {*} argv arguments for `restore` + */ +export async function handleRestore(argv) { + const contentFolder = resolveContentPath(argv.directory) + await popContentFolder(contentFolder) +} + +/** + * Handles `npx quartz sync` + * @param {*} argv arguments for `sync` + */ +export async function handleSync(argv) { + const contentFolder = resolveContentPath(argv.directory) + console.log(`\n${styleText(["bgGreen", "black"], ` Quartz v${version} `)}\n`) + console.log("Backing up your content") + + if (argv.commit) { + const contentStat = await fs.promises.lstat(contentFolder) + if (contentStat.isSymbolicLink()) { + const linkTarg = await fs.promises.readlink(contentFolder) + console.log(styleText("yellow", "Detected symlink, trying to dereference before committing")) + + // stash symlink file + await stashContentFolder(contentFolder) + + // follow symlink and copy content + await fs.promises.cp(linkTarg, contentFolder, { + recursive: true, + preserveTimestamps: true, + }) + } + + const currentTimestamp = new Date().toLocaleString("en-US", { + dateStyle: "medium", + timeStyle: "short", + }) + const commitMessage = argv.message ?? `Quartz sync: ${currentTimestamp}` + spawnSync("git", ["add", "."], { stdio: "inherit" }) + spawnSync("git", ["commit", "-m", commitMessage], { stdio: "inherit" }) + + if (contentStat.isSymbolicLink()) { + // put symlink back + await popContentFolder(contentFolder) + } + } + + await stashContentFolder(contentFolder) + + if (argv.pull) { + console.log( + "Pulling updates from your repository. You may need to resolve some `git` conflicts if you've made changes to components or plugins.", + ) + try { + gitPull(ORIGIN_NAME, QUARTZ_SOURCE_BRANCH) + } catch { + console.log(styleText("red", "An error occurred above while pulling updates.")) + await popContentFolder(contentFolder) + return + } + } + + await popContentFolder(contentFolder) + if (argv.push) { + console.log("Pushing your changes") + const currentBranch = execSync("git rev-parse --abbrev-ref HEAD").toString().trim() + const res = spawnSync("git", ["push", "-uf", ORIGIN_NAME, currentBranch], { + stdio: "inherit", + }) + if (res.status !== 0) { + console.log( + styleText("red", `An error occurred above while pushing to remote ${ORIGIN_NAME}.`), + ) + return + } + } + + console.log(styleText("green", "Done!")) +} diff --git a/quartz/cli/helpers.js b/quartz/cli/helpers.js new file mode 100644 index 0000000..1bc58ad --- /dev/null +++ b/quartz/cli/helpers.js @@ -0,0 +1,54 @@ +import { isCancel, outro } from "@clack/prompts" +import { styleText } from "util" +import { contentCacheFolder } from "./constants.js" +import { spawnSync } from "child_process" +import fs from "fs" + +export function escapePath(fp) { + return fp + .replace(/\\ /g, " ") // unescape spaces + .replace(/^".*"$/, "$1") + .replace(/^'.*"$/, "$1") + .trim() +} + +export function exitIfCancel(val) { + if (isCancel(val)) { + outro(styleText("red", "Exiting")) + process.exit(0) + } else { + return val + } +} + +export async function stashContentFolder(contentFolder) { + await fs.promises.rm(contentCacheFolder, { force: true, recursive: true }) + await fs.promises.cp(contentFolder, contentCacheFolder, { + force: true, + recursive: true, + verbatimSymlinks: true, + preserveTimestamps: true, + }) + await fs.promises.rm(contentFolder, { force: true, recursive: true }) +} + +export function gitPull(origin, branch) { + const flags = ["--no-rebase", "--autostash", "-s", "recursive", "-X", "ours", "--no-edit"] + const out = spawnSync("git", ["pull", ...flags, origin, branch], { stdio: "inherit" }) + if (out.stderr) { + throw new Error(styleText("red", `Error while pulling updates: ${out.stderr}`)) + } else if (out.status !== 0) { + throw new Error(styleText("red", "Error while pulling updates")) + } +} + +export async function popContentFolder(contentFolder) { + await fs.promises.rm(contentFolder, { force: true, recursive: true }) + await fs.promises.cp(contentCacheFolder, contentFolder, { + force: true, + recursive: true, + verbatimSymlinks: true, + preserveTimestamps: true, + }) + await fs.promises.rm(contentCacheFolder, { force: true, recursive: true }) +} diff --git a/quartz/components/ArticleTitle.tsx b/quartz/components/ArticleTitle.tsx new file mode 100644 index 0000000..318aeb2 --- /dev/null +++ b/quartz/components/ArticleTitle.tsx @@ -0,0 +1,19 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import { classNames } from "../util/lang" + +const ArticleTitle: QuartzComponent = ({ fileData, displayClass }: QuartzComponentProps) => { + const title = fileData.frontmatter?.title + if (title) { + return

{title}

+ } else { + return null + } +} + +ArticleTitle.css = ` +.article-title { + margin: 2rem 0 0 0; +} +` + +export default (() => ArticleTitle) satisfies QuartzComponentConstructor diff --git a/quartz/components/Backlinks.tsx b/quartz/components/Backlinks.tsx new file mode 100644 index 0000000..0d34457 --- /dev/null +++ b/quartz/components/Backlinks.tsx @@ -0,0 +1,55 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import style from "./styles/backlinks.scss" +import { resolveRelative, simplifySlug } from "../util/path" +import { i18n } from "../i18n" +import { classNames } from "../util/lang" +import OverflowListFactory from "./OverflowList" + +interface BacklinksOptions { + hideWhenEmpty: boolean +} + +const defaultOptions: BacklinksOptions = { + hideWhenEmpty: true, +} + +export default ((opts?: Partial) => { + const options: BacklinksOptions = { ...defaultOptions, ...opts } + const { OverflowList, overflowListAfterDOMLoaded } = OverflowListFactory() + + const Backlinks: QuartzComponent = ({ + fileData, + allFiles, + displayClass, + cfg, + }: QuartzComponentProps) => { + const slug = simplifySlug(fileData.slug!) + const backlinkFiles = allFiles.filter((file) => file.links?.includes(slug)) + if (options.hideWhenEmpty && backlinkFiles.length == 0) { + return null + } + return ( +
+

{i18n(cfg.locale).components.backlinks.title}

+ + {backlinkFiles.length > 0 ? ( + backlinkFiles.map((f) => ( +
  • + + {f.frontmatter?.title} + +
  • + )) + ) : ( +
  • {i18n(cfg.locale).components.backlinks.noBacklinksFound}
  • + )} +
    +
    + ) + } + + Backlinks.css = style + Backlinks.afterDOMLoaded = overflowListAfterDOMLoaded + + return Backlinks +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Body.tsx b/quartz/components/Body.tsx new file mode 100644 index 0000000..96b6278 --- /dev/null +++ b/quartz/components/Body.tsx @@ -0,0 +1,13 @@ +// @ts-ignore +import clipboardScript from "./scripts/clipboard.inline" +import clipboardStyle from "./styles/clipboard.scss" +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" + +const Body: QuartzComponent = ({ children }: QuartzComponentProps) => { + return
    {children}
    +} + +Body.afterDOMLoaded = clipboardScript +Body.css = clipboardStyle + +export default (() => Body) satisfies QuartzComponentConstructor diff --git a/quartz/components/Breadcrumbs.tsx b/quartz/components/Breadcrumbs.tsx new file mode 100644 index 0000000..5144a31 --- /dev/null +++ b/quartz/components/Breadcrumbs.tsx @@ -0,0 +1,93 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import breadcrumbsStyle from "./styles/breadcrumbs.scss" +import { FullSlug, SimpleSlug, resolveRelative, simplifySlug } from "../util/path" +import { classNames } from "../util/lang" +import { trieFromAllFiles } from "../util/ctx" + +type CrumbData = { + displayName: string + path: string +} + +interface BreadcrumbOptions { + /** + * Symbol between crumbs + */ + spacerSymbol: string + /** + * Name of first crumb + */ + rootName: string + /** + * Whether to look up frontmatter title for folders (could cause performance problems with big vaults) + */ + resolveFrontmatterTitle: boolean + /** + * Whether to display the current page in the breadcrumbs. + */ + showCurrentPage: boolean +} + +const defaultOptions: BreadcrumbOptions = { + spacerSymbol: "❯", + rootName: "Home", + resolveFrontmatterTitle: true, + showCurrentPage: true, +} + +function formatCrumb(displayName: string, baseSlug: FullSlug, currentSlug: SimpleSlug): CrumbData { + return { + displayName: displayName.replaceAll("-", " "), + path: resolveRelative(baseSlug, currentSlug), + } +} + +export default ((opts?: Partial) => { + const options: BreadcrumbOptions = { ...defaultOptions, ...opts } + const Breadcrumbs: QuartzComponent = ({ + fileData, + allFiles, + displayClass, + ctx, + }: QuartzComponentProps) => { + const trie = (ctx.trie ??= trieFromAllFiles(allFiles)) + const slugParts = fileData.slug!.split("/") + const pathNodes = trie.ancestryChain(slugParts) + + if (!pathNodes) { + return null + } + + const crumbs: CrumbData[] = pathNodes.map((node, idx) => { + const crumb = formatCrumb(node.displayName, fileData.slug!, simplifySlug(node.slug)) + if (idx === 0) { + crumb.displayName = options.rootName + } + + // For last node (current page), set empty path + if (idx === pathNodes.length - 1) { + crumb.path = "" + } + + return crumb + }) + + if (!options.showCurrentPage) { + crumbs.pop() + } + + return ( + + ) + } + Breadcrumbs.css = breadcrumbsStyle + + return Breadcrumbs +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Comments.tsx b/quartz/components/Comments.tsx new file mode 100644 index 0000000..a731521 --- /dev/null +++ b/quartz/components/Comments.tsx @@ -0,0 +1,62 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import { classNames } from "../util/lang" +// @ts-ignore +import script from "./scripts/comments.inline" + +type Options = { + provider: "giscus" + options: { + repo: `${string}/${string}` + repoId: string + category: string + categoryId: string + themeUrl?: string + lightTheme?: string + darkTheme?: string + mapping?: "url" | "title" | "og:title" | "specific" | "number" | "pathname" + strict?: boolean + reactionsEnabled?: boolean + inputPosition?: "top" | "bottom" + lang?: string + } +} + +function boolToStringBool(b: boolean): string { + return b ? "1" : "0" +} + +export default ((opts: Options) => { + const Comments: QuartzComponent = ({ displayClass, fileData, cfg }: QuartzComponentProps) => { + // check if comments should be displayed according to frontmatter + const disableComment: boolean = + typeof fileData.frontmatter?.comments !== "undefined" && + (!fileData.frontmatter?.comments || fileData.frontmatter?.comments === "false") + if (disableComment) { + return <> + } + + return ( +
    + ) + } + + Comments.afterDOMLoaded = script + + return Comments +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/ConditionalRender.tsx b/quartz/components/ConditionalRender.tsx new file mode 100644 index 0000000..74a4db0 --- /dev/null +++ b/quartz/components/ConditionalRender.tsx @@ -0,0 +1,22 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" + +type ConditionalRenderConfig = { + component: QuartzComponent + condition: (props: QuartzComponentProps) => boolean +} + +export default ((config: ConditionalRenderConfig) => { + const ConditionalRender: QuartzComponent = (props: QuartzComponentProps) => { + if (config.condition(props)) { + return + } + + return null + } + + ConditionalRender.afterDOMLoaded = config.component.afterDOMLoaded + ConditionalRender.beforeDOMLoaded = config.component.beforeDOMLoaded + ConditionalRender.css = config.component.css + + return ConditionalRender +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/ContentMeta.tsx b/quartz/components/ContentMeta.tsx new file mode 100644 index 0000000..e378bcc --- /dev/null +++ b/quartz/components/ContentMeta.tsx @@ -0,0 +1,58 @@ +import { Date, getDate } from "./Date" +import { QuartzComponentConstructor, QuartzComponentProps } from "./types" +import readingTime from "reading-time" +import { classNames } from "../util/lang" +import { i18n } from "../i18n" +import { JSX } from "preact" +import style from "./styles/contentMeta.scss" + +interface ContentMetaOptions { + /** + * Whether to display reading time + */ + showReadingTime: boolean + showComma: boolean +} + +const defaultOptions: ContentMetaOptions = { + showReadingTime: true, + showComma: true, +} + +export default ((opts?: Partial) => { + // Merge options with defaults + const options: ContentMetaOptions = { ...defaultOptions, ...opts } + + function ContentMetadata({ cfg, fileData, displayClass }: QuartzComponentProps) { + const text = fileData.text + + if (text) { + const segments: (string | JSX.Element)[] = [] + + if (fileData.dates) { + segments.push() + } + + // Display reading time if enabled + if (options.showReadingTime) { + const { minutes, words: _words } = readingTime(text) + const displayedTime = i18n(cfg.locale).components.contentMeta.readingTime({ + minutes: Math.ceil(minutes), + }) + segments.push({displayedTime}) + } + + return ( +

    + {segments} +

    + ) + } else { + return null + } + } + + ContentMetadata.css = style + + return ContentMetadata +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Darkmode.tsx b/quartz/components/Darkmode.tsx new file mode 100644 index 0000000..afc23d7 --- /dev/null +++ b/quartz/components/Darkmode.tsx @@ -0,0 +1,48 @@ +// @ts-ignore +import darkmodeScript from "./scripts/darkmode.inline" +import styles from "./styles/darkmode.scss" +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import { i18n } from "../i18n" +import { classNames } from "../util/lang" + +const Darkmode: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => { + return ( + + ) +} + +Darkmode.beforeDOMLoaded = darkmodeScript +Darkmode.css = styles + +export default (() => Darkmode) satisfies QuartzComponentConstructor diff --git a/quartz/components/Date.tsx b/quartz/components/Date.tsx new file mode 100644 index 0000000..0a92cc4 --- /dev/null +++ b/quartz/components/Date.tsx @@ -0,0 +1,31 @@ +import { GlobalConfiguration } from "../cfg" +import { ValidLocale } from "../i18n" +import { QuartzPluginData } from "../plugins/vfile" + +interface Props { + date: Date + locale?: ValidLocale +} + +export type ValidDateType = keyof Required["dates"] + +export function getDate(cfg: GlobalConfiguration, data: QuartzPluginData): Date | undefined { + if (!cfg.defaultDateType) { + throw new Error( + `Field 'defaultDateType' was not set in the configuration object of quartz.config.ts. See https://quartz.jzhao.xyz/configuration#general-configuration for more details.`, + ) + } + return data.dates?.[cfg.defaultDateType] +} + +export function formatDate(d: Date, locale: ValidLocale = "en-US"): string { + return d.toLocaleDateString(locale, { + year: "numeric", + month: "short", + day: "2-digit", + }) +} + +export function Date({ date, locale }: Props) { + return +} diff --git a/quartz/components/DesktopOnly.tsx b/quartz/components/DesktopOnly.tsx new file mode 100644 index 0000000..ee80137 --- /dev/null +++ b/quartz/components/DesktopOnly.tsx @@ -0,0 +1,14 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" + +export default ((component: QuartzComponent) => { + const Component = component + const DesktopOnly: QuartzComponent = (props: QuartzComponentProps) => { + return + } + + DesktopOnly.displayName = component.displayName + DesktopOnly.afterDOMLoaded = component?.afterDOMLoaded + DesktopOnly.beforeDOMLoaded = component?.beforeDOMLoaded + DesktopOnly.css = component?.css + return DesktopOnly +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Explorer.tsx b/quartz/components/Explorer.tsx new file mode 100644 index 0000000..56784f1 --- /dev/null +++ b/quartz/components/Explorer.tsx @@ -0,0 +1,162 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import style from "./styles/explorer.scss" + +// @ts-ignore +import script from "./scripts/explorer.inline" +import { classNames } from "../util/lang" +import { i18n } from "../i18n" +import { FileTrieNode } from "../util/fileTrie" +import OverflowListFactory from "./OverflowList" +import { concatenateResources } from "../util/resources" + +type OrderEntries = "sort" | "filter" | "map" + +export interface Options { + title?: string + folderDefaultState: "collapsed" | "open" + folderClickBehavior: "collapse" | "link" + useSavedState: boolean + sortFn: (a: FileTrieNode, b: FileTrieNode) => number + filterFn: (node: FileTrieNode) => boolean + mapFn: (node: FileTrieNode) => void + order: OrderEntries[] +} + +const defaultOptions: Options = { + folderDefaultState: "collapsed", + folderClickBehavior: "link", + useSavedState: true, + mapFn: (node) => { + return node + }, + sortFn: (a, b) => { + // Sort order: folders first, then files. Sort folders and files alphabeticall + if ((!a.isFolder && !b.isFolder) || (a.isFolder && b.isFolder)) { + // numeric: true: Whether numeric collation should be used, such that "1" < "2" < "10" + // sensitivity: "base": Only strings that differ in base letters compare as unequal. Examples: a ≠ b, a = á, a = A + return a.displayName.localeCompare(b.displayName, undefined, { + numeric: true, + sensitivity: "base", + }) + } + + if (!a.isFolder && b.isFolder) { + return 1 + } else { + return -1 + } + }, + filterFn: (node) => node.slugSegment !== "tags", + order: ["filter", "map", "sort"], +} + +export type FolderState = { + path: string + collapsed: boolean +} + +export default ((userOpts?: Partial) => { + const opts: Options = { ...defaultOptions, ...userOpts } + const { OverflowList, overflowListAfterDOMLoaded } = OverflowListFactory() + + const Explorer: QuartzComponent = ({ cfg, displayClass }: QuartzComponentProps) => { + return ( +
    + + +
    + +
    + + +
    + ) + } + + Explorer.css = style + Explorer.afterDOMLoaded = concatenateResources(script, overflowListAfterDOMLoaded) + return Explorer +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Flex.tsx b/quartz/components/Flex.tsx new file mode 100644 index 0000000..70d2149 --- /dev/null +++ b/quartz/components/Flex.tsx @@ -0,0 +1,59 @@ +import { concatenateResources } from "../util/resources" +import { classNames } from "../util/lang" +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" + +type FlexConfig = { + components: { + Component: QuartzComponent + grow?: boolean + shrink?: boolean + basis?: string + order?: number + align?: "start" | "end" | "center" | "stretch" + justify?: "start" | "end" | "center" | "between" | "around" + }[] + direction?: "row" | "row-reverse" | "column" | "column-reverse" + wrap?: "nowrap" | "wrap" | "wrap-reverse" + gap?: string +} + +export default ((config: FlexConfig) => { + const Flex: QuartzComponent = (props: QuartzComponentProps) => { + const direction = config.direction ?? "row" + const wrap = config.wrap ?? "nowrap" + const gap = config.gap ?? "1rem" + + return ( +
    + {config.components.map((c) => { + const grow = c.grow ? 1 : 0 + const shrink = (c.shrink ?? true) ? 1 : 0 + const basis = c.basis ?? "auto" + const order = c.order ?? 0 + const align = c.align ?? "center" + const justify = c.justify ?? "center" + + return ( +
    + +
    + ) + })} +
    + ) + } + + Flex.afterDOMLoaded = concatenateResources( + ...config.components.map((c) => c.Component.afterDOMLoaded), + ) + Flex.beforeDOMLoaded = concatenateResources( + ...config.components.map((c) => c.Component.beforeDOMLoaded), + ) + Flex.css = concatenateResources(...config.components.map((c) => c.Component.css)) + return Flex +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Footer.tsx b/quartz/components/Footer.tsx new file mode 100644 index 0000000..cff28cb --- /dev/null +++ b/quartz/components/Footer.tsx @@ -0,0 +1,33 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import style from "./styles/footer.scss" +import { version } from "../../package.json" +import { i18n } from "../i18n" + +interface Options { + links: Record +} + +export default ((opts?: Options) => { + const Footer: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => { + const year = new Date().getFullYear() + const links = opts?.links ?? [] + return ( +
    +

    + {i18n(cfg.locale).components.footer.createdWith}{" "} + Quartz v{version} © {year} +

    +
      + {Object.entries(links).map(([text, link]) => ( +
    • + {text} +
    • + ))} +
    +
    + ) + } + + Footer.css = style + return Footer +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Graph.tsx b/quartz/components/Graph.tsx new file mode 100644 index 0000000..907372e --- /dev/null +++ b/quartz/components/Graph.tsx @@ -0,0 +1,109 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +// @ts-ignore +import script from "./scripts/graph.inline" +import style from "./styles/graph.scss" +import { i18n } from "../i18n" +import { classNames } from "../util/lang" + +export interface D3Config { + drag: boolean + zoom: boolean + depth: number + scale: number + repelForce: number + centerForce: number + linkDistance: number + fontSize: number + opacityScale: number + removeTags: string[] + showTags: boolean + focusOnHover?: boolean + enableRadial?: boolean +} + +interface GraphOptions { + localGraph: Partial | undefined + globalGraph: Partial | undefined +} + +const defaultOptions: GraphOptions = { + localGraph: { + drag: true, + zoom: true, + depth: 1, + scale: 1.1, + repelForce: 0.5, + centerForce: 0.3, + linkDistance: 30, + fontSize: 0.6, + opacityScale: 1, + showTags: true, + removeTags: [], + focusOnHover: false, + enableRadial: false, + }, + globalGraph: { + drag: true, + zoom: true, + depth: -1, + scale: 0.9, + repelForce: 0.5, + centerForce: 0.2, + linkDistance: 30, + fontSize: 0.6, + opacityScale: 1, + showTags: true, + removeTags: [], + focusOnHover: true, + enableRadial: true, + }, +} + +export default ((opts?: Partial) => { + const Graph: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => { + const localGraph = { ...defaultOptions.localGraph, ...opts?.localGraph } + const globalGraph = { ...defaultOptions.globalGraph, ...opts?.globalGraph } + return ( +
    +

    {i18n(cfg.locale).components.graph.title}

    +
    +
    + +
    +
    +
    +
    +
    + ) + } + + Graph.css = style + Graph.afterDOMLoaded = script + + return Graph +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Head.tsx b/quartz/components/Head.tsx new file mode 100644 index 0000000..23183ca --- /dev/null +++ b/quartz/components/Head.tsx @@ -0,0 +1,105 @@ +import { i18n } from "../i18n" +import { FullSlug, getFileExtension, joinSegments, pathToRoot } from "../util/path" +import { CSSResourceToStyleElement, JSResourceToScriptElement } from "../util/resources" +import { googleFontHref, googleFontSubsetHref } from "../util/theme" +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import { unescapeHTML } from "../util/escape" +import { CustomOgImagesEmitterName } from "../plugins/emitters/ogImage" +export default (() => { + const Head: QuartzComponent = ({ + cfg, + fileData, + externalResources, + ctx, + }: QuartzComponentProps) => { + const titleSuffix = cfg.pageTitleSuffix ?? "" + const title = + (fileData.frontmatter?.title ?? i18n(cfg.locale).propertyDefaults.title) + titleSuffix + const description = + fileData.frontmatter?.socialDescription ?? + fileData.frontmatter?.description ?? + unescapeHTML(fileData.description?.trim() ?? i18n(cfg.locale).propertyDefaults.description) + + const { css, js, additionalHead } = externalResources + + const url = new URL(`https://${cfg.baseUrl ?? "example.com"}`) + const path = url.pathname as FullSlug + const baseDir = fileData.slug === "404" ? path : pathToRoot(fileData.slug!) + const iconPath = joinSegments(baseDir, "static/icon.png") + + // Url of current page + const socialUrl = + fileData.slug === "404" ? url.toString() : joinSegments(url.toString(), fileData.slug!) + + const usesCustomOgImage = ctx.cfg.plugins.emitters.some( + (e) => e.name === CustomOgImagesEmitterName, + ) + const ogImageDefaultPath = `https://${cfg.baseUrl}/static/og-image.png` + + return ( + + {title} + + {cfg.theme.cdnCaching && cfg.theme.fontOrigin === "googleFonts" && ( + <> + + + + {cfg.theme.typography.title && ( + + )} + + )} + + + + + + + + + + + + + {!usesCustomOgImage && ( + <> + + + + + + )} + + {cfg.baseUrl && ( + <> + + + + + )} + + + + + + {css.map((resource) => CSSResourceToStyleElement(resource, true))} + {js + .filter((resource) => resource.loadTime === "beforeDOMReady") + .map((res) => JSResourceToScriptElement(res, true))} + {additionalHead.map((resource) => { + if (typeof resource === "function") { + return resource(fileData) + } else { + return resource + } + })} + + ) + } + + return Head +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Header.tsx b/quartz/components/Header.tsx new file mode 100644 index 0000000..eba17ae --- /dev/null +++ b/quartz/components/Header.tsx @@ -0,0 +1,22 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" + +const Header: QuartzComponent = ({ children }: QuartzComponentProps) => { + return children.length > 0 ?
    {children}
    : null +} + +Header.css = ` +header { + display: flex; + flex-direction: row; + align-items: center; + margin: 2rem 0; + gap: 1.5rem; +} + +header h1 { + margin: 0; + flex: auto; +} +` + +export default (() => Header) satisfies QuartzComponentConstructor diff --git a/quartz/components/MobileOnly.tsx b/quartz/components/MobileOnly.tsx new file mode 100644 index 0000000..29958cf --- /dev/null +++ b/quartz/components/MobileOnly.tsx @@ -0,0 +1,14 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" + +export default ((component: QuartzComponent) => { + const Component = component + const MobileOnly: QuartzComponent = (props: QuartzComponentProps) => { + return + } + + MobileOnly.displayName = component.displayName + MobileOnly.afterDOMLoaded = component?.afterDOMLoaded + MobileOnly.beforeDOMLoaded = component?.beforeDOMLoaded + MobileOnly.css = component?.css + return MobileOnly +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/OverflowList.tsx b/quartz/components/OverflowList.tsx new file mode 100644 index 0000000..2cd1a75 --- /dev/null +++ b/quartz/components/OverflowList.tsx @@ -0,0 +1,48 @@ +import { JSX } from "preact" + +const OverflowList = ({ + children, + ...props +}: JSX.HTMLAttributes & { id: string }) => { + return ( +
      + {children} +
    • +
    + ) +} + +let numExplorers = 0 +export default () => { + const id = `list-${numExplorers++}` + + return { + OverflowList: (props: JSX.HTMLAttributes) => ( + + ), + overflowListAfterDOMLoaded: ` +document.addEventListener("nav", (e) => { + const observer = new IntersectionObserver((entries) => { + for (const entry of entries) { + const parentUl = entry.target.parentElement + if (!parentUl) return + if (entry.isIntersecting) { + parentUl.classList.remove("gradient-active") + } else { + parentUl.classList.add("gradient-active") + } + } + }) + + const ul = document.getElementById("${id}") + if (!ul) return + + const end = ul.querySelector(".overflow-end") + if (!end) return + + observer.observe(end) + window.addCleanup(() => observer.disconnect()) +}) +`, + } +} diff --git a/quartz/components/PageList.tsx b/quartz/components/PageList.tsx new file mode 100644 index 0000000..7bf2382 --- /dev/null +++ b/quartz/components/PageList.tsx @@ -0,0 +1,114 @@ +import { FullSlug, isFolderPath, resolveRelative } from "../util/path" +import { QuartzPluginData } from "../plugins/vfile" +import { Date, getDate } from "./Date" +import { QuartzComponent, QuartzComponentProps } from "./types" +import { GlobalConfiguration } from "../cfg" + +export type SortFn = (f1: QuartzPluginData, f2: QuartzPluginData) => number + +export function byDateAndAlphabetical(cfg: GlobalConfiguration): SortFn { + return (f1, f2) => { + // Sort by date/alphabetical + if (f1.dates && f2.dates) { + // sort descending + return getDate(cfg, f2)!.getTime() - getDate(cfg, f1)!.getTime() + } else if (f1.dates && !f2.dates) { + // prioritize files with dates + return -1 + } else if (!f1.dates && f2.dates) { + return 1 + } + + // otherwise, sort lexographically by title + const f1Title = f1.frontmatter?.title.toLowerCase() ?? "" + const f2Title = f2.frontmatter?.title.toLowerCase() ?? "" + return f1Title.localeCompare(f2Title) + } +} + +export function byDateAndAlphabeticalFolderFirst(cfg: GlobalConfiguration): SortFn { + return (f1, f2) => { + // Sort folders first + const f1IsFolder = isFolderPath(f1.slug ?? "") + const f2IsFolder = isFolderPath(f2.slug ?? "") + if (f1IsFolder && !f2IsFolder) return -1 + if (!f1IsFolder && f2IsFolder) return 1 + + // If both are folders or both are files, sort by date/alphabetical + if (f1.dates && f2.dates) { + // sort descending + return getDate(cfg, f2)!.getTime() - getDate(cfg, f1)!.getTime() + } else if (f1.dates && !f2.dates) { + // prioritize files with dates + return -1 + } else if (!f1.dates && f2.dates) { + return 1 + } + + // otherwise, sort lexographically by title + const f1Title = f1.frontmatter?.title.toLowerCase() ?? "" + const f2Title = f2.frontmatter?.title.toLowerCase() ?? "" + return f1Title.localeCompare(f2Title) + } +} + +type Props = { + limit?: number + sort?: SortFn +} & QuartzComponentProps + +export const PageList: QuartzComponent = ({ cfg, fileData, allFiles, limit, sort }: Props) => { + const sorter = sort ?? byDateAndAlphabeticalFolderFirst(cfg) + let list = allFiles.sort(sorter) + if (limit) { + list = list.slice(0, limit) + } + + return ( +
      + {list.map((page) => { + const title = page.frontmatter?.title + const tags = page.frontmatter?.tags ?? [] + + return ( +
    • +
      +

      + {page.dates && } +

      + + +
      +
    • + ) + })} +
    + ) +} + +PageList.css = ` +.section h3 { + margin: 0; +} + +.section > .tags { + margin: 0; +} +` diff --git a/quartz/components/PageTitle.tsx b/quartz/components/PageTitle.tsx new file mode 100644 index 0000000..53ee824 --- /dev/null +++ b/quartz/components/PageTitle.tsx @@ -0,0 +1,24 @@ +import { pathToRoot } from "../util/path" +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import { classNames } from "../util/lang" +import { i18n } from "../i18n" + +const PageTitle: QuartzComponent = ({ fileData, cfg, displayClass }: QuartzComponentProps) => { + const title = cfg?.pageTitle ?? i18n(cfg.locale).propertyDefaults.title + const baseDir = pathToRoot(fileData.slug!) + return ( +

    + {title} +

    + ) +} + +PageTitle.css = ` +.page-title { + font-size: 1.75rem; + margin: 0; + font-family: var(--titleFont); +} +` + +export default (() => PageTitle) satisfies QuartzComponentConstructor diff --git a/quartz/components/ReaderMode.tsx b/quartz/components/ReaderMode.tsx new file mode 100644 index 0000000..4b3165e --- /dev/null +++ b/quartz/components/ReaderMode.tsx @@ -0,0 +1,38 @@ +// @ts-ignore +import readerModeScript from "./scripts/readermode.inline" +import styles from "./styles/readermode.scss" +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import { i18n } from "../i18n" +import { classNames } from "../util/lang" + +const ReaderMode: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => { + return ( + + ) +} + +ReaderMode.beforeDOMLoaded = readerModeScript +ReaderMode.css = styles + +export default (() => ReaderMode) satisfies QuartzComponentConstructor diff --git a/quartz/components/RecentNotes.tsx b/quartz/components/RecentNotes.tsx new file mode 100644 index 0000000..2c32fea --- /dev/null +++ b/quartz/components/RecentNotes.tsx @@ -0,0 +1,93 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import { FullSlug, SimpleSlug, resolveRelative } from "../util/path" +import { QuartzPluginData } from "../plugins/vfile" +import { byDateAndAlphabetical } from "./PageList" +import style from "./styles/recentNotes.scss" +import { Date, getDate } from "./Date" +import { GlobalConfiguration } from "../cfg" +import { i18n } from "../i18n" +import { classNames } from "../util/lang" + +interface Options { + title?: string + limit: number + linkToMore: SimpleSlug | false + showTags: boolean + filter: (f: QuartzPluginData) => boolean + sort: (f1: QuartzPluginData, f2: QuartzPluginData) => number +} + +const defaultOptions = (cfg: GlobalConfiguration): Options => ({ + limit: 3, + linkToMore: false, + showTags: true, + filter: () => true, + sort: byDateAndAlphabetical(cfg), +}) + +export default ((userOpts?: Partial) => { + const RecentNotes: QuartzComponent = ({ + allFiles, + fileData, + displayClass, + cfg, + }: QuartzComponentProps) => { + const opts = { ...defaultOptions(cfg), ...userOpts } + const pages = allFiles.filter(opts.filter).sort(opts.sort) + const remaining = Math.max(0, pages.length - opts.limit) + return ( +
    +

    {opts.title ?? i18n(cfg.locale).components.recentNotes.title}

    +
      + {pages.slice(0, opts.limit).map((page) => { + const title = page.frontmatter?.title ?? i18n(cfg.locale).propertyDefaults.title + const tags = page.frontmatter?.tags ?? [] + + return ( +
    • +
      + + {page.dates && ( +

      + +

      + )} + {opts.showTags && ( + + )} +
      +
    • + ) + })} +
    + {opts.linkToMore && remaining > 0 && ( +

    + + {i18n(cfg.locale).components.recentNotes.seeRemainingMore({ remaining })} + +

    + )} +
    + ) + } + + RecentNotes.css = style + return RecentNotes +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Search.tsx b/quartz/components/Search.tsx new file mode 100644 index 0000000..4c6664a --- /dev/null +++ b/quartz/components/Search.tsx @@ -0,0 +1,53 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import style from "./styles/search.scss" +// @ts-ignore +import script from "./scripts/search.inline" +import { classNames } from "../util/lang" +import { i18n } from "../i18n" + +export interface SearchOptions { + enablePreview: boolean +} + +const defaultOptions: SearchOptions = { + enablePreview: true, +} + +export default ((userOpts?: Partial) => { + const Search: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => { + const opts = { ...defaultOptions, ...userOpts } + const searchPlaceholder = i18n(cfg.locale).components.search.searchBarPlaceholder + return ( +
    + +
    +
    + +
    +
    +
    +
    + ) + } + + Search.afterDOMLoaded = script + Search.css = style + + return Search +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Spacer.tsx b/quartz/components/Spacer.tsx new file mode 100644 index 0000000..5288752 --- /dev/null +++ b/quartz/components/Spacer.tsx @@ -0,0 +1,8 @@ +import { QuartzComponentConstructor, QuartzComponentProps } from "./types" +import { classNames } from "../util/lang" + +function Spacer({ displayClass }: QuartzComponentProps) { + return
    +} + +export default (() => Spacer) satisfies QuartzComponentConstructor diff --git a/quartz/components/TableOfContents.tsx b/quartz/components/TableOfContents.tsx new file mode 100644 index 0000000..f3dc905 --- /dev/null +++ b/quartz/components/TableOfContents.tsx @@ -0,0 +1,96 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import legacyStyle from "./styles/legacyToc.scss" +import modernStyle from "./styles/toc.scss" +import { classNames } from "../util/lang" + +// @ts-ignore +import script from "./scripts/toc.inline" +import { i18n } from "../i18n" +import OverflowListFactory from "./OverflowList" +import { concatenateResources } from "../util/resources" + +interface Options { + layout: "modern" | "legacy" +} + +const defaultOptions: Options = { + layout: "modern", +} + +export default ((opts?: Partial) => { + const layout = opts?.layout ?? defaultOptions.layout + const { OverflowList, overflowListAfterDOMLoaded } = OverflowListFactory() + const TableOfContents: QuartzComponent = ({ + fileData, + displayClass, + cfg, + }: QuartzComponentProps) => { + if (!fileData.toc) { + return null + } + + return ( +
    + + + {fileData.toc.map((tocEntry) => ( +
  • + + {tocEntry.text} + +
  • + ))} +
    +
    + ) + } + + TableOfContents.css = modernStyle + TableOfContents.afterDOMLoaded = concatenateResources(script, overflowListAfterDOMLoaded) + + const LegacyTableOfContents: QuartzComponent = ({ fileData, cfg }: QuartzComponentProps) => { + if (!fileData.toc) { + return null + } + return ( +
    + +

    {i18n(cfg.locale).components.tableOfContents.title}

    +
    + +
    + ) + } + LegacyTableOfContents.css = legacyStyle + + return layout === "modern" ? TableOfContents : LegacyTableOfContents +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/TagList.tsx b/quartz/components/TagList.tsx new file mode 100644 index 0000000..c73ed39 --- /dev/null +++ b/quartz/components/TagList.tsx @@ -0,0 +1,56 @@ +import { FullSlug, resolveRelative } from "../util/path" +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" +import { classNames } from "../util/lang" + +const TagList: QuartzComponent = ({ fileData, displayClass }: QuartzComponentProps) => { + const tags = fileData.frontmatter?.tags + if (tags && tags.length > 0) { + return ( +
      + {tags.map((tag) => { + const linkDest = resolveRelative(fileData.slug!, `tags/${tag}` as FullSlug) + return ( +
    • + + {tag} + +
    • + ) + })} +
    + ) + } else { + return null + } +} + +TagList.css = ` +.tags { + list-style: none; + display: flex; + padding-left: 0; + gap: 0.4rem; + margin: 1rem 0; + flex-wrap: wrap; +} + +.section-li > .section > .tags { + justify-content: flex-end; +} + +.tags > li { + display: inline-block; + white-space: nowrap; + margin: 0; + overflow-wrap: normal; +} + +a.internal.tag-link { + border-radius: 8px; + background-color: var(--highlight); + padding: 0.2rem 0.4rem; + margin: 0 0.1rem; +} +` + +export default (() => TagList) satisfies QuartzComponentConstructor diff --git a/quartz/components/index.ts b/quartz/components/index.ts new file mode 100644 index 0000000..cece8e6 --- /dev/null +++ b/quartz/components/index.ts @@ -0,0 +1,53 @@ +import Content from "./pages/Content" +import TagContent from "./pages/TagContent" +import FolderContent from "./pages/FolderContent" +import NotFound from "./pages/404" +import ArticleTitle from "./ArticleTitle" +import Darkmode from "./Darkmode" +import ReaderMode from "./ReaderMode" +import Head from "./Head" +import PageTitle from "./PageTitle" +import ContentMeta from "./ContentMeta" +import Spacer from "./Spacer" +import TableOfContents from "./TableOfContents" +import Explorer from "./Explorer" +import TagList from "./TagList" +import Graph from "./Graph" +import Backlinks from "./Backlinks" +import Search from "./Search" +import Footer from "./Footer" +import DesktopOnly from "./DesktopOnly" +import MobileOnly from "./MobileOnly" +import RecentNotes from "./RecentNotes" +import Breadcrumbs from "./Breadcrumbs" +import Comments from "./Comments" +import Flex from "./Flex" +import ConditionalRender from "./ConditionalRender" + +export { + ArticleTitle, + Content, + TagContent, + FolderContent, + Darkmode, + ReaderMode, + Head, + PageTitle, + ContentMeta, + Spacer, + TableOfContents, + Explorer, + TagList, + Graph, + Backlinks, + Search, + Footer, + DesktopOnly, + MobileOnly, + RecentNotes, + NotFound, + Breadcrumbs, + Comments, + Flex, + ConditionalRender, +} diff --git a/quartz/components/pages/404.tsx b/quartz/components/pages/404.tsx new file mode 100644 index 0000000..63da2c8 --- /dev/null +++ b/quartz/components/pages/404.tsx @@ -0,0 +1,18 @@ +import { i18n } from "../../i18n" +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "../types" + +const NotFound: QuartzComponent = ({ cfg }: QuartzComponentProps) => { + // If baseUrl contains a pathname after the domain, use this as the home link + const url = new URL(`https://${cfg.baseUrl ?? "example.com"}`) + const baseDir = url.pathname + + return ( + + ) +} + +export default (() => NotFound) satisfies QuartzComponentConstructor diff --git a/quartz/components/pages/Content.tsx b/quartz/components/pages/Content.tsx new file mode 100644 index 0000000..e21aad7 --- /dev/null +++ b/quartz/components/pages/Content.tsx @@ -0,0 +1,12 @@ +import { ComponentChildren } from "preact" +import { htmlToJsx } from "../../util/jsx" +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "../types" + +const Content: QuartzComponent = ({ fileData, tree }: QuartzComponentProps) => { + const content = htmlToJsx(fileData.filePath!, tree) as ComponentChildren + const classes: string[] = fileData.frontmatter?.cssclasses ?? [] + const classString = ["popover-hint", ...classes].join(" ") + return
    {content}
    +} + +export default (() => Content) satisfies QuartzComponentConstructor diff --git a/quartz/components/pages/FolderContent.tsx b/quartz/components/pages/FolderContent.tsx new file mode 100644 index 0000000..afd4f5d --- /dev/null +++ b/quartz/components/pages/FolderContent.tsx @@ -0,0 +1,126 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "../types" + +import style from "../styles/listPage.scss" +import { PageList, SortFn } from "../PageList" +import { Root } from "hast" +import { htmlToJsx } from "../../util/jsx" +import { i18n } from "../../i18n" +import { QuartzPluginData } from "../../plugins/vfile" +import { ComponentChildren } from "preact" +import { concatenateResources } from "../../util/resources" +import { trieFromAllFiles } from "../../util/ctx" + +interface FolderContentOptions { + /** + * Whether to display number of folders + */ + showFolderCount: boolean + showSubfolders: boolean + sort?: SortFn +} + +const defaultOptions: FolderContentOptions = { + showFolderCount: true, + showSubfolders: true, +} + +export default ((opts?: Partial) => { + const options: FolderContentOptions = { ...defaultOptions, ...opts } + + const FolderContent: QuartzComponent = (props: QuartzComponentProps) => { + const { tree, fileData, allFiles, cfg } = props + + const trie = (props.ctx.trie ??= trieFromAllFiles(allFiles)) + const folder = trie.findNode(fileData.slug!.split("/")) + if (!folder) { + return null + } + + const allPagesInFolder: QuartzPluginData[] = + folder.children + .map((node) => { + // regular file, proceed + if (node.data) { + return node.data + } + + if (node.isFolder && options.showSubfolders) { + // folders that dont have data need synthetic files + const getMostRecentDates = (): QuartzPluginData["dates"] => { + let maybeDates: QuartzPluginData["dates"] | undefined = undefined + for (const child of node.children) { + if (child.data?.dates) { + // compare all dates and assign to maybeDates if its more recent or its not set + if (!maybeDates) { + maybeDates = { ...child.data.dates } + } else { + if (child.data.dates.created > maybeDates.created) { + maybeDates.created = child.data.dates.created + } + + if (child.data.dates.modified > maybeDates.modified) { + maybeDates.modified = child.data.dates.modified + } + + if (child.data.dates.published > maybeDates.published) { + maybeDates.published = child.data.dates.published + } + } + } + } + return ( + maybeDates ?? { + created: new Date(), + modified: new Date(), + published: new Date(), + } + ) + } + + return { + slug: node.slug, + dates: getMostRecentDates(), + frontmatter: { + title: node.displayName, + tags: [], + }, + } + } + }) + .filter((page) => page !== undefined) ?? [] + const cssClasses: string[] = fileData.frontmatter?.cssclasses ?? [] + const classes = cssClasses.join(" ") + const listProps = { + ...props, + sort: options.sort, + allFiles: allPagesInFolder, + } + + const content = ( + (tree as Root).children.length === 0 + ? fileData.description + : htmlToJsx(fileData.filePath!, tree) + ) as ComponentChildren + + return ( +
    +
    {content}
    +
    + {options.showFolderCount && ( +

    + {i18n(cfg.locale).pages.folderContent.itemsUnderFolder({ + count: allPagesInFolder.length, + })} +

    + )} +
    + +
    +
    +
    + ) + } + + FolderContent.css = concatenateResources(style, PageList.css) + return FolderContent +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/pages/TagContent.tsx b/quartz/components/pages/TagContent.tsx new file mode 100644 index 0000000..a1df6e1 --- /dev/null +++ b/quartz/components/pages/TagContent.tsx @@ -0,0 +1,133 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "../types" +import style from "../styles/listPage.scss" +import { PageList, SortFn } from "../PageList" +import { FullSlug, getAllSegmentPrefixes, resolveRelative, simplifySlug } from "../../util/path" +import { QuartzPluginData } from "../../plugins/vfile" +import { Root } from "hast" +import { htmlToJsx } from "../../util/jsx" +import { i18n } from "../../i18n" +import { ComponentChildren } from "preact" +import { concatenateResources } from "../../util/resources" + +interface TagContentOptions { + sort?: SortFn + numPages: number +} + +const defaultOptions: TagContentOptions = { + numPages: 10, +} + +export default ((opts?: Partial) => { + const options: TagContentOptions = { ...defaultOptions, ...opts } + + const TagContent: QuartzComponent = (props: QuartzComponentProps) => { + const { tree, fileData, allFiles, cfg } = props + const slug = fileData.slug + + if (!(slug?.startsWith("tags/") || slug === "tags")) { + throw new Error(`Component "TagContent" tried to render a non-tag page: ${slug}`) + } + + const tag = simplifySlug(slug.slice("tags/".length) as FullSlug) + const allPagesWithTag = (tag: string) => + allFiles.filter((file) => + (file.frontmatter?.tags ?? []).flatMap(getAllSegmentPrefixes).includes(tag), + ) + + const content = ( + (tree as Root).children.length === 0 + ? fileData.description + : htmlToJsx(fileData.filePath!, tree) + ) as ComponentChildren + const cssClasses: string[] = fileData.frontmatter?.cssclasses ?? [] + const classes = cssClasses.join(" ") + if (tag === "/") { + const tags = [ + ...new Set( + allFiles.flatMap((data) => data.frontmatter?.tags ?? []).flatMap(getAllSegmentPrefixes), + ), + ].sort((a, b) => a.localeCompare(b)) + const tagItemMap: Map = new Map() + for (const tag of tags) { + tagItemMap.set(tag, allPagesWithTag(tag)) + } + return ( +
    +
    +

    {content}

    +
    +

    {i18n(cfg.locale).pages.tagContent.totalTags({ count: tags.length })}

    +
    + {tags.map((tag) => { + const pages = tagItemMap.get(tag)! + const listProps = { + ...props, + allFiles: pages, + } + + const contentPage = allFiles.filter((file) => file.slug === `tags/${tag}`).at(0) + + const root = contentPage?.htmlAst + const content = + !root || root?.children.length === 0 + ? contentPage?.description + : htmlToJsx(contentPage.filePath!, root) + + const tagListingPage = `/tags/${tag}` as FullSlug + const href = resolveRelative(fileData.slug!, tagListingPage) + + return ( +
    +

    + + {tag} + +

    + {content &&

    {content}

    } +
    +

    + {i18n(cfg.locale).pages.tagContent.itemsUnderTag({ count: pages.length })} + {pages.length > options.numPages && ( + <> + {" "} + + {i18n(cfg.locale).pages.tagContent.showingFirst({ + count: options.numPages, + })} + + + )} +

    + +
    +
    + ) + })} +
    +
    + ) + } else { + const pages = allPagesWithTag(tag) + const listProps = { + ...props, + allFiles: pages, + } + + return ( +
    +
    {content}
    +
    +

    {i18n(cfg.locale).pages.tagContent.itemsUnderTag({ count: pages.length })}

    +
    + +
    +
    +
    + ) + } + } + + TagContent.css = concatenateResources(style, PageList.css) + return TagContent +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/renderPage.tsx b/quartz/components/renderPage.tsx new file mode 100644 index 0000000..e43189d --- /dev/null +++ b/quartz/components/renderPage.tsx @@ -0,0 +1,274 @@ +import { render } from "preact-render-to-string" +import { QuartzComponent, QuartzComponentProps } from "./types" +import HeaderConstructor from "./Header" +import BodyConstructor from "./Body" +import { JSResourceToScriptElement, StaticResources } from "../util/resources" +import { FullSlug, RelativeURL, joinSegments, normalizeHastElement } from "../util/path" +import { clone } from "../util/clone" +import { visit } from "unist-util-visit" +import { Root, Element, ElementContent } from "hast" +import { GlobalConfiguration } from "../cfg" +import { i18n } from "../i18n" + +interface RenderComponents { + head: QuartzComponent + header: QuartzComponent[] + beforeBody: QuartzComponent[] + pageBody: QuartzComponent + afterBody: QuartzComponent[] + left: QuartzComponent[] + right: QuartzComponent[] + footer: QuartzComponent +} + +const headerRegex = new RegExp(/h[1-6]/) +export function pageResources( + baseDir: FullSlug | RelativeURL, + staticResources: StaticResources, +): StaticResources { + const contentIndexPath = joinSegments(baseDir, "static/contentIndex.json") + const contentIndexScript = `const fetchData = fetch("${contentIndexPath}").then(data => data.json())` + + const resources: StaticResources = { + css: [ + { + content: joinSegments(baseDir, "index.css"), + }, + ...staticResources.css, + ], + js: [ + { + src: joinSegments(baseDir, "prescript.js"), + loadTime: "beforeDOMReady", + contentType: "external", + }, + { + loadTime: "beforeDOMReady", + contentType: "inline", + spaPreserve: true, + script: contentIndexScript, + }, + ...staticResources.js, + ], + additionalHead: staticResources.additionalHead, + } + + resources.js.push({ + src: joinSegments(baseDir, "postscript.js"), + loadTime: "afterDOMReady", + moduleType: "module", + contentType: "external", + }) + + return resources +} + +function renderTranscludes( + root: Root, + cfg: GlobalConfiguration, + slug: FullSlug, + componentData: QuartzComponentProps, +) { + // process transcludes in componentData + visit(root, "element", (node, _index, _parent) => { + if (node.tagName === "blockquote") { + const classNames = (node.properties?.className ?? []) as string[] + if (classNames.includes("transclude")) { + const inner = node.children[0] as Element + const transcludeTarget = (inner.properties["data-slug"] ?? slug) as FullSlug + const page = componentData.allFiles.find((f) => f.slug === transcludeTarget) + if (!page) { + return + } + + let blockRef = node.properties.dataBlock as string | undefined + if (blockRef?.startsWith("#^")) { + // block transclude + blockRef = blockRef.slice("#^".length) + let blockNode = page.blocks?.[blockRef] + if (blockNode) { + if (blockNode.tagName === "li") { + blockNode = { + type: "element", + tagName: "ul", + properties: {}, + children: [blockNode], + } + } + + node.children = [ + normalizeHastElement(blockNode, slug, transcludeTarget), + { + type: "element", + tagName: "a", + properties: { href: inner.properties?.href, class: ["internal", "transclude-src"] }, + children: [ + { type: "text", value: i18n(cfg.locale).components.transcludes.linkToOriginal }, + ], + }, + ] + } + } else if (blockRef?.startsWith("#") && page.htmlAst) { + // header transclude + blockRef = blockRef.slice(1) + let startIdx = undefined + let startDepth = undefined + let endIdx = undefined + for (const [i, el] of page.htmlAst.children.entries()) { + // skip non-headers + if (!(el.type === "element" && el.tagName.match(headerRegex))) continue + const depth = Number(el.tagName.substring(1)) + + // lookin for our blockref + if (startIdx === undefined || startDepth === undefined) { + // skip until we find the blockref that matches + if (el.properties?.id === blockRef) { + startIdx = i + startDepth = depth + } + } else if (depth <= startDepth) { + // looking for new header that is same level or higher + endIdx = i + break + } + } + + if (startIdx === undefined) { + return + } + + node.children = [ + ...(page.htmlAst.children.slice(startIdx, endIdx) as ElementContent[]).map((child) => + normalizeHastElement(child as Element, slug, transcludeTarget), + ), + { + type: "element", + tagName: "a", + properties: { href: inner.properties?.href, class: ["internal", "transclude-src"] }, + children: [ + { type: "text", value: i18n(cfg.locale).components.transcludes.linkToOriginal }, + ], + }, + ] + } else if (page.htmlAst) { + // page transclude + node.children = [ + { + type: "element", + tagName: "h1", + properties: {}, + children: [ + { + type: "text", + value: + page.frontmatter?.title ?? + i18n(cfg.locale).components.transcludes.transcludeOf({ + targetSlug: page.slug!, + }), + }, + ], + }, + ...(page.htmlAst.children as ElementContent[]).map((child) => + normalizeHastElement(child as Element, slug, transcludeTarget), + ), + { + type: "element", + tagName: "a", + properties: { href: inner.properties?.href, class: ["internal", "transclude-src"] }, + children: [ + { type: "text", value: i18n(cfg.locale).components.transcludes.linkToOriginal }, + ], + }, + ] + } + } + } + }) +} + +export function renderPage( + cfg: GlobalConfiguration, + slug: FullSlug, + componentData: QuartzComponentProps, + components: RenderComponents, + pageResources: StaticResources, +): string { + // make a deep copy of the tree so we don't remove the transclusion references + // for the file cached in contentMap in build.ts + const root = clone(componentData.tree) as Root + renderTranscludes(root, cfg, slug, componentData) + + // set componentData.tree to the edited html that has transclusions rendered + componentData.tree = root + + const { + head: Head, + header, + beforeBody, + pageBody: Content, + afterBody, + left, + right, + footer: Footer, + } = components + const Header = HeaderConstructor() + const Body = BodyConstructor() + + const LeftComponent = ( + + ) + + const RightComponent = ( + + ) + + const lang = componentData.fileData.frontmatter?.lang ?? cfg.locale?.split("-")[0] ?? "en" + const doc = ( + + + +
    + + {LeftComponent} +
    + + +
    + +
    + {RightComponent} +
    + +
    + + {pageResources.js + .filter((resource) => resource.loadTime === "afterDOMReady") + .map((res) => JSResourceToScriptElement(res))} + + ) + + return "\n" + render(doc) +} diff --git a/quartz/components/scripts/callout.inline.ts b/quartz/components/scripts/callout.inline.ts new file mode 100644 index 0000000..242ce51 --- /dev/null +++ b/quartz/components/scripts/callout.inline.ts @@ -0,0 +1,27 @@ +function toggleCallout(this: HTMLElement) { + const outerBlock = this.parentElement! + outerBlock.classList.toggle("is-collapsed") + const content = outerBlock.getElementsByClassName("callout-content")[0] as HTMLElement + if (!content) return + const collapsed = outerBlock.classList.contains("is-collapsed") + content.style.gridTemplateRows = collapsed ? "0fr" : "1fr" +} + +function setupCallout() { + const collapsible = document.getElementsByClassName( + `callout is-collapsible`, + ) as HTMLCollectionOf + for (const div of collapsible) { + const title = div.getElementsByClassName("callout-title")[0] as HTMLElement + const content = div.getElementsByClassName("callout-content")[0] as HTMLElement + if (!title || !content) continue + + title.addEventListener("click", toggleCallout) + window.addCleanup(() => title.removeEventListener("click", toggleCallout)) + + const collapsed = div.classList.contains("is-collapsed") + content.style.gridTemplateRows = collapsed ? "0fr" : "1fr" + } +} + +document.addEventListener("nav", setupCallout) diff --git a/quartz/components/scripts/checkbox.inline.ts b/quartz/components/scripts/checkbox.inline.ts new file mode 100644 index 0000000..50ab042 --- /dev/null +++ b/quartz/components/scripts/checkbox.inline.ts @@ -0,0 +1,23 @@ +import { getFullSlug } from "../../util/path" + +const checkboxId = (index: number) => `${getFullSlug(window)}-checkbox-${index}` + +document.addEventListener("nav", () => { + const checkboxes = document.querySelectorAll( + "input.checkbox-toggle", + ) as NodeListOf + checkboxes.forEach((el, index) => { + const elId = checkboxId(index) + + const switchState = (e: Event) => { + const newCheckboxState = (e.target as HTMLInputElement)?.checked ? "true" : "false" + localStorage.setItem(elId, newCheckboxState) + } + + el.addEventListener("change", switchState) + window.addCleanup(() => el.removeEventListener("change", switchState)) + if (localStorage.getItem(elId) === "true") { + el.checked = true + } + }) +}) diff --git a/quartz/components/scripts/clipboard.inline.ts b/quartz/components/scripts/clipboard.inline.ts new file mode 100644 index 0000000..e16c112 --- /dev/null +++ b/quartz/components/scripts/clipboard.inline.ts @@ -0,0 +1,37 @@ +const svgCopy = + '' +const svgCheck = + '' + +document.addEventListener("nav", () => { + const els = document.getElementsByTagName("pre") + for (let i = 0; i < els.length; i++) { + const codeBlock = els[i].getElementsByTagName("code")[0] + if (codeBlock) { + const source = ( + codeBlock.dataset.clipboard ? JSON.parse(codeBlock.dataset.clipboard) : codeBlock.innerText + ).replace(/\n\n/g, "\n") + const button = document.createElement("button") + button.className = "clipboard-button" + button.type = "button" + button.innerHTML = svgCopy + button.ariaLabel = "Copy source" + function onClick() { + navigator.clipboard.writeText(source).then( + () => { + button.blur() + button.innerHTML = svgCheck + setTimeout(() => { + button.innerHTML = svgCopy + button.style.borderColor = "" + }, 2000) + }, + (error) => console.error(error), + ) + } + button.addEventListener("click", onClick) + window.addCleanup(() => button.removeEventListener("click", onClick)) + els[i].prepend(button) + } + } +}) diff --git a/quartz/components/scripts/comments.inline.ts b/quartz/components/scripts/comments.inline.ts new file mode 100644 index 0000000..2b876bf --- /dev/null +++ b/quartz/components/scripts/comments.inline.ts @@ -0,0 +1,92 @@ +const changeTheme = (e: CustomEventMap["themechange"]) => { + const theme = e.detail.theme + const iframe = document.querySelector("iframe.giscus-frame") as HTMLIFrameElement + if (!iframe) { + return + } + + if (!iframe.contentWindow) { + return + } + + iframe.contentWindow.postMessage( + { + giscus: { + setConfig: { + theme: getThemeUrl(getThemeName(theme)), + }, + }, + }, + "https://giscus.app", + ) +} + +const getThemeName = (theme: string) => { + if (theme !== "dark" && theme !== "light") { + return theme + } + const giscusContainer = document.querySelector(".giscus") as GiscusElement + if (!giscusContainer) { + return theme + } + const darkGiscus = giscusContainer.dataset.darkTheme ?? "dark" + const lightGiscus = giscusContainer.dataset.lightTheme ?? "light" + return theme === "dark" ? darkGiscus : lightGiscus +} + +const getThemeUrl = (theme: string) => { + const giscusContainer = document.querySelector(".giscus") as GiscusElement + if (!giscusContainer) { + return `https://giscus.app/themes/${theme}.css` + } + return `${giscusContainer.dataset.themeUrl ?? "https://giscus.app/themes"}/${theme}.css` +} + +type GiscusElement = Omit & { + dataset: DOMStringMap & { + repo: `${string}/${string}` + repoId: string + category: string + categoryId: string + themeUrl: string + lightTheme: string + darkTheme: string + mapping: "url" | "title" | "og:title" | "specific" | "number" | "pathname" + strict: string + reactionsEnabled: string + inputPosition: "top" | "bottom" + lang: string + } +} + +document.addEventListener("nav", () => { + const giscusContainer = document.querySelector(".giscus") as GiscusElement + if (!giscusContainer) { + return + } + + const giscusScript = document.createElement("script") + giscusScript.src = "https://giscus.app/client.js" + giscusScript.async = true + giscusScript.crossOrigin = "anonymous" + giscusScript.setAttribute("data-loading", "lazy") + giscusScript.setAttribute("data-emit-metadata", "0") + giscusScript.setAttribute("data-repo", giscusContainer.dataset.repo) + giscusScript.setAttribute("data-repo-id", giscusContainer.dataset.repoId) + giscusScript.setAttribute("data-category", giscusContainer.dataset.category) + giscusScript.setAttribute("data-category-id", giscusContainer.dataset.categoryId) + giscusScript.setAttribute("data-mapping", giscusContainer.dataset.mapping) + giscusScript.setAttribute("data-strict", giscusContainer.dataset.strict) + giscusScript.setAttribute("data-reactions-enabled", giscusContainer.dataset.reactionsEnabled) + giscusScript.setAttribute("data-input-position", giscusContainer.dataset.inputPosition) + giscusScript.setAttribute("data-lang", giscusContainer.dataset.lang) + const theme = document.documentElement.getAttribute("saved-theme") + if (theme) { + giscusScript.setAttribute("data-theme", getThemeUrl(getThemeName(theme))) + } + + giscusContainer.appendChild(giscusScript) + + document.addEventListener("themechange", changeTheme) + window.addCleanup(() => document.removeEventListener("themechange", changeTheme)) +}) diff --git a/quartz/components/scripts/darkmode.inline.ts b/quartz/components/scripts/darkmode.inline.ts new file mode 100644 index 0000000..d8dfee9 --- /dev/null +++ b/quartz/components/scripts/darkmode.inline.ts @@ -0,0 +1,37 @@ +const userPref = window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark" +const currentTheme = localStorage.getItem("theme") ?? userPref +document.documentElement.setAttribute("saved-theme", currentTheme) + +const emitThemeChangeEvent = (theme: "light" | "dark") => { + const event: CustomEventMap["themechange"] = new CustomEvent("themechange", { + detail: { theme }, + }) + document.dispatchEvent(event) +} + +document.addEventListener("nav", () => { + const switchTheme = () => { + const newTheme = + document.documentElement.getAttribute("saved-theme") === "dark" ? "light" : "dark" + document.documentElement.setAttribute("saved-theme", newTheme) + localStorage.setItem("theme", newTheme) + emitThemeChangeEvent(newTheme) + } + + const themeChange = (e: MediaQueryListEvent) => { + const newTheme = e.matches ? "dark" : "light" + document.documentElement.setAttribute("saved-theme", newTheme) + localStorage.setItem("theme", newTheme) + emitThemeChangeEvent(newTheme) + } + + for (const darkmodeButton of document.getElementsByClassName("darkmode")) { + darkmodeButton.addEventListener("click", switchTheme) + window.addCleanup(() => darkmodeButton.removeEventListener("click", switchTheme)) + } + + // Listen for changes in prefers-color-scheme + const colorSchemeMediaQuery = window.matchMedia("(prefers-color-scheme: dark)") + colorSchemeMediaQuery.addEventListener("change", themeChange) + window.addCleanup(() => colorSchemeMediaQuery.removeEventListener("change", themeChange)) +}) diff --git a/quartz/components/scripts/explorer.inline.ts b/quartz/components/scripts/explorer.inline.ts new file mode 100644 index 0000000..9c83411 --- /dev/null +++ b/quartz/components/scripts/explorer.inline.ts @@ -0,0 +1,301 @@ +import { FileTrieNode } from "../../util/fileTrie" +import { FullSlug, resolveRelative, simplifySlug } from "../../util/path" +import { ContentDetails } from "../../plugins/emitters/contentIndex" + +type MaybeHTMLElement = HTMLElement | undefined + +interface ParsedOptions { + folderClickBehavior: "collapse" | "link" + folderDefaultState: "collapsed" | "open" + useSavedState: boolean + sortFn: (a: FileTrieNode, b: FileTrieNode) => number + filterFn: (node: FileTrieNode) => boolean + mapFn: (node: FileTrieNode) => void + order: "sort" | "filter" | "map"[] +} + +type FolderState = { + path: string + collapsed: boolean +} + +let currentExplorerState: Array +function toggleExplorer(this: HTMLElement) { + const nearestExplorer = this.closest(".explorer") as HTMLElement + if (!nearestExplorer) return + const explorerCollapsed = nearestExplorer.classList.toggle("collapsed") + nearestExplorer.setAttribute( + "aria-expanded", + nearestExplorer.getAttribute("aria-expanded") === "true" ? "false" : "true", + ) + + if (!explorerCollapsed) { + // Stop from being scrollable when mobile explorer is open + document.documentElement.classList.add("mobile-no-scroll") + } else { + document.documentElement.classList.remove("mobile-no-scroll") + } +} + +function toggleFolder(evt: MouseEvent) { + evt.stopPropagation() + const target = evt.target as MaybeHTMLElement + if (!target) return + + // Check if target was svg icon or button + const isSvg = target.nodeName === "svg" + + // corresponding