Repository: nodejs/nodejs.dev
Pull request #2783 (2022-09-20 23:08:11)

feat(learn): use `displayTitle` and minor redirect fixes
<!--
Please read the [Code of Conduct](https://github.com/nodejs/nodejs.dev/blob/main/CODE_OF_CONDUCT.md) and the [Contributing Guidelines](https://github.com/nodejs/nodejs.dev/blob/main/CONTRIBUTING.md) before opening a pull request.
-->

## Description

This PR adds the `displayTitle` for `learn` pages and moves the pages to "category folders" so that files are better organised.

This PR also does a minor fix by always enabling `redirectInBrowser` which fixes the redirect issues on the GitHub Pages.

## Related Issues

- https://github.com/nodejs/nodejs.dev/pull/2765#discussion_r973647014

### Check List

<!--
ATTENTION
Please follow this check list to ensure that you've followed all items before opening this PR
-->

- [x] I have read the [Contributing Guidelines](https://github.com/nodejs/nodejs.dev/blob/main/CONTRIBUTING.md) and made commit messages that follow the guideline.
- [x] I have run `npm run lint:js -- --fix` and/or `npm run lint:md -- --fix` for my JavaScript and/or Markdown changes.
  - This is important as most of the cases your code changes might not be correctly linted
- [x] I have run `npm run test` to check if all tests are passing, and/or `npm run test -- -u` to update snapshots if I created and/or updated React Components.
- [x] I have checked that the build works locally and that `npm run build` work fine.
- [ ] I've covered new added functionality with unit tests if necessary.


codecov-commenter: # [Codecov](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) Report
Base: **66.02**% // Head: **62.52**% // Decreases project coverage by **`-3.49%`** :warning:
> Coverage data is based on head [(`fce661f`)](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) compared to base [(`fd57b87`)](https://codecov.io/gh/nodejs/nodejs.dev/commit/fd57b871c2b1ad2f6fb812ed066dec074d76db22?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None).
> Patch has no changes to coverable lines.

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##             main    #2783      +/-   ##
==========================================
- Coverage   66.02%   62.52%   -3.50%     
==========================================
  Files         118      124       +6     
  Lines        1351     1457     +106     
  Branches      342      361      +19     
==========================================
+ Hits          892      911      +19     
- Misses        422      505      +83     
- Partials       37       41       +4     
```


| [Impacted Files](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) | Coverage Δ | |
|---|---|---|
| [src/\_\_fixtures\_\_/page.tsx](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-c3JjL19fZml4dHVyZXNfXy9wYWdlLnRzeA==) | `94.11% <ø> (-5.89%)` | :arrow_down: |
| [...components/ApiComponents/Components/ApiHeading.tsx](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-c3JjL2NvbXBvbmVudHMvQXBpQ29tcG9uZW50cy9Db21wb25lbnRzL0FwaUhlYWRpbmcudHN4) | `0.00% <ø> (ø)` | |
| [...rc/components/ApiComponents/Components/ApiLink.tsx](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-c3JjL2NvbXBvbmVudHMvQXBpQ29tcG9uZW50cy9Db21wb25lbnRzL0FwaUxpbmsudHN4) | `0.00% <ø> (ø)` | |
| [...ents/ApiComponents/Components/SourceLink/index.tsx](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-c3JjL2NvbXBvbmVudHMvQXBpQ29tcG9uZW50cy9Db21wb25lbnRzL1NvdXJjZUxpbmsvaW5kZXgudHN4) | `0.00% <ø> (ø)` | |
| [...ApiComponents/Components/VersionSelector/index.tsx](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-c3JjL2NvbXBvbmVudHMvQXBpQ29tcG9uZW50cy9Db21wb25lbnRzL1ZlcnNpb25TZWxlY3Rvci9pbmRleC50c3g=) | `0.00% <ø> (ø)` | |
| [src/components/ApiComponents/index.tsx](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-c3JjL2NvbXBvbmVudHMvQXBpQ29tcG9uZW50cy9pbmRleC50c3g=) | `0.00% <ø> (ø)` | |
| [src/components/Article/index.tsx](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-c3JjL2NvbXBvbmVudHMvQXJ0aWNsZS9pbmRleC50c3g=) | `100.00% <ø> (ø)` | |
| [src/components/Banner/index.tsx](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-c3JjL2NvbXBvbmVudHMvQmFubmVyL2luZGV4LnRzeA==) | `100.00% <ø> (ø)` | |
| [src/components/Codebox/index.tsx](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-c3JjL2NvbXBvbmVudHMvQ29kZWJveC9pbmRleC50c3g=) | `100.00% <ø> (ø)` | |
| [src/components/EditLink/index.tsx](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-c3JjL2NvbXBvbmVudHMvRWRpdExpbmsvaW5kZXgudHN4) | `100.00% <ø> (ø)` | |
| ... and [68 more](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) | |

Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None)

</details>

[:umbrella: View full report at Codecov](https://codecov.io/gh/nodejs/nodejs.dev/pull/2783?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None).   
:loudspeaker: Do you have feedback about the report comment? [Let us know in this issue](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None).

github-actions[bot]: Please find a preview at: https://staging.nodejs.dev/2783/
ovflowd: Merging so that I'd unblock @AugustinMauroy translation changes :)

@AugustinMauroy you know the drill, just rebase your PRs and update the `displayTitle` fields to the translated text, and the `title` to the values I modified in this PR.

Patch:
diff --git a/content/learn/blocking-vs-non-blocking.en.md b/content/learn/asynchronous-work/blocking-vs-non-blocking.en.md
similarity index 98%
rename from content/learn/blocking-vs-non-blocking.en.md
rename to content/learn/asynchronous-work/blocking-vs-non-blocking.en.md
index 68acfed4..edab2ad7 100644
--- a/content/learn/blocking-vs-non-blocking.en.md
+++ b/content/learn/asynchronous-work/blocking-vs-non-blocking.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Overview of Blocking vs Non-Blocking'
+title: overview-of-blocking-vs-non-blocking
+displayTitle: 'Overview of Blocking vs Non-Blocking'
 category: learn
 ---
 
diff --git a/content/learn/node-control-flow.en.md b/content/learn/asynchronous-work/node-control-flow.en.md
similarity index 99%
rename from content/learn/node-control-flow.en.md
rename to content/learn/asynchronous-work/node-control-flow.en.md
index 97118f84..6bd79c05 100644
--- a/content/learn/node-control-flow.en.md
+++ b/content/learn/asynchronous-work/node-control-flow.en.md
@@ -1,5 +1,6 @@
 ---
-title: Asynchronous flow control
+title: asynchronous-flow-control
+displayTitle: 'Asynchronous flow control'
 description: 'JavaScript control flow is all about callback handling. Here are strategies to help your development.'
 authors: aug2uag
 category: learn
diff --git a/content/learn/node-event-emitter.en.md b/content/learn/asynchronous-work/node-event-emitter.en.md
similarity index 96%
rename from content/learn/node-event-emitter.en.md
rename to content/learn/asynchronous-work/node-event-emitter.en.md
index 9d0650a2..f9c88fa7 100644
--- a/content/learn/node-event-emitter.en.md
+++ b/content/learn/asynchronous-work/node-event-emitter.en.md
@@ -1,5 +1,6 @@
 ---
-title: The Node.js Event emitter
+title: the-nodejs-event-emitter
+displayTitle: 'The Node.js Event emitter'
 description: 'How to work with custom events in Node.js'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/node-event-loop/call-stack-first-example.png b/content/learn/asynchronous-work/node-event-loop/call-stack-first-example.png
similarity index 100%
rename from content/learn/node-event-loop/call-stack-first-example.png
rename to content/learn/asynchronous-work/node-event-loop/call-stack-first-example.png
diff --git a/content/learn/node-event-loop/call-stack-second-example.png b/content/learn/asynchronous-work/node-event-loop/call-stack-second-example.png
similarity index 100%
rename from content/learn/node-event-loop/call-stack-second-example.png
rename to content/learn/asynchronous-work/node-event-loop/call-stack-second-example.png
diff --git a/content/learn/node-event-loop/call-stack-third-example.png b/content/learn/asynchronous-work/node-event-loop/call-stack-third-example.png
similarity index 100%
rename from content/learn/node-event-loop/call-stack-third-example.png
rename to content/learn/asynchronous-work/node-event-loop/call-stack-third-example.png
diff --git a/content/learn/node-event-loop/exception-call-stack.png b/content/learn/asynchronous-work/node-event-loop/exception-call-stack.png
similarity index 100%
rename from content/learn/node-event-loop/exception-call-stack.png
rename to content/learn/asynchronous-work/node-event-loop/exception-call-stack.png
diff --git a/content/learn/node-event-loop/execution-order-first-example.png b/content/learn/asynchronous-work/node-event-loop/execution-order-first-example.png
similarity index 100%
rename from content/learn/node-event-loop/execution-order-first-example.png
rename to content/learn/asynchronous-work/node-event-loop/execution-order-first-example.png
diff --git a/content/learn/node-event-loop/execution-order-second-example.png b/content/learn/asynchronous-work/node-event-loop/execution-order-second-example.png
similarity index 100%
rename from content/learn/node-event-loop/execution-order-second-example.png
rename to content/learn/asynchronous-work/node-event-loop/execution-order-second-example.png
diff --git a/content/learn/node-event-loop/index.en.md b/content/learn/asynchronous-work/node-event-loop/index.en.md
similarity index 98%
rename from content/learn/node-event-loop/index.en.md
rename to content/learn/asynchronous-work/node-event-loop/index.en.md
index 5826ddde..3eb25dcb 100644
--- a/content/learn/node-event-loop/index.en.md
+++ b/content/learn/asynchronous-work/node-event-loop/index.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'The Node.js Event Loop'
+title: the-nodejs-event-loop
+displayTitle: 'The Node.js Event Loop'
 description: 'The Event Loop is one of the most important aspects to understand about Node.js'
 authors: flaviocopes, potch, ZYSzys, MylesBorins, fhemberger, LaRuaNa, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/node-process-nexttick.en.md b/content/learn/asynchronous-work/node-process-nexttick.en.md
similarity index 93%
rename from content/learn/node-process-nexttick.en.md
rename to content/learn/asynchronous-work/node-process-nexttick.en.md
index 0346c893..49c933ed 100644
--- a/content/learn/node-process-nexttick.en.md
+++ b/content/learn/asynchronous-work/node-process-nexttick.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Understanding process.nextTick()'
+title: understanding-processnexttick
+displayTitle: 'Understanding process.nextTick()'
 description: 'The Node.js process.nextTick function interacts with the event loop in a special way'
 authors: flaviocopes, MylesBorins, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/node-setimmediate.en.md b/content/learn/asynchronous-work/node-setimmediate.en.md
similarity index 96%
rename from content/learn/node-setimmediate.en.md
rename to content/learn/asynchronous-work/node-setimmediate.en.md
index 8672e966..82fdd14e 100644
--- a/content/learn/node-setimmediate.en.md
+++ b/content/learn/asynchronous-work/node-setimmediate.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Understanding setImmediate()'
+title: understanding-setimmediate
+displayTitle: 'Understanding setImmediate()'
 description: 'The Node.js setImmediate function interacts with the event loop in a special way'
 authors: flaviocopes, MylesBorins, LaRuaNa, ahmadawais, clean99
 category: learn
diff --git a/content/learn/node-exceptions.en.md b/content/learn/basics-and-builtins/node-exceptions.en.md
similarity index 97%
rename from content/learn/node-exceptions.en.md
rename to content/learn/basics-and-builtins/node-exceptions.en.md
index 384e2d2b..92afd808 100644
--- a/content/learn/node-exceptions.en.md
+++ b/content/learn/basics-and-builtins/node-exceptions.en.md
@@ -1,5 +1,6 @@
 ---
-title: Error handling in Node.js
+title: error-handling-in-nodejs
+displayTitle: 'Error handling in Node.js'
 description: 'How to handle errors during the execution of a Node.js application'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/node-export-module.en.md b/content/learn/basics-and-builtins/node-export-module.en.md
similarity index 95%
rename from content/learn/node-export-module.en.md
rename to content/learn/basics-and-builtins/node-export-module.en.md
index 010f0eda..139f0dbe 100644
--- a/content/learn/node-export-module.en.md
+++ b/content/learn/basics-and-builtins/node-export-module.en.md
@@ -1,5 +1,6 @@
 ---
-title: Expose functionality from a Node.js file using exports
+title: expose-functionality-from-a-nodejs-file-using-exports
+displayTitle: 'Expose functionality from a Node.js file using exports'
 description: 'How to use the module.exports API to expose data to other files in your application, or to other applications as well'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/node-inspect-object/console-log-browser-expanded.png b/content/learn/basics-and-builtins/node-inspect-object/console-log-browser-expanded.png
similarity index 100%
rename from content/learn/node-inspect-object/console-log-browser-expanded.png
rename to content/learn/basics-and-builtins/node-inspect-object/console-log-browser-expanded.png
diff --git a/content/learn/node-inspect-object/console-log-browser.png b/content/learn/basics-and-builtins/node-inspect-object/console-log-browser.png
similarity index 100%
rename from content/learn/node-inspect-object/console-log-browser.png
rename to content/learn/basics-and-builtins/node-inspect-object/console-log-browser.png
diff --git a/content/learn/node-inspect-object/index.en.md b/content/learn/basics-and-builtins/node-inspect-object/index.en.md
similarity index 96%
rename from content/learn/node-inspect-object/index.en.md
rename to content/learn/basics-and-builtins/node-inspect-object/index.en.md
index 7471c6f0..93058ce3 100644
--- a/content/learn/node-inspect-object/index.en.md
+++ b/content/learn/basics-and-builtins/node-inspect-object/index.en.md
@@ -1,5 +1,6 @@
 ---
-title: How to log an object in Node.js
+title: how-to-log-an-object-in-nodejs
+displayTitle: 'How to log an object in Node.js'
 description: 'Logging objects in Node.js'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/node-cli-args.en.md b/content/learn/command-line/node-cli-args.en.md
similarity index 94%
rename from content/learn/node-cli-args.en.md
rename to content/learn/command-line/node-cli-args.en.md
index cee905de..ff268e23 100644
--- a/content/learn/node-cli-args.en.md
+++ b/content/learn/command-line/node-cli-args.en.md
@@ -1,5 +1,6 @@
 ---
-title: Node.js, accept arguments from the command line
+title: nodejs-accept-arguments-from-the-command-line
+displayTitle: 'Node.js, accept arguments from the command line'
 description: 'How to accept arguments in a Node.js program passed from the command line'
 authors: flaviocopes, ZYSzys, MylesBorins, fhemberger, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/node-environment-variables.en.md b/content/learn/command-line/node-environment-variables.en.md
similarity index 93%
rename from content/learn/node-environment-variables.en.md
rename to content/learn/command-line/node-environment-variables.en.md
index 858ee4a8..c8cd6f02 100644
--- a/content/learn/node-environment-variables.en.md
+++ b/content/learn/command-line/node-environment-variables.en.md
@@ -1,5 +1,6 @@
 ---
-title: How to read environment variables from Node.js
+title: how-to-read-environment-variables-from-nodejs
+displayTitle: 'How to read environment variables from Node.js'
 description: 'Learn how to read and make use of environment variables in a Node.js program'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, manishprivet
 category: learn
diff --git a/content/learn/node-input-from-cli.en.md b/content/learn/command-line/node-input-from-cli.en.md
similarity index 95%
rename from content/learn/node-input-from-cli.en.md
rename to content/learn/command-line/node-input-from-cli.en.md
index 65a9c9bc..bb18847d 100644
--- a/content/learn/node-input-from-cli.en.md
+++ b/content/learn/command-line/node-input-from-cli.en.md
@@ -1,5 +1,6 @@
 ---
-title: Accept input from the command line in Node.js
+title: accept-input-from-the-command-line-in-nodejs
+displayTitle: 'Accept input from the command line in Node.js'
 description: 'How to make a Node.js CLI program interactive using the built-in readline Node.js module'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/node-output-to-cli.en.md b/content/learn/command-line/node-output-to-cli.en.md
similarity index 98%
rename from content/learn/node-output-to-cli.en.md
rename to content/learn/command-line/node-output-to-cli.en.md
index a4b084e6..c5001f32 100644
--- a/content/learn/node-output-to-cli.en.md
+++ b/content/learn/command-line/node-output-to-cli.en.md
@@ -1,5 +1,6 @@
 ---
-title: Output to the command line using Node.js
+title: output-to-the-command-line-using-nodejs
+displayTitle: 'Output to the command line using Node.js'
 description: 'How to print to the command line console using Node.js, from the basic console.log to more complex scenarios'
 authors: flaviocopes, potch, MylesBorins, fhemberger, LaRuaNa, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/node-repl/globals.png b/content/learn/command-line/node-repl/globals.png
similarity index 100%
rename from content/learn/node-repl/globals.png
rename to content/learn/command-line/node-repl/globals.png
diff --git a/content/learn/node-repl/index.en.md b/content/learn/command-line/node-repl/index.en.md
similarity index 98%
rename from content/learn/node-repl/index.en.md
rename to content/learn/command-line/node-repl/index.en.md
index 4f179cb9..25d7dba2 100644
--- a/content/learn/node-repl/index.en.md
+++ b/content/learn/command-line/node-repl/index.en.md
@@ -1,5 +1,6 @@
 ---
-title: How to use the Node.js REPL
+title: how-to-use-the-nodejs-repl
+displayTitle: 'How to use the Node.js REPL'
 description: "REPL stands for Read-Evaluate-Print-Loop, and it's a great way to explore the Node.js features in a quick way"
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/node-repl/tab.png b/content/learn/command-line/node-repl/tab.png
similarity index 100%
rename from content/learn/node-repl/tab.png
rename to content/learn/command-line/node-repl/tab.png
diff --git a/content/learn/node-run-cli.en.md b/content/learn/command-line/node-run-cli.en.md
similarity index 95%
rename from content/learn/node-run-cli.en.md
rename to content/learn/command-line/node-run-cli.en.md
index b52b2f9c..f32994e3 100644
--- a/content/learn/node-run-cli.en.md
+++ b/content/learn/command-line/node-run-cli.en.md
@@ -1,5 +1,6 @@
 ---
-title: Run Node.js scripts from the command line
+title: run-nodejs-scripts-from-the-command-line
+displayTitle: 'Run Node.js scripts from the command line'
 description: 'How to run any Node.js script from the CLI'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, akazyti
 category: learn
diff --git a/content/learn/node-terminate-program.en.md b/content/learn/command-line/node-terminate-program.en.md
similarity index 97%
rename from content/learn/node-terminate-program.en.md
rename to content/learn/command-line/node-terminate-program.en.md
index 8507bfd2..e2ba43ad 100644
--- a/content/learn/node-terminate-program.en.md
+++ b/content/learn/command-line/node-terminate-program.en.md
@@ -1,5 +1,6 @@
 ---
-title: How to exit from a Node.js program
+title: how-to-exit-from-a-nodejs-program
+displayTitle: 'How to exit from a Node.js program'
 description: 'Learn how to terminate a Node.js app in the best possible way'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, jgb-solutions, ahmadawais
 category: learn
diff --git a/content/learn/node-difference-browser.en.md b/content/learn/getting-started/node-difference-browser.en.md
similarity index 95%
rename from content/learn/node-difference-browser.en.md
rename to content/learn/getting-started/node-difference-browser.en.md
index a78ddde3..8ebd6776 100644
--- a/content/learn/node-difference-browser.en.md
+++ b/content/learn/getting-started/node-difference-browser.en.md
@@ -1,5 +1,6 @@
 ---
-title: Differences between Node.js and the Browser
+title: differences-between-nodejs-and-the-browser
+displayTitle: 'Differences between Node.js and the Browser'
 description: 'How writing JavaScript application in Node.js differs from programming for the Web inside the browser'
 authors: flaviocopes, ollelauribostrom, MylesBorins, fhemberger, LaRuaNa, ahmadawais, karlhorky
 section: Quick Start
diff --git a/content/learn/node-difference-dev-prod.en.md b/content/learn/getting-started/node-difference-dev-prod.en.md
similarity index 93%
rename from content/learn/node-difference-dev-prod.en.md
rename to content/learn/getting-started/node-difference-dev-prod.en.md
index e43a8997..7a6471ac 100644
--- a/content/learn/node-difference-dev-prod.en.md
+++ b/content/learn/getting-started/node-difference-dev-prod.en.md
@@ -1,5 +1,6 @@
 ---
-title: Node.js, the difference between development and production
+title: nodejs-the-difference-between-development-and-production
+displayTitle: 'Node.js, the difference between development and production'
 description: 'Learn how to set up different configurations for production and development environments'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, RenanTKN
 category: learn
diff --git a/content/learn/node-es6.en.md b/content/learn/getting-started/node-es6.en.md
similarity index 96%
rename from content/learn/node-es6.en.md
rename to content/learn/getting-started/node-es6.en.md
index 25d0fb45..e25306c3 100644
--- a/content/learn/node-es6.en.md
+++ b/content/learn/getting-started/node-es6.en.md
@@ -1,5 +1,6 @@
 ---
-title: ECMAScript 2015 (ES6) and beyond
+title: ecmascript-2015-es6-and-beyond
+displayTitle: 'ECMAScript 2015 (ES6) and beyond'
 category: learn
 ---
 
diff --git a/content/learn/node-history.en.mdx b/content/learn/getting-started/node-history.en.mdx
similarity index 96%
rename from content/learn/node-history.en.mdx
rename to content/learn/getting-started/node-history.en.mdx
index 242659c6..e99cabb6 100644
--- a/content/learn/node-history.en.mdx
+++ b/content/learn/getting-started/node-history.en.mdx
@@ -1,12 +1,13 @@
 ---
-title: A brief history of Node.js
+title: a-brief-history-of-nodejs
+displayTitle: 'A brief history of Node.js'
 description: 'A look back on the history of Node.js from 2009 to today'
 authors: flaviocopes, onel0p3z, ollelauribostrom, MylesBorins, fhemberger, LaRuaNa, amiller-gh, ahmadawais, kevjin, keywordnew, karlhorky, bdharrington7, MalachiCunliffe
 section: Quick Start
 category: learn
 ---
 
-import { getAgeInYears } from '../../src/util/getAgeInYears';
+import { getAgeInYears } from '../../../src/util/getAgeInYears';
 
 <p>
   Believe it or not, Node.js is only {getAgeInYears('19 May, 2009')} years old.
diff --git a/content/learn/node-installation.en.md b/content/learn/getting-started/node-installation.en.md
similarity index 94%
rename from content/learn/node-installation.en.md
rename to content/learn/getting-started/node-installation.en.md
index b3811003..dbb103eb 100644
--- a/content/learn/node-installation.en.md
+++ b/content/learn/getting-started/node-installation.en.md
@@ -1,5 +1,6 @@
 ---
-title: How to install Node.js
+title: how-to-install-nodejs
+displayTitle: 'How to install Node.js'
 description: 'How you can install Node.js on your system: a package manager, the official website installer or nvm'
 authors: flaviocopes, ZYSzys, ollelauribostrom, MylesBorins, fhemberger, LaRuaNa, ahmadawais, benhalverson
 section: Quick Start
diff --git a/content/learn/node-introduction.en.md b/content/learn/getting-started/node-introduction.en.md
similarity index 99%
rename from content/learn/node-introduction.en.md
rename to content/learn/getting-started/node-introduction.en.md
index 3d816db0..a6b86fd3 100644
--- a/content/learn/node-introduction.en.md
+++ b/content/learn/getting-started/node-introduction.en.md
@@ -1,5 +1,6 @@
 ---
-title: Introduction to Node.js
+title: introduction-to-nodejs
+displayTitle: 'Introduction to Node.js'
 description: "Getting started guide to Node.js, the server-side JavaScript runtime environment. Node.js is built on top of the Google Chrome V8 JavaScript engine, and it's mainly used to create web servers - but it's not limited to just that."
 authors: flaviocopes, potch, MylesBorins, RomainLanz, virkt25, Trott, onel0p3z, ollelauribostrom, MarkPieszak, fhemberger, LaRuaNa, FrozenPandaz, mcollina, amiller-gh, ahmadawais, saqibameen, dangen-effy, aymen94
 section: Quick Start
diff --git a/content/learn/node-javascript-language.en.md b/content/learn/getting-started/node-javascript-language.en.md
similarity index 91%
rename from content/learn/node-javascript-language.en.md
rename to content/learn/getting-started/node-javascript-language.en.md
index 7fc2ca82..86950f28 100644
--- a/content/learn/node-javascript-language.en.md
+++ b/content/learn/getting-started/node-javascript-language.en.md
@@ -1,5 +1,6 @@
 ---
-title: How much JavaScript do you need to know to use Node.js?
+title: how-much-javascript-do-you-need-to-know-to-use-nodejs
+displayTitle: 'How much JavaScript do you need to know to use Node.js?'
 description: 'If you are just starting out with JavaScript, how deeply do you need to know the language?'
 authors: flaviocopes, ollelauribostrom, MylesBorins, fhemberger, LaRuaNa, ahmadawais, elanandkumar
 section: Quick Start
diff --git a/content/learn/javascript-async-await.en.md b/content/learn/javascript-builtins/javascript-async-await.en.md
similarity index 97%
rename from content/learn/javascript-async-await.en.md
rename to content/learn/javascript-builtins/javascript-async-await.en.md
index ab100bd3..c01ec83c 100644
--- a/content/learn/javascript-async-await.en.md
+++ b/content/learn/javascript-builtins/javascript-async-await.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Modern Asynchronous JavaScript with Async and Await'
+title: modern-asynchronous-javascript-with-async-and-await
+displayTitle: 'Modern Asynchronous JavaScript with Async and Await'
 description: 'Discover the modern approach to asynchronous functions in JavaScript. JavaScript evolved in a very short time from callbacks to Promises, and since ES2017 asynchronous JavaScript is even simpler with the async/await syntax'
 authors: flaviocopes, potch, MylesBorins, LaRuaNa, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/javascript-callbacks.en.md b/content/learn/javascript-builtins/javascript-callbacks.en.md
similarity index 97%
rename from content/learn/javascript-callbacks.en.md
rename to content/learn/javascript-builtins/javascript-callbacks.en.md
index f92e93cd..35587d0c 100644
--- a/content/learn/javascript-callbacks.en.md
+++ b/content/learn/javascript-builtins/javascript-callbacks.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'JavaScript Asynchronous Programming and Callbacks'
+title: javascript-asynchronous-programming-and-callbacks
+displayTitle: 'JavaScript Asynchronous Programming and Callbacks'
 description: 'JavaScript is synchronous by default, and is single threaded. This means that code cannot create new threads and run in parallel. Find out what asynchronous code means and how it looks like'
 authors: flaviocopes, MylesBorins, LaRuaNa, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/javascript-promises.en.md b/content/learn/javascript-builtins/javascript-promises.en.md
similarity index 99%
rename from content/learn/javascript-promises.en.md
rename to content/learn/javascript-builtins/javascript-promises.en.md
index b0a4d191..d6a74b23 100644
--- a/content/learn/javascript-promises.en.md
+++ b/content/learn/javascript-builtins/javascript-promises.en.md
@@ -1,5 +1,6 @@
 ---
-title: Understanding JavaScript Promises
+title: understanding-javascript-promises
+displayTitle: 'Understanding JavaScript Promises'
 description: 'Promises are one way to deal with asynchronous code in JavaScript, without writing too many callbacks in your code.'
 authors: flaviocopes, potch, MylesBorins, LaRuaNa, bdharrington7, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/javascript-timers/index.en.md b/content/learn/javascript-builtins/javascript-timers/index.en.md
similarity index 98%
rename from content/learn/javascript-timers/index.en.md
rename to content/learn/javascript-builtins/javascript-timers/index.en.md
index 55d70066..7a966a26 100644
--- a/content/learn/javascript-timers/index.en.md
+++ b/content/learn/javascript-builtins/javascript-timers/index.en.md
@@ -1,5 +1,6 @@
 ---
-title: Discover JavaScript Timers
+title: discover-javascript-timers
+displayTitle: 'Discover JavaScript Timers'
 description: 'When writing JavaScript code, you might want to delay the execution of a function. Learn how to use setTimeout and setInterval to schedule functions in the future'
 authors: flaviocopes, MylesBorins, LaRuaNa, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/javascript-timers/recursive-settimeout.png b/content/learn/javascript-builtins/javascript-timers/recursive-settimeout.png
similarity index 100%
rename from content/learn/javascript-timers/recursive-settimeout.png
rename to content/learn/javascript-builtins/javascript-timers/recursive-settimeout.png
diff --git a/content/learn/javascript-timers/setinterval-ok.png b/content/learn/javascript-builtins/javascript-timers/setinterval-ok.png
similarity index 100%
rename from content/learn/javascript-timers/setinterval-ok.png
rename to content/learn/javascript-builtins/javascript-timers/setinterval-ok.png
diff --git a/content/learn/javascript-timers/setinterval-overlapping.png b/content/learn/javascript-builtins/javascript-timers/setinterval-overlapping.png
similarity index 100%
rename from content/learn/javascript-timers/setinterval-overlapping.png
rename to content/learn/javascript-builtins/javascript-timers/setinterval-overlapping.png
diff --git a/content/learn/javascript-timers/setinterval-varying-duration.png b/content/learn/javascript-builtins/javascript-timers/setinterval-varying-duration.png
similarity index 100%
rename from content/learn/javascript-timers/setinterval-varying-duration.png
rename to content/learn/javascript-builtins/javascript-timers/setinterval-varying-duration.png
diff --git a/content/learn/node-file-descriptors.en.md b/content/learn/manipulating-files/node-file-descriptors.en.md
similarity index 96%
rename from content/learn/node-file-descriptors.en.md
rename to content/learn/manipulating-files/node-file-descriptors.en.md
index 87839f42..c7d22810 100644
--- a/content/learn/node-file-descriptors.en.md
+++ b/content/learn/manipulating-files/node-file-descriptors.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Working with file descriptors in Node.js'
+title: working-with-file-descriptors-in-nodejs
+displayTitle: 'Working with file descriptors in Node.js'
 description: 'How to interact with file descriptors using Node.js'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, clean99
 category: learn
diff --git a/content/learn/node-file-paths.en.md b/content/learn/manipulating-files/node-file-paths.en.md
similarity index 97%
rename from content/learn/node-file-paths.en.md
rename to content/learn/manipulating-files/node-file-paths.en.md
index 491eec5c..bf416bac 100644
--- a/content/learn/node-file-paths.en.md
+++ b/content/learn/manipulating-files/node-file-paths.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Node.js File Paths'
+title: nodejs-file-paths
+displayTitle: 'Node.js File Paths'
 description: 'How to interact with file paths and manipulate them in Node.js'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/node-file-stats.en.md b/content/learn/manipulating-files/node-file-stats.en.md
similarity index 97%
rename from content/learn/node-file-stats.en.md
rename to content/learn/manipulating-files/node-file-stats.en.md
index cc5045de..a713e105 100644
--- a/content/learn/node-file-stats.en.md
+++ b/content/learn/manipulating-files/node-file-stats.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Node.js file stats'
+title: nodejs-file-stats
+displayTitle: 'Node.js file stats'
 description: 'How to get the details of a file using Node.js'
 authors: flaviocopes, ZYSzys, MylesBorins, fhemberger, LaRuaNa, ahmadawais, clean99
 category: learn
diff --git a/content/learn/node-folders.en.md b/content/learn/manipulating-files/node-folders.en.md
similarity index 97%
rename from content/learn/node-folders.en.md
rename to content/learn/manipulating-files/node-folders.en.md
index 9607d819..183c73c4 100644
--- a/content/learn/node-folders.en.md
+++ b/content/learn/manipulating-files/node-folders.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Working with folders in Node.js'
+title: working-with-folders-in-nodejs
+displayTitle: 'Working with folders in Node.js'
 description: 'How to interact with folders using Node.js'
 authors: flaviocopes, MylesBorins, fhemberger, liangpeili, LaRuaNa, ahmadawais, clean99
 category: learn
diff --git a/content/learn/node-reading-files.en.md b/content/learn/manipulating-files/node-reading-files.en.md
similarity index 95%
rename from content/learn/node-reading-files.en.md
rename to content/learn/manipulating-files/node-reading-files.en.md
index f05ac399..ad8cb1dd 100644
--- a/content/learn/node-reading-files.en.md
+++ b/content/learn/manipulating-files/node-reading-files.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Reading files with Node.js'
+title: reading-files-with-nodejs
+displayTitle: 'Reading files with Node.js'
 description: 'How to read files using Node.js'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, clean99
 category: learn
diff --git a/content/learn/node-writing-files.en.md b/content/learn/manipulating-files/node-writing-files.en.md
similarity index 97%
rename from content/learn/node-writing-files.en.md
rename to content/learn/manipulating-files/node-writing-files.en.md
index ead2e001..a506b11e 100644
--- a/content/learn/node-writing-files.en.md
+++ b/content/learn/manipulating-files/node-writing-files.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Writing files with Node.js'
+title: writing-files-with-nodejs
+displayTitle: 'Writing files with Node.js'
 description: 'How to write files using Node.js'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, clean99
 category: learn
diff --git a/content/learn/node-with-typescript.en.md b/content/learn/node-js-and-world/node-with-typescript.en.md
similarity index 98%
rename from content/learn/node-with-typescript.en.md
rename to content/learn/node-js-and-world/node-with-typescript.en.md
index 5b585e2d..e3f71c30 100644
--- a/content/learn/node-with-typescript.en.md
+++ b/content/learn/node-js-and-world/node-with-typescript.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Node.js with TypeScript'
+title: nodejs-with-typescript
+displayTitle: 'Node.js with TypeScript'
 description: 'Find out why TypeScript is an awesome tool and learn to use it by yourself.'
 authors: sbielenica
 category: learn
diff --git a/content/learn/node-with-web-assembly.en.md b/content/learn/node-js-and-world/node-with-web-assembly.en.md
similarity index 97%
rename from content/learn/node-with-web-assembly.en.md
rename to content/learn/node-js-and-world/node-with-web-assembly.en.md
index 568c0076..a612da96 100644
--- a/content/learn/node-with-web-assembly.en.md
+++ b/content/learn/node-js-and-world/node-with-web-assembly.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Node.js with WebAssembly'
+title: nodejs-with-webassembly
+displayTitle: 'Node.js with WebAssembly'
 description: 'Find out why WebAssembly is an awesome tool and learn to use it by yourself.'
 authors: lancemccluskey
 category: learn
diff --git a/content/learn/v8-engine.en.md b/content/learn/node-js-and-world/v8-engine.en.md
similarity index 98%
rename from content/learn/v8-engine.en.md
rename to content/learn/node-js-and-world/v8-engine.en.md
index 8679417f..11a842de 100644
--- a/content/learn/v8-engine.en.md
+++ b/content/learn/node-js-and-world/v8-engine.en.md
@@ -1,5 +1,6 @@
 ---
-title: The V8 JavaScript Engine
+title: the-v8-javascript-engine
+displayTitle: 'The V8 JavaScript Engine'
 description: "V8 is the name of the JavaScript engine that powers Google Chrome. It's the thing that takes our JavaScript and executes it while browsing with Chrome. V8 provides the runtime environment in which JavaScript executes. The DOM and the other Web Platform APIs are provided by the browser."
 authors: flaviocopes, smfoote, co16353sidak, MylesBorins, LaRuaNa, andys8, ahmadawais, karlhorky, aymen94
 category: learn
diff --git a/content/learn/node-buffers.en.md b/content/learn/node-js-modules/node-buffers.en.md
similarity index 99%
rename from content/learn/node-buffers.en.md
rename to content/learn/node-js-modules/node-buffers.en.md
index c16783d9..cf8aca11 100644
--- a/content/learn/node-buffers.en.md
+++ b/content/learn/node-js-modules/node-buffers.en.md
@@ -1,5 +1,6 @@
 ---
-title: Node.js Buffers
+title: nodejs-buffers
+displayTitle: 'Node.js Buffers'
 description: 'Learn what Node.js buffers are, what they are used for, how to use them'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, 19shubham11, addaleax
 category: learn
diff --git a/content/learn/node-module-events.en.md b/content/learn/node-js-modules/node-module-events.en.md
similarity index 97%
rename from content/learn/node-module-events.en.md
rename to content/learn/node-js-modules/node-module-events.en.md
index 08ed72ed..e6fc92c9 100644
--- a/content/learn/node-module-events.en.md
+++ b/content/learn/node-js-modules/node-module-events.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'The Node.js events module'
+title: the-nodejs-events-module
+displayTitle: 'The Node.js events module'
 description: 'The events module of Node.js provides the EventEmitter class'
 authors: flaviocopes, ZYSzys, MylesBorins, fhemberger, LaRuaNa, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/node-module-fs.en.md b/content/learn/node-js-modules/node-module-fs.en.md
similarity index 98%
rename from content/learn/node-module-fs.en.md
rename to content/learn/node-js-modules/node-module-fs.en.md
index 89fd77ea..c78f4a25 100644
--- a/content/learn/node-module-fs.en.md
+++ b/content/learn/node-js-modules/node-module-fs.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'The Node.js fs module'
+title: the-nodejs-fs-module
+displayTitle: 'The Node.js fs module'
 description: 'The fs module of Node.js provides useful functions to interact with the file system'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, clean99
 category: learn
diff --git a/content/learn/node-module-http.en.md b/content/learn/node-js-modules/node-module-http.en.md
similarity index 99%
rename from content/learn/node-module-http.en.md
rename to content/learn/node-js-modules/node-module-http.en.md
index e1c3be57..ec6d7a80 100644
--- a/content/learn/node-module-http.en.md
+++ b/content/learn/node-js-modules/node-module-http.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'The Node.js http module'
+title: the-nodejs-http-module
+displayTitle: 'The Node.js http module'
 description: 'The http module of Node.js provides useful functions and classes to build an HTTP server'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, BeniCheni, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/node-module-os.en.md b/content/learn/node-js-modules/node-module-os.en.md
similarity index 98%
rename from content/learn/node-module-os.en.md
rename to content/learn/node-js-modules/node-module-os.en.md
index ab017325..363377d3 100644
--- a/content/learn/node-module-os.en.md
+++ b/content/learn/node-js-modules/node-module-os.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'The Node.js os module'
+title: the-nodejs-os-module
+displayTitle: 'The Node.js os module'
 description: 'The os module of Node.js provides useful functions to interact with underlying system'
 authors: flaviocopes, potch, MylesBorins, fhemberger, LaRuaNa, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/node-module-path.en.md b/content/learn/node-js-modules/node-module-path.en.md
similarity index 98%
rename from content/learn/node-module-path.en.md
rename to content/learn/node-js-modules/node-module-path.en.md
index 4a66432f..999bb5dc 100644
--- a/content/learn/node-module-path.en.md
+++ b/content/learn/node-js-modules/node-module-path.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'The Node.js path module'
+title: the-nodejs-path-module
+displayTitle: 'The Node.js path module'
 description: 'The path module of Node.js provides useful functions to interact with file paths'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, amiller-gh, ahmadawais, 19shubham11
 category: learn
diff --git a/content/learn/nodejs-streams.en.md b/content/learn/node-js-modules/nodejs-streams.en.md
similarity index 99%
rename from content/learn/nodejs-streams.en.md
rename to content/learn/node-js-modules/nodejs-streams.en.md
index 5e931aa2..50832806 100644
--- a/content/learn/nodejs-streams.en.md
+++ b/content/learn/node-js-modules/nodejs-streams.en.md
@@ -1,5 +1,6 @@
 ---
-title: Node.js Streams
+title: nodejs-streams
+displayTitle: 'Node.js Streams'
 description: 'Learn what streams are for, why are they so important, and how to use them.'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, amiller-gh, r0mflip, ahmadawais, 19shubham11
 category: learn
diff --git a/content/learn/how-to-use-npm-package/binary-files.png b/content/learn/node-js-package-manager/how-to-use-npm-package/binary-files.png
similarity index 100%
rename from content/learn/how-to-use-npm-package/binary-files.png
rename to content/learn/node-js-package-manager/how-to-use-npm-package/binary-files.png
diff --git a/content/learn/how-to-use-npm-package/cow-say.png b/content/learn/node-js-package-manager/how-to-use-npm-package/cow-say.png
similarity index 100%
rename from content/learn/how-to-use-npm-package/cow-say.png
rename to content/learn/node-js-package-manager/how-to-use-npm-package/cow-say.png
diff --git a/content/learn/how-to-use-npm-package/index.en.md b/content/learn/node-js-package-manager/how-to-use-npm-package/index.en.md
similarity index 92%
rename from content/learn/how-to-use-npm-package/index.en.md
rename to content/learn/node-js-package-manager/how-to-use-npm-package/index.en.md
index 34083905..ae75d7d0 100644
--- a/content/learn/how-to-use-npm-package/index.en.md
+++ b/content/learn/node-js-package-manager/how-to-use-npm-package/index.en.md
@@ -1,5 +1,6 @@
 ---
-title: How to use or execute a package installed using npm
+title: how-to-use-or-execute-a-package-installed-using-npm
+displayTitle: 'How to use or execute a package installed using npm'
 description: 'How to include and use in your code a package installed in your node_modules folder'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/how-to-use-npm-package/node_modules-content.png b/content/learn/node-js-package-manager/how-to-use-npm-package/node_modules-content.png
similarity index 100%
rename from content/learn/how-to-use-npm-package/node_modules-content.png
rename to content/learn/node-js-package-manager/how-to-use-npm-package/node_modules-content.png
diff --git a/content/learn/npm-dependencies-devdependencies.en.md b/content/learn/node-js-package-manager/npm-dependencies-devdependencies.en.md
similarity index 91%
rename from content/learn/npm-dependencies-devdependencies.en.md
rename to content/learn/node-js-package-manager/npm-dependencies-devdependencies.en.md
index c080096b..6fc628fd 100644
--- a/content/learn/npm-dependencies-devdependencies.en.md
+++ b/content/learn/node-js-package-manager/npm-dependencies-devdependencies.en.md
@@ -1,5 +1,6 @@
 ---
-title: npm dependencies and devDependencies
+title: npm-dependencies-and-devdependencies
+displayTitle: 'npm dependencies and devDependencies'
 description: 'When is a package a dependency, and when is it a dev dependency?'
 authors: flaviocopes, MylesBorins, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/npm-install-previous-package-version.en.md b/content/learn/node-js-package-manager/npm-install-previous-package-version.en.md
similarity index 89%
rename from content/learn/npm-install-previous-package-version.en.md
rename to content/learn/node-js-package-manager/npm-install-previous-package-version.en.md
index 1e86cefa..97360258 100644
--- a/content/learn/npm-install-previous-package-version.en.md
+++ b/content/learn/node-js-package-manager/npm-install-previous-package-version.en.md
@@ -1,5 +1,6 @@
 ---
-title: Install an older version of an npm package
+title: install-an-older-version-of-an-npm-package
+displayTitle: 'Install an older version of an npm package'
 description: 'Learn how to install an older version of an npm package, something that might be useful to solve a compatibility problem'
 authors: flaviocopes, MylesBorins, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/npm-know-version-installed.en.md b/content/learn/node-js-package-manager/npm-know-version-installed.en.md
similarity index 93%
rename from content/learn/npm-know-version-installed.en.md
rename to content/learn/node-js-package-manager/npm-know-version-installed.en.md
index 4faafbe0..b6f37d1b 100644
--- a/content/learn/npm-know-version-installed.en.md
+++ b/content/learn/node-js-package-manager/npm-know-version-installed.en.md
@@ -1,5 +1,6 @@
 ---
-title: Find the installed version of an npm package
+title: find-the-installed-version-of-an-npm-package
+displayTitle: 'Find the installed version of an npm package'
 description: 'How to find out which version of a particular package you have installed in your app'
 authors: flaviocopes, MylesBorins, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/npm-packages-local-global.en.md b/content/learn/node-js-package-manager/npm-packages-local-global.en.md
similarity index 95%
rename from content/learn/npm-packages-local-global.en.md
rename to content/learn/node-js-package-manager/npm-packages-local-global.en.md
index 43a1cd97..e879e5c6 100644
--- a/content/learn/npm-packages-local-global.en.md
+++ b/content/learn/node-js-package-manager/npm-packages-local-global.en.md
@@ -1,5 +1,6 @@
 ---
-title: npm global or local packages
+title: npm-global-or-local-packages
+displayTitle: 'npm global or local packages'
 description: 'When is a package best installed globally? Why?'
 authors: flaviocopes, MylesBorins, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/npm-semantic-versioning.en.md b/content/learn/node-js-package-manager/npm-semantic-versioning.en.md
similarity index 96%
rename from content/learn/npm-semantic-versioning.en.md
rename to content/learn/node-js-package-manager/npm-semantic-versioning.en.md
index cd3a34d9..9d56d891 100644
--- a/content/learn/npm-semantic-versioning.en.md
+++ b/content/learn/node-js-package-manager/npm-semantic-versioning.en.md
@@ -1,5 +1,6 @@
 ---
-title: Semantic Versioning using npm
+title: semantic-versioning-using-npm
+displayTitle: 'Semantic Versioning using npm'
 description: 'Semantic Versioning is a convention used to provide a meaning to versions'
 authors: flaviocopes, MylesBorins, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/npm-uninstall-packages.en.md b/content/learn/node-js-package-manager/npm-uninstall-packages.en.md
similarity index 92%
rename from content/learn/npm-uninstall-packages.en.md
rename to content/learn/node-js-package-manager/npm-uninstall-packages.en.md
index fddd0d06..ccff4c9b 100644
--- a/content/learn/npm-uninstall-packages.en.md
+++ b/content/learn/node-js-package-manager/npm-uninstall-packages.en.md
@@ -1,5 +1,6 @@
 ---
-title: Uninstalling npm packages
+title: uninstalling-npm-packages
+displayTitle: 'Uninstalling npm packages'
 description: 'How to uninstall an npm Node.js package, locally or globally'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, shajanjp
 category: learn
diff --git a/content/learn/npm.en.md b/content/learn/node-js-package-manager/npm.en.md
similarity index 97%
rename from content/learn/npm.en.md
rename to content/learn/node-js-package-manager/npm.en.md
index b27b02ba..009c6628 100644
--- a/content/learn/npm.en.md
+++ b/content/learn/node-js-package-manager/npm.en.md
@@ -1,5 +1,6 @@
 ---
-title: An introduction to the npm package manager
+title: an-introduction-to-the-npm-package-manager
+displayTitle: 'An introduction to the npm package manager'
 description: 'A quick guide to npm, the powerful package manager key to the success of Node.js. In January 2017 over 350000 packages were reported being listed in the npm registry, making it the biggest single language code repository on Earth, and you can be sure there is a package for (almost!) everything.'
 authors: flaviocopes, MylesBorins, LaRuaNa, jgb-solutions, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/npx.en.md b/content/learn/node-js-package-manager/npx.en.md
similarity index 97%
rename from content/learn/npx.en.md
rename to content/learn/node-js-package-manager/npx.en.md
index 1393947a..92b655d3 100644
--- a/content/learn/npx.en.md
+++ b/content/learn/node-js-package-manager/npx.en.md
@@ -1,5 +1,6 @@
 ---
-title: The npx Node.js Package Runner
+title: the-npx-nodejs-package-runner
+displayTitle: 'The npx Node.js Package Runner'
 description: 'npx is a very cool way to run Node.js code, and provides many useful features'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, jgb-solutions, ahmadawais
 category: learn
diff --git a/content/learn/package-json.en.md b/content/learn/node-js-package-manager/package-json.en.md
similarity index 99%
rename from content/learn/package-json.en.md
rename to content/learn/node-js-package-manager/package-json.en.md
index cd7bd88f..f215aa47 100644
--- a/content/learn/package-json.en.md
+++ b/content/learn/node-js-package-manager/package-json.en.md
@@ -1,5 +1,6 @@
 ---
-title: The package.json guide
+title: the-packagejson-guide
+displayTitle: 'The package.json guide'
 description: 'The package.json file is a key element in lots of app codebases based on the Node.js ecosystem.'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, jgb-solutions, amiller-gh, ahmadawais
 category: learn
diff --git a/content/learn/package-lock-json.en.md b/content/learn/node-js-package-manager/package-lock-json.en.md
similarity index 98%
rename from content/learn/package-lock-json.en.md
rename to content/learn/node-js-package-manager/package-lock-json.en.md
index c2c2d0cf..0a2d8e42 100644
--- a/content/learn/package-lock-json.en.md
+++ b/content/learn/node-js-package-manager/package-lock-json.en.md
@@ -1,5 +1,6 @@
 ---
-title: The package-lock.json file
+title: the-package-lockjson-file
+displayTitle: 'The package-lock.json file'
 description: "The package-lock.json file is automatically generated when installing node packages. Learn what it's about"
 authors: flaviocopes, MylesBorins, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/update-npm-dependencies/index.en.md b/content/learn/node-js-package-manager/update-npm-dependencies/index.en.md
similarity index 95%
rename from content/learn/update-npm-dependencies/index.en.md
rename to content/learn/node-js-package-manager/update-npm-dependencies/index.en.md
index cca0028b..edeb8e80 100644
--- a/content/learn/update-npm-dependencies/index.en.md
+++ b/content/learn/node-js-package-manager/update-npm-dependencies/index.en.md
@@ -1,5 +1,6 @@
 ---
-title: Update all the Node.js dependencies to their latest version
+title: update-all-the-nodejs-dependencies-to-their-latest-version
+displayTitle: 'Update all the Node.js dependencies to their latest version'
 description: 'How do you update all the npm dependencies store in the package.json file, to their latest version available?'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/update-npm-dependencies/outdated-packages.png b/content/learn/node-js-package-manager/update-npm-dependencies/outdated-packages.png
similarity index 100%
rename from content/learn/update-npm-dependencies/outdated-packages.png
rename to content/learn/node-js-package-manager/update-npm-dependencies/outdated-packages.png
diff --git a/content/learn/update-npm-dependencies/updated-packages.png b/content/learn/node-js-package-manager/update-npm-dependencies/updated-packages.png
similarity index 100%
rename from content/learn/update-npm-dependencies/updated-packages.png
rename to content/learn/node-js-package-manager/update-npm-dependencies/updated-packages.png
diff --git a/content/learn/where-npm-install-packages.en.md b/content/learn/node-js-package-manager/where-npm-install-packages.en.md
similarity index 92%
rename from content/learn/where-npm-install-packages.en.md
rename to content/learn/node-js-package-manager/where-npm-install-packages.en.md
index 349de703..163b0d2e 100644
--- a/content/learn/where-npm-install-packages.en.md
+++ b/content/learn/node-js-package-manager/where-npm-install-packages.en.md
@@ -1,5 +1,6 @@
 ---
-title: Where does npm install the packages?
+title: where-does-npm-install-the-packages
+displayTitle: 'Where does npm install the packages?'
 description: 'How to find out where npm installs the packages'
 authors: flaviocopes, MylesBorins, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/node-http-server.en.md b/content/learn/node-js-web-server/node-http-server.en.md
similarity index 96%
rename from content/learn/node-http-server.en.md
rename to content/learn/node-js-web-server/node-http-server.en.md
index 558acb82..584a1e48 100644
--- a/content/learn/node-http-server.en.md
+++ b/content/learn/node-js-web-server/node-http-server.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Build an HTTP Server'
+title: build-an-http-server
+displayTitle: 'Build an HTTP Server'
 description: 'How to build an HTTP server with Node.js'
 authors: flaviocopes, potch, MylesBorins, LaRuaNa, ahmadawais, dogafincan
 category: learn
diff --git a/content/learn/node-make-http-requests.en.md b/content/learn/node-js-web-server/node-make-http-requests.en.md
similarity index 96%
rename from content/learn/node-make-http-requests.en.md
rename to content/learn/node-js-web-server/node-make-http-requests.en.md
index 93893a93..feacbddf 100644
--- a/content/learn/node-make-http-requests.en.md
+++ b/content/learn/node-js-web-server/node-make-http-requests.en.md
@@ -1,5 +1,6 @@
 ---
-title: 'Making HTTP requests with Node.js'
+title: making-http-requests-with-nodejs
+displayTitle: 'Making HTTP requests with Node.js'
 description: 'How to perform HTTP requests with Node.js using GET, POST, PUT and DELETE'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais
 category: learn
diff --git a/content/learn/node-request-data.en.md b/content/learn/node-js-web-server/node-request-data.en.md
similarity index 96%
rename from content/learn/node-request-data.en.md
rename to content/learn/node-js-web-server/node-request-data.en.md
index fa85b533..3a1cb9a7 100644
--- a/content/learn/node-request-data.en.md
+++ b/content/learn/node-js-web-server/node-request-data.en.md
@@ -1,5 +1,6 @@
 ---
-title: Get HTTP request body data using Node.js
+title: get-http-request-body-data-using-nodejs
+displayTitle: 'Get HTTP request body data using Node.js'
 description: 'Find out how to extract the data sent as JSON through an HTTP request body using Node.js'
 authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, rodion-arr
 category: learn
diff --git a/firebase.json b/firebase.json
index 911e4703..f083d5ea 100644
--- a/firebase.json
+++ b/firebase.json
@@ -105,6 +105,11 @@
       "source": "/api/v18/",
       "destination": "/api/v18/documentation/",
       "type": "301"
+    },
+    {
+      "source": "/api/latest/",
+      "destination": "/api/v18/documentation/",
+      "type": "301"
     }
   ]
 }
\ No newline at end of file
diff --git a/gatsby-node.js b/gatsby-node.js
index 236f8e6f..29b82f34 100644
--- a/gatsby-node.js
+++ b/gatsby-node.js
@@ -171,9 +171,11 @@ exports.createPages = async ({ graphql, actions }) => {
   });
 
   const latestApiPath = `${apiPath}${latestVersion}/`;
+  const apiPathWithLatest = `${apiPath}latest/`;
 
   pageRedirects[apiPath] = `${latestApiPath}documentation/`;
   pageRedirects[latestApiPath] = `${latestApiPath}documentation/`;
+  pageRedirects[apiPathWithLatest] = `${latestApiPath}documentation/`;
 
   // Updates `firebase.json` with new redirects
   // This is used for our static hosting redirects (npm run build)
@@ -194,7 +196,7 @@ exports.createPages = async ({ graphql, actions }) => {
       fromPath: from,
       toPath: pageRedirects[from],
       isPermanent: true,
-      redirectInBrowser: process.env.NODE_ENV === 'development',
+      redirectInBrowser: true,
       statusCode: 200,
     };
 
diff --git a/package-lock.json b/package-lock.json
index d914542b..0af481de 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -311,27 +311,27 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz",
-      "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.1.tgz",
+      "integrity": "sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz",
-      "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.1.tgz",
+      "integrity": "sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==",
       "dependencies": {
         "@ampproject/remapping": "^2.1.0",
         "@babel/code-frame": "^7.18.6",
         "@babel/generator": "^7.19.0",
-        "@babel/helper-compilation-targets": "^7.19.0",
+        "@babel/helper-compilation-targets": "^7.19.1",
         "@babel/helper-module-transforms": "^7.19.0",
         "@babel/helpers": "^7.19.0",
-        "@babel/parser": "^7.19.0",
+        "@babel/parser": "^7.19.1",
         "@babel/template": "^7.18.10",
-        "@babel/traverse": "^7.19.0",
+        "@babel/traverse": "^7.19.1",
         "@babel/types": "^7.19.0",
         "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
@@ -348,11 +348,11 @@
       }
     },
     "node_modules/@babel/eslint-parser": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz",
-      "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz",
+      "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==",
       "dependencies": {
-        "eslint-scope": "^5.1.1",
+        "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
         "eslint-visitor-keys": "^2.1.0",
         "semver": "^6.3.0"
       },
@@ -422,13 +422,13 @@
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz",
-      "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz",
+      "integrity": "sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==",
       "dependencies": {
-        "@babel/compat-data": "^7.19.0",
+        "@babel/compat-data": "^7.19.1",
         "@babel/helper-validator-option": "^7.18.6",
-        "browserslist": "^4.20.2",
+        "browserslist": "^4.21.3",
         "semver": "^6.3.0"
       },
       "engines": {
@@ -608,15 +608,15 @@
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
-      "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz",
+      "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==",
       "dependencies": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-member-expression-to-functions": "^7.18.9",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/traverse": "^7.19.1",
+        "@babel/types": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -664,9 +664,9 @@
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
-      "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+      "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
       "engines": {
         "node": ">=6.9.0"
       }
@@ -720,9 +720,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
-      "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz",
+      "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==",
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -761,9 +761,9 @@
       }
     },
     "node_modules/@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz",
-      "integrity": "sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz",
+      "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==",
       "dependencies": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-plugin-utils": "^7.19.0",
@@ -1529,9 +1529,9 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz",
-      "integrity": "sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz",
+      "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==",
       "dependencies": {
         "@babel/helper-create-regexp-features-plugin": "^7.19.0",
         "@babel/helper-plugin-utils": "^7.19.0"
@@ -1705,15 +1705,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-runtime": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz",
-      "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz",
+      "integrity": "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==",
       "dependencies": {
         "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.9",
-        "babel-plugin-polyfill-corejs2": "^0.3.2",
-        "babel-plugin-polyfill-corejs3": "^0.5.3",
-        "babel-plugin-polyfill-regenerator": "^0.4.0",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "babel-plugin-polyfill-corejs2": "^0.3.3",
+        "babel-plugin-polyfill-corejs3": "^0.6.0",
+        "babel-plugin-polyfill-regenerator": "^0.4.1",
         "semver": "^6.3.0"
       },
       "engines": {
@@ -1795,9 +1795,9 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.0.tgz",
-      "integrity": "sha512-DOOIywxPpkQHXijXv+s9MDAyZcLp12oYRl3CMWZ6u7TjSoCBq/KqHR/nNFR3+i2xqheZxoF0H2XyL7B6xeSRuA==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.1.tgz",
+      "integrity": "sha512-+ILcOU+6mWLlvCwnL920m2Ow3wWx3Wo8n2t5aROQmV55GZt+hOiLvBaa3DNzRjSEHa1aauRs4/YLmkCfFkhhRQ==",
       "dependencies": {
         "@babel/helper-create-class-features-plugin": "^7.19.0",
         "@babel/helper-plugin-utils": "^7.19.0",
@@ -1840,17 +1840,17 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.0.tgz",
-      "integrity": "sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.1.tgz",
+      "integrity": "sha512-c8B2c6D16Lp+Nt6HcD+nHl0VbPKVnNPTpszahuxJJnurfMtKeZ80A+qUv48Y7wqvS+dTFuLuaM9oYxyNHbCLWA==",
       "dependencies": {
-        "@babel/compat-data": "^7.19.0",
-        "@babel/helper-compilation-targets": "^7.19.0",
+        "@babel/compat-data": "^7.19.1",
+        "@babel/helper-compilation-targets": "^7.19.1",
         "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/helper-validator-option": "^7.18.6",
         "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
         "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
-        "@babel/plugin-proposal-async-generator-functions": "^7.19.0",
+        "@babel/plugin-proposal-async-generator-functions": "^7.19.1",
         "@babel/plugin-proposal-class-properties": "^7.18.6",
         "@babel/plugin-proposal-class-static-block": "^7.18.6",
         "@babel/plugin-proposal-dynamic-import": "^7.18.6",
@@ -1898,7 +1898,7 @@
         "@babel/plugin-transform-modules-commonjs": "^7.18.6",
         "@babel/plugin-transform-modules-systemjs": "^7.19.0",
         "@babel/plugin-transform-modules-umd": "^7.18.6",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.0",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
         "@babel/plugin-transform-new-target": "^7.18.6",
         "@babel/plugin-transform-object-super": "^7.18.6",
         "@babel/plugin-transform-parameters": "^7.18.8",
@@ -1914,10 +1914,10 @@
         "@babel/plugin-transform-unicode-regex": "^7.18.6",
         "@babel/preset-modules": "^0.1.5",
         "@babel/types": "^7.19.0",
-        "babel-plugin-polyfill-corejs2": "^0.3.2",
-        "babel-plugin-polyfill-corejs3": "^0.5.3",
-        "babel-plugin-polyfill-regenerator": "^0.4.0",
-        "core-js-compat": "^3.22.1",
+        "babel-plugin-polyfill-corejs2": "^0.3.3",
+        "babel-plugin-polyfill-corejs3": "^0.6.0",
+        "babel-plugin-polyfill-regenerator": "^0.4.1",
+        "core-js-compat": "^3.25.1",
         "semver": "^6.3.0"
       },
       "engines": {
@@ -1989,11 +1989,11 @@
       }
     },
     "node_modules/@babel/runtime-corejs3": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.0.tgz",
-      "integrity": "sha512-JyXXoCu1N8GLuKc2ii8y5RGma5FMpFeO2nAQIe0Yzrbq+rQnN+sFj47auLblR5ka6aHNGPDgv8G/iI2Grb0ldQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.1.tgz",
+      "integrity": "sha512-j2vJGnkopRzH+ykJ8h68wrHnEUmtK//E723jjixiAl/PPf6FhqY/vYRcMVlNydRKQjQsTsYEjpx+DZMIvnGk/g==",
       "dependencies": {
-        "core-js-pure": "^3.20.2",
+        "core-js-pure": "^3.25.1",
         "regenerator-runtime": "^0.13.4"
       },
       "engines": {
@@ -2014,9 +2014,9 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz",
-      "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz",
+      "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==",
       "dependencies": {
         "@babel/code-frame": "^7.18.6",
         "@babel/generator": "^7.19.0",
@@ -2024,7 +2024,7 @@
         "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-hoist-variables": "^7.18.6",
         "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/parser": "^7.19.0",
+        "@babel/parser": "^7.19.1",
         "@babel/types": "^7.19.0",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
@@ -2502,9 +2502,9 @@
       }
     },
     "node_modules/@graphql-codegen/plugin-helpers": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-2.7.0.tgz",
-      "integrity": "sha512-+a2VP/4Ob0fwP8YLrQ/hhYlAA9UZUdDFNqwS543DmyiGFUkNIsa7TnTsE/mBDKJSMsCVWLw78949fCpzjyw/9Q==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-2.7.1.tgz",
+      "integrity": "sha512-wpEShhwbQp8pqXolnSCNaj0pU91LbuBvYHpYqm96TUqyeKQYAYRVmw3JIt0g8UQpKYhg8lYIDwWdcINOYqkGLg==",
       "dependencies": {
         "@graphql-tools/utils": "^8.8.0",
         "change-case-all": "1.0.14",
@@ -3854,14 +3854,14 @@
       ]
     },
     "node_modules/@mui/base": {
-      "version": "5.0.0-alpha.97",
-      "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.97.tgz",
-      "integrity": "sha512-gvo0hOg/tBzfJ3eDQOGAPBJJU+qTWd0e5zBEMFIkT1ekJqXx14JtIHvheOFU17y9iDciYE256Q8g+tj6a1dcBA==",
+      "version": "5.0.0-alpha.98",
+      "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.98.tgz",
+      "integrity": "sha512-c0U51+K2m57MASpRrmNs6qTXSvktDbVcSjD8zCRPbfuwYWERGGwNxwM3/jsBa4dSojTSmLPnOBFDypl74Ds6yQ==",
       "dependencies": {
-        "@babel/runtime": "^7.18.9",
+        "@babel/runtime": "^7.19.0",
         "@emotion/is-prop-valid": "^1.2.0",
         "@mui/types": "^7.2.0",
-        "@mui/utils": "^5.10.3",
+        "@mui/utils": "^5.10.6",
         "@popperjs/core": "^2.11.6",
         "clsx": "^1.2.1",
         "prop-types": "^15.8.1",
@@ -3886,20 +3886,20 @@
       }
     },
     "node_modules/@mui/core-downloads-tracker": {
-      "version": "5.10.5",
-      "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.5.tgz",
-      "integrity": "sha512-sZYg85rQdlgDYU3V4WcT2Dl+k+y2wYqN04aUvVkFksRR0j81sj6KmfXx4842HJQcq5rjzcTvh4N+yv66XR/9fA==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.6.tgz",
+      "integrity": "sha512-dmyQBqrKmVU6yCSM4GGal5qNXpViXX+/V1t0GA1A5i9QF5Gx6noV/cw0hrSS2ffLT8L2oScq1oTdA6NVIiQ8lg==",
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/mui"
       }
     },
     "node_modules/@mui/icons-material": {
-      "version": "5.10.3",
-      "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.10.3.tgz",
-      "integrity": "sha512-o0kbUlsWCBtCE0wP33cGKbyryCh7kpm2EECYMPDmWrLhbA+HUODXIdhiTFS26szp2xXo9HY1lEx0ufeJ+tddYw==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.10.6.tgz",
+      "integrity": "sha512-QwxdRmLA46S94B0hExPDx0td+A2unF+33bQ6Cs+lNpJKVsm1YeHwNdYXYcnpWeHeQQ07055OXl7IB2GKDd0MfA==",
       "dependencies": {
-        "@babel/runtime": "^7.18.9"
+        "@babel/runtime": "^7.19.0"
       },
       "engines": {
         "node": ">=12.0.0"
@@ -3920,16 +3920,16 @@
       }
     },
     "node_modules/@mui/material": {
-      "version": "5.10.5",
-      "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.5.tgz",
-      "integrity": "sha512-VFMadvfA6jqx5DCk2xoBl4bAGyzgmmubJIuB7fUWUZBwYIYL5Ea9SsoFpt5kawA6O2feuj69alDN2fhxPw1MeQ==",
-      "dependencies": {
-        "@babel/runtime": "^7.18.9",
-        "@mui/base": "5.0.0-alpha.97",
-        "@mui/core-downloads-tracker": "^5.10.5",
-        "@mui/system": "^5.10.5",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.6.tgz",
+      "integrity": "sha512-QilW5PAAGSQdN7Cpp4rwSQ1doJAt3ca1a2PHZtr8RLVlpHnXb+qQ8CeDo9+9V2fK5CDNdtTN1F+iJKO43aFBpQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.19.0",
+        "@mui/base": "5.0.0-alpha.98",
+        "@mui/core-downloads-tracker": "^5.10.6",
+        "@mui/system": "^5.10.6",
         "@mui/types": "^7.2.0",
-        "@mui/utils": "^5.10.3",
+        "@mui/utils": "^5.10.6",
         "@types/react-transition-group": "^4.4.5",
         "clsx": "^1.2.1",
         "csstype": "^3.1.0",
@@ -3964,12 +3964,12 @@
       }
     },
     "node_modules/@mui/private-theming": {
-      "version": "5.10.3",
-      "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.3.tgz",
-      "integrity": "sha512-LCYIKlkGz2BTSng2BFzzwSJBRZbChIUri2x2Nh8ryk2B1Ho7zpvE7ex6y39LlStG2Frf92NFC/V4YQbmMAjD5A==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.6.tgz",
+      "integrity": "sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==",
       "dependencies": {
-        "@babel/runtime": "^7.18.9",
-        "@mui/utils": "^5.10.3",
+        "@babel/runtime": "^7.19.0",
+        "@mui/utils": "^5.10.6",
         "prop-types": "^15.8.1"
       },
       "engines": {
@@ -3990,11 +3990,11 @@
       }
     },
     "node_modules/@mui/styled-engine": {
-      "version": "5.10.5",
-      "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.5.tgz",
-      "integrity": "sha512-6U6tTdf+H1OsjgcFoY12gYPR+qqZ1WHGGIahK5V7JhMkMUgH7ozyiNi8s1LzmwrUlAz1hAAhuO5nBYXku3wWvw==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.6.tgz",
+      "integrity": "sha512-OnVw5xnO4l0XzlJFhKif/RlLenBNhyEQQlSTwB9ApSWB05UAU5ZSbjNsRfyEKvgmQ/fPa+MqPD/dzxbIRCwyeg==",
       "dependencies": {
-        "@babel/runtime": "^7.18.9",
+        "@babel/runtime": "^7.19.0",
         "@emotion/cache": "^11.10.3",
         "csstype": "^3.1.0",
         "prop-types": "^15.8.1"
@@ -4021,15 +4021,15 @@
       }
     },
     "node_modules/@mui/system": {
-      "version": "5.10.5",
-      "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.5.tgz",
-      "integrity": "sha512-GUPiDVZTKp9yH3FVeLSIw3Bqsyl7qLxtAK1ZiZmC8e+zdH7bcnZZXvWK3vPIbx35ZyhQpvAOWQFpiF9TjdA77w==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.6.tgz",
+      "integrity": "sha512-HfQVX7e2xpQ3jtdB/WwtkFVtozMOozyN575/63u8ILHkE8wGDhblmCieAsnyJPFbm7WBW5PCMyzmfr4QyKLaYg==",
       "dependencies": {
-        "@babel/runtime": "^7.18.9",
-        "@mui/private-theming": "^5.10.3",
-        "@mui/styled-engine": "^5.10.5",
+        "@babel/runtime": "^7.19.0",
+        "@mui/private-theming": "^5.10.6",
+        "@mui/styled-engine": "^5.10.6",
         "@mui/types": "^7.2.0",
-        "@mui/utils": "^5.10.3",
+        "@mui/utils": "^5.10.6",
         "clsx": "^1.2.1",
         "csstype": "^3.1.0",
         "prop-types": "^15.8.1"
@@ -4073,11 +4073,11 @@
       }
     },
     "node_modules/@mui/utils": {
-      "version": "5.10.3",
-      "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.3.tgz",
-      "integrity": "sha512-4jXMDPfx6bpMVuheLaOpKTjpzw39ogAZLeaLj5+RJec3E37/hAZMYjURfblLfTWMMoGoqkY03mNsZaEwNobBow==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.6.tgz",
+      "integrity": "sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==",
       "dependencies": {
-        "@babel/runtime": "^7.18.9",
+        "@babel/runtime": "^7.19.0",
         "@types/prop-types": "^15.7.5",
         "@types/react-is": "^16.7.1 || ^17.0.0",
         "prop-types": "^15.8.1",
@@ -4094,6 +4094,14 @@
         "react": "^17.0.0 || ^18.0.0"
       }
     },
+    "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
+      "version": "5.1.1-v1",
+      "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
+      "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
+      "dependencies": {
+        "eslint-scope": "5.1.1"
+      }
+    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -4885,9 +4893,9 @@
       }
     },
     "node_modules/@parcel/source-map": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.0.tgz",
-      "integrity": "sha512-E7UOEIof2o89LrKk1agSLmwakjigmEdDp1ZaEdsLVEvq63R/bul4Ij5CT+0ZDcijGpl5tnTbQADY9EyYGtjYgQ==",
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz",
+      "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==",
       "dependencies": {
         "detect-libc": "^1.0.3"
       },
@@ -5429,9 +5437,9 @@
       "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
     },
     "node_modules/@sinclair/typebox": {
-      "version": "0.24.41",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.41.tgz",
-      "integrity": "sha512-TJCgQurls4FipFvHeC+gfAzb+GGstL0TDwYJKQVtTeSvJIznWzP7g3bAd5gEBlr8+bIxqnWS9VGVWREDhmE8jA==",
+      "version": "0.24.42",
+      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.42.tgz",
+      "integrity": "sha512-d+2AtrHGyWek2u2ITF0lHRIv6Tt7X0dEHW+0rP+5aDCEjC3fiN2RBjrLD0yU0at52BcZbRGxLbAtXiR0hFCjYw==",
       "dev": true
     },
     "node_modules/@sindresorhus/is": {
@@ -5781,9 +5789,9 @@
       }
     },
     "node_modules/@testing-library/dom": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.17.1.tgz",
-      "integrity": "sha512-KnH2MnJUzmFNPW6RIKfd+zf2Wue8mEKX0M3cpX6aKl5ZXrJM1/c/Pc8c2xDNYQCnJO48Sm5ITbMXgqTr3h4jxQ==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.18.1.tgz",
+      "integrity": "sha512-oEvsm2B/WtcHKE+IcEeeCqNU/ltFGaVyGbpcm4g/2ytuT49jrlH9x5qRKL/H3A6yfM4YAbSbC0ceT5+9CEXnLg==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "^7.10.4",
@@ -6238,9 +6246,9 @@
       }
     },
     "node_modules/@types/jest": {
-      "version": "29.0.2",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.0.2.tgz",
-      "integrity": "sha512-TaklkwSEtvwJpleiKBHgEBySIQlcZ08gYP/s5wdtdLnjz9uxjnDd7U+Y0JWACebkqBc+jtbol2PEtEW0wQV2zQ==",
+      "version": "29.0.3",
+      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.0.3.tgz",
+      "integrity": "sha512-F6ukyCTwbfsEX5F2YmVYmM5TcTHy1q9P5rWlRbrk56KyMh3v9xRGUO3aa8+SkvMi0SHXtASJv1283enXimC0Og==",
       "dev": true,
       "dependencies": {
         "expect": "^29.0.0",
@@ -6586,16 +6594,15 @@
       "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz",
-      "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.0.tgz",
+      "integrity": "sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "5.37.0",
-        "@typescript-eslint/type-utils": "5.37.0",
-        "@typescript-eslint/utils": "5.37.0",
+        "@typescript-eslint/scope-manager": "5.38.0",
+        "@typescript-eslint/type-utils": "5.38.0",
+        "@typescript-eslint/utils": "5.38.0",
         "debug": "^4.3.4",
-        "functional-red-black-tree": "^1.0.1",
         "ignore": "^5.2.0",
         "regexpp": "^3.2.0",
         "semver": "^7.3.7",
@@ -6783,14 +6790,14 @@
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz",
-      "integrity": "sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.0.tgz",
+      "integrity": "sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "5.37.0",
-        "@typescript-eslint/types": "5.37.0",
-        "@typescript-eslint/typescript-estree": "5.37.0",
+        "@typescript-eslint/scope-manager": "5.38.0",
+        "@typescript-eslint/types": "5.38.0",
+        "@typescript-eslint/typescript-estree": "5.38.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -6810,13 +6817,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz",
-      "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz",
+      "integrity": "sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.37.0",
-        "@typescript-eslint/visitor-keys": "5.37.0"
+        "@typescript-eslint/types": "5.38.0",
+        "@typescript-eslint/visitor-keys": "5.38.0"
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -6827,13 +6834,13 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz",
-      "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.0.tgz",
+      "integrity": "sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "5.37.0",
-        "@typescript-eslint/utils": "5.37.0",
+        "@typescript-eslint/typescript-estree": "5.38.0",
+        "@typescript-eslint/utils": "5.38.0",
         "debug": "^4.3.4",
         "tsutils": "^3.21.0"
       },
@@ -6854,9 +6861,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz",
-      "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.0.tgz",
+      "integrity": "sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -6867,13 +6874,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz",
-      "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.0.tgz",
+      "integrity": "sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.37.0",
-        "@typescript-eslint/visitor-keys": "5.37.0",
+        "@typescript-eslint/types": "5.38.0",
+        "@typescript-eslint/visitor-keys": "5.38.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -6927,15 +6934,15 @@
       "dev": true
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz",
-      "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.0.tgz",
+      "integrity": "sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==",
       "dev": true,
       "dependencies": {
         "@types/json-schema": "^7.0.9",
-        "@typescript-eslint/scope-manager": "5.37.0",
-        "@typescript-eslint/types": "5.37.0",
-        "@typescript-eslint/typescript-estree": "5.37.0",
+        "@typescript-eslint/scope-manager": "5.38.0",
+        "@typescript-eslint/types": "5.38.0",
+        "@typescript-eslint/typescript-estree": "5.38.0",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^3.0.0"
       },
@@ -6951,12 +6958,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz",
-      "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.0.tgz",
+      "integrity": "sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.37.0",
+        "@typescript-eslint/types": "5.38.0",
         "eslint-visitor-keys": "^3.3.0"
       },
       "engines": {
@@ -7547,9 +7554,9 @@
       }
     },
     "node_modules/autoprefixer": {
-      "version": "10.4.10",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.10.tgz",
-      "integrity": "sha512-nMaiDARyp1e74c8IeAXkr+BmFKa8By4Zak7tyaNPF09Iu39WFpNXOWrVirmXjKr+5cOyERwvtbMOLYz6iBJYgQ==",
+      "version": "10.4.11",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.11.tgz",
+      "integrity": "sha512-5lHp6DgRodxlBLSkzHOTcufWFflH1ewfy2hvFQyjrblBFlP/0Yh4O/Wrg4ow8WRlN3AAUFFLAQwX8hTptzqVHg==",
       "funding": [
         {
           "type": "opencollective",
@@ -7861,12 +7868,12 @@
       }
     },
     "node_modules/babel-plugin-polyfill-corejs3": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz",
-      "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==",
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz",
+      "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==",
       "dependencies": {
-        "@babel/helper-define-polyfill-provider": "^0.3.2",
-        "core-js-compat": "^3.21.0"
+        "@babel/helper-define-polyfill-provider": "^0.3.3",
+        "core-js-compat": "^3.25.1"
       },
       "peerDependencies": {
         "@babel/core": "^7.0.0-0"
@@ -8301,9 +8308,9 @@
       "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
     },
     "node_modules/browserslist": {
-      "version": "4.21.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
-      "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+      "version": "4.21.4",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+      "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
       "funding": [
         {
           "type": "opencollective",
@@ -8315,10 +8322,10 @@
         }
       ],
       "dependencies": {
-        "caniuse-lite": "^1.0.30001370",
-        "electron-to-chromium": "^1.4.202",
+        "caniuse-lite": "^1.0.30001400",
+        "electron-to-chromium": "^1.4.251",
         "node-releases": "^2.0.6",
-        "update-browserslist-db": "^1.0.5"
+        "update-browserslist-db": "^1.0.9"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -8542,9 +8549,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001399",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001399.tgz",
-      "integrity": "sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA==",
+      "version": "1.0.30001407",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001407.tgz",
+      "integrity": "sha512-4ydV+t4P7X3zH83fQWNDX/mQEzYomossfpViCOx9zHBSMV+rIe3LFqglHHtVyvNl1FhTNxPxs3jei82iqOW04w==",
       "funding": [
         {
           "type": "opencollective",
@@ -9106,6 +9113,14 @@
       "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
       "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="
     },
+    "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/common-path-prefix": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
@@ -9319,9 +9334,9 @@
       }
     },
     "node_modules/core-js": {
-      "version": "3.25.1",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.1.tgz",
-      "integrity": "sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ==",
+      "version": "3.25.2",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.2.tgz",
+      "integrity": "sha512-YB4IAT1bjEfxTJ1XYy11hJAKskO+qmhuDBM8/guIfMz4JvdsAQAqvyb97zXX7JgSrfPLG5mRGFWJwJD39ruq2A==",
       "hasInstallScript": true,
       "funding": {
         "type": "opencollective",
@@ -9329,11 +9344,11 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.25.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.1.tgz",
-      "integrity": "sha512-pOHS7O0i8Qt4zlPW/eIFjwp+NrTPx+wTL0ctgI2fHn31sZOq89rDsmtc/A2vAX7r6shl+bmVI+678He46jgBlw==",
+      "version": "3.25.2",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.2.tgz",
+      "integrity": "sha512-TxfyECD4smdn3/CjWxczVtJqVLEEC2up7/82t7vC0AzNogr+4nQ8vyF7abxAuTXWvjTClSbvGhU0RgqA4ToQaQ==",
       "dependencies": {
-        "browserslist": "^4.21.3"
+        "browserslist": "^4.21.4"
       },
       "funding": {
         "type": "opencollective",
@@ -9341,9 +9356,9 @@
       }
     },
     "node_modules/core-js-pure": {
-      "version": "3.25.1",
-      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.1.tgz",
-      "integrity": "sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A==",
+      "version": "3.25.2",
+      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.2.tgz",
+      "integrity": "sha512-ItD7YpW1cUB4jaqFLZXe1AXkyqIxz6GqPnsDV4uF4hVcWh/WAGIqSqw5p0/WdsILM0Xht9s3Koyw05R3K6RtiA==",
       "hasInstallScript": true,
       "funding": {
         "type": "opencollective",
@@ -9900,9 +9915,9 @@
       }
     },
     "node_modules/decimal.js": {
-      "version": "10.4.0",
-      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz",
-      "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg=="
+      "version": "10.4.1",
+      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.1.tgz",
+      "integrity": "sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw=="
     },
     "node_modules/decode-uri-component": {
       "version": "0.2.0",
@@ -10376,9 +10391,9 @@
       "integrity": "sha512-5YM9LFQgVYfuLNEoqMqVWIBuF2UNCA+xu/jz1TyryLN/wmBcQSb+GNAwvLKvEpGESwgGN8XA1nbLAt6rKlyHYQ=="
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.249",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.249.tgz",
-      "integrity": "sha512-GMCxR3p2HQvIw47A599crTKYZprqihoBL4lDSAUmr7IYekXFK5t/WgEBrGJDCa2HWIZFQEkGuMqPCi05ceYqPQ=="
+      "version": "1.4.255",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.255.tgz",
+      "integrity": "sha512-H+mFNKow6gi2P5Gi2d1Fvd3TUEJlB9CF7zYaIV9T83BE3wP1xZ0mRPbNTm0KUjyd1QiVy7iKXuIcjlDtBQMiAQ=="
     },
     "node_modules/emittery": {
       "version": "0.10.2",
@@ -12546,9 +12561,9 @@
       }
     },
     "node_modules/framer-motion": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-7.3.4.tgz",
-      "integrity": "sha512-TE0qQtrJ0laUb6Gzt+RBbHy7MmS5TrUshhjwWTpZP/MIBQ8HWrgJ6GpNCu6GOYayNVcgbvAWO33tRVEAcw/52w==",
+      "version": "7.3.6",
+      "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-7.3.6.tgz",
+      "integrity": "sha512-en8mLpDv6IcieZo54acHg56HSLpOSryRLZtMOd1Sj1s7hBbUTWnJsv68CWaHI2ysPKcbH/olGfAhRh4yrJn5tw==",
       "dependencies": {
         "@motionone/dom": "10.13.1",
         "framesync": "6.1.2",
@@ -16338,9 +16353,9 @@
       }
     },
     "node_modules/is-callable": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.5.tgz",
-      "integrity": "sha512-ZIWRujF6MvYGkEuHMYtFRkL2wAtFw89EHfKlXrkPkjQZZRWeh9L1q3SV13NIfHnqxugjLvAOkEHx9mb1zcMnEw==",
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz",
+      "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==",
       "engines": {
         "node": ">= 0.4"
       },
@@ -19323,6 +19338,14 @@
         "graceful-fs": "^4.1.11"
       }
     },
+    "node_modules/kleur": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/klona": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz",
@@ -20407,9 +20430,9 @@
       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
     },
     "node_modules/msgpackr": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.6.2.tgz",
-      "integrity": "sha512-bqSQ0DYJbXbrJcrZFmMygUZmqQiDfI2ewFVWcrZY12w5XHWtPuW4WppDT/e63Uu311ajwkRRXSoF0uILroBeTA==",
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.6.3.tgz",
+      "integrity": "sha512-Wtwnt2W06wNOLzV3N0XLLAJCxpwlCfFpvSZAXsu+xf71X7KuqBEDhDSjAy9nwNhQ2aK74Rd1RiRln+62tffoXw==",
       "optionalDependencies": {
         "msgpackr-extract": "^2.0.2"
       }
@@ -22709,17 +22732,23 @@
       }
     },
     "node_modules/postcss-scss": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.4.tgz",
-      "integrity": "sha512-aBBbVyzA8b3hUL0MGrpydxxXKXFZc5Eqva0Q3V9qsBOLEMsjb6w49WfpsoWzpEgcqJGW4t7Rio8WXVU9Gd8vWg==",
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.5.tgz",
+      "integrity": "sha512-F7xpB6TrXyqUh3GKdyB4Gkp3QL3DDW1+uI+gxx/oJnUt/qXI4trj5OGlp9rOKdoABGULuqtqeG+3HEVQk4DjmA==",
       "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss-scss"
+        }
+      ],
       "engines": {
         "node": ">=12.0"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
-      },
       "peerDependencies": {
         "postcss": "^8.3.3"
       }
@@ -22961,14 +22990,6 @@
         "node": ">= 6"
       }
     },
-    "node_modules/prompts/node_modules/kleur": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
-      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/prop-types": {
       "version": "15.8.1",
       "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -23751,9 +23772,9 @@
       "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
     },
     "node_modules/regenerate-unicode-properties": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
-      "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+      "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
       "dependencies": {
         "regenerate": "^1.4.2"
       },
@@ -23807,14 +23828,14 @@
       }
     },
     "node_modules/regexpu-core": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
-      "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz",
+      "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==",
       "dependencies": {
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.0.1",
-        "regjsgen": "^0.6.0",
-        "regjsparser": "^0.8.2",
+        "regenerate-unicode-properties": "^10.1.0",
+        "regjsgen": "^0.7.1",
+        "regjsparser": "^0.9.1",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.0.0"
       },
@@ -23845,14 +23866,14 @@
       }
     },
     "node_modules/regjsgen": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
-      "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA=="
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
+      "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA=="
     },
     "node_modules/regjsparser": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
-      "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
       "dependencies": {
         "jsesc": "~0.5.0"
       },
@@ -26016,9 +26037,9 @@
       }
     },
     "node_modules/stylelint": {
-      "version": "14.11.0",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.11.0.tgz",
-      "integrity": "sha512-OTLjLPxpvGtojEfpESWM8Ir64Z01E89xsisaBMUP/ngOx1+4VG2DPRcUyCCiin9Rd3kPXPsh/uwHd9eqnvhsYA==",
+      "version": "14.12.0",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.12.0.tgz",
+      "integrity": "sha512-9Sa+IsT31PN9zf9q5ZVZNvhT6jMVu6YhpI38g3Akn7vONipGL0GNd9QCblwtJ3ysaoM80P/+9mOcFB1xnytiQQ==",
       "dev": true,
       "dependencies": {
         "@csstools/selector-specificity": "^2.0.2",
@@ -26027,7 +26048,7 @@
         "cosmiconfig": "^7.0.1",
         "css-functions-list": "^3.1.0",
         "debug": "^4.3.4",
-        "fast-glob": "^3.2.11",
+        "fast-glob": "^3.2.12",
         "fastest-levenshtein": "^1.0.16",
         "file-entry-cache": "^6.0.1",
         "global-modules": "^2.0.0",
@@ -26054,7 +26075,7 @@
         "string-width": "^4.2.3",
         "strip-ansi": "^6.0.1",
         "style-search": "^0.1.0",
-        "supports-hyperlinks": "^2.2.0",
+        "supports-hyperlinks": "^2.3.0",
         "svg-tags": "^1.0.0",
         "table": "^6.8.0",
         "v8-compile-cache": "^2.3.0",
@@ -26330,14 +26351,6 @@
         "node": ">=10.13.0"
       }
     },
-    "node_modules/svgo/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/svgo/node_modules/css-select": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
@@ -27190,9 +27203,9 @@
       }
     },
     "node_modules/unicode-property-aliases-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
       "engines": {
         "node": ">=4"
       }
@@ -28884,24 +28897,24 @@
       }
     },
     "@babel/compat-data": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz",
-      "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw=="
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.1.tgz",
+      "integrity": "sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg=="
     },
     "@babel/core": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz",
-      "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.1.tgz",
+      "integrity": "sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==",
       "requires": {
         "@ampproject/remapping": "^2.1.0",
         "@babel/code-frame": "^7.18.6",
         "@babel/generator": "^7.19.0",
-        "@babel/helper-compilation-targets": "^7.19.0",
+        "@babel/helper-compilation-targets": "^7.19.1",
         "@babel/helper-module-transforms": "^7.19.0",
         "@babel/helpers": "^7.19.0",
-        "@babel/parser": "^7.19.0",
+        "@babel/parser": "^7.19.1",
         "@babel/template": "^7.18.10",
-        "@babel/traverse": "^7.19.0",
+        "@babel/traverse": "^7.19.1",
         "@babel/types": "^7.19.0",
         "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
@@ -28911,11 +28924,11 @@
       }
     },
     "@babel/eslint-parser": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz",
-      "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz",
+      "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==",
       "requires": {
-        "eslint-scope": "^5.1.1",
+        "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
         "eslint-visitor-keys": "^2.1.0",
         "semver": "^6.3.0"
       },
@@ -28967,13 +28980,13 @@
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz",
-      "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz",
+      "integrity": "sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==",
       "requires": {
-        "@babel/compat-data": "^7.19.0",
+        "@babel/compat-data": "^7.19.1",
         "@babel/helper-validator-option": "^7.18.6",
-        "browserslist": "^4.20.2",
+        "browserslist": "^4.21.3",
         "semver": "^6.3.0"
       }
     },
@@ -29099,15 +29112,15 @@
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
-      "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz",
+      "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==",
       "requires": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-member-expression-to-functions": "^7.18.9",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/traverse": "^7.19.1",
+        "@babel/types": "^7.19.0"
       }
     },
     "@babel/helper-simple-access": {
@@ -29140,9 +29153,9 @@
       "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw=="
     },
     "@babel/helper-validator-identifier": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
-      "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+      "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
     },
     "@babel/helper-validator-option": {
       "version": "7.18.6",
@@ -29181,9 +29194,9 @@
       }
     },
     "@babel/parser": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
-      "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw=="
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz",
+      "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A=="
     },
     "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
       "version": "7.18.6",
@@ -29204,9 +29217,9 @@
       }
     },
     "@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz",
-      "integrity": "sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz",
+      "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==",
       "requires": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-plugin-utils": "^7.19.0",
@@ -29687,9 +29700,9 @@
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz",
-      "integrity": "sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz",
+      "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==",
       "requires": {
         "@babel/helper-create-regexp-features-plugin": "^7.19.0",
         "@babel/helper-plugin-utils": "^7.19.0"
@@ -29791,15 +29804,15 @@
       }
     },
     "@babel/plugin-transform-runtime": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz",
-      "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz",
+      "integrity": "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==",
       "requires": {
         "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.9",
-        "babel-plugin-polyfill-corejs2": "^0.3.2",
-        "babel-plugin-polyfill-corejs3": "^0.5.3",
-        "babel-plugin-polyfill-regenerator": "^0.4.0",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "babel-plugin-polyfill-corejs2": "^0.3.3",
+        "babel-plugin-polyfill-corejs3": "^0.6.0",
+        "babel-plugin-polyfill-regenerator": "^0.4.1",
         "semver": "^6.3.0"
       }
     },
@@ -29845,9 +29858,9 @@
       }
     },
     "@babel/plugin-transform-typescript": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.0.tgz",
-      "integrity": "sha512-DOOIywxPpkQHXijXv+s9MDAyZcLp12oYRl3CMWZ6u7TjSoCBq/KqHR/nNFR3+i2xqheZxoF0H2XyL7B6xeSRuA==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.1.tgz",
+      "integrity": "sha512-+ILcOU+6mWLlvCwnL920m2Ow3wWx3Wo8n2t5aROQmV55GZt+hOiLvBaa3DNzRjSEHa1aauRs4/YLmkCfFkhhRQ==",
       "requires": {
         "@babel/helper-create-class-features-plugin": "^7.19.0",
         "@babel/helper-plugin-utils": "^7.19.0",
@@ -29872,17 +29885,17 @@
       }
     },
     "@babel/preset-env": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.0.tgz",
-      "integrity": "sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.1.tgz",
+      "integrity": "sha512-c8B2c6D16Lp+Nt6HcD+nHl0VbPKVnNPTpszahuxJJnurfMtKeZ80A+qUv48Y7wqvS+dTFuLuaM9oYxyNHbCLWA==",
       "requires": {
-        "@babel/compat-data": "^7.19.0",
-        "@babel/helper-compilation-targets": "^7.19.0",
+        "@babel/compat-data": "^7.19.1",
+        "@babel/helper-compilation-targets": "^7.19.1",
         "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/helper-validator-option": "^7.18.6",
         "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
         "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
-        "@babel/plugin-proposal-async-generator-functions": "^7.19.0",
+        "@babel/plugin-proposal-async-generator-functions": "^7.19.1",
         "@babel/plugin-proposal-class-properties": "^7.18.6",
         "@babel/plugin-proposal-class-static-block": "^7.18.6",
         "@babel/plugin-proposal-dynamic-import": "^7.18.6",
@@ -29930,7 +29943,7 @@
         "@babel/plugin-transform-modules-commonjs": "^7.18.6",
         "@babel/plugin-transform-modules-systemjs": "^7.19.0",
         "@babel/plugin-transform-modules-umd": "^7.18.6",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.0",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
         "@babel/plugin-transform-new-target": "^7.18.6",
         "@babel/plugin-transform-object-super": "^7.18.6",
         "@babel/plugin-transform-parameters": "^7.18.8",
@@ -29946,10 +29959,10 @@
         "@babel/plugin-transform-unicode-regex": "^7.18.6",
         "@babel/preset-modules": "^0.1.5",
         "@babel/types": "^7.19.0",
-        "babel-plugin-polyfill-corejs2": "^0.3.2",
-        "babel-plugin-polyfill-corejs3": "^0.5.3",
-        "babel-plugin-polyfill-regenerator": "^0.4.0",
-        "core-js-compat": "^3.22.1",
+        "babel-plugin-polyfill-corejs2": "^0.3.3",
+        "babel-plugin-polyfill-corejs3": "^0.6.0",
+        "babel-plugin-polyfill-regenerator": "^0.4.1",
+        "core-js-compat": "^3.25.1",
         "semver": "^6.3.0"
       }
     },
@@ -29997,11 +30010,11 @@
       }
     },
     "@babel/runtime-corejs3": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.0.tgz",
-      "integrity": "sha512-JyXXoCu1N8GLuKc2ii8y5RGma5FMpFeO2nAQIe0Yzrbq+rQnN+sFj47auLblR5ka6aHNGPDgv8G/iI2Grb0ldQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.1.tgz",
+      "integrity": "sha512-j2vJGnkopRzH+ykJ8h68wrHnEUmtK//E723jjixiAl/PPf6FhqY/vYRcMVlNydRKQjQsTsYEjpx+DZMIvnGk/g==",
       "requires": {
-        "core-js-pure": "^3.20.2",
+        "core-js-pure": "^3.25.1",
         "regenerator-runtime": "^0.13.4"
       }
     },
@@ -30016,9 +30029,9 @@
       }
     },
     "@babel/traverse": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz",
-      "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz",
+      "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==",
       "requires": {
         "@babel/code-frame": "^7.18.6",
         "@babel/generator": "^7.19.0",
@@ -30026,7 +30039,7 @@
         "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-hoist-variables": "^7.18.6",
         "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/parser": "^7.19.0",
+        "@babel/parser": "^7.19.1",
         "@babel/types": "^7.19.0",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
@@ -30397,9 +30410,9 @@
       }
     },
     "@graphql-codegen/plugin-helpers": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-2.7.0.tgz",
-      "integrity": "sha512-+a2VP/4Ob0fwP8YLrQ/hhYlAA9UZUdDFNqwS543DmyiGFUkNIsa7TnTsE/mBDKJSMsCVWLw78949fCpzjyw/9Q==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-2.7.1.tgz",
+      "integrity": "sha512-wpEShhwbQp8pqXolnSCNaj0pU91LbuBvYHpYqm96TUqyeKQYAYRVmw3JIt0g8UQpKYhg8lYIDwWdcINOYqkGLg==",
       "requires": {
         "@graphql-tools/utils": "^8.8.0",
         "change-case-all": "1.0.14",
@@ -31412,14 +31425,14 @@
       "optional": true
     },
     "@mui/base": {
-      "version": "5.0.0-alpha.97",
-      "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.97.tgz",
-      "integrity": "sha512-gvo0hOg/tBzfJ3eDQOGAPBJJU+qTWd0e5zBEMFIkT1ekJqXx14JtIHvheOFU17y9iDciYE256Q8g+tj6a1dcBA==",
+      "version": "5.0.0-alpha.98",
+      "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.98.tgz",
+      "integrity": "sha512-c0U51+K2m57MASpRrmNs6qTXSvktDbVcSjD8zCRPbfuwYWERGGwNxwM3/jsBa4dSojTSmLPnOBFDypl74Ds6yQ==",
       "requires": {
-        "@babel/runtime": "^7.18.9",
+        "@babel/runtime": "^7.19.0",
         "@emotion/is-prop-valid": "^1.2.0",
         "@mui/types": "^7.2.0",
-        "@mui/utils": "^5.10.3",
+        "@mui/utils": "^5.10.6",
         "@popperjs/core": "^2.11.6",
         "clsx": "^1.2.1",
         "prop-types": "^15.8.1",
@@ -31427,29 +31440,29 @@
       }
     },
     "@mui/core-downloads-tracker": {
-      "version": "5.10.5",
-      "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.5.tgz",
-      "integrity": "sha512-sZYg85rQdlgDYU3V4WcT2Dl+k+y2wYqN04aUvVkFksRR0j81sj6KmfXx4842HJQcq5rjzcTvh4N+yv66XR/9fA=="
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.6.tgz",
+      "integrity": "sha512-dmyQBqrKmVU6yCSM4GGal5qNXpViXX+/V1t0GA1A5i9QF5Gx6noV/cw0hrSS2ffLT8L2oScq1oTdA6NVIiQ8lg=="
     },
     "@mui/icons-material": {
-      "version": "5.10.3",
-      "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.10.3.tgz",
-      "integrity": "sha512-o0kbUlsWCBtCE0wP33cGKbyryCh7kpm2EECYMPDmWrLhbA+HUODXIdhiTFS26szp2xXo9HY1lEx0ufeJ+tddYw==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.10.6.tgz",
+      "integrity": "sha512-QwxdRmLA46S94B0hExPDx0td+A2unF+33bQ6Cs+lNpJKVsm1YeHwNdYXYcnpWeHeQQ07055OXl7IB2GKDd0MfA==",
       "requires": {
-        "@babel/runtime": "^7.18.9"
+        "@babel/runtime": "^7.19.0"
       }
     },
     "@mui/material": {
-      "version": "5.10.5",
-      "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.5.tgz",
-      "integrity": "sha512-VFMadvfA6jqx5DCk2xoBl4bAGyzgmmubJIuB7fUWUZBwYIYL5Ea9SsoFpt5kawA6O2feuj69alDN2fhxPw1MeQ==",
-      "requires": {
-        "@babel/runtime": "^7.18.9",
-        "@mui/base": "5.0.0-alpha.97",
-        "@mui/core-downloads-tracker": "^5.10.5",
-        "@mui/system": "^5.10.5",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.6.tgz",
+      "integrity": "sha512-QilW5PAAGSQdN7Cpp4rwSQ1doJAt3ca1a2PHZtr8RLVlpHnXb+qQ8CeDo9+9V2fK5CDNdtTN1F+iJKO43aFBpQ==",
+      "requires": {
+        "@babel/runtime": "^7.19.0",
+        "@mui/base": "5.0.0-alpha.98",
+        "@mui/core-downloads-tracker": "^5.10.6",
+        "@mui/system": "^5.10.6",
         "@mui/types": "^7.2.0",
-        "@mui/utils": "^5.10.3",
+        "@mui/utils": "^5.10.6",
         "@types/react-transition-group": "^4.4.5",
         "clsx": "^1.2.1",
         "csstype": "^3.1.0",
@@ -31459,36 +31472,36 @@
       }
     },
     "@mui/private-theming": {
-      "version": "5.10.3",
-      "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.3.tgz",
-      "integrity": "sha512-LCYIKlkGz2BTSng2BFzzwSJBRZbChIUri2x2Nh8ryk2B1Ho7zpvE7ex6y39LlStG2Frf92NFC/V4YQbmMAjD5A==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.6.tgz",
+      "integrity": "sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==",
       "requires": {
-        "@babel/runtime": "^7.18.9",
-        "@mui/utils": "^5.10.3",
+        "@babel/runtime": "^7.19.0",
+        "@mui/utils": "^5.10.6",
         "prop-types": "^15.8.1"
       }
     },
     "@mui/styled-engine": {
-      "version": "5.10.5",
-      "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.5.tgz",
-      "integrity": "sha512-6U6tTdf+H1OsjgcFoY12gYPR+qqZ1WHGGIahK5V7JhMkMUgH7ozyiNi8s1LzmwrUlAz1hAAhuO5nBYXku3wWvw==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.6.tgz",
+      "integrity": "sha512-OnVw5xnO4l0XzlJFhKif/RlLenBNhyEQQlSTwB9ApSWB05UAU5ZSbjNsRfyEKvgmQ/fPa+MqPD/dzxbIRCwyeg==",
       "requires": {
-        "@babel/runtime": "^7.18.9",
+        "@babel/runtime": "^7.19.0",
         "@emotion/cache": "^11.10.3",
         "csstype": "^3.1.0",
         "prop-types": "^15.8.1"
       }
     },
     "@mui/system": {
-      "version": "5.10.5",
-      "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.5.tgz",
-      "integrity": "sha512-GUPiDVZTKp9yH3FVeLSIw3Bqsyl7qLxtAK1ZiZmC8e+zdH7bcnZZXvWK3vPIbx35ZyhQpvAOWQFpiF9TjdA77w==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.6.tgz",
+      "integrity": "sha512-HfQVX7e2xpQ3jtdB/WwtkFVtozMOozyN575/63u8ILHkE8wGDhblmCieAsnyJPFbm7WBW5PCMyzmfr4QyKLaYg==",
       "requires": {
-        "@babel/runtime": "^7.18.9",
-        "@mui/private-theming": "^5.10.3",
-        "@mui/styled-engine": "^5.10.5",
+        "@babel/runtime": "^7.19.0",
+        "@mui/private-theming": "^5.10.6",
+        "@mui/styled-engine": "^5.10.6",
         "@mui/types": "^7.2.0",
-        "@mui/utils": "^5.10.3",
+        "@mui/utils": "^5.10.6",
         "clsx": "^1.2.1",
         "csstype": "^3.1.0",
         "prop-types": "^15.8.1"
@@ -31501,17 +31514,25 @@
       "requires": {}
     },
     "@mui/utils": {
-      "version": "5.10.3",
-      "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.3.tgz",
-      "integrity": "sha512-4jXMDPfx6bpMVuheLaOpKTjpzw39ogAZLeaLj5+RJec3E37/hAZMYjURfblLfTWMMoGoqkY03mNsZaEwNobBow==",
+      "version": "5.10.6",
+      "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.6.tgz",
+      "integrity": "sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==",
       "requires": {
-        "@babel/runtime": "^7.18.9",
+        "@babel/runtime": "^7.19.0",
         "@types/prop-types": "^15.7.5",
         "@types/react-is": "^16.7.1 || ^17.0.0",
         "prop-types": "^15.8.1",
         "react-is": "^18.2.0"
       }
     },
+    "@nicolo-ribaudo/eslint-scope-5-internals": {
+      "version": "5.1.1-v1",
+      "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
+      "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
+      "requires": {
+        "eslint-scope": "5.1.1"
+      }
+    },
     "@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -32005,9 +32026,9 @@
       }
     },
     "@parcel/source-map": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.0.tgz",
-      "integrity": "sha512-E7UOEIof2o89LrKk1agSLmwakjigmEdDp1ZaEdsLVEvq63R/bul4Ij5CT+0ZDcijGpl5tnTbQADY9EyYGtjYgQ==",
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz",
+      "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==",
       "requires": {
         "detect-libc": "^1.0.3"
       }
@@ -32356,9 +32377,9 @@
       "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
     },
     "@sinclair/typebox": {
-      "version": "0.24.41",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.41.tgz",
-      "integrity": "sha512-TJCgQurls4FipFvHeC+gfAzb+GGstL0TDwYJKQVtTeSvJIznWzP7g3bAd5gEBlr8+bIxqnWS9VGVWREDhmE8jA==",
+      "version": "0.24.42",
+      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.42.tgz",
+      "integrity": "sha512-d+2AtrHGyWek2u2ITF0lHRIv6Tt7X0dEHW+0rP+5aDCEjC3fiN2RBjrLD0yU0at52BcZbRGxLbAtXiR0hFCjYw==",
       "dev": true
     },
     "@sindresorhus/is": {
@@ -32561,9 +32582,9 @@
       }
     },
     "@testing-library/dom": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.17.1.tgz",
-      "integrity": "sha512-KnH2MnJUzmFNPW6RIKfd+zf2Wue8mEKX0M3cpX6aKl5ZXrJM1/c/Pc8c2xDNYQCnJO48Sm5ITbMXgqTr3h4jxQ==",
+      "version": "8.18.1",
+      "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.18.1.tgz",
+      "integrity": "sha512-oEvsm2B/WtcHKE+IcEeeCqNU/ltFGaVyGbpcm4g/2ytuT49jrlH9x5qRKL/H3A6yfM4YAbSbC0ceT5+9CEXnLg==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.10.4",
@@ -32953,9 +32974,9 @@
       }
     },
     "@types/jest": {
-      "version": "29.0.2",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.0.2.tgz",
-      "integrity": "sha512-TaklkwSEtvwJpleiKBHgEBySIQlcZ08gYP/s5wdtdLnjz9uxjnDd7U+Y0JWACebkqBc+jtbol2PEtEW0wQV2zQ==",
+      "version": "29.0.3",
+      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.0.3.tgz",
+      "integrity": "sha512-F6ukyCTwbfsEX5F2YmVYmM5TcTHy1q9P5rWlRbrk56KyMh3v9xRGUO3aa8+SkvMi0SHXtASJv1283enXimC0Og==",
       "dev": true,
       "requires": {
         "expect": "^29.0.0",
@@ -33293,16 +33314,15 @@
       "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="
     },
     "@typescript-eslint/eslint-plugin": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz",
-      "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.0.tgz",
+      "integrity": "sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/scope-manager": "5.37.0",
-        "@typescript-eslint/type-utils": "5.37.0",
-        "@typescript-eslint/utils": "5.37.0",
+        "@typescript-eslint/scope-manager": "5.38.0",
+        "@typescript-eslint/type-utils": "5.38.0",
+        "@typescript-eslint/utils": "5.38.0",
         "debug": "^4.3.4",
-        "functional-red-black-tree": "^1.0.1",
         "ignore": "^5.2.0",
         "regexpp": "^3.2.0",
         "semver": "^7.3.7",
@@ -33414,53 +33434,53 @@
       }
     },
     "@typescript-eslint/parser": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz",
-      "integrity": "sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.0.tgz",
+      "integrity": "sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/scope-manager": "5.37.0",
-        "@typescript-eslint/types": "5.37.0",
-        "@typescript-eslint/typescript-estree": "5.37.0",
+        "@typescript-eslint/scope-manager": "5.38.0",
+        "@typescript-eslint/types": "5.38.0",
+        "@typescript-eslint/typescript-estree": "5.38.0",
         "debug": "^4.3.4"
       }
     },
     "@typescript-eslint/scope-manager": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz",
-      "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz",
+      "integrity": "sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.37.0",
-        "@typescript-eslint/visitor-keys": "5.37.0"
+        "@typescript-eslint/types": "5.38.0",
+        "@typescript-eslint/visitor-keys": "5.38.0"
       }
     },
     "@typescript-eslint/type-utils": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz",
-      "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.0.tgz",
+      "integrity": "sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/typescript-estree": "5.37.0",
-        "@typescript-eslint/utils": "5.37.0",
+        "@typescript-eslint/typescript-estree": "5.38.0",
+        "@typescript-eslint/utils": "5.38.0",
         "debug": "^4.3.4",
         "tsutils": "^3.21.0"
       }
     },
     "@typescript-eslint/types": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz",
-      "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.0.tgz",
+      "integrity": "sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA==",
       "dev": true
     },
     "@typescript-eslint/typescript-estree": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz",
-      "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.0.tgz",
+      "integrity": "sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.37.0",
-        "@typescript-eslint/visitor-keys": "5.37.0",
+        "@typescript-eslint/types": "5.38.0",
+        "@typescript-eslint/visitor-keys": "5.38.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -33495,26 +33515,26 @@
       }
     },
     "@typescript-eslint/utils": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz",
-      "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.0.tgz",
+      "integrity": "sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==",
       "dev": true,
       "requires": {
         "@types/json-schema": "^7.0.9",
-        "@typescript-eslint/scope-manager": "5.37.0",
-        "@typescript-eslint/types": "5.37.0",
-        "@typescript-eslint/typescript-estree": "5.37.0",
+        "@typescript-eslint/scope-manager": "5.38.0",
+        "@typescript-eslint/types": "5.38.0",
+        "@typescript-eslint/typescript-estree": "5.38.0",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^3.0.0"
       }
     },
     "@typescript-eslint/visitor-keys": {
-      "version": "5.37.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz",
-      "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==",
+      "version": "5.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.0.tgz",
+      "integrity": "sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.37.0",
+        "@typescript-eslint/types": "5.38.0",
         "eslint-visitor-keys": "^3.3.0"
       }
     },
@@ -33971,9 +33991,9 @@
       "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ=="
     },
     "autoprefixer": {
-      "version": "10.4.10",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.10.tgz",
-      "integrity": "sha512-nMaiDARyp1e74c8IeAXkr+BmFKa8By4Zak7tyaNPF09Iu39WFpNXOWrVirmXjKr+5cOyERwvtbMOLYz6iBJYgQ==",
+      "version": "10.4.11",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.11.tgz",
+      "integrity": "sha512-5lHp6DgRodxlBLSkzHOTcufWFflH1ewfy2hvFQyjrblBFlP/0Yh4O/Wrg4ow8WRlN3AAUFFLAQwX8hTptzqVHg==",
       "requires": {
         "browserslist": "^4.21.3",
         "caniuse-lite": "^1.0.30001399",
@@ -34203,12 +34223,12 @@
       }
     },
     "babel-plugin-polyfill-corejs3": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz",
-      "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==",
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz",
+      "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==",
       "requires": {
-        "@babel/helper-define-polyfill-provider": "^0.3.2",
-        "core-js-compat": "^3.21.0"
+        "@babel/helper-define-polyfill-provider": "^0.3.3",
+        "core-js-compat": "^3.25.1"
       }
     },
     "babel-plugin-polyfill-regenerator": {
@@ -34542,14 +34562,14 @@
       "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
     },
     "browserslist": {
-      "version": "4.21.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
-      "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+      "version": "4.21.4",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+      "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
       "requires": {
-        "caniuse-lite": "^1.0.30001370",
-        "electron-to-chromium": "^1.4.202",
+        "caniuse-lite": "^1.0.30001400",
+        "electron-to-chromium": "^1.4.251",
         "node-releases": "^2.0.6",
-        "update-browserslist-db": "^1.0.5"
+        "update-browserslist-db": "^1.0.9"
       }
     },
     "bser": {
@@ -34708,9 +34728,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001399",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001399.tgz",
-      "integrity": "sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA=="
+      "version": "1.0.30001407",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001407.tgz",
+      "integrity": "sha512-4ydV+t4P7X3zH83fQWNDX/mQEzYomossfpViCOx9zHBSMV+rIe3LFqglHHtVyvNl1FhTNxPxs3jei82iqOW04w=="
     },
     "capital-case": {
       "version": "1.0.4",
@@ -35136,6 +35156,11 @@
       "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
       "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="
     },
+    "commander": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
+    },
     "common-path-prefix": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
@@ -35311,22 +35336,22 @@
       }
     },
     "core-js": {
-      "version": "3.25.1",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.1.tgz",
-      "integrity": "sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ=="
+      "version": "3.25.2",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.2.tgz",
+      "integrity": "sha512-YB4IAT1bjEfxTJ1XYy11hJAKskO+qmhuDBM8/guIfMz4JvdsAQAqvyb97zXX7JgSrfPLG5mRGFWJwJD39ruq2A=="
     },
     "core-js-compat": {
-      "version": "3.25.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.1.tgz",
-      "integrity": "sha512-pOHS7O0i8Qt4zlPW/eIFjwp+NrTPx+wTL0ctgI2fHn31sZOq89rDsmtc/A2vAX7r6shl+bmVI+678He46jgBlw==",
+      "version": "3.25.2",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.2.tgz",
+      "integrity": "sha512-TxfyECD4smdn3/CjWxczVtJqVLEEC2up7/82t7vC0AzNogr+4nQ8vyF7abxAuTXWvjTClSbvGhU0RgqA4ToQaQ==",
       "requires": {
-        "browserslist": "^4.21.3"
+        "browserslist": "^4.21.4"
       }
     },
     "core-js-pure": {
-      "version": "3.25.1",
-      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.1.tgz",
-      "integrity": "sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A=="
+      "version": "3.25.2",
+      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.2.tgz",
+      "integrity": "sha512-ItD7YpW1cUB4jaqFLZXe1AXkyqIxz6GqPnsDV4uF4hVcWh/WAGIqSqw5p0/WdsILM0Xht9s3Koyw05R3K6RtiA=="
     },
     "core-util-is": {
       "version": "1.0.3",
@@ -35733,9 +35758,9 @@
       }
     },
     "decimal.js": {
-      "version": "10.4.0",
-      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz",
-      "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg=="
+      "version": "10.4.1",
+      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.1.tgz",
+      "integrity": "sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw=="
     },
     "decode-uri-component": {
       "version": "0.2.0",
@@ -36096,9 +36121,9 @@
       "integrity": "sha512-5YM9LFQgVYfuLNEoqMqVWIBuF2UNCA+xu/jz1TyryLN/wmBcQSb+GNAwvLKvEpGESwgGN8XA1nbLAt6rKlyHYQ=="
     },
     "electron-to-chromium": {
-      "version": "1.4.249",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.249.tgz",
-      "integrity": "sha512-GMCxR3p2HQvIw47A599crTKYZprqihoBL4lDSAUmr7IYekXFK5t/WgEBrGJDCa2HWIZFQEkGuMqPCi05ceYqPQ=="
+      "version": "1.4.255",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.255.tgz",
+      "integrity": "sha512-H+mFNKow6gi2P5Gi2d1Fvd3TUEJlB9CF7zYaIV9T83BE3wP1xZ0mRPbNTm0KUjyd1QiVy7iKXuIcjlDtBQMiAQ=="
     },
     "emittery": {
       "version": "0.10.2",
@@ -37679,9 +37704,9 @@
       "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA=="
     },
     "framer-motion": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-7.3.4.tgz",
-      "integrity": "sha512-TE0qQtrJ0laUb6Gzt+RBbHy7MmS5TrUshhjwWTpZP/MIBQ8HWrgJ6GpNCu6GOYayNVcgbvAWO33tRVEAcw/52w==",
+      "version": "7.3.6",
+      "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-7.3.6.tgz",
+      "integrity": "sha512-en8mLpDv6IcieZo54acHg56HSLpOSryRLZtMOd1Sj1s7hBbUTWnJsv68CWaHI2ysPKcbH/olGfAhRh4yrJn5tw==",
       "requires": {
         "@emotion/is-prop-valid": "^0.8.2",
         "@motionone/dom": "10.13.1",
@@ -40470,9 +40495,9 @@
       "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
     },
     "is-callable": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.5.tgz",
-      "integrity": "sha512-ZIWRujF6MvYGkEuHMYtFRkL2wAtFw89EHfKlXrkPkjQZZRWeh9L1q3SV13NIfHnqxugjLvAOkEHx9mb1zcMnEw=="
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz",
+      "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q=="
     },
     "is-ci": {
       "version": "2.0.0",
@@ -42681,6 +42706,11 @@
         "graceful-fs": "^4.1.11"
       }
     },
+    "kleur": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
+    },
     "klona": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz",
@@ -43534,9 +43564,9 @@
       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
     },
     "msgpackr": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.6.2.tgz",
-      "integrity": "sha512-bqSQ0DYJbXbrJcrZFmMygUZmqQiDfI2ewFVWcrZY12w5XHWtPuW4WppDT/e63Uu311ajwkRRXSoF0uILroBeTA==",
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.6.3.tgz",
+      "integrity": "sha512-Wtwnt2W06wNOLzV3N0XLLAJCxpwlCfFpvSZAXsu+xf71X7KuqBEDhDSjAy9nwNhQ2aK74Rd1RiRln+62tffoXw==",
       "requires": {
         "msgpackr-extract": "^2.0.2"
       }
@@ -45183,9 +45213,9 @@
       "requires": {}
     },
     "postcss-scss": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.4.tgz",
-      "integrity": "sha512-aBBbVyzA8b3hUL0MGrpydxxXKXFZc5Eqva0Q3V9qsBOLEMsjb6w49WfpsoWzpEgcqJGW4t7Rio8WXVU9Gd8vWg==",
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.5.tgz",
+      "integrity": "sha512-F7xpB6TrXyqUh3GKdyB4Gkp3QL3DDW1+uI+gxx/oJnUt/qXI4trj5OGlp9rOKdoABGULuqtqeG+3HEVQk4DjmA==",
       "dev": true,
       "requires": {}
     },
@@ -45360,13 +45390,6 @@
       "requires": {
         "kleur": "^3.0.3",
         "sisteransi": "^1.0.5"
-      },
-      "dependencies": {
-        "kleur": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
-          "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
-        }
       }
     },
     "prop-types": {
@@ -45960,9 +45983,9 @@
       "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
     },
     "regenerate-unicode-properties": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
-      "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+      "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
       "requires": {
         "regenerate": "^1.4.2"
       }
@@ -46001,14 +46024,14 @@
       "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="
     },
     "regexpu-core": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
-      "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz",
+      "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==",
       "requires": {
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.0.1",
-        "regjsgen": "^0.6.0",
-        "regjsparser": "^0.8.2",
+        "regenerate-unicode-properties": "^10.1.0",
+        "regjsgen": "^0.7.1",
+        "regjsparser": "^0.9.1",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.0.0"
       }
@@ -46030,14 +46053,14 @@
       }
     },
     "regjsgen": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
-      "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA=="
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
+      "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA=="
     },
     "regjsparser": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
-      "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
       "requires": {
         "jsesc": "~0.5.0"
       },
@@ -47746,9 +47769,9 @@
       }
     },
     "stylelint": {
-      "version": "14.11.0",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.11.0.tgz",
-      "integrity": "sha512-OTLjLPxpvGtojEfpESWM8Ir64Z01E89xsisaBMUP/ngOx1+4VG2DPRcUyCCiin9Rd3kPXPsh/uwHd9eqnvhsYA==",
+      "version": "14.12.0",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.12.0.tgz",
+      "integrity": "sha512-9Sa+IsT31PN9zf9q5ZVZNvhT6jMVu6YhpI38g3Akn7vONipGL0GNd9QCblwtJ3ysaoM80P/+9mOcFB1xnytiQQ==",
       "dev": true,
       "requires": {
         "@csstools/selector-specificity": "^2.0.2",
@@ -47757,7 +47780,7 @@
         "cosmiconfig": "^7.0.1",
         "css-functions-list": "^3.1.0",
         "debug": "^4.3.4",
-        "fast-glob": "^3.2.11",
+        "fast-glob": "^3.2.12",
         "fastest-levenshtein": "^1.0.16",
         "file-entry-cache": "^6.0.1",
         "global-modules": "^2.0.0",
@@ -47784,7 +47807,7 @@
         "string-width": "^4.2.3",
         "strip-ansi": "^6.0.1",
         "style-search": "^0.1.0",
-        "supports-hyperlinks": "^2.2.0",
+        "supports-hyperlinks": "^2.3.0",
         "svg-tags": "^1.0.0",
         "table": "^6.8.0",
         "v8-compile-cache": "^2.3.0",
@@ -47990,11 +48013,6 @@
         "stable": "^0.1.8"
       },
       "dependencies": {
-        "commander": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-          "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
-        },
         "css-select": {
           "version": "4.3.0",
           "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
@@ -48626,9 +48644,9 @@
       "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw=="
     },
     "unicode-property-aliases-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ=="
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w=="
     },
     "unified": {
       "version": "9.2.0",
diff --git a/src/components/Header/index.tsx b/src/components/Header/index.tsx
index c18bc4c9..b861c58f 100644
--- a/src/components/Header/index.tsx
+++ b/src/components/Header/index.tsx
@@ -38,7 +38,11 @@ const Header = (): JSX.Element => {
             </Link>
           </li>
           <li>
-            <Link to="/api/" activeClassName={styles.active} partiallyActive>
+            <Link
+              to="/api/latest/"
+              activeClassName={styles.active}
+              partiallyActive
+            >
               <FormattedMessage id="components.header.links.docs" />
             </Link>
           </li>
diff --git a/src/data/learn.yaml b/src/data/learn.yaml
index 0cbe3433..6e52a6f2 100644
--- a/src/data/learn.yaml
+++ b/src/data/learn.yaml
@@ -6,80 +6,80 @@
 # Note.: If your Markdown file is inside a subfolder, call it `index.md` and write here the name of the folder
 - section: 'Getting Started'
   items:
-    - node-introduction
-    - node-history
-    - node-installation
-    - node-javascript-language
-    - node-difference-browser
-    - node-difference-dev-prod
-    - node-es6
+    - getting-started/node-introduction
+    - getting-started/node-history
+    - getting-started/node-installation
+    - getting-started/node-javascript-language
+    - getting-started/node-difference-browser
+    - getting-started/node-difference-dev-prod
+    - getting-started/node-es6
 - section: 'Basics & Built-ins'
   items:
-    - node-export-module
-    - node-exceptions
-    - node-inspect-object
+    - basics-and-builtins/node-export-module
+    - basics-and-builtins/node-exceptions
+    - basics-and-builtins/node-inspect-object
 - section: 'Node.js Package Manager'
   items:
-    - npm
-    - where-npm-install-packages
-    - how-to-use-npm-package
-    - package-json
-    - package-lock-json
-    - npm-know-version-installed
-    - npm-install-previous-package-version
-    - update-npm-dependencies
-    - npm-semantic-versioning
-    - npm-uninstall-packages
-    - npm-packages-local-global
-    - npm-dependencies-devdependencies
-    - npx
+    - node-js-package-manager/npm
+    - node-js-package-manager/where-npm-install-packages
+    - node-js-package-manager/how-to-use-npm-package
+    - node-js-package-manager/package-json
+    - node-js-package-manager/package-lock-json
+    - node-js-package-manager/npm-know-version-installed
+    - node-js-package-manager/npm-install-previous-package-version
+    - node-js-package-manager/update-npm-dependencies
+    - node-js-package-manager/npm-semantic-versioning
+    - node-js-package-manager/npm-uninstall-packages
+    - node-js-package-manager/npm-packages-local-global
+    - node-js-package-manager/npm-dependencies-devdependencies
+    - node-js-package-manager/npx
 - section: 'Asynchronous Work'
   items:
-    - node-control-flow
-    - node-event-loop
-    - node-process-nexttick
-    - node-setimmediate
-    - node-event-emitter
-    - blocking-vs-non-blocking
+    - asynchronous-work/node-control-flow
+    - asynchronous-work/node-event-loop
+    - asynchronous-work/node-process-nexttick
+    - asynchronous-work/node-setimmediate
+    - asynchronous-work/node-event-emitter
+    - asynchronous-work/blocking-vs-non-blocking
 - section: 'Manipulating Files'
   items:
-    - node-file-descriptors
-    - node-file-stats
-    - node-file-paths
-    - node-reading-files
-    - node-writing-files
-    - node-folders
+    - manipulating-files/node-file-descriptors
+    - manipulating-files/node-file-stats
+    - manipulating-files/node-file-paths
+    - manipulating-files/node-reading-files
+    - manipulating-files/node-writing-files
+    - manipulating-files/node-folders
 - section: 'Command Line'
   items:
-    - node-run-cli
-    - node-terminate-program
-    - node-environment-variables
-    - node-repl
-    - node-cli-args
-    - node-output-to-cli
-    - node-input-from-cli
+    - command-line/node-run-cli
+    - command-line/node-terminate-program
+    - command-line/node-environment-variables
+    - command-line/node-repl
+    - command-line/node-cli-args
+    - command-line/node-output-to-cli
+    - command-line/node-input-from-cli
 - section: 'Node.js Web Server'
   items:
-    - node-http-server
-    - node-make-http-requests
-    - node-request-data
+    - node-js-web-server/node-http-server
+    - node-js-web-server/node-make-http-requests
+    - node-js-web-server/node-request-data
 - section: 'JavaScript built-ins'
   items:
-    - javascript-timers
-    - javascript-callbacks
-    - javascript-promises
-    - javascript-async-await
+    - javascript-builtins/javascript-timers
+    - javascript-builtins/javascript-callbacks
+    - javascript-builtins/javascript-promises
+    - javascript-builtins/javascript-async-await
 - section: 'Node.js Modules'
   items:
-    - node-module-fs
-    - node-module-path
-    - node-module-os
-    - node-module-events
-    - node-module-http
-    - node-buffers
-    - nodejs-streams
+    - node-js-modules/node-module-fs
+    - node-js-modules/node-module-path
+    - node-js-modules/node-module-os
+    - node-js-modules/node-module-events
+    - node-js-modules/node-module-http
+    - node-js-modules/node-buffers
+    - node-js-modules/nodejs-streams
 - section: 'Node.js & World'
   items:
-    - node-with-typescript
-    - node-with-web-assembly
-    - v8-engine
+    - node-js-and-world/node-with-typescript
+    - node-js-and-world/node-with-web-assembly
+    - node-js-and-world/v8-engine
diff --git a/src/hooks/useFeatureToggles.ts b/src/hooks/useFeatureToggles.ts
index 78c0e5fe..9f2a0744 100644
--- a/src/hooks/useFeatureToggles.ts
+++ b/src/hooks/useFeatureToggles.ts
@@ -1,8 +1,11 @@
-import { useContext } from 'react';
+import { useContext, useEffect, useState } from 'react';
 import { FeatureToggleContext } from '../containers/FeatureToggles';
 
 export const useFeatureToggles = () => {
-  const featureFlags = useContext(FeatureToggleContext);
+  const featureFlagContext = useContext(FeatureToggleContext);
+  const [featureFlags, setFeatureFlags] = useState<string[]>([]);
+
+  useEffect(() => setFeatureFlags(featureFlagContext), []);
 
   return {
     has: (feature: string) => featureFlags.includes(feature),
diff --git a/src/templates/learn.tsx b/src/templates/learn.tsx
index 60c50f18..99a66f7f 100644
--- a/src/templates/learn.tsx
+++ b/src/templates/learn.tsx
@@ -15,7 +15,7 @@ interface Props {
 const LearnLayout = ({
   data: {
     article: {
-      frontmatter: { title, description },
+      frontmatter: { displayTitle, description },
       body,
       tableOfContents,
       fields: { authors },
@@ -23,7 +23,7 @@ const LearnLayout = ({
   },
   pageContext: { slug, next, previous, relativePath, navigationData },
 }: Props): JSX.Element => (
-  <Layout title={title} description={description}>
+  <Layout title={displayTitle} description={description}>
     <main className="grid-container">
       <Navigation
         currentSlug={slug}
@@ -32,7 +32,7 @@ const LearnLayout = ({
         category="learn"
       />
       <Article
-        title={title}
+        title={displayTitle}
         body={body}
         tableOfContents={tableOfContents ? tableOfContents.items : []}
         next={next}
@@ -58,7 +58,7 @@ export const query = graphql`
       body
       tableOfContents
       frontmatter {
-        title
+        displayTitle
         description
       }
       fields {
@@ -76,7 +76,7 @@ export const query = graphql`
       body
       tableOfContents
       frontmatter {
-        title
+        displayTitle
         description
       }
       fields {
diff --git a/src/types/pages/learn.ts b/src/types/pages/learn.ts
index c135c444..55f58cab 100644
--- a/src/types/pages/learn.ts
+++ b/src/types/pages/learn.ts
@@ -14,7 +14,7 @@ export interface LearnTemplateData {
     id: string;
     body: string;
     tableOfContents: PageTableOfContents;
-    frontmatter: { title: string; description: string };
+    frontmatter: { displayTitle: string; description: string };
     fields: { authors: string[] };
   };
 }


Test patch:
diff --git a/src/components/Header/__tests__/__snapshots__/index.test.tsx.snap b/src/components/Header/__tests__/__snapshots__/index.test.tsx.snap
index e80fd408..bd40e05d 100644
--- a/src/components/Header/__tests__/__snapshots__/index.test.tsx.snap
+++ b/src/components/Header/__tests__/__snapshots__/index.test.tsx.snap
@@ -47,7 +47,7 @@ exports[`Tests for Header component Theme color switcher skips rendering in case
         </li>
         <li>
           <a
-            href="/api/"
+            href="/api/latest/"
           >
             API Docs
           </a>
@@ -83,7 +83,7 @@ exports[`Tests for Header component Theme color switcher skips rendering in case
             </span>
             <div
               class="searchBarContainer"
-              style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+              style="min-height: 0; width: 100%; max-width: 100px; box-shadow: none;"
             >
               <div
                 class="searchInputContainer"
@@ -236,7 +236,7 @@ exports[`Tests for Header component renders correctly 1`] = `
         </li>
         <li>
           <a
-            href="/api/"
+            href="/api/latest/"
           >
             API Docs
           </a>
@@ -272,7 +272,7 @@ exports[`Tests for Header component renders correctly 1`] = `
             </span>
             <div
               class="searchBarContainer"
-              style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+              style="min-height: 0; width: 100%; max-width: 100px; box-shadow: none;"
             >
               <div
                 class="searchInputContainer"
@@ -425,7 +425,7 @@ exports[`Tests for Header component renders shorter menu items for mobile 1`] =
         </li>
         <li>
           <a
-            href="/api/"
+            href="/api/latest/"
           >
             API Docs
           </a>
@@ -461,7 +461,7 @@ exports[`Tests for Header component renders shorter menu items for mobile 1`] =
             </span>
             <div
               class="searchBarContainer"
-              style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+              style="min-height: 0; width: 100%; max-width: 100px; box-shadow: none;"
             >
               <div
                 class="searchInputContainer"
diff --git a/src/components/Layout/__tests__/__snapshots__/index.test.tsx.snap b/src/components/Layout/__tests__/__snapshots__/index.test.tsx.snap
index bf942e8b..37d57c8a 100644
--- a/src/components/Layout/__tests__/__snapshots__/index.test.tsx.snap
+++ b/src/components/Layout/__tests__/__snapshots__/index.test.tsx.snap
@@ -50,7 +50,7 @@ exports[`Layout component renders correctly with data 1`] = `
           </li>
           <li>
             <a
-              href="/api/"
+              href="/api/latest/"
             >
               API Docs
             </a>
@@ -86,7 +86,7 @@ exports[`Layout component renders correctly with data 1`] = `
               </span>
               <div
                 class="searchBarContainer"
-                style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+                style="min-height: 0; width: 100%; max-width: 100px; box-shadow: none;"
               >
                 <div
                   class="searchInputContainer"
diff --git a/src/components/Layout/__tests__/__snapshots__/page.test.tsx.snap b/src/components/Layout/__tests__/__snapshots__/page.test.tsx.snap
index 9594a618..2516bf9d 100644
--- a/src/components/Layout/__tests__/__snapshots__/page.test.tsx.snap
+++ b/src/components/Layout/__tests__/__snapshots__/page.test.tsx.snap
@@ -50,7 +50,7 @@ exports[`PageLayout component renders correctly with data 1`] = `
           </li>
           <li>
             <a
-              href="/api/"
+              href="/api/latest/"
             >
               API Docs
             </a>
@@ -86,7 +86,7 @@ exports[`PageLayout component renders correctly with data 1`] = `
               </span>
               <div
                 class="searchBarContainer"
-                style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+                style="min-height: 0; width: 100%; max-width: 100px; box-shadow: none;"
               >
                 <div
                   class="searchInputContainer"
diff --git a/src/pages/about/__tests__/__snapshots__/resources.test.tsx.snap b/src/pages/about/__tests__/__snapshots__/resources.test.tsx.snap
index 992c0bbd..e42db33d 100644
--- a/src/pages/about/__tests__/__snapshots__/resources.test.tsx.snap
+++ b/src/pages/about/__tests__/__snapshots__/resources.test.tsx.snap
@@ -50,7 +50,7 @@ exports[`Resources page renders correctly 1`] = `
           </li>
           <li>
             <a
-              href="/api/"
+              href="/api/latest/"
             >
               API Docs
             </a>
@@ -86,7 +86,7 @@ exports[`Resources page renders correctly 1`] = `
               </span>
               <div
                 class="searchBarContainer"
-                style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+                style="min-height: 0; width: 100%; max-width: 100px; box-shadow: none;"
               >
                 <div
                   class="searchInputContainer"
diff --git a/src/pages/download/__tests__/__snapshots__/index.test.tsx.snap b/src/pages/download/__tests__/__snapshots__/index.test.tsx.snap
index 35efdaf8..606a1dce 100644
--- a/src/pages/download/__tests__/__snapshots__/index.test.tsx.snap
+++ b/src/pages/download/__tests__/__snapshots__/index.test.tsx.snap
@@ -50,7 +50,7 @@ exports[`Download page renders correctly 1`] = `
           </li>
           <li>
             <a
-              href="/api/"
+              href="/api/latest/"
             >
               API Docs
             </a>
@@ -86,7 +86,7 @@ exports[`Download page renders correctly 1`] = `
               </span>
               <div
                 class="searchBarContainer"
-                style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+                style="min-height: 0; width: 100%; max-width: 100px; box-shadow: none;"
               >
                 <div
                   class="searchInputContainer"
@@ -993,7 +993,7 @@ exports[`Download page should handle LTS to Current switch 1`] = `
           </li>
           <li>
             <a
-              href="/api/"
+              href="/api/latest/"
             >
               API Docs
             </a>
@@ -1029,7 +1029,7 @@ exports[`Download page should handle LTS to Current switch 1`] = `
               </span>
               <div
                 class="searchBarContainer"
-                style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+                style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none; min-height: 0em;"
               >
                 <div
                   class="searchInputContainer"
diff --git a/src/pages/download/__tests__/__snapshots__/package-manager.test.tsx.snap b/src/pages/download/__tests__/__snapshots__/package-manager.test.tsx.snap
index 2569ad89..1f5342c6 100644
--- a/src/pages/download/__tests__/__snapshots__/package-manager.test.tsx.snap
+++ b/src/pages/download/__tests__/__snapshots__/package-manager.test.tsx.snap
@@ -50,7 +50,7 @@ exports[`Package Manager Page renders correctly 1`] = `
           </li>
           <li>
             <a
-              href="/api/"
+              href="/api/latest/"
             >
               API Docs
             </a>
@@ -86,7 +86,7 @@ exports[`Package Manager Page renders correctly 1`] = `
               </span>
               <div
                 class="searchBarContainer"
-                style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+                style="min-height: 0; width: 100%; max-width: 100px; box-shadow: none;"
               >
                 <div
                   class="searchInputContainer"
diff --git a/src/templates/__tests__/__snapshots__/learn.test.tsx.snap b/src/templates/__tests__/__snapshots__/learn.test.tsx.snap
index b50904cf..15ea9674 100644
--- a/src/templates/__tests__/__snapshots__/learn.test.tsx.snap
+++ b/src/templates/__tests__/__snapshots__/learn.test.tsx.snap
@@ -50,7 +50,7 @@ exports[`Learn Template renders correctly 1`] = `
           </li>
           <li>
             <a
-              href="/api/"
+              href="/api/latest/"
             >
               API Docs
             </a>
@@ -86,7 +86,7 @@ exports[`Learn Template renders correctly 1`] = `
               </span>
               <div
                 class="searchBarContainer"
-                style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+                style="min-height: 0; width: 100%; max-width: 100px; box-shadow: none;"
               >
                 <div
                   class="searchInputContainer"
@@ -208,9 +208,7 @@ exports[`Learn Template renders correctly 1`] = `
       >
         <h1
           class="headline"
-        >
-          test-title
-        </h1>
+        />
         <details
           class="tableOfContents"
         >
diff --git a/src/templates/__tests__/__snapshots__/post.test.tsx.snap b/src/templates/__tests__/__snapshots__/post.test.tsx.snap
index d0591def..eaed5470 100644
--- a/src/templates/__tests__/__snapshots__/post.test.tsx.snap
+++ b/src/templates/__tests__/__snapshots__/post.test.tsx.snap
@@ -50,7 +50,7 @@ exports[`LearnLayout Template renders correctly 1`] = `
           </li>
           <li>
             <a
-              href="/api/"
+              href="/api/latest/"
             >
               API Docs
             </a>
@@ -86,7 +86,7 @@ exports[`LearnLayout Template renders correctly 1`] = `
               </span>
               <div
                 class="searchBarContainer"
-                style="min-height: 0em; width: 100%; max-width: 100px; box-shadow: none;"
+                style="min-height: 0; width: 100%; max-width: 100px; box-shadow: none;"
               >
                 <div
                   class="searchInputContainer"