diff --git a/.commitlintrc.js b/.commitlintrc.js
new file mode 100644
index 00000000..8e5db28f
--- /dev/null
+++ b/.commitlintrc.js
@@ -0,0 +1,50 @@
+module.exports = {
+ extends: ['@commitlint/config-conventional'],
+ rules: {
+ 'type-enum': [
+ 2,
+ 'always',
+ [
+ 'feat', // new feature
+ 'fix', // bug fix
+ 'docs', // documentation update
+ 'style', // code formatting, no logic changes
+ 'refactor', // code refactoring
+ 'perf', // performance optimization
+ 'test', // add tests
+ 'chore', // build process or auxiliary tool changes
+ 'ci', // CI/CD related changes
+ 'build', // build system or external dependency changes
+ 'revert' // revert commit
+ ]
+ ],
+ 'scope-enum': [
+ 2,
+ 'always',
+ [
+ 'search', // search functionality
+ 'theme', // theme related
+ 'css', // style files
+ 'js', // JavaScript files
+ 'content', // content files
+ 'build', // build related
+ 'deps', // dependency updates
+ 'config', // configuration files
+ 'docs', // documentation
+ 'layout', // layout templates
+ 'widget', // components
+ 'gulp', // Gulp tasks
+ 'hexo', // Hexo related
+ 'markdown', // Markdown processing
+ 'seo', // SEO optimization
+ 'a11y', // accessibility
+ 'perf' // performance related
+ ]
+ ],
+ 'subject-case': [2, 'never', ['start-case', 'pascal-case', 'upper-case']],
+ 'subject-empty': [2, 'never'],
+ 'subject-full-stop': [2, 'never', '.'],
+ 'type-case': [2, 'always', 'lower-case'],
+ 'type-empty': [2, 'never']
+ }
+};
diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index 8d509fcc..00000000
--- a/.editorconfig
+++ /dev/null
@@ -1,7 +0,0 @@
-root = true
-
-[*.md]
-charset = utf-8
-indent_style = space
-indent_size = 2
-insert_final_newline = true
\ No newline at end of file
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index 16e06e6c..46f879a2 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,6 +1,6 @@
# These are supported funding model platforms
-github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+github: Fechin # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
@@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
-custom: ['https://buymeacoffee.com/randy8080']
+custom: ["https://coff.ee/cheatsheets.zip"]
diff --git a/.github/ISSUE_TEMPLATE/cheatsheet-request.md b/.github/ISSUE_TEMPLATE/cheatsheet-request.md
index 3c6baf47..238bd5db 100644
--- a/.github/ISSUE_TEMPLATE/cheatsheet-request.md
+++ b/.github/ISSUE_TEMPLATE/cheatsheet-request.md
@@ -5,5 +5,3 @@ title: 'Cheatsheet request: '
labels: request
assignees: Fechin
---
-
-
diff --git a/.gitignore b/.gitignore
index b65ab763..7303891d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,32 +8,82 @@
ehthumbs.db
Thumbs.db
nohup.out
+*.tmp
+*.temp
-# Python files #
+# Environment files #
######################
-.python-version
.env
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+.python-version
.venv
.ipynb_checkpoints
+
+# Logs #
+######################
*.log
+logs/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+.pnpm-debug.log*
# Editor files #
######################
-.idea
-.vscode
+.idea/
+.vscode/
+*.swp
+*.swo
+*~
+.vim/
+.emacs.d/
+.sublime-*
-# Node files #
+# Node.js #
######################
node_modules/
dist/
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
+build/
+coverage/
+.nyc_output/
+.cache/
+.parcel-cache/
+.next/
+.nuxt/
+.vuepress/dist/
+.serverless/
+.fusebox/
+.dynamodb/
+.tern-port
package-lock.json
+# Testing #
+######################
+.jest/
+.coverage/
+junit.xml
+test-results/
-# Other files #
+# Build artifacts #
######################
themes/coo/source/css/style.css
public/
db.json
+*.tgz
+*.tar.gz
+
+# Security #
+######################
+.npmrc
+.yarnrc
+.pnpm-store/
+
+# Misc #
+######################
+.eslintcache
+.stylelintcache
+.prettierignore
diff --git a/.gitmessage b/.gitmessage
new file mode 100644
index 00000000..f4490a9e
--- /dev/null
+++ b/.gitmessage
@@ -0,0 +1,36 @@
+# Hello, CheatSheets.zip! Blue, 18-point textProgramming
-- [Kubernetes](https://cheatsheets.zip/kubernetes.html): This page contains a list of commonly used kubectl commands and flags.
-- [ES6](https://cheatsheets.zip/es6.html): A quick reference cheat sheet of what's new in JavaScript for ES2015, ES2016, ES2017, ES2018 and beyond
-- [MATLAB](https://cheatsheets.zip/matlab.html): This quick reference cheat sheet provides an example introduction to using the [MATLAB](https://mathworks.cn/) scientific computing language to get started quickly
+- [Bash](https://cheatsheets.zip/bash.html): This is a quick reference cheat sheet to getting started with Linux bash
+ shell scripting.
- [C](https://cheatsheets.zip/c.html): C quick reference cheat sheet that provides basic syntax and methods.
-- [INI](https://cheatsheets.zip/ini.html): This is a quick reference cheat sheet for understanding and writing INI-format configuration files.
-- [LaTeX](https://cheatsheets.zip/latex.html): This cheat sheet summarizes a reference list of [LaTeX](https://www.latex-project.org/) commonly used display math notation and some application examples of [KaTeX](https://katex.org/).
-- [Rust](https://cheatsheets.zip/rust.html): The Rust quick reference cheat sheet that aims at providing help on writing basic syntax and methods.
-- [C#](https://cheatsheets.zip/cs.html): C# quick reference cheat sheet that provides basic syntax and methods.
-- [Laravel](https://cheatsheets.zip/laravel.html): [Laravel](https://laravel.com/docs/8.x/) is an expressive and progressive web application framework for PHP.
-This cheat sheet provides a reference for common commands and features for Laravel 8.
-- [Dart](https://cheatsheets.zip/dart.html): A Dart cheat sheet with the most important concepts, functions, methods, and more. A complete quick reference for beginners.
-- [JSON](https://cheatsheets.zip/json.html): This is a quick reference cheat sheet for understanding and writing JSON format configuration files.
-- [HTML](https://cheatsheets.zip/html.html): This HTML quick reference cheat sheet lists the common HTML and HTML5 tags in readable layout.
-- [GraphQL](https://cheatsheets.zip/graphql.html): This quick reference cheat sheet provides a brief overview of GraphQL.
- [C++](https://cheatsheets.zip/cpp.html): C++ quick reference cheat sheet that provides basic syntax and methods.
-- [Java](https://cheatsheets.zip/java.html): This cheat sheet is a crash course for Java beginners and help review the basic syntax of the Java language.
-- [PHP](https://cheatsheets.zip/php.html): This [PHP](https://www.php.net/manual/en/) cheat sheet provides a reference for quickly looking up the correct syntax for the code you use most frequently.
-- [Docker](https://cheatsheets.zip/docker.html): This is a quick reference cheat sheet for [Docker](https://docs.docker.com/get-started/). And you can find the most common Docker commands here.
-- [TOML](https://cheatsheets.zip/toml.html): This is a quick reference cheat sheet to the TOML format configuration file syntax.
-- [YAML](https://cheatsheets.zip/yaml.html): This is a quick reference cheat sheet for understanding and writing YAML format configuration files.
-- [CSS 3](https://cheatsheets.zip/css.html): This is a quick reference cheat sheet for CSS goodness, listing selector syntax, properties, units and other useful bits of information.
-- [jQuery](https://cheatsheets.zip/jquery.html): This [jQuery](https://jquery.com/) cheat sheet is a great reference for both beginners and experienced developers.
-- [JavaScript](https://cheatsheets.zip/javascript.html): A JavaScript cheat sheet with the most important concepts, functions, methods, and more. A complete quick reference for beginners.
-- [Python](https://cheatsheets.zip/python.html): The [Python](https://www.python.org/) cheat sheet is a one-page reference sheet for the Python 3 programming language.
-- [Sass](https://cheatsheets.zip/sass.html): This is a quick reference cheat sheet that lists the most useful features of [SASS](https://sass-lang.com).
-- [Go](https://cheatsheets.zip/go.html): This cheat sheet provided basic syntax and methods to help you using [Go](https://go.dev/).
+- [C#](https://cheatsheets.zip/cs.html): C# quick reference cheat sheet that provides basic syntax and methods.
+- [CSS 3](https://cheatsheets.zip/css.html): This is a quick reference cheat sheet for CSS goodness, listing selector
+ syntax, properties, units and other useful bits of information.
+- [Dart](https://cheatsheets.zip/dart.html): A Dart cheat sheet with the most important concepts, functions, methods,
+ and more. A complete quick reference for beginners.
+- [Docker](https://cheatsheets.zip/docker.html): This is a quick reference cheat sheet for
+ [Docker](https://docs.docker.com/get-started/). And you can find the most common Docker commands here.
+- [ES6](https://cheatsheets.zip/es6.html): A quick reference cheat sheet of what’s new in JavaScript for ES2015, ES2016,
+ ES2017, ES2018 and beyond
+- [Go](https://cheatsheets.zip/go.html): This cheat sheet provided basic syntax and methods to help you using
+ [Go](https://go.dev/).
+- [GraphQL](https://cheatsheets.zip/graphql.html): This quick reference cheat sheet provides a brief overview of
+ GraphQL.
+- [Hook](https://cheatsheets.zip/hook.html): The [Hook](https://github.com/hook-lang/hook/) cheat sheet is a one-page
+ reference sheet for the Hook programming language.
+- [HTML](https://cheatsheets.zip/html.html): This HTML quick reference cheat sheet lists the common HTML and HTML5 tags
+ in readable layout.
+- [INI](https://cheatsheets.zip/ini.html): This is a quick reference cheat sheet for understanding and writing
+ INI-format configuration files.
+- [Java](https://cheatsheets.zip/java.html): This cheat sheet is a crash course for Java beginners and help review the
+ basic syntax of the Java language.
+- [JavaScript](https://cheatsheets.zip/javascript.html): A JavaScript cheat sheet with the most important concepts,
+ functions, methods, and more. A complete quick reference for beginners.
+- [jQuery](https://cheatsheets.zip/jquery.html): This [jQuery](https://jquery.com/) cheat sheet is a great reference for
+ both beginners and experienced developers.
+- [Kubernetes](https://cheatsheets.zip/kubernetes.html): This page contains a list of commonly used kubectl commands and
+ flags.
+- [LaTeX](https://cheatsheets.zip/latex.html): This cheat sheet summarizes a reference list of
+ [LaTeX](https://www.latex-project.org/) commonly used display math notation and some application examples of
+ [KaTeX](https://katex.org/).
+- [Laravel](https://cheatsheets.zip/laravel.html): [Laravel](https://laravel.com/docs/8.x/) is an expressive and
+ progressive web application framework for PHP. This cheat sheet provides a reference for common commands and features
+ for Laravel 8.
+- [MATLAB](https://cheatsheets.zip/matlab.html): This quick reference cheat sheet provides an example introduction to
+ using the [MATLAB](https://mathworks.cn/) scientific computing language to get started quickly
- [Markdown](https://cheatsheets.zip/markdown.html): This is a quick reference cheat sheet to the Markdown syntax.
-- [Bash](https://cheatsheets.zip/bash.html): This is a quick reference cheat sheet to getting started with linux bash shell scripting.
+- [PHP](https://cheatsheets.zip/php.html): This [PHP](https://www.php.net/manual/en/) cheat sheet provides a reference
+ for quickly looking up the correct syntax for the code you use most frequently.
+- [Python](https://cheatsheets.zip/python.html): The [Python](https://www.python.org/) cheat sheet is a one-page
+ reference sheet for the Python 3 programming language.
+- [Rust](https://cheatsheets.zip/rust.html): The Rust quick reference cheat sheet that aims at providing help on writing
+ basic syntax and methods.
+- [Sass](https://cheatsheets.zip/sass.html): This is a quick reference cheat sheet that lists the most useful features
+ of [SASS](https://sass-lang.com).
+- [TOML](https://cheatsheets.zip/toml.html): This is a quick reference cheat sheet to the TOML format configuration file
+ syntax.
+- [VHDL](https://cheatsheets.zip/vhdl.html): VHDL (VHSIC Hardware Description Language) cheat sheet - A comprehensive reference for digital hardware design and simulation.
+- [YAML](https://cheatsheets.zip/yaml.html): This is a quick reference cheat sheet for understanding and writing YAML
+ format configuration files.
Toolkit
-- [ChatGPT](https://cheatsheets.zip/chatgpt.html): This cheat sheet lists out prompts and tips from all over the world on how to use ChatGPT effectively
-- [VSCode](https://cheatsheets.zip/vscode.html): This VSCode (Visual Studio Code) quick reference cheat sheet shows its keyboard shortcuts and commands.
-- [Mitmproxy](https://cheatsheets.zip/mitmproxy.html): [mitmproxy](https://mitmproxy.org/) is a free and open source interactive HTTPS proxy. This is a quick reference cheat sheet to the mitmproxy.
-- [XPath](https://cheatsheets.zip/xpath.html): This is an [XPath](https://en.wikipedia.org/wiki/XPath) selectors cheat sheet, which lists commonly used XPath positioning methods and CSS selectors
-- [Emacs](https://cheatsheets.zip/emacs.html): [Emacs](https://www.gnu.org/software/emacs) is the extensible, customizable, self-documenting real time display text editor.
-This reference was made for Emacs 27.
-- [Emmet](https://cheatsheets.zip/emmet.html): [Emmet](https://emmet.io/) is a web-developer’s toolkit for boosting HTML & CSS code writing, which allows you to write large HTML code blocks at speed of light using well-known CSS selectors.
-- [RegEX](https://cheatsheets.zip/regex.html): A quick reference for regular expressions (regex), including symbols, ranges, grouping, assertions and some sample patterns to get you started.
-- [Vim](https://cheatsheets.zip/vim.html): A useful collection of [Vim](http://www.vim.org/) 8.2 quick reference cheat sheets to help you learn vim editor faster.
+- [ChatGPT](https://cheatsheets.zip/chatgpt.html): This cheat sheet lists out prompts and tips from all over the world
+ on how to use ChatGPT effectively
+- [VSCode](https://cheatsheets.zip/vscode.html): This VSCode (Visual Studio Code) quick reference cheat sheet shows its
+ keyboard shortcuts and commands.
+- [Mitmproxy](https://cheatsheets.zip/mitmproxy.html): [Mitmproxy](https://mitmproxy.org/) is a free and open source
+ interactive HTTPS proxy. This is a quick reference cheat sheet to the Mitmproxy.
+- [XPath](https://cheatsheets.zip/xpath.html): This is an [XPath](https://en.wikipedia.org/wiki/XPath) selectors cheat
+ sheet, which lists commonly used XPath positioning methods and CSS selectors
+- [Emacs](https://cheatsheets.zip/emacs.html): [Emacs](https://www.gnu.org/software/emacs) is the extensible,
+ customizable, self-documenting real time display text editor. This reference was made for Emacs 27.
+- [Emmet](https://cheatsheets.zip/emmet.html): [Emmet](https://emmet.io/) is a web-developer’s toolkit for boosting HTML
+ & CSS code writing, which allows you to write large HTML code blocks at speed of light using well-known CSS selectors.
+- [RegEX](https://cheatsheets.zip/regex.html): A quick reference for regular expressions (regex), including symbols,
+ ranges, grouping, assertions and some sample patterns to get you started.
+- [Vim](https://cheatsheets.zip/vim.html): A useful collection of [Vim](http://www.vim.org/) 8.2 quick reference cheat
+ sheets to help you learn vim editor faster.
Linux Command
-- [Curl](https://cheatsheets.zip/curl.html): This [Curl](https://github.com/curl/curl) cheat sheet contains commands and examples of some common Curl tricks.
-- [PM2](https://cheatsheets.zip/pm2.html): [PM2] is a daemon process manager that will help you manage and keep your application online. Getting started with PM2 is straightforward, it is offered as a simple and intuitive CLI.
-- [Chmod](https://cheatsheets.zip/chmod.html): This quick reference cheat sheet provides a brief overview of file permissions, and the operation of the chmod command
-- [Tmux](https://cheatsheets.zip/tmux.html): The tmux cheat sheet quick reference of most commonly used shortcuts and commands
+- [Curl](https://cheatsheets.zip/curl.html): This [Curl](https://github.com/curl/curl) cheat sheet contains commands and
+ examples of some common Curl tricks.
+- [PM2](https://cheatsheets.zip/pm2.html): [PM2] is a daemon process manager that will help you manage and keep your
+ application online. Getting started with PM2 is straightforward, it is offered as a simple and intuitive CLI.
+- [Chmod](https://cheatsheets.zip/chmod.html): This quick reference cheat sheet provides a brief overview of file
+ permissions, and the operation of the chmod command
+- [Tmux](https://cheatsheets.zip/tmux.html): The tmux cheat sheet quick reference of most commonly used shortcuts and
+ commands
- [Lsof](https://cheatsheets.zip/lsof.html): This quick reference cheat sheet provides various for using lsof command.
- [SSH](https://cheatsheets.zip/ssh.html): This quick reference cheat sheet provides various for using SSH.
-- [Netstat](https://cheatsheets.zip/netstat.html): This quick reference cheat sheet provides various for using netstat command.
+- [Netstat](https://cheatsheets.zip/netstat.html): This quick reference cheat sheet provides various for using netstat
+ command.
- [Screen](https://cheatsheets.zip/screen.html): This is a quick reference guide cheat sheet for the screen command.
-- [Awk](https://cheatsheets.zip/awk.html): This is a one page quick reference cheat sheet to the [GNU awk](https://www.gnu.org/software/gawk/manual/gawk.html), which covers commonly used awk expressions and commands.
-- [Find](https://cheatsheets.zip/find.html): This is a quick reference list of cheat sheet for linux find command, contains common options and examples.
-- [Sed](https://cheatsheets.zip/sed.html): [Sed](https://www.gnu.org/software/sed/manual/sed.html) is a stream editor, this sed cheat sheet contains sed commands and some common sed tricks.
-- [Cron](https://cheatsheets.zip/cron.html): [Cron](https://en.wikipedia.org/wiki/Cron) is most suitable for scheduling repetitive tasks. Scheduling one-time tasks can be accomplished using the associated at utility.
-- [Git](https://cheatsheets.zip/git.html): This cheat sheet summarizes commonly used Git command line instructions for quick reference.
-- [Grep](https://cheatsheets.zip/grep.html): This cheat sheet is intended to be a quick reminder for the main concepts involved in using the command line program grep and assumes you already understand its usage.
-- [Netcat](https://cheatsheets.zip/nc.html): This cheat sheet provides various for using Netcat on both Linux and Unix.
+- [Awk](https://cheatsheets.zip/awk.html): This is a one page quick reference cheat sheet to the
+ [GNU awk](https://www.gnu.org/software/gawk/manual/gawk.html), which covers commonly used awk expressions and
+ commands.
+- [Find](https://cheatsheets.zip/find.html): This is a quick reference list of cheat sheet for Linux find command,
+ contains common options and examples.
+- [Sed](https://cheatsheets.zip/sed.html): [Sed](https://www.gnu.org/software/sed/manual/sed.html) is a stream editor,
+ this sed cheat sheet contains sed commands and some common sed tricks.
+- [Cron](https://cheatsheets.zip/cron.html): [Cron](https://en.wikipedia.org/wiki/Cron) is most suitable for scheduling
+ repetitive tasks. Scheduling one-time tasks can be accomplished using the associated at utility.
+- [Git](https://cheatsheets.zip/git.html): This cheat sheet summarizes commonly used Git command line instructions for
+ quick reference.
+- [Grep](https://cheatsheets.zip/grep.html): This cheat sheet is intended to be a quick reminder for the main concepts
+ involved in using the command line program grep and assumes you already understand its usage.
+- [Netcat](https://cheatsheets.zip/nc.html): This cheat sheet provides various for using netcat on both Linux and Unix.
- [Taskset](https://cheatsheets.zip/taskset): This quick reference cheat sheet for tasket command.
+- [GnuPG](https://cheatsheets.zip/gnupg): A cheatsheet for GnuPG, the encryption and signing software.
Python
-- [Numpy](https://cheatsheets.zip/numpy.html): [NumPy](https://numpy.org/) is the fundamental package for scientific computing with Python. This cheat sheet is a quick reference for NumPy beginners.
+- [NumPy](https://cheatsheets.zip/numpy.html): [NumPy](https://numpy.org/) is the fundamental package for scientific
+ computing with Python. This cheat sheet is a quick reference for NumPy beginners.
+- [Pandas](https://cheatsheets.zip/pandas.html): [Pandas](https://pandas.pydata.org/) is a powerful data analysis and
+ manipulation library for Python. This quick reference cheat sheet provides an overview of essential Pandas functions,
+ methods, and DataFrame operations.
Database
-- [Neo4j](https://cheatsheets.zip/neo4j.html): A Neo4j cheat sheet with getting started resources and information on how to query the database with Cypher.
-- [PostgreSQL](https://cheatsheets.zip/postgres.html): The [PostgreSQL](https://www.postgresql.org/docs/current/) cheat sheet provides you with the common PostgreSQL commands and statements.
-- [Redis](https://cheatsheets.zip/redis.html): This is a [redis](https://redis.io/) quick reference cheat sheet that lists examples of redis commands
-- [MySQL](https://cheatsheets.zip/mysql.html): The SQL cheat sheet provides you with the most commonly used SQL statements for your reference.
+- [MySQL](https://cheatsheets.zip/mysql.html): The SQL cheat sheet provides you with the most commonly used SQL
+ statements for your reference.
+- [Neo4j](https://cheatsheets.zip/neo4j.html): A Neo4j cheat sheet with getting started resources and information on how
+ to query the database with Cypher.
+- [PostgreSQL](https://cheatsheets.zip/postgres.html): The [PostgreSQL](https://www.postgresql.org/docs/current/) cheat
+ sheet provides you with the common PostgreSQL commands and statements.
+- [Redis](https://cheatsheets.zip/redis.html): This is a [Redis](https://redis.io/) quick reference cheat sheet that
+ lists examples of redis commands
Keyboard Shortcuts
-- [Adobe Photoshop](https://cheatsheets.zip/adobe-photoshop.html): A visual cheat-sheet for the 283 keyboard shortcuts found in Adobe Photoshop
-- [Apex Legends](https://cheatsheets.zip/apex-legends.html): A visual cheat-sheet for the 27 default keyboard shortcuts found in Apex Legends
+- [Adobe Photoshop](https://cheatsheets.zip/adobe-photoshop.html): A visual cheat-sheet for the 283 keyboard shortcuts
+ found in Adobe Photoshop
+- [Apex Legends](https://cheatsheets.zip/apex-legends.html): A visual cheat-sheet for the 27 default keyboard shortcuts
+ found in Apex Legends
- [Figma](https://cheatsheets.zip/figma.html): A visual cheat-sheet for the 119 keyboard shortcuts found in Figma
-- [Microsoft Teams](https://cheatsheets.zip/microsoft-teams.html): A visual cheat-sheet for the 38 keyboard shortcuts found in Microsoft Teams
-- [TablePlus](https://cheatsheets.zip/table-plus.html): A visual cheat-sheet for the 34 keyboard shortcuts found in TablePlus
-- [Bear](https://cheatsheets.zip/bear-notes.html): A visual cheat-sheet for the 66 keyboard shortcuts found in Bear. This application is MacOS-only.
-- [Feedly](https://cheatsheets.zip/feedly.html): A visual cheat-sheet for the 25 keyboard shortcuts found on the Feedly app
-- [FileZilla](https://cheatsheets.zip/filezilla.html): A visual cheat-sheet for the 30 keyboard shortcuts found on the FileZilla program
+- [Microsoft Teams](https://cheatsheets.zip/microsoft-teams.html): A visual cheat-sheet for the 38 keyboard shortcuts
+ found in Microsoft Teams
+- [TablePlus](https://cheatsheets.zip/table-plus.html): A visual cheat-sheet for the 34 keyboard shortcuts found in
+ TablePlus
+- [Bear](https://cheatsheets.zip/bear-notes.html): A visual cheat-sheet for the 66 keyboard shortcuts found in Bear.
+ This application is MacOS-only.
+- [Feedly](https://cheatsheets.zip/feedly.html): A visual cheat-sheet for the 25 keyboard shortcuts found on the Feedly
+ app
+- [FileZilla](https://cheatsheets.zip/filezilla.html): A visual cheat-sheet for the 30 keyboard shortcuts found on the
+ FileZilla program
- [Reddit](https://cheatsheets.zip/reddit.html): A visual cheat-sheet for the 17 keyboard shortcuts found on Reddit.com
- [Slack](https://cheatsheets.zip/slack.html): A visual cheat-sheet for the 62 keyboard shortcuts found in Slack
-- [SoundCloud](https://cheatsheets.zip/soundcloud.html): A visual cheat-sheet for the 22 keyboard shortcuts found on SoundCloud
+- [SoundCloud](https://cheatsheets.zip/soundcloud.html): A visual cheat-sheet for the 22 keyboard shortcuts found on
+ SoundCloud
- [Twitter](https://cheatsheets.zip/twitter.html): A visual cheat-sheet for the 26 keyboard shortcuts found on Twitter
-- [Android Studio](https://cheatsheets.zip/android-studio.html): A visual cheat-sheet for the 130 keyboard shortcuts found in the Andriod Studio software
+- [Android Studio](https://cheatsheets.zip/android-studio.html): A visual cheat-sheet for the 130 keyboard shortcuts
+ found in the Android Studio software
- [Github](https://cheatsheets.zip/github.html): A visual cheat-sheet for the 80 keyboard shortcuts found on Github.com
-- [Shopify](https://cheatsheets.zip/shopify.html): A visual cheat-sheet for the 50 keyboard shortcuts found on the Shopify website
-- [Zoom](https://cheatsheets.zip/zoom.html): A visual cheat-sheet for the 32 keyboard shortcuts found in Zoom. These shortcuts are for MacOS, for Windows visit /zoom-windows.
-- [Adobe XD](https://cheatsheets.zip/adobe-xd.html): A visual cheat-sheet for the 97 keyboard shortcuts found in Adobe XD
+- [Shopify](https://cheatsheets.zip/shopify.html): A visual cheat-sheet for the 50 keyboard shortcuts found on the
+ Shopify website
+- [Zoom](https://cheatsheets.zip/zoom.html): A visual cheat-sheet for the 32 keyboard shortcuts found in Zoom. These
+ shortcuts are for MacOS, for Windows visit /zoom-windows.
+- [Adobe XD](https://cheatsheets.zip/adobe-xd.html): A visual cheat-sheet for the 97 keyboard shortcuts found in Adobe
+ XD
- [Firefox](https://cheatsheets.zip/firefox.html): A visual cheat-sheet for the 116 keyboard shortcuts found in Firefox
-- [PhpStorm](https://cheatsheets.zip/phpstorm.html): A visual cheat-sheet for the 96 keyboard shortcuts found in JetBrains PhpStorm
+- [PhpStorm](https://cheatsheets.zip/phpstorm.html): A visual cheat-sheet for the 96 keyboard shortcuts found in
+ JetBrains PhpStorm
- [Postman](https://cheatsheets.zip/postman.html): A visual cheat-sheet for the 23 keyboard shortcuts found in Postman
- [Webflow](https://cheatsheets.zip/webflow.html): A visual cheat-sheet for the 41 keyboard shortcuts found in Webflow
-- [Adobe Lightroom CC](https://cheatsheets.zip/adobe-lightroom.html): A visual cheat-sheet for the 251 keyboard shortcuts found in Adobe Lightroom CC
-- [1Password](https://cheatsheets.zip/1password.html): A cheat sheet for 1password's keyboard shortcuts in Mac, Windows, iOS, Linux.
-- [Affinity Designer](https://cheatsheets.zip/affinity-designer.html): A visual cheat-sheet for the 108 keyboard shortcuts found in Affinity Designer
-- [Pocket](https://cheatsheets.zip/pocket.html): A visual cheat-sheet for the 36 keyboard shortcuts found on Pocket for Web
+- [Adobe Lightroom CC](https://cheatsheets.zip/adobe-lightroom.html): A visual cheat-sheet for the 251 keyboard
+ shortcuts found in Adobe Lightroom CC
+- [1Password](https://cheatsheets.zip/1password.html): A cheat sheet for 1password's keyboard shortcuts in Mac, Windows,
+ iOS, Linux.
+- [Affinity Designer](https://cheatsheets.zip/affinity-designer.html): A visual cheat-sheet for the 108 keyboard
+ shortcuts found in Affinity Designer
+- [Pocket](https://cheatsheets.zip/pocket.html): A visual cheat-sheet for the 36 keyboard shortcuts found on Pocket for
+ Web
- [Trello](https://cheatsheets.zip/trello.html): A visual cheat-sheet for the 29 keyboard shortcuts found on Trello
-- [Audacity](https://cheatsheets.zip/audacity.html): A visual cheat-sheet for the 135 default keyboard shortcuts found in Audacity
-- [Framer X](https://cheatsheets.zip/framer-x.html): A visual cheat-sheet for the 45 keyboard shortcuts found in Framer X. This application is MacOS-only.
-- [Google Drive](https://cheatsheets.zip/google-drive.html): A visual cheat-sheet for the 54 keyboard shortcuts found in Google Drive on the web
+- [Audacity](https://cheatsheets.zip/audacity.html): A visual cheat-sheet for the 135 default keyboard shortcuts found
+ in Audacity
+- [Framer X](https://cheatsheets.zip/framer-x.html): A visual cheat-sheet for the 45 keyboard shortcuts found in Framer
+ X. This application is MacOS-only.
+- [Google Drive](https://cheatsheets.zip/google-drive.html): A visual cheat-sheet for the 54 keyboard shortcuts found in
+ Google Drive on the web
- [PuTTy](https://cheatsheets.zip/putty.html): A visual cheat-sheet for the 32 keyboard shortcuts found on the PuTTy app
-- [Sequel Pro](https://cheatsheets.zip/sequel-pro.html): A visual cheat-sheet for the 71 keyboard shortcuts found in Sequel Pro. This application is MacOS-only.
-- [Apple Music](https://cheatsheets.zip/apple-music.html): A visual cheat-sheet for the 62 keyboard shortcuts found in the Apple Music app. This application is MacOS-only.
+- [Sequel Pro](https://cheatsheets.zip/sequel-pro.html): A visual cheat-sheet for the 71 keyboard shortcuts found in
+ Sequel Pro. This application is MacOS-only.
+- [Apple Music](https://cheatsheets.zip/apple-music.html): A visual cheat-sheet for the 62 keyboard shortcuts found in
+ the Apple Music app. This application is MacOS-only.
- [Blender](https://cheatsheets.zip/blender.html): A visual cheat-sheet for the 187 keyboard shortcuts found in Blender
-- [Obsidian](https://cheatsheets.zip/obsidian.html): A visual cheat-sheet for the 17 keyboard shortcuts found in the Obsidian knowledge base app.
-- [Telegram Desktop](https://cheatsheets.zip/telegram.html): A visual cheat-sheet for the 37 keyboard shortcuts found on the Telegram Desktop app
-- [YouTube](https://cheatsheets.zip/youtube.html): A visual cheat-sheet for the 18 keyboard shortcuts found on YouTube.com
-- [Airtable](https://cheatsheets.zip/airtable.html): A visual cheat-sheet for the 36 keyboard shortcuts found in Airtable
-- [Bitbucket](https://cheatsheets.zip/bitbucket.html): A visual cheat-sheet for the 35 keyboard shortcuts found on Bitbucket
-- [Fortnite](https://cheatsheets.zip/fortnite.html): A visual cheat-sheet for the 26 default keyboard shortcuts found in Fortnite
+- [Obsidian](https://cheatsheets.zip/obsidian.html): A visual cheat-sheet for the 17 keyboard shortcuts found in the
+ Obsidian knowledge base app.
+- [Telegram Desktop](https://cheatsheets.zip/telegram.html): A visual cheat-sheet for the 37 keyboard shortcuts found on
+ the Telegram Desktop app
+- [YouTube](https://cheatsheets.zip/youtube.html): A visual cheat-sheet for the 18 keyboard shortcuts found on
+ YouTube.com
+- [Airtable](https://cheatsheets.zip/airtable.html): A visual cheat-sheet for the 36 keyboard shortcuts found in
+ Airtable
+- [Bitbucket](https://cheatsheets.zip/bitbucket.html): A visual cheat-sheet for the 35 keyboard shortcuts found on
+ Bitbucket
+- [Fortnite](https://cheatsheets.zip/fortnite.html): A visual cheat-sheet for the 26 default keyboard shortcuts found in
+ Fortnite
- [Gmail](https://cheatsheets.zip/gmail.html): A visual cheat-sheet for the 90 keyboard shortcuts found on Gmail
-- [Sketch](https://cheatsheets.zip/sketch.html): A visual cheat-sheet for the 149 keyboard shortcuts found in Sketch. This application is MacOS-only.
+- [Sketch](https://cheatsheets.zip/sketch.html): A visual cheat-sheet for the 149 keyboard shortcuts found in Sketch.
+ This application is MacOS-only.
- [Spotify](https://cheatsheets.zip/spotify.html): A visual cheat-sheet for the 23 keyboard shortcuts found in Spotify
-- [Brave Browser](https://cheatsheets.zip/brave.html): A visual cheat-sheet for the 64 keyboard shortcuts found in the Brave browser
-- [KanbanMail](https://cheatsheets.zip/kanbanmail.html): A visual cheat-sheet for the 29 keyboard shortcuts found in KanbanMail
-- [Microsoft Outlook](https://cheatsheets.zip/outlook.html): A visual cheat-sheet for the 210 keyboard shortcuts found in Microsoft Outlook
-- [Principle](https://cheatsheets.zip/principle.html): A visual cheat-sheet for the 30 keyboard shortcuts found in Principle. This application is MacOS-only.
+- [Brave Browser](https://cheatsheets.zip/brave.html): A visual cheat-sheet for the 64 keyboard shortcuts found in the
+ Brave browser
+- [KanbanMail](https://cheatsheets.zip/kanbanmail.html): A visual cheat-sheet for the 29 keyboard shortcuts found in
+ KanbanMail
+- [Microsoft Outlook](https://cheatsheets.zip/outlook.html): A visual cheat-sheet for the 210 keyboard shortcuts found
+ in Microsoft Outlook
+- [Principle](https://cheatsheets.zip/principle.html): A visual cheat-sheet for the 30 keyboard shortcuts found in
+ Principle. This application is MacOS-only.
- [Skype](https://cheatsheets.zip/skype.html): A visual cheat-sheet for the 31 keyboard shortcuts found in Skype
-- [Arduino IDE](https://cheatsheets.zip/arduino.html): A visual cheat-sheet for the 12 keyboard shortcuts found in the Arduino IDE
+- [Arduino IDE](https://cheatsheets.zip/arduino.html): A visual cheat-sheet for the 12 keyboard shortcuts found in the
+ Arduino IDE
- [Asana](https://cheatsheets.zip/asana.html): A visual cheat-sheet for the 40 keyboard shortcuts found in Asana
-- [Code Editor for iOS](https://cheatsheets.zip/code-editor-ios.html): A visual cheat-sheet for the 43 keyboard shortcuts found in the Code Editor for iOS app. This application is MacOS-only.
+- [Code Editor for iOS](https://cheatsheets.zip/code-editor-ios.html): A visual cheat-sheet for the 43 keyboard
+ shortcuts found in the Code Editor for iOS app. This application is MacOS-only.
- [Jira](https://cheatsheets.zip/jira.html): A visual cheat-sheet for the 44 keyboard shortcuts found in Jira
- [Quip.com](https://cheatsheets.zip/quip.html): A visual cheat-sheet for the 52 keyboard shortcuts found in Quip
-- [WordPress](https://cheatsheets.zip/wordpress.html): A visual cheat-sheet for the 34 keyboard shortcuts found in the WordPress visual editor
-- [Chrome Developer Tools](https://cheatsheets.zip/chrome-devtools.html): A visual cheat-sheet for the 56 keyboard shortcuts found in Chrome's Developer Tools
+- [WordPress](https://cheatsheets.zip/wordpress.html): A visual cheat-sheet for the 34 keyboard shortcuts found in the
+ WordPress visual editor
+- [Chrome Developer Tools](https://cheatsheets.zip/chrome-devtools.html): A visual cheat-sheet for the 56 keyboard
+ shortcuts found in Chrome's Developer Tools
- [GIMP](https://cheatsheets.zip/gimp.html): A visual cheat-sheet for the 97 keyboard shortcuts found in GIMP
-- [Google Chrome](https://cheatsheets.zip/google-chrome.html): A visual cheat-sheet for the 65 keyboard shortcuts found in Google Chrome
+- [Google Chrome](https://cheatsheets.zip/google-chrome.html): A visual cheat-sheet for the 65 keyboard shortcuts found
+ in Google Chrome
- [Todoist](https://cheatsheets.zip/todoist.html): A visual cheat-sheet for the 37 keyboard shortcuts found in Todoist
-- [TickTick](https://cheatsheets.zip/ticktick.html): A visual cheat-sheet for the 25 keyboard shortcuts found in the TickTick desktop app
+- [TickTick](https://cheatsheets.zip/ticktick.html): A visual cheat-sheet for the 25 keyboard shortcuts found in the
+ TickTick desktop app
- [VLC Player](https://cheatsheets.zip/vlc.html): A visual cheat-sheet for the 82 keyboard shortcuts found in VLC Player
- [Missive](https://cheatsheets.zip/missive.html): A visual cheat-sheet for the 83 keyboard shortcuts found in Missive
-- [Origami Studio](https://cheatsheets.zip/origami.html): A visual cheat-sheet for the 71 keyboard shortcuts found in Origami Studio. This application is MacOS-only.
-- [Sublime Text](https://cheatsheets.zip/sublime-text.html): A visual cheat-sheet for the 49 keyboard shortcuts found in Sublime Text
-- [Transmit](https://cheatsheets.zip/transmit.html): A visual cheat-sheet for the 62 keyboard shortcuts found in Transmit. This application is MacOS-only.
-- [Affinity Photo](https://cheatsheets.zip/affinity-photo.html): A visual cheat-sheet for the 177 keyboard shortcuts found in Affinity Photo
-- [Monday.com](https://cheatsheets.zip/monday.html): A visual cheat-sheet for the 24 keyboard shortcuts found on Monday.com
-- [Proto.io](https://cheatsheets.zip/proto-io.html): A visual cheat-sheet for the 48 keyboard shortcuts found in Proto.io
-- [Superhuman](https://cheatsheets.zip/superhuman.html): A visual cheat-sheet for the 105 keyboard shortcuts found in Superhuman. This application is MacOS-only.
-- [Vivaldi Browser](https://cheatsheets.zip/vivaldi.html): A visual cheat-sheet for the 69 default keyboard shortcuts found in the Vivaldi browser
-- [Finder](https://cheatsheets.zip/finder.html): A visual cheat-sheet for the 55 keyboard shortcuts found in Finder. This application is part of MacOS.
+- [Origami Studio](https://cheatsheets.zip/origami.html): A visual cheat-sheet for the 71 keyboard shortcuts found in
+ Origami Studio. This application is MacOS-only.
+- [Sublime Text](https://cheatsheets.zip/sublime-text.html): A visual cheat-sheet for the 49 keyboard shortcuts found in
+ Sublime Text
+- [Transmit](https://cheatsheets.zip/transmit.html): A visual cheat-sheet for the 62 keyboard shortcuts found in
+ Transmit. This application is MacOS-only.
+- [Affinity Photo](https://cheatsheets.zip/affinity-photo.html): A visual cheat-sheet for the 177 keyboard shortcuts
+ found in Affinity Photo
+- [Monday.com](https://cheatsheets.zip/monday.html): A visual cheat-sheet for the 24 keyboard shortcuts found on
+ Monday.com
+- [Proto.io](https://cheatsheets.zip/proto-io.html): A visual cheat-sheet for the 48 keyboard shortcuts found in
+ Proto.io
+- [Superhuman](https://cheatsheets.zip/superhuman.html): A visual cheat-sheet for the 105 keyboard shortcuts found in
+ Superhuman. This application is MacOS-only.
+- [Vivaldi Browser](https://cheatsheets.zip/vivaldi.html): A visual cheat-sheet for the 69 default keyboard shortcuts
+ found in the Vivaldi browser
+- [Finder](https://cheatsheets.zip/finder.html): A visual cheat-sheet for the 55 keyboard shortcuts found in Finder.
+ This application is part of MacOS.
- [GitLab](https://cheatsheets.zip/gitlab.html): A visual cheat-sheet for the 58 keyboard shortcuts found in GitLab
-- [Guitar Pro](https://cheatsheets.zip/guitar-pro.html): A visual cheat-sheet for the 129 keyboard shortcuts found in Guitar Pro
-- [Roam Research](https://cheatsheets.zip/roam.html): A visual cheat-sheet for the 45 keyboard shortcuts found on Roam Research
-- [SketchUp Pro](https://cheatsheets.zip/sketchup.html): A visual cheat-sheet for the 135 default keyboard shortcuts found in SketchUp Pro
-- [Unity 3D](https://cheatsheets.zip/unity-3d.html): A visual cheat-sheet for the 50 keyboard shortcuts found in Unity 3D
-- [IntelliJ IDEA](https://cheatsheets.zip/idea.html): IntelliJ IDEA is a very good Java IDE, most of its commands have shortcuts to keep your hands from leaving the keyboard
-- [WebStorm](https://cheatsheets.zip/webstorm.html): This quick reference cheat sheet lists the default keyboard shortcuts for WebStorm running on Windows/Linux or Mac
+- [Guitar Pro](https://cheatsheets.zip/guitar-pro.html): A visual cheat-sheet for the 129 keyboard shortcuts found in
+ Guitar Pro
+- [Roam Research](https://cheatsheets.zip/roam.html): A visual cheat-sheet for the 45 keyboard shortcuts found on Roam
+ Research
+- [SketchUp Pro](https://cheatsheets.zip/sketchup.html): A visual cheat-sheet for the 135 default keyboard shortcuts
+ found in SketchUp Pro
+- [Unity 3D](https://cheatsheets.zip/unity-3d.html): A visual cheat-sheet for the 50 keyboard shortcuts found in Unity
+ 3D
+- [IntelliJ IDEA](https://cheatsheets.zip/idea.html): IntelliJ IDEA is a very good Java IDE, most of its commands have
+ shortcuts to keep your hands from leaving the keyboard
+- [WebStorm](https://cheatsheets.zip/webstorm.html): This quick reference cheat sheet lists the default keyboard
+ shortcuts for WebStorm running on Windows/Linux or Mac
Other
+Shaders
-- [Google Search](https://cheatsheets.zip/google-search.html): This quick reference cheat sheet lists of Google advanced search operators.
-- [ASCII Code](https://cheatsheets.zip/ascii-code.html): This cheat sheet is a complete list of ASCII Code Table with their numbers and names.
-- [Aspect Ratio](https://cheatsheets.zip/aspect-ratio.html): This cheat sheet lists some common aspect ratios and their pixel resolutions. Always confirm your final delivery ratio when shooting.
-- [HTML Characters Entities](https://cheatsheets.zip/html-char.html): This cheat sheet is a complete list of HTML entities with their numbers and names. Also included is a full list of ASCII characters that can be represented in HTML.
-- [ISO 639-1 Language Code](https://cheatsheets.zip/iso-639-1.html): This is a list of the ISO language codes that conform to the ISO 639-1 standard, it provide reference for multi-language website.
-- [Resolutions](https://cheatsheets.zip/resolutions.html): This cheat sheet lists screen sizes, viewport size and CSS media queries for popular Phones, Tablets, Laptops and Watches
-- [HTTP Status Code](https://cheatsheets.zip/http-status-code.html): The http status codes cheat sheet. a quick reference to every HTTP status code.
-- [Emoji](https://cheatsheets.zip/emoji.html): Some of the emoji codes are not super easy to remember, so here is a little cheat sheet.
-- [CheatSheets](https://cheatsheets.zip/quickref.html): This is the magic syntax variant manual that you can use on CheatSheets.zip, It's a good practice for contributors.
-- [MIME types](https://cheatsheets.zip/mime.html): This cheat sheet lists some common MIME types for the Web. You can look in the [IANA/MIME Media Types registry](http://www.iana.org/assignments/media-types/index.html) which contains all registered MIME types.
+- [Unity Shader Graph](https://cheatsheets.zip/unity-shader-graph.html): This is a visual cheat-sheet for the Unity
+ Shader Graph. This tool is used to create custom shaders material in Unity, a popular game engine.
Game
+
+- [Minecraft Java](https://cheatsheets.zip/minecraft-java.html): A comprehensive reference for Minecraft Java Edition (1.20.x) commands.
+- [Minecraft Bedrock](https://cheatsheets.zip/minecraft-bedrock.html): A comprehensive reference for Minecraft Bedrock Edition (1.20.x) commands.
+Other
+
+- [ASCII Code](https://cheatsheets.zip/ascii-code.html): This cheat sheet is a complete list of ASCII Code Table with
+ their numbers and names.
+- [Aspect Ratio](https://cheatsheets.zip/aspect-ratio.html): This cheat sheet lists some common aspect ratios and their
+ pixel resolutions. Always confirm your final delivery ratio when shooting.
+- [CheatSheets](https://cheatsheets.zip/quickref.html): This is the magic syntax variant manual that you can use on
+ CheatSheets.zip, It’s a good practice for contributors.
+- [Emoji](https://cheatsheets.zip/emoji.html): Some of the emoji codes are not super easy to remember, so here is a
+ little cheat sheet.
+- [Google Search](https://cheatsheets.zip/google-search.html): This quick reference cheat sheet lists of Google advanced
+ search operators.
+- [HTML Characters Entities](https://cheatsheets.zip/html-char.html): This cheat sheet is a complete list of HTML
+ entities with their numbers and names. Also included is a full list of ASCII characters that can be represented in
+ HTML.
+- [ISO 639-1 Language Code](https://cheatsheets.zip/iso-639-1.html): This is a list of the ISO language codes that
+ conform to the ISO 639-1 standard, it provide reference for multi-language website.
+- [HTTP Status Code](https://cheatsheets.zip/http-status-code.html): The http status codes cheat sheet. A quick
+ reference to every HTTP status code.
+- [MIME types](https://cheatsheets.zip/mime.html): This cheat sheet lists some common MIME types for the Web. You can
+ look in the [IANA/MIME Media Types registry](http://www.iana.org/assignments/media-types/index.html) which contains
+ all registered MIME types.
+- [Resolutions](https://cheatsheets.zip/resolutions.html): This cheat sheet lists screen sizes, viewport size and CSS
+ media queries for popular Phones, Tablets, Laptops and Watches
+
+
-
## 🐦 Follow us on Twitter
[](https://twitter.com/FechinLi)
-Stay up-to-date with our project by following us on Twitter! Get all the latest news and updates right in your feed. It's the perfect way to stay in the loop.
-
-
+Stay up-to-date with our project by following us on Twitter! Get all the latest news and updates right in your feed.
+It's the perfect way to stay in the loop.
+
## 📃 License
-The project is licensed under the [MIT](https://github.com/Fechin/reference/blob/main/LICENSE) License and is maintained by [Fechin](https://github.com/Fechin).
-
+The project is licensed under the [GPL-3.0](https://github.com/Fechin/reference/blob/main/LICENSE) License and is
+maintained by [Fechin](https://github.com/Fechin).
diff --git a/_config.yml b/_config.yml
index aa43e0b6..503960db 100644
--- a/_config.yml
+++ b/_config.yml
@@ -4,12 +4,12 @@
# Site
title: CheatSheets.zip
-subtitle: 'Quick Reference Cheat Sheet'
-description: 'Share quick reference and cheat sheet for developers'
-keywords: reference,cheatsheet,code table,snippets,linux
-author: CheatSheets.zip
+subtitle: "Ultimate Cheat for Developers"
+description: "Share quick reference and cheat sheet for developers"
+keywords: cheat,sheet,cheatsheets,reference,programming,code table,snippets,linux,command,shortcuts,developers
+author: Fechin
language: en
-timezone: ''
+timezone: "UTC"
# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
@@ -39,12 +39,13 @@ titlecase: false # Transform title into titlecase
external_link:
enable: true # Open external links in new tab
field: site # Apply to the whole site
- exclude: ''
+ exclude: ""
filename_case: 1
render_drafts: false
post_asset_folder: false
relative_link: false
future: true
+syntax_highlighter: # empty to disable built-in syntax highlighting
highlight:
enable: false
@@ -53,19 +54,35 @@ highlight:
# per_page: Posts displayed per page. (0 = disable pagination)
# order_by: Posts order. (Order by date descending by default)
index_generator:
- path: ''
+ path: ""
per_page: 0
order_by: -date
# Category & Tag
default_category: uncategorized
-category_map:
-tag_map:
+category_map: {}
+tag_map: {}
# Metadata elements
## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta
meta_generator: false
+# SEO configuration
+seo:
+ # Default image for social sharing
+ default_image: "/assets/image/preview.png"
+ # Author information
+ author_name: "Fechin"
+ author_url: "https://cheatsheets.zip"
+ # Social media configuration
+ social:
+ twitter: "Fechin"
+ github: "Fechin/reference"
+ # Site type
+ site_type: "Educational Technology Platform"
+ # Target audience
+ target_audience: "Developers, Programmers, System Administrators"
+
# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
@@ -73,7 +90,7 @@ meta_generator: false
date_format: YYYY-MM-DD
time_format: HH:mm:ss
## Use post's date for updated date unless set in front-matter
-updated_option: 'date'
+updated_option: "date"
# Pagination
## Set per_page to 0 to disable pagination
@@ -82,10 +99,10 @@ pagination_dir: page
# Include / Exclude file(s)
## include:/exclude: options only apply to the 'source/' folder
-include:
+include: []
exclude:
- ".github"
-ignore:
+ignore: []
# Extensions
## Plugins: https://hexo.io/plugins/
@@ -96,7 +113,14 @@ nofollow:
enable: true
field: site
exclude:
- - 'exclude1.com'
+ - "tableconvert.com"
+ - "dorefer.com"
+ - "fionaai.com"
+ - "github.com"
+ - "gospinwheel.com"
+ - "colorscreen.co"
+ - "sshkeygenerator.com"
+ - "x.com"
excerpt:
depth: 2
@@ -104,11 +128,9 @@ excerpt:
more_excludes: []
hideWholePostExcerpts: true
-
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
-# - type: cjh_google_url_submitter
- type: cjh_bing_url_submitter
- type: cjh_baidu_url_submitter
@@ -123,7 +145,6 @@ sitemap:
tags: false
categories: false
-
# Markdown-it configuration
## Docs: https://github.com/celsomiranda/hexo-renderer-markdown-it/wiki
markdown:
@@ -133,12 +154,19 @@ markdown:
breaks: false
linkify: false
typographer: false
- quotes: '“”‘’'
+ quotes: "“”‘’"
+ langPrefix: "hljs language-"
anchors:
level: 2
- collisionSuffix: ''
+ collisionSuffix: ""
permalink: true
permalinkClass: h-anchor
- permalinkSymbol: '#'
+ permalinkSymbol: "#"
case: 1
- separator: '-'
+ separator: "-"
+
+# Browsersync configuration
+browsersync:
+ ui: false # disable ui
+ notify: false # disable notification
+ logLevel: silent # set log level to silent
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 00000000..5aadb949
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,65 @@
+const js = require('@eslint/js');
+const globals = require('globals');
+
+module.exports = [
+ js.configs.recommended,
+ {
+ languageOptions: {
+ ecmaVersion: 2022,
+ sourceType: 'module',
+ globals: {
+ ...globals.browser,
+ ...globals.node
+ }
+ },
+ rules: {
+ 'no-unused-vars': 'warn',
+ 'no-console': 'off'
+ }
+ },
+ {
+ files: ['**/*.js'],
+ languageOptions: {
+ sourceType: 'script',
+ globals: {
+ ...globals.node,
+ ...globals.browser
+ }
+ }
+ },
+ {
+ files: ['source/sw.js'],
+ languageOptions: {
+ globals: {
+ ...globals.serviceworker
+ }
+ }
+ },
+ {
+ files: ['themes/coo/scripts/**/*.js'],
+ languageOptions: {
+ globals: {
+ ...globals.node,
+ hexo: 'readonly'
+ }
+ }
+ },
+ {
+ files: ['themes/coo/source/js/main.js'],
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ Fuse: 'readonly'
+ }
+ }
+ },
+ {
+ ignores: [
+ 'node_modules/**',
+ 'public/**',
+ 'db.json',
+ '.deploy_git/**',
+ 'themes/coo/source/js/fuse_*.js'
+ ]
+ }
+];
diff --git a/gulpfile.js b/gulpfile.js
index 1539b723..4d50af7e 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -6,32 +6,39 @@ const terser = require('gulp-terser');
// Compress js files
gulp.task('js', function () {
- return gulp.src(['./public/js/main.js'])
- .pipe(terser({
- compress: true
- }))
- .pipe(gulp.dest('./public/js'));
+ return gulp
+ .src(['./public/js/main.js'])
+ .pipe(
+ terser({
+ compress: true
+ })
+ )
+ .pipe(gulp.dest('./public/js'));
});
-
// Build html files
gulp.task('html', function () {
- return gulp.src('./public/**/*.html')
- .pipe(htmlclean())
- .pipe(htmlmin({
- removeComments: true,
- minifyJS: true,
- minifyCSS: true,
- minifyURLs: true,
- }))
- .pipe(version({
- 'append': {
- 'key': '_v',
- 'cover': 1,
- 'to': ['css', 'js', 'png', 'jpg', 'woff2']
- }
- }))
- .pipe(gulp.dest('./public'));
+ return gulp
+ .src('./public/**/*.html')
+ .pipe(htmlclean())
+ .pipe(
+ htmlmin({
+ removeComments: true,
+ minifyJS: true,
+ minifyCSS: true,
+ minifyURLs: true
+ })
+ )
+ .pipe(
+ version({
+ append: {
+ key: '_v',
+ cover: 1,
+ to: ['css', 'js', 'png', 'jpg', 'woff2']
+ }
+ })
+ )
+ .pipe(gulp.dest('./public'));
});
-gulp.task('default', gulp.parallel('js', 'html'));
\ No newline at end of file
+gulp.task('default', gulp.parallel('js', 'html'));
diff --git a/package.json b/package.json
index a92f3ee9..847b17f0 100644
--- a/package.json
+++ b/package.json
@@ -11,67 +11,95 @@
"build:rm-db.json": "rm db.json || exit 0",
"build:css": "npx postcss themes/coo/source/css/style.tailwindcss -o themes/coo/source/css/style.css",
"build:generate": "npx hexo generate",
- "build:gulp": "npx gulp --max-old-space-size=4096"
+ "build:gulp": "npx gulp --max-old-space-size=4096",
+ "format": "prettier --write .",
+ "format:check": "prettier --check .",
+ "lint": "eslint themes/coo/source/js/**/*.js --fix",
+ "lint:check": "eslint themes/coo/source/js/**/*.js",
+ "lint:css": "stylelint **/*.css --fix",
+ "test": "run-s lint:check format:check",
+ "audit": "pnpm audit --audit-level moderate",
+ "audit:fix": "pnpm audit --fix",
+ "security:check": "pnpm audit && pnpm outdated",
+ "deps:check": "npx npm-check-updates",
+ "deps:update": "npx npm-check-updates -u && pnpm install",
+ "prepare": "husky",
+ "commit": "cz"
},
"hexo": {
- "version": "5.4.2"
+ "version": "7.3.0"
},
"dependencies": {
- "eslint": "^8.27.0",
- "gulp": "^4.0.2",
- "gulp-cli": "^2.3.0",
+ "gulp": "^5.0.1",
+ "gulp-cli": "^3.1.0",
"gulp-ext-replace": "^0.3.0",
"gulp-htmlclean": "^2.7.22",
"gulp-htmlmin": "^5.0.1",
"gulp-minify-css": "^1.2.4",
- "gulp-postcss": "^9.0.1",
+ "gulp-postcss": "^10.0.0",
"gulp-uglify-es": "^3.0.0",
"gulp-version-number": "^0.2.4",
- "hexo": "^5.4.0",
+ "hexo": "^7.3.0",
"hexo-browsersync": "^0.3.0",
- "hexo-cli": "^4.3.0",
- "hexo-excerpt": "^1.2.1",
+ "hexo-excerpt": "^1.3.1",
"hexo-filter-nofollow": "^2.0.2",
- "hexo-generator-index": "^2.0.0",
- "hexo-generator-sitemap": "^2.2.0",
- "hexo-log": "^3.0.0",
- "hexo-pagination": "^2.0.0",
+ "hexo-fs": "^5.0.0",
+ "hexo-generator-index": "^4.0.0",
+ "hexo-generator-sitemap": "^3.0.1",
+ "hexo-log": "^4.1.0",
+ "hexo-pagination": "^4.0.0",
"hexo-related-popular-posts": "^5.0.1",
"hexo-renderer-ejs": "^2.0.0",
"hexo-renderer-markdown-it": "^5.0.0",
- "hexo-renderer-stylus": "^2.0.1",
- "hexo-server": "^2.0.0",
- "markdown-it-abbr": "^1.0.4",
- "markdown-it-anchor": "^8.4.1",
- "markdown-it-attrs": "^4.1.0",
+ "hexo-renderer-stylus": "^3.0.1",
+ "hexo-server": "^3.0.0",
+ "hexo-util": "^3.3.0",
+ "highlight.js": "^11.11.1",
+ "markdown-it-abbr": "^2.0.0",
+ "markdown-it-anchor": "^9.2.0",
+ "markdown-it-attrs": "^4.3.1",
"markdown-it-checkbox": "^1.1.0",
- "markdown-it-emoji": "^2.0.0",
- "markdown-it-footnote": "^3.0.3",
+ "markdown-it-emoji": "^3.0.0",
+ "markdown-it-footnote": "^4.0.0",
"markdown-it-highlight-lines": "^1.0.2",
- "markdown-it-highlightjs": "^3.5.0",
- "markdown-it-ins": "^3.0.1",
- "markdown-it-multimd-table": "^4.1.1",
+ "markdown-it-highlightjs": "^4.2.0",
+ "markdown-it-ins": "^4.0.0",
"markdown-it-shortcode-tag": "^1.1.0",
- "markdown-it-sub": "^1.0.0",
- "markdown-it-sup": "^1.0.0",
+ "markdown-it-sub": "^2.0.0",
+ "markdown-it-sup": "^2.0.0",
"markdown-it-task-lists": "^2.1.1"
},
"devDependencies": {
- "autoprefixer": "^10.4.0",
+ "@commitlint/cli": "^19.8.1",
+ "@commitlint/config-conventional": "^19.8.1",
+ "autoprefixer": "^10.4.21",
+ "commitizen": "^4.3.1",
+ "cssnano": "^7.0.7",
+ "cz-conventional-changelog": "^3.3.0",
+ "eslint": "^9.29.0",
+ "eslint-config-prettier": "^10.1.5",
"gulp-clean-css": "^4.3.0",
"gulp-filesize": "^0.0.6",
"gulp-javascript-obfuscator": "^1.1.6",
- "gulp-replace": "^1.1.3",
- "gulp-rev": "^9.0.0",
+ "gulp-replace": "^1.1.4",
+ "gulp-rev": "^11.0.0",
"gulp-terser": "^2.1.0",
- "npm-run-all": "^4.1.5",
- "postcss": "^8.4.4",
- "postcss-cli": "^9.1.0",
- "postcss-import": "^14.0.2",
- "postcss-minify": "^1.1.0",
- "sync-request": "^6.1.0",
- "tailwindcss": "^3.0.1",
- "tailwindcss-animate": "^1.0.5",
- "tailwindcss-cli": "^0.1.2"
+ "husky": "^9.1.7",
+ "lint-staged": "^16.1.2",
+ "npm-run-all2": "^8.0.4",
+ "postcss": "^8.5.6",
+ "postcss-cli": "^11.0.1",
+ "postcss-import": "^16.1.1",
+ "prettier": "^3.5.3",
+ "prettier-plugin-tailwindcss": "^0.6.12",
+ "stylelint": "^16.20.0",
+ "stylelint-config-standard": "^38.0.0",
+ "tailwindcss": "^3.4.14",
+ "tailwindcss-animate": "^1.0.7"
+ },
+ "config": {
+ "commitizen": {
+ "path": "./node_modules/cz-conventional-changelog"
+ }
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 00000000..7f57be41
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,10592 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ gulp:
+ specifier: ^5.0.1
+ version: 5.0.1
+ gulp-cli:
+ specifier: ^3.1.0
+ version: 3.1.0
+ gulp-ext-replace:
+ specifier: ^0.3.0
+ version: 0.3.0
+ gulp-htmlclean:
+ specifier: ^2.7.22
+ version: 2.7.22
+ gulp-htmlmin:
+ specifier: ^5.0.1
+ version: 5.0.1
+ gulp-minify-css:
+ specifier: ^1.2.4
+ version: 1.2.4
+ gulp-postcss:
+ specifier: ^10.0.0
+ version: 10.0.0(jiti@2.4.2)(postcss@8.5.6)
+ gulp-uglify-es:
+ specifier: ^3.0.0
+ version: 3.0.0
+ gulp-version-number:
+ specifier: ^0.2.4
+ version: 0.2.4
+ hexo:
+ specifier: ^7.3.0
+ version: 7.3.0(chokidar@3.6.0)
+ hexo-browsersync:
+ specifier: ^0.3.0
+ version: 0.3.0
+ hexo-excerpt:
+ specifier: ^1.3.1
+ version: 1.3.1
+ hexo-filter-nofollow:
+ specifier: ^2.0.2
+ version: 2.0.2
+ hexo-fs:
+ specifier: ^5.0.0
+ version: 5.0.0
+ hexo-generator-index:
+ specifier: ^4.0.0
+ version: 4.0.0
+ hexo-generator-sitemap:
+ specifier: ^3.0.1
+ version: 3.0.1(chokidar@3.6.0)
+ hexo-log:
+ specifier: ^4.1.0
+ version: 4.1.0
+ hexo-pagination:
+ specifier: ^4.0.0
+ version: 4.0.0
+ hexo-related-popular-posts:
+ specifier: ^5.0.1
+ version: 5.0.1
+ hexo-renderer-ejs:
+ specifier: ^2.0.0
+ version: 2.0.0
+ hexo-renderer-markdown-it:
+ specifier: ^5.0.0
+ version: 5.0.0
+ hexo-renderer-stylus:
+ specifier: ^3.0.1
+ version: 3.0.1
+ hexo-server:
+ specifier: ^3.0.0
+ version: 3.0.0
+ hexo-util:
+ specifier: ^3.3.0
+ version: 3.3.0
+ highlight.js:
+ specifier: ^11.11.1
+ version: 11.11.1
+ markdown-it-abbr:
+ specifier: ^2.0.0
+ version: 2.0.0
+ markdown-it-anchor:
+ specifier: ^9.2.0
+ version: 9.2.0(@types/markdown-it@14.1.2)(markdown-it@13.0.2)
+ markdown-it-attrs:
+ specifier: ^4.3.1
+ version: 4.3.1(markdown-it@13.0.2)
+ markdown-it-checkbox:
+ specifier: ^1.1.0
+ version: 1.1.0
+ markdown-it-emoji:
+ specifier: ^3.0.0
+ version: 3.0.0
+ markdown-it-footnote:
+ specifier: ^4.0.0
+ version: 4.0.0
+ markdown-it-highlight-lines:
+ specifier: ^1.0.2
+ version: 1.0.2
+ markdown-it-highlightjs:
+ specifier: ^4.2.0
+ version: 4.2.0
+ markdown-it-ins:
+ specifier: ^4.0.0
+ version: 4.0.0
+ markdown-it-shortcode-tag:
+ specifier: ^1.1.0
+ version: 1.1.0
+ markdown-it-sub:
+ specifier: ^2.0.0
+ version: 2.0.0
+ markdown-it-sup:
+ specifier: ^2.0.0
+ version: 2.0.0
+ markdown-it-task-lists:
+ specifier: ^2.1.1
+ version: 2.1.1
+ devDependencies:
+ '@commitlint/cli':
+ specifier: ^19.8.1
+ version: 19.8.1(@types/node@24.0.3)(typescript@5.8.3)
+ '@commitlint/config-conventional':
+ specifier: ^19.8.1
+ version: 19.8.1
+ autoprefixer:
+ specifier: ^10.4.21
+ version: 10.4.21(postcss@8.5.6)
+ commitizen:
+ specifier: ^4.3.1
+ version: 4.3.1(@types/node@24.0.3)(typescript@5.8.3)
+ cssnano:
+ specifier: ^7.0.7
+ version: 7.0.7(postcss@8.5.6)
+ cz-conventional-changelog:
+ specifier: ^3.3.0
+ version: 3.3.0(@types/node@24.0.3)(typescript@5.8.3)
+ eslint:
+ specifier: ^9.29.0
+ version: 9.29.0(jiti@2.4.2)
+ eslint-config-prettier:
+ specifier: ^10.1.5
+ version: 10.1.5(eslint@9.29.0(jiti@2.4.2))
+ gulp-clean-css:
+ specifier: ^4.3.0
+ version: 4.3.0
+ gulp-filesize:
+ specifier: ^0.0.6
+ version: 0.0.6
+ gulp-javascript-obfuscator:
+ specifier: ^1.1.6
+ version: 1.1.6
+ gulp-replace:
+ specifier: ^1.1.4
+ version: 1.1.4
+ gulp-rev:
+ specifier: ^11.0.0
+ version: 11.0.0(gulp@5.0.1)
+ gulp-terser:
+ specifier: ^2.1.0
+ version: 2.1.0
+ husky:
+ specifier: ^9.1.7
+ version: 9.1.7
+ lint-staged:
+ specifier: ^16.1.2
+ version: 16.1.2
+ npm-run-all2:
+ specifier: ^8.0.4
+ version: 8.0.4
+ postcss:
+ specifier: ^8.5.6
+ version: 8.5.6
+ postcss-cli:
+ specifier: ^11.0.1
+ version: 11.0.1(jiti@2.4.2)(postcss@8.5.6)
+ postcss-import:
+ specifier: ^16.1.1
+ version: 16.1.1(postcss@8.5.6)
+ prettier:
+ specifier: ^3.5.3
+ version: 3.5.3
+ prettier-plugin-tailwindcss:
+ specifier: ^0.6.12
+ version: 0.6.12(prettier@3.5.3)
+ stylelint:
+ specifier: ^16.20.0
+ version: 16.20.0(typescript@5.8.3)
+ stylelint-config-standard:
+ specifier: ^38.0.0
+ version: 38.0.0(stylelint@16.20.0(typescript@5.8.3))
+ tailwindcss:
+ specifier: ^3.4.14
+ version: 3.4.17
+ tailwindcss-animate:
+ specifier: ^1.0.7
+ version: 1.0.7(tailwindcss@3.4.17)
+
+packages:
+
+ '@adobe/css-tools@4.3.3':
+ resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==}
+
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.27.1':
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ engines: {node: '>=6.9.0'}
+
+ '@commitlint/cli@19.8.1':
+ resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==}
+ engines: {node: '>=v18'}
+ hasBin: true
+
+ '@commitlint/config-conventional@19.8.1':
+ resolution: {integrity: sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/config-validator@19.8.1':
+ resolution: {integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/ensure@19.8.1':
+ resolution: {integrity: sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/execute-rule@19.8.1':
+ resolution: {integrity: sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/format@19.8.1':
+ resolution: {integrity: sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/is-ignored@19.8.1':
+ resolution: {integrity: sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/lint@19.8.1':
+ resolution: {integrity: sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/load@19.8.1':
+ resolution: {integrity: sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/message@19.8.1':
+ resolution: {integrity: sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/parse@19.8.1':
+ resolution: {integrity: sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/read@19.8.1':
+ resolution: {integrity: sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/resolve-extends@19.8.1':
+ resolution: {integrity: sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/rules@19.8.1':
+ resolution: {integrity: sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/to-lines@19.8.1':
+ resolution: {integrity: sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/top-level@19.8.1':
+ resolution: {integrity: sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/types@19.8.1':
+ resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==}
+ engines: {node: '>=v18'}
+
+ '@csstools/css-parser-algorithms@3.0.5':
+ resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-tokenizer': ^3.0.4
+
+ '@csstools/css-tokenizer@3.0.4':
+ resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
+ engines: {node: '>=18'}
+
+ '@csstools/media-query-list-parser@4.0.3':
+ resolution: {integrity: sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
+
+ '@csstools/selector-specificity@5.0.0':
+ resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ postcss-selector-parser: ^7.0.0
+
+ '@dual-bundle/import-meta-resolve@4.1.0':
+ resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==}
+
+ '@eslint-community/eslint-utils@4.7.0':
+ resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.1':
+ resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/config-array@0.20.1':
+ resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/config-helpers@0.2.3':
+ resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.14.0':
+ resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.15.0':
+ resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.3.1':
+ resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.29.0':
+ resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.6':
+ resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.3.2':
+ resolution: {integrity: sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@gulpjs/messages@1.1.0':
+ resolution: {integrity: sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==}
+ engines: {node: '>=10.13.0'}
+
+ '@gulpjs/to-absolute-glob@4.0.0':
+ resolution: {integrity: sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==}
+ engines: {node: '>=10.13.0'}
+
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.6':
+ resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.3.1':
+ resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
+ engines: {node: '>=18.18'}
+
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@javascript-obfuscator/escodegen@2.3.0':
+ resolution: {integrity: sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==}
+ engines: {node: '>=6.0'}
+
+ '@javascript-obfuscator/estraverse@5.4.0':
+ resolution: {integrity: sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==}
+ engines: {node: '>=4.0'}
+
+ '@jridgewell/gen-mapping@0.3.8':
+ resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/source-map@0.3.6':
+ resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
+ '@keyv/serialize@1.0.3':
+ resolution: {integrity: sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@socket.io/component-emitter@3.1.2':
+ resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+
+ '@trysound/sax@0.2.0':
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+
+ '@types/conventional-commits-parser@5.0.1':
+ resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==}
+
+ '@types/cors@2.8.19':
+ resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/expect@1.20.4':
+ resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/linkify-it@5.0.0':
+ resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
+
+ '@types/markdown-it@14.1.2':
+ resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
+
+ '@types/mdurl@2.0.0':
+ resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
+
+ '@types/minimatch@3.0.5':
+ resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==}
+
+ '@types/node@24.0.3':
+ resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==}
+
+ '@types/validator@13.15.2':
+ resolution: {integrity: sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==}
+
+ '@types/vinyl@2.0.12':
+ resolution: {integrity: sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ a-sync-waterfall@1.0.1:
+ resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==}
+
+ abbrev@2.0.0:
+ resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ acorn@8.8.2:
+ resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ajv@8.17.1:
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
+ amdefine@1.0.1:
+ resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==}
+ engines: {node: '>=0.4.2'}
+
+ ansi-colors@1.1.0:
+ resolution: {integrity: sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==}
+ engines: {node: '>=0.10.0'}
+
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
+ ansi-escapes@7.0.0:
+ resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
+ engines: {node: '>=18'}
+
+ ansi-gray@0.1.1:
+ resolution: {integrity: sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==}
+ engines: {node: '>=0.10.0'}
+
+ ansi-regex@0.2.1:
+ resolution: {integrity: sha512-sGwIGMjhYdW26/IhwK2gkWWI8DRCVO6uj3hYgHT+zD+QL1pa37tM3ujhyfcJIYSbsxp7Gxhy7zrRW/1AHm4BmA==}
+ engines: {node: '>=0.10.0'}
+
+ ansi-regex@2.1.1:
+ resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
+ engines: {node: '>=0.10.0'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@1.1.0:
+ resolution: {integrity: sha512-f2PKUkN5QngiSemowa6Mrk9MPCdtFiOSmibjZ+j1qhLGHHYsqZwmBMRF3IRMVXo8sybDqx2fJl2d/8OphBoWkA==}
+ engines: {node: '>=0.10.0'}
+
+ ansi-styles@2.2.1:
+ resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
+ engines: {node: '>=0.10.0'}
+
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ ansi-wrap@0.1.0:
+ resolution: {integrity: sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==}
+ engines: {node: '>=0.10.0'}
+
+ any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+ anymatch@1.3.2:
+ resolution: {integrity: sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ archy@1.0.0:
+ resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==}
+
+ arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ arr-diff@2.0.0:
+ resolution: {integrity: sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==}
+ engines: {node: '>=0.10.0'}
+
+ arr-diff@4.0.0:
+ resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==}
+ engines: {node: '>=0.10.0'}
+
+ arr-flatten@1.1.0:
+ resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==}
+ engines: {node: '>=0.10.0'}
+
+ arr-union@3.1.0:
+ resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==}
+ engines: {node: '>=0.10.0'}
+
+ array-differ@1.0.0:
+ resolution: {integrity: sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==}
+ engines: {node: '>=0.10.0'}
+
+ array-differ@3.0.0:
+ resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==}
+ engines: {node: '>=8'}
+
+ array-each@1.0.1:
+ resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==}
+ engines: {node: '>=0.10.0'}
+
+ array-find-index@1.0.2:
+ resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==}
+ engines: {node: '>=0.10.0'}
+
+ array-ify@1.0.0:
+ resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
+
+ array-slice@1.1.0:
+ resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==}
+ engines: {node: '>=0.10.0'}
+
+ array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+
+ array-uniq@1.0.3:
+ resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==}
+ engines: {node: '>=0.10.0'}
+
+ array-unique@0.2.1:
+ resolution: {integrity: sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==}
+ engines: {node: '>=0.10.0'}
+
+ array-unique@0.3.2:
+ resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==}
+ engines: {node: '>=0.10.0'}
+
+ arrify@2.0.1:
+ resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==}
+ engines: {node: '>=8'}
+
+ asap@2.0.6:
+ resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
+
+ asn1@0.1.11:
+ resolution: {integrity: sha512-Fh9zh3G2mZ8qM/kwsiKwL2U2FmXxVsboP4x1mXjnhKHv3SmzaBZoYvxEQJz/YS2gnCgd8xlAVWcZnQyC9qZBsA==}
+ engines: {node: '>=0.4.9'}
+
+ asn1@0.2.6:
+ resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
+
+ assert-plus@0.1.5:
+ resolution: {integrity: sha512-brU24g7ryhRwGCI2y+1dGQmQXiZF7TtIj583S96y0jjdajIe6wn8BuXyELYhvD22dtIxDQVFk04YTJwwdwOYJw==}
+ engines: {node: '>=0.8'}
+
+ assert-plus@1.0.0:
+ resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
+ engines: {node: '>=0.8'}
+
+ assert@2.0.0:
+ resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==}
+
+ assign-symbols@1.0.0:
+ resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
+ engines: {node: '>=0.10.0'}
+
+ astral-regex@2.0.0:
+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
+ engines: {node: '>=8'}
+
+ async-done@2.0.0:
+ resolution: {integrity: sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==}
+ engines: {node: '>= 10.13.0'}
+
+ async-each-series@0.1.1:
+ resolution: {integrity: sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==}
+ engines: {node: '>=0.8.0'}
+
+ async-each@1.0.6:
+ resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==}
+
+ async-settle@2.0.0:
+ resolution: {integrity: sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==}
+ engines: {node: '>= 10.13.0'}
+
+ async@0.9.2:
+ resolution: {integrity: sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==}
+
+ async@2.6.4:
+ resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==}
+
+ async@3.2.6:
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ at-least-node@1.0.0:
+ resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
+ engines: {node: '>= 4.0.0'}
+
+ atob@2.1.2:
+ resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
+ engines: {node: '>= 4.5.0'}
+ hasBin: true
+
+ autoprefixer@10.4.21:
+ resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ aws-sign2@0.5.0:
+ resolution: {integrity: sha512-oqUX0DM5j7aPWPCnpWebiyNIj2wiNI87ZxnOMoGv0aE4TGlBy2N+5iWc6dQ/NOKZaBD2W6PVz8jtOGkWzSC5EA==}
+
+ aws-sign2@0.7.0:
+ resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
+
+ aws4@1.13.2:
+ resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==}
+
+ axios@0.21.4:
+ resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
+
+ b4a@1.6.7:
+ resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==}
+
+ bach@2.0.1:
+ resolution: {integrity: sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==}
+ engines: {node: '>=10.13.0'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ balanced-match@2.0.0:
+ resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==}
+
+ bare-events@2.5.4:
+ resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ base64id@2.0.0:
+ resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
+ engines: {node: ^4.5.0 || >= 5.9}
+
+ base64url@0.0.6:
+ resolution: {integrity: sha512-Nm33N5/uniFmlIxqu7wyfwUkAVhKdlY4wFHAnT6P+TJxPoaIASuAN7uyS1wUPsRTiv8yCT93p5P54txD7PRkVg==}
+
+ base64url@1.0.6:
+ resolution: {integrity: sha512-YJUNcKuU8Df1LhS3s9OzoYCAOZYHgAUGnDlPgXFCaJZwRzZLcnQ7uM9KRY6EFaJRvzxZqw2w+wCDigwpe+4XUw==}
+ hasBin: true
+
+ base@0.11.2:
+ resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
+ engines: {node: '>=0.10.0'}
+
+ basic-auth@2.0.1:
+ resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==}
+ engines: {node: '>= 0.8'}
+
+ batch@0.6.1:
+ resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
+
+ bcrypt-pbkdf@1.0.2:
+ resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
+
+ beeper@1.1.1:
+ resolution: {integrity: sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==}
+ engines: {node: '>=0.10.0'}
+
+ binary-extensions@1.13.1:
+ resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==}
+ engines: {node: '>=0.10.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ binaryextensions@2.3.0:
+ resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==}
+ engines: {node: '>=0.8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bl@0.9.5:
+ resolution: {integrity: sha512-njlCs8XLBIK7LCChTWfzWuIAxkpmmLXcL7/igCofFT1B039Sz0IPnAmosN5QaO22lU4qr8LcUz2ojUlE6pLkRQ==}
+
+ bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
+ bl@5.1.0:
+ resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
+
+ bluebird@3.7.2:
+ resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+ boom@0.4.2:
+ resolution: {integrity: sha512-OvfN8y1oAxxphzkl2SnCS+ztV/uVKTATtgLjWYg/7KwcNyf3rzpHxNQJZCKtsZd4+MteKczhWbSjtEX4bGgU9g==}
+ engines: {node: '>=0.8.0'}
+ deprecated: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@1.8.5:
+ resolution: {integrity: sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==}
+ engines: {node: '>=0.10.0'}
+
+ braces@2.3.2:
+ resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
+ engines: {node: '>=0.10.0'}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browser-sync-client@2.29.3:
+ resolution: {integrity: sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==}
+ engines: {node: '>=8.0.0'}
+
+ browser-sync-ui@2.29.3:
+ resolution: {integrity: sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==}
+
+ browser-sync@2.29.3:
+ resolution: {integrity: sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==}
+ engines: {node: '>= 8.0.0'}
+ hasBin: true
+
+ browserslist@4.25.0:
+ resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ bs-recipes@1.3.4:
+ resolution: {integrity: sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==}
+
+ buffer-equal-constant-time@1.0.1:
+ resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferstreams@1.0.1:
+ resolution: {integrity: sha512-LZmiIfQprMLS6/k42w/PTc7awhU8AdNNcUerxTgr01WlP9agR2SgMv0wjlYYFD6eDOi8WvofrTX8RayjR/AeUQ==}
+ engines: {node: '>= 0.10.0'}
+
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
+ cache-base@1.0.1:
+ resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
+ engines: {node: '>=0.10.0'}
+
+ cacheable@1.10.0:
+ resolution: {integrity: sha512-SSgQTAnhd7WlJXnGlIi4jJJOiHzgnM5wRMEPaXAU4kECTAMpBoYKoZ9i5zHmclIEZbxcu3j7yY/CF8DTmwIsHg==}
+
+ cachedir@2.3.0:
+ resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==}
+ engines: {node: '>=6'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camel-case@3.0.0:
+ resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==}
+
+ camel-case@4.1.2:
+ resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
+
+ camelcase-css@2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
+
+ camelcase-keys@1.0.0:
+ resolution: {integrity: sha512-hwNYKTjJTlDabjJp2xn0h8bRmOpObvXVgYbQmR+Xob/EeBDtYea3xttjr5hqiWqLWtI3/6xO7x1ZAktQ9up+ag==}
+ engines: {node: '>=0.10.0'}
+
+ camelcase-keys@2.1.0:
+ resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==}
+ engines: {node: '>=0.10.0'}
+
+ camelcase@1.2.1:
+ resolution: {integrity: sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==}
+ engines: {node: '>=0.10.0'}
+
+ camelcase@2.1.1:
+ resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==}
+ engines: {node: '>=0.10.0'}
+
+ caniuse-api@3.0.0:
+ resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
+
+ caniuse-lite@1.0.30001723:
+ resolution: {integrity: sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==}
+
+ caseless@0.12.0:
+ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
+
+ caseless@0.8.0:
+ resolution: {integrity: sha512-RtOAnto0D6IIVC+dU+vHyH0tXs6BfZ/s0kaaT5+6loiwoi9O3+J5iASBkliQHrd8GSRNGERS7f8pgaRc895bAg==}
+
+ chalk@0.5.1:
+ resolution: {integrity: sha512-bIKA54hP8iZhyDT81TOsJiQvR1gW+ZYSXFaZUAvoD4wCHdbHY2actmpTE4x344ZlFqHbvoxKOaESULTZN2gstg==}
+ engines: {node: '>=0.10.0'}
+
+ chalk@1.1.3:
+ resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
+ engines: {node: '>=0.10.0'}
+
+ chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ chance@1.1.9:
+ resolution: {integrity: sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==}
+
+ char-regex@1.0.2:
+ resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
+ engines: {node: '>=10'}
+
+ chardet@0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+
+ charenc@0.0.2:
+ resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==}
+
+ cheerio-select@2.1.0:
+ resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
+
+ cheerio@1.1.0:
+ resolution: {integrity: sha512-+0hMx9eYhJvWbgpKV9hN7jg0JcwydpopZE4hgi+KvQtByZXPp04NiCWU0LzcAbP63abZckIHkTQaXVF52mX3xQ==}
+ engines: {node: '>=18.17'}
+
+ chokidar@1.7.0:
+ resolution: {integrity: sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
+ class-utils@0.3.6:
+ resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
+ engines: {node: '>=0.10.0'}
+
+ class-validator@0.14.1:
+ resolution: {integrity: sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==}
+
+ clean-css@3.4.28:
+ resolution: {integrity: sha512-aTWyttSdI2mYi07kWqHi24NUU9YlELFKGOAgFzZjDN1064DMAOy2FBuoyGmkKRlXkbpXd0EVHmiVkbKhKoirTw==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ clean-css@4.2.3:
+ resolution: {integrity: sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==}
+ engines: {node: '>= 4.0'}
+
+ clean-css@4.2.4:
+ resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
+ engines: {node: '>= 4.0'}
+
+ cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+
+ cli-cursor@5.0.0:
+ resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
+ engines: {node: '>=18'}
+
+ cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+
+ cli-table@0.3.11:
+ resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==}
+ engines: {node: '>= 0.2.0'}
+
+ cli-truncate@4.0.0:
+ resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+ engines: {node: '>=18'}
+
+ cli-width@3.0.0:
+ resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+ engines: {node: '>= 10'}
+
+ cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ clone-buffer@1.0.0:
+ resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==}
+ engines: {node: '>= 0.10'}
+
+ clone-stats@0.0.1:
+ resolution: {integrity: sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==}
+
+ clone-stats@1.0.0:
+ resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==}
+
+ clone@1.0.4:
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
+
+ clone@2.1.2:
+ resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
+ engines: {node: '>=0.8'}
+
+ cloneable-readable@1.1.3:
+ resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==}
+
+ collection-visit@1.0.0:
+ resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==}
+ engines: {node: '>=0.10.0'}
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-support@1.1.3:
+ resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
+ hasBin: true
+
+ colord@2.9.3:
+ resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
+
+ colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+
+ colors@1.0.3:
+ resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==}
+ engines: {node: '>=0.1.90'}
+
+ columnify@1.6.0:
+ resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==}
+ engines: {node: '>=8.0.0'}
+
+ combined-stream@0.0.7:
+ resolution: {integrity: sha512-qfexlmLp9MyrkajQVyjEDb0Vj+KhRgR/rxLiVhaihlT+ZkX0lReqtH6Ack40CvMDERR4b5eFp3CreskpBs1Pig==}
+ engines: {node: '>= 0.8'}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ command-exists@1.2.9:
+ resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==}
+
+ commander@10.0.0:
+ resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==}
+ engines: {node: '>=14'}
+
+ commander@14.0.0:
+ resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==}
+ engines: {node: '>=20'}
+
+ commander@2.17.1:
+ resolution: {integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==}
+
+ commander@2.19.0:
+ resolution: {integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ commander@2.8.1:
+ resolution: {integrity: sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==}
+ engines: {node: '>= 0.6.x'}
+
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+
+ commander@5.1.0:
+ resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
+ engines: {node: '>= 6'}
+
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
+ commitizen@4.3.1:
+ resolution: {integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==}
+ engines: {node: '>= 12'}
+ hasBin: true
+
+ compare-func@2.0.0:
+ resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
+
+ component-emitter@1.3.1:
+ resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==}
+
+ compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+
+ compression@1.8.0:
+ resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==}
+ engines: {node: '>= 0.8.0'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ concat-stream@1.4.11:
+ resolution: {integrity: sha512-X3JMh8+4je3U1cQpG87+f9lXHDrqcb2MVLg9L7o8b1UZ0DzhRrUpdn65ttzu10PpJPPI3MQNkis+oha6TSA9Mw==}
+ engines: {'0': node >= 0.8}
+
+ connect-history-api-fallback@1.6.0:
+ resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==}
+ engines: {node: '>=0.8'}
+
+ connect-injector@0.4.4:
+ resolution: {integrity: sha512-hdBG8nXop42y2gWCqOV8y1O3uVk4cIU+SoxLCPyCUKRImyPiScoNiSulpHjoktRU1BdI0UzoUdxUa87thrcmHw==}
+ engines: {node: '>= 0.8.0'}
+
+ connect@3.6.6:
+ resolution: {integrity: sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==}
+ engines: {node: '>= 0.10.0'}
+
+ connect@3.7.0:
+ resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==}
+ engines: {node: '>= 0.10.0'}
+
+ conventional-changelog-angular@7.0.0:
+ resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
+ engines: {node: '>=16'}
+
+ conventional-changelog-conventionalcommits@7.0.2:
+ resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==}
+ engines: {node: '>=16'}
+
+ conventional-commit-types@3.0.0:
+ resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==}
+
+ conventional-commits-parser@5.0.0:
+ resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cookie@0.7.2:
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
+
+ copy-descriptor@0.1.1:
+ resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
+ engines: {node: '>=0.10.0'}
+
+ copy-props@4.0.0:
+ resolution: {integrity: sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==}
+ engines: {node: '>= 10.13.0'}
+
+ core-util-is@1.0.2:
+ resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+
+ cosmiconfig-typescript-loader@6.1.0:
+ resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==}
+ engines: {node: '>=v18'}
+ peerDependencies:
+ '@types/node': '*'
+ cosmiconfig: '>=9'
+ typescript: '>=5'
+
+ cosmiconfig@9.0.0:
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ crypt@0.0.2:
+ resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==}
+
+ cryptiles@0.2.2:
+ resolution: {integrity: sha512-gvWSbgqP+569DdslUiCelxIv3IYK5Lgmq1UrRnk+s1WxQOQ16j3GPDcjdtgL5Au65DU/xQi6q3xPtf5Kta+3IQ==}
+ engines: {node: '>=0.8.0'}
+ deprecated: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
+
+ css-declaration-sorter@7.2.0:
+ resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ postcss: ^8.0.9
+
+ css-functions-list@3.2.3:
+ resolution: {integrity: sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==}
+ engines: {node: '>=12 || >=16'}
+
+ css-select@4.3.0:
+ resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
+
+ css-select@5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+
+ css-tree@2.2.1:
+ resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ css-tree@2.3.1:
+ resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+ css-tree@3.1.0:
+ resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+ css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ cssnano-preset-default@7.0.7:
+ resolution: {integrity: sha512-jW6CG/7PNB6MufOrlovs1TvBTEVmhY45yz+bd0h6nw3h6d+1e+/TX+0fflZ+LzvZombbT5f+KC063w9VoHeHow==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ cssnano-utils@5.0.1:
+ resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ cssnano@7.0.7:
+ resolution: {integrity: sha512-evKu7yiDIF7oS+EIpwFlMF730ijRyLFaM2o5cTxRGJR9OKHKkc+qP443ZEVR9kZG0syaAJJCPJyfv5pbrxlSng==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ csso@5.0.5:
+ resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ ctype@0.5.3:
+ resolution: {integrity: sha512-T6CEkoSV4q50zW3TlTHMbzy1E5+zlnNcY+yb7tWVYlTwPhx9LpnfAkd4wecpWknDyptp4k97LUZeInlf6jdzBg==}
+ engines: {node: '>= 0.4'}
+
+ cuid@2.1.8:
+ resolution: {integrity: sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg==}
+ deprecated: Cuid and other k-sortable and non-cryptographic ids (Ulid, ObjectId, KSUID, all UUIDs) are all insecure. Use @paralleldrive/cuid2 instead.
+
+ currently-unhandled@0.4.1:
+ resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==}
+ engines: {node: '>=0.10.0'}
+
+ cz-conventional-changelog@3.3.0:
+ resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==}
+ engines: {node: '>= 10'}
+
+ dargs@8.1.0:
+ resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
+ engines: {node: '>=12'}
+
+ dashdash@1.14.1:
+ resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
+ engines: {node: '>=0.10'}
+
+ dateformat@1.0.12:
+ resolution: {integrity: sha512-5sFRfAAmbHdIts+eKjR9kYJoF0ViCMVX9yqLu5A7S/v+nd077KgCITOMiirmyCBiZpKLDXbBOkYm6tu7rX/TKg==}
+ hasBin: true
+
+ dateformat@2.2.0:
+ resolution: {integrity: sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==}
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.2:
+ resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.4.1:
+ resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
+
+ decode-uri-component@0.2.2:
+ resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
+ engines: {node: '>=0.10'}
+
+ dedent@0.7.0:
+ resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ defaults@1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ define-property@0.2.5:
+ resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==}
+ engines: {node: '>=0.10.0'}
+
+ define-property@1.0.0:
+ resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==}
+ engines: {node: '>=0.10.0'}
+
+ define-property@2.0.2:
+ resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==}
+ engines: {node: '>=0.10.0'}
+
+ delayed-stream@0.0.5:
+ resolution: {integrity: sha512-v+7uBd1pqe5YtgPacIIbZ8HuHeLFVNe4mUEyFDXL6KiqzEykjbw+5mXZXpGFgNVasdL4jWKgaKIXrEHiynN1LA==}
+ engines: {node: '>=0.4.0'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ depd@1.1.2:
+ resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
+ engines: {node: '>= 0.6'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ dependency-graph@1.0.0:
+ resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==}
+ engines: {node: '>=4'}
+
+ destroy@1.0.4:
+ resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==}
+
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ detect-file@1.0.0:
+ resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
+ engines: {node: '>=0.10.0'}
+
+ detect-indent@6.1.0:
+ resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
+ engines: {node: '>=8'}
+
+ dev-ip@1.0.1:
+ resolution: {integrity: sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==}
+ engines: {node: '>= 0.8.0'}
+ hasBin: true
+
+ didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+
+ dom-serializer@1.4.1:
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
+
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@4.3.1:
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
+ engines: {node: '>= 4'}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@2.8.0:
+ resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
+
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
+ dot-prop@5.3.0:
+ resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
+ engines: {node: '>=8'}
+
+ doublearray@0.0.2:
+ resolution: {integrity: sha512-aw55FtZzT6AmiamEj2kvmR6BuFqvYgKZUkfQ7teqVRNqD5UE0rw8IeW/3gieHNKQ5sPuDKlljWEn4bzv5+1bHw==}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ duplexer2@0.0.2:
+ resolution: {integrity: sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==}
+
+ each-props@3.0.0:
+ resolution: {integrity: sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==}
+ engines: {node: '>= 10.13.0'}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ easy-extender@2.3.4:
+ resolution: {integrity: sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==}
+ engines: {node: '>= 4.0.0'}
+
+ easy-transform-stream@1.0.1:
+ resolution: {integrity: sha512-ktkaa6XR7COAR3oj02CF3IOgz2m1hCaY3SfzvKT4Svt2MhHw9XCt+ncJNWfe2TGz31iqzNGZ8spdKQflj+Rlog==}
+ engines: {node: '>=14.16'}
+
+ eazy-logger@4.1.0:
+ resolution: {integrity: sha512-+mn7lRm+Zf1UT/YaH8WXtpU6PIV2iOjzP6jgKoiaq/VNrjYKp+OHZGe2znaLgDeFkw8cL9ffuaUm+nNnzcYyGw==}
+ engines: {node: '>= 0.8.0'}
+
+ ecc-jsbn@0.1.2:
+ resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==}
+
+ ecdsa-sig-formatter@1.0.11:
+ resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ ejs@3.1.10:
+ resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ electron-to-chromium@1.5.169:
+ resolution: {integrity: sha512-q7SQx6mkLy0GTJK9K9OiWeaBMV4XQtBSdf6MJUzDB/H/5tFXfIiX38Lci1Kl6SsgiEhz1SQI1ejEOU5asWEhwQ==}
+
+ emoji-regex@10.4.0:
+ resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
+ encoding-sniffer@0.2.1:
+ resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==}
+
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
+ engine.io-client@6.6.3:
+ resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==}
+
+ engine.io-parser@5.2.3:
+ resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
+ engines: {node: '>=10.0.0'}
+
+ engine.io@6.6.4:
+ resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==}
+ engines: {node: '>=10.2.0'}
+
+ entities@2.0.3:
+ resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==}
+
+ entities@2.2.0:
+ resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
+
+ entities@3.0.1:
+ resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==}
+ engines: {node: '>=0.12'}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ entities@6.0.1:
+ resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+ engines: {node: '>=0.12'}
+
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
+ environment@1.1.0:
+ resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
+ engines: {node: '>=18'}
+
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es6-object-assign@1.1.0:
+ resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eslint-config-prettier@10.1.5:
+ resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+
+ eslint-scope@7.1.1:
+ resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@3.3.0:
+ resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint@9.29.0:
+ resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ expand-brackets@0.1.5:
+ resolution: {integrity: sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==}
+ engines: {node: '>=0.10.0'}
+
+ expand-brackets@2.1.4:
+ resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==}
+ engines: {node: '>=0.10.0'}
+
+ expand-range@1.8.2:
+ resolution: {integrity: sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==}
+ engines: {node: '>=0.10.0'}
+
+ expand-tilde@2.0.2:
+ resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
+ engines: {node: '>=0.10.0'}
+
+ extend-shallow@2.0.1:
+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
+ engines: {node: '>=0.10.0'}
+
+ extend-shallow@3.0.2:
+ resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==}
+ engines: {node: '>=0.10.0'}
+
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
+ external-editor@3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+
+ extglob@0.3.2:
+ resolution: {integrity: sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==}
+ engines: {node: '>=0.10.0'}
+
+ extglob@2.0.4:
+ resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
+ engines: {node: '>=0.10.0'}
+
+ extsprintf@1.3.0:
+ resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
+ engines: {'0': node >=0.6.0}
+
+ fancy-log@1.3.3:
+ resolution: {integrity: sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==}
+ engines: {node: '>= 0.10'}
+
+ fancy-log@2.0.0:
+ resolution: {integrity: sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==}
+ engines: {node: '>=10.13.0'}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-equals@3.0.3:
+ resolution: {integrity: sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==}
+
+ fast-fifo@1.3.2:
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fast-levenshtein@3.0.0:
+ resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==}
+
+ fast-uri@3.0.6:
+ resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
+
+ fastest-levenshtein@1.0.16:
+ resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
+ engines: {node: '>= 4.9.1'}
+
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+
+ fdir@6.4.6:
+ resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ figures@3.2.0:
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
+
+ file-entry-cache@10.1.1:
+ resolution: {integrity: sha512-zcmsHjg2B2zjuBgjdnB+9q0+cWcgWfykIcsDkWDB4GTPtl1eXUA+gTI6sO0u01AqK3cliHryTU55/b2Ow1hfZg==}
+
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ filelist@1.0.4:
+ resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
+
+ filename-regex@2.0.1:
+ resolution: {integrity: sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==}
+ engines: {node: '>=0.10.0'}
+
+ filesize@2.0.4:
+ resolution: {integrity: sha512-XyVEXpwElavSK0SKn51E3960lTRfglsQA9goJN4QR+oyqStts1Wygs1FW3TFQrxJoGm4mcq3hTxDMN3Vs1cYwg==}
+ engines: {node: '>= 0.4.0'}
+
+ fill-range@2.2.4:
+ resolution: {integrity: sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==}
+ engines: {node: '>=0.10.0'}
+
+ fill-range@4.0.0:
+ resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==}
+ engines: {node: '>=0.10.0'}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ finalhandler@1.1.0:
+ resolution: {integrity: sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==}
+ engines: {node: '>= 0.8'}
+
+ finalhandler@1.1.2:
+ resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
+ engines: {node: '>= 0.8'}
+
+ find-node-modules@2.1.3:
+ resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==}
+
+ find-root@1.1.0:
+ resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
+
+ find-up@1.1.2:
+ resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==}
+ engines: {node: '>=0.10.0'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ find-up@7.0.0:
+ resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
+ engines: {node: '>=18'}
+
+ findup-sync@4.0.0:
+ resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==}
+ engines: {node: '>= 8'}
+
+ findup-sync@5.0.0:
+ resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==}
+ engines: {node: '>= 10.13.0'}
+
+ fined@2.0.0:
+ resolution: {integrity: sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==}
+ engines: {node: '>= 10.13.0'}
+
+ first-chunk-stream@5.0.0:
+ resolution: {integrity: sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ flagged-respawn@2.0.0:
+ resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==}
+ engines: {node: '>= 10.13.0'}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flat-cache@6.1.10:
+ resolution: {integrity: sha512-B6/v1f0NwjxzmeOhzfXPGWpKBVA207LS7lehaVKQnFrVktcFRfkzjZZ2gwj2i1TkEUMQht7ZMJbABUT5N+V1Nw==}
+
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
+ follow-redirects@1.15.9:
+ resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
+
+ for-in@1.0.2:
+ resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
+ engines: {node: '>=0.10.0'}
+
+ for-own@0.1.5:
+ resolution: {integrity: sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==}
+ engines: {node: '>=0.10.0'}
+
+ for-own@1.0.0:
+ resolution: {integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==}
+ engines: {node: '>=0.10.0'}
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ forever-agent@0.5.2:
+ resolution: {integrity: sha512-PDG5Ef0Dob/JsZUxUltJOhm/Y9mlteAE+46y3M9RBz/Rd3QVENJ75aGRhN56yekTUboaBIkd8KVWX2NjF6+91A==}
+
+ forever-agent@0.6.1:
+ resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
+
+ form-data@0.2.0:
+ resolution: {integrity: sha512-LkinaG6JazVhYj2AKi67NOIAhqXcBOQACraT0WdhWW4ZO3kTiS0X7C1nJ1jFZf6wak4bVHIA/oOzWkh2ThAipg==}
+ engines: {node: '>= 0.8'}
+
+ form-data@2.3.3:
+ resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
+ engines: {node: '>= 0.12'}
+
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
+ fragment-cache@0.2.1:
+ resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
+ engines: {node: '>=0.10.0'}
+
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ fs-extra@11.3.0:
+ resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
+ engines: {node: '>=14.14'}
+
+ fs-extra@3.0.1:
+ resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==}
+
+ fs-extra@9.1.0:
+ resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
+ engines: {node: '>=10'}
+
+ fs-mkdirp-stream@2.0.1:
+ resolution: {integrity: sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==}
+ engines: {node: '>=10.13.0'}
+
+ fs-path@0.0.24:
+ resolution: {integrity: sha512-kKxBYWJVCidJpBkp2pj9yn9myAoe+fwk/w8PfZQS4RfjB0oY9pkD4MQQQBq/NQib6Yq9EhGZgzUv/NORK/k+5A==}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@1.2.13:
+ resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==}
+ engines: {node: '>= 4.0'}
+ os: [darwin]
+ deprecated: Upgrade to fsevents v2 to mitigate potential security issues
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ ga-analytics@0.0.7:
+ resolution: {integrity: sha512-Pd9rC+/37LZK4NC43NrMle7gQxElviZxhXjS5fgJvS7lMr1XWZ7of1mdx9JF/zMviv2EbeNLSG4blvQ0c582ZQ==}
+ hasBin: true
+
+ gapitoken@0.1.5:
+ resolution: {integrity: sha512-DmqSnPk0Zy5H2yEe/4FeY6rWsIO2s8Dpnn4EqrN0ZfVI4D1QoCHKfy9Vz0YxMLW25Jivp33MDCyWS6nnwBAGEw==}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-east-asian-width@1.3.0:
+ resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
+ engines: {node: '>=18'}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ get-stdin@4.0.1:
+ resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==}
+ engines: {node: '>=0.10.0'}
+
+ get-value@2.0.6:
+ resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
+ engines: {node: '>=0.10.0'}
+
+ getpass@0.1.7:
+ resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
+
+ git-raw-commits@4.0.0:
+ resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ glob-base@0.3.0:
+ resolution: {integrity: sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==}
+ engines: {node: '>=0.10.0'}
+
+ glob-parent@2.0.0:
+ resolution: {integrity: sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob-stream@8.0.3:
+ resolution: {integrity: sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A==}
+ engines: {node: '>=10.13.0'}
+
+ glob-watcher@6.0.0:
+ resolution: {integrity: sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==}
+ engines: {node: '>= 10.13.0'}
+
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ global-directory@4.0.1:
+ resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
+ engines: {node: '>=18'}
+
+ global-modules@1.0.0:
+ resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
+ engines: {node: '>=0.10.0'}
+
+ global-modules@2.0.0:
+ resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==}
+ engines: {node: '>=6'}
+
+ global-prefix@1.0.2:
+ resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
+ engines: {node: '>=0.10.0'}
+
+ global-prefix@3.0.0:
+ resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==}
+ engines: {node: '>=6'}
+
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
+ globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+
+ globjoin@0.1.4:
+ resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==}
+
+ glogg@1.0.2:
+ resolution: {integrity: sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==}
+ engines: {node: '>= 0.10'}
+
+ glogg@2.2.0:
+ resolution: {integrity: sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==}
+ engines: {node: '>= 10.13.0'}
+
+ googleapis@1.1.5:
+ resolution: {integrity: sha512-eoy/QAkhohkjziIpqybTsUtPxMDmtVjK4uJSCerU7RcrVu9qae7tJIvRsyMgHJ7fF90FV/j8Wv2ESsGzZqUwxA==}
+ engines: {node: '>=0.10'}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ graceful-readlink@1.0.1:
+ resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==}
+
+ gulp-clean-css@4.3.0:
+ resolution: {integrity: sha512-mGyeT3qqFXTy61j0zOIciS4MkYziF2U594t2Vs9rUnpkEHqfu6aDITMp8xOvZcvdX61Uz3y1mVERRYmjzQF5fg==}
+
+ gulp-cli@3.1.0:
+ resolution: {integrity: sha512-zZzwlmEsTfXcxRKiCHsdyjZZnFvXWM4v1NqBJSYbuApkvVKivjcmOS2qruAJ+PkEHLFavcDKH40DPc1+t12a9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ gulp-ext-replace@0.3.0:
+ resolution: {integrity: sha512-lWElR/wZrgUFcdyhtfgMMHet6r8n2NQlNJC/7kjbIL8uD3yCPBwA9dp8SkLY1ZGW7gURrmsMSDBakDsjVCyxzw==}
+
+ gulp-filesize@0.0.6:
+ resolution: {integrity: sha512-4HoiH9M5HuczHvBNnjCQJNUh7GbxGxg7aQE69zaof0i4lnhSBMWVciBstjIjaYfz2n93PtQNEZ6zfAXay85rmg==}
+
+ gulp-htmlclean@2.7.22:
+ resolution: {integrity: sha512-MsY0s/WsxGtBrobfU0gTvKpTSG2N+Cf2VnUGoZFpy5lYzeEcF7qxu5zx3Synve8pJQCzZh8xkbzD5UR5MJIvVQ==}
+ engines: {node: '>= 0.8.0'}
+
+ gulp-htmlmin@5.0.1:
+ resolution: {integrity: sha512-ASlyDPZOSKjHYUifYV0rf9JPDflN9IRIb8lw2vRqtYMC4ljU3zAmnnaVXwFQ3H+CfXxZSUesZ2x7jrnPJu93jA==}
+ engines: {node: '>= 6.0'}
+
+ gulp-javascript-obfuscator@1.1.6:
+ resolution: {integrity: sha512-oiROhi7Zlu/0fM2h20jBFPaDOZicilT6kN+97Si82yieeFqr6l70o2R3gZ2Ah0u8v5IqGa+Pt8c2q3UnkMuk2A==}
+
+ gulp-minify-css@1.2.4:
+ resolution: {integrity: sha512-byBqFQM/HrZoUVYihu/03iYH4m7U5TjSGhr6/7JvpMHh9+woewsCtEp6Noif2VXB+idDoM4ECd9sw+St+KFqsg==}
+ deprecated: Please use gulp-clean-css
+
+ gulp-plugin-extras@0.3.0:
+ resolution: {integrity: sha512-I/kOBSpo61QsGQZcqozZYEnDseKvpudUafVVWDLYgBFAUJ37kW5R8Sjw9cMYzpGyPUfEYOeoY4p+dkfLqgyJUQ==}
+ engines: {node: '>=18'}
+
+ gulp-postcss@10.0.0:
+ resolution: {integrity: sha512-z1RF2RJEX/BvFsKN11PXai8lRmihZTiHnlJf7Zu8uHaA/Q7Om4IeN8z1NtMAW5OiLwUY02H0DIFl9tHl0CNSgA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ gulp-replace@1.1.4:
+ resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==}
+ engines: {node: '>=10'}
+
+ gulp-rev@11.0.0:
+ resolution: {integrity: sha512-KJSyw0qMQBL0xB3YhYrdinelbnWnYHDxj3jqVL2Xvn8bUA1lh7py5/2Z6fUgIWiX+F1XyKYVxI8yy9asIAvZJA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ gulp: '>=4'
+ peerDependenciesMeta:
+ gulp:
+ optional: true
+
+ gulp-terser@2.1.0:
+ resolution: {integrity: sha512-lQ3+JUdHDVISAlUIUSZ/G9Dz/rBQHxOiYDQ70IVWFQeh4b33TC1MCIU+K18w07PS3rq/CVc34aQO4SUbdaNMPQ==}
+ engines: {node: '>=10'}
+
+ gulp-uglify-es@3.0.0:
+ resolution: {integrity: sha512-dQ3czMFFojNgCajcrYl0oa98+YayaQ8kXRdaacpZRZ3iw2sdVURfdt8y8Ki1ogZGQqw8BUawnB7V6NkanxqnDg==}
+
+ gulp-util@2.2.20:
+ resolution: {integrity: sha512-9rtv4sj9EtCWYGD15HQQvWtRBtU9g1t0+w29tphetHxjxEAuBKQJkhGqvlLkHEtUjEgoqIpsVwPKU1yMZAa+wA==}
+ engines: {node: '>= 0.9'}
+ deprecated: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
+
+ gulp-util@3.0.8:
+ resolution: {integrity: sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==}
+ engines: {node: '>=0.10'}
+ deprecated: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
+
+ gulp-version-number@0.2.4:
+ resolution: {integrity: sha512-ssGbyFFdIufR0TpSE35LSb2B1rAEzJR9pdjI0rMiuK78C3KN4TA1YsphsKj69dEBvdsXloa/0NaSCqeqHkPZHA==}
+ engines: {node: '>= 0.9'}
+
+ gulp@5.0.1:
+ resolution: {integrity: sha512-PErok3DZSA5WGMd6XXV3IRNO0mlB+wW3OzhFJLEec1jSERg2j1bxJ6e5Fh6N6fn3FH2T9AP4UYNb/pYlADB9sA==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ gulplog@1.0.0:
+ resolution: {integrity: sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==}
+ engines: {node: '>= 0.10'}
+
+ gulplog@2.2.0:
+ resolution: {integrity: sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==}
+ engines: {node: '>= 10.13.0'}
+
+ har-schema@2.0.0:
+ resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==}
+ engines: {node: '>=4'}
+
+ har-validator@5.1.5:
+ resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==}
+ engines: {node: '>=6'}
+ deprecated: this library is no longer supported
+
+ has-ansi@0.1.0:
+ resolution: {integrity: sha512-1YsTg1fk2/6JToQhtZkArMkurq8UoWU1Qe0aR3VUHjgij4nOylSWLWAtBXoZ4/dXOmugfLGm1c+QhuD0JyedFA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ has-ansi@2.0.0:
+ resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
+ engines: {node: '>=0.10.0'}
+
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-gulplog@0.1.0:
+ resolution: {integrity: sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==}
+ engines: {node: '>= 0.10'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ has-value@0.3.1:
+ resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==}
+ engines: {node: '>=0.10.0'}
+
+ has-value@1.0.0:
+ resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==}
+ engines: {node: '>=0.10.0'}
+
+ has-values@0.1.4:
+ resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==}
+ engines: {node: '>=0.10.0'}
+
+ has-values@1.0.0:
+ resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==}
+ engines: {node: '>=0.10.0'}
+
+ hasha@3.0.0:
+ resolution: {integrity: sha512-w0Kz8lJFBoyaurBiNrIvxPqr/gJ6fOfSkpAPOepN3oECqGJag37xPbOv57izi/KP8auHgNYxn5fXtAb+1LsJ6w==}
+ engines: {node: '>=4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hawk@1.1.1:
+ resolution: {integrity: sha512-am8sVA2bCJIw8fuuVcKvmmNnGFUGW8spTkVtj2fXTEZVkfN42bwFZFtDem57eFi+NSxurJB8EQ7Jd3uCHLn8Vw==}
+ engines: {node: '>=0.8.0'}
+ deprecated: This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ hexo-browsersync@0.3.0:
+ resolution: {integrity: sha512-5grkDUG/jci1LgImUFHTGMhXRYFKYuBVVf1L62UAhd/IC/L3EfGtKXyPVqvxyVb4Pc5STY5tQR46xoBJLlWJNw==}
+ engines: {node: '>= 0.10.0'}
+
+ hexo-cli@4.3.2:
+ resolution: {integrity: sha512-druJeBgLpG9ncDS5AhBHdAXk0G4CFj8Qes09pApyZ6bR+nJW1JYiDMuilhudaKDdq+1l49jWXVTidkcb7p0Jbw==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ hexo-excerpt@1.3.1:
+ resolution: {integrity: sha512-IIK3SxqUxMPJyU2DlN6jKLIpz8fb3QZw6i+FIk6D8T3ncyhPCxnaxAiuj23jdyhsBzyQEpSERcK8SDlHXhYZDQ==}
+
+ hexo-filter-nofollow@2.0.2:
+ resolution: {integrity: sha512-roIkEIkGOR22EPMoy8iKrufDoAH25LOT5ZeVXVLavEpM757Y96kfUhyathryMLXr326EURffgkZAKsVf3EDl0A==}
+ engines: {node: '>= 8.6.0'}
+
+ hexo-front-matter@4.2.1:
+ resolution: {integrity: sha512-sJJI0GNmejYiwBvgnGRKn5V3sbODB4dNPr8jyw2Qp0PRHr4Uuyv8iyxw6WfK3+T7yvzYvJOh+tZ7jnwr2BYARA==}
+ engines: {node: '>=14'}
+
+ hexo-fs@0.2.3:
+ resolution: {integrity: sha512-rLB1rMVUW3csAljvJgHfyjemL0BrmcUZfBf9hJe6S0pA53igFa3ON0PFwomvoLs1Wdmjs9Awnw9Tru4PjWFSlQ==}
+ engines: {node: '>=6.9.0'}
+
+ hexo-fs@4.1.3:
+ resolution: {integrity: sha512-Q92zQ5PlVDouvSWFLXQoFSTLIUIODikUJs2BfAXQglyOEjN1dOQn1Z5Nimk/7GHof17R5h/uObCQLnZAjzI2tg==}
+ engines: {node: '>=14'}
+
+ hexo-fs@5.0.0:
+ resolution: {integrity: sha512-oBkg1QgXyb4JxipaH+yCV/7E7XOUASTK6x1pocWvLw6U2mB6VfLENgYg61ft9Qn6JCiKSzs7FU4vyTUy6gIPvQ==}
+ engines: {node: '>=18'}
+
+ hexo-generator-index@4.0.0:
+ resolution: {integrity: sha512-KeM7mOCKWINGFAk1E+CkjMMgqFIv8oaRbGxR7ipkQAp44o4aopkVftma4sdIplOq9WQEWfVYDUK5gEv9J3nzUg==}
+ engines: {node: '>=18'}
+
+ hexo-generator-sitemap@3.0.1:
+ resolution: {integrity: sha512-n+0KLNmq6TLbiZPTQF6NY5MbEem/O+DFx0lgQZNQcU4tdjXIZRrQJs+KRKeT66NTkdlYTqb4WwCxswLqQz0crA==}
+ engines: {node: '>=12.13.0'}
+
+ hexo-i18n@2.0.0:
+ resolution: {integrity: sha512-dkUXecEtChaQMdTHN4WR13c8GwKqjbSOZPJS9qDqV6Ebnb77Wa/nQzWFckhP0dCps3a9lUQBd8hYGOMbOosiQQ==}
+ engines: {node: '>=14'}
+
+ hexo-log@4.1.0:
+ resolution: {integrity: sha512-i2Sgxk8Cgx5viSjq5qW5N/rBFfwoCKQcH8qnnW1fawCapcdEAhIsq+Y3vbrs9bssyDlyU6Vqm4oQmosREaNI7Q==}
+ engines: {node: '>=14'}
+
+ hexo-pagination@3.0.0:
+ resolution: {integrity: sha512-8oo1iozloZo7TojPVYg4IxL3SJKCBdSJ908fTlIxIK7TWJIKdYnQlW31+12DBJ0NhVZA/lZisPObGF08wT8fKw==}
+ engines: {node: '>=14'}
+
+ hexo-pagination@4.0.0:
+ resolution: {integrity: sha512-jNG6AX3EHzY3FRfdzB46tZ833CUX4WudZue3yv6kKaVCCWR61iwFL9LD6xQadvwHBuT1oHy444dJClWORG4sxg==}
+ engines: {node: '>=18'}
+
+ hexo-related-popular-posts@5.0.1:
+ resolution: {integrity: sha512-X+7leZ708sXq1bgayful2HaGU22XAGPDZjqzpFUoeP8mXmJL51E2p66gqs7Xu+rygu4MMJQJvRK/fzGbHa8eqQ==}
+ engines: {node: '>=8.10.0'}
+
+ hexo-renderer-ejs@2.0.0:
+ resolution: {integrity: sha512-qCjE1IdwgDgv65qyb0KMVCwCdSVAkH0vwAe9XihjvaKWkmb9dtt8DgErOdqCXn0HReSyWiEVP2BrLRj3gyHwOQ==}
+ engines: {node: '>=12'}
+
+ hexo-renderer-markdown-it@5.0.0:
+ resolution: {integrity: sha512-9A4Dpy80hk7+SQ3RGqpWCV1LxnV1gjHSj4N0oGmXIfl/yjy+jMKLRAXIDVonxaD72rg4kzW4ZSqYZBIcgxTAeg==}
+ engines: {node: '>=10.13.0'}
+
+ hexo-renderer-stylus@3.0.1:
+ resolution: {integrity: sha512-cFm8ZwShBBeFcQwOXc8EK7lIZnSYVD6OJykdL4GBw99hxc4eD5Hlsi32nRzE8sgKv00jhX1s9Da3GVVFMPAVQg==}
+ engines: {node: '>=14'}
+
+ hexo-server@3.0.0:
+ resolution: {integrity: sha512-u4s0ty9Aew6jV+a9oMrXBwhrRpUQ0U8PWM/88a5aHgDru58VY81mVrxOFxs788NAsWQ8OvsJtF5m7mnXoRnSIA==}
+ engines: {node: '>=12.13.0'}
+
+ hexo-util@2.7.0:
+ resolution: {integrity: sha512-hQM3h34nhDg0bSe/Tg1lnpODvNkz7h2u0+lZGzlKL0Oufp+5KCAEUX9wal7/xC7ax3/cwEn8IuoU75kNpZLpJQ==}
+ engines: {node: '>=12.4.0'}
+
+ hexo-util@3.3.0:
+ resolution: {integrity: sha512-YvGngXijE2muEh5L/VI4Fmjqb+/yAkmY+VuyhWVoRwQu1X7bmWodsfYRXX7CUYhi5LqsvH8FAe/yBW1+f6ZX4Q==}
+ engines: {node: '>=14'}
+
+ hexo@7.3.0:
+ resolution: {integrity: sha512-dOe8mzBKrvjubW5oBmyhcnQDpC+M2xmAMLae5K+o+SkHxyvAhShkS2VQZoTsOLIJKY6xilv7dzCjCvE7ol/NHQ==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ highlight.js@11.11.1:
+ resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
+ engines: {node: '>=12.0.0'}
+
+ hoek@0.9.1:
+ resolution: {integrity: sha512-ZZ6eGyzGjyMTmpSPYVECXy9uNfqBR7x5CavhUaLOeD6W0vWK1mp/b7O3f86XE0Mtfo9rZ6Bh3fnuw9Xr8MF9zA==}
+ engines: {node: '>=0.8.0'}
+ deprecated: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
+
+ homedir-polyfill@1.0.3:
+ resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
+ engines: {node: '>=0.10.0'}
+
+ hookified@1.9.1:
+ resolution: {integrity: sha512-u3pxtGhKjcSXnGm1CX6aXS9xew535j3lkOCegbA6jdyh0BaAjTbXI4aslKstCr6zUNtoCxFGFKwjbSHdGrMB8g==}
+
+ hosted-git-info@2.8.9:
+ resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+
+ html-minifier@3.5.21:
+ resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ html-tags@3.3.1:
+ resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
+ engines: {node: '>=8'}
+
+ htmlclean@3.0.8:
+ resolution: {integrity: sha512-pxe6KHAQFvn407iNVNs8jpQ43BSy0w2VJ7DOUrbl/wOOy33RgDR1IcOplYqseQBBcdJLEozzeL9RziGCdK2Zsg==}
+ engines: {node: '>= 0.8.0'}
+
+ htmlparser2@10.0.0:
+ resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
+
+ htmlparser2@6.1.0:
+ resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==}
+
+ htmlparser2@7.2.0:
+ resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==}
+
+ htmlparser2@9.1.0:
+ resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==}
+
+ http-errors@1.6.3:
+ resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==}
+ engines: {node: '>= 0.6'}
+
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
+ http-proxy@1.18.1:
+ resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
+ engines: {node: '>=8.0.0'}
+
+ http-signature@0.10.1:
+ resolution: {integrity: sha512-coK8uR5rq2IMj+Hen+sKPA5ldgbCc1/spPdKCL1Fw6h+D0s/2LzMcRK0Cqufs1h0ryx/niwBHGFu8HC3hwU+lA==}
+ engines: {node: '>=0.8'}
+
+ http-signature@1.2.0:
+ resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==}
+ engines: {node: '>=0.8', npm: '>=1.3.7'}
+
+ husky@9.1.7:
+ resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ ignore@7.0.5:
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+ engines: {node: '>= 4'}
+
+ immutable@3.8.2:
+ resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==}
+ engines: {node: '>=0.10.0'}
+
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
+ import-meta-resolve@4.1.0:
+ resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@1.2.2:
+ resolution: {integrity: sha512-Z1vqf6lDC3f4N2mWqRywY6odjRatPNGDZgUr4DY9MLC14+Fp2/y+CI/RnNGlb8hD6ckscE/8DlZUwHUaiDBshg==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ indent-string@2.1.0:
+ resolution: {integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==}
+ engines: {node: '>=0.10.0'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.3:
+ resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
+ ini@4.1.1:
+ resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ inquirer@8.2.5:
+ resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
+ engines: {node: '>=12.0.0'}
+
+ interpret@3.1.1:
+ resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
+ engines: {node: '>=10.13.0'}
+
+ inversify@6.0.1:
+ resolution: {integrity: sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==}
+
+ is-absolute@1.0.0:
+ resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
+ engines: {node: '>=0.10.0'}
+
+ is-accessor-descriptor@1.0.1:
+ resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==}
+ engines: {node: '>= 0.10'}
+
+ is-arguments@1.2.0:
+ resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
+ engines: {node: '>= 0.4'}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-binary-path@1.0.1:
+ resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==}
+ engines: {node: '>=0.10.0'}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-buffer@1.1.6:
+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-data-descriptor@1.0.1:
+ resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==}
+ engines: {node: '>= 0.4'}
+
+ is-descriptor@0.1.7:
+ resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==}
+ engines: {node: '>= 0.4'}
+
+ is-descriptor@1.0.3:
+ resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==}
+ engines: {node: '>= 0.4'}
+
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ is-dotfile@1.0.3:
+ resolution: {integrity: sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==}
+ engines: {node: '>=0.10.0'}
+
+ is-equal-shallow@0.1.3:
+ resolution: {integrity: sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==}
+ engines: {node: '>=0.10.0'}
+
+ is-extendable@0.1.1:
+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
+ engines: {node: '>=0.10.0'}
+
+ is-extendable@1.0.1:
+ resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
+ engines: {node: '>=0.10.0'}
+
+ is-extglob@1.0.0:
+ resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==}
+ engines: {node: '>=0.10.0'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-finite@1.1.0:
+ resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+
+ is-fullwidth-code-point@5.0.0:
+ resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ engines: {node: '>=18'}
+
+ is-generator-function@1.1.0:
+ resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@2.0.1:
+ resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-interactive@1.0.0:
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
+
+ is-nan@1.3.2:
+ resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+ engines: {node: '>= 0.4'}
+
+ is-negated-glob@1.0.0:
+ resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==}
+ engines: {node: '>=0.10.0'}
+
+ is-number-like@1.0.8:
+ resolution: {integrity: sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==}
+
+ is-number@2.1.0:
+ resolution: {integrity: sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@3.0.0:
+ resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@4.0.0:
+ resolution: {integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-obj@2.0.0:
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+ engines: {node: '>=8'}
+
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
+ is-plain-object@2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
+
+ is-plain-object@5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+
+ is-posix-bracket@0.1.1:
+ resolution: {integrity: sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-primitive@2.0.0:
+ resolution: {integrity: sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==}
+ engines: {node: '>=0.10.0'}
+
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-relative@1.0.0:
+ resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==}
+ engines: {node: '>=0.10.0'}
+
+ is-stream@1.1.0:
+ resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-text-path@2.0.0:
+ resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==}
+ engines: {node: '>=8'}
+
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
+
+ is-typedarray@1.0.0:
+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
+
+ is-unc-path@1.0.0:
+ resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ is-utf8@0.2.1:
+ resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==}
+
+ is-valid-glob@1.0.0:
+ resolution: {integrity: sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==}
+ engines: {node: '>=0.10.0'}
+
+ is-windows@1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
+ engines: {node: '>=0.10.0'}
+
+ is-wsl@1.1.0:
+ resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==}
+ engines: {node: '>=4'}
+
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
+ isarray@0.0.1:
+ resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isexe@3.1.1:
+ resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
+ engines: {node: '>=16'}
+
+ isobject@2.1.0:
+ resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==}
+ engines: {node: '>=0.10.0'}
+
+ isobject@3.0.1:
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+ engines: {node: '>=0.10.0'}
+
+ isstream@0.1.2:
+ resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
+
+ istextorbinary@3.3.0:
+ resolution: {integrity: sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==}
+ engines: {node: '>=8'}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jake@10.9.2:
+ resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ javascript-obfuscator@4.1.1:
+ resolution: {integrity: sha512-gt+KZpIIrrxXHEQGD8xZrL8mTRwRY0U76/xz/YX0gZdPrSqQhT/c7dYLASlLlecT3r+FxE7je/+C0oLnTDCx4A==}
+ engines: {node: '>=12.22.0'}
+ hasBin: true
+
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
+ jiti@2.4.2:
+ resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
+ hasBin: true
+
+ js-string-escape@1.0.1:
+ resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==}
+ engines: {node: '>= 0.8'}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml-js-types@1.0.1:
+ resolution: {integrity: sha512-5tpfyORs8OQ43alNERbWfYRCtWgykvzYgY46fUhrQi2+kS7N0NuuFYLZ/IrfmVm5muLTndeMublgraXiFRjEPw==}
+ peerDependencies:
+ js-yaml: 4.x
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ jsbn@0.1.1:
+ resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-parse-even-better-errors@4.0.0:
+ resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+ json-schema@0.4.0:
+ resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ jsonfile@3.0.1:
+ resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==}
+
+ jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ jsprim@1.4.2:
+ resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
+ engines: {node: '>=0.6.0'}
+
+ jwa@1.0.2:
+ resolution: {integrity: sha512-3InPmrUtackTvLXsoN6NtvgNMYDUd+dFQJ3od4GmMonXIPpxV9AYl4LyH/7Pb9GwaXtBpwVgAu8ue+uVrG65Lg==}
+
+ jws@3.0.0:
+ resolution: {integrity: sha512-Me6ywrnys7VjF8S0ipMSOrQGe5UFeIOg6oLLey7Dqpbtl6ZBRwLeOZ5VAHFmvcxlyPFtey2XAaYKmzG6bjt7lA==}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ keyv@5.3.4:
+ resolution: {integrity: sha512-ypEvQvInNpUe+u+w8BIcPkQvEqXquyyibWE/1NB5T2BTzIpS5cGEV1LZskDzPSTvNAaT4+5FutvzlvnkxOSKlw==}
+
+ kind-of@3.2.2:
+ resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
+ engines: {node: '>=0.10.0'}
+
+ kind-of@4.0.0:
+ resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==}
+ engines: {node: '>=0.10.0'}
+
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
+ known-css-properties@0.36.0:
+ resolution: {integrity: sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==}
+
+ kuromoji@0.1.2:
+ resolution: {integrity: sha512-V0dUf+C2LpcPEXhoHLMAop/bOht16Dyr+mDiIE39yX3vqau7p80De/koFqpiTcL1zzdZlc3xuHZ8u5gjYRfFaQ==}
+
+ last-run@2.0.0:
+ resolution: {integrity: sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==}
+ engines: {node: '>= 10.13.0'}
+
+ lead@4.0.0:
+ resolution: {integrity: sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==}
+ engines: {node: '>=10.13.0'}
+
+ levn@0.3.0:
+ resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
+ engines: {node: '>= 0.8.0'}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ libphonenumber-js@1.12.9:
+ resolution: {integrity: sha512-VWwAdNeJgN7jFOD+wN4qx83DTPMVPPAUyx9/TUkBXKLiNkuWWk6anV0439tgdtwaJDrEdqkvdN22iA6J4bUCZg==}
+
+ liftoff@5.0.1:
+ resolution: {integrity: sha512-wwLXMbuxSF8gMvubFcFRp56lkFV69twvbU5vDPbaw+Q+/rF8j0HKjGbIdlSi+LuJm9jf7k9PB+nTxnsLMPcv2Q==}
+ engines: {node: '>=10.13.0'}
+
+ lilconfig@3.1.3:
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
+ engines: {node: '>=14'}
+
+ limiter@1.1.5:
+ resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ linkify-it@3.0.3:
+ resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==}
+
+ linkify-it@4.0.1:
+ resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==}
+
+ lint-staged@16.1.2:
+ resolution: {integrity: sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q==}
+ engines: {node: '>=20.17'}
+ hasBin: true
+
+ listr2@8.3.3:
+ resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==}
+ engines: {node: '>=18.0.0'}
+
+ load-json-file@1.1.0:
+ resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==}
+ engines: {node: '>=0.10.0'}
+
+ localtunnel@2.0.2:
+ resolution: {integrity: sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==}
+ engines: {node: '>=8.3.0'}
+ hasBin: true
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ locate-path@7.2.0:
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ lodash._basecopy@3.0.1:
+ resolution: {integrity: sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==}
+
+ lodash._basetostring@3.0.1:
+ resolution: {integrity: sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==}
+
+ lodash._basevalues@3.0.0:
+ resolution: {integrity: sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==}
+
+ lodash._escapehtmlchar@2.4.1:
+ resolution: {integrity: sha512-eHm2t2Lg476lq5v4FVmm3B5mCaRlDyTE8fnMfPCEq2o46G4au0qNXIKh7YWhjprm1zgSMLcMSs1XHMgkw02PbQ==}
+
+ lodash._escapestringchar@2.4.1:
+ resolution: {integrity: sha512-iZ6Os4iipaE43pr9SBks+UpZgAjJgRC+lGf7onEoByMr1+Nagr1fmR7zCM6Q4RGMB/V3a57raEN0XZl7Uub3/g==}
+
+ lodash._getnative@3.9.1:
+ resolution: {integrity: sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==}
+
+ lodash._htmlescapes@2.4.1:
+ resolution: {integrity: sha512-g79hNmMOBVyV+4oKIHM7MWy9Awtk3yqf0Twlawr6f+CmG44nTwBh9I5XiLUnk39KTfYoDBpS66glQGgQCnFIuA==}
+
+ lodash._isiterateecall@3.0.9:
+ resolution: {integrity: sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==}
+
+ lodash._isnative@2.4.1:
+ resolution: {integrity: sha512-BOlKGKNHhCHswGOWtmVb5zBygyxN7EmTuzVOSQI6QSoGhG+kvv71gICFS1TBpnqvT1n53txK8CDK3u5D2/GZxQ==}
+
+ lodash._objecttypes@2.4.1:
+ resolution: {integrity: sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q==}
+
+ lodash._reescape@3.0.0:
+ resolution: {integrity: sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==}
+
+ lodash._reevaluate@3.0.0:
+ resolution: {integrity: sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==}
+
+ lodash._reinterpolate@2.4.1:
+ resolution: {integrity: sha512-QGEOOjJi7W9LIgDAMVgtGBb8Qgo8ieDlSOCoZjtG45ZNRvDJZjwVMTYlfTIWdNRUiR1I9BjIqQ3Zaf1+DYM94g==}
+
+ lodash._reinterpolate@3.0.0:
+ resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==}
+
+ lodash._reunescapedhtml@2.4.1:
+ resolution: {integrity: sha512-CfmZRU1Mk4E/5jh+Wu8lc7tuc3VkuwWZYVIgdPDH9NRSHgiL4Or3AA4JCIpgrkVzHOM+jKu2OMkAVquruhRHDQ==}
+
+ lodash._root@3.0.1:
+ resolution: {integrity: sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==}
+
+ lodash._shimkeys@2.4.1:
+ resolution: {integrity: sha512-lBrglYxLD/6KAJ8IEa5Lg+YHgNAL7FyKqXg4XOUI+Du/vtniLs1ZqS+yHNKPkK54waAgkdUnDOYaWf+rv4B+AA==}
+
+ lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
+ lodash.defaults@2.4.1:
+ resolution: {integrity: sha512-5wTIPWwGGr07JFysAZB8+7JB2NjJKXDIwogSaRX5zED85zyUAQwtOqUk8AsJkkigUcL3akbHYXd5+BPtTGQPZw==}
+
+ lodash.defaults@4.2.0:
+ resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
+
+ lodash.escape@2.4.1:
+ resolution: {integrity: sha512-PiEStyvZ8gz37qBE+HqME1Yc/ewb/59AMOu8pG7Ztani86foPTxgzckQvMdphmXPY6V5f20Ex/CaNBqHG4/ycQ==}
+
+ lodash.escape@3.2.0:
+ resolution: {integrity: sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==}
+
+ lodash.isarguments@3.1.0:
+ resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
+
+ lodash.isarray@3.0.4:
+ resolution: {integrity: sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==}
+
+ lodash.isfinite@3.3.2:
+ resolution: {integrity: sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==}
+
+ lodash.isobject@2.4.1:
+ resolution: {integrity: sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA==}
+
+ lodash.isplainobject@4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+
+ lodash.kebabcase@4.1.1:
+ resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
+
+ lodash.keys@2.4.1:
+ resolution: {integrity: sha512-ZpJhwvUXHSNL5wYd1RM6CUa2ZuqorG9ngoJ9Ix5Cce+uX7I5O/E06FCJdhSZ33b5dVyeQDnIlWH7B2s5uByZ7g==}
+
+ lodash.keys@3.1.2:
+ resolution: {integrity: sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==}
+
+ lodash.map@4.6.0:
+ resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==}
+
+ lodash.memoize@4.1.2:
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash.mergewith@4.6.2:
+ resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
+
+ lodash.restparam@3.6.1:
+ resolution: {integrity: sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==}
+
+ lodash.snakecase@4.1.1:
+ resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
+
+ lodash.startcase@4.4.0:
+ resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+
+ lodash.template@2.4.1:
+ resolution: {integrity: sha512-5yLOQwlS69xbaez3g9dA1i0GMAj8pLDHp8lhA4V7M1vRam1lqD76f0jg5EV+65frbqrXo1WH9ZfKalfYBzJ5yQ==}
+ deprecated: This package is deprecated. Use https://socket.dev/npm/package/eta instead.
+
+ lodash.template@3.6.2:
+ resolution: {integrity: sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==}
+ deprecated: This package is deprecated. Use https://socket.dev/npm/package/eta instead.
+
+ lodash.templatesettings@2.4.1:
+ resolution: {integrity: sha512-vY3QQ7GxbeLe8XfTvoYDbaMHO5iyTDJS1KIZrxp00PRMmyBKr8yEcObHSl2ppYTwd8MgqPXAarTvLA14hx8ffw==}
+
+ lodash.templatesettings@3.1.1:
+ resolution: {integrity: sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==}
+
+ lodash.truncate@4.4.2:
+ resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==}
+
+ lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+
+ lodash.upperfirst@4.3.1:
+ resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
+
+ lodash.values@2.4.1:
+ resolution: {integrity: sha512-fQwubKvj2Nox2gy6YnjFm8C1I6MIlzKUtBB+Pj7JGtloGqDDL5CPRr4DUUFWPwXWwAl2k3f4C3Aw8H1qAPB9ww==}
+
+ lodash@2.4.2:
+ resolution: {integrity: sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==}
+ engines: {'0': node, '1': rhino}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ log-update@6.1.0:
+ resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
+ engines: {node: '>=18'}
+
+ log-util@1.2.0:
+ resolution: {integrity: sha512-CT1wy00y2gFBDTsdkz6QG+r6i2RzElvJI4QbWLAPPe91l8Z/Qy9YMfb6PQttjnsw7USNlDPjuQ++jTtgYX9gew==}
+
+ longest@2.0.1:
+ resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==}
+ engines: {node: '>=0.10.0'}
+
+ loud-rejection@1.6.0:
+ resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==}
+ engines: {node: '>=0.10.0'}
+
+ lower-case@1.1.4:
+ resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==}
+
+ lower-case@2.0.2:
+ resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ map-cache@0.2.2:
+ resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
+ engines: {node: '>=0.10.0'}
+
+ map-obj@1.0.1:
+ resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
+ engines: {node: '>=0.10.0'}
+
+ map-stream@0.0.7:
+ resolution: {integrity: sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==}
+
+ map-visit@1.0.0:
+ resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==}
+ engines: {node: '>=0.10.0'}
+
+ markdown-it-abbr@1.0.4:
+ resolution: {integrity: sha512-ZeA4Z4SaBbYysZap5iZcxKmlPL6bYA8grqhzJIHB1ikn7njnzaP8uwbtuXc4YXD5LicI4/2Xmc0VwmSiFV04gg==}
+
+ markdown-it-abbr@2.0.0:
+ resolution: {integrity: sha512-of7C8pXSjXjDojW4neNP+jD7inUYH/DO0Ca+K/4FUEccg0oHAEX/nfscw0jfz66PJbYWOAT9U8mjO21X5p6aAw==}
+
+ markdown-it-anchor@9.2.0:
+ resolution: {integrity: sha512-sa2ErMQ6kKOA4l31gLGYliFQrMKkqSO0ZJgGhDHKijPf0pNFM9vghjAh3gn26pS4JDRs7Iwa9S36gxm3vgZTzg==}
+ peerDependencies:
+ '@types/markdown-it': '*'
+ markdown-it: '*'
+
+ markdown-it-attrs@4.3.1:
+ resolution: {integrity: sha512-/ko6cba+H6gdZ0DOw7BbNMZtfuJTRp9g/IrGIuz8lYc/EfnmWRpaR3CFPnNbVz0LDvF8Gf1hFGPqrQqq7De0rg==}
+ engines: {node: '>=6'}
+ peerDependencies:
+ markdown-it: '>= 9.0.0'
+
+ markdown-it-checkbox@1.1.0:
+ resolution: {integrity: sha512-NkZVjnXo5G+cLNdi7DPZxICypBuxFE9F8sx3YGMZn+Cfizr8EZ/1TFUKl7ZnefF6cr1aFHbnQ5iA3rc4cp7EyA==}
+
+ markdown-it-cjk-breaks@1.1.3:
+ resolution: {integrity: sha512-/gX3LueMp+5FdUkqcFPK5nHI6t85uq1rMv8yhrmCOZhU90XqybQj8OT1hVrxrdseajaHLPBK43xLzEKPosgTDA==}
+
+ markdown-it-container@3.0.0:
+ resolution: {integrity: sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==}
+
+ markdown-it-deflist@2.1.0:
+ resolution: {integrity: sha512-3OuqoRUlSxJiuQYu0cWTLHNhhq2xtoSFqsZK8plANg91+RJQU1ziQ6lA2LzmFAEes18uPBsHZpcX6We5l76Nzg==}
+
+ markdown-it-emoji@1.4.0:
+ resolution: {integrity: sha512-QCz3Hkd+r5gDYtS2xsFXmBYrgw6KuWcJZLCEkdfAuwzZbShCmCfta+hwAMq4NX/4xPzkSHduMKgMkkPUJxSXNg==}
+
+ markdown-it-emoji@3.0.0:
+ resolution: {integrity: sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg==}
+
+ markdown-it-footnote@3.0.3:
+ resolution: {integrity: sha512-YZMSuCGVZAjzKMn+xqIco9d1cLGxbELHZ9do/TSYVzraooV8ypsppKNmUJ0fVH5ljkCInQAtFpm8Rb3eXSrt5w==}
+
+ markdown-it-footnote@4.0.0:
+ resolution: {integrity: sha512-WYJ7urf+khJYl3DqofQpYfEYkZKbmXmwxQV8c8mO/hGIhgZ1wOe7R4HLFNwqx7TjILbnC98fuyeSsin19JdFcQ==}
+
+ markdown-it-highlight-lines@1.0.2:
+ resolution: {integrity: sha512-9Pyt/B+Ca3QBSXDS/znmojy/k6HDe8FJlJwIj/BKgvxE3MQWK9GHQCJJT5Lb1er23svZT99kJ/YRhLpDK+5GUQ==}
+
+ markdown-it-highlightjs@4.2.0:
+ resolution: {integrity: sha512-NC7pXE8KkOl6xWJVRNt8p6wgJVznXKsE0HgYGdk6DD2tn1l4L9f0ALf3VIoGVkotNU1uGQatSxfBF1zZPUMmuQ==}
+
+ markdown-it-ins@3.0.1:
+ resolution: {integrity: sha512-32SSfZqSzqyAmmQ4SHvhxbFqSzPDqsZgMHDwxqPzp+v+t8RsmqsBZRG+RfRQskJko9PfKC2/oxyOs4Yg/CfiRw==}
+
+ markdown-it-ins@4.0.0:
+ resolution: {integrity: sha512-sWbjK2DprrkINE4oYDhHdCijGT+MIDhEupjSHLXe5UXeVr5qmVxs/nTUVtgi0Oh/qtF+QKV0tNWDhQBEPxiMew==}
+
+ markdown-it-mark@3.0.1:
+ resolution: {integrity: sha512-HyxjAu6BRsdt6Xcv6TKVQnkz/E70TdGXEFHRYBGLncRE9lBFwDNLVtFojKxjJWgJ+5XxUwLaHXy+2sGBbDn+4A==}
+
+ markdown-it-shortcode-tag@1.1.0:
+ resolution: {integrity: sha512-6qVQHmfVYMYlO2HebbF6ydXoTpOl3jPJvw6RyPnWaGJLSXdxlIJ7ihyzzbXNNHkZlQPfoDehDQYMfqeOv1KwgQ==}
+ engines: {node: '>=4.0'}
+
+ markdown-it-sub@1.0.0:
+ resolution: {integrity: sha512-z2Rm/LzEE1wzwTSDrI+FlPEveAAbgdAdPhdWarq/ZGJrGW/uCQbKAnhoCsE4hAbc3SEym26+W2z/VQB0cQiA9Q==}
+
+ markdown-it-sub@2.0.0:
+ resolution: {integrity: sha512-iCBKgwCkfQBRg2vApy9vx1C1Tu6D8XYo8NvevI3OlwzBRmiMtsJ2sXupBgEA7PPxiDwNni3qIUkhZ6j5wofDUA==}
+
+ markdown-it-sup@1.0.0:
+ resolution: {integrity: sha512-E32m0nV9iyhRR7CrhnzL5msqic7rL1juWre6TQNxsnApg7Uf+F97JOKxUijg5YwXz86lZ0mqfOnutoryyNdntQ==}
+
+ markdown-it-sup@2.0.0:
+ resolution: {integrity: sha512-5VgmdKlkBd8sgXuoDoxMpiU+BiEt3I49GItBzzw7Mxq9CxvnhE/k09HFli09zgfFDRixDQDfDxi0mgBCXtaTvA==}
+
+ markdown-it-task-lists@2.1.1:
+ resolution: {integrity: sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==}
+
+ markdown-it@11.0.1:
+ resolution: {integrity: sha512-aU1TzmBKcWNNYvH9pjq6u92BML+Hz3h5S/QpfTFwiQF852pLT+9qHsrhM9JYipkOXZxGn+sGH8oyJE9FD9WezQ==}
+ hasBin: true
+
+ markdown-it@13.0.2:
+ resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==}
+ hasBin: true
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ math-random@1.0.4:
+ resolution: {integrity: sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==}
+
+ mathml-tag-names@2.1.3:
+ resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==}
+
+ md5@2.3.0:
+ resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
+
+ mdn-data@2.0.28:
+ resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+
+ mdn-data@2.0.30:
+ resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+
+ mdn-data@2.12.2:
+ resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
+
+ mdurl@1.0.1:
+ resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
+
+ memorystream@0.3.1:
+ resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
+ engines: {node: '>= 0.10.0'}
+
+ meow@12.1.1:
+ resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
+ engines: {node: '>=16.10'}
+
+ meow@13.2.0:
+ resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
+ engines: {node: '>=18'}
+
+ meow@2.0.0:
+ resolution: {integrity: sha512-X7rkdgy5Wxxp2MhCiAOkC3lqfkrJkt3iXvW4BY0rYQIn3GMvYvBTsAPEmHHTjTeVzBelrRcQa2F80rYfigz2+A==}
+ engines: {node: '>=0.10.0'}
+
+ meow@3.7.0:
+ resolution: {integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==}
+ engines: {node: '>=0.10.0'}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ merge@2.1.1:
+ resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==}
+
+ micro-memoize@4.1.3:
+ resolution: {integrity: sha512-DzRMi8smUZXT7rCGikRwldEh6eO6qzKiPPopcr1+2EY3AYKpy5fu159PKWwIS9A6IWnrvPKDMcuFtyrroZa8Bw==}
+
+ micromatch@2.3.11:
+ resolution: {integrity: sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==}
+ engines: {node: '>=0.10.0'}
+
+ micromatch@3.1.10:
+ resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==}
+ engines: {node: '>=0.10.0'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.12.0:
+ resolution: {integrity: sha512-5aMAW7I4jZoZB27fXRuekqc4DVvJ7+hM8UcWrNj2mqibE54gXgPSonBYBdQW5hyaVNGmiYjY0ZMqn9fBefWYvA==}
+ engines: {node: '>= 0.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@1.0.2:
+ resolution: {integrity: sha512-echfutj/t5SoTL4WZpqjA1DCud1XO0WQF3/GJ48YBmc4ZMhCK77QA6Z/w6VTQERLKuJ4drze3kw2TUT8xZXVNw==}
+ engines: {node: '>= 0.8.0'}
+
+ mime-types@2.0.14:
+ resolution: {integrity: sha512-2ZHUEstNkIf2oTWgtODr6X0Cc4Ns/RN/hktdozndiEhhAC2wxXejF1FH0XLHTEImE9h6gr/tcnr3YOnSGsxc7Q==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@1.4.1:
+ resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==}
+ hasBin: true
+
+ mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ mime@3.0.0:
+ resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ mimic-function@5.0.1:
+ resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+ engines: {node: '>=18'}
+
+ min-indent@1.0.1:
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@0.2.4:
+ resolution: {integrity: sha512-Pkrrm8NjyQ8yVt8Am9M+yUt74zE3iokhzbG1bFVNjLB92vwM71hf40RkEsryg98BujhVOncKm/C1xROxZ030LQ==}
+
+ minimist@1.2.7:
+ resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mitt@1.2.0:
+ resolution: {integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==}
+
+ mixin-deep@1.3.2:
+ resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
+ engines: {node: '>=0.10.0'}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mkdirp@2.1.3:
+ resolution: {integrity: sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ modify-filename@2.0.0:
+ resolution: {integrity: sha512-VX9/MdgUN9StpSLImJ0+AyV2dxJJtyojIwRHF/Ja942tW7FTzxXI186jDSTk4k5wj2+59a4bRzFnJUgMSi+ygg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ moize@6.1.6:
+ resolution: {integrity: sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==}
+
+ moment-timezone@0.5.48:
+ resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==}
+
+ moment@2.30.1:
+ resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
+
+ morgan@1.10.0:
+ resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==}
+ engines: {node: '>= 0.8.0'}
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ multimatch@5.0.0:
+ resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==}
+ engines: {node: '>=10'}
+
+ multipipe@0.1.2:
+ resolution: {integrity: sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==}
+
+ mute-stdout@2.0.0:
+ resolution: {integrity: sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==}
+ engines: {node: '>= 10.13.0'}
+
+ mute-stream@0.0.8:
+ resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+ nan@2.22.2:
+ resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==}
+
+ nano-spawn@1.0.2:
+ resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==}
+ engines: {node: '>=20.17'}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ nanomatch@1.2.13:
+ resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
+ engines: {node: '>=0.10.0'}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ negotiator@0.6.4:
+ resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
+ engines: {node: '>= 0.6'}
+
+ nib@1.2.0:
+ resolution: {integrity: sha512-7HgrnMl/3yOmWykueO8/D0q+0iWwe7Z+CK2Eaq/xQV8w1hK80WN1oReRQkfkrztbAAnp/nTHkUSl5EcVkor6JQ==}
+ peerDependencies:
+ stylus: '*'
+
+ no-case@2.3.2:
+ resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
+
+ no-case@3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+
+ node-releases@2.0.19:
+ resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+
+ node-uuid@1.4.8:
+ resolution: {integrity: sha512-TkCET/3rr9mUuRp+CpO7qfgT++aAxfDRaalQhwPFzI9BY/2rCDn6OfpZOVggi1AXfTPpfkTrg5f5WQx5G1uLxA==}
+ deprecated: Use uuid module instead
+ hasBin: true
+
+ normalize-package-data@2.5.0:
+ resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+
+ normalize-path@2.1.1:
+ resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
+ now-and-later@3.0.0:
+ resolution: {integrity: sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==}
+ engines: {node: '>= 10.13.0'}
+
+ npm-normalize-package-bin@4.0.0:
+ resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ npm-run-all2@8.0.4:
+ resolution: {integrity: sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==}
+ engines: {node: ^20.5.0 || >=22.0.0, npm: '>= 10'}
+ hasBin: true
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ nunjucks@3.2.4:
+ resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==}
+ engines: {node: '>= 6.9.0'}
+ hasBin: true
+ peerDependencies:
+ chokidar: ^3.3.0
+ peerDependenciesMeta:
+ chokidar:
+ optional: true
+
+ o-stream@0.3.0:
+ resolution: {integrity: sha512-gbzl6qCJZ609x/M2t25HqCYQagFzWYCtQ84jcuObGr+V8D1Am4EVubkF4J+XFs6ukfiv96vNeiBb8FrbbMZYiQ==}
+
+ oauth-sign@0.5.0:
+ resolution: {integrity: sha512-jXeZq5EriUSGdNIePO45lhemfuCBKi5DARdE30v173MPCLymq2DxR477J/RuCXLphNx7OVAqXVyj3JoUaiHpNw==}
+
+ oauth-sign@0.9.0:
+ resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==}
+
+ object-assign@1.0.0:
+ resolution: {integrity: sha512-LpUkixU1BUMQ6bwUHbOue4IGGbdRbxi+IEZw7zHniw78erlxrKGHbhfLbHIsI35LGbGqys6QOrjVmLnD2ie+1A==}
+ engines: {node: '>=0.10.0'}
+
+ object-assign@3.0.0:
+ resolution: {integrity: sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==}
+ engines: {node: '>=0.10.0'}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-copy@0.1.0:
+ resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
+ engines: {node: '>=0.10.0'}
+
+ object-hash@3.0.0:
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+ engines: {node: '>= 6'}
+
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object-visit@1.0.1:
+ resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==}
+ engines: {node: '>=0.10.0'}
+
+ object.defaults@1.1.0:
+ resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==}
+ engines: {node: '>=0.10.0'}
+
+ object.omit@2.0.1:
+ resolution: {integrity: sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==}
+ engines: {node: '>=0.10.0'}
+
+ object.pick@1.3.0:
+ resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
+ engines: {node: '>=0.10.0'}
+
+ on-finished@2.3.0:
+ resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
+ engines: {node: '>= 0.8'}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ on-headers@1.0.2:
+ resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ onetime@7.0.0:
+ resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
+ engines: {node: '>=18'}
+
+ open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+
+ opencollective-postinstall@2.0.3:
+ resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==}
+ hasBin: true
+
+ openurl@1.1.1:
+ resolution: {integrity: sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==}
+
+ opn@5.3.0:
+ resolution: {integrity: sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==}
+ engines: {node: '>=4'}
+
+ optionator@0.8.3:
+ resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
+ engines: {node: '>= 0.8.0'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ ora@5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+
+ os-tmpdir@1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-locate@6.0.0:
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ param-case@2.1.1:
+ resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-filepath@1.0.2:
+ resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==}
+ engines: {node: '>=0.8'}
+
+ parse-glob@3.0.4:
+ resolution: {integrity: sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==}
+ engines: {node: '>=0.10.0'}
+
+ parse-json@2.2.0:
+ resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==}
+ engines: {node: '>=0.10.0'}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ parse-node-version@1.0.1:
+ resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
+ engines: {node: '>= 0.10'}
+
+ parse-passwd@1.0.0:
+ resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
+ engines: {node: '>=0.10.0'}
+
+ parse5-htmlparser2-tree-adapter@7.1.0:
+ resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
+
+ parse5-parser-stream@7.1.2:
+ resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==}
+
+ parse5@7.3.0:
+ resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ pascal-case@3.1.2:
+ resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
+
+ pascalcase@0.1.1:
+ resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
+ engines: {node: '>=0.10.0'}
+
+ path-exists@2.1.0:
+ resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==}
+ engines: {node: '>=0.10.0'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-exists@5.0.0:
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-root-regex@0.1.2:
+ resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==}
+ engines: {node: '>=0.10.0'}
+
+ path-root@0.1.1:
+ resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==}
+ engines: {node: '>=0.10.0'}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-type@1.1.0:
+ resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==}
+ engines: {node: '>=0.10.0'}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ performance-now@2.1.0:
+ resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+
+ pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
+ pinkie-promise@2.0.1:
+ resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==}
+ engines: {node: '>=0.10.0'}
+
+ pinkie@2.0.4:
+ resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
+ engines: {node: '>=0.10.0'}
+
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
+ plugin-error@1.0.1:
+ resolution: {integrity: sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==}
+ engines: {node: '>= 0.10'}
+
+ plugin-error@2.0.1:
+ resolution: {integrity: sha512-zMakqvIDyY40xHOvzXka0kUvf40nYIuwRE8dWhti2WtjQZ31xAgBZBhxsK7vK3QbRXS1Xms/LO7B5cuAsfB2Gg==}
+ engines: {node: '>=10.13.0'}
+
+ portscanner@2.2.0:
+ resolution: {integrity: sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==}
+ engines: {node: '>=0.4', npm: '>=1.0.0'}
+
+ posix-character-classes@0.1.1:
+ resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==}
+ engines: {node: '>=0.10.0'}
+
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
+ engines: {node: '>= 0.4'}
+
+ postcss-calc@10.1.1:
+ resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==}
+ engines: {node: ^18.12 || ^20.9 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.38
+
+ postcss-cli@11.0.1:
+ resolution: {integrity: sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-colormin@7.0.3:
+ resolution: {integrity: sha512-xZxQcSyIVZbSsl1vjoqZAcMYYdnJsIyG8OvqShuuqf12S88qQboxxEy0ohNCOLwVPXTU+hFHvJPACRL2B5ohTA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-convert-values@7.0.5:
+ resolution: {integrity: sha512-0VFhH8nElpIs3uXKnVtotDJJNX0OGYSZmdt4XfSfvOMrFw1jKfpwpZxfC4iN73CTM/MWakDEmsHQXkISYj4BXw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-comments@7.0.4:
+ resolution: {integrity: sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-duplicates@7.0.2:
+ resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-empty@7.0.1:
+ resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-overridden@7.0.1:
+ resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-import@15.1.0:
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-import@16.1.1:
+ resolution: {integrity: sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-js@4.0.1:
+ resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.4.21
+
+ postcss-load-config@4.0.2:
+ resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+
+ postcss-load-config@5.1.0:
+ resolution: {integrity: sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ jiti: '>=1.21.0'
+ postcss: '>=8.0.9'
+ tsx: ^4.8.1
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+ postcss:
+ optional: true
+ tsx:
+ optional: true
+
+ postcss-merge-longhand@7.0.5:
+ resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-merge-rules@7.0.5:
+ resolution: {integrity: sha512-ZonhuSwEaWA3+xYbOdJoEReKIBs5eDiBVLAGpYZpNFPzXZcEE5VKR7/qBEQvTZpiwjqhhqEQ+ax5O3VShBj9Wg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-font-values@7.0.1:
+ resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-gradients@7.0.1:
+ resolution: {integrity: sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-params@7.0.3:
+ resolution: {integrity: sha512-vUKV2+f5mtjewYieanLX0xemxIp1t0W0H/D11u+kQV/MWdygOO7xPMkbK+r9P6Lhms8MgzKARF/g5OPXhb8tgg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-selectors@7.0.5:
+ resolution: {integrity: sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-nested@6.2.0:
+ resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
+
+ postcss-normalize-charset@7.0.1:
+ resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-display-values@7.0.1:
+ resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-positions@7.0.1:
+ resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-repeat-style@7.0.1:
+ resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-string@7.0.1:
+ resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-timing-functions@7.0.1:
+ resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-unicode@7.0.3:
+ resolution: {integrity: sha512-EcoA29LvG3F+EpOh03iqu+tJY3uYYKzArqKJHxDhUYLa2u58aqGq16K6/AOsXD9yqLN8O6y9mmePKN5cx6krOw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-url@7.0.1:
+ resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-whitespace@7.0.1:
+ resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-ordered-values@7.0.2:
+ resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-reduce-initial@7.0.3:
+ resolution: {integrity: sha512-RFvkZaqiWtGMlVjlUHpaxGqEL27lgt+Q2Ixjf83CRAzqdo+TsDyGPtJUbPx2MuYIJ+sCQc2TrOvRnhcXQfgIVA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-reduce-transforms@7.0.1:
+ resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-reporter@7.1.0:
+ resolution: {integrity: sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-resolve-nested-selector@0.1.6:
+ resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==}
+
+ postcss-safe-parser@7.0.1:
+ resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==}
+ engines: {node: '>=18.0'}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-selector-parser@6.1.2:
+ resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
+ engines: {node: '>=4'}
+
+ postcss-selector-parser@7.1.0:
+ resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
+ engines: {node: '>=4'}
+
+ postcss-svgo@7.0.2:
+ resolution: {integrity: sha512-5Dzy66JlnRM6pkdOTF8+cGsB1fnERTE8Nc+Eed++fOWo1hdsBptCsbG8UuJkgtZt75bRtMJIrPeZmtfANixdFA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-unique-selectors@7.0.4:
+ resolution: {integrity: sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ prelude-ls@1.1.2:
+ resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
+ engines: {node: '>= 0.8.0'}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ preserve@0.2.0:
+ resolution: {integrity: sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==}
+ engines: {node: '>=0.10.0'}
+
+ prettier-plugin-tailwindcss@0.6.12:
+ resolution: {integrity: sha512-OuTQKoqNwV7RnxTPwXWzOFXy6Jc4z8oeRZYGuMpRyG3WbuR3jjXdQFK8qFBMBx8UHWdHrddARz2fgUenild6aw==}
+ engines: {node: '>=14.21.3'}
+ peerDependencies:
+ '@ianvs/prettier-plugin-sort-imports': '*'
+ '@prettier/plugin-pug': '*'
+ '@shopify/prettier-plugin-liquid': '*'
+ '@trivago/prettier-plugin-sort-imports': '*'
+ '@zackad/prettier-plugin-twig': '*'
+ prettier: ^3.0
+ prettier-plugin-astro: '*'
+ prettier-plugin-css-order: '*'
+ prettier-plugin-import-sort: '*'
+ prettier-plugin-jsdoc: '*'
+ prettier-plugin-marko: '*'
+ prettier-plugin-multiline-arrays: '*'
+ prettier-plugin-organize-attributes: '*'
+ prettier-plugin-organize-imports: '*'
+ prettier-plugin-sort-imports: '*'
+ prettier-plugin-style-order: '*'
+ prettier-plugin-svelte: '*'
+ peerDependenciesMeta:
+ '@ianvs/prettier-plugin-sort-imports':
+ optional: true
+ '@prettier/plugin-pug':
+ optional: true
+ '@shopify/prettier-plugin-liquid':
+ optional: true
+ '@trivago/prettier-plugin-sort-imports':
+ optional: true
+ '@zackad/prettier-plugin-twig':
+ optional: true
+ prettier-plugin-astro:
+ optional: true
+ prettier-plugin-css-order:
+ optional: true
+ prettier-plugin-import-sort:
+ optional: true
+ prettier-plugin-jsdoc:
+ optional: true
+ prettier-plugin-marko:
+ optional: true
+ prettier-plugin-multiline-arrays:
+ optional: true
+ prettier-plugin-organize-attributes:
+ optional: true
+ prettier-plugin-organize-imports:
+ optional: true
+ prettier-plugin-sort-imports:
+ optional: true
+ prettier-plugin-style-order:
+ optional: true
+ prettier-plugin-svelte:
+ optional: true
+
+ prettier@3.5.3:
+ resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ pretty-hrtime@1.0.3:
+ resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==}
+ engines: {node: '>= 0.8'}
+
+ prismjs@1.30.0:
+ resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
+ engines: {node: '>=6'}
+
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+
+ psl@1.15.0:
+ resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ q@1.5.1:
+ resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
+ engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
+ deprecated: |-
+ You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.
+
+ (For a CapTP with native promises, see @endo/eventual-send and @endo/captp)
+
+ qs@2.3.3:
+ resolution: {integrity: sha512-f5M0HQqZWkzU8GELTY8LyMrGkr3bPjKoFtTkwUEqJQbcljbeK8M7mliP9Ia2xoOI6oMerp+QPS7oYJtpGmWe/A==}
+
+ qs@6.5.3:
+ resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
+ engines: {node: '>=0.6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ randomatic@3.1.1:
+ resolution: {integrity: sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==}
+ engines: {node: '>= 0.10.0'}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@2.5.2:
+ resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
+ engines: {node: '>= 0.8'}
+
+ read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+
+ read-package-json-fast@4.0.0:
+ resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ read-pkg-up@1.0.1:
+ resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==}
+ engines: {node: '>=0.10.0'}
+
+ read-pkg@1.1.0:
+ resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==}
+ engines: {node: '>=0.10.0'}
+
+ readable-stream@1.0.34:
+ resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==}
+
+ readable-stream@1.1.14:
+ resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
+
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdirp@2.2.1:
+ resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==}
+ engines: {node: '>=0.10'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
+ rechoir@0.8.0:
+ resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
+ engines: {node: '>= 10.13.0'}
+
+ redent@1.0.0:
+ resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==}
+ engines: {node: '>=0.10.0'}
+
+ reflect-metadata@0.1.13:
+ resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==}
+
+ regex-cache@0.4.4:
+ resolution: {integrity: sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==}
+ engines: {node: '>=0.10.0'}
+
+ regex-not@1.0.2:
+ resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
+ engines: {node: '>=0.10.0'}
+
+ relateurl@0.2.7:
+ resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
+ engines: {node: '>= 0.10'}
+
+ remove-trailing-separator@1.1.0:
+ resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==}
+
+ repeat-element@1.1.4:
+ resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==}
+ engines: {node: '>=0.10.0'}
+
+ repeat-string@1.6.1:
+ resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
+ engines: {node: '>=0.10'}
+
+ repeating@1.1.3:
+ resolution: {integrity: sha512-Nh30JLeMHdoI+AsQ5eblhZ7YlTsM9wiJQe/AHIunlK3KWzvXhXb36IJ7K1IOeRjIOtzMjdUHjwXUFxKJoPTSOg==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ repeating@2.0.1:
+ resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==}
+ engines: {node: '>=0.10.0'}
+
+ replace-ext@0.0.1:
+ resolution: {integrity: sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==}
+ engines: {node: '>= 0.4'}
+
+ replace-ext@1.0.1:
+ resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==}
+ engines: {node: '>= 0.10'}
+
+ replace-ext@2.0.0:
+ resolution: {integrity: sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==}
+ engines: {node: '>= 10'}
+
+ replace-homedir@2.0.0:
+ resolution: {integrity: sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==}
+ engines: {node: '>= 10.13.0'}
+
+ replacestream@4.0.3:
+ resolution: {integrity: sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==}
+
+ request@2.51.0:
+ resolution: {integrity: sha512-6pfShjLfn6ThOlPHyQo7nBxEwTa2PzvqHruxQS51TrADjWj3qetRZ2Ae5gRzMF7N2fKG5Ww7su+Z6jA3sFv0Gw==}
+ engines: {node: '>=0.8.0'}
+ deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
+
+ request@2.88.2:
+ resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==}
+ engines: {node: '>= 6'}
+ deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ requires-port@1.0.0:
+ resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
+
+ resolve-dir@1.0.1:
+ resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve-options@2.0.0:
+ resolution: {integrity: sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==}
+ engines: {node: '>= 10.13.0'}
+
+ resolve-url@0.2.1:
+ resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==}
+ deprecated: https://github.com/lydell/resolve-url#deprecated
+
+ resolve@1.22.10:
+ resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ resp-modifier@6.0.2:
+ resolution: {integrity: sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==}
+ engines: {node: '>= 0.8.0'}
+
+ restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+
+ restore-cursor@5.1.0:
+ resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+ engines: {node: '>=18'}
+
+ ret@0.1.15:
+ resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
+ engines: {node: '>=0.12'}
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rev-hash@4.1.0:
+ resolution: {integrity: sha512-e0EGnaveLY2IYpYwHNdh43WZ2M84KgW3Z/T4F6+Z/BlZI/T1ZbxTWj36xgYgUPOieGXYo2q225jTeUXn+LWYjw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ rev-path@3.0.0:
+ resolution: {integrity: sha512-2fUuv6IC7Z+Vj+DXEunJYJDZuwSsaJJHeLar3n2PGvHSH7j5+Xpd/Xh7PenekH4WQhxFuHtsGwd1dCh/HvT6Gw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ run-async@2.4.1:
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ engines: {node: '>=0.12.0'}
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ rx@4.1.0:
+ resolution: {integrity: sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==}
+
+ rxjs@7.8.2:
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
+ safe-regex@1.1.0:
+ resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ sax@1.3.0:
+ resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==}
+
+ semver-greatest-satisfied-range@2.0.0:
+ resolution: {integrity: sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==}
+ engines: {node: '>= 10.13.0'}
+
+ semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.7.2:
+ resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@0.16.2:
+ resolution: {integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==}
+ engines: {node: '>= 0.8.0'}
+
+ send@0.19.0:
+ resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
+ engines: {node: '>= 0.8.0'}
+
+ serve-index@1.9.1:
+ resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==}
+ engines: {node: '>= 0.8.0'}
+
+ serve-static@1.13.2:
+ resolution: {integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==}
+ engines: {node: '>= 0.8.0'}
+
+ serve-static@1.16.2:
+ resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
+ engines: {node: '>= 0.8.0'}
+
+ server-destroy@1.0.1:
+ resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ set-value@2.0.1:
+ resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
+ engines: {node: '>=0.10.0'}
+
+ setprototypeof@1.1.0:
+ resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ shell-quote@1.8.3:
+ resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ slash@5.1.0:
+ resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
+ engines: {node: '>=14.16'}
+
+ slice-ansi@4.0.0:
+ resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
+ engines: {node: '>=10'}
+
+ slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+
+ slice-ansi@7.1.0:
+ resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ engines: {node: '>=18'}
+
+ snapdragon-node@2.1.1:
+ resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
+ engines: {node: '>=0.10.0'}
+
+ snapdragon-util@3.0.1:
+ resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==}
+ engines: {node: '>=0.10.0'}
+
+ snapdragon@0.8.2:
+ resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==}
+ engines: {node: '>=0.10.0'}
+
+ sntp@0.2.4:
+ resolution: {integrity: sha512-bDLrKa/ywz65gCl+LmOiIhteP1bhEsAAzhfMedPoiHP3dyYnAevlaJshdqb9Yu0sRifyP/fRqSt8t+5qGIWlGQ==}
+ engines: {node: '>=0.8.0'}
+ deprecated: This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.
+
+ socket.io-adapter@2.5.5:
+ resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==}
+
+ socket.io-client@4.8.1:
+ resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==}
+ engines: {node: '>=10.0.0'}
+
+ socket.io-parser@4.2.4:
+ resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
+ engines: {node: '>=10.0.0'}
+
+ socket.io@4.8.1:
+ resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==}
+ engines: {node: '>=10.2.0'}
+
+ sort-keys@5.1.0:
+ resolution: {integrity: sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==}
+ engines: {node: '>=12'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-resolve@0.5.3:
+ resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
+ deprecated: See https://github.com/lydell/source-map-resolve#deprecated
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map-url@0.4.1:
+ resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
+ deprecated: See https://github.com/lydell/source-map-url#deprecated
+
+ source-map@0.4.4:
+ resolution: {integrity: sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==}
+ engines: {node: '>=0.8.0'}
+
+ source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.4:
+ resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+ engines: {node: '>= 8'}
+
+ sparkles@1.0.1:
+ resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==}
+ engines: {node: '>= 0.10'}
+
+ sparkles@2.1.0:
+ resolution: {integrity: sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==}
+ engines: {node: '>= 10.13.0'}
+
+ spdx-correct@3.2.0:
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+
+ spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
+
+ spdx-expression-parse@3.0.1:
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+
+ spdx-license-ids@3.0.21:
+ resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
+
+ split-string@3.1.0:
+ resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
+ engines: {node: '>=0.10.0'}
+
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ sprintf-js@1.1.3:
+ resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
+
+ sshpk@1.18.0:
+ resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ static-extend@0.1.2:
+ resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==}
+ engines: {node: '>=0.10.0'}
+
+ statuses@1.3.1:
+ resolution: {integrity: sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==}
+ engines: {node: '>= 0.6'}
+
+ statuses@1.4.0:
+ resolution: {integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==}
+ engines: {node: '>= 0.6'}
+
+ statuses@1.5.0:
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
+
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
+ stream-buffers@0.2.6:
+ resolution: {integrity: sha512-ZRpmWyuCdg0TtNKk8bEqvm13oQvXMmzXDsfD4cBgcx5LouborvU5pm3JMkdTP3HcszyUI08AM1dHMXA5r2g6Sg==}
+ engines: {node: '>= 0.3.0'}
+
+ stream-composer@1.0.2:
+ resolution: {integrity: sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==}
+
+ stream-exhaust@1.0.2:
+ resolution: {integrity: sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==}
+
+ stream-throttle@0.1.3:
+ resolution: {integrity: sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==}
+ engines: {node: '>= 0.10.0'}
+ hasBin: true
+
+ streamx@2.22.1:
+ resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==}
+
+ string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+
+ string-template@0.2.1:
+ resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==}
+
+ string-template@1.0.0:
+ resolution: {integrity: sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
+ string_decoder@0.10.31:
+ resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
+
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ stringstream@0.0.6:
+ resolution: {integrity: sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==}
+
+ stringz@2.1.0:
+ resolution: {integrity: sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==}
+
+ strip-ansi@0.3.0:
+ resolution: {integrity: sha512-DerhZL7j6i6/nEnVG0qViKXI0OKouvvpsAiaj7c+LfqZZZxdwZtv8+UiA/w4VUJpT8UzX0pR1dcHOii1GbmruQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ strip-ansi@3.0.1:
+ resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
+ engines: {node: '>=0.10.0'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-bom-buf@3.0.1:
+ resolution: {integrity: sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ strip-bom-stream@5.0.0:
+ resolution: {integrity: sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ strip-bom@2.0.0:
+ resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==}
+ engines: {node: '>=0.10.0'}
+
+ strip-bom@4.0.0:
+ resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
+ engines: {node: '>=8'}
+
+ strip-indent@1.0.1:
+ resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ strip-indent@3.0.0:
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ stylehacks@7.0.5:
+ resolution: {integrity: sha512-5kNb7V37BNf0Q3w+1pxfa+oiNPS++/b4Jil9e/kPDgrk1zjEd6uR7SZeJiYaLYH6RRSC1XX2/37OTeU/4FvuIA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ stylelint-config-recommended@16.0.0:
+ resolution: {integrity: sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ stylelint: ^16.16.0
+
+ stylelint-config-standard@38.0.0:
+ resolution: {integrity: sha512-uj3JIX+dpFseqd/DJx8Gy3PcRAJhlEZ2IrlFOc4LUxBX/PNMEQ198x7LCOE2Q5oT9Vw8nyc4CIL78xSqPr6iag==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ stylelint: ^16.18.0
+
+ stylelint@16.20.0:
+ resolution: {integrity: sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+
+ stylus@0.62.0:
+ resolution: {integrity: sha512-v3YCf31atbwJQIMtPNX8hcQ+okD4NQaTuKGUWfII8eaqn+3otrbttGL1zSMZAAtiPsBztQnujVBugg/cXFUpyg==}
+ hasBin: true
+
+ sucrase@3.35.0:
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ supports-color@0.2.0:
+ resolution: {integrity: sha512-tdCZ28MnM7k7cJDJc7Eq80A9CsRFAAOZUy41npOZCs++qSjfIy7o5Rh46CBk+Dk5FbKJ33X3Tqg4YrV07N5RaA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ supports-color@2.0.0:
+ resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
+ engines: {node: '>=0.8.0'}
+
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-hyperlinks@3.2.0:
+ resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==}
+ engines: {node: '>=14.18'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ sver@1.8.4:
+ resolution: {integrity: sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==}
+
+ svg-tags@1.0.0:
+ resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
+
+ svgo@3.3.2:
+ resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ table@6.9.0:
+ resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==}
+ engines: {node: '>=10.0.0'}
+
+ tailwindcss-animate@1.0.7:
+ resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
+ peerDependencies:
+ tailwindcss: '>=3.0.0 || insiders'
+
+ tailwindcss@3.4.17:
+ resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ teex@1.0.1:
+ resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
+
+ terser@5.43.0:
+ resolution: {integrity: sha512-CqNNxKSGKSZCunSvwKLTs8u8sGGlp27sxNZ4quGh0QeNuyHM0JSEM/clM9Mf4zUp6J+tO2gUXhgXT2YMMkwfKQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ text-decoder@1.2.3:
+ resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
+
+ text-extensions@2.4.0:
+ resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==}
+ engines: {node: '>=8'}
+
+ text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+
+ textextensions@3.3.0:
+ resolution: {integrity: sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw==}
+ engines: {node: '>=8'}
+
+ thenby@1.3.4:
+ resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==}
+
+ thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+
+ thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+ through2@0.5.1:
+ resolution: {integrity: sha512-zexCrAOTbjkBCXGyozn7hhS3aEaqdrc59mAD2E3dKYzV1vFuEGQ1hEDJN2oQMQFwy4he2zyLqPZV+AlfS8ZWJA==}
+
+ through2@2.0.5:
+ resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
+
+ through2@3.0.1:
+ resolution: {integrity: sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==}
+
+ through2@4.0.2:
+ resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ tildify@2.0.0:
+ resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==}
+ engines: {node: '>=8'}
+
+ time-stamp@1.1.0:
+ resolution: {integrity: sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==}
+ engines: {node: '>=0.10.0'}
+
+ tinyexec@1.0.1:
+ resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
+
+ tinyglobby@0.2.14:
+ resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
+ engines: {node: '>=12.0.0'}
+
+ titlecase@1.1.3:
+ resolution: {integrity: sha512-pQX4oiemzjBEELPqgK4WE+q0yhAqjp/yzusGtlSJsOuiDys0RQxggepYmo0BuegIDppYS3b3cpdegRwkpyN3hw==}
+ hasBin: true
+
+ tldts-core@6.1.86:
+ resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
+
+ tldts@6.1.86:
+ resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
+ hasBin: true
+
+ tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+
+ to-object-path@0.3.0:
+ resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
+ engines: {node: '>=0.10.0'}
+
+ to-regex-range@2.1.1:
+ resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==}
+ engines: {node: '>=0.10.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ to-regex@3.0.2:
+ resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
+ engines: {node: '>=0.10.0'}
+
+ to-through@3.0.0:
+ resolution: {integrity: sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==}
+ engines: {node: '>=10.13.0'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ tough-cookie@2.5.0:
+ resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==}
+ engines: {node: '>=0.8'}
+
+ tough-cookie@5.1.2:
+ resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
+ engines: {node: '>=16'}
+
+ trim-newlines@1.0.0:
+ resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==}
+ engines: {node: '>=0.10.0'}
+
+ ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ tslib@2.5.0:
+ resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ tunnel-agent@0.4.3:
+ resolution: {integrity: sha512-e0IoVDWx8SDHc/hwFTqJDQ7CCDTEeGhmcT9jkWJjoGQSpgBz20nAMr80E3Tpk7PatJ1b37DQDgJR3CNSzcMOZQ==}
+
+ tunnel-agent@0.6.0:
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+
+ tweetnacl@0.14.5:
+ resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
+
+ type-check@0.3.2:
+ resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
+ engines: {node: '>= 0.8.0'}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
+ typedarray@0.0.7:
+ resolution: {integrity: sha512-ueeb9YybpjhivjbHP2LdFDAjbS948fGEPj+ACAMs4xCMmh72OCOMQWBQKlaN4ZNQ04yfLSDLSx1tGRIoWimObQ==}
+
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ua-parser-js@1.0.40:
+ resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==}
+ hasBin: true
+
+ uberproto@1.2.0:
+ resolution: {integrity: sha512-pGtPAQmLwh+R9w81WVHzui1FfedpQWQpiaIIfPCwhtsBez4q6DYbJFfyXPVHPUTNFnedAvNEnkoFiLuhXIR94w==}
+
+ uc.micro@1.0.6:
+ resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}
+
+ uglify-js@3.4.10:
+ resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+
+ unc-path-regex@0.1.2:
+ resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==}
+ engines: {node: '>=0.10.0'}
+
+ underscore@1.13.7:
+ resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==}
+
+ undertaker-registry@2.0.0:
+ resolution: {integrity: sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==}
+ engines: {node: '>= 10.13.0'}
+
+ undertaker@2.0.0:
+ resolution: {integrity: sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==}
+ engines: {node: '>=10.13.0'}
+
+ undici-types@7.8.0:
+ resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}
+
+ undici@7.10.0:
+ resolution: {integrity: sha512-u5otvFBOBZvmdjWLVW+5DAc9Nkq8f24g0O9oY7qw2JVIF1VocIFoyz9JFkuVOS2j41AufeO0xnlweJ2RLT8nGw==}
+ engines: {node: '>=20.18.1'}
+
+ unicorn-magic@0.1.0:
+ resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
+ engines: {node: '>=18'}
+
+ union-value@1.0.1:
+ resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
+ engines: {node: '>=0.10.0'}
+
+ universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
+ unset-value@1.0.0:
+ resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
+ engines: {node: '>=0.10.0'}
+
+ update-browserslist-db@1.1.3:
+ resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ upper-case@1.1.3:
+ resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==}
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ urix@0.1.0:
+ resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
+ deprecated: Please see https://github.com/lydell/urix#deprecated
+
+ use@3.1.1:
+ resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
+ engines: {node: '>=0.10.0'}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+
+ uuid@3.4.0:
+ resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
+ deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
+ hasBin: true
+
+ v8flags@4.0.1:
+ resolution: {integrity: sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==}
+ engines: {node: '>= 10.13.0'}
+
+ validate-npm-package-license@3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+
+ validator@13.15.15:
+ resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==}
+ engines: {node: '>= 0.10'}
+
+ value-or-function@4.0.0:
+ resolution: {integrity: sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==}
+ engines: {node: '>= 10.13.0'}
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ verror@1.10.0:
+ resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
+ engines: {'0': node >=0.6.0}
+
+ vinyl-bufferstream@1.0.1:
+ resolution: {integrity: sha512-yCCIoTf26Q9SQ0L9cDSavSL7Nt6wgQw8TU1B/bb9b9Z4A3XTypXCGdc5BvXl4ObQvVY8JrDkFnWa/UqBqwM2IA==}
+
+ vinyl-contents@2.0.0:
+ resolution: {integrity: sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==}
+ engines: {node: '>=10.13.0'}
+
+ vinyl-file@5.0.0:
+ resolution: {integrity: sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==}
+ engines: {node: '>=14.16'}
+
+ vinyl-fs@4.0.2:
+ resolution: {integrity: sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA==}
+ engines: {node: '>=10.13.0'}
+
+ vinyl-sourcemap@2.0.0:
+ resolution: {integrity: sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==}
+ engines: {node: '>=10.13.0'}
+
+ vinyl-sourcemaps-apply@0.2.1:
+ resolution: {integrity: sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==}
+
+ vinyl@0.2.3:
+ resolution: {integrity: sha512-4gFk9xrecazOTuFKcUYrE1TjHSYL63dio72D+q0d1mHF51FEcxTT2RHFpHbN5TNJgmPYHuVsBdhvXEOCDcytSA==}
+ engines: {node: '>= 0.9'}
+
+ vinyl@0.5.3:
+ resolution: {integrity: sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==}
+ engines: {node: '>= 0.9'}
+
+ vinyl@2.2.1:
+ resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==}
+ engines: {node: '>= 0.10'}
+
+ vinyl@3.0.1:
+ resolution: {integrity: sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==}
+ engines: {node: '>=10.13.0'}
+
+ warehouse@5.0.1:
+ resolution: {integrity: sha512-5BQEQP56bPY+cqocTho4syazuGgSoyKd0y3PsS2j8tGN10HH+CEfJSIY+KUw9D0k4jaVEFMXLz0KqCiUzTYb8A==}
+ engines: {node: '>=14'}
+
+ wcwidth@1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+
+ whatwg-encoding@3.1.1:
+ resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
+ engines: {node: '>=18'}
+
+ whatwg-mimetype@4.0.0:
+ resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
+ engines: {node: '>=18'}
+
+ which-typed-array@1.1.19:
+ resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
+ engines: {node: '>= 0.4'}
+
+ which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ which@5.0.0:
+ resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrap-ansi@9.0.0:
+ resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ engines: {node: '>=18'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ write-file-atomic@5.0.1:
+ resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ ws@8.17.1:
+ resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ xmlhttprequest-ssl@2.1.2:
+ resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==}
+ engines: {node: '>=0.4.0'}
+
+ xtend@3.0.0:
+ resolution: {integrity: sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==}
+ engines: {node: '>=0.4'}
+
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yaml@2.8.0:
+ resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs-parser@22.0.0:
+ resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
+ yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+
+ yargs@17.1.1:
+ resolution: {integrity: sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ yocto-queue@1.2.1:
+ resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
+ engines: {node: '>=12.20'}
+
+ zlibjs@0.3.1:
+ resolution: {integrity: sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==}
+
+snapshots:
+
+ '@adobe/css-tools@4.3.3': {}
+
+ '@alloc/quick-lru@5.2.0': {}
+
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.27.1
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/helper-validator-identifier@7.27.1': {}
+
+ '@commitlint/cli@19.8.1(@types/node@24.0.3)(typescript@5.8.3)':
+ dependencies:
+ '@commitlint/format': 19.8.1
+ '@commitlint/lint': 19.8.1
+ '@commitlint/load': 19.8.1(@types/node@24.0.3)(typescript@5.8.3)
+ '@commitlint/read': 19.8.1
+ '@commitlint/types': 19.8.1
+ tinyexec: 1.0.1
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+
+ '@commitlint/config-conventional@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ conventional-changelog-conventionalcommits: 7.0.2
+
+ '@commitlint/config-validator@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ ajv: 8.17.1
+
+ '@commitlint/ensure@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ lodash.camelcase: 4.3.0
+ lodash.kebabcase: 4.1.1
+ lodash.snakecase: 4.1.1
+ lodash.startcase: 4.4.0
+ lodash.upperfirst: 4.3.1
+
+ '@commitlint/execute-rule@19.8.1': {}
+
+ '@commitlint/format@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ chalk: 5.4.1
+
+ '@commitlint/is-ignored@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ semver: 7.7.2
+
+ '@commitlint/lint@19.8.1':
+ dependencies:
+ '@commitlint/is-ignored': 19.8.1
+ '@commitlint/parse': 19.8.1
+ '@commitlint/rules': 19.8.1
+ '@commitlint/types': 19.8.1
+
+ '@commitlint/load@19.8.1(@types/node@24.0.3)(typescript@5.8.3)':
+ dependencies:
+ '@commitlint/config-validator': 19.8.1
+ '@commitlint/execute-rule': 19.8.1
+ '@commitlint/resolve-extends': 19.8.1
+ '@commitlint/types': 19.8.1
+ chalk: 5.4.1
+ cosmiconfig: 9.0.0(typescript@5.8.3)
+ cosmiconfig-typescript-loader: 6.1.0(@types/node@24.0.3)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3)
+ lodash.isplainobject: 4.0.6
+ lodash.merge: 4.6.2
+ lodash.uniq: 4.5.0
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+
+ '@commitlint/message@19.8.1': {}
+
+ '@commitlint/parse@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ conventional-changelog-angular: 7.0.0
+ conventional-commits-parser: 5.0.0
+
+ '@commitlint/read@19.8.1':
+ dependencies:
+ '@commitlint/top-level': 19.8.1
+ '@commitlint/types': 19.8.1
+ git-raw-commits: 4.0.0
+ minimist: 1.2.8
+ tinyexec: 1.0.1
+
+ '@commitlint/resolve-extends@19.8.1':
+ dependencies:
+ '@commitlint/config-validator': 19.8.1
+ '@commitlint/types': 19.8.1
+ global-directory: 4.0.1
+ import-meta-resolve: 4.1.0
+ lodash.mergewith: 4.6.2
+ resolve-from: 5.0.0
+
+ '@commitlint/rules@19.8.1':
+ dependencies:
+ '@commitlint/ensure': 19.8.1
+ '@commitlint/message': 19.8.1
+ '@commitlint/to-lines': 19.8.1
+ '@commitlint/types': 19.8.1
+
+ '@commitlint/to-lines@19.8.1': {}
+
+ '@commitlint/top-level@19.8.1':
+ dependencies:
+ find-up: 7.0.0
+
+ '@commitlint/types@19.8.1':
+ dependencies:
+ '@types/conventional-commits-parser': 5.0.1
+ chalk: 5.4.1
+
+ '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-tokenizer@3.0.4': {}
+
+ '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)':
+ dependencies:
+ postcss-selector-parser: 7.1.0
+
+ '@dual-bundle/import-meta-resolve@4.1.0': {}
+
+ '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@2.4.2))':
+ dependencies:
+ eslint: 9.29.0(jiti@2.4.2)
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.1': {}
+
+ '@eslint/config-array@0.20.1':
+ dependencies:
+ '@eslint/object-schema': 2.1.6
+ debug: 4.4.1
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.2.3': {}
+
+ '@eslint/core@0.14.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/core@0.15.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.3.1':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.1
+ espree: 10.4.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@9.29.0': {}
+
+ '@eslint/object-schema@2.1.6': {}
+
+ '@eslint/plugin-kit@0.3.2':
+ dependencies:
+ '@eslint/core': 0.15.0
+ levn: 0.4.1
+
+ '@gulpjs/messages@1.1.0': {}
+
+ '@gulpjs/to-absolute-glob@4.0.0':
+ dependencies:
+ is-negated-glob: 1.0.0
+
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.6':
+ dependencies:
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.3.1
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.3.1': {}
+
+ '@humanwhocodes/retry@0.4.3': {}
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@javascript-obfuscator/escodegen@2.3.0':
+ dependencies:
+ '@javascript-obfuscator/estraverse': 5.4.0
+ esprima: 4.0.1
+ esutils: 2.0.3
+ optionator: 0.8.3
+ optionalDependencies:
+ source-map: 0.6.1
+
+ '@javascript-obfuscator/estraverse@5.4.0': {}
+
+ '@jridgewell/gen-mapping@0.3.8':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/source-map@0.3.6':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@keyv/serialize@1.0.3':
+ dependencies:
+ buffer: 6.0.3
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@socket.io/component-emitter@3.1.2': {}
+
+ '@trysound/sax@0.2.0': {}
+
+ '@types/conventional-commits-parser@5.0.1':
+ dependencies:
+ '@types/node': 24.0.3
+
+ '@types/cors@2.8.19':
+ dependencies:
+ '@types/node': 24.0.3
+
+ '@types/estree@1.0.8': {}
+
+ '@types/expect@1.20.4': {}
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/linkify-it@5.0.0': {}
+
+ '@types/markdown-it@14.1.2':
+ dependencies:
+ '@types/linkify-it': 5.0.0
+ '@types/mdurl': 2.0.0
+
+ '@types/mdurl@2.0.0': {}
+
+ '@types/minimatch@3.0.5': {}
+
+ '@types/node@24.0.3':
+ dependencies:
+ undici-types: 7.8.0
+
+ '@types/validator@13.15.2': {}
+
+ '@types/vinyl@2.0.12':
+ dependencies:
+ '@types/expect': 1.20.4
+ '@types/node': 24.0.3
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ a-sync-waterfall@1.0.1: {}
+
+ abbrev@2.0.0: {}
+
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ acorn-jsx@5.3.2(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
+ acorn@8.15.0: {}
+
+ acorn@8.8.2: {}
+
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ajv@8.17.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.0.6
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ amdefine@1.0.1: {}
+
+ ansi-colors@1.1.0:
+ dependencies:
+ ansi-wrap: 0.1.0
+
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
+ ansi-escapes@7.0.0:
+ dependencies:
+ environment: 1.1.0
+
+ ansi-gray@0.1.1:
+ dependencies:
+ ansi-wrap: 0.1.0
+
+ ansi-regex@0.2.1: {}
+
+ ansi-regex@2.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.1.0: {}
+
+ ansi-styles@1.1.0: {}
+
+ ansi-styles@2.2.1: {}
+
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.1: {}
+
+ ansi-wrap@0.1.0: {}
+
+ any-promise@1.3.0: {}
+
+ anymatch@1.3.2:
+ dependencies:
+ micromatch: 2.3.11
+ normalize-path: 2.1.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ archy@1.0.0: {}
+
+ arg@5.0.2: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
+
+ arr-diff@2.0.0:
+ dependencies:
+ arr-flatten: 1.1.0
+
+ arr-diff@4.0.0: {}
+
+ arr-flatten@1.1.0: {}
+
+ arr-union@3.1.0: {}
+
+ array-differ@1.0.0: {}
+
+ array-differ@3.0.0: {}
+
+ array-each@1.0.1: {}
+
+ array-find-index@1.0.2: {}
+
+ array-ify@1.0.0: {}
+
+ array-slice@1.1.0: {}
+
+ array-union@2.1.0: {}
+
+ array-uniq@1.0.3: {}
+
+ array-unique@0.2.1: {}
+
+ array-unique@0.3.2: {}
+
+ arrify@2.0.1: {}
+
+ asap@2.0.6: {}
+
+ asn1@0.1.11: {}
+
+ asn1@0.2.6:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ assert-plus@0.1.5: {}
+
+ assert-plus@1.0.0: {}
+
+ assert@2.0.0:
+ dependencies:
+ es6-object-assign: 1.1.0
+ is-nan: 1.3.2
+ object-is: 1.1.6
+ util: 0.12.5
+
+ assign-symbols@1.0.0: {}
+
+ astral-regex@2.0.0: {}
+
+ async-done@2.0.0:
+ dependencies:
+ end-of-stream: 1.4.5
+ once: 1.4.0
+ stream-exhaust: 1.0.2
+
+ async-each-series@0.1.1: {}
+
+ async-each@1.0.6: {}
+
+ async-settle@2.0.0:
+ dependencies:
+ async-done: 2.0.0
+
+ async@0.9.2: {}
+
+ async@2.6.4:
+ dependencies:
+ lodash: 4.17.21
+
+ async@3.2.6: {}
+
+ asynckit@0.4.0: {}
+
+ at-least-node@1.0.0: {}
+
+ atob@2.1.2: {}
+
+ autoprefixer@10.4.21(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.0
+ caniuse-lite: 1.0.30001723
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.1.0
+
+ aws-sign2@0.5.0: {}
+
+ aws-sign2@0.7.0: {}
+
+ aws4@1.13.2: {}
+
+ axios@0.21.4(debug@4.3.2):
+ dependencies:
+ follow-redirects: 1.15.9(debug@4.3.2)
+ transitivePeerDependencies:
+ - debug
+
+ b4a@1.6.7: {}
+
+ bach@2.0.1:
+ dependencies:
+ async-done: 2.0.0
+ async-settle: 2.0.0
+ now-and-later: 3.0.0
+
+ balanced-match@1.0.2: {}
+
+ balanced-match@2.0.0: {}
+
+ bare-events@2.5.4:
+ optional: true
+
+ base64-js@1.5.1: {}
+
+ base64id@2.0.0: {}
+
+ base64url@0.0.6: {}
+
+ base64url@1.0.6:
+ dependencies:
+ concat-stream: 1.4.11
+ meow: 2.0.0
+
+ base@0.11.2:
+ dependencies:
+ cache-base: 1.0.1
+ class-utils: 0.3.6
+ component-emitter: 1.3.1
+ define-property: 1.0.0
+ isobject: 3.0.1
+ mixin-deep: 1.3.2
+ pascalcase: 0.1.1
+
+ basic-auth@2.0.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ batch@0.6.1: {}
+
+ bcrypt-pbkdf@1.0.2:
+ dependencies:
+ tweetnacl: 0.14.5
+
+ beeper@1.1.1: {}
+
+ binary-extensions@1.13.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ binaryextensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+ optional: true
+
+ bl@0.9.5:
+ dependencies:
+ readable-stream: 1.0.34
+
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ bl@5.1.0:
+ dependencies:
+ buffer: 6.0.3
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ bluebird@3.7.2: {}
+
+ boolbase@1.0.0: {}
+
+ boom@0.4.2:
+ dependencies:
+ hoek: 0.9.1
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@1.8.5:
+ dependencies:
+ expand-range: 1.8.2
+ preserve: 0.2.0
+ repeat-element: 1.1.4
+
+ braces@2.3.2:
+ dependencies:
+ arr-flatten: 1.1.0
+ array-unique: 0.3.2
+ extend-shallow: 2.0.1
+ fill-range: 4.0.0
+ isobject: 3.0.1
+ repeat-element: 1.1.4
+ snapdragon: 0.8.2
+ snapdragon-node: 2.1.1
+ split-string: 3.1.0
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browser-sync-client@2.29.3:
+ dependencies:
+ etag: 1.8.1
+ fresh: 0.5.2
+ mitt: 1.2.0
+
+ browser-sync-ui@2.29.3:
+ dependencies:
+ async-each-series: 0.1.1
+ chalk: 4.1.2
+ connect-history-api-fallback: 1.6.0
+ immutable: 3.8.2
+ server-destroy: 1.0.1
+ socket.io-client: 4.8.1
+ stream-throttle: 0.1.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ browser-sync@2.29.3:
+ dependencies:
+ browser-sync-client: 2.29.3
+ browser-sync-ui: 2.29.3
+ bs-recipes: 1.3.4
+ chalk: 4.1.2
+ chokidar: 3.6.0
+ connect: 3.6.6
+ connect-history-api-fallback: 1.6.0
+ dev-ip: 1.0.1
+ easy-extender: 2.3.4
+ eazy-logger: 4.1.0
+ etag: 1.8.1
+ fresh: 0.5.2
+ fs-extra: 3.0.1
+ http-proxy: 1.18.1
+ immutable: 3.8.2
+ localtunnel: 2.0.2
+ micromatch: 4.0.8
+ opn: 5.3.0
+ portscanner: 2.2.0
+ raw-body: 2.5.2
+ resp-modifier: 6.0.2
+ rx: 4.1.0
+ send: 0.16.2
+ serve-index: 1.9.1
+ serve-static: 1.13.2
+ server-destroy: 1.0.1
+ socket.io: 4.8.1
+ ua-parser-js: 1.0.40
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+
+ browserslist@4.25.0:
+ dependencies:
+ caniuse-lite: 1.0.30001723
+ electron-to-chromium: 1.5.169
+ node-releases: 2.0.19
+ update-browserslist-db: 1.1.3(browserslist@4.25.0)
+
+ bs-recipes@1.3.4: {}
+
+ buffer-equal-constant-time@1.0.1: {}
+
+ buffer-from@1.1.2: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferstreams@1.0.1:
+ dependencies:
+ readable-stream: 1.1.14
+
+ bytes@3.1.2: {}
+
+ cache-base@1.0.1:
+ dependencies:
+ collection-visit: 1.0.0
+ component-emitter: 1.3.1
+ get-value: 2.0.6
+ has-value: 1.0.0
+ isobject: 3.0.1
+ set-value: 2.0.1
+ to-object-path: 0.3.0
+ union-value: 1.0.1
+ unset-value: 1.0.0
+
+ cacheable@1.10.0:
+ dependencies:
+ hookified: 1.9.1
+ keyv: 5.3.4
+
+ cachedir@2.3.0: {}
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ callsites@3.1.0: {}
+
+ camel-case@3.0.0:
+ dependencies:
+ no-case: 2.3.2
+ upper-case: 1.1.3
+
+ camel-case@4.1.2:
+ dependencies:
+ pascal-case: 3.1.2
+ tslib: 2.8.1
+
+ camelcase-css@2.0.1: {}
+
+ camelcase-keys@1.0.0:
+ dependencies:
+ camelcase: 1.2.1
+ map-obj: 1.0.1
+
+ camelcase-keys@2.1.0:
+ dependencies:
+ camelcase: 2.1.1
+ map-obj: 1.0.1
+
+ camelcase@1.2.1: {}
+
+ camelcase@2.1.1: {}
+
+ caniuse-api@3.0.0:
+ dependencies:
+ browserslist: 4.25.0
+ caniuse-lite: 1.0.30001723
+ lodash.memoize: 4.1.2
+ lodash.uniq: 4.5.0
+
+ caniuse-lite@1.0.30001723: {}
+
+ caseless@0.12.0: {}
+
+ caseless@0.8.0: {}
+
+ chalk@0.5.1:
+ dependencies:
+ ansi-styles: 1.1.0
+ escape-string-regexp: 1.0.5
+ has-ansi: 0.1.0
+ strip-ansi: 0.3.0
+ supports-color: 0.2.0
+
+ chalk@1.1.3:
+ dependencies:
+ ansi-styles: 2.2.1
+ escape-string-regexp: 1.0.5
+ has-ansi: 2.0.0
+ strip-ansi: 3.0.1
+ supports-color: 2.0.0
+
+ chalk@2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ chance@1.1.9: {}
+
+ char-regex@1.0.2: {}
+
+ chardet@0.7.0: {}
+
+ charenc@0.0.2: {}
+
+ cheerio-select@2.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-select: 5.1.0
+ css-what: 6.1.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+
+ cheerio@1.1.0:
+ dependencies:
+ cheerio-select: 2.1.0
+ dom-serializer: 2.0.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ encoding-sniffer: 0.2.1
+ htmlparser2: 10.0.0
+ parse5: 7.3.0
+ parse5-htmlparser2-tree-adapter: 7.1.0
+ parse5-parser-stream: 7.1.2
+ undici: 7.10.0
+ whatwg-mimetype: 4.0.0
+
+ chokidar@1.7.0:
+ dependencies:
+ anymatch: 1.3.2
+ async-each: 1.0.6
+ glob-parent: 2.0.0
+ inherits: 2.0.4
+ is-binary-path: 1.0.1
+ is-glob: 2.0.1
+ path-is-absolute: 1.0.1
+ readdirp: 2.2.1
+ optionalDependencies:
+ fsevents: 1.2.13
+ transitivePeerDependencies:
+ - supports-color
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
+ class-utils@0.3.6:
+ dependencies:
+ arr-union: 3.1.0
+ define-property: 0.2.5
+ isobject: 3.0.1
+ static-extend: 0.1.2
+
+ class-validator@0.14.1:
+ dependencies:
+ '@types/validator': 13.15.2
+ libphonenumber-js: 1.12.9
+ validator: 13.15.15
+
+ clean-css@3.4.28:
+ dependencies:
+ commander: 2.8.1
+ source-map: 0.4.4
+
+ clean-css@4.2.3:
+ dependencies:
+ source-map: 0.6.1
+
+ clean-css@4.2.4:
+ dependencies:
+ source-map: 0.6.1
+
+ cli-cursor@3.1.0:
+ dependencies:
+ restore-cursor: 3.1.0
+
+ cli-cursor@5.0.0:
+ dependencies:
+ restore-cursor: 5.1.0
+
+ cli-spinners@2.9.2: {}
+
+ cli-table@0.3.11:
+ dependencies:
+ colors: 1.0.3
+
+ cli-truncate@4.0.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.2.0
+
+ cli-width@3.0.0: {}
+
+ cliui@7.0.4:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clone-buffer@1.0.0: {}
+
+ clone-stats@0.0.1: {}
+
+ clone-stats@1.0.0: {}
+
+ clone@1.0.4: {}
+
+ clone@2.1.2: {}
+
+ cloneable-readable@1.1.3:
+ dependencies:
+ inherits: 2.0.4
+ process-nextick-args: 2.0.1
+ readable-stream: 2.3.8
+
+ collection-visit@1.0.0:
+ dependencies:
+ map-visit: 1.0.0
+ object-visit: 1.0.1
+
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ color-support@1.1.3: {}
+
+ colord@2.9.3: {}
+
+ colorette@2.0.20: {}
+
+ colors@1.0.3: {}
+
+ columnify@1.6.0:
+ dependencies:
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+
+ combined-stream@0.0.7:
+ dependencies:
+ delayed-stream: 0.0.5
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ command-exists@1.2.9: {}
+
+ commander@10.0.0: {}
+
+ commander@14.0.0: {}
+
+ commander@2.17.1: {}
+
+ commander@2.19.0: {}
+
+ commander@2.20.3: {}
+
+ commander@2.8.1:
+ dependencies:
+ graceful-readlink: 1.0.1
+
+ commander@4.1.1: {}
+
+ commander@5.1.0: {}
+
+ commander@7.2.0: {}
+
+ commitizen@4.3.1(@types/node@24.0.3)(typescript@5.8.3):
+ dependencies:
+ cachedir: 2.3.0
+ cz-conventional-changelog: 3.3.0(@types/node@24.0.3)(typescript@5.8.3)
+ dedent: 0.7.0
+ detect-indent: 6.1.0
+ find-node-modules: 2.1.3
+ find-root: 1.1.0
+ fs-extra: 9.1.0
+ glob: 7.2.3
+ inquirer: 8.2.5
+ is-utf8: 0.2.1
+ lodash: 4.17.21
+ minimist: 1.2.7
+ strip-bom: 4.0.0
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+
+ compare-func@2.0.0:
+ dependencies:
+ array-ify: 1.0.0
+ dot-prop: 5.3.0
+
+ component-emitter@1.3.1: {}
+
+ compressible@2.0.18:
+ dependencies:
+ mime-db: 1.54.0
+
+ compression@1.8.0:
+ dependencies:
+ bytes: 3.1.2
+ compressible: 2.0.18
+ debug: 2.6.9
+ negotiator: 0.6.4
+ on-headers: 1.0.2
+ safe-buffer: 5.2.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ concat-map@0.0.1: {}
+
+ concat-stream@1.4.11:
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 1.1.14
+ typedarray: 0.0.7
+
+ connect-history-api-fallback@1.6.0: {}
+
+ connect-injector@0.4.4:
+ dependencies:
+ debug: 2.6.9
+ q: 1.5.1
+ stream-buffers: 0.2.6
+ uberproto: 1.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ connect@3.6.6:
+ dependencies:
+ debug: 2.6.9
+ finalhandler: 1.1.0
+ parseurl: 1.3.3
+ utils-merge: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ connect@3.7.0:
+ dependencies:
+ debug: 2.6.9
+ finalhandler: 1.1.2
+ parseurl: 1.3.3
+ utils-merge: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ conventional-changelog-angular@7.0.0:
+ dependencies:
+ compare-func: 2.0.0
+
+ conventional-changelog-conventionalcommits@7.0.2:
+ dependencies:
+ compare-func: 2.0.0
+
+ conventional-commit-types@3.0.0: {}
+
+ conventional-commits-parser@5.0.0:
+ dependencies:
+ JSONStream: 1.3.5
+ is-text-path: 2.0.0
+ meow: 12.1.1
+ split2: 4.2.0
+
+ convert-source-map@2.0.0: {}
+
+ cookie@0.7.2: {}
+
+ copy-descriptor@0.1.1: {}
+
+ copy-props@4.0.0:
+ dependencies:
+ each-props: 3.0.0
+ is-plain-object: 5.0.0
+
+ core-util-is@1.0.2: {}
+
+ core-util-is@1.0.3: {}
+
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
+ cosmiconfig-typescript-loader@6.1.0(@types/node@24.0.3)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3):
+ dependencies:
+ '@types/node': 24.0.3
+ cosmiconfig: 9.0.0(typescript@5.8.3)
+ jiti: 2.4.2
+ typescript: 5.8.3
+
+ cosmiconfig@9.0.0(typescript@5.8.3):
+ dependencies:
+ env-paths: 2.2.1
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 5.8.3
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ crypt@0.0.2: {}
+
+ cryptiles@0.2.2:
+ dependencies:
+ boom: 0.4.2
+
+ css-declaration-sorter@7.2.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ css-functions-list@3.2.3: {}
+
+ css-select@4.3.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ nth-check: 2.1.1
+
+ css-select@5.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ nth-check: 2.1.1
+
+ css-tree@2.2.1:
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: 1.2.1
+
+ css-tree@2.3.1:
+ dependencies:
+ mdn-data: 2.0.30
+ source-map-js: 1.2.1
+
+ css-tree@3.1.0:
+ dependencies:
+ mdn-data: 2.12.2
+ source-map-js: 1.2.1
+
+ css-what@6.1.0: {}
+
+ cssesc@3.0.0: {}
+
+ cssnano-preset-default@7.0.7(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.0
+ css-declaration-sorter: 7.2.0(postcss@8.5.6)
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-calc: 10.1.1(postcss@8.5.6)
+ postcss-colormin: 7.0.3(postcss@8.5.6)
+ postcss-convert-values: 7.0.5(postcss@8.5.6)
+ postcss-discard-comments: 7.0.4(postcss@8.5.6)
+ postcss-discard-duplicates: 7.0.2(postcss@8.5.6)
+ postcss-discard-empty: 7.0.1(postcss@8.5.6)
+ postcss-discard-overridden: 7.0.1(postcss@8.5.6)
+ postcss-merge-longhand: 7.0.5(postcss@8.5.6)
+ postcss-merge-rules: 7.0.5(postcss@8.5.6)
+ postcss-minify-font-values: 7.0.1(postcss@8.5.6)
+ postcss-minify-gradients: 7.0.1(postcss@8.5.6)
+ postcss-minify-params: 7.0.3(postcss@8.5.6)
+ postcss-minify-selectors: 7.0.5(postcss@8.5.6)
+ postcss-normalize-charset: 7.0.1(postcss@8.5.6)
+ postcss-normalize-display-values: 7.0.1(postcss@8.5.6)
+ postcss-normalize-positions: 7.0.1(postcss@8.5.6)
+ postcss-normalize-repeat-style: 7.0.1(postcss@8.5.6)
+ postcss-normalize-string: 7.0.1(postcss@8.5.6)
+ postcss-normalize-timing-functions: 7.0.1(postcss@8.5.6)
+ postcss-normalize-unicode: 7.0.3(postcss@8.5.6)
+ postcss-normalize-url: 7.0.1(postcss@8.5.6)
+ postcss-normalize-whitespace: 7.0.1(postcss@8.5.6)
+ postcss-ordered-values: 7.0.2(postcss@8.5.6)
+ postcss-reduce-initial: 7.0.3(postcss@8.5.6)
+ postcss-reduce-transforms: 7.0.1(postcss@8.5.6)
+ postcss-svgo: 7.0.2(postcss@8.5.6)
+ postcss-unique-selectors: 7.0.4(postcss@8.5.6)
+
+ cssnano-utils@5.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ cssnano@7.0.7(postcss@8.5.6):
+ dependencies:
+ cssnano-preset-default: 7.0.7(postcss@8.5.6)
+ lilconfig: 3.1.3
+ postcss: 8.5.6
+
+ csso@5.0.5:
+ dependencies:
+ css-tree: 2.2.1
+
+ ctype@0.5.3: {}
+
+ cuid@2.1.8: {}
+
+ currently-unhandled@0.4.1:
+ dependencies:
+ array-find-index: 1.0.2
+
+ cz-conventional-changelog@3.3.0(@types/node@24.0.3)(typescript@5.8.3):
+ dependencies:
+ chalk: 2.4.2
+ commitizen: 4.3.1(@types/node@24.0.3)(typescript@5.8.3)
+ conventional-commit-types: 3.0.0
+ lodash.map: 4.6.0
+ longest: 2.0.1
+ word-wrap: 1.2.5
+ optionalDependencies:
+ '@commitlint/load': 19.8.1(@types/node@24.0.3)(typescript@5.8.3)
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+
+ dargs@8.1.0: {}
+
+ dashdash@1.14.1:
+ dependencies:
+ assert-plus: 1.0.0
+
+ dateformat@1.0.12:
+ dependencies:
+ get-stdin: 4.0.1
+ meow: 3.7.0
+
+ dateformat@2.2.0: {}
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@4.3.2:
+ dependencies:
+ ms: 2.1.2
+
+ debug@4.3.7:
+ dependencies:
+ ms: 2.1.3
+
+ debug@4.4.1:
+ dependencies:
+ ms: 2.1.3
+
+ decamelize@1.2.0: {}
+
+ decode-uri-component@0.2.2: {}
+
+ dedent@0.7.0: {}
+
+ deep-is@0.1.4: {}
+
+ deepmerge@4.3.1: {}
+
+ defaults@1.0.4:
+ dependencies:
+ clone: 1.0.4
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ define-lazy-prop@2.0.0: {}
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ define-property@0.2.5:
+ dependencies:
+ is-descriptor: 0.1.7
+
+ define-property@1.0.0:
+ dependencies:
+ is-descriptor: 1.0.3
+
+ define-property@2.0.2:
+ dependencies:
+ is-descriptor: 1.0.3
+ isobject: 3.0.1
+
+ delayed-stream@0.0.5: {}
+
+ delayed-stream@1.0.0: {}
+
+ depd@1.1.2: {}
+
+ depd@2.0.0: {}
+
+ dependency-graph@1.0.0: {}
+
+ destroy@1.0.4: {}
+
+ destroy@1.2.0: {}
+
+ detect-file@1.0.0: {}
+
+ detect-indent@6.1.0: {}
+
+ dev-ip@1.0.1: {}
+
+ didyoumean@1.2.2: {}
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ dlv@1.1.3: {}
+
+ dom-serializer@1.4.1:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ entities: 2.2.0
+
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@4.3.1:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@2.8.0:
+ dependencies:
+ dom-serializer: 1.4.1
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ dot-prop@5.3.0:
+ dependencies:
+ is-obj: 2.0.0
+
+ doublearray@0.0.2: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ duplexer2@0.0.2:
+ dependencies:
+ readable-stream: 1.1.14
+
+ each-props@3.0.0:
+ dependencies:
+ is-plain-object: 5.0.0
+ object.defaults: 1.1.0
+
+ eastasianwidth@0.2.0: {}
+
+ easy-extender@2.3.4:
+ dependencies:
+ lodash: 4.17.21
+
+ easy-transform-stream@1.0.1: {}
+
+ eazy-logger@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+
+ ecc-jsbn@0.1.2:
+ dependencies:
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+
+ ecdsa-sig-formatter@1.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ ee-first@1.1.1: {}
+
+ ejs@3.1.10:
+ dependencies:
+ jake: 10.9.2
+
+ electron-to-chromium@1.5.169: {}
+
+ emoji-regex@10.4.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ encodeurl@1.0.2: {}
+
+ encodeurl@2.0.0: {}
+
+ encoding-sniffer@0.2.1:
+ dependencies:
+ iconv-lite: 0.6.3
+ whatwg-encoding: 3.1.1
+
+ end-of-stream@1.4.5:
+ dependencies:
+ once: 1.4.0
+
+ engine.io-client@6.6.3:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.7
+ engine.io-parser: 5.2.3
+ ws: 8.17.1
+ xmlhttprequest-ssl: 2.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ engine.io-parser@5.2.3: {}
+
+ engine.io@6.6.4:
+ dependencies:
+ '@types/cors': 2.8.19
+ '@types/node': 24.0.3
+ accepts: 1.3.8
+ base64id: 2.0.0
+ cookie: 0.7.2
+ cors: 2.8.5
+ debug: 4.3.7
+ engine.io-parser: 5.2.3
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ entities@2.0.3: {}
+
+ entities@2.2.0: {}
+
+ entities@3.0.1: {}
+
+ entities@4.5.0: {}
+
+ entities@6.0.1: {}
+
+ env-paths@2.2.1: {}
+
+ environment@1.1.0: {}
+
+ error-ex@1.3.2:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es6-object-assign@1.1.0: {}
+
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)):
+ dependencies:
+ eslint: 9.29.0(jiti@2.4.2)
+
+ eslint-scope@7.1.1:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-scope@8.4.0:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.3.0: {}
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.1: {}
+
+ eslint@9.29.0(jiti@2.4.2):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
+ '@eslint-community/regexpp': 4.12.1
+ '@eslint/config-array': 0.20.1
+ '@eslint/config-helpers': 0.2.3
+ '@eslint/core': 0.14.0
+ '@eslint/eslintrc': 3.3.1
+ '@eslint/js': 9.29.0
+ '@eslint/plugin-kit': 0.3.2
+ '@humanfs/node': 0.16.6
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.1
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.4.2
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@10.4.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 4.2.1
+
+ esprima@4.0.1: {}
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
+ esutils@2.0.3: {}
+
+ etag@1.8.1: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ expand-brackets@0.1.5:
+ dependencies:
+ is-posix-bracket: 0.1.1
+
+ expand-brackets@2.1.4:
+ dependencies:
+ debug: 2.6.9
+ define-property: 0.2.5
+ extend-shallow: 2.0.1
+ posix-character-classes: 0.1.1
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ expand-range@1.8.2:
+ dependencies:
+ fill-range: 2.2.4
+
+ expand-tilde@2.0.2:
+ dependencies:
+ homedir-polyfill: 1.0.3
+
+ extend-shallow@2.0.1:
+ dependencies:
+ is-extendable: 0.1.1
+
+ extend-shallow@3.0.2:
+ dependencies:
+ assign-symbols: 1.0.0
+ is-extendable: 1.0.1
+
+ extend@3.0.2: {}
+
+ external-editor@3.1.0:
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+
+ extglob@0.3.2:
+ dependencies:
+ is-extglob: 1.0.0
+
+ extglob@2.0.4:
+ dependencies:
+ array-unique: 0.3.2
+ define-property: 1.0.0
+ expand-brackets: 2.1.4
+ extend-shallow: 2.0.1
+ fragment-cache: 0.2.1
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ extsprintf@1.3.0: {}
+
+ fancy-log@1.3.3:
+ dependencies:
+ ansi-gray: 0.1.1
+ color-support: 1.1.3
+ parse-node-version: 1.0.1
+ time-stamp: 1.1.0
+
+ fancy-log@2.0.0:
+ dependencies:
+ color-support: 1.1.3
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-equals@3.0.3: {}
+
+ fast-fifo@1.3.2: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fast-levenshtein@3.0.0:
+ dependencies:
+ fastest-levenshtein: 1.0.16
+
+ fast-uri@3.0.6: {}
+
+ fastest-levenshtein@1.0.16: {}
+
+ fastq@1.19.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fdir@6.4.6(picomatch@4.0.2):
+ optionalDependencies:
+ picomatch: 4.0.2
+
+ figures@3.2.0:
+ dependencies:
+ escape-string-regexp: 1.0.5
+
+ file-entry-cache@10.1.1:
+ dependencies:
+ flat-cache: 6.1.10
+
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ file-uri-to-path@1.0.0:
+ optional: true
+
+ filelist@1.0.4:
+ dependencies:
+ minimatch: 5.1.6
+
+ filename-regex@2.0.1: {}
+
+ filesize@2.0.4: {}
+
+ fill-range@2.2.4:
+ dependencies:
+ is-number: 2.1.0
+ isobject: 2.1.0
+ randomatic: 3.1.1
+ repeat-element: 1.1.4
+ repeat-string: 1.6.1
+
+ fill-range@4.0.0:
+ dependencies:
+ extend-shallow: 2.0.1
+ is-number: 3.0.0
+ repeat-string: 1.6.1
+ to-regex-range: 2.1.1
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ finalhandler@1.1.0:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.3.0
+ parseurl: 1.3.3
+ statuses: 1.3.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ finalhandler@1.1.2:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.3.0
+ parseurl: 1.3.3
+ statuses: 1.5.0
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ find-node-modules@2.1.3:
+ dependencies:
+ findup-sync: 4.0.0
+ merge: 2.1.1
+
+ find-root@1.1.0: {}
+
+ find-up@1.1.2:
+ dependencies:
+ path-exists: 2.1.0
+ pinkie-promise: 2.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ find-up@7.0.0:
+ dependencies:
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+ unicorn-magic: 0.1.0
+
+ findup-sync@4.0.0:
+ dependencies:
+ detect-file: 1.0.0
+ is-glob: 4.0.3
+ micromatch: 4.0.8
+ resolve-dir: 1.0.1
+
+ findup-sync@5.0.0:
+ dependencies:
+ detect-file: 1.0.0
+ is-glob: 4.0.3
+ micromatch: 4.0.8
+ resolve-dir: 1.0.1
+
+ fined@2.0.0:
+ dependencies:
+ expand-tilde: 2.0.2
+ is-plain-object: 5.0.0
+ object.defaults: 1.1.0
+ object.pick: 1.3.0
+ parse-filepath: 1.0.2
+
+ first-chunk-stream@5.0.0: {}
+
+ flagged-respawn@2.0.0: {}
+
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+
+ flat-cache@6.1.10:
+ dependencies:
+ cacheable: 1.10.0
+ flatted: 3.3.3
+ hookified: 1.9.1
+
+ flatted@3.3.3: {}
+
+ follow-redirects@1.15.9(debug@4.3.2):
+ optionalDependencies:
+ debug: 4.3.2
+
+ for-each@0.3.5:
+ dependencies:
+ is-callable: 1.2.7
+
+ for-in@1.0.2: {}
+
+ for-own@0.1.5:
+ dependencies:
+ for-in: 1.0.2
+
+ for-own@1.0.0:
+ dependencies:
+ for-in: 1.0.2
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ forever-agent@0.5.2: {}
+
+ forever-agent@0.6.1: {}
+
+ form-data@0.2.0:
+ dependencies:
+ async: 0.9.2
+ combined-stream: 0.0.7
+ mime-types: 2.0.14
+
+ form-data@2.3.3:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ fraction.js@4.3.7: {}
+
+ fragment-cache@0.2.1:
+ dependencies:
+ map-cache: 0.2.2
+
+ fresh@0.5.2: {}
+
+ fs-extra@11.3.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+
+ fs-extra@3.0.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 3.0.1
+ universalify: 0.1.2
+
+ fs-extra@9.1.0:
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+
+ fs-mkdirp-stream@2.0.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ streamx: 2.22.1
+
+ fs-path@0.0.24:
+ dependencies:
+ async: 0.9.2
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@1.2.13:
+ dependencies:
+ bindings: 1.5.0
+ nan: 2.22.2
+ optional: true
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ ga-analytics@0.0.7:
+ dependencies:
+ cli-table: 0.3.11
+ commander: 2.20.3
+ googleapis: 1.1.5
+ lodash: 2.4.2
+ moment: 2.30.1
+
+ gapitoken@0.1.5:
+ dependencies:
+ jws: 3.0.0
+ request: 2.88.2
+
+ get-caller-file@2.0.5: {}
+
+ get-east-asian-width@1.3.0: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-stdin@4.0.1: {}
+
+ get-value@2.0.6: {}
+
+ getpass@0.1.7:
+ dependencies:
+ assert-plus: 1.0.0
+
+ git-raw-commits@4.0.0:
+ dependencies:
+ dargs: 8.1.0
+ meow: 12.1.1
+ split2: 4.2.0
+
+ glob-base@0.3.0:
+ dependencies:
+ glob-parent: 2.0.0
+ is-glob: 2.0.1
+
+ glob-parent@2.0.0:
+ dependencies:
+ is-glob: 2.0.1
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-stream@8.0.3:
+ dependencies:
+ '@gulpjs/to-absolute-glob': 4.0.0
+ anymatch: 3.1.3
+ fastq: 1.19.1
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ is-negated-glob: 1.0.0
+ normalize-path: 3.0.0
+ streamx: 2.22.1
+
+ glob-watcher@6.0.0:
+ dependencies:
+ async-done: 2.0.0
+ chokidar: 3.6.0
+
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ global-directory@4.0.1:
+ dependencies:
+ ini: 4.1.1
+
+ global-modules@1.0.0:
+ dependencies:
+ global-prefix: 1.0.2
+ is-windows: 1.0.2
+ resolve-dir: 1.0.1
+
+ global-modules@2.0.0:
+ dependencies:
+ global-prefix: 3.0.0
+
+ global-prefix@1.0.2:
+ dependencies:
+ expand-tilde: 2.0.2
+ homedir-polyfill: 1.0.3
+ ini: 1.3.8
+ is-windows: 1.0.2
+ which: 1.3.1
+
+ global-prefix@3.0.0:
+ dependencies:
+ ini: 1.3.8
+ kind-of: 6.0.3
+ which: 1.3.1
+
+ globals@14.0.0: {}
+
+ globby@11.1.0:
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.3
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 3.0.0
+
+ globjoin@0.1.4: {}
+
+ glogg@1.0.2:
+ dependencies:
+ sparkles: 1.0.1
+
+ glogg@2.2.0:
+ dependencies:
+ sparkles: 2.1.0
+
+ googleapis@1.1.5:
+ dependencies:
+ async: 0.9.2
+ gapitoken: 0.1.5
+ request: 2.51.0
+ string-template: 0.2.1
+
+ gopd@1.2.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ graceful-readlink@1.0.1: {}
+
+ gulp-clean-css@4.3.0:
+ dependencies:
+ clean-css: 4.2.3
+ plugin-error: 1.0.1
+ through2: 3.0.1
+ vinyl-sourcemaps-apply: 0.2.1
+
+ gulp-cli@3.1.0:
+ dependencies:
+ '@gulpjs/messages': 1.1.0
+ chalk: 4.1.2
+ copy-props: 4.0.0
+ gulplog: 2.2.0
+ interpret: 3.1.1
+ liftoff: 5.0.1
+ mute-stdout: 2.0.0
+ replace-homedir: 2.0.0
+ semver-greatest-satisfied-range: 2.0.0
+ string-width: 4.2.3
+ v8flags: 4.0.1
+ yargs: 16.2.0
+
+ gulp-ext-replace@0.3.0:
+ dependencies:
+ through2: 2.0.5
+
+ gulp-filesize@0.0.6:
+ dependencies:
+ filesize: 2.0.4
+ gulp-util: 2.2.20
+ map-stream: 0.0.7
+
+ gulp-htmlclean@2.7.22:
+ dependencies:
+ htmlclean: 3.0.8
+ plugin-error: 1.0.1
+ through2: 2.0.5
+
+ gulp-htmlmin@5.0.1:
+ dependencies:
+ html-minifier: 3.5.21
+ plugin-error: 1.0.1
+ through2: 2.0.5
+
+ gulp-javascript-obfuscator@1.1.6:
+ dependencies:
+ javascript-obfuscator: 4.1.1
+ plugin-error: 1.0.1
+ through2: 2.0.5
+ vinyl: 2.2.1
+
+ gulp-minify-css@1.2.4:
+ dependencies:
+ clean-css: 3.4.28
+ gulp-util: 3.0.8
+ object-assign: 4.1.1
+ readable-stream: 2.3.8
+ vinyl-bufferstream: 1.0.1
+ vinyl-sourcemaps-apply: 0.2.1
+
+ gulp-plugin-extras@0.3.0:
+ dependencies:
+ '@types/vinyl': 2.0.12
+ chalk: 5.4.1
+ easy-transform-stream: 1.0.1
+
+ gulp-postcss@10.0.0(jiti@2.4.2)(postcss@8.5.6):
+ dependencies:
+ fancy-log: 2.0.0
+ plugin-error: 2.0.1
+ postcss: 8.5.6
+ postcss-load-config: 5.1.0(jiti@2.4.2)(postcss@8.5.6)
+ vinyl-sourcemaps-apply: 0.2.1
+ transitivePeerDependencies:
+ - jiti
+ - tsx
+
+ gulp-replace@1.1.4:
+ dependencies:
+ '@types/node': 24.0.3
+ '@types/vinyl': 2.0.12
+ istextorbinary: 3.3.0
+ replacestream: 4.0.3
+ yargs-parser: 22.0.0
+
+ gulp-rev@11.0.0(gulp@5.0.1):
+ dependencies:
+ gulp-plugin-extras: 0.3.0
+ modify-filename: 2.0.0
+ rev-hash: 4.1.0
+ rev-path: 3.0.0
+ sort-keys: 5.1.0
+ vinyl: 3.0.1
+ vinyl-file: 5.0.0
+ optionalDependencies:
+ gulp: 5.0.1
+
+ gulp-terser@2.1.0:
+ dependencies:
+ plugin-error: 1.0.1
+ terser: 5.43.0
+ through2: 4.0.2
+ vinyl-sourcemaps-apply: 0.2.1
+
+ gulp-uglify-es@3.0.0:
+ dependencies:
+ o-stream: 0.3.0
+ plugin-error: 1.0.1
+ terser: 5.43.0
+ vinyl: 2.2.1
+ vinyl-sourcemaps-apply: 0.2.1
+
+ gulp-util@2.2.20:
+ dependencies:
+ chalk: 0.5.1
+ dateformat: 1.0.12
+ lodash._reinterpolate: 2.4.1
+ lodash.template: 2.4.1
+ minimist: 0.2.4
+ multipipe: 0.1.2
+ through2: 0.5.1
+ vinyl: 0.2.3
+
+ gulp-util@3.0.8:
+ dependencies:
+ array-differ: 1.0.0
+ array-uniq: 1.0.3
+ beeper: 1.1.1
+ chalk: 1.1.3
+ dateformat: 2.2.0
+ fancy-log: 1.3.3
+ gulplog: 1.0.0
+ has-gulplog: 0.1.0
+ lodash._reescape: 3.0.0
+ lodash._reevaluate: 3.0.0
+ lodash._reinterpolate: 3.0.0
+ lodash.template: 3.6.2
+ minimist: 1.2.8
+ multipipe: 0.1.2
+ object-assign: 3.0.0
+ replace-ext: 0.0.1
+ through2: 2.0.5
+ vinyl: 0.5.3
+
+ gulp-version-number@0.2.4:
+ dependencies:
+ fs-path: 0.0.24
+ map-stream: 0.0.7
+
+ gulp@5.0.1:
+ dependencies:
+ glob-watcher: 6.0.0
+ gulp-cli: 3.1.0
+ undertaker: 2.0.0
+ vinyl-fs: 4.0.2
+
+ gulplog@1.0.0:
+ dependencies:
+ glogg: 1.0.2
+
+ gulplog@2.2.0:
+ dependencies:
+ glogg: 2.2.0
+
+ har-schema@2.0.0: {}
+
+ har-validator@5.1.5:
+ dependencies:
+ ajv: 6.12.6
+ har-schema: 2.0.0
+
+ has-ansi@0.1.0:
+ dependencies:
+ ansi-regex: 0.2.1
+
+ has-ansi@2.0.0:
+ dependencies:
+ ansi-regex: 2.1.1
+
+ has-flag@3.0.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-gulplog@0.1.0:
+ dependencies:
+ sparkles: 1.0.1
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ has-value@0.3.1:
+ dependencies:
+ get-value: 2.0.6
+ has-values: 0.1.4
+ isobject: 2.1.0
+
+ has-value@1.0.0:
+ dependencies:
+ get-value: 2.0.6
+ has-values: 1.0.0
+ isobject: 3.0.1
+
+ has-values@0.1.4: {}
+
+ has-values@1.0.0:
+ dependencies:
+ is-number: 3.0.0
+ kind-of: 4.0.0
+
+ hasha@3.0.0:
+ dependencies:
+ is-stream: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hawk@1.1.1:
+ dependencies:
+ boom: 0.4.2
+ cryptiles: 0.2.2
+ hoek: 0.9.1
+ sntp: 0.2.4
+
+ he@1.2.0: {}
+
+ hexo-browsersync@0.3.0:
+ dependencies:
+ browser-sync: 2.29.3
+ connect-injector: 0.4.4
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+
+ hexo-cli@4.3.2:
+ dependencies:
+ abbrev: 2.0.0
+ bluebird: 3.7.2
+ command-exists: 1.2.9
+ hexo-fs: 4.1.3
+ hexo-log: 4.1.0
+ hexo-util: 3.3.0
+ minimist: 1.2.8
+ picocolors: 1.1.1
+ resolve: 1.22.10
+ tildify: 2.0.0
+
+ hexo-excerpt@1.3.1:
+ dependencies:
+ css-select: 4.3.0
+ dom-serializer: 1.4.1
+ domutils: 2.8.0
+ htmlparser2: 6.1.0
+ lodash.defaults: 4.2.0
+
+ hexo-filter-nofollow@2.0.2: {}
+
+ hexo-front-matter@4.2.1:
+ dependencies:
+ js-yaml: 4.1.0
+
+ hexo-fs@0.2.3:
+ dependencies:
+ bluebird: 3.7.2
+ chokidar: 1.7.0
+ escape-string-regexp: 1.0.5
+ graceful-fs: 4.2.11
+ transitivePeerDependencies:
+ - supports-color
+
+ hexo-fs@4.1.3:
+ dependencies:
+ bluebird: 3.7.2
+ chokidar: 3.6.0
+ graceful-fs: 4.2.11
+ hexo-util: 3.3.0
+
+ hexo-fs@5.0.0:
+ dependencies:
+ bluebird: 3.7.2
+ chokidar: 4.0.3
+ graceful-fs: 4.2.11
+ hexo-util: 3.3.0
+
+ hexo-generator-index@4.0.0:
+ dependencies:
+ hexo-pagination: 3.0.0
+
+ hexo-generator-sitemap@3.0.1(chokidar@3.6.0):
+ dependencies:
+ hexo-util: 2.7.0
+ micromatch: 4.0.8
+ nunjucks: 3.2.4(chokidar@3.6.0)
+ transitivePeerDependencies:
+ - chokidar
+
+ hexo-i18n@2.0.0:
+ dependencies:
+ sprintf-js: 1.1.3
+
+ hexo-log@4.1.0:
+ dependencies:
+ picocolors: 1.1.1
+
+ hexo-pagination@3.0.0: {}
+
+ hexo-pagination@4.0.0: {}
+
+ hexo-related-popular-posts@5.0.1:
+ dependencies:
+ cheerio: 1.1.0
+ columnify: 1.6.0
+ ga-analytics: 0.0.7
+ hasha: 3.0.0
+ hexo-fs: 0.2.3
+ kuromoji: 0.1.2
+ log-util: 1.2.0
+ mkdirp: 0.5.6
+ moment: 2.30.1
+ transitivePeerDependencies:
+ - supports-color
+
+ hexo-renderer-ejs@2.0.0:
+ dependencies:
+ ejs: 3.1.10
+
+ hexo-renderer-markdown-it@5.0.0:
+ dependencies:
+ hexo-util: 2.7.0
+ markdown-it: 11.0.1
+ markdown-it-abbr: 1.0.4
+ markdown-it-cjk-breaks: 1.1.3
+ markdown-it-container: 3.0.0
+ markdown-it-deflist: 2.1.0
+ markdown-it-emoji: 1.4.0
+ markdown-it-footnote: 3.0.3
+ markdown-it-ins: 3.0.1
+ markdown-it-mark: 3.0.1
+ markdown-it-sub: 1.0.0
+ markdown-it-sup: 1.0.0
+
+ hexo-renderer-stylus@3.0.1:
+ dependencies:
+ nib: 1.2.0(stylus@0.62.0)
+ stylus: 0.62.0
+ transitivePeerDependencies:
+ - supports-color
+
+ hexo-server@3.0.0:
+ dependencies:
+ bluebird: 3.7.2
+ compression: 1.8.0
+ connect: 3.7.0
+ mime: 3.0.0
+ morgan: 1.10.0
+ open: 8.4.2
+ picocolors: 1.1.1
+ serve-static: 1.16.2
+ transitivePeerDependencies:
+ - supports-color
+
+ hexo-util@2.7.0:
+ dependencies:
+ bluebird: 3.7.2
+ camel-case: 4.1.2
+ cross-spawn: 7.0.6
+ deepmerge: 4.3.1
+ highlight.js: 11.11.1
+ htmlparser2: 7.2.0
+ prismjs: 1.30.0
+ strip-indent: 3.0.0
+
+ hexo-util@3.3.0:
+ dependencies:
+ camel-case: 4.1.2
+ cross-spawn: 7.0.6
+ deepmerge: 4.3.1
+ highlight.js: 11.11.1
+ htmlparser2: 9.1.0
+ prismjs: 1.30.0
+ strip-indent: 3.0.0
+
+ hexo@7.3.0(chokidar@3.6.0):
+ dependencies:
+ abbrev: 2.0.0
+ archy: 1.0.0
+ bluebird: 3.7.2
+ hexo-cli: 4.3.2
+ hexo-front-matter: 4.2.1
+ hexo-fs: 4.1.3
+ hexo-i18n: 2.0.0
+ hexo-log: 4.1.0
+ hexo-util: 3.3.0
+ js-yaml: 4.1.0
+ js-yaml-js-types: 1.0.1(js-yaml@4.1.0)
+ micromatch: 4.0.8
+ moize: 6.1.6
+ moment: 2.30.1
+ moment-timezone: 0.5.48
+ nunjucks: 3.2.4(chokidar@3.6.0)
+ picocolors: 1.1.1
+ pretty-hrtime: 1.0.3
+ resolve: 1.22.10
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ tildify: 2.0.0
+ titlecase: 1.1.3
+ warehouse: 5.0.1
+ transitivePeerDependencies:
+ - chokidar
+
+ highlight.js@11.11.1: {}
+
+ hoek@0.9.1: {}
+
+ homedir-polyfill@1.0.3:
+ dependencies:
+ parse-passwd: 1.0.0
+
+ hookified@1.9.1: {}
+
+ hosted-git-info@2.8.9: {}
+
+ html-minifier@3.5.21:
+ dependencies:
+ camel-case: 3.0.0
+ clean-css: 4.2.4
+ commander: 2.17.1
+ he: 1.2.0
+ param-case: 2.1.1
+ relateurl: 0.2.7
+ uglify-js: 3.4.10
+
+ html-tags@3.3.1: {}
+
+ htmlclean@3.0.8: {}
+
+ htmlparser2@10.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ entities: 6.0.1
+
+ htmlparser2@6.1.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ entities: 2.2.0
+
+ htmlparser2@7.2.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ entities: 3.0.1
+
+ htmlparser2@9.1.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ entities: 4.5.0
+
+ http-errors@1.6.3:
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.3
+ setprototypeof: 1.1.0
+ statuses: 1.4.0
+
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
+ http-proxy@1.18.1:
+ dependencies:
+ eventemitter3: 4.0.7
+ follow-redirects: 1.15.9(debug@4.3.2)
+ requires-port: 1.0.0
+ transitivePeerDependencies:
+ - debug
+
+ http-signature@0.10.1:
+ dependencies:
+ asn1: 0.1.11
+ assert-plus: 0.1.5
+ ctype: 0.5.3
+
+ http-signature@1.2.0:
+ dependencies:
+ assert-plus: 1.0.0
+ jsprim: 1.4.2
+ sshpk: 1.18.0
+
+ husky@9.1.7: {}
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ ieee754@1.2.1: {}
+
+ ignore@5.3.2: {}
+
+ ignore@7.0.5: {}
+
+ immutable@3.8.2: {}
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ import-meta-resolve@4.1.0: {}
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@1.2.2:
+ dependencies:
+ get-stdin: 4.0.1
+ minimist: 1.2.8
+ repeating: 1.1.3
+
+ indent-string@2.1.0:
+ dependencies:
+ repeating: 2.0.1
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.3: {}
+
+ inherits@2.0.4: {}
+
+ ini@1.3.8: {}
+
+ ini@4.1.1: {}
+
+ inquirer@8.2.5:
+ dependencies:
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-width: 3.0.0
+ external-editor: 3.1.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 0.0.8
+ ora: 5.4.1
+ run-async: 2.4.1
+ rxjs: 7.8.2
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ through: 2.3.8
+ wrap-ansi: 7.0.0
+
+ interpret@3.1.1: {}
+
+ inversify@6.0.1: {}
+
+ is-absolute@1.0.0:
+ dependencies:
+ is-relative: 1.0.0
+ is-windows: 1.0.2
+
+ is-accessor-descriptor@1.0.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-arguments@1.2.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-arrayish@0.2.1: {}
+
+ is-binary-path@1.0.1:
+ dependencies:
+ binary-extensions: 1.13.1
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-buffer@1.1.6: {}
+
+ is-callable@1.2.7: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-data-descriptor@1.0.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-descriptor@0.1.7:
+ dependencies:
+ is-accessor-descriptor: 1.0.1
+ is-data-descriptor: 1.0.1
+
+ is-descriptor@1.0.3:
+ dependencies:
+ is-accessor-descriptor: 1.0.1
+ is-data-descriptor: 1.0.1
+
+ is-docker@2.2.1: {}
+
+ is-dotfile@1.0.3: {}
+
+ is-equal-shallow@0.1.3:
+ dependencies:
+ is-primitive: 2.0.0
+
+ is-extendable@0.1.1: {}
+
+ is-extendable@1.0.1:
+ dependencies:
+ is-plain-object: 2.0.4
+
+ is-extglob@1.0.0: {}
+
+ is-extglob@2.1.1: {}
+
+ is-finite@1.1.0: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-fullwidth-code-point@4.0.0: {}
+
+ is-fullwidth-code-point@5.0.0:
+ dependencies:
+ get-east-asian-width: 1.3.0
+
+ is-generator-function@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-glob@2.0.1:
+ dependencies:
+ is-extglob: 1.0.0
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-interactive@1.0.0: {}
+
+ is-nan@1.3.2:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+
+ is-negated-glob@1.0.0: {}
+
+ is-number-like@1.0.8:
+ dependencies:
+ lodash.isfinite: 3.3.2
+
+ is-number@2.1.0:
+ dependencies:
+ kind-of: 3.2.2
+
+ is-number@3.0.0:
+ dependencies:
+ kind-of: 3.2.2
+
+ is-number@4.0.0: {}
+
+ is-number@7.0.0: {}
+
+ is-obj@2.0.0: {}
+
+ is-plain-obj@4.1.0: {}
+
+ is-plain-object@2.0.4:
+ dependencies:
+ isobject: 3.0.1
+
+ is-plain-object@5.0.0: {}
+
+ is-posix-bracket@0.1.1: {}
+
+ is-primitive@2.0.0: {}
+
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ is-relative@1.0.0:
+ dependencies:
+ is-unc-path: 1.0.0
+
+ is-stream@1.1.0: {}
+
+ is-text-path@2.0.0:
+ dependencies:
+ text-extensions: 2.4.0
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.19
+
+ is-typedarray@1.0.0: {}
+
+ is-unc-path@1.0.0:
+ dependencies:
+ unc-path-regex: 0.1.2
+
+ is-unicode-supported@0.1.0: {}
+
+ is-utf8@0.2.1: {}
+
+ is-valid-glob@1.0.0: {}
+
+ is-windows@1.0.2: {}
+
+ is-wsl@1.1.0: {}
+
+ is-wsl@2.2.0:
+ dependencies:
+ is-docker: 2.2.1
+
+ isarray@0.0.1: {}
+
+ isarray@1.0.0: {}
+
+ isexe@2.0.0: {}
+
+ isexe@3.1.1: {}
+
+ isobject@2.1.0:
+ dependencies:
+ isarray: 1.0.0
+
+ isobject@3.0.1: {}
+
+ isstream@0.1.2: {}
+
+ istextorbinary@3.3.0:
+ dependencies:
+ binaryextensions: 2.3.0
+ textextensions: 3.3.0
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jake@10.9.2:
+ dependencies:
+ async: 3.2.6
+ chalk: 4.1.2
+ filelist: 1.0.4
+ minimatch: 3.1.2
+
+ javascript-obfuscator@4.1.1:
+ dependencies:
+ '@javascript-obfuscator/escodegen': 2.3.0
+ '@javascript-obfuscator/estraverse': 5.4.0
+ acorn: 8.8.2
+ assert: 2.0.0
+ chalk: 4.1.2
+ chance: 1.1.9
+ class-validator: 0.14.1
+ commander: 10.0.0
+ eslint-scope: 7.1.1
+ eslint-visitor-keys: 3.3.0
+ fast-deep-equal: 3.1.3
+ inversify: 6.0.1
+ js-string-escape: 1.0.1
+ md5: 2.3.0
+ mkdirp: 2.1.3
+ multimatch: 5.0.0
+ opencollective-postinstall: 2.0.3
+ process: 0.11.10
+ reflect-metadata: 0.1.13
+ source-map-support: 0.5.21
+ string-template: 1.0.0
+ stringz: 2.1.0
+ tslib: 2.5.0
+
+ jiti@1.21.7: {}
+
+ jiti@2.4.2: {}
+
+ js-string-escape@1.0.1: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml-js-types@1.0.1(js-yaml@4.1.0):
+ dependencies:
+ esprima: 4.0.1
+ js-yaml: 4.1.0
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ jsbn@0.1.1: {}
+
+ json-buffer@3.0.1: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-parse-even-better-errors@4.0.0: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-schema-traverse@1.0.0: {}
+
+ json-schema@0.4.0: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json-stringify-safe@5.0.1: {}
+
+ jsonfile@3.0.1:
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsonfile@6.1.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsonparse@1.3.1: {}
+
+ jsprim@1.4.2:
+ dependencies:
+ assert-plus: 1.0.0
+ extsprintf: 1.3.0
+ json-schema: 0.4.0
+ verror: 1.10.0
+
+ jwa@1.0.2:
+ dependencies:
+ base64url: 0.0.6
+ buffer-equal-constant-time: 1.0.1
+ ecdsa-sig-formatter: 1.0.11
+
+ jws@3.0.0:
+ dependencies:
+ base64url: 1.0.6
+ jwa: 1.0.2
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ keyv@5.3.4:
+ dependencies:
+ '@keyv/serialize': 1.0.3
+
+ kind-of@3.2.2:
+ dependencies:
+ is-buffer: 1.1.6
+
+ kind-of@4.0.0:
+ dependencies:
+ is-buffer: 1.1.6
+
+ kind-of@6.0.3: {}
+
+ known-css-properties@0.36.0: {}
+
+ kuromoji@0.1.2:
+ dependencies:
+ async: 2.6.4
+ doublearray: 0.0.2
+ zlibjs: 0.3.1
+
+ last-run@2.0.0: {}
+
+ lead@4.0.0: {}
+
+ levn@0.3.0:
+ dependencies:
+ prelude-ls: 1.1.2
+ type-check: 0.3.2
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ libphonenumber-js@1.12.9: {}
+
+ liftoff@5.0.1:
+ dependencies:
+ extend: 3.0.2
+ findup-sync: 5.0.0
+ fined: 2.0.0
+ flagged-respawn: 2.0.0
+ is-plain-object: 5.0.0
+ rechoir: 0.8.0
+ resolve: 1.22.10
+
+ lilconfig@3.1.3: {}
+
+ limiter@1.1.5: {}
+
+ lines-and-columns@1.2.4: {}
+
+ linkify-it@3.0.3:
+ dependencies:
+ uc.micro: 1.0.6
+
+ linkify-it@4.0.1:
+ dependencies:
+ uc.micro: 1.0.6
+
+ lint-staged@16.1.2:
+ dependencies:
+ chalk: 5.4.1
+ commander: 14.0.0
+ debug: 4.4.1
+ lilconfig: 3.1.3
+ listr2: 8.3.3
+ micromatch: 4.0.8
+ nano-spawn: 1.0.2
+ pidtree: 0.6.0
+ string-argv: 0.3.2
+ yaml: 2.8.0
+ transitivePeerDependencies:
+ - supports-color
+
+ listr2@8.3.3:
+ dependencies:
+ cli-truncate: 4.0.0
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 6.1.0
+ rfdc: 1.4.1
+ wrap-ansi: 9.0.0
+
+ load-json-file@1.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ parse-json: 2.2.0
+ pify: 2.3.0
+ pinkie-promise: 2.0.1
+ strip-bom: 2.0.0
+
+ localtunnel@2.0.2:
+ dependencies:
+ axios: 0.21.4(debug@4.3.2)
+ debug: 4.3.2
+ openurl: 1.1.1
+ yargs: 17.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ locate-path@7.2.0:
+ dependencies:
+ p-locate: 6.0.0
+
+ lodash._basecopy@3.0.1: {}
+
+ lodash._basetostring@3.0.1: {}
+
+ lodash._basevalues@3.0.0: {}
+
+ lodash._escapehtmlchar@2.4.1:
+ dependencies:
+ lodash._htmlescapes: 2.4.1
+
+ lodash._escapestringchar@2.4.1: {}
+
+ lodash._getnative@3.9.1: {}
+
+ lodash._htmlescapes@2.4.1: {}
+
+ lodash._isiterateecall@3.0.9: {}
+
+ lodash._isnative@2.4.1: {}
+
+ lodash._objecttypes@2.4.1: {}
+
+ lodash._reescape@3.0.0: {}
+
+ lodash._reevaluate@3.0.0: {}
+
+ lodash._reinterpolate@2.4.1: {}
+
+ lodash._reinterpolate@3.0.0: {}
+
+ lodash._reunescapedhtml@2.4.1:
+ dependencies:
+ lodash._htmlescapes: 2.4.1
+ lodash.keys: 2.4.1
+
+ lodash._root@3.0.1: {}
+
+ lodash._shimkeys@2.4.1:
+ dependencies:
+ lodash._objecttypes: 2.4.1
+
+ lodash.camelcase@4.3.0: {}
+
+ lodash.defaults@2.4.1:
+ dependencies:
+ lodash._objecttypes: 2.4.1
+ lodash.keys: 2.4.1
+
+ lodash.defaults@4.2.0: {}
+
+ lodash.escape@2.4.1:
+ dependencies:
+ lodash._escapehtmlchar: 2.4.1
+ lodash._reunescapedhtml: 2.4.1
+ lodash.keys: 2.4.1
+
+ lodash.escape@3.2.0:
+ dependencies:
+ lodash._root: 3.0.1
+
+ lodash.isarguments@3.1.0: {}
+
+ lodash.isarray@3.0.4: {}
+
+ lodash.isfinite@3.3.2: {}
+
+ lodash.isobject@2.4.1:
+ dependencies:
+ lodash._objecttypes: 2.4.1
+
+ lodash.isplainobject@4.0.6: {}
+
+ lodash.kebabcase@4.1.1: {}
+
+ lodash.keys@2.4.1:
+ dependencies:
+ lodash._isnative: 2.4.1
+ lodash._shimkeys: 2.4.1
+ lodash.isobject: 2.4.1
+
+ lodash.keys@3.1.2:
+ dependencies:
+ lodash._getnative: 3.9.1
+ lodash.isarguments: 3.1.0
+ lodash.isarray: 3.0.4
+
+ lodash.map@4.6.0: {}
+
+ lodash.memoize@4.1.2: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash.mergewith@4.6.2: {}
+
+ lodash.restparam@3.6.1: {}
+
+ lodash.snakecase@4.1.1: {}
+
+ lodash.startcase@4.4.0: {}
+
+ lodash.template@2.4.1:
+ dependencies:
+ lodash._escapestringchar: 2.4.1
+ lodash._reinterpolate: 2.4.1
+ lodash.defaults: 2.4.1
+ lodash.escape: 2.4.1
+ lodash.keys: 2.4.1
+ lodash.templatesettings: 2.4.1
+ lodash.values: 2.4.1
+
+ lodash.template@3.6.2:
+ dependencies:
+ lodash._basecopy: 3.0.1
+ lodash._basetostring: 3.0.1
+ lodash._basevalues: 3.0.0
+ lodash._isiterateecall: 3.0.9
+ lodash._reinterpolate: 3.0.0
+ lodash.escape: 3.2.0
+ lodash.keys: 3.1.2
+ lodash.restparam: 3.6.1
+ lodash.templatesettings: 3.1.1
+
+ lodash.templatesettings@2.4.1:
+ dependencies:
+ lodash._reinterpolate: 2.4.1
+ lodash.escape: 2.4.1
+
+ lodash.templatesettings@3.1.1:
+ dependencies:
+ lodash._reinterpolate: 3.0.0
+ lodash.escape: 3.2.0
+
+ lodash.truncate@4.4.2: {}
+
+ lodash.uniq@4.5.0: {}
+
+ lodash.upperfirst@4.3.1: {}
+
+ lodash.values@2.4.1:
+ dependencies:
+ lodash.keys: 2.4.1
+
+ lodash@2.4.2: {}
+
+ lodash@4.17.21: {}
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ log-update@6.1.0:
+ dependencies:
+ ansi-escapes: 7.0.0
+ cli-cursor: 5.0.0
+ slice-ansi: 7.1.0
+ strip-ansi: 7.1.0
+ wrap-ansi: 9.0.0
+
+ log-util@1.2.0:
+ dependencies:
+ chalk: 1.1.3
+ dateformat: 2.2.0
+
+ longest@2.0.1: {}
+
+ loud-rejection@1.6.0:
+ dependencies:
+ currently-unhandled: 0.4.1
+ signal-exit: 3.0.7
+
+ lower-case@1.1.4: {}
+
+ lower-case@2.0.2:
+ dependencies:
+ tslib: 2.8.1
+
+ lru-cache@10.4.3: {}
+
+ map-cache@0.2.2: {}
+
+ map-obj@1.0.1: {}
+
+ map-stream@0.0.7: {}
+
+ map-visit@1.0.0:
+ dependencies:
+ object-visit: 1.0.1
+
+ markdown-it-abbr@1.0.4: {}
+
+ markdown-it-abbr@2.0.0: {}
+
+ markdown-it-anchor@9.2.0(@types/markdown-it@14.1.2)(markdown-it@13.0.2):
+ dependencies:
+ '@types/markdown-it': 14.1.2
+ markdown-it: 13.0.2
+
+ markdown-it-attrs@4.3.1(markdown-it@13.0.2):
+ dependencies:
+ markdown-it: 13.0.2
+
+ markdown-it-checkbox@1.1.0:
+ dependencies:
+ underscore: 1.13.7
+
+ markdown-it-cjk-breaks@1.1.3:
+ dependencies:
+ eastasianwidth: 0.2.0
+
+ markdown-it-container@3.0.0: {}
+
+ markdown-it-deflist@2.1.0: {}
+
+ markdown-it-emoji@1.4.0: {}
+
+ markdown-it-emoji@3.0.0: {}
+
+ markdown-it-footnote@3.0.3: {}
+
+ markdown-it-footnote@4.0.0: {}
+
+ markdown-it-highlight-lines@1.0.2: {}
+
+ markdown-it-highlightjs@4.2.0:
+ dependencies:
+ highlight.js: 11.11.1
+
+ markdown-it-ins@3.0.1: {}
+
+ markdown-it-ins@4.0.0: {}
+
+ markdown-it-mark@3.0.1: {}
+
+ markdown-it-shortcode-tag@1.1.0: {}
+
+ markdown-it-sub@1.0.0: {}
+
+ markdown-it-sub@2.0.0: {}
+
+ markdown-it-sup@1.0.0: {}
+
+ markdown-it-sup@2.0.0: {}
+
+ markdown-it-task-lists@2.1.1: {}
+
+ markdown-it@11.0.1:
+ dependencies:
+ argparse: 1.0.10
+ entities: 2.0.3
+ linkify-it: 3.0.3
+ mdurl: 1.0.1
+ uc.micro: 1.0.6
+
+ markdown-it@13.0.2:
+ dependencies:
+ argparse: 2.0.1
+ entities: 3.0.1
+ linkify-it: 4.0.1
+ mdurl: 1.0.1
+ uc.micro: 1.0.6
+
+ math-intrinsics@1.1.0: {}
+
+ math-random@1.0.4: {}
+
+ mathml-tag-names@2.1.3: {}
+
+ md5@2.3.0:
+ dependencies:
+ charenc: 0.0.2
+ crypt: 0.0.2
+ is-buffer: 1.1.6
+
+ mdn-data@2.0.28: {}
+
+ mdn-data@2.0.30: {}
+
+ mdn-data@2.12.2: {}
+
+ mdurl@1.0.1: {}
+
+ memorystream@0.3.1: {}
+
+ meow@12.1.1: {}
+
+ meow@13.2.0: {}
+
+ meow@2.0.0:
+ dependencies:
+ camelcase-keys: 1.0.0
+ indent-string: 1.2.2
+ minimist: 1.2.8
+ object-assign: 1.0.0
+
+ meow@3.7.0:
+ dependencies:
+ camelcase-keys: 2.1.0
+ decamelize: 1.2.0
+ loud-rejection: 1.6.0
+ map-obj: 1.0.1
+ minimist: 1.2.8
+ normalize-package-data: 2.5.0
+ object-assign: 4.1.1
+ read-pkg-up: 1.0.1
+ redent: 1.0.0
+ trim-newlines: 1.0.0
+
+ merge2@1.4.1: {}
+
+ merge@2.1.1: {}
+
+ micro-memoize@4.1.3: {}
+
+ micromatch@2.3.11:
+ dependencies:
+ arr-diff: 2.0.0
+ array-unique: 0.2.1
+ braces: 1.8.5
+ expand-brackets: 0.1.5
+ extglob: 0.3.2
+ filename-regex: 2.0.1
+ is-extglob: 1.0.0
+ is-glob: 2.0.1
+ kind-of: 3.2.2
+ normalize-path: 2.1.1
+ object.omit: 2.0.1
+ parse-glob: 3.0.4
+ regex-cache: 0.4.4
+
+ micromatch@3.1.10:
+ dependencies:
+ arr-diff: 4.0.0
+ array-unique: 0.3.2
+ braces: 2.3.2
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ extglob: 2.0.4
+ fragment-cache: 0.2.1
+ kind-of: 6.0.3
+ nanomatch: 1.2.13
+ object.pick: 1.3.0
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mime-db@1.12.0: {}
+
+ mime-db@1.52.0: {}
+
+ mime-db@1.54.0: {}
+
+ mime-types@1.0.2: {}
+
+ mime-types@2.0.14:
+ dependencies:
+ mime-db: 1.12.0
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@1.4.1: {}
+
+ mime@1.6.0: {}
+
+ mime@3.0.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ mimic-function@5.0.1: {}
+
+ min-indent@1.0.1: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimist@0.2.4: {}
+
+ minimist@1.2.7: {}
+
+ minimist@1.2.8: {}
+
+ minipass@7.1.2: {}
+
+ mitt@1.2.0: {}
+
+ mixin-deep@1.3.2:
+ dependencies:
+ for-in: 1.0.2
+ is-extendable: 1.0.1
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mkdirp@2.1.3: {}
+
+ modify-filename@2.0.0: {}
+
+ moize@6.1.6:
+ dependencies:
+ fast-equals: 3.0.3
+ micro-memoize: 4.1.3
+
+ moment-timezone@0.5.48:
+ dependencies:
+ moment: 2.30.1
+
+ moment@2.30.1: {}
+
+ morgan@1.10.0:
+ dependencies:
+ basic-auth: 2.0.1
+ debug: 2.6.9
+ depd: 2.0.0
+ on-finished: 2.3.0
+ on-headers: 1.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ ms@2.0.0: {}
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ multimatch@5.0.0:
+ dependencies:
+ '@types/minimatch': 3.0.5
+ array-differ: 3.0.0
+ array-union: 2.1.0
+ arrify: 2.0.1
+ minimatch: 3.1.2
+
+ multipipe@0.1.2:
+ dependencies:
+ duplexer2: 0.0.2
+
+ mute-stdout@2.0.0: {}
+
+ mute-stream@0.0.8: {}
+
+ mz@2.7.0:
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+
+ nan@2.22.2:
+ optional: true
+
+ nano-spawn@1.0.2: {}
+
+ nanoid@3.3.11: {}
+
+ nanomatch@1.2.13:
+ dependencies:
+ arr-diff: 4.0.0
+ array-unique: 0.3.2
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ fragment-cache: 0.2.1
+ is-windows: 1.0.2
+ kind-of: 6.0.3
+ object.pick: 1.3.0
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ natural-compare@1.4.0: {}
+
+ negotiator@0.6.3: {}
+
+ negotiator@0.6.4: {}
+
+ nib@1.2.0(stylus@0.62.0):
+ dependencies:
+ stylus: 0.62.0
+
+ no-case@2.3.2:
+ dependencies:
+ lower-case: 1.1.4
+
+ no-case@3.0.4:
+ dependencies:
+ lower-case: 2.0.2
+ tslib: 2.8.1
+
+ node-releases@2.0.19: {}
+
+ node-uuid@1.4.8: {}
+
+ normalize-package-data@2.5.0:
+ dependencies:
+ hosted-git-info: 2.8.9
+ resolve: 1.22.10
+ semver: 5.7.2
+ validate-npm-package-license: 3.0.4
+
+ normalize-path@2.1.1:
+ dependencies:
+ remove-trailing-separator: 1.1.0
+
+ normalize-path@3.0.0: {}
+
+ normalize-range@0.1.2: {}
+
+ now-and-later@3.0.0:
+ dependencies:
+ once: 1.4.0
+
+ npm-normalize-package-bin@4.0.0: {}
+
+ npm-run-all2@8.0.4:
+ dependencies:
+ ansi-styles: 6.2.1
+ cross-spawn: 7.0.6
+ memorystream: 0.3.1
+ picomatch: 4.0.2
+ pidtree: 0.6.0
+ read-package-json-fast: 4.0.0
+ shell-quote: 1.8.3
+ which: 5.0.0
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ nunjucks@3.2.4(chokidar@3.6.0):
+ dependencies:
+ a-sync-waterfall: 1.0.1
+ asap: 2.0.6
+ commander: 5.1.0
+ optionalDependencies:
+ chokidar: 3.6.0
+
+ o-stream@0.3.0: {}
+
+ oauth-sign@0.5.0: {}
+
+ oauth-sign@0.9.0: {}
+
+ object-assign@1.0.0: {}
+
+ object-assign@3.0.0: {}
+
+ object-assign@4.1.1: {}
+
+ object-copy@0.1.0:
+ dependencies:
+ copy-descriptor: 0.1.1
+ define-property: 0.2.5
+ kind-of: 3.2.2
+
+ object-hash@3.0.0: {}
+
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
+ object-visit@1.0.1:
+ dependencies:
+ isobject: 3.0.1
+
+ object.defaults@1.1.0:
+ dependencies:
+ array-each: 1.0.1
+ array-slice: 1.1.0
+ for-own: 1.0.0
+ isobject: 3.0.1
+
+ object.omit@2.0.1:
+ dependencies:
+ for-own: 0.1.5
+ is-extendable: 0.1.1
+
+ object.pick@1.3.0:
+ dependencies:
+ isobject: 3.0.1
+
+ on-finished@2.3.0:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-headers@1.0.2: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ onetime@7.0.0:
+ dependencies:
+ mimic-function: 5.0.1
+
+ open@8.4.2:
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+
+ opencollective-postinstall@2.0.3: {}
+
+ openurl@1.1.1: {}
+
+ opn@5.3.0:
+ dependencies:
+ is-wsl: 1.1.0
+
+ optionator@0.8.3:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.3.0
+ prelude-ls: 1.1.2
+ type-check: 0.3.2
+ word-wrap: 1.2.5
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ ora@5.4.1:
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.2
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+
+ os-tmpdir@1.0.2: {}
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-limit@4.0.0:
+ dependencies:
+ yocto-queue: 1.2.1
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-locate@6.0.0:
+ dependencies:
+ p-limit: 4.0.0
+
+ package-json-from-dist@1.0.1: {}
+
+ param-case@2.1.1:
+ dependencies:
+ no-case: 2.3.2
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-filepath@1.0.2:
+ dependencies:
+ is-absolute: 1.0.0
+ map-cache: 0.2.2
+ path-root: 0.1.1
+
+ parse-glob@3.0.4:
+ dependencies:
+ glob-base: 0.3.0
+ is-dotfile: 1.0.3
+ is-extglob: 1.0.0
+ is-glob: 2.0.1
+
+ parse-json@2.2.0:
+ dependencies:
+ error-ex: 1.3.2
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parse-node-version@1.0.1: {}
+
+ parse-passwd@1.0.0: {}
+
+ parse5-htmlparser2-tree-adapter@7.1.0:
+ dependencies:
+ domhandler: 5.0.3
+ parse5: 7.3.0
+
+ parse5-parser-stream@7.1.2:
+ dependencies:
+ parse5: 7.3.0
+
+ parse5@7.3.0:
+ dependencies:
+ entities: 6.0.1
+
+ parseurl@1.3.3: {}
+
+ pascal-case@3.1.2:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.8.1
+
+ pascalcase@0.1.1: {}
+
+ path-exists@2.1.0:
+ dependencies:
+ pinkie-promise: 2.0.1
+
+ path-exists@4.0.0: {}
+
+ path-exists@5.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ path-root-regex@0.1.2: {}
+
+ path-root@0.1.1:
+ dependencies:
+ path-root-regex: 0.1.2
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ path-type@1.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ pify: 2.3.0
+ pinkie-promise: 2.0.1
+
+ path-type@4.0.0: {}
+
+ performance-now@2.1.0: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.2: {}
+
+ pidtree@0.6.0: {}
+
+ pify@2.3.0: {}
+
+ pinkie-promise@2.0.1:
+ dependencies:
+ pinkie: 2.0.4
+
+ pinkie@2.0.4: {}
+
+ pirates@4.0.7: {}
+
+ plugin-error@1.0.1:
+ dependencies:
+ ansi-colors: 1.1.0
+ arr-diff: 4.0.0
+ arr-union: 3.1.0
+ extend-shallow: 3.0.2
+
+ plugin-error@2.0.1:
+ dependencies:
+ ansi-colors: 1.1.0
+
+ portscanner@2.2.0:
+ dependencies:
+ async: 2.6.4
+ is-number-like: 1.0.8
+
+ posix-character-classes@0.1.1: {}
+
+ possible-typed-array-names@1.1.0: {}
+
+ postcss-calc@10.1.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.0
+ postcss-value-parser: 4.2.0
+
+ postcss-cli@11.0.1(jiti@2.4.2)(postcss@8.5.6):
+ dependencies:
+ chokidar: 3.6.0
+ dependency-graph: 1.0.0
+ fs-extra: 11.3.0
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-load-config: 5.1.0(jiti@2.4.2)(postcss@8.5.6)
+ postcss-reporter: 7.1.0(postcss@8.5.6)
+ pretty-hrtime: 1.0.3
+ read-cache: 1.0.0
+ slash: 5.1.0
+ tinyglobby: 0.2.14
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - jiti
+ - tsx
+
+ postcss-colormin@7.0.3(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.0
+ caniuse-api: 3.0.0
+ colord: 2.9.3
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-convert-values@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.0
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-discard-comments@7.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.0
+
+ postcss-discard-duplicates@7.0.2(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-discard-empty@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-discard-overridden@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-import@15.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.10
+
+ postcss-import@16.1.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.10
+
+ postcss-js@4.0.1(postcss@8.5.6):
+ dependencies:
+ camelcase-css: 2.0.1
+ postcss: 8.5.6
+
+ postcss-load-config@4.0.2(postcss@8.5.6):
+ dependencies:
+ lilconfig: 3.1.3
+ yaml: 2.8.0
+ optionalDependencies:
+ postcss: 8.5.6
+
+ postcss-load-config@5.1.0(jiti@2.4.2)(postcss@8.5.6):
+ dependencies:
+ lilconfig: 3.1.3
+ yaml: 2.8.0
+ optionalDependencies:
+ jiti: 2.4.2
+ postcss: 8.5.6
+
+ postcss-merge-longhand@7.0.5(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ stylehacks: 7.0.5(postcss@8.5.6)
+
+ postcss-merge-rules@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.0
+ caniuse-api: 3.0.0
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.0
+
+ postcss-minify-font-values@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-gradients@7.0.1(postcss@8.5.6):
+ dependencies:
+ colord: 2.9.3
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-params@7.0.3(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.0
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-selectors@7.0.5(postcss@8.5.6):
+ dependencies:
+ cssesc: 3.0.0
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.0
+
+ postcss-nested@6.2.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-normalize-charset@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-normalize-display-values@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-positions@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-repeat-style@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-string@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-timing-functions@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-unicode@7.0.3(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.0
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-url@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-whitespace@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-ordered-values@7.0.2(postcss@8.5.6):
+ dependencies:
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-reduce-initial@7.0.3(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.0
+ caniuse-api: 3.0.0
+ postcss: 8.5.6
+
+ postcss-reduce-transforms@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-reporter@7.1.0(postcss@8.5.6):
+ dependencies:
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ thenby: 1.3.4
+
+ postcss-resolve-nested-selector@0.1.6: {}
+
+ postcss-safe-parser@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-selector-parser@6.1.2:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-selector-parser@7.1.0:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-svgo@7.0.2(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ svgo: 3.3.2
+
+ postcss-unique-selectors@7.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.0
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prelude-ls@1.1.2: {}
+
+ prelude-ls@1.2.1: {}
+
+ preserve@0.2.0: {}
+
+ prettier-plugin-tailwindcss@0.6.12(prettier@3.5.3):
+ dependencies:
+ prettier: 3.5.3
+
+ prettier@3.5.3: {}
+
+ pretty-hrtime@1.0.3: {}
+
+ prismjs@1.30.0: {}
+
+ process-nextick-args@2.0.1: {}
+
+ process@0.11.10: {}
+
+ psl@1.15.0:
+ dependencies:
+ punycode: 2.3.1
+
+ punycode@2.3.1: {}
+
+ q@1.5.1: {}
+
+ qs@2.3.3: {}
+
+ qs@6.5.3: {}
+
+ queue-microtask@1.2.3: {}
+
+ randomatic@3.1.1:
+ dependencies:
+ is-number: 4.0.0
+ kind-of: 6.0.3
+ math-random: 1.0.4
+
+ range-parser@1.2.1: {}
+
+ raw-body@2.5.2:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
+ read-cache@1.0.0:
+ dependencies:
+ pify: 2.3.0
+
+ read-package-json-fast@4.0.0:
+ dependencies:
+ json-parse-even-better-errors: 4.0.0
+ npm-normalize-package-bin: 4.0.0
+
+ read-pkg-up@1.0.1:
+ dependencies:
+ find-up: 1.1.2
+ read-pkg: 1.1.0
+
+ read-pkg@1.1.0:
+ dependencies:
+ load-json-file: 1.1.0
+ normalize-package-data: 2.5.0
+ path-type: 1.1.0
+
+ readable-stream@1.0.34:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 0.0.1
+ string_decoder: 0.10.31
+
+ readable-stream@1.1.14:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 0.0.1
+ string_decoder: 0.10.31
+
+ readable-stream@2.3.8:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@2.2.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ micromatch: 3.1.10
+ readable-stream: 2.3.8
+ transitivePeerDependencies:
+ - supports-color
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ readdirp@4.1.2: {}
+
+ rechoir@0.8.0:
+ dependencies:
+ resolve: 1.22.10
+
+ redent@1.0.0:
+ dependencies:
+ indent-string: 2.1.0
+ strip-indent: 1.0.1
+
+ reflect-metadata@0.1.13: {}
+
+ regex-cache@0.4.4:
+ dependencies:
+ is-equal-shallow: 0.1.3
+
+ regex-not@1.0.2:
+ dependencies:
+ extend-shallow: 3.0.2
+ safe-regex: 1.1.0
+
+ relateurl@0.2.7: {}
+
+ remove-trailing-separator@1.1.0: {}
+
+ repeat-element@1.1.4: {}
+
+ repeat-string@1.6.1: {}
+
+ repeating@1.1.3:
+ dependencies:
+ is-finite: 1.1.0
+
+ repeating@2.0.1:
+ dependencies:
+ is-finite: 1.1.0
+
+ replace-ext@0.0.1: {}
+
+ replace-ext@1.0.1: {}
+
+ replace-ext@2.0.0: {}
+
+ replace-homedir@2.0.0: {}
+
+ replacestream@4.0.3:
+ dependencies:
+ escape-string-regexp: 1.0.5
+ object-assign: 4.1.1
+ readable-stream: 2.3.8
+
+ request@2.51.0:
+ dependencies:
+ aws-sign2: 0.5.0
+ bl: 0.9.5
+ caseless: 0.8.0
+ combined-stream: 0.0.7
+ forever-agent: 0.5.2
+ form-data: 0.2.0
+ hawk: 1.1.1
+ http-signature: 0.10.1
+ json-stringify-safe: 5.0.1
+ mime-types: 1.0.2
+ node-uuid: 1.4.8
+ oauth-sign: 0.5.0
+ qs: 2.3.3
+ stringstream: 0.0.6
+ tough-cookie: 5.1.2
+ tunnel-agent: 0.4.3
+
+ request@2.88.2:
+ dependencies:
+ aws-sign2: 0.7.0
+ aws4: 1.13.2
+ caseless: 0.12.0
+ combined-stream: 1.0.8
+ extend: 3.0.2
+ forever-agent: 0.6.1
+ form-data: 2.3.3
+ har-validator: 5.1.5
+ http-signature: 1.2.0
+ is-typedarray: 1.0.0
+ isstream: 0.1.2
+ json-stringify-safe: 5.0.1
+ mime-types: 2.1.35
+ oauth-sign: 0.9.0
+ performance-now: 2.1.0
+ qs: 6.5.3
+ safe-buffer: 5.2.1
+ tough-cookie: 2.5.0
+ tunnel-agent: 0.6.0
+ uuid: 3.4.0
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ requires-port@1.0.0: {}
+
+ resolve-dir@1.0.1:
+ dependencies:
+ expand-tilde: 2.0.2
+ global-modules: 1.0.0
+
+ resolve-from@4.0.0: {}
+
+ resolve-from@5.0.0: {}
+
+ resolve-options@2.0.0:
+ dependencies:
+ value-or-function: 4.0.0
+
+ resolve-url@0.2.1: {}
+
+ resolve@1.22.10:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ resp-modifier@6.0.2:
+ dependencies:
+ debug: 2.6.9
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ restore-cursor@3.1.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ restore-cursor@5.1.0:
+ dependencies:
+ onetime: 7.0.0
+ signal-exit: 4.1.0
+
+ ret@0.1.15: {}
+
+ reusify@1.1.0: {}
+
+ rev-hash@4.1.0: {}
+
+ rev-path@3.0.0:
+ dependencies:
+ modify-filename: 2.0.0
+
+ rfdc@1.4.1: {}
+
+ run-async@2.4.1: {}
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ rx@4.1.0: {}
+
+ rxjs@7.8.2:
+ dependencies:
+ tslib: 2.8.1
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
+ safe-regex@1.1.0:
+ dependencies:
+ ret: 0.1.15
+
+ safer-buffer@2.1.2: {}
+
+ sax@1.3.0: {}
+
+ semver-greatest-satisfied-range@2.0.0:
+ dependencies:
+ sver: 1.8.4
+
+ semver@5.7.2: {}
+
+ semver@6.3.1:
+ optional: true
+
+ semver@7.7.2: {}
+
+ send@0.16.2:
+ dependencies:
+ debug: 2.6.9
+ depd: 1.1.2
+ destroy: 1.0.4
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 1.6.3
+ mime: 1.4.1
+ ms: 2.0.0
+ on-finished: 2.3.0
+ range-parser: 1.2.1
+ statuses: 1.4.0
+ transitivePeerDependencies:
+ - supports-color
+
+ send@0.19.0:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-index@1.9.1:
+ dependencies:
+ accepts: 1.3.8
+ batch: 0.6.1
+ debug: 2.6.9
+ escape-html: 1.0.3
+ http-errors: 1.6.3
+ mime-types: 2.1.35
+ parseurl: 1.3.3
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-static@1.13.2:
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.16.2
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-static@1.16.2:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.19.0
+ transitivePeerDependencies:
+ - supports-color
+
+ server-destroy@1.0.1: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ set-value@2.0.1:
+ dependencies:
+ extend-shallow: 2.0.1
+ is-extendable: 0.1.1
+ is-plain-object: 2.0.4
+ split-string: 3.1.0
+
+ setprototypeof@1.1.0: {}
+
+ setprototypeof@1.2.0: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ shell-quote@1.8.3: {}
+
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
+ slash@3.0.0: {}
+
+ slash@5.1.0: {}
+
+ slice-ansi@4.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+
+ slice-ansi@5.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
+
+ slice-ansi@7.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 5.0.0
+
+ snapdragon-node@2.1.1:
+ dependencies:
+ define-property: 1.0.0
+ isobject: 3.0.1
+ snapdragon-util: 3.0.1
+
+ snapdragon-util@3.0.1:
+ dependencies:
+ kind-of: 3.2.2
+
+ snapdragon@0.8.2:
+ dependencies:
+ base: 0.11.2
+ debug: 2.6.9
+ define-property: 0.2.5
+ extend-shallow: 2.0.1
+ map-cache: 0.2.2
+ source-map: 0.5.7
+ source-map-resolve: 0.5.3
+ use: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ sntp@0.2.4:
+ dependencies:
+ hoek: 0.9.1
+
+ socket.io-adapter@2.5.5:
+ dependencies:
+ debug: 4.3.7
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ socket.io-client@4.8.1:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.7
+ engine.io-client: 6.6.3
+ socket.io-parser: 4.2.4
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ socket.io-parser@4.2.4:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ socket.io@4.8.1:
+ dependencies:
+ accepts: 1.3.8
+ base64id: 2.0.0
+ cors: 2.8.5
+ debug: 4.3.7
+ engine.io: 6.6.4
+ socket.io-adapter: 2.5.5
+ socket.io-parser: 4.2.4
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ sort-keys@5.1.0:
+ dependencies:
+ is-plain-obj: 4.1.0
+
+ source-map-js@1.2.1: {}
+
+ source-map-resolve@0.5.3:
+ dependencies:
+ atob: 2.1.2
+ decode-uri-component: 0.2.2
+ resolve-url: 0.2.1
+ source-map-url: 0.4.1
+ urix: 0.1.0
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map-url@0.4.1: {}
+
+ source-map@0.4.4:
+ dependencies:
+ amdefine: 1.0.1
+
+ source-map@0.5.7: {}
+
+ source-map@0.6.1: {}
+
+ source-map@0.7.4: {}
+
+ sparkles@1.0.1: {}
+
+ sparkles@2.1.0: {}
+
+ spdx-correct@3.2.0:
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.21
+
+ spdx-exceptions@2.5.0: {}
+
+ spdx-expression-parse@3.0.1:
+ dependencies:
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.21
+
+ spdx-license-ids@3.0.21: {}
+
+ split-string@3.1.0:
+ dependencies:
+ extend-shallow: 3.0.2
+
+ split2@4.2.0: {}
+
+ sprintf-js@1.0.3: {}
+
+ sprintf-js@1.1.3: {}
+
+ sshpk@1.18.0:
+ dependencies:
+ asn1: 0.2.6
+ assert-plus: 1.0.0
+ bcrypt-pbkdf: 1.0.2
+ dashdash: 1.14.1
+ ecc-jsbn: 0.1.2
+ getpass: 0.1.7
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+ tweetnacl: 0.14.5
+
+ static-extend@0.1.2:
+ dependencies:
+ define-property: 0.2.5
+ object-copy: 0.1.0
+
+ statuses@1.3.1: {}
+
+ statuses@1.4.0: {}
+
+ statuses@1.5.0: {}
+
+ statuses@2.0.1: {}
+
+ stream-buffers@0.2.6: {}
+
+ stream-composer@1.0.2:
+ dependencies:
+ streamx: 2.22.1
+
+ stream-exhaust@1.0.2: {}
+
+ stream-throttle@0.1.3:
+ dependencies:
+ commander: 2.20.3
+ limiter: 1.1.5
+
+ streamx@2.22.1:
+ dependencies:
+ fast-fifo: 1.3.2
+ text-decoder: 1.2.3
+ optionalDependencies:
+ bare-events: 2.5.4
+
+ string-argv@0.3.2: {}
+
+ string-template@0.2.1: {}
+
+ string-template@1.0.0: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.4.0
+ get-east-asian-width: 1.3.0
+ strip-ansi: 7.1.0
+
+ string_decoder@0.10.31: {}
+
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ stringstream@0.0.6: {}
+
+ stringz@2.1.0:
+ dependencies:
+ char-regex: 1.0.2
+
+ strip-ansi@0.3.0:
+ dependencies:
+ ansi-regex: 0.2.1
+
+ strip-ansi@3.0.1:
+ dependencies:
+ ansi-regex: 2.1.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.1.0
+
+ strip-bom-buf@3.0.1:
+ dependencies:
+ is-utf8: 0.2.1
+
+ strip-bom-stream@5.0.0:
+ dependencies:
+ first-chunk-stream: 5.0.0
+ strip-bom-buf: 3.0.1
+
+ strip-bom@2.0.0:
+ dependencies:
+ is-utf8: 0.2.1
+
+ strip-bom@4.0.0: {}
+
+ strip-indent@1.0.1:
+ dependencies:
+ get-stdin: 4.0.1
+
+ strip-indent@3.0.0:
+ dependencies:
+ min-indent: 1.0.1
+
+ strip-json-comments@3.1.1: {}
+
+ stylehacks@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.0
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.0
+
+ stylelint-config-recommended@16.0.0(stylelint@16.20.0(typescript@5.8.3)):
+ dependencies:
+ stylelint: 16.20.0(typescript@5.8.3)
+
+ stylelint-config-standard@38.0.0(stylelint@16.20.0(typescript@5.8.3)):
+ dependencies:
+ stylelint: 16.20.0(typescript@5.8.3)
+ stylelint-config-recommended: 16.0.0(stylelint@16.20.0(typescript@5.8.3))
+
+ stylelint@16.20.0(typescript@5.8.3):
+ dependencies:
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+ '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0)
+ '@dual-bundle/import-meta-resolve': 4.1.0
+ balanced-match: 2.0.0
+ colord: 2.9.3
+ cosmiconfig: 9.0.0(typescript@5.8.3)
+ css-functions-list: 3.2.3
+ css-tree: 3.1.0
+ debug: 4.4.1
+ fast-glob: 3.3.3
+ fastest-levenshtein: 1.0.16
+ file-entry-cache: 10.1.1
+ global-modules: 2.0.0
+ globby: 11.1.0
+ globjoin: 0.1.4
+ html-tags: 3.3.1
+ ignore: 7.0.5
+ imurmurhash: 0.1.4
+ is-plain-object: 5.0.0
+ known-css-properties: 0.36.0
+ mathml-tag-names: 2.1.3
+ meow: 13.2.0
+ micromatch: 4.0.8
+ normalize-path: 3.0.0
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-resolve-nested-selector: 0.1.6
+ postcss-safe-parser: 7.0.1(postcss@8.5.6)
+ postcss-selector-parser: 7.1.0
+ postcss-value-parser: 4.2.0
+ resolve-from: 5.0.0
+ string-width: 4.2.3
+ supports-hyperlinks: 3.2.0
+ svg-tags: 1.0.0
+ table: 6.9.0
+ write-file-atomic: 5.0.1
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ stylus@0.62.0:
+ dependencies:
+ '@adobe/css-tools': 4.3.3
+ debug: 4.4.1
+ glob: 7.2.3
+ sax: 1.3.0
+ source-map: 0.7.4
+ transitivePeerDependencies:
+ - supports-color
+
+ sucrase@3.35.0:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.8
+ commander: 4.1.1
+ glob: 10.4.5
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.7
+ ts-interface-checker: 0.1.13
+
+ supports-color@0.2.0: {}
+
+ supports-color@2.0.0: {}
+
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-hyperlinks@3.2.0:
+ dependencies:
+ has-flag: 4.0.0
+ supports-color: 7.2.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ sver@1.8.4:
+ optionalDependencies:
+ semver: 6.3.1
+
+ svg-tags@1.0.0: {}
+
+ svgo@3.3.2:
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 5.1.0
+ css-tree: 2.3.1
+ css-what: 6.1.0
+ csso: 5.0.5
+ picocolors: 1.1.1
+
+ table@6.9.0:
+ dependencies:
+ ajv: 8.17.1
+ lodash.truncate: 4.4.2
+ slice-ansi: 4.0.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ tailwindcss-animate@1.0.7(tailwindcss@3.4.17):
+ dependencies:
+ tailwindcss: 3.4.17
+
+ tailwindcss@3.4.17:
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ arg: 5.0.2
+ chokidar: 3.6.0
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.3.3
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ jiti: 1.21.7
+ lilconfig: 3.1.3
+ micromatch: 4.0.8
+ normalize-path: 3.0.0
+ object-hash: 3.0.0
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-import: 15.1.0(postcss@8.5.6)
+ postcss-js: 4.0.1(postcss@8.5.6)
+ postcss-load-config: 4.0.2(postcss@8.5.6)
+ postcss-nested: 6.2.0(postcss@8.5.6)
+ postcss-selector-parser: 6.1.2
+ resolve: 1.22.10
+ sucrase: 3.35.0
+ transitivePeerDependencies:
+ - ts-node
+
+ teex@1.0.1:
+ dependencies:
+ streamx: 2.22.1
+
+ terser@5.43.0:
+ dependencies:
+ '@jridgewell/source-map': 0.3.6
+ acorn: 8.15.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ text-decoder@1.2.3:
+ dependencies:
+ b4a: 1.6.7
+
+ text-extensions@2.4.0: {}
+
+ text-table@0.2.0: {}
+
+ textextensions@3.3.0: {}
+
+ thenby@1.3.4: {}
+
+ thenify-all@1.6.0:
+ dependencies:
+ thenify: 3.3.1
+
+ thenify@3.3.1:
+ dependencies:
+ any-promise: 1.3.0
+
+ through2@0.5.1:
+ dependencies:
+ readable-stream: 1.0.34
+ xtend: 3.0.0
+
+ through2@2.0.5:
+ dependencies:
+ readable-stream: 2.3.8
+ xtend: 4.0.2
+
+ through2@3.0.1:
+ dependencies:
+ readable-stream: 3.6.2
+
+ through2@4.0.2:
+ dependencies:
+ readable-stream: 3.6.2
+
+ through@2.3.8: {}
+
+ tildify@2.0.0: {}
+
+ time-stamp@1.1.0: {}
+
+ tinyexec@1.0.1: {}
+
+ tinyglobby@0.2.14:
+ dependencies:
+ fdir: 6.4.6(picomatch@4.0.2)
+ picomatch: 4.0.2
+
+ titlecase@1.1.3: {}
+
+ tldts-core@6.1.86: {}
+
+ tldts@6.1.86:
+ dependencies:
+ tldts-core: 6.1.86
+
+ tmp@0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
+
+ to-object-path@0.3.0:
+ dependencies:
+ kind-of: 3.2.2
+
+ to-regex-range@2.1.1:
+ dependencies:
+ is-number: 3.0.0
+ repeat-string: 1.6.1
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ to-regex@3.0.2:
+ dependencies:
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ regex-not: 1.0.2
+ safe-regex: 1.1.0
+
+ to-through@3.0.0:
+ dependencies:
+ streamx: 2.22.1
+
+ toidentifier@1.0.1: {}
+
+ tough-cookie@2.5.0:
+ dependencies:
+ psl: 1.15.0
+ punycode: 2.3.1
+
+ tough-cookie@5.1.2:
+ dependencies:
+ tldts: 6.1.86
+
+ trim-newlines@1.0.0: {}
+
+ ts-interface-checker@0.1.13: {}
+
+ tslib@2.5.0: {}
+
+ tslib@2.8.1: {}
+
+ tunnel-agent@0.4.3: {}
+
+ tunnel-agent@0.6.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ tweetnacl@0.14.5: {}
+
+ type-check@0.3.2:
+ dependencies:
+ prelude-ls: 1.1.2
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ type-fest@0.21.3: {}
+
+ typedarray@0.0.7: {}
+
+ typescript@5.8.3: {}
+
+ ua-parser-js@1.0.40: {}
+
+ uberproto@1.2.0: {}
+
+ uc.micro@1.0.6: {}
+
+ uglify-js@3.4.10:
+ dependencies:
+ commander: 2.19.0
+ source-map: 0.6.1
+
+ unc-path-regex@0.1.2: {}
+
+ underscore@1.13.7: {}
+
+ undertaker-registry@2.0.0: {}
+
+ undertaker@2.0.0:
+ dependencies:
+ bach: 2.0.1
+ fast-levenshtein: 3.0.0
+ last-run: 2.0.0
+ undertaker-registry: 2.0.0
+
+ undici-types@7.8.0: {}
+
+ undici@7.10.0: {}
+
+ unicorn-magic@0.1.0: {}
+
+ union-value@1.0.1:
+ dependencies:
+ arr-union: 3.1.0
+ get-value: 2.0.6
+ is-extendable: 0.1.1
+ set-value: 2.0.1
+
+ universalify@0.1.2: {}
+
+ universalify@2.0.1: {}
+
+ unpipe@1.0.0: {}
+
+ unset-value@1.0.0:
+ dependencies:
+ has-value: 0.3.1
+ isobject: 3.0.1
+
+ update-browserslist-db@1.1.3(browserslist@4.25.0):
+ dependencies:
+ browserslist: 4.25.0
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ upper-case@1.1.3: {}
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ urix@0.1.0: {}
+
+ use@3.1.1: {}
+
+ util-deprecate@1.0.2: {}
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.2.0
+ is-generator-function: 1.1.0
+ is-typed-array: 1.1.15
+ which-typed-array: 1.1.19
+
+ utils-merge@1.0.1: {}
+
+ uuid@3.4.0: {}
+
+ v8flags@4.0.1: {}
+
+ validate-npm-package-license@3.0.4:
+ dependencies:
+ spdx-correct: 3.2.0
+ spdx-expression-parse: 3.0.1
+
+ validator@13.15.15: {}
+
+ value-or-function@4.0.0: {}
+
+ vary@1.1.2: {}
+
+ verror@1.10.0:
+ dependencies:
+ assert-plus: 1.0.0
+ core-util-is: 1.0.2
+ extsprintf: 1.3.0
+
+ vinyl-bufferstream@1.0.1:
+ dependencies:
+ bufferstreams: 1.0.1
+
+ vinyl-contents@2.0.0:
+ dependencies:
+ bl: 5.1.0
+ vinyl: 3.0.1
+
+ vinyl-file@5.0.0:
+ dependencies:
+ '@types/vinyl': 2.0.12
+ strip-bom-buf: 3.0.1
+ strip-bom-stream: 5.0.0
+ vinyl: 3.0.1
+
+ vinyl-fs@4.0.2:
+ dependencies:
+ fs-mkdirp-stream: 2.0.1
+ glob-stream: 8.0.3
+ graceful-fs: 4.2.11
+ iconv-lite: 0.6.3
+ is-valid-glob: 1.0.0
+ lead: 4.0.0
+ normalize-path: 3.0.0
+ resolve-options: 2.0.0
+ stream-composer: 1.0.2
+ streamx: 2.22.1
+ to-through: 3.0.0
+ value-or-function: 4.0.0
+ vinyl: 3.0.1
+ vinyl-sourcemap: 2.0.0
+
+ vinyl-sourcemap@2.0.0:
+ dependencies:
+ convert-source-map: 2.0.0
+ graceful-fs: 4.2.11
+ now-and-later: 3.0.0
+ streamx: 2.22.1
+ vinyl: 3.0.1
+ vinyl-contents: 2.0.0
+
+ vinyl-sourcemaps-apply@0.2.1:
+ dependencies:
+ source-map: 0.5.7
+
+ vinyl@0.2.3:
+ dependencies:
+ clone-stats: 0.0.1
+
+ vinyl@0.5.3:
+ dependencies:
+ clone: 1.0.4
+ clone-stats: 0.0.1
+ replace-ext: 0.0.1
+
+ vinyl@2.2.1:
+ dependencies:
+ clone: 2.1.2
+ clone-buffer: 1.0.0
+ clone-stats: 1.0.0
+ cloneable-readable: 1.1.3
+ remove-trailing-separator: 1.1.0
+ replace-ext: 1.0.1
+
+ vinyl@3.0.1:
+ dependencies:
+ clone: 2.1.2
+ remove-trailing-separator: 1.1.0
+ replace-ext: 2.0.0
+ teex: 1.0.1
+
+ warehouse@5.0.1:
+ dependencies:
+ bluebird: 3.7.2
+ cuid: 2.1.8
+ graceful-fs: 4.2.11
+ hexo-log: 4.1.0
+ is-plain-object: 5.0.0
+ jsonparse: 1.3.1
+ rfdc: 1.4.1
+ through2: 4.0.2
+
+ wcwidth@1.0.1:
+ dependencies:
+ defaults: 1.0.4
+
+ whatwg-encoding@3.1.1:
+ dependencies:
+ iconv-lite: 0.6.3
+
+ whatwg-mimetype@4.0.0: {}
+
+ which-typed-array@1.1.19:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ for-each: 0.3.5
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+
+ which@1.3.1:
+ dependencies:
+ isexe: 2.0.0
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ which@5.0.0:
+ dependencies:
+ isexe: 3.1.1
+
+ word-wrap@1.2.5: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ wrap-ansi@9.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 7.2.0
+ strip-ansi: 7.1.0
+
+ wrappy@1.0.2: {}
+
+ write-file-atomic@5.0.1:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 4.1.0
+
+ ws@8.17.1: {}
+
+ xmlhttprequest-ssl@2.1.2: {}
+
+ xtend@3.0.0: {}
+
+ xtend@4.0.2: {}
+
+ y18n@5.0.8: {}
+
+ yaml@2.8.0: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs-parser@22.0.0: {}
+
+ yargs@16.2.0:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yargs@17.1.1:
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yocto-queue@0.1.0: {}
+
+ yocto-queue@1.2.1: {}
+
+ zlibjs@0.3.1: {}
diff --git a/postcss.config.js b/postcss.config.js
index dff409fa..529fd214 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -1,8 +1,8 @@
module.exports = {
- plugins: {
- 'postcss-import': {path: 'themes/coo/source/css'},
- 'tailwindcss': {config: './tailwind.config.js'},
- 'autoprefixer': {},
- 'postcss-minify':{},
- }
-};
\ No newline at end of file
+ plugins: {
+ 'postcss-import': { path: 'themes/coo/source/css' },
+ tailwindcss: { config: './tailwind.config.js' },
+ autoprefixer: {},
+ ...(process.env.NODE_ENV === 'production' ? { cssnano: {} } : {})
+ }
+};
diff --git a/scaffolds/draft.md b/scaffolds/draft.md
deleted file mode 100644
index 29457456..00000000
--- a/scaffolds/draft.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: {{ title }}
-date: {{ date }}
-categories:
-tags:
----
diff --git a/scaffolds/page.md b/scaffolds/page.md
deleted file mode 100644
index f01ba3cd..00000000
--- a/scaffolds/page.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: {{ title }}
-date: {{ date }}
----
diff --git a/scaffolds/post.md b/scaffolds/post.md
deleted file mode 100644
index 648dba74..00000000
--- a/scaffolds/post.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: {{ title }}
-date: {{ date }}
-icon: icon-{{ title }}
-background: bg-blue-400
-tags:
- -
-categories:
- -
-intro:
----
-
-
-
-
-
diff --git a/scaffolds/table.md b/scaffolds/table.md
deleted file mode 100644
index 29457456..00000000
--- a/scaffolds/table.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: {{ title }}
-date: {{ date }}
-categories:
-tags:
----
diff --git a/source/_posts/1password.md b/source/_posts/1password.md
index a5cfce3a..b3b23d0e 100644
--- a/source/_posts/1password.md
+++ b/source/_posts/1password.md
@@ -4,422 +4,382 @@ date: 2022-11-23 16:23:31.702312
background: bg-[#397fe4]
label:
tags:
- - tools
- -
+ - tools
+ -
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A cheat sheet for 1password's keyboard shortcuts in Mac, Windows, iOS, Linux.
+ A cheat sheet for 1password's keyboard shortcuts in Mac, Windows, iOS, Linux.
---
-
-
-1Password Keyboard Shortcuts for Mac
-------------------
-
+## 1Password Keyboard Shortcuts for Mac
### Global keyboard shortcuts
-| `Shortcut ` | Action |
-|-----------------------------|--------------------|
-| Enter your own shortcut. | Show 1Password. |
-| `Shift` `cmd` `Space ` | Show Quick Access. |
-| `Shift` `cmd` `L ` | Lock 1Password. |
-| `cmd` `\` | Autofill. |
-{.shortcuts}
-
-
-
-
-### 1Password app {.row-span-2}
+| `Shortcut` | Action |
+| ------------------------ | ------------------ |
+| Enter your own shortcut. | Show 1Password. |
+| `Shift` `cmd` `Space` | Show Quick Access. |
+| `Shift` `cmd` `L` | Lock 1Password. |
+| `cmd` `\` | Autofill. |
-| `Shortcut ` | Action |
-|-----------------------------|----------------------------------------------------------------------------------------------|
-| `cmd` `/` | View keyboard shortcuts. |
-| `cmd` `,` | Open preferences. |
-| `cmd` `F ` | Search for items. |
-| `Option` `cmd` `F ` | Find items in the current list. |
-| `Esc ` | Clear the search field. |
-| `cmd` `1 ` | Switch to All Accounts. |
-| `cmd` `2...9` | Switch accounts and collections. |
-| `cmd` `[` | Go back. |
-| `cmd` `]` | Go forward. |
-| `Down Arrow ` | Focus next row. |
-| `Up Arrow ` | Focus previous row. |
-| `Right Arrow ` | Focus right section. |
-| `Left Arrow ` | Focus left section. |
-| `Return or Space ` | Activate focused element. |
-| `cmd` `C ` | Copy the username or primary field of the selected. |
-| `Shift` `cmd` `C ` | Copy the password of the selected. |
-| `Option` `cmd` `C ` | Copy the one-time password of the selected. |
-| `Shift` `cmd` `F ` | Open the website for the selected login in your browser and fill your username and password. |
-| `cmd` `O ` | Open the selected in a new window. |
-| `cmd` `N ` | Create a new item. |
-| `cmd` `E ` | Edit the selected. |
-| `cmd` `S ` | Save changes to an item. |
-| `Esc ` | Cancel an edit. |
-| `cmd` `R ` | Reveal or conceal secure fields in the selected. |
-| `Option ` | Temporarily reveal all secure fields in the selected.* |
-| `Delete ` | Move the selected(s) to the Archive. |
-| `cmd` `Delete ` | Delete the selected(s). |
-| `Shift` `cmd` `D ` | Collapse or expand the sidebar. |
-| `cmd` `+` | Zoom in. |
-| `cmd` `-` | Zoom out. |
-| `cmd` `0 ` | Revert to actual size. |
-| `cmd` `M ` | Minimize the app to the Dock. |
-| `cmd` `W ` | Close the current window. |
{.shortcuts}
+### 1Password app {.row-span-2}
+| `Shortcut` | Action |
+| ------------------ | -------------------------------------------------------------------------------------------- |
+| `cmd` `/` | View keyboard shortcuts. |
+| `cmd` `,` | Open preferences. |
+| `cmd` `F` | Search for items. |
+| `Option` `cmd` `F` | Find items in the current list. |
+| `Esc` | Clear the search field. |
+| `cmd` `1` | Switch to All Accounts. |
+| `cmd` `2...9` | Switch accounts and collections. |
+| `cmd` `[` | Go back. |
+| `cmd` `]` | Go forward. |
+| `Down Arrow` | Focus next row. |
+| `Up Arrow` | Focus previous row. |
+| `Right Arrow` | Focus right section. |
+| `Left Arrow` | Focus left section. |
+| `Return or Space` | Activate focused element. |
+| `cmd` `C` | Copy the username or primary field of the selected. |
+| `Shift` `cmd` `C` | Copy the password of the selected. |
+| `Option` `cmd` `C` | Copy the one-time password of the selected. |
+| `Shift` `cmd` `F` | Open the website for the selected login in your browser and fill your username and password. |
+| `cmd` `O` | Open the selected in a new window. |
+| `cmd` `N` | Create a new item. |
+| `cmd` `E` | Edit the selected. |
+| `cmd` `S` | Save changes to an item. |
+| `Esc` | Cancel an edit. |
+| `cmd` `R` | Reveal or conceal secure fields in the selected. |
+| `Option` | Temporarily reveal all secure fields in the selected.\* |
+| `Delete` | Move the selected(s) to the Archive. |
+| `cmd` `Delete` | Delete the selected(s). |
+| `Shift` `cmd` `D` | Collapse or expand the sidebar. |
+| `cmd` `+` | Zoom in. |
+| `cmd` `-` | Zoom out. |
+| `cmd` `0` | Revert to actual size. |
+| `cmd` `M` | Minimize the app to the Dock. |
+| `cmd` `W` | Close the current window. |
-
-### 1Password in the browser {.row-span-2}
-
-| `Shortcut ` | Action |
-|-----------------------------|-------------------------------------------------------------------------------------------|
-| `Shift` `cmd` `X ` | Open or close the 1Password pop-up in Chrome, Edge, Brave, or Safari. |
-| `cmd` `.` | Open or close the 1Password pop-up in Firefox. |
-| `cmd` `F ` | Search for items. |
-| `Esc ` | Clear the search field. |
-| `cmd` `D ` | Show the list of vaults. |
-| `cmd` `Down Arrow ` | Open or close the category menu. |
-| `Down Arrow ` | Select the next category, item, or field. |
-| `Up Arrow ` | Select the previous category, item, or field. |
-| `Right Arrow ` | Select the item details. |
-| `Left Arrow ` | Select the item list. |
-| `Space ` | Expand item overview banners. |
-| `Return ` | Copy the selected detail.Perform the default action for the selected. |
-| `cmd` `C ` | Copy the username of the selected. |
-| `Shift` `cmd` `C ` | Copy the password of the selected. |
-| `Control` `Shift` `cmd` `C` | Copy the one-time password of the selected. |
-| `cmd` `Return ` | Open the website for the selected login in a new tab and fill your username and password. |
-| `cmd` `O ` | Open the selected in a separate window. |
-| `cmd` `I ` | Create a new item. |
-| `cmd` `E ` | Edit the selected. |
-| `Control` `Option ` | Temporarily reveal all secure fields in the selected. |
-| `cmd` `G ` | Show the password generator. |
-| `cmd` `C ` | Copy a password from the password generator. |
-| `Shift` `cmd` `L ` | Lock 1Password. |
-| `Esc ` | Close the 1Password pop-up. |
{.shortcuts}
+### 1Password in the browser {.row-span-2}
+| `Shortcut` | Action |
+| --------------------------- | ----------------------------------------------------------------------------------------- |
+| `Shift` `cmd` `X` | Open or close the 1Password pop-up in Chrome, Edge, Brave, or Safari. |
+| `cmd` `.` | Open or close the 1Password pop-up in Firefox. |
+| `cmd` `F` | Search for items. |
+| `Esc` | Clear the search field. |
+| `cmd` `D` | Show the list of vaults. |
+| `cmd` `Down Arrow` | Open or close the category menu. |
+| `Down Arrow` | Select the next category, item, or field. |
+| `Up Arrow` | Select the previous category, item, or field. |
+| `Right Arrow` | Select the item details. |
+| `Left Arrow` | Select the item list. |
+| `Space` | Expand item overview banners. |
+| `Return` | Copy the selected detail.Perform the default action for the selected. |
+| `cmd` `C` | Copy the username of the selected. |
+| `Shift` `cmd` `C` | Copy the password of the selected. |
+| `Control` `Shift` `cmd` `C` | Copy the one-time password of the selected. |
+| `cmd` `Return` | Open the website for the selected login in a new tab and fill your username and password. |
+| `cmd` `O` | Open the selected in a separate window. |
+| `cmd` `I` | Create a new item. |
+| `cmd` `E` | Edit the selected. |
+| `Control` `Option` | Temporarily reveal all secure fields in the selected. |
+| `cmd` `G` | Show the password generator. |
+| `cmd` `C` | Copy a password from the password generator. |
+| `Shift` `cmd` `L` | Lock 1Password. |
+| `Esc` | Close the 1Password pop-up. |
-
-### Quick Access
-
-| `Shortcut ` | Action |
-|-----------------------------|-------------------------------------------------------------------------------------|
-| `Shift` `cmd` `Space` | Open or close Quick Access. |
-| `Esc ` | Clear the search field. |
-| `cmd` `1...9` | Switch accounts or collections. |
-| `Right Arrow ` | View all available actions. |
-| `cmd` `C ` | Copy username or primary field. |
-| `Shift` `cmd` `C ` | Copy password. |
-| `Option` `cmd` `C ` | Copy one-time password. |
-| `cmd` `O ` | Open item details in new window. |
-| `Option` `Return ` | Open the website for the login in your browser and fill your username and password. |
-| `Shift` `Return ` | Fill the item in the currently focused app. |
-| `Shift` `cmd` `O ` | Open the item in the app. |
{.shortcuts}
+### Quick Access
+| `Shortcut` | Action |
+| --------------------- | ----------------------------------------------------------------------------------- |
+| `Shift` `cmd` `Space` | Open or close Quick Access. |
+| `Esc` | Clear the search field. |
+| `cmd` `1...9` | Switch accounts or collections. |
+| `Right Arrow` | View all available actions. |
+| `cmd` `C` | Copy username or primary field. |
+| `Shift` `cmd` `C` | Copy password. |
+| `Option` `cmd` `C` | Copy one-time password. |
+| `cmd` `O` | Open item details in new window. |
+| `Option` `Return` | Open the website for the login in your browser and fill your username and password. |
+| `Shift` `Return` | Fill the item in the currently focused app. |
+| `Shift` `cmd` `O` | Open the item in the app. |
+{.shortcuts}
-
-1Password Keyboard Shortcuts for iOS
-------------------
+## 1Password Keyboard Shortcuts for iOS
### 1Password app (I)
-| `Shortcut ` | Action |
-|---------------------------|----------------------------------------------------------|
-| `cmd` `,` | Open settings. |
-| `cmd` `F ` | Search for items. |
-| `cmd` `.` | Clear the search field. |
-| `cmd` `1 ` | Switch to All Accounts. |
-| `cmd` `2...9` | Switch accounts and collections. |
-| `cmd` `[` | Go back. |
-| `cmd` `]` | Go forward. |
-| `Down Arrow ` | Focus next item. |
-{.shortcuts}
+| `Shortcut` | Action |
+| ------------- | -------------------------------- |
+| `cmd` `,` | Open settings. |
+| `cmd` `F` | Search for items. |
+| `cmd` `.` | Clear the search field. |
+| `cmd` `1` | Switch to All Accounts. |
+| `cmd` `2...9` | Switch accounts and collections. |
+| `cmd` `[` | Go back. |
+| `cmd` `]` | Go forward. |
+| `Down Arrow` | Focus next item. |
+{.shortcuts}
### 1Password app (II)
-| `Shortcut ` | Action |
-|-----------------------------|----------------------------------------------------------|
-| `Up Arrow ` | Focus previous item. |
-| `Space ` | Activate focused item. |
-| `cmd` `C ` | Copy the username or primary field of the selected. |
-| `Shift` `cmd` `C ` | Copy the password of the selected. |
-| `Option` `cmd` `C ` | Copy the one-time password of the selected. |
-| `cmd` `O ` | Open the selected in a separate window. |
-| `cmd` `E ` | Edit the selected. |
-{.shortcuts}
+| `Shortcut` | Action |
+| ------------------ | --------------------------------------------------- |
+| `Up Arrow` | Focus previous item. |
+| `Space` | Activate focused item. |
+| `cmd` `C` | Copy the username or primary field of the selected. |
+| `Shift` `cmd` `C` | Copy the password of the selected. |
+| `Option` `cmd` `C` | Copy the one-time password of the selected. |
+| `cmd` `O` | Open the selected in a separate window. |
+| `cmd` `E` | Edit the selected. |
+{.shortcuts}
### 1Password app (III)
-| `Shortcut ` | Action |
-|---------------------------|----------------------------------------------------------|
-| `cmd` `S ` | Save changes to an item. |
-| `cmd` `.` | Cancel an edit. |
-| `cmd` `D ` | Add the selected to your favorites. |
-| `Delete ` | Move the selected(s) to the Archive. |
-| `cmd` `Delete ` | Delete the selected(s). |
-| `Shift` `cmd` `D ` | Collapse or expand the sidebar. |
-| `Shift` `cmd` `L ` | Lock 1Password. |
-{.shortcuts}
-
+| `Shortcut` | Action |
+| ----------------- | ------------------------------------ |
+| `cmd` `S` | Save changes to an item. |
+| `cmd` `.` | Cancel an edit. |
+| `cmd` `D` | Add the selected to your favorites. |
+| `Delete` | Move the selected(s) to the Archive. |
+| `cmd` `Delete` | Delete the selected(s). |
+| `Shift` `cmd` `D` | Collapse or expand the sidebar. |
+| `Shift` `cmd` `L` | Lock 1Password. |
+{.shortcuts}
-1Password Keyboard Shortcuts for Windows
-------------------
+## 1Password Keyboard Shortcuts for Windows
### Global keyboard shortcuts
-| `Shortcut ` | Action |
-|--------------------------|--------------------|
+| `Shortcut` | Action |
+| -------------------------- | ------------------ |
| `Enter your own shortcut.` | Show 1Password. |
-| `Ctrl` `Shift` `Space` | Show Quick Access. |
-| `Ctrl` `Shift` `L ` | Lock 1Password. |
-| `Ctrl` `\` | Fill in Browser. |
-{.shortcuts}
-
-
+| `Ctrl` `Shift` `Space` | Show Quick Access. |
+| `Ctrl` `Shift` `L` | Lock 1Password. |
+| `Ctrl` `\` | Fill in Browser. |
-
-### 1Password app {.row-span-2}
-
-| `Shortcut ` | Action |
-|--------------------------|----------------------------------------------------------------------------------------------|
-| `Ctrl` `Shift` `/` | View keyboard shortcuts. |
-| `Ctrl` `,` | Open settings. |
-| `Ctrl` `F ` | Search for items. |
-| `Ctrl` `Alt` `F ` | Find items in the current list. |
-| `Esc ` | Clear the search field. |
-| `Ctrl` `1 ` | Switch to All Accounts. |
-| `Ctrl` `2...9` | Switch accounts and collections. |
-| `Alt` `Left Arrow ` | Go back. |
-| `Alt` `Right Arrow ` | Go forward. |
-| `Down Arrow ` | Focus next row. |
-| `Up Arrow ` | Focus previous row. |
-| `Right Arrow ` | Focus right section. |
-| `Left Arrow ` | Focus left section. |
-| `Space ` | Activate focused element. |
-| `Ctrl` `C ` | Copy the username or primary field of the selected. |
-| `Ctrl` `Shift` `C ` | Copy the password of the selected. |
-| `Ctrl` `Alt` `C ` | Copy the one-time password of the selected. |
-| `Ctrl` `Shift` `F ` | Open the website for the selected login in your browser and fill your username and password. |
-| `Ctrl` `O ` | Open the selected in a new window. |
-| `Ctrl` `N ` | Create a new item. |
-| `Ctrl` `E ` | Edit the selected. |
-| `Ctrl` `S ` | Save changes to an item. |
-| `Esc ` | Cancel an edit. |
-| `Ctrl` `R ` | Reveal or conceal secure fields in the selected. |
-| `Ctrl` `Alt ` | Temporarily reveal all secure fields in the selected.* |
-| `Delete ` | Move the selected(s) to the Archive. |
-| `Ctrl` `Delete ` | Delete the selected(s). |
-| `Ctrl` `Shift` `D ` | Collapse or expand the sidebar. |
-| `Ctrl` `+` | Zoom in. |
-| `Ctrl` `-` | Zoom out. |
-| `Ctrl` `0 ` | Revert to actual size. |
{.shortcuts}
+### 1Password app {.row-span-2}
+| `Shortcut` | Action |
+| ------------------- | -------------------------------------------------------------------------------------------- |
+| `Ctrl` `Shift` `/` | View keyboard shortcuts. |
+| `Ctrl` `,` | Open settings. |
+| `Ctrl` `F` | Search for items. |
+| `Ctrl` `Alt` `F` | Find items in the current list. |
+| `Esc` | Clear the search field. |
+| `Ctrl` `1` | Switch to All Accounts. |
+| `Ctrl` `2...9` | Switch accounts and collections. |
+| `Alt` `Left Arrow` | Go back. |
+| `Alt` `Right Arrow` | Go forward. |
+| `Down Arrow` | Focus next row. |
+| `Up Arrow` | Focus previous row. |
+| `Right Arrow` | Focus right section. |
+| `Left Arrow` | Focus left section. |
+| `Space` | Activate focused element. |
+| `Ctrl` `C` | Copy the username or primary field of the selected. |
+| `Ctrl` `Shift` `C` | Copy the password of the selected. |
+| `Ctrl` `Alt` `C` | Copy the one-time password of the selected. |
+| `Ctrl` `Shift` `F` | Open the website for the selected login in your browser and fill your username and password. |
+| `Ctrl` `O` | Open the selected in a new window. |
+| `Ctrl` `N` | Create a new item. |
+| `Ctrl` `E` | Edit the selected. |
+| `Ctrl` `S` | Save changes to an item. |
+| `Esc` | Cancel an edit. |
+| `Ctrl` `R` | Reveal or conceal secure fields in the selected. |
+| `Ctrl` `Alt` | Temporarily reveal all secure fields in the selected.\* |
+| `Delete` | Move the selected(s) to the Archive. |
+| `Ctrl` `Delete` | Delete the selected(s). |
+| `Ctrl` `Shift` `D` | Collapse or expand the sidebar. |
+| `Ctrl` `+` | Zoom in. |
+| `Ctrl` `-` | Zoom out. |
+| `Ctrl` `0` | Revert to actual size. |
-
-### 1Password in the browser {.row-span-2}
-
-| `Shortcut ` | Action |
-|---------------------------------------|-------------------------------------------------------------------------------------------|
-| `Ctrl` `Shift` `X ` | Open or close the 1Password pop-up in Chrome, Edge, or Brave. |
-| `Ctrl` `.` | Open or close the 1Password pop-up in Firefox. |
-| `Ctrl` `F ` | Search for items. |
-| `Esc ` | Clear the search field. |
-| `Ctrl` `D ` | Show the list of vaults. |
-| `Ctrl` `Down Arrow ` | Open or close the category menu. |
-| `Down Arrow ` | Select the next category, item, or field. |
-| `Up Arrow ` | Select the previous category, item, or field. |
-| `Right Arrow ` | Select the item details. |
-| `Left Arrow ` | Select the item list. |
-| `Space ` | Expand item overview banners. |
-| `Enter ` | Copy the selected detail.Perform the default action for the selected. |
-| `Ctrl` `C ` | Copy the username of the selected. |
-| `Ctrl` `Shift` `C ` | Copy the password of the selected. |
-| `Ctrl` `Shift` `Win` `C` | Copy the one-time password of the selected. |
-| `Ctrl` `Enter ` | Open the website for the selected login in a new tab and fill your username and password. |
-| `Ctrl` `O ` | Open the selected in a separate window. |
-| `Ctrl` `I ` | Create new item. |
-| `Ctrl` `E ` | Edit the selected. |
-| `Ctrl` `Alt ` | Temporarily reveal all secure fields in the selected. |
-| `Ctrl` `G ` | Show the password generator. |
-| `Ctrl` `C ` | Copy a password from the password generator. |
-| `Ctrl` `Shift` `L ` | Lock 1Password. |
-| `Esc ` | Close the 1Password pop-up. |
{.shortcuts}
+### 1Password in the browser {.row-span-2}
+| `Shortcut` | Action |
+| ------------------------ | ----------------------------------------------------------------------------------------- |
+| `Ctrl` `Shift` `X` | Open or close the 1Password pop-up in Chrome, Edge, or Brave. |
+| `Ctrl` `.` | Open or close the 1Password pop-up in Firefox. |
+| `Ctrl` `F` | Search for items. |
+| `Esc` | Clear the search field. |
+| `Ctrl` `D` | Show the list of vaults. |
+| `Ctrl` `Down Arrow` | Open or close the category menu. |
+| `Down Arrow` | Select the next category, item, or field. |
+| `Up Arrow` | Select the previous category, item, or field. |
+| `Right Arrow` | Select the item details. |
+| `Left Arrow` | Select the item list. |
+| `Space` | Expand item overview banners. |
+| `Enter` | Copy the selected detail.Perform the default action for the selected. |
+| `Ctrl` `C` | Copy the username of the selected. |
+| `Ctrl` `Shift` `C` | Copy the password of the selected. |
+| `Ctrl` `Shift` `Win` `C` | Copy the one-time password of the selected. |
+| `Ctrl` `Enter` | Open the website for the selected login in a new tab and fill your username and password. |
+| `Ctrl` `O` | Open the selected in a separate window. |
+| `Ctrl` `I` | Create new item. |
+| `Ctrl` `E` | Edit the selected. |
+| `Ctrl` `Alt` | Temporarily reveal all secure fields in the selected. |
+| `Ctrl` `G` | Show the password generator. |
+| `Ctrl` `C` | Copy a password from the password generator. |
+| `Ctrl` `Shift` `L` | Lock 1Password. |
+| `Esc` | Close the 1Password pop-up. |
-
-### Quick Access
-
-| `Shortcut ` | Action |
-|------------------------------|-------------------------------------------------------------------------------------|
-| `Ctrl` `Shift` `Space` | Open or close Quick Access. |
-| `Esc ` | Clear the search field. |
-| `Ctrl` `1...9 ` | Switch accounts or collections. |
-| `Right Arrow ` | View all available actions. |
-| `Ctrl` `C ` | Copy username or primary field. |
-| `Ctrl` `Shift` `C ` | Copy password. |
-| `Ctrl` `Alt` `C ` | Copy one-time password. |
-| `Ctrl` `O ` | Open item details in new window. |
-| `Alt` `Enter ` | Open the website for the login in your browser and fill your username and password. |
-| `Ctrl` `Shift` `O ` | Open the item in the app. |
{.shortcuts}
+### Quick Access
+| `Shortcut` | Action |
+| ---------------------- | ----------------------------------------------------------------------------------- |
+| `Ctrl` `Shift` `Space` | Open or close Quick Access. |
+| `Esc` | Clear the search field. |
+| `Ctrl` `1...9` | Switch accounts or collections. |
+| `Right Arrow` | View all available actions. |
+| `Ctrl` `C` | Copy username or primary field. |
+| `Ctrl` `Shift` `C` | Copy password. |
+| `Ctrl` `Alt` `C` | Copy one-time password. |
+| `Ctrl` `O` | Open item details in new window. |
+| `Alt` `Enter` | Open the website for the login in your browser and fill your username and password. |
+| `Ctrl` `Shift` `O` | Open the item in the app. |
+{.shortcuts}
-1Password Keyboard Shortcuts for Linux
-------------------
+## 1Password Keyboard Shortcuts for Linux
### X11
-| `Shortcut ` | Action |
-|--------------------------|--------------------|
+| `Shortcut` | Action |
+| ----------------------- | ------------------ |
| Enter your own shortcut | Show 1Password. |
-| `Ctrl` `Shift` `Space` | Show Quick Access. |
-| `Ctrl` `Shift` `L ` | Lock 1Password. |
-| `Ctrl` `\` | Fill in Browser. |
-{.shortcuts}
-
+| `Ctrl` `Shift` `Space` | Show Quick Access. |
+| `Ctrl` `Shift` `L` | Lock 1Password. |
+| `Ctrl` `\` | Fill in Browser. |
-
-
-### 1Password app {.row-span-4}
-
-| `Shortcut ` | Action |
-|--------------------------|----------------------------------------------------------------------------------------------|
-| `Ctrl` `Shift` `/` | View keyboard shortcuts. |
-| `Alt ` | Show or hide the app menu in the title bar. |
-| `Ctrl` `,` | Open settings. |
-| `Ctrl` `F ` | Search for items. |
-| `Ctrl` `Alt` `F ` | Find items in the current list. |
-| `Esc ` | Clear the search field. |
-| `Ctrl` `1 ` | Switch to All Accounts. |
-| `Ctrl` `2...9` | Switch accounts and collections. |
-| `Alt` `Left Arrow ` | Go back. |
-| `Alt` `Right Arrow ` | Go forward. |
-| `Down Arrow ` | Focus next row. |
-| `Up Arrow ` | Focus previous row. |
-| `Right Arrow ` | Focus right section. |
-| `Left Arrow ` | Focus left section. |
-| `Space ` | Activate focused element. |
-| `Ctrl` `C ` | Copy the username or primary field of the selected. |
-| `Ctrl` `Shift` `C ` | Copy the password of the selected. |
-| `Ctrl` `Alt` `C ` | Copy the one-time password of the selected. |
-| `Ctrl` `Shift` `F ` | Open the website for the selected login in your browser and fill your username and password. |
-| `Ctrl` `O ` | Open the selected in a new window. |
-| `Ctrl` `N ` | Create a new item. |
-| `Ctrl` `E ` | Edit the selected. |
-| `Ctrl` `S ` | Save changes to an item. |
-| `Esc ` | Cancel an edit. |
-| `Ctrl` `R ` | Reveal or conceal secure fields in the selected. |
-| `Ctrl` `Alt ` | Temporarily reveal all secure fields in the selected. |
-| `Delete ` | Move the selected(s) to the Archive. |
-| `Ctrl` `Delete ` | Delete the selected(s). |
-| `Ctrl` `Shift` `D ` | Collapse or expand the sidebar. |
-| `Ctrl` `+` | Zoom in. |
-| `Ctrl` `-` | Zoom out. |
-| `Ctrl` `0 ` | Revert to actual size. |
{.shortcuts}
+### 1Password app {.row-span-4}
+| `Shortcut` | Action |
+| ------------------- | -------------------------------------------------------------------------------------------- |
+| `Ctrl` `Shift` `/` | View keyboard shortcuts. |
+| `Alt` | Show or hide the app menu in the title bar. |
+| `Ctrl` `,` | Open settings. |
+| `Ctrl` `F` | Search for items. |
+| `Ctrl` `Alt` `F` | Find items in the current list. |
+| `Esc` | Clear the search field. |
+| `Ctrl` `1` | Switch to All Accounts. |
+| `Ctrl` `2...9` | Switch accounts and collections. |
+| `Alt` `Left Arrow` | Go back. |
+| `Alt` `Right Arrow` | Go forward. |
+| `Down Arrow` | Focus next row. |
+| `Up Arrow` | Focus previous row. |
+| `Right Arrow` | Focus right section. |
+| `Left Arrow` | Focus left section. |
+| `Space` | Activate focused element. |
+| `Ctrl` `C` | Copy the username or primary field of the selected. |
+| `Ctrl` `Shift` `C` | Copy the password of the selected. |
+| `Ctrl` `Alt` `C` | Copy the one-time password of the selected. |
+| `Ctrl` `Shift` `F` | Open the website for the selected login in your browser and fill your username and password. |
+| `Ctrl` `O` | Open the selected in a new window. |
+| `Ctrl` `N` | Create a new item. |
+| `Ctrl` `E` | Edit the selected. |
+| `Ctrl` `S` | Save changes to an item. |
+| `Esc` | Cancel an edit. |
+| `Ctrl` `R` | Reveal or conceal secure fields in the selected. |
+| `Ctrl` `Alt` | Temporarily reveal all secure fields in the selected. |
+| `Delete` | Move the selected(s) to the Archive. |
+| `Ctrl` `Delete` | Delete the selected(s). |
+| `Ctrl` `Shift` `D` | Collapse or expand the sidebar. |
+| `Ctrl` `+` | Zoom in. |
+| `Ctrl` `-` | Zoom out. |
+| `Ctrl` `0` | Revert to actual size. |
-
-### 1Password in the browser {.row-span-4}
-
-| `Shortcut ` | Action |
-|--------------------------------|-------------------------------------------------------------------------------------------|
-| `Ctrl` `Shift` `X ` | Open or close the 1Password pop-up in Chrome, Edge, or Brave. |
-| `Ctrl` `.` | Open or close the 1Password pop-up in Firefox. |
-| `Ctrl` `F ` | Search for items. |
-| `Esc ` | Clear the search field. |
-| `Ctrl` `D ` | Show the list of vaults. |
-| `Ctrl` `Down Arrow ` | Open or close the category menu. |
-| `Down Arrow ` | Select the next category, item, or field. |
-| `Up Arrow ` | Select the previous category, item, or field. |
-| `Right Arrow ` | Select the item details. |
-| `Left Arrow ` | Select the item list. |
-| `Space ` | Expand item overview banners. |
-| `Enter ` | Copy the selected detail.Perform the default action for the selected. |
-| `Ctrl` `C ` | Copy the username of the selected. |
-| `Ctrl` `Shift` `C ` | Copy the password of the selected. |
-| `Ctrl` `Shift` `Super key` `C` | Copy the one-time password of the selected. |
-| `Ctrl` `Enter ` | Open the website for the selected login in a new tab and fill your username and password. |
-| `Ctrl` `O ` | Open the selected in a separate window. |
-| `Ctrl` `I ` | Create new item. |
-| `Ctrl` `E ` | Edit the selected. |
-| `Ctrl` `Alt ` | Temporarily reveal all secure fields in the selected. |
-| `Ctrl` `G ` | Show the password generator. |
-| `Ctrl` `C ` | Copy a password from the password generator. |
-| `Ctrl` `Shift` `L ` | Lock 1Password. |
-| `Esc ` | Close the 1Password pop-up. |
{.shortcuts}
+### 1Password in the browser {.row-span-4}
+| `Shortcut` | Action |
+| ------------------------------ | ----------------------------------------------------------------------------------------- |
+| `Ctrl` `Shift` `X` | Open or close the 1Password pop-up in Chrome, Edge, or Brave. |
+| `Ctrl` `.` | Open or close the 1Password pop-up in Firefox. |
+| `Ctrl` `F` | Search for items. |
+| `Esc` | Clear the search field. |
+| `Ctrl` `D` | Show the list of vaults. |
+| `Ctrl` `Down Arrow` | Open or close the category menu. |
+| `Down Arrow` | Select the next category, item, or field. |
+| `Up Arrow` | Select the previous category, item, or field. |
+| `Right Arrow` | Select the item details. |
+| `Left Arrow` | Select the item list. |
+| `Space` | Expand item overview banners. |
+| `Enter` | Copy the selected detail.Perform the default action for the selected. |
+| `Ctrl` `C` | Copy the username of the selected. |
+| `Ctrl` `Shift` `C` | Copy the password of the selected. |
+| `Ctrl` `Shift` `Super key` `C` | Copy the one-time password of the selected. |
+| `Ctrl` `Enter` | Open the website for the selected login in a new tab and fill your username and password. |
+| `Ctrl` `O` | Open the selected in a separate window. |
+| `Ctrl` `I` | Create new item. |
+| `Ctrl` `E` | Edit the selected. |
+| `Ctrl` `Alt` | Temporarily reveal all secure fields in the selected. |
+| `Ctrl` `G` | Show the password generator. |
+| `Ctrl` `C` | Copy a password from the password generator. |
+| `Ctrl` `Shift` `L` | Lock 1Password. |
+| `Esc` | Close the 1Password pop-up. |
-
+{.shortcuts}
### GNOME
-| Shortcut | Action |
-|------------------------|--------------------------|
+| Shortcut | Action |
+| ---------------------- | ------------------------ |
| `Ctrl` `P` | 1password --show |
| `Ctrl` `Shift` `Space` | 1password --quick-access |
| `Ctrl` `Shift` `L` | 1password --lock |
-| `Ctrl` `\` | 1password --fill |
-{.shortcuts}
-
-
+| `Ctrl` `\` | 1password --fill |
-
-### KDE Plasma
-
-| `Trigger ` | Action |
-|--------------------------|--------------------------|
-| `Ctrl` `P ` | 1password --show |
-| `Ctrl` `Shift` `Space` | 1password --quick` `access |
-| `Ctrl` `Shift` `L ` | 1password --lock |
-| `Ctrl` `\` | 1password --fill |
{.shortcuts}
+### KDE Plasma
+| `Trigger` | Action |
+| ---------------------- | ------------------------ |
+| `Ctrl` `P` | 1password --show |
+| `Ctrl` `Shift` `Space` | 1password --quick-access |
+| `Ctrl` `Shift` `L` | 1password --lock |
+| `Ctrl` `\` | 1password --fill |
-
-
+{.shortcuts}
### Quick Access
-| `Shortcut ` | Action |
-|------------------------------|-------------------------------------------------------------------------------------|
-| `Ctrl` `Shift` `Space` | Open or close Quick Access. |
-| `Esc ` | Clear the search field. |
-| `Ctrl` `1...9 ` | Switch accounts or collections. |
-| `Right Arrow ` | View all available actions. |
-| `Ctrl` `C ` | Copy username or primary field. |
-| `Ctrl` `Shift` `C ` | Copy password. |
-| `Ctrl` `Alt` `C ` | Copy one-time password. |
-| `Ctrl` `O ` | Open item details in new window. |
-| `Alt` `Enter ` | Open the website for the login in your browser and fill your username and password. |
-| `Ctrl` `Shift` `O ` | Open the item in the app. |
-{.shortcuts}
-
+| `Shortcut` | Action |
+| ---------------------- | ----------------------------------------------------------------------------------- |
+| `Ctrl` `Shift` `Space` | Open or close Quick Access. |
+| `Esc` | Clear the search field. |
+| `Ctrl` `1...9` | Switch accounts or collections. |
+| `Right Arrow` | View all available actions. |
+| `Ctrl` `C` | Copy username or primary field. |
+| `Ctrl` `Shift` `C` | Copy password. |
+| `Ctrl` `Alt` `C` | Copy one-time password. |
+| `Ctrl` `O` | Open item details in new window. |
+| `Alt` `Enter` | Open the website for the login in your browser and fill your username and password. |
+| `Ctrl` `Shift` `O` | Open the item in the app. |
+{.shortcuts}
+## Also see
-Also see
---------
- [Keyboard shortcuts for 1Password](https://support.1password.com/keyboard-shortcuts/) _(support.1password.com)_
diff --git a/source/_posts/adobe-lightroom.md b/source/_posts/adobe-lightroom.md
index 05406f5f..4fbb1c58 100644
--- a/source/_posts/adobe-lightroom.md
+++ b/source/_posts/adobe-lightroom.md
@@ -2,376 +2,368 @@
title: Adobe Lightroom CC
date: 2022-11-23 16:23:31.702312
background: bg-[#081c32]
-label:
-tags:
- -
- -
+label:
+tags:
+ -
+ -
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 251 keyboard shortcuts found in Adobe Lightroom CC
+ A visual cheat-sheet for the 251 keyboard shortcuts found in Adobe Lightroom CC
---
-
-
-Keyboard Shortcuts
-------------------
-
-
+## Keyboard Shortcuts
### Working with panels {.row-span-2}
-Shortcut | Action
----|---
-`Tab` | Show/hide side panels
-`Shift` `Tab` | Show/hide all panels
-`T` | Show/hide toolbar
-`F5` | Show/hide Module Picker
-`F6` | Show/hide Filmstrip
-`F7` | Show/hide left panels
-`F8` | Show/hide right panels
-`Alt` `(click a panel)` | Toggle solo mode
-`Shift` `(click a panel)` | Open a new panel without closing soloed panel
-`Ctrl` `(click a panel)` | Open/close all panels
-`Ctrl` `Shift` `0-5` | Open/close left panels, top to bottom
-`Ctrl` `0-9` | Open/close right panels, Library and Develop modules, top to bottom
-`Ctrl` `1-7` | Open/close right panels, Slideshow, Print, and Web modules, top to bottom
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------- | ------------------------------------------------------------------------- |
+| `Tab` | Show/hide side panels |
+| `Shift` `Tab` | Show/hide all panels |
+| `T` | Show/hide toolbar |
+| `F5` | Show/hide Module Picker |
+| `F6` | Show/hide Filmstrip |
+| `F7` | Show/hide left panels |
+| `F8` | Show/hide right panels |
+| `Alt` `(click a panel)` | Toggle solo mode |
+| `Shift` `(click a panel)` | Open a new panel without closing soloed panel |
+| `Ctrl` `(click a panel)` | Open/close all panels |
+| `Ctrl` `Shift` `0-5` | Open/close left panels, top to bottom |
+| `Ctrl` `0-9` | Open/close right panels, Library and Develop modules, top to bottom |
+| `Ctrl` `1-7` | Open/close right panels, Slideshow, Print, and Web modules, top to bottom |
+{.shortcuts}
### Navigating modules
-Shortcut | Action
----|---
-`Ctrl` `Alt` `1` | Go to Library module
-`Ctrl` `Alt` `2` | Go to Develop module
-`Ctrl` `Alt` `3` | Go to Slideshow module
-`Ctrl` `Alt` `4` | Go to Print module
-`Ctrl` `Alt` `5` | Go to Web module
-`Ctrl` `Alt` `Left/Right` | Go back/go forward
-`Ctrl` `Alt` `Up` | Go back to previous module
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------- | -------------------------- |
+| `Ctrl` `Alt` `1` | Go to Library module |
+| `Ctrl` `Alt` `2` | Go to Develop module |
+| `Ctrl` `Alt` `3` | Go to Slideshow module |
+| `Ctrl` `Alt` `4` | Go to Print module |
+| `Ctrl` `Alt` `5` | Go to Web module |
+| `Ctrl` `Alt` `Left/Right` | Go back/go forward |
+| `Ctrl` `Alt` `Up` | Go back to previous module |
+{.shortcuts}
### Using a secondary window
-Shortcut | Action
----|---
-`F11` | Open secondary window
-`Shift` `G` | Enter Grid view
-`Shift` `E` | Enter normal Loupe view
-`Ctrl` `Shift` `Enter` | Enter locked Loupe view
-`Shift` `C` | Enter Compare view
-`Shift` `N` | Enter Survey view
-`Ctrl` `Alt` `Shift` `Enter` | Enter Slideshow view
-`Shift` `F11` | Enter full-screen mode (requires second monitor)
-`Shift` `\` | Show/hide Filter bar
-`Ctrl` `Shift` `+/-` | Zoom in/out
-{.shortcuts}
-
+| Shortcut | Action |
+| ---------------------------- | ------------------------------------------------ |
+| `F11` | Open secondary window |
+| `Shift` `G` | Enter Grid view |
+| `Shift` `E` | Enter normal Loupe view |
+| `Ctrl` `Shift` `Enter` | Enter locked Loupe view |
+| `Shift` `C` | Enter Compare view |
+| `Shift` `N` | Enter Survey view |
+| `Ctrl` `Alt` `Shift` `Enter` | Enter Slideshow view |
+| `Shift` `F11` | Enter full-screen mode (requires second monitor) |
+| `Shift` `\` | Show/hide Filter bar |
+| `Ctrl` `Shift` `+/-` | Zoom in/out |
+{.shortcuts}
### Working in the Develop module {.row-span-3}
-Shortcut | Action
----|---
-`V` | Convert to grayscale
-`Ctrl` `U` | Auto tone
-`Ctrl` `Shift` `U` | Auto white balance
-`Ctrl` `E` | Edit in Photoshop
-`Ctrl` `Shift` `C/V` | Copy/paste Develop settings
-`Ctrl` `Alt` `V` | Paste settings from previous photo
-`Ctrl` `Alt` `Shift` `Left` | Copy After settings to Before
-`Ctrl` `Alt` `Shift` `Right` | Copy Before settings to After
-`Ctrl` `Alt` `Shift` `Up` | Swap Before and After settings
-`Up/Down` | Increase/decrease selected slider in small increments
-`Shift` `Up/Down` | Increase/decrease selected slider in larger increments
-`./,` | Cycle through Basic panel settings (forward/backward)
-`(double-click slider name)` | Reset a slider
-`Alt` `(click group name)` | Reset a group of sliders
-`Ctrl` `Shift` `R` | Reset all settings
-`Ctrl` `Shift` `S` | Sync settings
-`Ctrl` `Alt` `S` | Sync settings bypassing Synchronize Settings dialog box
-`Ctrl` `(click Sync button)` | Toggle Auto Sync
-`Ctrl` `Alt` `Shift` `A` | Enable Auto Sync
-`Ctrl` `Alt` `Shift` `M` | Match total exposures
-`W` | Select White Balance tool (from any module)
-`R` | Select the Crop tool (from any module)
-`A` | Constrain aspect ratio when Crop tool is selected
-`Shift` `A` | Crop to same aspect ratio as previous crop
-`Alt` `(drag)` | Crop from center of photo
-`O` | Cycle Crop grid overlay
-`Shift` `O` | Cycle Crop grid overlay orientation
-`X` | Switch crop between portrait and landscape orientation
-`Ctrl` `Alt` `R` | Reset crop
-`Shift` `T` | Select the Guided Upright tool
-`Q` | Select the Spot Removal tool
-`Shift` `T` | Toggle Brush between Clone and Heal modes when Spot Removal tool is selected
-`K` | Select the Adjustment Brush tool (from any module)
-`M` | Select the Graduated Filter tool
-`Shift` `T` | Toggle Mask between Edit and Brush modes when the Graduated/Radial Filter is selected
-`]/[` | Increase/decrease brush size
-`Shift` `]/[` | Increase/decrease brush feathering
-`/` | Switch between local adjustment brush A and B
-`Alt` `(drag)` | Temporarily switch from brush A or B to Eraser
-`Shift` `(drag)` | Paint a horizontal or vertical line
-`H` | Show/hide local adjustment pin
-`O` | Show/hide local adjustment mask overlay
-`Shift` `O` | Cycle local adjustment mask overlay colors
-`Ctrl` `Alt` `Shift` `T` | Select Targeted Adjustment tool to apply a Tone Curve adjustment
-`Ctrl` `Alt` `Shift` `H` | Select Targeted Adjustment tool to apply a Hue adjustment
-`Ctrl` `Alt` `Shift` `S` | Select Targeted Adjustment tool to apply a Saturation adjustment
-`Ctrl` `Alt` `Shift` `L` | Select Targeted Adjustment tool to apply a Luminance adjustment
-`Ctrl` `Alt` `Shift` `G` | Select Targeted Adjustment tool to apply a Grayscale Mix adjustment
-`Ctrl` `Alt` `Shift` `N` | Deselect Targeted Adjustment tool
-`J` | Show clipping
-`Ctrl` `]` | Rotate photo right (clockwise)
-`Ctrl` `[` | Rotate photo left (counterclockwise)
-`Space/Z` | Toggle between Loupe and 1:1 Zoom preview
-`Ctrl` `+/-` | Zoom in/out
-`Ctrl` `Enter` | Play impromptu slide show
-`Y` | View Before and After left/right
-`Alt` `Y` | View Before and After top/bottom
-`Shift` `Y` | View Before and After in a split screen
-`\` | View Before only
-`Ctrl` `N` | Create a new snapshot
-`Ctrl` `Shift` `N` | Create a new preset
-`Ctrl` `Alt` `N` | Create a new preset folder
-`Ctrl` `J` | Open Develop view options
-{.shortcuts}
+| Shortcut | Action |
+| ---------------------------- | ------------------------------------------------------------------------------------- |
+| `V` | Convert to grayscale |
+| `Ctrl` `U` | Auto tone |
+| `Ctrl` `Shift` `U` | Auto white balance |
+| `Ctrl` `E` | Edit in Photoshop |
+| `Ctrl` `Shift` `C/V` | Copy/paste Develop settings |
+| `Ctrl` `Alt` `V` | Paste settings from previous photo |
+| `Ctrl` `Alt` `Shift` `Left` | Copy After settings to Before |
+| `Ctrl` `Alt` `Shift` `Right` | Copy Before settings to After |
+| `Ctrl` `Alt` `Shift` `Up` | Swap Before and After settings |
+| `Up/Down` | Increase/decrease selected slider in small increments |
+| `Shift` `Up/Down` | Increase/decrease selected slider in larger increments |
+| `./,` | Cycle through Basic panel settings (forward/backward) |
+| `(double-click slider name)` | Reset a slider |
+| `Alt` `(click group name)` | Reset a group of sliders |
+| `Ctrl` `Shift` `R` | Reset all settings |
+| `Ctrl` `Shift` `S` | Sync settings |
+| `Ctrl` `Alt` `S` | Sync settings bypassing Synchronize Settings dialog box |
+| `Ctrl` `(click Sync button)` | Toggle Auto Sync |
+| `Ctrl` `Alt` `Shift` `A` | Enable Auto Sync |
+| `Ctrl` `Alt` `Shift` `M` | Match total exposures |
+| `W` | Select White Balance tool (from any module) |
+| `R` | Select the Crop tool (from any module) |
+| `A` | Constrain aspect ratio when Crop tool is selected |
+| `Shift` `A` | Crop to same aspect ratio as previous crop |
+| `Alt` `(drag)` | Crop from center of photo |
+| `O` | Cycle Crop grid overlay |
+| `Shift` `O` | Cycle Crop grid overlay orientation |
+| `X` | Switch crop between portrait and landscape orientation |
+| `Ctrl` `Alt` `R` | Reset crop |
+| `Shift` `T` | Select the Guided Upright tool |
+| `Q` | Select the Spot Removal tool |
+| `Shift` `T` | Toggle Brush between Clone and Heal modes when Spot Removal tool is selected |
+| `K` | Select the Adjustment Brush tool (from any module) |
+| `M` | Select the Graduated Filter tool |
+| `Shift` `T` | Toggle Mask between Edit and Brush modes when the Graduated/Radial Filter is selected |
+| `]/[` | Increase/decrease brush size |
+| `Shift` `]/[` | Increase/decrease brush feathering |
+| `/` | Switch between local adjustment brush A and B |
+| `Alt` `(drag)` | Temporarily switch from brush A or B to Eraser |
+| `Shift` `(drag)` | Paint a horizontal or vertical line |
+| `H` | Show/hide local adjustment pin |
+| `O` | Show/hide local adjustment mask overlay |
+| `Shift` `O` | Cycle local adjustment mask overlay colors |
+| `Ctrl` `Alt` `Shift` `T` | Select Targeted Adjustment tool to apply a Tone Curve adjustment |
+| `Ctrl` `Alt` `Shift` `H` | Select Targeted Adjustment tool to apply a Hue adjustment |
+| `Ctrl` `Alt` `Shift` `S` | Select Targeted Adjustment tool to apply a Saturation adjustment |
+| `Ctrl` `Alt` `Shift` `L` | Select Targeted Adjustment tool to apply a Luminance adjustment |
+| `Ctrl` `Alt` `Shift` `G` | Select Targeted Adjustment tool to apply a Grayscale Mix adjustment |
+| `Ctrl` `Alt` `Shift` `N` | Deselect Targeted Adjustment tool |
+| `J` | Show clipping |
+| `Ctrl` `]` | Rotate photo right (clockwise) |
+| `Ctrl` `[` | Rotate photo left (counterclockwise) |
+| `Space/Z` | Toggle between Loupe and 1:1 Zoom preview |
+| `Ctrl` `+/-` | Zoom in/out |
+| `Ctrl` `Enter` | Play impromptu slide show |
+| `Y` | View Before and After left/right |
+| `Alt` `Y` | View Before and After top/bottom |
+| `Shift` `Y` | View Before and After in a split screen |
+| `\` | View Before only |
+| `Ctrl` `N` | Create a new snapshot |
+| `Ctrl` `Shift` `N` | Create a new preset |
+| `Ctrl` `Alt` `N` | Create a new preset folder |
+| `Ctrl` `J` | Open Develop view options |
+{.shortcuts}
### Changing view and screen modes
-Shortcut | Action
----|---
-`E` | Enter Library Loupe view
-`G` | Enter Library Grid view
-`C` | Enter Library Compare view
-`N` | Enter Library Survey view
-`D` | Open selected photo in the Develop module
-`L` | Cycle forward through Lights Out modes
-`Shift` `L` | Cycle backward through Lights Out modes
-`Ctrl` `Shift` `L` | Toggle Lights Dim mode
-`F` | Cycle screen modes
-`Ctrl` `Shift` `F` | Switch between Normal and full-screen, hide panels
-`Ctrl` `Alt` `F` | Go to Normal screen mode
-`I` | Cycle info overlay
-`Ctrl` `I` | Show/hide info overlay
-{.shortcuts}
-
+| Shortcut | Action |
+| ------------------ | -------------------------------------------------- |
+| `E` | Enter Library Loupe view |
+| `G` | Enter Library Grid view |
+| `C` | Enter Library Compare view |
+| `N` | Enter Library Survey view |
+| `D` | Open selected photo in the Develop module |
+| `L` | Cycle forward through Lights Out modes |
+| `Shift` `L` | Cycle backward through Lights Out modes |
+| `Ctrl` `Shift` `L` | Toggle Lights Dim mode |
+| `F` | Cycle screen modes |
+| `Ctrl` `Shift` `F` | Switch between Normal and full-screen, hide panels |
+| `Ctrl` `Alt` `F` | Go to Normal screen mode |
+| `I` | Cycle info overlay |
+| `Ctrl` `I` | Show/hide info overlay |
+{.shortcuts}
### Managing photos and catalogs
-Shortcut | Action
----|---
-`Ctrl` `Shift` `I` | Import photos from disk
-`Ctrl` `O` | Open catalog
-`Ctrl` `,` | Open Preferences
-`Ctrl` `Alt` `,` | Open Catalog Settings
-`Ctrl` `Shift` `T` | Create new subfolder (segmented tethered capture)
-`Ctrl` `T` | Hide/show tether capture bar
-`Ctrl` `Shift` `N` | Create a new folder in the Library module
-`Ctrl` `'` | Create virtual copy (Library and Develop module only)
-`Ctrl` `R` | Show in Explorer/Finder (Library and Develop module only)
-`Right/Left` | Go to next/previous photo in the Filmstrip
-`Shift/Ctrl` `Click` | Select multiple folders or collections (in Library, Slideshow, Print, and Web modules)
-`F2` | Rename photo (in Library module)
-`Delete` | Delete selected photo(s)
-`Alt` `Backspace` | Remove selected photo(s) from catalog
-`Ctrl` `Alt` `Shift` `Backspace` | Delete selected photo(s) and move to Trash
-`Ctrl` `Backspace` | Delete rejected photo(s)
-`Ctrl` `E` | Edit in Photoshop
-`Ctrl` `Alt` `E` | Open in other editor
-`Ctrl` `Shift` `E` | Export selected photo(s)
-`Ctrl` `Alt` `Shift` `E` | Export with previous settings
-`Ctrl` `Alt` `Shift` `,` | Open plug-in manager
-`Ctrl` `P` | Print selected photo
-`Ctrl` `Shift` `P` | Open Page Setup dialog box
-{.shortcuts}
+| Shortcut | Action |
+| -------------------------------- | -------------------------------------------------------------------------------------- |
+| `Ctrl` `Shift` `I` | Import photos from disk |
+| `Ctrl` `O` | Open catalog |
+| `Ctrl` `,` | Open Preferences |
+| `Ctrl` `Alt` `,` | Open Catalog Settings |
+| `Ctrl` `Shift` `T` | Create new subfolder (segmented tethered capture) |
+| `Ctrl` `T` | Hide/show tether capture bar |
+| `Ctrl` `Shift` `N` | Create a new folder in the Library module |
+| `Ctrl` `'` | Create virtual copy (Library and Develop module only) |
+| `Ctrl` `R` | Show in Explorer/Finder (Library and Develop module only) |
+| `Right/Left` | Go to next/previous photo in the Filmstrip |
+| `Shift/Ctrl` `Click` | Select multiple folders or collections (in Library, Slideshow, Print, and Web modules) |
+| `F2` | Rename photo (in Library module) |
+| `Delete` | Delete selected photo(s) |
+| `Alt` `Backspace` | Remove selected photo(s) from catalog |
+| `Ctrl` `Alt` `Shift` `Backspace` | Delete selected photo(s) and move to Trash |
+| `Ctrl` `Backspace` | Delete rejected photo(s) |
+| `Ctrl` `E` | Edit in Photoshop |
+| `Ctrl` `Alt` `E` | Open in other editor |
+| `Ctrl` `Shift` `E` | Export selected photo(s) |
+| `Ctrl` `Alt` `Shift` `E` | Export with previous settings |
+| `Ctrl` `Alt` `Shift` `,` | Open plug-in manager |
+| `Ctrl` `P` | Print selected photo |
+| `Ctrl` `Shift` `P` | Open Page Setup dialog box |
+{.shortcuts}
### Comparing photos in the Library module
-Shortcut | Action
----|---
-`E/Enter` | Switch to Loupe view
-`G/Esc` | Switch to Grid view
-`C` | Switch to Compare view
-`N` | Switch to Survey view
-`Space/E` | Switch from Grid to Loupe view
-`Down` | Swap select and candidate photos in Compare view
-`Up` | Make next photos select and candidate in Compare view
-`Z` | Toggle Zoom view
-`Ctrl` `+/-` | Zoom in/out in Loupe view
-`PgUp/PgDown` | Scroll up/down zoomed photo in Loupe view
-`Home/End` | Go to beginning/end of Grid view
-`Ctrl` `Enter` | Play impromptu slide show
-`Ctrl` `]` | Rotate photo right (clockwise)
-`Ctrl` `[` | Rotate photo left (counterclockwise)
-`=/-` | Increase/decrease Grid thumbnail size
-`PgUp/PgDown` | Scroll up/down Grid thumbnails
-`Ctrl` `Shift` `H` | Toggle cell extras
-`Ctrl` `Alt` `Shift` `H` | Show/hide badges
-`J` | Cycle Grid views
-`Ctrl` `J` | Open Library view options
-`Ctrl` `(click)` | Select multiple discrete photos
-`Shift` `(click)` | Select multiple contiguous photos
-`Ctrl` `A` | Select all photos
-`Ctrl` `D` | Deselect all photos
-`Ctrl` `Shift` `D` | Select only active photo
-`/` | Deselect active photo
-`Shift` `Left/Right` | Add previous/next photo to selection
-`Ctrl` `Alt` `A` | Select flagged photos
-`Ctrl` `Alt` `Shift` `D` | Deselect unflagged photos
-`Ctrl` `G` | Group into stack
-`Ctrl` `Shift` `G` | Unstack
-`S` | Toggle stack
-`Shift` `S` | Move to top of stack
-`Shift` `[` | Move up in stack
-`Shift` `]` | Move down in stack
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | ----------------------------------------------------- |
+| `E/Enter` | Switch to Loupe view |
+| `G/Esc` | Switch to Grid view |
+| `C` | Switch to Compare view |
+| `N` | Switch to Survey view |
+| `Space/E` | Switch from Grid to Loupe view |
+| `Down` | Swap select and candidate photos in Compare view |
+| `Up` | Make next photos select and candidate in Compare view |
+| `Z` | Toggle Zoom view |
+| `Ctrl` `+/-` | Zoom in/out in Loupe view |
+| `PgUp/PgDown` | Scroll up/down zoomed photo in Loupe view |
+| `Home/End` | Go to beginning/end of Grid view |
+| `Ctrl` `Enter` | Play impromptu slide show |
+| `Ctrl` `]` | Rotate photo right (clockwise) |
+| `Ctrl` `[` | Rotate photo left (counterclockwise) |
+| `=/-` | Increase/decrease Grid thumbnail size |
+| `PgUp/PgDown` | Scroll up/down Grid thumbnails |
+| `Ctrl` `Shift` `H` | Toggle cell extras |
+| `Ctrl` `Alt` `Shift` `H` | Show/hide badges |
+| `J` | Cycle Grid views |
+| `Ctrl` `J` | Open Library view options |
+| `Ctrl` `(click)` | Select multiple discrete photos |
+| `Shift` `(click)` | Select multiple contiguous photos |
+| `Ctrl` `A` | Select all photos |
+| `Ctrl` `D` | Deselect all photos |
+| `Ctrl` `Shift` `D` | Select only active photo |
+| `/` | Deselect active photo |
+| `Shift` `Left/Right` | Add previous/next photo to selection |
+| `Ctrl` `Alt` `A` | Select flagged photos |
+| `Ctrl` `Alt` `Shift` `D` | Deselect unflagged photos |
+| `Ctrl` `G` | Group into stack |
+| `Ctrl` `Shift` `G` | Unstack |
+| `S` | Toggle stack |
+| `Shift` `S` | Move to top of stack |
+| `Shift` `[` | Move up in stack |
+| `Shift` `]` | Move down in stack |
+{.shortcuts}
### Rating and filtering photos
-Shortcut | Action
----|---
-`1-5` | Set star rating
-`Shift` `1-5` | Set star rating and go to next photo
-`0` | Remove star rating
-`Shift` `0` | Remove star rating and go to next photo
-`]/[` | Increase/decrease rating by one star
-`6` | Assign a red label
-`7` | Assign a yellow label
-`8` | Assign a green label
-`9` | Assign a blue label
-`Shift` `6-9` | Assign a color label and go to next photo
-`P` | Flag photo as a pick
-`Shift` `P` | Flag photo as a pick and go to next photo
-`X` | Flag photo as a reject
-`Shift` `X` | Flag photo as a reject and go to next photo
-`U` | Unflag photo
-`Shift` `U` | Unflag photo and go to next photo
-`Ctrl` `Up/Down` | Increase/decrease flag status
-
\` | Cycle flag settings
-`Ctrl` `Alt` `R` | Refine photos
-`\` | Show/hide Library Filter bar
-`Shift` `(click filter labels)` | Open multiple filters in the Filter bar
-`Shift` `L` | Toggle filters on/off
-`Ctrl` `F` | Find photo in the Library module
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------------- | ------------------------------------------- |
+| `1-5` | Set star rating |
+| `Shift` `1-5` | Set star rating and go to next photo |
+| `0` | Remove star rating |
+| `Shift` `0` | Remove star rating and go to next photo |
+| `]/[` | Increase/decrease rating by one star |
+| `6` | Assign a red label |
+| `7` | Assign a yellow label |
+| `8` | Assign a green label |
+| `9` | Assign a blue label |
+| `Shift` `6-9` | Assign a color label and go to next photo |
+| `P` | Flag photo as a pick |
+| `Shift` `P` | Flag photo as a pick and go to next photo |
+| `X` | Flag photo as a reject |
+| `Shift` `X` | Flag photo as a reject and go to next photo |
+| `U` | Unflag photo |
+| `Shift` `U` | Unflag photo and go to next photo |
+| `Ctrl` `Up/Down` | Increase/decrease flag status |
+| \` | Cycle flag settings |
+| `Ctrl` `Alt` `R` | Refine photos |
+| `\` | Show/hide Library Filter bar |
+| `Shift` `(click filter labels)` | Open multiple filters in the Filter bar |
+| `Shift` `L` | Toggle filters on/off |
+| `Ctrl` `F` | Find photo in the Library module |
+{.shortcuts}
### Working with collections
-Shortcut | Action
----|---
-`Ctrl` `N` | Create a new collection in the Library module
-`B` | Add to Quick Collection
-`Shift` `B` | Add to Quick Collection and go to next photo
-`Ctrl` `B` | Show Quick Collection
-`Ctrl` `Alt` `B` | Save Quick Collection
-`Ctrl` `Shift` `B` | Clear Quick Collection
-`Ctrl` `Alt` `Shift` `B` | Set as target collection
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | --------------------------------------------- |
+| `Ctrl` `N` | Create a new collection in the Library module |
+| `B` | Add to Quick Collection |
+| `Shift` `B` | Add to Quick Collection and go to next photo |
+| `Ctrl` `B` | Show Quick Collection |
+| `Ctrl` `Alt` `B` | Save Quick Collection |
+| `Ctrl` `Shift` `B` | Clear Quick Collection |
+| `Ctrl` `Alt` `Shift` `B` | Set as target collection |
+{.shortcuts}
### Working with metadata and keywords in the Library module
-Shortcut | Action
----|---
-`Ctrl` `K` | Add keywords
-`Ctrl` `Shift` `K` | Edit keywords
-`Ctrl` `Alt` `Shift` `K` | Set a keyword shortcut
-`Shift` `K` | Add/remove keyword shortcut from selected photo
-`Ctrl` `Alt` `K` | Enable painting
-`Alt` `1-9` | Add a keyword from a keyword set to selected photo
-`Alt` `0` | Cycle forward through keyword sets
-`Alt` `Shift` `0` | Cycle backward through keyword sets
-`Ctrl` `Alt` `Shift` `C/V` | Copy/paste metadata
-`Ctrl` `S` | Save metadata to file
-{.shortcuts}
+| Shortcut | Action |
+| -------------------------- | -------------------------------------------------- |
+| `Ctrl` `K` | Add keywords |
+| `Ctrl` `Shift` `K` | Edit keywords |
+| `Ctrl` `Alt` `Shift` `K` | Set a keyword shortcut |
+| `Shift` `K` | Add/remove keyword shortcut from selected photo |
+| `Ctrl` `Alt` `K` | Enable painting |
+| `Alt` `1-9` | Add a keyword from a keyword set to selected photo |
+| `Alt` `0` | Cycle forward through keyword sets |
+| `Alt` `Shift` `0` | Cycle backward through keyword sets |
+| `Ctrl` `Alt` `Shift` `C/V` | Copy/paste metadata |
+| `Ctrl` `S` | Save metadata to file |
+{.shortcuts}
### Working in the Slideshow module
-Shortcut | Action
----|---
-`Enter` | Play slide show
-`Ctrl` `Enter` | Play impromptu slide show
-`Space` | Pause slide show
-`Alt` `Enter` | Preview slide show
-`Esc` | End slide show
-`Right` | Go to next slide
-`Left` | Go to previous slide
-`Ctrl` `]` | Rotate photo right (clockwise)
-`Ctrl` `[` | Rotate photo left (counterclockwise)
-`Ctrl` `Shift` `H` | Show/hide guides
-`Ctrl` `J` | Export PDF slide show
-`Ctrl` `Shift` `J` | Export JPEG slide show
-`Ctrl` `Alt` `J` | Export video slide show
-`Ctrl` `N` | Create a new slide show template
-`Ctrl` `Shift` `N` | Create a new slide show template folder
-`Ctrl` `S` | Save slide show settings
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | --------------------------------------- |
+| `Enter` | Play slide show |
+| `Ctrl` `Enter` | Play impromptu slide show |
+| `Space` | Pause slide show |
+| `Alt` `Enter` | Preview slide show |
+| `Esc` | End slide show |
+| `Right` | Go to next slide |
+| `Left` | Go to previous slide |
+| `Ctrl` `]` | Rotate photo right (clockwise) |
+| `Ctrl` `[` | Rotate photo left (counterclockwise) |
+| `Ctrl` `Shift` `H` | Show/hide guides |
+| `Ctrl` `J` | Export PDF slide show |
+| `Ctrl` `Shift` `J` | Export JPEG slide show |
+| `Ctrl` `Alt` `J` | Export video slide show |
+| `Ctrl` `N` | Create a new slide show template |
+| `Ctrl` `Shift` `N` | Create a new slide show template folder |
+| `Ctrl` `S` | Save slide show settings |
+{.shortcuts}
### Working in the Print module
-Shortcut | Action
----|---
-`Ctrl` `P` | Print
-`Ctrl` `Alt` `P` | Print one copy
-`Ctrl` `Shift` `P` | Open Page Setup dialog box
-`Ctrl` `Alt` `Shift` `P` | Open Print Settings dialog box
-`Ctrl` `Shift` `Left` | Go to first page
-`Ctrl` `Shift` `Right` | Go to last page
-`Ctrl` `Left` | Go to previous page
-`Ctrl` `Right` | Go to next page
-`Ctrl` `Shift` `H` | Show/hide guides
-`Ctrl` `R` | Show/hide rulers
-`Ctrl` `Shift` `J` | Show/hide page bleed
-`Ctrl` `Shift` `M` | Show/hide margins and gutters
-`Ctrl` `Shift` `K` | Show/hide image cells
-`Ctrl` `Shift` `U` | Show/hide dimensions
-`Ctrl` `Enter` | Play impromptu slide show
-`Ctrl` `]` | Rotate photo right (clockwise)
-`Ctrl` `[` | Rotate photo left (counterclockwise)
-`Ctrl` `N` | Create a new print template
-`Ctrl` `Shift` `N` | Create a new print template folder
-`Ctrl` `S` | Save print settings
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | ------------------------------------ |
+| `Ctrl` `P` | Print |
+| `Ctrl` `Alt` `P` | Print one copy |
+| `Ctrl` `Shift` `P` | Open Page Setup dialog box |
+| `Ctrl` `Alt` `Shift` `P` | Open Print Settings dialog box |
+| `Ctrl` `Shift` `Left` | Go to first page |
+| `Ctrl` `Shift` `Right` | Go to last page |
+| `Ctrl` `Left` | Go to previous page |
+| `Ctrl` `Right` | Go to next page |
+| `Ctrl` `Shift` `H` | Show/hide guides |
+| `Ctrl` `R` | Show/hide rulers |
+| `Ctrl` `Shift` `J` | Show/hide page bleed |
+| `Ctrl` `Shift` `M` | Show/hide margins and gutters |
+| `Ctrl` `Shift` `K` | Show/hide image cells |
+| `Ctrl` `Shift` `U` | Show/hide dimensions |
+| `Ctrl` `Enter` | Play impromptu slide show |
+| `Ctrl` `]` | Rotate photo right (clockwise) |
+| `Ctrl` `[` | Rotate photo left (counterclockwise) |
+| `Ctrl` `N` | Create a new print template |
+| `Ctrl` `Shift` `N` | Create a new print template folder |
+| `Ctrl` `S` | Save print settings |
+{.shortcuts}
### Working in the Web module
-Shortcut | Action
----|---
-`Ctrl` `R` | Reload web gallery
-`Ctrl` `Alt` `P` | Preview in browser
-`Ctrl` `Enter` | Play impromptu slide show
-`Ctrl` `J` | Export web gallery
-`Ctrl` `N` | Create a new web gallery template
-`Ctrl` `Shift` `N` | Create a new web gallery template folder
-`Ctrl` `S` | Save web gallery settings
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ---------------------------------------- |
+| `Ctrl` `R` | Reload web gallery |
+| `Ctrl` `Alt` `P` | Preview in browser |
+| `Ctrl` `Enter` | Play impromptu slide show |
+| `Ctrl` `J` | Export web gallery |
+| `Ctrl` `N` | Create a new web gallery template |
+| `Ctrl` `Shift` `N` | Create a new web gallery template folder |
+| `Ctrl` `S` | Save web gallery settings |
+{.shortcuts}
### Using help
-Shortcut | Action
----|---
-`Ctrl` `/` | Display current module shortcuts
-`(click)` | Hide current module shortcuts
-`Ctrl` `Alt` `/` | Go to current module Help
-`F1` | Open Community Help
-{.shortcuts}
-
+| Shortcut | Action |
+| ---------------- | -------------------------------- |
+| `Ctrl` `/` | Display current module shortcuts |
+| `(click)` | Hide current module shortcuts |
+| `Ctrl` `Alt` `/` | Go to current module Help |
+| `F1` | Open Community Help |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Adobe Lightroom CC](https://helpx.adobe.com/lightroom/help/keyboard-shortcuts.html) _(helpx.adobe.com)_
+- [Keyboard shortcuts for Adobe Lightroom CC](https://helpx.adobe.com/lightroom/help/keyboard-shortcuts.html)
+ _(helpx.adobe.com)_
diff --git a/source/_posts/adobe-photoshop.md b/source/_posts/adobe-photoshop.md
index 912bfc40..10c66ed6 100644
--- a/source/_posts/adobe-photoshop.md
+++ b/source/_posts/adobe-photoshop.md
@@ -2,462 +2,456 @@
title: Adobe Photoshop
date: 2022-11-23 16:23:31.706034
background: bg-[#071c25]
-label:
-tags:
- -
- -
+label:
+tags:
+ -
+ -
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 283 keyboard shortcuts found in Adobe Photoshop
+ A visual cheat-sheet for the 283 keyboard shortcuts found in Adobe Photoshop
---
-
-
-Keyboard Shortcuts
-------------------
-
-
+## Keyboard Shortcuts
### Popular shortcuts
-Shortcut | Action
----|---
-`Ctrl` `T` | Free transform
-`[` | Decrease brush size
-`]` | Increase brush size
-`Shift` `[` | Decrease brush hardness
-`Shift` `]` | Increase brush hardness
-`D` | Default foreground/background colors
-`X` | Switch foreground/background colors
-`Ctrl` `J` | New layer via copy
-`Ctrl` `Shift` `J` | New layer via cut
-`Esc` | Cancel any modal dialog window (including the Start Workspace)
-`Enter` | Select the first edit field of the tool bar
-`Tab` | Navigate between fields
-`Shift` `Tab` | Navigate between fields in the opposite direction
-`Alt` | Change cancel to reset
-`Ctrl` `F` | Invoke the search experience
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | -------------------------------------------------------------- |
+| `Ctrl` `T` | Free transform |
+| `[` | Decrease brush size |
+| `]` | Increase brush size |
+| `Shift` `[` | Decrease brush hardness |
+| `Shift` `]` | Increase brush hardness |
+| `D` | Default foreground/background colors |
+| `X` | Switch foreground/background colors |
+| `Ctrl` `J` | New layer via copy |
+| `Ctrl` `Shift` `J` | New layer via cut |
+| `Esc` | Cancel any modal dialog window (including the Start Workspace) |
+| `Enter` | Select the first edit field of the tool bar |
+| `Tab` | Navigate between fields |
+| `Shift` `Tab` | Navigate between fields in the opposite direction |
+| `Alt` | Change cancel to reset |
+| `Ctrl` `F` | Invoke the search experience |
+{.shortcuts}
### Use function keys
-Shortcut | Action
----|---
-`F1` | Start help
-`F2` | Cut
-`F3` | Copy
-`F4` | Paste
-`F5` | Show/hide brush panel
-`F6` | Show/hide color panel
-`F7` | Show/hide layers panel
-`F8` | Show/hide info panel
-`F9` | Show/hide actions panel
-`F12` | Revert
-`Shift` `F5` | Fill
-`Shift` `F6` | Feather selection
-`Shift` `F7` | Inverse selection
-{.shortcuts}
+| Shortcut | Action |
+| ------------ | ----------------------- |
+| `F1` | Start help |
+| `F2` | Cut |
+| `F3` | Copy |
+| `F4` | Paste |
+| `F5` | Show/hide brush panel |
+| `F6` | Show/hide color panel |
+| `F7` | Show/hide layers panel |
+| `F8` | Show/hide info panel |
+| `F9` | Show/hide actions panel |
+| `F12` | Revert |
+| `Shift` `F5` | Fill |
+| `Shift` `F6` | Feather selection |
+| `Shift` `F7` | Inverse selection |
+{.shortcuts}
### Select tools {.row-span-2}
-Shortcut | Action
----|---
-`V` | Move tool
-`M` | Rectangular marquee tool
-`L` | Lasso tool
-`W` | Magic wand tool > quick selection tool
-`C` | Crop tool > slice tool > slice select tool
-`I` | Eyedropper tool > ruler tool > note tool
-`J` | Spot healing brush tool > healing brush tool > patch tool > red eye tool
-`B` | Brush tool > pencil tool > color replacement tool > mixer brush tool
-`S` | Clone stamp tool > pattern stamp tool
-`Y` | History brush tool > Art history brush tool
-`E` | Eraser tool > background eraser tool > magic eraser tool
-`G` | Gradient tool > paint bucket tool
-`O` | Dodge tool > burn tool > sponge tool
-`P` | Pen tool > freeform pen tool
-`T` | Horizontal type tool > vertical type tool > horizontal type mask tool > vertical type mask tool
-`A` | Path selection tool > direct selection tool
-`U` | Rectangle tool > rounded rectangle tool > ellipse tool > polygon tool > line tool
-`H` | Hand tool
-`R` | Rotate view tool
-`Z` | Zoom tool
-`D` | Default foreground/background colors
-`X` | Switch foreground/background colors
-`Q` | Toggle standard/quick mask modes
-`J` | Content-aware move tool
-`C` | Perspective crop tool
-`V` | Artboard tool
-`R` | Rotate view tool
-`/` | Toggle preserve transparency
-`,` | Previous brush
-`.` | Next brush
-`Shift` `,` | First brush
-`Shift` `.` | Last brush
-{.shortcuts}
+| Shortcut | Action |
+| ----------- | ----------------------------------------------------------------------------------------------- |
+| `V` | Move tool |
+| `M` | Rectangular marquee tool |
+| `L` | Lasso tool |
+| `W` | Magic wand tool > quick selection tool |
+| `C` | Crop tool > slice tool > slice select tool |
+| `I` | Eyedropper tool > ruler tool > note tool |
+| `J` | Spot healing brush tool > healing brush tool > patch tool > red eye tool |
+| `B` | Brush tool > pencil tool > color replacement tool > mixer brush tool |
+| `S` | Clone stamp tool > pattern stamp tool |
+| `Y` | History brush tool > Art history brush tool |
+| `E` | Eraser tool > background eraser tool > magic eraser tool |
+| `G` | Gradient tool > paint bucket tool |
+| `O` | Dodge tool > burn tool > sponge tool |
+| `P` | Pen tool > freeform pen tool |
+| `T` | Horizontal type tool > vertical type tool > horizontal type mask tool > vertical type mask tool |
+| `A` | Path selection tool > direct selection tool |
+| `U` | Rectangle tool > rounded rectangle tool > ellipse tool > polygon tool > line tool |
+| `H` | Hand tool |
+| `R` | Rotate view tool |
+| `Z` | Zoom tool |
+| `D` | Default foreground/background colors |
+| `X` | Switch foreground/background colors |
+| `Q` | Toggle standard/quick mask modes |
+| `J` | Content-aware move tool |
+| `C` | Perspective crop tool |
+| `V` | Artboard tool |
+| `R` | Rotate view tool |
+| `/` | Toggle preserve transparency |
+| `,` | Previous brush |
+| `.` | Next brush |
+| `Shift` `,` | First brush |
+| `Shift` `.` | Last brush |
+{.shortcuts}
### View images {.row-span-2}
-Shortcut | Action
----|---
-`Ctrl` `Tab` | Cycle through open documents
-`Ctrl` `Shift` `Tab` | Switch to previous document
-`Ctrl` `Shift` `W` | Close a file in Photoshop and open Bridge
-`F` | Toggle forward between Standard screen > Full screen with menu bar > Full screen modes
-`Shift` `F` | Toggle backwards between Standard screen > Full screen with menu bar > Full screen modes
-`Space` `F` | Toggle forward canvas color
-`Shift` `Space` `F` | Toggle backwards canvas color
-`Space` | Switch to hand tool (when not in text-edit mode)
-`Ctrl` `Space` | Switch to zoom in tool
-`Alt` `Space` | Switch to zoom out tool
-`Shift` `Enter` | Apply zoom percentage, and keep zoom percentage box active
-`PgUp/PgDn` | Scroll up or down 1 screen
-`Shift` `PgUp/PgDn` | Scroll up or down 10 units
-`Home` | Move view to upper-left corner
-`End` | Move view to lower-right corner
-`\` | Toggle layer mask on/off as rubylith (layer mask must be selected)
-{.shortcuts}
+| Shortcut | Action |
+| -------------------- | ---------------------------------------------------------------------------------------- |
+| `Ctrl` `Tab` | Cycle through open documents |
+| `Ctrl` `Shift` `Tab` | Switch to previous document |
+| `Ctrl` `Shift` `W` | Close a file in Photoshop and open Bridge |
+| `F` | Toggle forward between Standard screen > Full screen with menu bar > Full screen modes |
+| `Shift` `F` | Toggle backwards between Standard screen > Full screen with menu bar > Full screen modes |
+| `Space` `F` | Toggle forward canvas color |
+| `Shift` `Space` `F` | Toggle backwards canvas color |
+| `Space` | Switch to hand tool (when not in text-edit mode) |
+| `Ctrl` `Space` | Switch to zoom in tool |
+| `Alt` `Space` | Switch to zoom out tool |
+| `Shift` `Enter` | Apply zoom percentage, and keep zoom percentage box active |
+| `PgUp/PgDn` | Scroll up or down 1 screen |
+| `Shift` `PgUp/PgDn` | Scroll up or down 10 units |
+| `Home` | Move view to upper-left corner |
+| `End` | Move view to lower-right corner |
+| `\` | Toggle layer mask on/off as rubylith (layer mask must be selected) |
+{.shortcuts}
### Use Puppet Warp
-Shortcut | Action
----|---
-`Esc` | Cancel completely
-`Ctrl` `Z` | Undo last pin adjustment
-`Ctrl` `A` | Select all pins
-`Ctrl` `D` | Deselect all pins
-`H` | Temporarily hide pins
-{.shortcuts}
+| Shortcut | Action |
+| ---------- | ------------------------ |
+| `Esc` | Cancel completely |
+| `Ctrl` `Z` | Undo last pin adjustment |
+| `Ctrl` `A` | Select all pins |
+| `Ctrl` `D` | Deselect all pins |
+| `H` | Temporarily hide pins |
+{.shortcuts}
### Use Refine Edge
-Shortcut | Action
----|---
-`Ctrl` `Alt` `R` | Open the Refine Edge dialog box
-`F` | Cycle forward through preview modes
-`Shift` `F` | Cycle backwards through preview modes
-`X` | Toggle between original image and selection preview
-`P` | Toggle between original selection and refined version
-`J` | Toggle radius preview on and off
-`Shift` `E` | Toggle between Refine Radius and Erase Refinement tools
-{.shortcuts}
+| Shortcut | Action |
+| ---------------- | ------------------------------------------------------- |
+| `Ctrl` `Alt` `R` | Open the Refine Edge dialog box |
+| `F` | Cycle forward through preview modes |
+| `Shift` `F` | Cycle backwards through preview modes |
+| `X` | Toggle between original image and selection preview |
+| `P` | Toggle between original selection and refined version |
+| `J` | Toggle radius preview on and off |
+| `Shift` `E` | Toggle between Refine Radius and Erase Refinement tools |
+{.shortcuts}
### Use the Filter Gallery
-Shortcut | Action
----|---
-`Ctrl` `Alt` `F` | Reapply last-used filter
-`Ctrl` | Change Cancel button to Default
-`Alt` | Change Cancel button to Reset
-`Ctrl` `Z` | Undo/Redo
-`Ctrl` `Shift` `Z` | Step forward
-`Ctrl` `Alt` `Z` | Step backward
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ------------------------------- |
+| `Ctrl` `Alt` `F` | Reapply last-used filter |
+| `Ctrl` | Change Cancel button to Default |
+| `Alt` | Change Cancel button to Reset |
+| `Ctrl` `Z` | Undo/Redo |
+| `Ctrl` `Shift` `Z` | Step forward |
+| `Ctrl` `Alt` `Z` | Step backward |
+{.shortcuts}
### Use the Liquify filter
-Shortcut | Action
----|---
-`W` | Forward warp tool
-`R` | Reconstruct tool
-`C` | Twirl clockwise tool
-`S` | Pucker tool
-`B` | Bloat tool
-`O` | Push left tool
-`M` | Mirror tool
-`T` | Turbulence tool
-`F` | Freeze mask tool
-`D` | Thaw mask tool
-`Alt` `(tool)` | Reverse direction for Bloat, Pucker, Push Left, and Mirror tools
-`Tab` | Cycle through controls on right from top
-`Shift` `Tab` | Cycle through controls on right from bottom
-`Alt` | Change cancel to reset
-{.shortcuts}
+| Shortcut | Action |
+| -------------- | ---------------------------------------------------------------- |
+| `W` | Forward warp tool |
+| `R` | Reconstruct tool |
+| `C` | Twirl clockwise tool |
+| `S` | Pucker tool |
+| `B` | Bloat tool |
+| `O` | Push left tool |
+| `M` | Mirror tool |
+| `T` | Turbulence tool |
+| `F` | Freeze mask tool |
+| `D` | Thaw mask tool |
+| `Alt` `(tool)` | Reverse direction for Bloat, Pucker, Push Left, and Mirror tools |
+| `Tab` | Cycle through controls on right from top |
+| `Shift` `Tab` | Cycle through controls on right from bottom |
+| `Alt` | Change cancel to reset |
+{.shortcuts}
### Use Vanishing Point
-Shortcut | Action
----|---
-`X` | Zoom 2x (temporary)
-`Ctrl` `+` | Zoom in
-`Ctrl` `-` | Zoom out
-`Ctrl` `0` | Fit in view
-`Ctrl` `Z` | Undo last action
-`Ctrl` `Shift` `Z` | Redo last action
-`Ctrl` `D` | Deselect all
-`Ctrl` `H` | Hide selection and panes
-`Arrows` | Move selection 1 pixel
-`Shift` `Arrows` | Move selection 10 pixels
-`Ctrl` `C` | Copy
-`Ctrl` `V` | Paste
-`Ctrl` `Shift` `T` | Repeat last duplicate and move
-`Ctrl` `Alt` `T` | Create floating selection from the current selection
-`Alt` `Shift` | Constrain selection to a 15 degree rotation
-`Backspace` | Delete last node while creating plane
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ---------------------------------------------------- |
+| `X` | Zoom 2x (temporary) |
+| `Ctrl` `+` | Zoom in |
+| `Ctrl` `-` | Zoom out |
+| `Ctrl` `0` | Fit in view |
+| `Ctrl` `Z` | Undo last action |
+| `Ctrl` `Shift` `Z` | Redo last action |
+| `Ctrl` `D` | Deselect all |
+| `Ctrl` `H` | Hide selection and panes |
+| `Arrows` | Move selection 1 pixel |
+| `Shift` `Arrows` | Move selection 10 pixels |
+| `Ctrl` `C` | Copy |
+| `Ctrl` `V` | Paste |
+| `Ctrl` `Shift` `T` | Repeat last duplicate and move |
+| `Ctrl` `Alt` `T` | Create floating selection from the current selection |
+| `Alt` `Shift` | Constrain selection to a 15 degree rotation |
+| `Backspace` | Delete last node while creating plane |
+{.shortcuts}
### Use the Camera Raw dialog box {.row-span-4}
-Shortcut | Action
----|---
-`Z` | Zoom tool
-`H` | Hand tool
-`I` | White balance tool
-`S` | Color sampler tool
-`C` | Crop tool
-`A` | Straighten tool
-`B` | Spot removal tool
-`E` | Red eye removal tool
-`Ctrl` `Alt` `1` | Basic panel
-`Ctrl` `Alt` `2` | Tone curve panel
-`Ctrl` `Alt` `3` | Detail panel
-`Ctrl` `Alt` `4` | HSL/Greyscale panel
-`Ctrl` `Alt` `5` | Split toning panel
-`Ctrl` `Alt` `6` | Lens corrections panel
-`Ctrl` `Alt` `7` | Camera calibration panel
-`Ctrl` `Alt` `8` | Presets panel
-`Ctrl` `Alt` `9` | Open snapshots panel
-`Ctrl` `Alt` `Shift` `T` | Parametric curve targeted adjustment tool
-`Ctrl` `Alt` `Shift` `H` | Hue targeted adjustment tool
-`Ctrl` `Alt` `Shift` `S` | Saturation targeted adjustment tool
-`Ctrl` `Alt` `Shift` `L` | Luminance targeted adjustment tool
-`Ctrl` `Alt` `Shift` `G` | Grayscale mix targeted adjustment tool
-`T` | Last-used targeted adjustment tool
-`K` | Adjustment brush tool
-`G` | Graduated filter tool
-`Alt` | Temporarily switch from Add to Erase mode for the Adjustment brush tool, or from Erase to Add mode
-`Alt` `]/[` | Increase/decrease temporary adjustment brush tool size
-`Alt` `Shift` `]/[` | Increase/decrease temporary adjustment brush tool feather
-`Alt` `=/-` | Increase/decrease temporary adjustment brush tool size flow in increments of 10
-`N` | Switch to New mode from Add or Erase mode of the Adjustment Brush tool or Graduated filter
-`M` | Toggle Auto Mask for Adjustment Brush tool
-`Y` | Toggle Show Mask for Adjustment Brush tool
-`V` | Toggle pins for Adjustment Brush tool
-`L` | Rotate image left
-`R` | Rotate image right
-`Ctrl` | Temporarily switch to zoom in tool
-`Alt` | Temporarily switch to zoom out tool and change the image open button to open copy
-`P` | Toggle preview
-`F` | Full screen mode
-`Shift` | Temporarily activate the White Balance tool and change the open image button to open object
-`Arrows` | Move selected point in curves panel 1 pixel
-`Shift` `Arrows` | Move selected point in curves panel 10 pixels
-`Ctrl` `R` | Open selected images in Camera Raw dialog box from Bridge
-`O` | Highlight clipping warning
-`U` | Shadows clipping warning
-`Ctrl` `1-5` | Add 1-5 star rating (filmstrip mode)
-`Ctrl` `./,` | Increase/decrease rating (filmstrip mode)
-`Ctrl` `6` | Add red label (filmstrip mode)
-`Ctrl` `7` | Add yellow label (filmstrip mode)
-`Ctrl` `8` | Add green label (filmstrip mode)
-`Ctrl` `9` | Add blue label (filmstrip mode)
-`Ctrl` `Shift` `0` | Add purple label (filmstrip mode)
-`Ctrl` `K` | Camera Raw preferences
-`Ctrl` `Alt` | Delete Adobe Camera Raw preferences (on open)
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | -------------------------------------------------------------------------------------------------- |
+| `Z` | Zoom tool |
+| `H` | Hand tool |
+| `I` | White balance tool |
+| `S` | Color sampler tool |
+| `C` | Crop tool |
+| `A` | Straighten tool |
+| `B` | Spot removal tool |
+| `E` | Red eye removal tool |
+| `Ctrl` `Alt` `1` | Basic panel |
+| `Ctrl` `Alt` `2` | Tone curve panel |
+| `Ctrl` `Alt` `3` | Detail panel |
+| `Ctrl` `Alt` `4` | HSL/Greyscale panel |
+| `Ctrl` `Alt` `5` | Split toning panel |
+| `Ctrl` `Alt` `6` | Lens corrections panel |
+| `Ctrl` `Alt` `7` | Camera calibration panel |
+| `Ctrl` `Alt` `8` | Presets panel |
+| `Ctrl` `Alt` `9` | Open snapshots panel |
+| `Ctrl` `Alt` `Shift` `T` | Parametric curve targeted adjustment tool |
+| `Ctrl` `Alt` `Shift` `H` | Hue targeted adjustment tool |
+| `Ctrl` `Alt` `Shift` `S` | Saturation targeted adjustment tool |
+| `Ctrl` `Alt` `Shift` `L` | Luminance targeted adjustment tool |
+| `Ctrl` `Alt` `Shift` `G` | Grayscale mix targeted adjustment tool |
+| `T` | Last-used targeted adjustment tool |
+| `K` | Adjustment brush tool |
+| `G` | Graduated filter tool |
+| `Alt` | Temporarily switch from Add to Erase mode for the Adjustment brush tool, or from Erase to Add mode |
+| `Alt` `]/[` | Increase/decrease temporary adjustment brush tool size |
+| `Alt` `Shift` `]/[` | Increase/decrease temporary adjustment brush tool feather |
+| `Alt` `=/-` | Increase/decrease temporary adjustment brush tool size flow in increments of 10 |
+| `N` | Switch to New mode from Add or Erase mode of the Adjustment Brush tool or Graduated filter |
+| `M` | Toggle Auto Mask for Adjustment Brush tool |
+| `Y` | Toggle Show Mask for Adjustment Brush tool |
+| `V` | Toggle pins for Adjustment Brush tool |
+| `L` | Rotate image left |
+| `R` | Rotate image right |
+| `Ctrl` | Temporarily switch to zoom in tool |
+| `Alt` | Temporarily switch to zoom out tool and change the image open button to open copy |
+| `P` | Toggle preview |
+| `F` | Full screen mode |
+| `Shift` | Temporarily activate the White Balance tool and change the open image button to open object |
+| `Arrows` | Move selected point in curves panel 1 pixel |
+| `Shift` `Arrows` | Move selected point in curves panel 10 pixels |
+| `Ctrl` `R` | Open selected images in Camera Raw dialog box from Bridge |
+| `O` | Highlight clipping warning |
+| `U` | Shadows clipping warning |
+| `Ctrl` `1-5` | Add 1-5 star rating (filmstrip mode) |
+| `Ctrl` `./,` | Increase/decrease rating (filmstrip mode) |
+| `Ctrl` `6` | Add red label (filmstrip mode) |
+| `Ctrl` `7` | Add yellow label (filmstrip mode) |
+| `Ctrl` `8` | Add green label (filmstrip mode) |
+| `Ctrl` `9` | Add blue label (filmstrip mode) |
+| `Ctrl` `Shift` `0` | Add purple label (filmstrip mode) |
+| `Ctrl` `K` | Camera Raw preferences |
+| `Ctrl` `Alt` | Delete Adobe Camera Raw preferences (on open) |
+{.shortcuts}
### Use the Black-and-White dialog box
-Shortcut | Action
----|---
-`Ctrl` `Shift` `Alt` `B` | Open the Black-and-White dialog box
-`Up/Down` | Increase/decrease selected value by 1%
-`Shift` `Up/Down` | Increase/decrease selected value by 10%
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | --------------------------------------- |
+| `Ctrl` `Shift` `Alt` `B` | Open the Black-and-White dialog box |
+| `Up/Down` | Increase/decrease selected value by 1% |
+| `Shift` `Up/Down` | Increase/decrease selected value by 10% |
+{.shortcuts}
### Use Curves
-Shortcut | Action
----|---
-`Ctrl` `M` | Open the Curves dialog box
-`+` | Select next point on the curve
-`-` | Select the previous point on the curve
-`Ctrl` `D` | Deselect a point
-`Del` | Delete a point on the curve
-`Arrows` | Move the selected point 1 pixel
-`Shift` `Arrows` | Move the selected point 10 pixels
-{.shortcuts}
+| Shortcut | Action |
+| ---------------- | -------------------------------------- |
+| `Ctrl` `M` | Open the Curves dialog box |
+| `+` | Select next point on the curve |
+| `-` | Select the previous point on the curve |
+| `Ctrl` `D` | Deselect a point |
+| `Del` | Delete a point on the curve |
+| `Arrows` | Move the selected point 1 pixel |
+| `Shift` `Arrows` | Move the selected point 10 pixels |
+{.shortcuts}
### Transform selections, selection borders, and paths
-Shortcut | Action
----|---
-`Alt` | Transform from center or reflect
-`Shift` | Constrain
-`Ctrl` | Distort
-`Enter` | Apply
-`Ctrl` `.` | Cancel
-`Ctrl` `Alt` `T` | Free transform with duplicate data
-`Ctrl` `Shift` `Alt` `T` | Transform again with duplicate data
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | ----------------------------------- |
+| `Alt` | Transform from center or reflect |
+| `Shift` | Constrain |
+| `Ctrl` | Distort |
+| `Enter` | Apply |
+| `Ctrl` `.` | Cancel |
+| `Ctrl` `Alt` `T` | Free transform with duplicate data |
+| `Ctrl` `Shift` `Alt` `T` | Transform again with duplicate data |
+{.shortcuts}
### Edit paths
-Shortcut | Action
----|---
-`Ctrl` | Switch from path selection, pen, add anchor point, delete anchor point, or convert point tools to direct selection tool
-`Alt` | Switch from pen tool to freeform pen tool to convert point tool when pointer is over anchor or direction point
-{.shortcuts}
+| Shortcut | Action |
+| -------- | ----------------------------------------------------------------------------------------------------------------------- |
+| `Ctrl` | Switch from path selection, pen, add anchor point, delete anchor point, or convert point tools to direct selection tool |
+| `Alt` | Switch from pen tool to freeform pen tool to convert point tool when pointer is over anchor or direction point |
+{.shortcuts}
### Use for painting
-Shortcut | Action
----|---
-`Alt` `Shift` `0-9` | Mixer brush changes mix setting
-`0-9` | Mixer brush changes wet setting
-`00` | Mixer brush changes wet and mix to zero
-`Shift` `+/-` | Cycle through blending modes
-`Backspace` | Open fill dialog box on background or standard layer
-`Alt` `Backspace` | Fill with foreground color
-`Ctrl` `Backspace` | Fill with background color
-`Ctrl` `Alt` `Backspace` | Fill from history
-`Shift` `Backspace` | Displays fill dialog box
-`/` | Lock transparent pixels on/off
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | ---------------------------------------------------- |
+| `Alt` `Shift` `0-9` | Mixer brush changes mix setting |
+| `0-9` | Mixer brush changes wet setting |
+| `00` | Mixer brush changes wet and mix to zero |
+| `Shift` `+/-` | Cycle through blending modes |
+| `Backspace` | Open fill dialog box on background or standard layer |
+| `Alt` `Backspace` | Fill with foreground color |
+| `Ctrl` `Backspace` | Fill with background color |
+| `Ctrl` `Alt` `Backspace` | Fill from history |
+| `Shift` `Backspace` | Displays fill dialog box |
+| `/` | Lock transparent pixels on/off |
+{.shortcuts}
### Use for blending modes {.row-span-2}
-Shortcut | Action
----|---
-`Ctrl` `-/+` | Cycle through blending modes
-`Shift` `Alt` `N` | Normal
-`Shift` `Alt` `I` | Dissolve
-`Shift` `Alt` `Q` | Behind (brush tool only)
-`Shift` `Alt` `R` | Clear (brush tool only)
-`Shift` `Alt` `K` | Darken
-`Shift` `Alt` `M` | Multiply
-`Shift` `Alt` `B` | Color burn
-`Shift` `Alt` `A` | Linear burn
-`Shift` `Alt` `G` | Lighten
-`Shift` `Alt` `S` | Screen
-`Shift` `Alt` `D` | Color dodge
-`Shift` `Alt` `W` | Linear dodge
-`Shift` `Alt` `O` | Overlay
-`Shift` `Alt` `F` | Soft light
-`Shift` `Alt` `H` | Hard light
-`Shift` `Alt` `V` | Vivid light
-`Shift` `Alt` `J` | Linear light
-`Shift` `Alt` `Z` | Pin light
-`Shift` `Alt` `L` | Hard mix
-`Shift` `Alt` `E` | Difference
-`Shift` `Alt` `X` | Exclusion
-`Shift` `Alt` `U` | Hue
-`Shift` `Alt` `T` | Saturation
-`Shift` `Alt` `C` | Color
-`Shift` `Alt` `Y` | Luminosity
-`Shift` `Alt` `N` | Set blending mode to Threshold for bitmap images, Normal for all other images
-{.shortcuts}
+| Shortcut | Action |
+| ----------------- | ----------------------------------------------------------------------------- |
+| `Ctrl` `-/+` | Cycle through blending modes |
+| `Shift` `Alt` `N` | Normal |
+| `Shift` `Alt` `I` | Dissolve |
+| `Shift` `Alt` `Q` | Behind (brush tool only) |
+| `Shift` `Alt` `R` | Clear (brush tool only) |
+| `Shift` `Alt` `K` | Darken |
+| `Shift` `Alt` `M` | Multiply |
+| `Shift` `Alt` `B` | Color burn |
+| `Shift` `Alt` `A` | Linear burn |
+| `Shift` `Alt` `G` | Lighten |
+| `Shift` `Alt` `S` | Screen |
+| `Shift` `Alt` `D` | Color dodge |
+| `Shift` `Alt` `W` | Linear dodge |
+| `Shift` `Alt` `O` | Overlay |
+| `Shift` `Alt` `F` | Soft light |
+| `Shift` `Alt` `H` | Hard light |
+| `Shift` `Alt` `V` | Vivid light |
+| `Shift` `Alt` `J` | Linear light |
+| `Shift` `Alt` `Z` | Pin light |
+| `Shift` `Alt` `L` | Hard mix |
+| `Shift` `Alt` `E` | Difference |
+| `Shift` `Alt` `X` | Exclusion |
+| `Shift` `Alt` `U` | Hue |
+| `Shift` `Alt` `T` | Saturation |
+| `Shift` `Alt` `C` | Color |
+| `Shift` `Alt` `Y` | Luminosity |
+| `Shift` `Alt` `N` | Set blending mode to Threshold for bitmap images, Normal for all other images |
+{.shortcuts}
### Format type
-Shortcut | Action
----|---
-`Ctrl` `Shift` `L/C/R` | Align left, center, or right
-`Ctrl` `Shift` `X` | Choose 100% horizontal scale
-`Ctrl` `Shift` `Alt` `X` | Choose 100% vertical scale
-`Ctrl` `Shift` `Alt` `A` | Choose auto leading
-`Ctrl` `Shift` `Q` | Choose 0 for tracking
-`Ctrl` `Shift` `J` | Justify paragraph, left aligns last line
-`Ctrl` `Shift` `F` | Justify paragraph, justifies all
-`Ctrl` `Shift` `Alt` `H` | Toggle paragraph hyphenation on/off
-`Ctrl` `Shift` `Alt` `T` | Toggle single/every-line composer on/off
-`Ctrl` `Shift` `>` | Decrease or increase type size of selected text 2 points or pixels
-`Alt` `Up/Down` | Decrease or increase leading 2 points or pixels
-`Shift` `Alt` `Up/Down` | Decrease or increase baseline shift 2 points or pixels
-`Alt` `Left/Right` | Decrease or increase kerning/tracking 20/1000 ems
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | ------------------------------------------------------------------ |
+| `Ctrl` `Shift` `L/C/R` | Align left, center, or right |
+| `Ctrl` `Shift` `X` | Choose 100% horizontal scale |
+| `Ctrl` `Shift` `Alt` `X` | Choose 100% vertical scale |
+| `Ctrl` `Shift` `Alt` `A` | Choose auto leading |
+| `Ctrl` `Shift` `Q` | Choose 0 for tracking |
+| `Ctrl` `Shift` `J` | Justify paragraph, left aligns last line |
+| `Ctrl` `Shift` `F` | Justify paragraph, justifies all |
+| `Ctrl` `Shift` `Alt` `H` | Toggle paragraph hyphenation on/off |
+| `Ctrl` `Shift` `Alt` `T` | Toggle single/every-line composer on/off |
+| `Ctrl` `Shift` `>` | Decrease or increase type size of selected text 2 points or pixels |
+| `Alt` `Up/Down` | Decrease or increase leading 2 points or pixels |
+| `Shift` `Alt` `Up/Down` | Decrease or increase baseline shift 2 points or pixels |
+| `Alt` `Left/Right` | Decrease or increase kerning/tracking 20/1000 ems |
+{.shortcuts}
### Use panels
-Shortcut | Action
----|---
-`Shift` `Enter` | Apply value and keep text box active
-`Tab` | Show/Hide all panels
-`Shift` `Tab` | Show/Hide all panels except the toolbox and options bar
-`Enter` | Highlight options bar (select tool first)
-`Shift` `Up/Down` | Increase/decrease selected values by 10
-{.shortcuts}
+| Shortcut | Action |
+| ----------------- | ------------------------------------------------------- |
+| `Shift` `Enter` | Apply value and keep text box active |
+| `Tab` | Show/Hide all panels |
+| `Shift` `Tab` | Show/Hide all panels except the toolbox and options bar |
+| `Enter` | Highlight options bar (select tool first) |
+| `Shift` `Up/Down` | Increase/decrease selected values by 10 |
+{.shortcuts}
### Use adjustment layers
-Shortcut | Action
----|---
-`Alt` `3` | Choose red channel for adjustment
-`Alt` `4` | Choose green channel for adjustment
-`Alt` `5` | Choose blue channel for adjustment
-`Alt` `2` | Choose composite channel for adjustment
-`Backspace` | Delete adjustment layer
-{.shortcuts}
+| Shortcut | Action |
+| ----------- | --------------------------------------- |
+| `Alt` `3` | Choose red channel for adjustment |
+| `Alt` `4` | Choose green channel for adjustment |
+| `Alt` `5` | Choose blue channel for adjustment |
+| `Alt` `2` | Choose composite channel for adjustment |
+| `Backspace` | Delete adjustment layer |
+{.shortcuts}
### Use the Brush panel
-Shortcut | Action
----|---
-`,/.` | Select previous/next brush size
-`Shift` `,/.` | Select first/last brush
-`Caps Lock` | Display precise cross hair for brushes
-`Shift` `Alt` `P` | Toggle airbrush option
-{.shortcuts}
+| Shortcut | Action |
+| ----------------- | -------------------------------------- |
+| `,/.` | Select previous/next brush size |
+| `Shift` `,/.` | Select first/last brush |
+| `Caps Lock` | Display precise cross hair for brushes |
+| `Shift` `Alt` `P` | Toggle airbrush option |
+{.shortcuts}
### Use the Clone Source panel
-Shortcut | Action
----|---
-`Alt` `Shift` | Show Clone Source (overlays iamge)
-`Alt` `Shift` `(arrows)` | Nudge Clone Source
-`Alt` `Shift` `>` | Rotate Clone Source
-`Alt` `Shift` `[/]` | Scale (increase or reduce size) Clone Source
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | -------------------------------------------- |
+| `Alt` `Shift` | Show Clone Source (overlays iamge) |
+| `Alt` `Shift` `(arrows)` | Nudge Clone Source |
+| `Alt` `Shift` `>` | Rotate Clone Source |
+| `Alt` `Shift` `[/]` | Scale (increase or reduce size) Clone Source |
+{.shortcuts}
### Use the Layers panel
-Shortcut | Action
----|---
-`Ctrl` `Shift` `N` | New layer
-`Ctrl` `J` | New layer via copy
-`Ctrl` `Shift` `J` | New layer via cut
-`Ctrl` `G` | Group layers
-`Ctrl` `Shift` `G` | Ungroup layers
-`Ctrl` `Alt` `G` | Create/release clipping mask
-`Ctrl` `Alt` `A` | Select all layers
-`Ctrl` `Shift` `E` | Merge visible layers
-`Alt` `.` | Select top layer
-`Alt` `.` | Select bottom layer
-`Shift` `Alt` `[/]` | Add to layer selection in Layers panel
-`Alt` `[/]` | Select next layer down/up
-`Ctrl` `[/]` | Move target layer down/up
-`Ctrl` `Shift` `Alt` `E` | Merge a copy of all visible layers into target layer
-`Ctrl` `E` | Merge layers (while layers are highlighted)
-`Ctrl` `Shift` `[/]` | Move layer to bottom or top
-`/` | Toggle lock transparency for target layer, or last applied lock
-`\` | Toggle rubylith mode for layer mask on/off
-{.shortcuts}
-
+| Shortcut | Action |
+| ------------------------ | --------------------------------------------------------------- |
+| `Ctrl` `Shift` `N` | New layer |
+| `Ctrl` `J` | New layer via copy |
+| `Ctrl` `Shift` `J` | New layer via cut |
+| `Ctrl` `G` | Group layers |
+| `Ctrl` `Shift` `G` | Ungroup layers |
+| `Ctrl` `Alt` `G` | Create/release clipping mask |
+| `Ctrl` `Alt` `A` | Select all layers |
+| `Ctrl` `Shift` `E` | Merge visible layers |
+| `Alt` `.` | Select top layer |
+| `Alt` `.` | Select bottom layer |
+| `Shift` `Alt` `[/]` | Add to layer selection in Layers panel |
+| `Alt` `[/]` | Select next layer down/up |
+| `Ctrl` `[/]` | Move target layer down/up |
+| `Ctrl` `Shift` `Alt` `E` | Merge a copy of all visible layers into target layer |
+| `Ctrl` `E` | Merge layers (while layers are highlighted) |
+| `Ctrl` `Shift` `[/]` | Move layer to bottom or top |
+| `/` | Toggle lock transparency for target layer, or last applied lock |
+| `\` | Toggle rubylith mode for layer mask on/off |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Adobe Photoshop](https://helpx.adobe.com/photoshop/using/default-keyboard-shortcuts.html) _(helpx.adobe.com)_
+- [Keyboard shortcuts for Adobe Photoshop](https://helpx.adobe.com/photoshop/using/default-keyboard-shortcuts.html)
+ _(helpx.adobe.com)_
diff --git a/source/_posts/adobe-xd.md b/source/_posts/adobe-xd.md
index 60080f96..b8f39aac 100644
--- a/source/_posts/adobe-xd.md
+++ b/source/_posts/adobe-xd.md
@@ -2,220 +2,213 @@
title: Adobe XD
date: 2022-11-23 16:23:31.703379
background: bg-[#400835]
-label:
-tags:
- -
- -
+label:
+tags:
+ -
+ -
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 97 keyboard shortcuts found in Adobe XD
+ A visual cheat-sheet for the 97 keyboard shortcuts found in Adobe XD
---
-
-
-Keyboard Shortcuts
-------------------
-
-
+## Keyboard Shortcuts
### Keys for Edit menu
-Shortcut | Action
----|---
-`Ctrl` `Z` | Undo
-`Ctrl` `Shift` `Z` | Redo
-`Ctrl` `X` | Cut
-`Ctrl` `C` | Copy
-`Ctrl` `V` | Paste
-`Ctrl` `Alt` `V` | Paste Appearance (Design mode) or Paste Interaction (Prototype mode)
-`Ctrl` `D` | Duplicate
-`Del` | Delete
-`Ctrl` `A` | Select All
-`Ctrl` `Shift` `A` | Deselect All
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | -------------------------------------------------------------------- |
+| `Ctrl` `Z` | Undo |
+| `Ctrl` `Shift` `Z` | Redo |
+| `Ctrl` `X` | Cut |
+| `Ctrl` `C` | Copy |
+| `Ctrl` `V` | Paste |
+| `Ctrl` `Alt` `V` | Paste Appearance (Design mode) or Paste Interaction (Prototype mode) |
+| `Ctrl` `D` | Duplicate |
+| `Del` | Delete |
+| `Ctrl` `A` | Select All |
+| `Ctrl` `Shift` `A` | Deselect All |
+{.shortcuts}
### Keys for File menu
-Shortcut | Action
----|---
-`Ctrl` `N` | New
-`Ctrl` `Shift` `O` | Open...
-`Alt` `F4` | Close
-`Ctrl` `S` | Save...
-`Ctrl` `Shift` `S` | Save As...
-`Ctrl` `Shift` `E` | Export Batch
-`Ctrl` `E` | Export Selected
-`Ctrl` `Shift` `I` | Import
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | --------------- |
+| `Ctrl` `N` | New |
+| `Ctrl` `Shift` `O` | Open... |
+| `Alt` `F4` | Close |
+| `Ctrl` `S` | Save... |
+| `Ctrl` `Shift` `S` | Save As... |
+| `Ctrl` `Shift` `E` | Export Batch |
+| `Ctrl` `E` | Export Selected |
+| `Ctrl` `Shift` `I` | Import |
+{.shortcuts}
### Keys for Pen/Path
-Shortcut | Action
----|---
-`P` | Switch to Pen tool
-`Alt` | Asymmetric control point
-`Shift` | Snap control point angle
-`Shift` | Snap anchor point angle
-`Ctrl` `Alt` `U` | Add
-`Ctrl` `Alt` `S` | Subtract
-`Ctrl` `Alt` `I` | Intersect
-`Ctrl` `Alt` `X` | Exclude overlap
-`Ctrl` `8` | Convert to path
-{.shortcuts}
+| Shortcut | Action |
+| ---------------- | ------------------------ |
+| `P` | Switch to Pen tool |
+| `Alt` | Asymmetric control point |
+| `Shift` | Snap control point angle |
+| `Shift` | Snap anchor point angle |
+| `Ctrl` `Alt` `U` | Add |
+| `Ctrl` `Alt` `S` | Subtract |
+| `Ctrl` `Alt` `I` | Intersect |
+| `Ctrl` `Alt` `X` | Exclude overlap |
+| `Ctrl` `8` | Convert to path |
+{.shortcuts}
### Keys for Layers (Objects), Groups, and Artboards {.row-span-2}
-Shortcut | Action
----|---
-`Ctrl` `G` | Group layers
-`Ctrl` `Shift` `G` | Ungroup layers
-`Ctrl` `K` | Make component
-`Ctrl` `L` | Lock/Unlock layer
-`Ctrl` `,` | Hide/Show layer
-`Ctrl` `Shift` `M` | Mask with shape
-`Ctrl` `R` | Make repeat grid
-`1-9` | Change layer opacity
-`Ctrl` `;` | Show/Hide artboard guides
-`Ctrl` `Shift` `;` | Lock artboard guides
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ------------------------- |
+| `Ctrl` `G` | Group layers |
+| `Ctrl` `Shift` `G` | Ungroup layers |
+| `Ctrl` `K` | Make component |
+| `Ctrl` `L` | Lock/Unlock layer |
+| `Ctrl` `,` | Hide/Show layer |
+| `Ctrl` `Shift` `M` | Mask with shape |
+| `Ctrl` `R` | Make repeat grid |
+| `1-9` | Change layer opacity |
+| `Ctrl` `;` | Show/Hide artboard guides |
+| `Ctrl` `Shift` `;` | Lock artboard guides |
+{.shortcuts}
### Keys for Align
-Shortcut | Action
----|---
-`Ctrl` `Shift` `Left` | Left
-`Shift` `C` | Center (horizontally)
-`Ctrl` `Shift` `Right` | Right
-`Ctrl` `Shift` `Up` | Top
-`Shift` `M` | Middle (vertically)
-`Ctrl` `Shift` `Down` | Bottom
-{.shortcuts}
+| Shortcut | Action |
+| ---------------------- | --------------------- |
+| `Ctrl` `Shift` `Left` | Left |
+| `Shift` `C` | Center (horizontally) |
+| `Ctrl` `Shift` `Right` | Right |
+| `Ctrl` `Shift` `Up` | Top |
+| `Shift` `M` | Middle (vertically) |
+| `Ctrl` `Shift` `Down` | Bottom |
+{.shortcuts}
### Keys for Arrange
-Shortcut | Action
----|---
-`Ctrl` `Shift` `]` | Bring to front
-`Ctrl` `]` | Bring forward
-`Ctrl` `[` | Send backward
-`Ctrl` `Shift` `[` | Send to back
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | -------------- |
+| `Ctrl` `Shift` `]` | Bring to front |
+| `Ctrl` `]` | Bring forward |
+| `Ctrl` `[` | Send backward |
+| `Ctrl` `Shift` `[` | Send to back |
+{.shortcuts}
### Keys for Distribute
-Shortcut | Action
----|---
-`Ctrl` `Shift` `H` | Horizontal
-`Ctrl` `Shift` `V` | Vertical
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ---------- |
+| `Ctrl` `Shift` `H` | Horizontal |
+| `Ctrl` `Shift` `V` | Vertical |
+{.shortcuts}
### Keys for Text
-Shortcut | Action
----|---
-`Ctrl` `B` | Bold
-`Ctrl` `I` | Italic
-`Ctrl` `Shift` `.` | Increase font size
-`Ctrl` `Shift` `,` | Decrease font size
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ------------------ |
+| `Ctrl` `B` | Bold |
+| `Ctrl` `I` | Italic |
+| `Ctrl` `Shift` `.` | Increase font size |
+| `Ctrl` `Shift` `,` | Decrease font size |
+{.shortcuts}
### Keys for Operations menu
-Shortcut | Action
----|---
-`Alt` | From center
-`Shift` | Constrain
-`Enter` | Edit text
-`Shift` | Constrain rotate (15 deg)
-`Shift` | Line constrain rotate (45 deg)
-`Shift` `Alt` | Constrain from center
-`Ctrl` | Direct select
-`Ctrl` `Tab` | Switch between Design and Prototype mode
-{.shortcuts}
+| Shortcut | Action |
+| ------------- | ---------------------------------------- |
+| `Alt` | From center |
+| `Shift` | Constrain |
+| `Enter` | Edit text |
+| `Shift` | Constrain rotate (15 deg) |
+| `Shift` | Line constrain rotate (45 deg) |
+| `Shift` `Alt` | Constrain from center |
+| `Ctrl` | Direct select |
+| `Ctrl` `Tab` | Switch between Design and Prototype mode |
+{.shortcuts}
### Keys for Tools menu
-Shortcut | Action
----|---
-`V` | Select
-`R` | Rectangle
-`E` | Ellipse
-`Y` | Polygon
-`L` | Line
-`P` | Pen
-`T` | Text
-`A` | Artboard
-`Z` | Zoom
-`Ctrl` `3` | Zoom to selection
-`I` | Eyedropper
-{.shortcuts}
+| Shortcut | Action |
+| ---------- | ----------------- |
+| `V` | Select |
+| `R` | Rectangle |
+| `E` | Ellipse |
+| `Y` | Polygon |
+| `L` | Line |
+| `P` | Pen |
+| `T` | Text |
+| `A` | Artboard |
+| `Z` | Zoom |
+| `Ctrl` `3` | Zoom to selection |
+| `I` | Eyedropper |
+{.shortcuts}
### Keys for Interface and Viewing Options
-Shortcut | Action
----|---
-`Ctrl` `+` | Zoom in
-`Ctrl` `-` | Zoom out
-`Ctrl` `0` | Zoom to fit
-`Ctrl` `1` | Zoom to 100%
-`Ctrl` `2` | Zoom to 200%
-`Space` | Pan
-`Ctrl` `Shift` `Y` | Assets
-`Ctrl` `Y` | Layers
-`Ctrl` `Shift` `'` | Show layout grid
-`Ctrl` `'` | Show square grid
-`Ctrl` `Tab` | Switch between Design and Prototype mode
-`Up/Down` | Increase or decrease a value in a field by 1
-`Shift` `Up/Down` | Increase or decrease a value in a field by 10
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | --------------------------------------------- |
+| `Ctrl` `+` | Zoom in |
+| `Ctrl` `-` | Zoom out |
+| `Ctrl` `0` | Zoom to fit |
+| `Ctrl` `1` | Zoom to 100% |
+| `Ctrl` `2` | Zoom to 200% |
+| `Space` | Pan |
+| `Ctrl` `Shift` `Y` | Assets |
+| `Ctrl` `Y` | Layers |
+| `Ctrl` `Shift` `'` | Show layout grid |
+| `Ctrl` `'` | Show square grid |
+| `Ctrl` `Tab` | Switch between Design and Prototype mode |
+| `Up/Down` | Increase or decrease a value in a field by 1 |
+| `Shift` `Up/Down` | Increase or decrease a value in a field by 10 |
+{.shortcuts}
### Keys for Design Specs
-Shortcut | Action
----|---
-`Ctrl` `+/-` | Zoom
-`Ctrl` `0` | Reset zoom
-`(arrows)` | Pan
-`Shift` `(arrows)` | Faster pan
-`Esc` | Go from Spec view to UX flow view
-`Esc` | Remove focus from artboard in UX flow view
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ------------------------------------------ |
+| `Ctrl` `+/-` | Zoom |
+| `Ctrl` `0` | Reset zoom |
+| `(arrows)` | Pan |
+| `Shift` `(arrows)` | Faster pan |
+| `Esc` | Go from Spec view to UX flow view |
+| `Esc` | Remove focus from artboard in UX flow view |
+{.shortcuts}
### Keys for Vector Editing
-Shortcut | Action
----|---
-`Enter` | Start editing selected vector object
-`Esc` | Stop editing selected vector object
-{.shortcuts}
+| Shortcut | Action |
+| -------- | ------------------------------------ |
+| `Enter` | Start editing selected vector object |
+| `Esc` | Stop editing selected vector object |
+{.shortcuts}
### Keys for Prototyping
-Shortcut | Action
----|---
-`Ctrl` `A` | See all connections in prototype mode
-`Ctrl` `Enter` | Preview
-`Ctrl` `Shift` `E` | Share prototype online
-`Left/Right` | Navigate artboards in preview or shared prototype
-{.shortcuts}
-
+| Shortcut | Action |
+| ------------------ | ------------------------------------------------- |
+| `Ctrl` `A` | See all connections in prototype mode |
+| `Ctrl` `Enter` | Preview |
+| `Ctrl` `Shift` `E` | Share prototype online |
+| `Left/Right` | Navigate artboards in preview or shared prototype |
+{.shortcuts}
+## Also see
-Also see
---------
- [Keyboard shortcuts for Adobe XD](https://helpx.adobe.com/xd/help/keyboard-shortcuts.html) _(helpx.adobe.com)_
diff --git a/source/_posts/affinity-designer.md b/source/_posts/affinity-designer.md
index c5db1d87..483ca7ed 100644
--- a/source/_posts/affinity-designer.md
+++ b/source/_posts/affinity-designer.md
@@ -2,167 +2,155 @@
title: Affinity Designer
date: 2022-11-23 16:23:31.702748
background: bg-[#79cdf1]
-label:
-tags:
- -
- -
+label:
+tags:
+ -
+ -
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 108 keyboard shortcuts found in Affinity Designer
+ A visual cheat-sheet for the 108 keyboard shortcuts found in Affinity Designer
---
-
-
-Keyboard Shortcuts
-------------------
-
-
+## Keyboard Shortcuts
### Designer Persona {.row-span-2}
-Shortcut | Action
----|---
-`Esc` | Cancel operation
-`F1` | Help
-`0-9` | Change opacity
-`Tab` | Toggle UI
-`T` | Cycle text tools
-`Y` | Transparency tool
-`I` | Color picker tool
-`P` | Pen tool
-`[` | Decrease brush size
-`]` | Increase brush size
-`A` | Node tool
-`F` | Point transform tool
-`G` | Fill tool
-`H` | View tool
-`;` | Toggle snapping
-`\` | Clip to canvas
-`Z` | Zoom tool
-`X` | Toggle active selector
-`C` | Corner tool
-`V` | Move tool
-`B` | Vector brush tool
-`N` | Pencil tool
-`M` | Cycle shape tool
-`,` | Cycle split view
-`.` | Reset selection box
-`/` | Set fill or stroke to none
-`Ctrl` `1` | Zoom to 100%
-`Ctrl` `2` | Zoom to 200%
-`Ctrl` `3` | Zoom to 400%
-`Ctrl` `4` | Zoom to 800%
-`Ctrl` `8` | Zoom to actual size
-`Ctrl` `9` | Zoom to pixel size
-`Ctrl` `0` | Zoom to fit
-`Ctrl` `-` | Zoom out
-`Ctrl` `=` | Zoom in
-`Ctrl` `Tab` | Switch view
-`Ctrl` `W` | Close
-`Ctrl` `R` | Rulers
-`Ctrl` `T` | Character
-`Ctrl` `Y` | Redo
-`Ctrl` `O` | Open
-`Ctrl` `P` | Print
-`Ctrl` `[` | Back one
-`Ctrl` `]` | Forward one
-`Ctrl` `Enter` | Convert to curves
-`Ctrl` `A` | Select all
-`Ctrl` `S` | Save
-`Ctrl` `G` | Group
-`Ctrl` `J` | Duplicate
-`Ctrl` `L` | Lock
-`Ctrl` `;` | Show guides
-`Ctrl` `'` | Show grid
-`Ctrl` `Z` | Undo
-`Ctrl` `X` | Cut
-`Ctrl` `C` | Copy
-`Ctrl` `V` | Paste
-`Ctrl` `N` | New
-`Ctrl` `M` | Curves
-`Ctrl` `,` | Preferences
-`Space` | Hold for view tool
-{.shortcuts}
-
-
-
-### Pixel Persona
+| Shortcut | Action |
+| -------------- | -------------------------- |
+| `Esc` | Cancel operation |
+| `F1` | Help |
+| `0-9` | Change opacity |
+| `Tab` | Toggle UI |
+| `T` | Cycle text tools |
+| `Y` | Transparency tool |
+| `I` | Color picker tool |
+| `P` | Pen tool |
+| `[` | Decrease brush size |
+| `]` | Increase brush size |
+| `A` | Node tool |
+| `F` | Point transform tool |
+| `G` | Fill tool |
+| `H` | View tool |
+| `;` | Toggle snapping |
+| `\` | Clip to canvas |
+| `Z` | Zoom tool |
+| `X` | Toggle active selector |
+| `C` | Corner tool |
+| `V` | Move tool |
+| `B` | Vector brush tool |
+| `N` | Pencil tool |
+| `M` | Cycle shape tool |
+| `,` | Cycle split view |
+| `.` | Reset selection box |
+| `/` | Set fill or stroke to none |
+| `Ctrl` `1` | Zoom to 100% |
+| `Ctrl` `2` | Zoom to 200% |
+| `Ctrl` `3` | Zoom to 400% |
+| `Ctrl` `4` | Zoom to 800% |
+| `Ctrl` `8` | Zoom to actual size |
+| `Ctrl` `9` | Zoom to pixel size |
+| `Ctrl` `0` | Zoom to fit |
+| `Ctrl` `-` | Zoom out |
+| `Ctrl` `=` | Zoom in |
+| `Ctrl` `Tab` | Switch view |
+| `Ctrl` `W` | Close |
+| `Ctrl` `R` | Rulers |
+| `Ctrl` `T` | Character |
+| `Ctrl` `Y` | Redo |
+| `Ctrl` `O` | Open |
+| `Ctrl` `P` | Print |
+| `Ctrl` `[` | Back one |
+| `Ctrl` `]` | Forward one |
+| `Ctrl` `Enter` | Convert to curves |
+| `Ctrl` `A` | Select all |
+| `Ctrl` `S` | Save |
+| `Ctrl` `G` | Group |
+| `Ctrl` `J` | Duplicate |
+| `Ctrl` `L` | Lock |
+| `Ctrl` `;` | Show guides |
+| `Ctrl` `'` | Show grid |
+| `Ctrl` `Z` | Undo |
+| `Ctrl` `X` | Cut |
+| `Ctrl` `C` | Copy |
+| `Ctrl` `V` | Paste |
+| `Ctrl` `N` | New |
+| `Ctrl` `M` | Curves |
+| `Ctrl` `,` | Preferences |
+| `Space` | Hold for view tool |
-Shortcut | Action
----|---
-`W` | Selection brush
-`E` | Erase brush
-`I` | Color picker tool
-`O` | Cycle dodge or burn brushes
-`[` | Decrease brush size
-`]` | Increase brush size
-`G` | Flood fill tool
-`L` | Freehand selection tool
-`X` | Toggle active selector
-`V` | Move tool
-`B` | Cycle brush or pixel tools
-`M` | Cycle marquees
-`,` | Cycle split view
-`.` | Reset selection box
{.shortcuts}
+### Pixel Persona
+| Shortcut | Action |
+| -------- | --------------------------- |
+| `W` | Selection brush |
+| `E` | Erase brush |
+| `I` | Color picker tool |
+| `O` | Cycle dodge or burn brushes |
+| `[` | Decrease brush size |
+| `]` | Increase brush size |
+| `G` | Flood fill tool |
+| `L` | Freehand selection tool |
+| `X` | Toggle active selector |
+| `V` | Move tool |
+| `B` | Cycle brush or pixel tools |
+| `M` | Cycle marquees |
+| `,` | Cycle split view |
+| `.` | Reset selection box |
-
-### Modifiers and Layer Control {.row-span-2}
-
-Shortcut | Action
----|---
-`Alt` | Drawing and painting - temporarily switches to the color picker tool
-`Shift` | Freehand selection tools - connects clicked points with straight lines
-`Shift` | Reverses aspect ratio constraint on scaling
-`Ctrl` | Scales from the center of selection
-`Alt` | Ignores snapping during an operation
-`Ctrl` | Geometric shapes - moves red handles symmetrically
-`Shift` | Path text - maintains distance between red handles
-`Ctrl` | Path text - moves red handles symmetrically
-`Shift` | Pixel brush painting - draws straight line connecting two strokes
-`Shift` | Pixel selections - constrains marquee to square or circle
-`Ctrl` | Pixel selection - moves underlying layer rather than selection
-`Alt` | Pixel selection - removes from selection
-`Ctrl` | Pixel tool - erases from current layer or projects
-`Shift` | Rotating - constrains rotations to 15 degree intervals
-`Shift` | Selecting - scales multiple objects and layers
-`Alt` | Selecting - selects object or layer behind current selection
-`Ctrl` | Shearing - mirrors shear around center of object
-`Shift` | Vector drawing tools - constrains handle angles to 15 degrees
-`Alt` | Vector drawing tools - sets node to sharp for creating cusps
-`Ctrl` | Vector drawing tools - temporarily switches to node editing from pen
{.shortcuts}
+### Modifiers and Layer Control {.row-span-2}
+
+| Shortcut | Action |
+| -------- | ---------------------------------------------------------------------- |
+| `Alt` | Drawing and painting - temporarily switches to the color picker tool |
+| `Shift` | Freehand selection tools - connects clicked points with straight lines |
+| `Shift` | Reverses aspect ratio constraint on scaling |
+| `Ctrl` | Scales from the center of selection |
+| `Alt` | Ignores snapping during an operation |
+| `Ctrl` | Geometric shapes - moves red handles symmetrically |
+| `Shift` | Path text - maintains distance between red handles |
+| `Ctrl` | Path text - moves red handles symmetrically |
+| `Shift` | Pixel brush painting - draws straight line connecting two strokes |
+| `Shift` | Pixel selections - constrains marquee to square or circle |
+| `Ctrl` | Pixel selection - moves underlying layer rather than selection |
+| `Alt` | Pixel selection - removes from selection |
+| `Ctrl` | Pixel tool - erases from current layer or projects |
+| `Shift` | Rotating - constrains rotations to 15 degree intervals |
+| `Shift` | Selecting - scales multiple objects and layers |
+| `Alt` | Selecting - selects object or layer behind current selection |
+| `Ctrl` | Shearing - mirrors shear around center of object |
+| `Shift` | Vector drawing tools - constrains handle angles to 15 degrees |
+| `Alt` | Vector drawing tools - sets node to sharp for creating cusps |
+| `Ctrl` | Vector drawing tools - temporarily switches to node editing from pen |
-
-### Advanced Text
-
-Shortcut | Action
----|---
-`Ctrl` `T` | Character panel
-`Ctrl` `Shift` `T` | Typography dialog
-`Ctrl` `B` | Bold
-`Ctrl` `I` | Italic
-`Ctrl` `U` | Underline
-`Ctrl` `Alt` `L` | Align left
-`Ctrl` `Alt` `C` | Align center
-`Ctrl` `Alt` `R` | Align right
-`Alt` `Shift` `Left` | Tighten spacing more
-`Alt` `Shift` `Right` | Loosen spacing more
-`Ctrl` `Alt` `Shift` `Up` | Precise raise baseline
-`Ctrl` `Alt` `Shift` `Down` | Precise lower baseline
-`Ctrl` `Alt` `Down` | Precise increase leading
-`Ctrl` `Alt` `Up` | Precise decrease leading
{.shortcuts}
+### Advanced Text
+| Shortcut | Action |
+| --------------------------- | ------------------------ |
+| `Ctrl` `T` | Character panel |
+| `Ctrl` `Shift` `T` | Typography dialog |
+| `Ctrl` `B` | Bold |
+| `Ctrl` `I` | Italic |
+| `Ctrl` `U` | Underline |
+| `Ctrl` `Alt` `L` | Align left |
+| `Ctrl` `Alt` `C` | Align center |
+| `Ctrl` `Alt` `R` | Align right |
+| `Alt` `Shift` `Left` | Tighten spacing more |
+| `Alt` `Shift` `Right` | Loosen spacing more |
+| `Ctrl` `Alt` `Shift` `Up` | Precise raise baseline |
+| `Ctrl` `Alt` `Shift` `Down` | Precise lower baseline |
+| `Ctrl` `Alt` `Down` | Precise increase leading |
+| `Ctrl` `Alt` `Up` | Precise decrease leading |
+{.shortcuts}
+## Also see
-
-Also see
---------
-- [Keyboard shortcuts for Affinity Designer](https://affinityspotlight.com/article/downloadable-affinity-keyboard-shortcut-cheat-sheets/) _(affinityspotlight.com)_
+- [Keyboard shortcuts for Affinity Designer](https://affinityspotlight.com/article/downloadable-affinity-keyboard-shortcut-cheat-sheets/)
+ _(affinityspotlight.com)_
diff --git a/source/_posts/affinity-photo.md b/source/_posts/affinity-photo.md
index 64e4a241..6aba2dc5 100644
--- a/source/_posts/affinity-photo.md
+++ b/source/_posts/affinity-photo.md
@@ -2,350 +2,329 @@
title: Affinity Photo
date: 2022-11-23 16:23:31.694998
background: bg-[#d578f0]
-label:
-tags:
- -
- -
+label:
+tags:
+ -
+ -
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 177 keyboard shortcuts found in Affinity Photo
+ A visual cheat-sheet for the 177 keyboard shortcuts found in Affinity Photo
---
-
-
-Keyboard Shortcuts
-------------------
-
-
+## Keyboard Shortcuts
### Editing {.row-span-2}
-Shortcut | Action
----|---
-`Ctrl` `Alt` `I` | Resize document
-`Ctrl` `Alt` `C` | Resize canvas
-`.` | Reset selection box
-`;` | Toggle snapping
-`Ctrl` | Erase with pixel tool on current layer
-`X` | Switch between Stroke/Fill color selectors
-`Shift` `X` | Swap Stroke/Fill colour selectors
-`/` | Set no fill on Stroke/Fill color selectors
-`O` | Toggle between crop tool overlays
-`Shift` `O` | Flip golden spiral overlay (crop tool enabled)
-`Esc` | Cancel a sizing, moving, or creating operation
-`(arrows)` | Move item
-`Shift` `(arrows)` | Move item in 10x measurement units
-{.shortcuts}
-
+| Shortcut | Action |
+| ------------------ | ---------------------------------------------- |
+| `Ctrl` `Alt` `I` | Resize document |
+| `Ctrl` `Alt` `C` | Resize canvas |
+| `.` | Reset selection box |
+| `;` | Toggle snapping |
+| `Ctrl` | Erase with pixel tool on current layer |
+| `X` | Switch between Stroke/Fill color selectors |
+| `Shift` `X` | Swap Stroke/Fill colour selectors |
+| `/` | Set no fill on Stroke/Fill color selectors |
+| `O` | Toggle between crop tool overlays |
+| `Shift` `O` | Flip golden spiral overlay (crop tool enabled) |
+| `Esc` | Cancel a sizing, moving, or creating operation |
+| `(arrows)` | Move item |
+| `Shift` `(arrows)` | Move item in 10x measurement units |
-
-### Tools (Tone Mapping Persona)
-
-Shortcut | Action
----|---
-`H` | View tool
-`Z` | Zoom tool
-`B` | Overlay paint tool
-`E` | Overlay erase tool
-`G` | Overlay gradient tool
{.shortcuts}
+### Tools (Tone Mapping Persona)
+| Shortcut | Action |
+| -------- | --------------------- |
+| `H` | View tool |
+| `Z` | Zoom tool |
+| `B` | Overlay paint tool |
+| `E` | Overlay erase tool |
+| `G` | Overlay gradient tool |
-
-### Files
-
-Shortcut | Action
----|---
-`Ctrl` `N` | New document
-`Ctrl` `Shift` `Alt` `N` | New from clipboard
-`Ctrl` `O` | Open document
-`Ctrl` `W` | Close document, or close app when no documents are open
-`Ctrl` `Tab` | Switch document/view
-`Ctrl` `S` | Save
-`Ctrl` `Shift` `S` | Save as
-`Ctrl` `Shift` `Alt` `S` | Export
-`Ctrl` `P` | Print
{.shortcuts}
+### Files
+| Shortcut | Action |
+| ------------------------ | ------------------------------------------------------- |
+| `Ctrl` `N` | New document |
+| `Ctrl` `Shift` `Alt` `N` | New from clipboard |
+| `Ctrl` `O` | Open document |
+| `Ctrl` `W` | Close document, or close app when no documents are open |
+| `Ctrl` `Tab` | Switch document/view |
+| `Ctrl` `S` | Save |
+| `Ctrl` `Shift` `S` | Save as |
+| `Ctrl` `Shift` `Alt` `S` | Export |
+| `Ctrl` `P` | Print |
-
-### Vector Graphics
-
-Shortcut | Action
----|---
-`Ctrl` | Edit curves as you draw using node editing (from pen)
-`Ctrl` `Enter` | Convert to curves
{.shortcuts}
+### Vector Graphics
+| Shortcut | Action |
+| -------------- | ----------------------------------------------------- |
+| `Ctrl` | Edit curves as you draw using node editing (from pen) |
+| `Ctrl` `Enter` | Convert to curves |
-### Tools (Export Persona)
-
-Shortcut | Action
----|---
-`S` | Slice tool
-`L` | Layer select tool
{.shortcuts}
+### Tools (Export Persona)
+| Shortcut | Action |
+| -------- | ----------------- |
+| `S` | Slice tool |
+| `L` | Layer select tool |
-### Tools (Develop Persona)
-
-Shortcut | Action
----|---
-`S` | Sampler tool
-`W` | White balance tool
-`R` | Red eye removal tool
-`L` | Blemish removal tool
-`B` | Overlay paint tool
-`E` | Overlay erase tool
-`G` | Overlay gradient tool
-`C` | Crop tool
-`Z` | Zoom tool
-`H` | View tool
{.shortcuts}
+### Tools (Develop Persona)
+| Shortcut | Action |
+| -------- | --------------------- |
+| `S` | Sampler tool |
+| `W` | White balance tool |
+| `R` | Red eye removal tool |
+| `L` | Blemish removal tool |
+| `B` | Overlay paint tool |
+| `E` | Overlay erase tool |
+| `G` | Overlay gradient tool |
+| `C` | Crop tool |
+| `Z` | Zoom tool |
+| `H` | View tool |
-### Tools
-
-Shortcut | Action
----|---
-`G` | Flood fill tool/gradient cycle
-`H` | View tool
-`V` | Move tool
-`C` | Crop tool
-`W` | Selection tools cycle
-`P` | Pen and node tool cycle
-`Z` | Zoom tool
-`S` | Clone tool
-`U` | Shape tools cycle
-`T` | Text tools cycle
-`O` | Dodge, burn, and sponge brush tool cycle
-`J` | Retouch tools cycle
-`B` | Painting tools cycle
-`E` | Erase tools cycle
-`M` | Marquee selection tools cycle
-`L` | Free hand selection tool
{.shortcuts}
+### Tools
+| Shortcut | Action |
+| -------- | ---------------------------------------- |
+| `G` | Flood fill tool/gradient cycle |
+| `H` | View tool |
+| `V` | Move tool |
+| `C` | Crop tool |
+| `W` | Selection tools cycle |
+| `P` | Pen and node tool cycle |
+| `Z` | Zoom tool |
+| `S` | Clone tool |
+| `U` | Shape tools cycle |
+| `T` | Text tools cycle |
+| `O` | Dodge, burn, and sponge brush tool cycle |
+| `J` | Retouch tools cycle |
+| `B` | Painting tools cycle |
+| `E` | Erase tools cycle |
+| `M` | Marquee selection tools cycle |
+| `L` | Free hand selection tool |
-### Tools (Liquify Persona)
-
-Shortcut | Action
----|---
-`P` | Liquify push forward tool
-`L` | Liquify push left tool
-`T` | Liquify twirl tool
-`U` | Liquify pinch tool
-`B` | Liquify turbulence tool
-`C` | Liquify mesh clone tool
-`R` | Liquify reconstruct tool
-`F` | Liquify freeze tool
-`W` | Liquify thaw tool
-`Z` | Liquify zoom tool
-`H` | Liquify view tool
{.shortcuts}
+### Tools (Liquify Persona)
+| Shortcut | Action |
+| -------- | ------------------------- |
+| `P` | Liquify push forward tool |
+| `L` | Liquify push left tool |
+| `T` | Liquify twirl tool |
+| `U` | Liquify pinch tool |
+| `B` | Liquify turbulence tool |
+| `C` | Liquify mesh clone tool |
+| `R` | Liquify reconstruct tool |
+| `F` | Liquify freeze tool |
+| `W` | Liquify thaw tool |
+| `Z` | Liquify zoom tool |
+| `H` | Liquify view tool |
-
-### Text {.row-span-3}
-
-Shortcut | Action
----|---
-`Ctrl` `>` | Bigger text
-`Ctrl` `<` | Smaller text
-`Ctrl` `Alt` `>` | Precise bigger text
-`Ctrl` `Alt` `<` | Precise smaller text
-`Alt` `Left` | Tighten
-`Alt` `Right` | Loosen
-`Alt` `Shift` `Left` | Tighten more
-`Alt` `Shift` `Right` | Loosen more
-`Ctrl` `B` | Bold
-`Ctrl` `I` | Italic
-`Ctrl` `U` | Underline
-`Ctrl` `T` | Show character
-`Ctrl` `Shift` `T` | Show typography
-`Ctrl` `Alt` `+` | Superscript
-`Ctrl` `Alt` `-` | Subscript
-`Ctrl` `Alt` `L` | Align left
-`Ctrl` `Alt` `R` | Align right
-`Ctrl` `Alt` `C` | Align center
-`Ctrl` `Alt` `Shift` `\` | Justify left
-`Alt` `Down` | Increase paragraph leading
-`Alt` `Up` | Decrease paragraph leading
-`Ctrl` `Shift` `Up` | Precise paragraph increase leading
-`Ctrl` `Shift` `Down` | Precise paragraph decrease leading
-`Alt` `Shift` `Up` | Raise baseline
-`Alt` `Shift` `Down` | Lower baseline
-`Ctrl` `Alt` `Shift` `Up` | Precise raise baseline
-`Ctrl` `Alt` `Shift` `Down` | Precise lower baseline
-`Ctrl` `Alt` `Space` | Special characters
-`Ctrl` `Enter` | Line break
-`Alt` `Space` | Non-breaking space
-`Alt` `-` | En dash
-`Alt` `Shift` `-` | Em dash
-`Ctrl` `Shift` `;` | Spelling options
{.shortcuts}
+### Text {.row-span-3}
+| Shortcut | Action |
+| --------------------------- | ---------------------------------- |
+| `Ctrl` `>` | Bigger text |
+| `Ctrl` `<` | Smaller text |
+| `Ctrl` `Alt` `>` | Precise bigger text |
+| `Ctrl` `Alt` `<` | Precise smaller text |
+| `Alt` `Left` | Tighten |
+| `Alt` `Right` | Loosen |
+| `Alt` `Shift` `Left` | Tighten more |
+| `Alt` `Shift` `Right` | Loosen more |
+| `Ctrl` `B` | Bold |
+| `Ctrl` `I` | Italic |
+| `Ctrl` `U` | Underline |
+| `Ctrl` `T` | Show character |
+| `Ctrl` `Shift` `T` | Show typography |
+| `Ctrl` `Alt` `+` | Superscript |
+| `Ctrl` `Alt` `-` | Subscript |
+| `Ctrl` `Alt` `L` | Align left |
+| `Ctrl` `Alt` `R` | Align right |
+| `Ctrl` `Alt` `C` | Align center |
+| `Ctrl` `Alt` `Shift` `\` | Justify left |
+| `Alt` `Down` | Increase paragraph leading |
+| `Alt` `Up` | Decrease paragraph leading |
+| `Ctrl` `Shift` `Up` | Precise paragraph increase leading |
+| `Ctrl` `Shift` `Down` | Precise paragraph decrease leading |
+| `Alt` `Shift` `Up` | Raise baseline |
+| `Alt` `Shift` `Down` | Lower baseline |
+| `Ctrl` `Alt` `Shift` `Up` | Precise raise baseline |
+| `Ctrl` `Alt` `Shift` `Down` | Precise lower baseline |
+| `Ctrl` `Alt` `Space` | Special characters |
+| `Ctrl` `Enter` | Line break |
+| `Alt` `Space` | Non-breaking space |
+| `Alt` `-` | En dash |
+| `Alt` `Shift` `-` | Em dash |
+| `Ctrl` `Shift` `;` | Spelling options |
-### Tools (Panorama Persona)
-
-Shortcut | Action
----|---
-`A` | Transform source image tool
-`L` | Add to source image mask tool
-`U` | Erase from source image mask tool
{.shortcuts}
+### Tools (Panorama Persona)
+| Shortcut | Action |
+| -------- | --------------------------------- |
+| `A` | Transform source image tool |
+| `L` | Add to source image mask tool |
+| `U` | Erase from source image mask tool |
-
+{.shortcuts}
### Edit
-Shortcut | Action
----|---
-`Ctrl` `Z` | Undo
-`Ctrl` `Shift` `Z` | Redo
-`Ctrl` `Shift` `C` | Copy merged
-`Ctrl` `Shift` `V` | Paste style
-`Ctrl` `Alt` `V` | Paste FX
-`Ctrl` `Shift` `Alt` `V` | Paste without format
-`Ctrl` `Alt` `V` | Paste inside
-`Shift` `F5` | Fill
-`Alt` `Tab` | Inpaint
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | -------------------- |
+| `Ctrl` `Z` | Undo |
+| `Ctrl` `Shift` `Z` | Redo |
+| `Ctrl` `Shift` `C` | Copy merged |
+| `Ctrl` `Shift` `V` | Paste style |
+| `Ctrl` `Alt` `V` | Paste FX |
+| `Ctrl` `Shift` `Alt` `V` | Paste without format |
+| `Ctrl` `Alt` `V` | Paste inside |
+| `Shift` `F5` | Fill |
+| `Alt` `Tab` | Inpaint |
+{.shortcuts}
### Layer Operations
-Shortcut | Action
----|---
-`Ctrl` `Alt` `A` | Select all layers
-`Ctrl` `G` | Group
-`Ctrl` `Shift` `G` | Ungroup
-`Ctrl` `J` | Duplicate
-`Ctrl` `I` | Invert
-`Ctrl` `Shift` `]` | Move to front
-`Ctrl` `]` | Move forward one
-`Ctrl` `Shift` `[` | Move to back
-`Ctrl` `[` | Move back one
-`Ctrl` `Shift` `N` | New layer
-`Ctrl` `E` | Merge down
-`Ctrl` `Shift` `E` | Merge selected
-`Ctrl` `Shift` `Alt` `E` | Merge visible
-`F` | Toggle between frequency separation layers
-`Ctrl` `Alt` `P` | Edit live projection
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | ------------------------------------------ |
+| `Ctrl` `Alt` `A` | Select all layers |
+| `Ctrl` `G` | Group |
+| `Ctrl` `Shift` `G` | Ungroup |
+| `Ctrl` `J` | Duplicate |
+| `Ctrl` `I` | Invert |
+| `Ctrl` `Shift` `]` | Move to front |
+| `Ctrl` `]` | Move forward one |
+| `Ctrl` `Shift` `[` | Move to back |
+| `Ctrl` `[` | Move back one |
+| `Ctrl` `Shift` `N` | New layer |
+| `Ctrl` `E` | Merge down |
+| `Ctrl` `Shift` `E` | Merge selected |
+| `Ctrl` `Shift` `Alt` `E` | Merge visible |
+| `F` | Toggle between frequency separation layers |
+| `Ctrl` `Alt` `P` | Edit live projection |
+{.shortcuts}
### Brush
-Shortcut | Action
----|---
-`0-9` | Change selected layer content/brush tool's opacity
-`[/]` | Increase/decrease brush width
-{.shortcuts}
+| Shortcut | Action |
+| -------- | -------------------------------------------------- |
+| `0-9` | Change selected layer content/brush tool's opacity |
+| `[/]` | Increase/decrease brush width |
+{.shortcuts}
### View
-Shortcut | Action
----|---
-`Ctrl` `+` | Zoom in
-`Ctrl` `-` | Zoom out
-`Ctrl` `0` | Zoom to fit
-`Ctrl` `1` | Zoom to 100%
-`Ctrl` `2` | Zoom to 200%
-`Ctrl` `3` | Zoom to 400%
-`Ctrl` `4` | Zoom to 800%
-`Ctrl` `8` | Zoom to actual size
-`Ctrl` `9` | Zoom to pixel size
-`Space` | Hot key panning
-`Ctrl` `Space` | Hot key zoom in
-`H` | View tool
-`Ctrl` `Tab` | Switch between views
-`Ctrl` `R` | Show rulers
-`Ctrl` `;` | Show guides
-`Ctrl` `'` | Show grid
-{.shortcuts}
+| Shortcut | Action |
+| -------------- | -------------------- |
+| `Ctrl` `+` | Zoom in |
+| `Ctrl` `-` | Zoom out |
+| `Ctrl` `0` | Zoom to fit |
+| `Ctrl` `1` | Zoom to 100% |
+| `Ctrl` `2` | Zoom to 200% |
+| `Ctrl` `3` | Zoom to 400% |
+| `Ctrl` `4` | Zoom to 800% |
+| `Ctrl` `8` | Zoom to actual size |
+| `Ctrl` `9` | Zoom to pixel size |
+| `Space` | Hot key panning |
+| `Ctrl` `Space` | Hot key zoom in |
+| `H` | View tool |
+| `Ctrl` `Tab` | Switch between views |
+| `Ctrl` `R` | Show rulers |
+| `Ctrl` `;` | Show guides |
+| `Ctrl` `'` | Show grid |
+{.shortcuts}
### Pixel Selection / Mask
-Shortcut | Action
----|---
-`Ctrl` `A` | Select all
-`Ctrl` `D` | Deselect
-`Ctrl` `Shift` `I` | Invert pixel selection
-`Ctrl` | Add to selection (marquee or free hand selection tools only)
-`Alt` | Remove from selection
-`Ctrl` `B` | Grow or shrink
-`Shift` `F6` | Feather
-`Ctrl` `Alt` `R` | Refine edges
-`(arrows)` | Move selection in 1 pixel increments
-`Shift` `(arrows)` | Move selection in 10 pixel increments
-`Q` | Quick mask
-`Ctrl` `I` | Invert mask
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ------------------------------------------------------------ |
+| `Ctrl` `A` | Select all |
+| `Ctrl` `D` | Deselect |
+| `Ctrl` `Shift` `I` | Invert pixel selection |
+| `Ctrl` | Add to selection (marquee or free hand selection tools only) |
+| `Alt` | Remove from selection |
+| `Ctrl` `B` | Grow or shrink |
+| `Shift` `F6` | Feather |
+| `Ctrl` `Alt` `R` | Refine edges |
+| `(arrows)` | Move selection in 1 pixel increments |
+| `Shift` `(arrows)` | Move selection in 10 pixel increments |
+| `Q` | Quick mask |
+| `Ctrl` `I` | Invert mask |
+{.shortcuts}
### Workspace
-Shortcut | Action
----|---
-`Ctrl` `Shift` `H` | Show or hide studio panels
-`Ctrl` `Alt` `T` | Show or hide toolbar
-`Tab` | Toggle UI
-`Ctrl` `H` | Hide workspace
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | -------------------------- |
+| `Ctrl` `Shift` `H` | Show or hide studio panels |
+| `Ctrl` `Alt` `T` | Show or hide toolbar |
+| `Tab` | Toggle UI |
+| `Ctrl` `H` | Hide workspace |
+{.shortcuts}
### Adjustment and Filter
-Shortcut | Action
----|---
-`Ctrl` `L` | Levels adjustment
-`Ctrl` `U` | HSL adjustment
-`Ctrl` `I` | Invert adjustment
-`Ctrl` `M` | Curves adjustment
-`Ctrl` `Shift` `Alt` `B` | Black and white adjustment
-`Ctrl` `F` | Repeat filter
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------ | -------------------------- |
+| `Ctrl` `L` | Levels adjustment |
+| `Ctrl` `U` | HSL adjustment |
+| `Ctrl` `I` | Invert adjustment |
+| `Ctrl` `M` | Curves adjustment |
+| `Ctrl` `Shift` `Alt` `B` | Black and white adjustment |
+| `Ctrl` `F` | Repeat filter |
+{.shortcuts}
### Liquify Persona
-Shortcut | Action
----|---
-`Ctrl` `D` | Mask all
-`Ctrl` `I` | Invert mask
-`Ctrl` `A` | Clear mask
-{.shortcuts}
+| Shortcut | Action |
+| ---------- | ----------- |
+| `Ctrl` `D` | Mask all |
+| `Ctrl` `I` | Invert mask |
+| `Ctrl` `A` | Clear mask |
+{.shortcuts}
### Misc
-Shortcut | Action
----|---
-`Ctrl` `,` | Preferences
-`Ctrl` `Alt` `L` | Liquify persona
-`Ctrl` `Alt` `E` | Export persona
-`Ctrl` `Alt` `R` | Develop persona
-`Ctrl` `Alt` `H` | Hide others (applications)
-`Ctrl` `Alt` `M` | Media browser
-{.shortcuts}
-
+| Shortcut | Action |
+| ---------------- | -------------------------- |
+| `Ctrl` `,` | Preferences |
+| `Ctrl` `Alt` `L` | Liquify persona |
+| `Ctrl` `Alt` `E` | Export persona |
+| `Ctrl` `Alt` `R` | Develop persona |
+| `Ctrl` `Alt` `H` | Hide others (applications) |
+| `Ctrl` `Alt` `M` | Media browser |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Affinity Photo](https://affinityspotlight.com/article/downloadable-affinity-keyboard-shortcut-cheat-sheets/) _(affinityspotlight.com)_
+- [Keyboard shortcuts for Affinity Photo](https://affinityspotlight.com/article/downloadable-affinity-keyboard-shortcut-cheat-sheets/)
+ _(affinityspotlight.com)_
diff --git a/source/_posts/ai.md b/source/_posts/ai.md
index 99fe5319..750dafc8 100644
--- a/source/_posts/ai.md
+++ b/source/_posts/ai.md
@@ -9,946 +9,947 @@ tags:
- Resources
categories:
- Other
-intro: This is a quick reference list of cheat sheets for the AI Navigation Directory, designed to help you discover exciting AI tools.
+intro:
+ This is a quick reference list of cheat sheets for the AI Navigation Directory, designed to help you discover exciting
+ AI tools.
---
-Getting Started
----------------
-
+## Getting Started
### Health & fitness
+
- [ Buoy health](https://buoyhealth.com)
- [ Mdacne](https://mdacne.com)
- [ Youper](https://youper.ai)
- [ Endel × james blake: wind down](https://endel.io/sleep)
- [ Dialogue](https://nowdialogue.com)
- [ Maslo ai](https://maslo.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Text
+
- [ Quillbot paraphraser](https://quillbot.com)
- [ Notion ai](https://notion.so/product/ai)
- [ Naturalreader](https://naturalreaders.com)
- [ Wordtune read](https://wordtune.com/read)
- [ Underduck](https://uberduck.ai)
- [ Slogan generator](https://aiseo.ai/templates/slogan-generator.html)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Writing
+
- [ Prowritingaid](https://prowritingaid.com)
- [ Sapling](https://sapling.ai)
- [ Headline studio](https://coschedule.com/headline-studio)
- [ Trinka](https://trinka.ai)
- [ Benchmark email](https://benchmarkemail.com/features/smart-content)
- [ Sassbook ai writer](https://sassbook.com/ai-writer)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Image editing
+
- [ Remove.bg](https://remove.bg)
- [ Quicktools by picsart](https://tools.picsart.com/image)
- [ Befunky](https://befunky.com)
- [ Topaz photo ai](https://topazlabs.com/topaz-photo-ai)
- [ Photoroom](https://photoroom.com)
- [ Erase.bg](https://erase.bg)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Productivity
+
- [ Dall-e](https://openai.com/blog/dall-e)
- [ Flowrite](https://flowrite.com)
- [ Golden](https://golden.com)
- [ Picturethis](https://picturethisai.com)
- [ Weights & biases](https://wandb.ai/site)
- [ Vwo humans vs ai](https://vwo.com/ab-testing-openai-gpt-3)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Music
+
- [ Musenet (openai)](https://openai.com/blog/musenet)
- [ Tensorflow research cloud](https://sites.research.google/trc)
- [ Moises app](https://moises.ai)
- [ Soundraw](https://soundraw.io)
- [ Ai lyrics generator](https://theselyricsdonotexist.com)
- [ Phonicmind](https://phonicmind.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Design assistant
+
- [ Cartoonify](https://kapwing.com/cartoonify)
- [ Smart upscaler](https://icons8.com/upscaler)
- [ Background remover](https://icons8.com/bgremover)
- [ Lunacy](https://icons8.com/lunacy)
- [ Pixlr](https://pixlr.com)
- [ Launchaco free logo builder](https://namecheap.com/logo-maker)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Image
+
- [ Swapper](https://icons8.com/swapper)
- [ Movavi picverse](https://movavi.com/photo-editor)
- [ Clipstudio](https://clipstudio.net/en)
- [ Looka](https://looka.com)
- [ Midjourney](https://midjourney.com)
- [ Text to image api](https://deepai.org/machine-learning-model/text2img)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Business
+
- [ Ai writer by picsart](https://tools.picsart.com/text/ai-writer)
- [ Intelligent paraphraser](https://aiseo.ai/tools/paraphrasing-tool.html)
- [ Bardeen ai](https://bardeen.ai)
- [ Resumai](https://wonsulting.com/resumai)
- [ Durable ai site builder](https://durable.co/ai-website-builder)
- [ Startup pitch generator](https://tally.so/r/npeJgq)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Virtual reality
+
- [ Deep nostalgia™](https://myheritage.com/deep-nostalgia)
- [ Gpt-3 custom ai voices](https://resemble.ai/gpt-3)
- [ Ai portraits by sketchar](https://sketchar.io)
- [ Anything world](https://anything.world)
- [ Aipoly](https://aipoly.com)
- [ Amazon comprehend](https://aws.amazon.com/comprehend)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Developer tools
+
- [ Openai for coda](https://coda.io/@coda/openai-for-coda)
- [ Nanonets ocr](https://case-study-page-nanonets.webflow.io/ocr-api)
- [ Google.ai](https://ai.google)
- [ Assemblyai](https://assemblyai.com)
- [ Httpie ai](https://httpie.io)
- [ Runpod](https://runpod.io)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Avatar
+
- [ Ai time machine](https://myheritage.com/ai-time-machine)
- [ Ready player me](https://readyplayer.me)
- [ Openart photo booth](https://openart.ai/photobooth)
- [ Reface ai](https://hey.reface.ai)
- [ Pandora avatars](https://socialbook.io/ai-avatar)
- [ Livereacting ai](https://livereacting.com/ai-host-for-live-stream)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Fun tools
+
- [ Write with artificial intelligence](https://transformer.huggingface.co)
- [ Chai](https://chai.ml)
- [ How bad is your spotify?](https://pudding.cool/2020/12/judge-my-spotify)
- [ Playphrase.me](https://playphrase.me/)
- [ Dreamily](https://dreamily.ai/editor)
- [ Supermeme.ai](https://supermeme.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Seo
+
- [ Writer](https://writer.com)
- [ Jenni](https://jenni.ai)
- [ Articleforge](https://articleforge.com)
- [ Wordhero](https://wordhero.co)
- [ Ai-writer](https://ai-writer.com)
- [ Growthbar](https://growthbarseo.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Video editing
+
- [ Wave.video](https://wave.video)
- [ Topaz video ai](https://topazlabs.com/topaz-video-ai)
- [ Unscreen.com](https://unscreen.com)
- [ Pictory](https://pictory.ai)
- [ Type studio](https://typestudio.co/tool/video-to-text)
- [ Papercup](https://papercup.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Code assistant
+
- [ Ghostwriter](https://replit.com/site/ghostwriter)
- [ Fig ai](https://fig.io/user-manual/ai)
- [ Continual](https://continual.ai)
- [ Cheat layer](https://cheatlayer.com)
- [ Kodezi ai](https://kodezi.com)
- [ Whatthediff](https://whatthediff.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Mac
+
- [ Whatthefont](https://myfonts.com)
- [ References.design](https://references.design)
- [ Swift ai](https://github.com/Swift-AI/Swift-AI)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Audio editing
+
- [ Voicemod](https://voicemod.net)
- [ Podcastle](https://podcastle.ai)
- [ Beatoven.ai](https://beatoven.ai)
- [ Altered](https://altered.ai)
- [ Cleanvoice ai](https://cleanvoice.ai)
- [ Krisp](https://krisp.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Copywriting
+
- [ Ink](https://inkforall.com)
- [ Respondable](https://boomeranggmail.com/respondable)
- [ Frase](https://frase.io)
- [ Anyword](https://anyword.com)
- [ Copysmith](https://copysmith.ai)
- [ Hypotenuse ai](https://hypotenuse.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### General writing
+
- [ Languagetool](https://languagetool.org)
- [ Wordtune](https://wordtune.com)
- [ Kickresume](https://kickresume.com)
- [ Nichess](https://nichesss.com)
- [ Wordai](https://wordai.com)
- [ Corrector app](https://corrector.app)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Summarizer
+
- [ Otter ai](https://otter.ai)
- [ Tldr this](https://tldrthis.com)
- [ Summari](https://summari.com)
- [ Tactiq](https://tactiq.io)
- [ Genei](https://genei.io)
- [ Upword](https://upword.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Video generator
+
- [ Invideo](https://invideo.io)
- [ Film](https://replicate.com/google-research/frame-interpolation)
- [ Synthesia](https://synthesia.io)
- [ Movio](https://movio.la)
- [ Hourone](https://hourone.ai)
- [ Colossyan](https://colossyan.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Legal assistant
+
- [ Donotpay](https://donotpay.com)
- [ Darrow ai](https://darrow.ai)
- [ Spellbook](https://spellbook.legal)
- [ Patentpal](https://patentpal.com)
- [ Legal robot](https://legalrobot.com)
- [ Detangle.ai](https://detangle.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Generative art
+
- [ Hotpot art generator](https://hotpot.ai/art-generator)
- [ Bannerbear](https://bannerbear.com)
- [ 6pen art](https://6pen.art)
- [ Memorable ad maker](https://admaker.memorable.io)
- [ Flair](https://withflair.ai)
- [ Designed with ai](https://designedwithai.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Text to speech
+
- [ Speechify](https://speechify.com)
- [ Fakeyou](https://fakeyou.com)
- [ Play.ht](https://play.ht)
- [ Wellsaidlabs](https://wellsaidlabs.com)
- [ Resemble](https://resemble.ai)
- [ Aiva](https://aiva.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Life assistant
+
- [ Resume worded](https://resumeworded.com/index.php)
- [ Replika](https://replika.com)
- [ Justlearn](https://justlearn.com)
- [ Thekeys](https://thekeys.ai)
- [ Looria](https://looria.com)
- [ Woebot health](https://woebothealth.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Image generator
+
- [ Hotpot.ai](https://hotpot.ai)
- [ Generated photos](https://generated.photos)
- [ Imgcreator](https://imgcreator.zmo.ai)
- [ Getimg.ai](https://getimg.ai)
- [ Stock ai](https://stockai.com)
- [ Go charlie](https://gocharlie.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Book
-- [ Sona](https://readthistwice.com/sona)
- {.icon-list .marker-none}
+- [ Sona](https://readthistwice.com/sona)
+{.icon-list .marker-none}
### Gaming
+
- [ Aidungeon](https://play.aidungeon.io)
- [ Eyeware beam](https://beam.eyeware.tech)
- [ Litrpg adventures](https://litrpgadventures.com)
- [ Charisma](https://charisma.ai)
- [ Hidden door](https://hiddendoor.co)
- [ Ggpredict](https://ggpredict.io)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Image scanning
+
- [ Thing translator](https://experiments.withgoogle.com/thing-translator)
- [ Polycam](https://poly.cam)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Sales
+
- [ Klaviyo sms assistant](https://klaviyo.com/product/whats-new/sms-assistant)
- [ Instantly](https://instantly.ai)
- [ Affinity](https://affinity.co)
- [ Wingman](https://trywingman.com)
- [ Lavender](https://lavender.ai)
- [ Cresta](https://cresta.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Audio
+
- [ Descript](https://descript.com)
- [ Lalal.ai voice cleaner](https://lalal.ai)
- [ Poly ai](https://poly.ai)
- [ Wzrd.ai](https://wzrd.ai)
- [ Rythmex](https://rythmex.com)
- [ Blogaudio](https://blogaudio.co)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Analytics
+
- [ Papers with code](https://paperswithcode.com)
- [ Explainpaper](https://explainpaper.com)
- [ Anania](https://anania.ai)
- [ Voiceops](https://voiceops.com)
- [ Stormly 2.0](https://stormly.com)
- [ Sahha](https://sahha.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Fintech
-- [ Nova money](https://novamoney.app.link/PH)
- {.icon-list .marker-none}
+- [ Nova money](https://novamoney.app.link/PH)
+{.icon-list .marker-none}
### Marketing
+
- [ Monkeylearn](https://monkeylearn.com)
- [ Networkai](https://wonsulting.com/networkai)
- [ Reply.io](https://reply.io)
- [ Outranking](https://outranking.io)
- [ Seo content assistant by searchatlas](https://linkgraph.io/seo-content-assistant)
- [ Adcreative.ai](https://adcreative.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Story teller
+
- [ Novelai](https://novelai.net)
- [ Artflow ai](https://artflow.ai)
- [ Subtxt](https://subtxt.app)
- [ Scene one](https://sceneone.app)
- [ Story path](https://storypath.app)
- [ What on earth?](https://whatonearth.xyz)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Low-code/no-code
+
- [ Vwo](https://vwo.com/testing)
- [ Mutiny](https://mutinyhq.com)
- [ Nanonets](https://nanonets.com)
- [ Axiom](https://axiom.ai)
- [ Viable](https://askviable.com)
- [ Durable](https://durable.co)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Art
+
- [ Wombo](https://wombo.art)
- [ Neural.love art generator](https://neural.love)
- [ Promptomania](https://promptomania.com)
- [ Lexica](https://lexica.art)
- [ Ai avatars](https://alethea.ai/avatars)
- [ Diffusionbee](https://diffusionbee.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Customer communication
-- [ Algolia recommend](https://algolia.com/products/recommendations)
- {.icon-list .marker-none}
+- [ Algolia recommend](https://algolia.com/products/recommendations)
+{.icon-list .marker-none}
### Chrome extensions
+
- [ Sendpulse for slack](https://sendpulse.com)
- [ X.ai](https://bizzabo.com)
- [ Pipecandy](https://pipecandy.com)
- [ Free article outline generator](https://surferseo.com/free-article-outline-generator)
- [ Fyle](https://fylehq.com)
- [ Socialbook cartoonizer](https://socialbook.io/cartoonize)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Search engine
+
- [ Algolia](https://algolia.com)
- [ Everypixel](https://everypixel.com)
- [ Andi](https://andisearch.com)
- [ One more ai](https://onemoreai.com)
- [ Imaiger](https://imaiger.com)
- [ Dreamsands](https://dreamsands.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Research
+
- [ Elicit](https://elicit.org)
- [ Scispace](https://typeset.io)
- [ Adept](https://adept.ai)
- [ Scholarcy](https://scholarcy.com)
- [ Consensus](https://consensus.app)
- [ Akkio](https://akkio.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Browser extensions
-- [ Motion task manager](https://usemotion.com)
- {.icon-list .marker-none}
+- [ Motion task manager](https://usemotion.com)
+{.icon-list .marker-none}
### Pc
-- [ Gradient°](https://paperspace.com/gradient)
- {.icon-list .marker-none}
+- [ Gradient°](https://paperspace.com/gradient)
+{.icon-list .marker-none}
### Prompt
+
- [ Img2prompt](https://replicate.com/methexis-inc/img2prompt)
- [ Openart](https://openart.ai)
- [ Decktopus](https://decktopus.com/blog/chatgpt-prompts-for-your-next-launch)
- [ Promptbase](https://promptbase.com)
- [ Krea](https://krea.ai)
- [ Pyttipanna](https://pyttipanna.xyz)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Email
+
- [ The landing page analyzer by unbounce](https://unbounce.com)
- [ Smart copy everywhere](https://unbounce.com/smart-copy-everywhere)
- [ Breadcrumbs reveal](https://breadcrumbs.io/reveal)
- [ Emerging tech brew](https://emergingtechbrew.com)
- [ Snazzy ai](https://snazzy.ai)
- [ Conduit](https://conduithq.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Image improvement
+
- [ Vanceai image upscaler](https://vanceai.com/image-enlarger)
- [ Cloudinary](https://cloudinary.com)
- [ Nero image upscaler](https://ai.nero.com/image-upscaler)
- [ Lensa](https://prisma-ai.com/lensa)
- [ Leiapix](https://convert.leiapix.com)
- [ Lama cleaner](https://github.com/Sanster/lama-cleaner)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Human resources
+
- [ Chatbot](https://chatbot.com/features)
- [ Moveworks](https://moveworks.com)
- [ Findem](https://findem.ai)
- [ Skillroads](https://skillroads.com)
- [ Qatalog](https://qatalog.com)
- [ Tars](https://hellotars.com/ph)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Website
+
- [ Getresponse](https://getresponse.com/features/website-builder)
- [ Aida](https://bookmark.com/ai-website-builder)
- [ Studio design](https://studio.design)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Branding
+
- [ Namesnack](https://namesnack.com)
- [ Namify](https://namify.tech)
- [ Namefruits](https://namefruits.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Speech
+
- [ Elsa speech analyzer](https://speechanalyzer.elsaspeak.com)
- [ Speech-to-speech](https://resemble.ai/speech-to-speech)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Communication
-- [ Poised 2.0](https://poised.com)
- {.icon-list .marker-none}
+- [ Poised 2.0](https://poised.com)
+{.icon-list .marker-none}
### Other
+
- [ Yolo](https://pjreddie.com/darknet/yolo)
- [ How normal am i?](https://hownormalami.eu)
- [ Toonify](https://toonify.photos)
- [ Gpt-3 crush](https://gptcrush.com/resources)
- [ Handl](https://handl.ai)
- [ Ai cheatsheet](https://aicheatsheet.comuzi.xyz)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Health
-- [ Ubie ai symptom checker](https://ubiehealth.com)
- {.icon-list .marker-none}
+- [ Ubie ai symptom checker](https://ubiehealth.com)
+{.icon-list .marker-none}
### Aggregator
+
- [ Gpt-3 demo](https://gpt3demo.com)
- [ Futurepedia](https://futurepedia.io)
- [ Ai library](https://library.phygital.plus)
- [ Smoking robot ai](https://smokingrobot.ai)
- [ All things ai](https://allthingsai.com)
- [ Aitogrow](https://aitogrow.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Customer support
+
- [ Harvey](https://hiverhq.com/harvey-ai-customer-support)
- [ Forethought](https://forethought.ai)
- [ Kore.ai](https://kore.ai)
- [ Regie](https://regie.ai)
- [ Typewise](https://typewise.app)
- [ Quickchat](https://quickchat.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Movies
-- [ Taste](https://taste.io)
- {.icon-list .marker-none}
+- [ Taste](https://taste.io)
+{.icon-list .marker-none}
### Video
+
- [ Deepfakesweb](https://deepfakesweb.com)
- [ Fineshare](https://fineshare.com/finecam)
- [ Wisecut](https://wisecut.video)
- [ Elai](https://elai.io)
- [ Move](https://move.ai)
- [ Twelve labs](https://twelvelabs.io)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Email assistant
+
- [ Missive](https://missiveapp.com)
- [ Magicreach](https://magicreach.ai)
- [ Ellie](https://ellieai.com)
- [ Superreply](https://superreply.co)
- [ Chatgpt writer](https://chatgptwriter.ai)
- [ Superhuman](https://superhuman.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Messaging
+
- [ Madgicx for facebook ads](https://madgicx.com)
- [ Bottr.me](https://bottr.me)
- [ Octane ai](https://octaneai.com)
- [ Nerdify bot](https://gonerdify.com/nerdybot)
- [ Fritz](https://fritz.ai/launch)
- [ Abe](https://abe.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Generative video
+
- [ Lumen5](https://lumen5.com)
- [ Livereacting](https://livereacting.com)
- [ Reachout.ai](https://reachout.ai)
- [ One shot talking face](https://huggingface.co/spaces/camenduru/one-shot-talking-face)
- [ Boolvideo](https://boolvideoinvite.carrd.co)
- [ Quickvid](https://quickvid.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Safari extensions
-- [ Rezi 3.0](https://rezi.ai/ai-resume-builder)
- {.icon-list .marker-none}
+- [ Rezi 3.0](https://rezi.ai/ai-resume-builder)
+{.icon-list .marker-none}
### Transcriber
+
- [ Fireflies.ai](https://fireflies.ai)
- [ Steno](https://steno.ai)
- [ Peech](https://peech-ai.com)
- [ Anypod](https://anypod.ai)
- [ Supertranslate](https://supertranslate.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Motion capture
+
- [ Rokoko](https://rokoko.com)
- [ Cascadeur](https://cascadeur.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Voice
+
- [ Fineshare](https://fineshare.com/finevoice)
- [ Voice ai](https://voice.ai)
- [ Vocads survey](https://vocads.com)
- [ Whisperapi](https://whisperapi.com)
- [ Createaivoiceovers](https://createaivoiceovers.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Machine learning
+
- [ H2o ai](https://h2o.ai)
- [ Nocodebooth](https://nocodebooth.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Social media assistant
+
- [ Tweet hunter](https://tweethunter.io)
- [ Socialbu](https://socialbu.com)
- [ Predis](https://predis.ai)
- [ Feedhive](https://feedhive.com)
- [ Audiolabs](https://audiolabs.io)
- [ Zaap.ai](https://zaap.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Inspiration
+
- [ Gpt cheat sheet](https://entreresource.com/chatgpt-cheat-sheet)
- [ 100+ ai prompts](https://trello.com/b/4BPkSY1w/100-ai-prompts-resources-prompt-lovers)
- [ Midjourney prompt database](https://aealexander.com/midjourney-prompt-database)
- [ Midjourney prompt tool](https://prompt.noonshot.com)
- [ Saas library](https://saaslibrary.dev)
- [ Ordinary prompts](https://ordinarypeopleprompts.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Stocks
-- [ Torto.ai](https://torto.ai/welcome)
- {.icon-list .marker-none}
+- [ Torto.ai](https://torto.ai/welcome)
+{.icon-list .marker-none}
### Voice modulation
+
- [ Voice.ai](https://voice.ai/voice-ai-beta/I2p6L)
- [ Metavoice studio](https://studio.themetavoice.xyz)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Paraphraser
+
- [ Paraphraser](https://paraphrasetool.com)
- [ Rephrasely](https://rephrasely.com)
- [ Bearly](https://bearly.ai)
- [ Wordfixerbot](https://wordfixerbot.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Amazon
-- [ Thereviewindex](https://TheReviewIndex.com/us)
- {.icon-list .marker-none}
+- [ Thereviewindex](https://TheReviewIndex.com/us)
+{.icon-list .marker-none}
### Personalized videos
+
- [ Windsor](https://windsor.io)
- [ Rephrase](https://rephrase.ai)
- [ Maverick](https://trymaverick.com)
- [ Bhuman](https://bhuman.ai)
- [ Vidyo](https://vidyo.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Spreadsheets
+
- [ Excel formula bot](https://excelformulabot.com)
- [ Sheetgod](https://boloforms.com/sheetgod)
- [ Sheet ai](https://sheetai.app)
- [ Sheet+](https://sheetplus.ai)
- [ Simple ml](https://workspace.google.com/marketplace/app/simple_ml_for_sheets/685936641092)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Ipad
-- [ Brain.fm](https://brain.fm)
- {.icon-list .marker-none}
+- [ Brain.fm](https://brain.fm)
+{.icon-list .marker-none}
### Task management
+
- [ Levity](https://levity.ai)
- [ Athena](https://apac.ai)
- [ Teacherbot](https://teacherbot.io)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Email marketing
-- [ Phrasee](https://phrasee.co)
- {.icon-list .marker-none}
+- [ Phrasee](https://phrasee.co)
+{.icon-list .marker-none}
### Fashion
+
- [ Cala](https://ca.la)
- [ Botika](https://botika.io)
- [ Fashionadvisorai](https://fashionadvisorai.com)
- [ Visualhound](https://visualhound.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Generator
-- [ Blocksurvey](https://blocksurvey.io/ai-surveys)
- {.icon-list .marker-none}
+- [ Blocksurvey](https://blocksurvey.io/ai-surveys)
+{.icon-list .marker-none}
### 3d
+
- [ Deepmotion](https://deepmotion.com)
- [ Plask](https://plask.ai)
- [ Imagine 3d](https://captures.lumalabs.ai/imagine)
- [ Luma ai](https://lumalabs.ai)
- [ Kaedim](https://kaedim3d.com)
- [ Masterpiece studio](https://masterpiecestudio.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Home
+
- [ Shapescale](https://shapescale.com)
- [ Smartmirror](https://github.com/Shinao/SmartMirror)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Api
+
- [ Deepgram](https://deepgram.com)
- [ Banana](https://banana.dev)
- [ Perspective](https://perspectiveapi.com)
- [ Theneo](https://theneo.io)
- [ Base64.ai](https://base64.ai)
- [ Trueface.ai](https://trueface.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Software engineering
-- [ Prodigy](https://prodi.gy)
- {.icon-list .marker-none}
+- [ Prodigy](https://prodi.gy)
+{.icon-list .marker-none}
### Open source
+
- [ Floyd](https://blog.floydhub.com)
- [ Mindsdb](https://cloud.mindsdb.com)
- [ Evidently ai](https://evidentlyai.com)
- [ Warriorjs](https://warrior.js.org)
- [ Datature](https://datature.io)
- [ Viseo bot maker](https://bot.viseo.io)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Chat
+
- [ Ask poppy](https://poppylist.com/askpoppy)
- [ Gpt chatbot](https://chatbotgpt3.bubbleapps.io/version-test)
- [ Voiceflow](https://voiceflow.com)
- [ Chatgpt for siri](https://mobilespoon.net/2023/01/how-to-activate-chatgpt-with-siri-and-save-response.html)
- [ Trudo](https://trudo.ai)
- [ Unschooler](https://unschooler.me)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Playstation
-- [ Chatfuel](https://chatfuel.com)
- {.icon-list .marker-none}
+- [ Chatfuel](https://chatfuel.com)
+{.icon-list .marker-none}
### Startup
+
- [ Rationale](https://rationale.jina.ai)
- [ Finta](https://trustfinta.com)
- [ Ideabuddy](https://ideabuddy.com)
- [ Broadn](https://broadn.io)
- [ Validator ai](https://validatorai.com)
- [ Namelix](https://namelix.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Experiments
+
- [ Alethea](https://alethea.ai)
- [ This model does not exist](https://thismodeldoesnotexist.co)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Windows
-- [ Superannotate desktop](https://superannotate.com)
- {.icon-list .marker-none}
+- [ Superannotate desktop](https://superannotate.com)
+{.icon-list .marker-none}
### Generative code
+
- [ Gradio](https://gradio.app)
- [ Obviously ai](https://obviously.ai)
- [ Sourceai](https://sourceai.dev)
- [ No-code ai model builder](https://no-code-ai-model-builder.com)
- [ Codesquire](https://codesquire.ai)
- [ Aigur](https://aigur.dev)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Photography
+
- [ Portrait by vana](https://portrait.vana.com)
- [ Photorestoration](https://photorestoration.ai)
- [ Ecosnap](https://ecosnap.vercel.app)
- [ Pose animator](https://github.com/yemount/pose-animator)
- [ Facebook computer vision tags](https://github.com/ageitgey/show-facebook-computer-vision-tags)
- [ Dpth](https://dpth.app)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Healthcare
-- [ Whisper ai](https://whisper.ai)
- {.icon-list .marker-none}
+- [ Whisper ai](https://whisper.ai)
+{.icon-list .marker-none}
### Resources
+
- [ Lablab.ai](https://lablab.ai)
- [ Ai art apps database](https://aiartapps.com)
- [ Ai experiments](https://experiments.withgoogle.com/collection/ai)
- [ Flowgpt](https://flowgpt.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Growth hacking
-- [ Depict.ai](https://depict.ai)
- {.icon-list .marker-none}
+- [ Depict.ai](https://depict.ai)
+{.icon-list .marker-none}
### Kids
-- [ Brickit](https://brickit.app)
- {.icon-list .marker-none}
+- [ Brickit](https://brickit.app)
+{.icon-list .marker-none}
### Search
-- [ Open](https://open.ai)
- {.icon-list .marker-none}
+- [ Open](https://open.ai)
+{.icon-list .marker-none}
### Speech-to-text
+
- [ Glasp youtube summarizer](https://glasp.co/youtube-summary)
- [ Relayed](https://relayed.ai)
- [ Meeple](https://meeple.ai)
- [ Towords](https://app.towords.io)
- [ Melville app](https://usemelville.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Articles
-- [ Riku](https://riku.ai/creators)
- {.icon-list .marker-none}
+- [ Riku](https://riku.ai/creators)
+{.icon-list .marker-none}
### Podcast
+
- [ Snipd podcast summaries](https://snipd.com/ai-podcast-summaries)
- [ Sumly](https://sumly.ai)
- [ Tapesearch](https://tapesearch.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Parenting
+
- [ Parentivity](https://smartivity.in/pages/parentivity_bot)
- [ Sesh](https://gosesh.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Education assistant
+
- [ Brain Buddy](https://brain-buddy.com/)
- [ Kobra](https://kobra.dev)
- [ Boldvoice](https://boldvoice.com)
@@ -956,375 +957,376 @@ Getting Started
- [ Eli5](https://explainlikeimfive.io)
- [ Tutorai](https://tutorai.me)
- [ Yip](https://yippity.io)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Tracking
-- [ Hexowatch](https://hexowatch.com)
- {.icon-list .marker-none}
+- [ Hexowatch](https://hexowatch.com)
+{.icon-list .marker-none}
### Privacy
+
- [ Anonymous camera](https://playground.ai)
- [ Guard](https://useguard.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Vehicle
-- [ Polymath robotics](https://polymathrobotics.com)
- {.icon-list .marker-none}
+- [ Polymath robotics](https://polymathrobotics.com)
+{.icon-list .marker-none}
### Twitter
+
- [ Tribescaler](https://tribescaler.com)
- [ Kanye tweet generator](https://kanyegenerator.com)
- [ Tweetspear](https://tweetspear.com)
- [ Tweept3](https://tweept3.com)
- [ Tweetai](https://tweetai.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Dev
+
- [ Eden ai](https://edenai.co)
- [ Maya ai](https://meetmaya.world)
- [ Testkit](https://testkit.app)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Saas
+
- [ Yous](https://yous.ai)
- [ Docent](https://trydocent.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Podcasting
-- [ Audo ai](https://audo.ai)
- {.icon-list .marker-none}
+- [ Audo ai](https://audo.ai)
+{.icon-list .marker-none}
### Bot
-- [ Hirex.ai](https://hirex.ai)
- {.icon-list .marker-none}
+- [ Hirex.ai](https://hirex.ai)
+{.icon-list .marker-none}
### Finance
+
- [ Glean ai](https://glean.ai)
- [ Avanzai](https://avanz.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Self-improvement
-- [ Huberman ai](https://huberman.rile.yt)
- {.icon-list .marker-none}
+- [ Huberman ai](https://huberman.rile.yt)
+{.icon-list .marker-none}
### Robots
+
- [ Activechat bot trainer](https://activechat.ai/intents-and-insights)
- [ Motion ai](https://motion.ai)
- [ Api to bot](https://apitobot.io)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Slack
+
- [ Thegist](https://thegist.ai)
- [ Chatbottle](https://chatbottle.co)
- [ Bot builder by recast.ai](https://cai.tools.sap)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Investing
-- [ Founderfit by koble](https://koble.ai/founderfit)
- {.icon-list .marker-none}
+- [ Founderfit by koble](https://koble.ai/founderfit)
+{.icon-list .marker-none}
### Questions
+
- [ Jeeves](https://therocketbrew.com/jeeves)
- [ God in a box](https://godinabox.co)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Construction
-- [ Aim](https://aim.vision)
- {.icon-list .marker-none}
+- [ Aim](https://aim.vision)
+{.icon-list .marker-none}
### Data
+
- [ Genius sheets](https://geniussheets.com)
- [ Ask command](https://askcommand.com)
- [ Nolu](https://noluai.com)
- [ Lookup](https://uselookup.com)
- [ Olli](https://olli.ai)
- [ Autopredict](https://autopredict.co.uk)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Plugin
-- [ Jetbrains ide plugin](https://tldrdev.ai)
- {.icon-list .marker-none}
+- [ Jetbrains ide plugin](https://tldrdev.ai)
+{.icon-list .marker-none}
### Pet
+
- [ Digital dogs](https://digitaldogs.ai)
- [ Aipetavatar](https://aipetavatar.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Sports
-- [ Ai sports prediction](https://sportsprediction.ai)
- {.icon-list .marker-none}
+- [ Ai sports prediction](https://sportsprediction.ai)
+{.icon-list .marker-none}
### User experience
+
- [ Clipdrop](https://arcopypaste.app)
- [ Airim 2.0](https://getairim.com)
- [ Akin](https://akin.nz)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Quiz
-- [ Quizgecko](https://quizgecko.com)
- {.icon-list .marker-none}
+- [ Quizgecko](https://quizgecko.com)
+{.icon-list .marker-none}
### Sql
+
- [ Decile](https://decile.app)
- [ Aihelperbot](https://aihelperbot.com)
- [ Ai query](https://aiquery.co)
- [ Ai2sql](https://ai2sql.io)
- [ Channel](https://usechannel.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Linkedin
-- [ Linkedin posts generator](https://sid.black/tools/linkedin-post-generator)
- {.icon-list .marker-none}
+- [ Linkedin posts generator](https://sid.black/tools/linkedin-post-generator)
+{.icon-list .marker-none}
### Food
+
- [ Ai recipe generator](https://ai-recipes.softr.app)
- [ Foodai](https://foodai.app)
- [ What cake to bake?](https://whatcaketobake.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Tool
+
- [ Autoname](https://autoname.org)
- [ Assetsai](https://assetsai.art)
- [ Aibusinesstool](https://aibusinesstool.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Emoji
-- [ Ph bench](https://phben.ch)
- {.icon-list .marker-none}
+- [ Ph bench](https://phben.ch)
+{.icon-list .marker-none}
### Newsletters
-- [ Machine learnings](https://subscribe.machinelearnings.co)
- {.icon-list .marker-none}
+- [ Machine learnings](https://subscribe.machinelearnings.co)
+{.icon-list .marker-none}
### Streaming services
-- [ Theirtube](https://their.tube)
- {.icon-list .marker-none}
+- [ Theirtube](https://their.tube)
+{.icon-list .marker-none}
### Excel
-- [ Formula dog](https://formula.dog)
- {.icon-list .marker-none}
+- [ Formula dog](https://formula.dog)
+{.icon-list .marker-none}
### Ai detection
+
- [ Detect gpt](https://thomas.io/detect-gpt)
- [ Is this image nsfw?](https://nsfw.m1guelpf.me)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### News
+
- [ Speechkit](https://speechkit.io)
- [ Clarity](https://useclarity.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Vacation
-- [ Roamr](https://letsroam.app)
- {.icon-list .marker-none}
+- [ Roamr](https://letsroam.app)
+{.icon-list .marker-none}
### Logo generator
-- [ Make logo ai](https://makelogoai.com)
- {.icon-list .marker-none}
+- [ Make logo ai](https://makelogoai.com)
+{.icon-list .marker-none}
### Real estate
+
- [ Ai room planner](https://airoomplanner.com)
- [ Coolaiid](https://coolaiid.com)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Assistant
-- [ Eddyai](https://eddyai.com)
- {.icon-list .marker-none}
+- [ Eddyai](https://eddyai.com)
+{.icon-list .marker-none}
### Bots
-- [ Ai chatbots in messengers](https://ai-chatbots.pulse.is)
- {.icon-list .marker-none}
+- [ Ai chatbots in messengers](https://ai-chatbots.pulse.is)
+{.icon-list .marker-none}
### Advertising
-- [ Jot](https://jotapp.tech)
- {.icon-list .marker-none}
+- [ Jot](https://jotapp.tech)
+{.icon-list .marker-none}
### Gift ideas
+
- [ Giftastic.ai](https://giftastic.ai)
- [ Cool gift ideas](https://coolgiftideas.io)
- [ Elf help](https://elfhelp.ai)
- {.icon-list .marker-none}
-
+{.icon-list .marker-none}
### Text-to-speech
-- [ Verbatik](https://verbatik.com)
- {.icon-list .marker-none}
+- [ Verbatik](https://verbatik.com)
+{.icon-list .marker-none}
### Character
-- [ Salewhale](https://salewhale.chat)
- {.icon-list .marker-none}
+- [ Salewhale](https://salewhale.chat)
+{.icon-list .marker-none}
### Memory
-- [ Heyday](https://heyday.xyz)
- {.icon-list .marker-none}
+- [ Heyday](https://heyday.xyz)
+{.icon-list .marker-none}
### Feedback
-- [ Myess](https://myess.ai)
- {.icon-list .marker-none}
+- [ Myess](https://myess.ai)
+{.icon-list .marker-none}
### Background
-- [ Zoomscape](https://zoomscape.ai)
- {.icon-list .marker-none}
+- [ Zoomscape](https://zoomscape.ai)
+{.icon-list .marker-none}
### Support
-- [ Resolveai](https://resolveai.co)
- {.icon-list .marker-none}
+- [ Resolveai](https://resolveai.co)
+{.icon-list .marker-none}
### Rank
-- [ Reviewz](https://reviewz.ai)
- {.icon-list .marker-none}
+- [ Reviewz](https://reviewz.ai)
+{.icon-list .marker-none}
### Letter
-- [ Recommendme](https://recommendme.to)
- {.icon-list .marker-none}
+- [ Recommendme](https://recommendme.to)
+{.icon-list .marker-none}
### Gift
-- [ Text2present](https://text2present.com)
- {.icon-list .marker-none}
+- [ Text2present](https://text2present.com)
+{.icon-list .marker-none}
### Dream
-- [ Scarlettpanda](https://scarlettpanda.com)
- {.icon-list .marker-none}
+- [ Scarlettpanda](https://scarlettpanda.com)
+{.icon-list .marker-none}
### Excuse
-- [ Excuses ai](https://excuses.ai)
- {.icon-list .marker-none}
+- [ Excuses ai](https://excuses.ai)
+{.icon-list .marker-none}
### Game
-- [ Stable diffusion multiplayer](https://huggingface.co/spaces/huggingface-projects/stable-diffusion-multiplayer)
- {.icon-list .marker-none}
+- [ Stable diffusion multiplayer](https://huggingface.co/spaces/huggingface-projects/stable-diffusion-multiplayer)
+{.icon-list .marker-none}
### Edit
-- [ Bigmp4](https://bigmp4.com)
- {.icon-list .marker-none}
+- [ Bigmp4](https://bigmp4.com)
+{.icon-list .marker-none}
### Translation
-- [ Languagepro](https://bot.petit.today)
- {.icon-list .marker-none}
+- [ Languagepro](https://bot.petit.today)
+{.icon-list .marker-none}
### Startup tools
-- [ Releasenote.ai](https://releasenote.ai)
- {.icon-list .marker-none}
+- [ Releasenote.ai](https://releasenote.ai)
+{.icon-list .marker-none}
### E-commerce
-- [ Recommendix](https://recommendix.com/es-ar)
- {.icon-list .marker-none}
+- [ Recommendix](https://recommendix.com/es-ar)
+{.icon-list .marker-none}
### Beauty
-- [ Hairbyai](https://hairbyai.com)
- {.icon-list .marker-none}
+- [ Hairbyai](https://hairbyai.com)
+{.icon-list .marker-none}
### Photo
+
- [ Camira](https://camira.ai)
- {.icon-list .marker-none}
+
+{.icon-list .marker-none}
diff --git a/source/_posts/airtable.md b/source/_posts/airtable.md
index 9e8db4fe..efd1b2e0 100644
--- a/source/_posts/airtable.md
+++ b/source/_posts/airtable.md
@@ -2,96 +2,90 @@
title: Airtable
date: 2022-11-23 16:23:31.699659
background: bg-[#f1b73f]
-label:
-tags:
- -
- -
+label:
+tags:
+ -
+ -
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 36 keyboard shortcuts found in Airtable
+ A visual cheat-sheet for the 36 keyboard shortcuts found in Airtable
---
-
-
-Keyboard Shortcuts
-------------------
-
-
+## Keyboard Shortcuts
### General {.row-span-3}
-Shortcut | Action
----|---
-`Ctrl` `Z` | Undo action
-`Ctrl` `Shift` `Z` | Redo action
-`Ctrl` `P` | Print the current table view or current expanded record (if inside an expanded record)
-`Ctrl` `J` | Opens the table switcher in the current base
-`Ctrl` `K` | Opens the quick base switcher if on the home screen or inside a base
-`Ctrl` `Shift` `K` | Opens the view switcher in the current base
-`Ctrl` `Shift` `F` | Opens the filter menu in the current view, press enter to create a new filter
-`Ctrl` `Shift` `D` | Opens the grouped records menu in the current view, press enter to collapse or expand all groups
-`Ctrl` `Shift` `S` | Opens the sort menu in the current view, press enter to re-apply the most recent sort
-`Ctrl` `Shift` `\` | Toggles blocks
-`Ctrl` `F` | Opens the find bar, use esc to close it
-`Ctrl` `;` | Sets the selected date/datetime field to now
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ------------------------------------------------------------------------------------------------ |
+| `Ctrl` `Z` | Undo action |
+| `Ctrl` `Shift` `Z` | Redo action |
+| `Ctrl` `P` | Print the current table view or current expanded record (if inside an expanded record) |
+| `Ctrl` `J` | Opens the table switcher in the current base |
+| `Ctrl` `K` | Opens the quick base switcher if on the home screen or inside a base |
+| `Ctrl` `Shift` `K` | Opens the view switcher in the current base |
+| `Ctrl` `Shift` `F` | Opens the filter menu in the current view, press enter to create a new filter |
+| `Ctrl` `Shift` `D` | Opens the grouped records menu in the current view, press enter to collapse or expand all groups |
+| `Ctrl` `Shift` `S` | Opens the sort menu in the current view, press enter to re-apply the most recent sort |
+| `Ctrl` `Shift` `\` | Toggles blocks |
+| `Ctrl` `F` | Opens the find bar, use esc to close it |
+| `Ctrl` `;` | Sets the selected date/datetime field to now |
+{.shortcuts}
### Grid View {.row-span-3}
-Shortcut | Action
----|---
-`Ctrl` `C` | Copy a cell or range of cells
-`Ctrl` `X` | Cut a cell or range of cells
-`Ctrl` `V` | Paste a cell (if you select a range of cells, you can paste the same value into multiple cells at once)
-`Space` | Expand the active record, use esc to return to the table
-`Shift` `Space` | Expand the active cell, you can then use arrow keys to move to different cells
-`PgUp` | Scrolls one screen up
-`PgDn` | Scrolls one screen down
-`Alt` `PgUp` | Scrolls one screen left
-`Alt` `PgDn` | Scrolls one screen right
-`Ctrl` `(arrows)` | Jump to the edge of the table
-`Ctrl` `Shift` `(arrows)` | Jump to the edge of table and select cells
-`Shift` `(arrows)` | Select range of cells, you can also click while holding shift to select cells
-`Shift` `Enter` | Insert a record below the selected cell
-`Enter` | Edit the selected cell
-{.shortcuts}
+| Shortcut | Action |
+| ------------------------- | ------------------------------------------------------------------------------------------------------- |
+| `Ctrl` `C` | Copy a cell or range of cells |
+| `Ctrl` `X` | Cut a cell or range of cells |
+| `Ctrl` `V` | Paste a cell (if you select a range of cells, you can paste the same value into multiple cells at once) |
+| `Space` | Expand the active record, use esc to return to the table |
+| `Shift` `Space` | Expand the active cell, you can then use arrow keys to move to different cells |
+| `PgUp` | Scrolls one screen up |
+| `PgDn` | Scrolls one screen down |
+| `Alt` `PgUp` | Scrolls one screen left |
+| `Alt` `PgDn` | Scrolls one screen right |
+| `Ctrl` `(arrows)` | Jump to the edge of the table |
+| `Ctrl` `Shift` `(arrows)` | Jump to the edge of table and select cells |
+| `Shift` `(arrows)` | Select range of cells, you can also click while holding shift to select cells |
+| `Shift` `Enter` | Insert a record below the selected cell |
+| `Enter` | Edit the selected cell |
+{.shortcuts}
### Gallery View
-Shortcut | Action
----|---
-`Ctrl` `Up/Down` | Scroll to edge of gallery
-{.shortcuts}
+| Shortcut | Action |
+| ---------------- | ------------------------- |
+| `Ctrl` `Up/Down` | Scroll to edge of gallery |
+{.shortcuts}
### Kanban View
-Shortcut | Action
----|---
-`Left` | Scroll kanban board to the left by one stack
-`Right` | Scroll kanban board to the right by one stack
-`Ctrl` `Left` | Scroll kanban board to the left edge
-`Ctrl` `Right` | Scroll kanban board to the right edge
-`Ctrl` `Up` | Scroll all stacks to the top
-`Ctrl` `Down` | Scroll all stacks to the bottom
-{.shortcuts}
+| Shortcut | Action |
+| -------------- | --------------------------------------------- |
+| `Left` | Scroll kanban board to the left by one stack |
+| `Right` | Scroll kanban board to the right by one stack |
+| `Ctrl` `Left` | Scroll kanban board to the left edge |
+| `Ctrl` `Right` | Scroll kanban board to the right edge |
+| `Ctrl` `Up` | Scroll all stacks to the top |
+| `Ctrl` `Down` | Scroll all stacks to the bottom |
+{.shortcuts}
### Expanded Record
-Shortcut | Action
----|---
-`Ctrl` `Shift` `<` | Move to the previous record while viewing an expanded record
-`Ctrl` `Shift` `>` | Move to the next record while viewing an expanded record
-`Esc` | Close expanded record
-{.shortcuts}
-
+| Shortcut | Action |
+| ------------------ | ------------------------------------------------------------ |
+| `Ctrl` `Shift` `<` | Move to the previous record while viewing an expanded record |
+| `Ctrl` `Shift` `>` | Move to the next record while viewing an expanded record |
+| `Esc` | Close expanded record |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Airtable](https://support.airtable.com/hc/en-us/articles/204143385-Airtable-keyboard-shortcuts) _(support.airtable.com)_
+- [Keyboard shortcuts for Airtable](https://support.airtable.com/hc/en-us/articles/204143385-Airtable-keyboard-shortcuts)
+ _(support.airtable.com)_
diff --git a/source/_posts/alan-ai.md b/source/_posts/alan-ai.md
index b8740a9a..d0ae0f49 100644
--- a/source/_posts/alan-ai.md
+++ b/source/_posts/alan-ai.md
@@ -3,76 +3,85 @@ title: Alan AI
date: 2023-03-03 6:00:00
background: bg-[#4aa181]
tags:
- - AI
- - AlanAI
- - Prompts
- - Tips
+ - AI
+ - AlanAI
+ - Prompts
+ - Tips
categories:
- - Toolkit
-intro: This cheat sheet covers all major script concepts, client API methods, handlers and other tools to create a multimodal conversational experience with Alan AI
+ - Toolkit
+intro:
+ This cheat sheet covers all major script concepts, client API methods, handlers and other tools to create a multimodal
+ conversational experience with Alan AI
---
-### Legend
+### Legend
-- ``pattern`` — phrase to invoke a voice/text command or a response to be played
-- ``value`` — specified value
-- ``params`` — passed parameters
-- ``action`` — action to be performed
-- ``output`` — data outcome
-- ``[...]`` — optional data or parameters
+- `pattern` — phrase to invoke a voice/text command or a response to be played
+- `value` — specified value
+- `params` — passed parameters
+- `action` — action to be performed
+- `output` — data outcome
+- `[...]` — optional data or parameters
-Dialog script
--------------
+## Dialog script
### Intents & patterns
Define a voice/text command to play a response
-``` {.wrap}
+```{.wrap}
intent('pattern'[, 'patternN'], reply('pattern'))
```
Define a voice/text command to play a response or perform an action
-``` {.wrap}
+
+```{.wrap}
intent('pattern'[, 'patternN'], p => { action })
```
Define alternatives
-``` {.wrap}
+
+```{.wrap}
intent('phrase1|phrase2')
```
Define optional words and phrases
-``` {.wrap}
+
+```{.wrap}
intent('pattern (optional phrase|)')
```
-
-
### Response functions
Play a response (in case of multiple patterns, a response is picked at random)
-``` {.wrap}
+
+```{.wrap}
reply('pattern'[, 'patternN'])
```
Play a response
-``` {.wrap}
+
+```{.wrap}
p.play('pattern')
```
-Define voice settings for the assistant reply: ``accent (en, fr, de, it, ru, es)``, ``gender (male/female)``, ``voice type``, ``speaking pitch``, ``speaking rate``
-``` {.wrap}
+Define voice settings for the assistant reply: `accent (en, fr, de, it, ru, es)`, `gender (male/female)`, `voice type`,
+`speaking pitch`, `speaking rate`
+
+```{.wrap}
p.play([voice(code, gender, type, pitch, rate), ]'pattern')
```
-Define play options: ``force:true`` (execute if the button is inactive), ``activate:true`` (activate the button before), ``deactivate:true`` (deactivate the button after)
-``` {.wrap}
+Define play options: `force:true` (execute if the button is inactive), `activate:true` (activate the button before),
+`deactivate:true` (deactivate the button after)
+
+```{.wrap}
p.play('pattern'[, opts(options)])
```
Send a command to the app
-``` {.wrap}
+
+```{.wrap}
p.play({command:data})
```
@@ -80,31 +89,31 @@ p.play({command:data})
Define a static list of values expected in the input
-``` {.wrap}
+```{.wrap}
$(SLOTNAME value1|value2) => p.SLOTNAME.value
```
Provide labels to classify or identify the slot values
-``` {.wrap}
+```{.wrap}
$(SLOTNAME value1~label1|value2~label2) => p.SLOTNAME.label
```
Enable fuzzy matching to capture similar variants
-``` {.wrap}
+```{.wrap}
$(SLOTNAME~ value1|value2) => p.SLOTNAME.value
```
Make a slot optional
-``` {.wrap}
+```{.wrap}
$(SLOTNAME value1|value2|)
```
Capture several slot values
-``` {.wrap}
+```{.wrap}
intent('$(SLOTNAME value1|value2) and $(SLOTNAME value1|value2 )') => p.SLOTNAME_ (array), p.SLOTNAME_[0].value, p.SLOTNAME_[1].value
```
@@ -112,37 +121,37 @@ intent('$(SLOTNAME value1|value2) and $(SLOTNAME value1|value2 )') => p.SLOTNAME
Capture date values
-``` {.wrap}
+```{.wrap}
$(DATE) => p.DATE.value, p.DATE.moment, p.DATE.luxon
```
Capture time values
-``` {.wrap}
+```{.wrap}
$(TIME) => p.TIME.value, p.TIME.moment
```
Capture cardinal numbers
-``` {.wrap}
+```{.wrap}
$(NUMBER) => p.NUMBER.value, p.NUMBER.number
```
Capture ordinal numbers
-``` {.wrap}
+```{.wrap}
$(ORDINAL) => p.ORDINAL.value, p.ORDINAL.number
```
Capture locations
-``` {.wrap}
+```{.wrap}
$(LOC) => p.LOC.value
```
Capture names
-``` {.wrap}
+```{.wrap}
$(NAME) => p.NAME.value
```
@@ -150,21 +159,21 @@ $(NAME) => p.NAME.value
Define a dynamic slot at the project level
-``` {.wrap}
+```{.wrap}
project.name = {en: "value1|value2|value3"}
$(SLOTNAME p:name) => p.SLOTNAME.value
```
Define a dynamic slot at the dialog session level
-``` {.wrap}
+```{.wrap}
p.userData.name = {en: "value1|value2|value3"}
$(SLOTNAME u:name) => p.SLOTNAME.value
```
Get data for a dynamic slot with the visual state
-``` {.wrap}
+```{.wrap}
let name = ["value1|value2|value3"]
p.visual.data = {en: name};
$(SLOTNAME v:name) => p.SLOTNAME.value
@@ -172,7 +181,7 @@ $(SLOTNAME v:name) => p.SLOTNAME.value
Define a dynamic slot in a short form
-``` {.wrap}
+```{.wrap}
project.name = {en: "value1|value2|value3"}
$(p:name) => p.SLOTNAME.value
```
@@ -185,19 +194,18 @@ Make a dynamic slot optional: see [User-defined slots](#user-defined-slots).
Capture several slot values: see [User-defined slots](#user-defined-slots).
-
### RegEx slots
Capture digit and/or letter combination
-``` {.wrap}
+```{.wrap}
const reg = "([A-Za-z]{1}\\s?){6}"
$(SLOTNAME* ${reg}) => p.SLOTNAME.value
```
Capture any user’s input
-``` {.wrap}
+```{.wrap}
$(SLOTNAME* .+) => p.SLOTNAME.value
```
@@ -205,50 +213,49 @@ $(SLOTNAME* .+) => p.SLOTNAME.value
Define a context
-``` {.wrap}
+```{.wrap}
let contextName = context(() => { action })
```
Activate a context
-``` {.wrap}
+```{.wrap}
intent('pattern', p => {..., p.then(contextName)}
```
Pass data to the context
-``` {.wrap}
+```{.wrap}
p.then(contextName, state: {data:yourData}) => p.state.data
```
Resolve a context
-``` {.wrap}
+```{.wrap}
p.resolve([data:yourData])
```
-
Reset a context
-``` {.wrap}
+```{.wrap}
p.resetContext()
```
Define intents to be matched at any time without switching the current context
-``` {.wrap}
+```{.wrap}
intent(noctx, 'pattern', ...) or noContext(() => {intent(...)})
```
Play a prompt for an expected input
-``` {.wrap}
+```{.wrap}
fallback('pattern1'[, 'patternN'])
```
Title a context
-``` {.wrap}
+```{.wrap}
title('contextName')
```
@@ -256,37 +263,37 @@ title('contextName')
Store static device- and user-specific data passed from the client app
-``` {.wrap}
+```{.wrap}
authData.data => p.authData.data
```
Store state data to be available globally at the project scope
-``` {.wrap}
+```{.wrap}
project.info = {data:yourData} => project.info.data
```
Store the intent match score
-``` {.wrap}
+```{.wrap}
p.score
```
Store data to be passed between contexts
-``` {.wrap}
+```{.wrap}
p.state.data
```
-Store visual context data to be passed from the client app with ``setVisualState()``
+Store visual context data to be passed from the client app with `setVisualState()`
-``` {.wrap}
+```{.wrap}
p.visual.data
```
Store user-specific state data to be accessible during the dialog session
-``` {.wrap}
+```{.wrap}
p.userData.data
```
@@ -294,51 +301,52 @@ p.userData.data
Define actions to be performed when the script is saved and dialog model is built
-``` {.wrap}
+```{.wrap}
onCreateProject(() => { action })
```
Define actions to be performed when the dialog session starts
-``` {.wrap}
+```{.wrap}
onCreateUser((p) => { action })
```
Define actions to be performed when the dialog session ends
-``` {.wrap}
+```{.wrap}
onCleanupUser((p) => { action })
```
Define actions to be performed when the visual state is set
-``` {.wrap}
+```{.wrap}
onVisualState((p, s) => { action })
```
-Define actions to be performed when a user event is triggered in the client app: ``buttonReady``, ``buttonClicked``, ``micPermissionPrompt``, ``micAllowed``, ``firstActivate``, ``showPopup``, ``popupCloseClicked``, ``recognized``
+Define actions to be performed when a user event is triggered in the client app: `buttonReady`, `buttonClicked`,
+`micPermissionPrompt`, `micAllowed`, `firstActivate`, `showPopup`, `popupCloseClicked`, `recognized`
-``` {.wrap}
+```{.wrap}
onUserEvent((p, e) => { action })
```
Define actions to be performed when a context is activated
-``` {.wrap}
+```{.wrap}
onEnter((p) => { action })
```
-
### Q&A service
Define a URL of a resource to be indexed
-``` {.wrap}
+```{.wrap}
corpus({url: url, depth: depthLevel})
```
Define text corpus to be used by the assistant in the dialog
-``` {.wrap}
+
+```{.wrap}
corpus('text')
```
@@ -346,19 +354,19 @@ corpus('text')
Make API calls
-``` {.wrap}
+```{.wrap}
axios, request
```
Work with time
-``` {.wrap}
+```{.wrap}
moment-timezone, luxon
```
Work with arrays, numbers, objects, strings and so on
-``` {.wrap}
+```{.wrap}
lodash
```
@@ -366,36 +374,35 @@ lodash
Provide a list of hints to help recognize specific terms
-``` {.wrap}
+```{.wrap}
recognitionHints('hint'[, 'hintN'])
```
Write info messages to Alan Studio logs
-``` {.wrap}
+```{.wrap}
console.log(data)
```
Write error messages to Alan Studio logs
-``` {.wrap}
+```{.wrap}
console.error(data)
```
-Client SDK
-----------
+## Client SDK
### Client API methods
Send information about the visual state from the client app to the dialog script
-``` {.wrap}
+```{.wrap}
setVisualState(visualStateData:object)
```
Send data or perform actions without a voice/text command
-``` {.wrap}
+```{.wrap}
projectAPI.method = function(p, param, callback) {
p.userData.data = param.data;
callback();
@@ -406,19 +413,19 @@ callProjectApi(method:string, data:object, callback:function)
Play a text message in the client app
-``` {.wrap}
+```{.wrap}
playText(text:string)
```
Send a text message to Alan as the user’s input
-``` {.wrap}
+```{.wrap}
sendText(text:string)
```
Execute a command in the client app
-``` {.wrap}
+```{.wrap}
playCommand(command:object)
```
@@ -426,37 +433,37 @@ playCommand(command:object)
Activate the Alan button programmatically
-``` {.wrap}
+```{.wrap}
activate()
```
Deactivate the Alan button programmatically
-``` {.wrap}
+```{.wrap}
deactivate()
```
Check the Alan button state
-``` {.wrap}
+```{.wrap}
isActive()
```
Remove the Alan button from the parent element, page (supported on Web, Ionic)
-``` {.wrap}
+```{.wrap}
remove()
```
Check the state of the wake word (supported on iOS, Android)
-``` {.wrap}
+```{.wrap}
getWakewordEnabled()
```
Set the state of the wake word (supported on iOS, Android)
-``` {.wrap}
+```{.wrap}
setWakewordEnabled(enabled:boolean)
```
@@ -466,42 +473,30 @@ setWakewordEnabled(enabled:boolean)
Handle commands sent from the dialog script to the client app
-``` {.wrap}
+```{.wrap}
onCommand: function (commandData) { action }
```
Handle Alan button state changes
-``` {.wrap}
+```{.wrap}
onButtonState: function (e) { action }
```
Handle connection status to the virtual assistant project in the Alan Cloud
-``` {.wrap}
+```{.wrap}
onConnectionStatus: function (e) { action }
```
Handle events received from Alan
-``` {.wrap}
+```{.wrap}
onEvent: function (e) { action }
```
-
-
-
-Also see
---------
+## Also see
- [Alan AI website](https://alan.app)
- [About the Alan Platform](https://alan.app/platform)
- [Alan AI documentation](https://alan.app/docs)
-
-
-
-
diff --git a/source/_posts/alpine-linux.md b/source/_posts/alpine-linux.md
new file mode 100644
index 00000000..32a77b93
--- /dev/null
+++ b/source/_posts/alpine-linux.md
@@ -0,0 +1,296 @@
+---
+title: Alpine Linux
+date: 2024-03-20 12:00:00
+icon: icon-alpine
+background: bg-blue-600
+tags:
+ - linux
+ - server
+ - container
+categories:
+ - Operating System
+intro:
+ A comprehensive cheatsheet for Alpine Linux, covering package management, system administration, networking, and more.
+ Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.
+---
+
+# Alpine Linux Cheatsheet
+
+## Package Management (apk)
+
+### Basic Package Operations
+
+```bash
+# Update package index
+apk update
+
+# Upgrade all installed packages
+apk upgrade
+
+# Install a package
+apk add \` | Quick switch the scheme
-`Ctrl` `Alt` `S` | Open the settings dialogue
-`Ctrl` `Alt` `Shift` `S` | Open the project structure dialogue
-`Ctrl` `Tab` | Switch between the tabs and tool window
-{.shortcuts}
-
+| Shortcut | Action |
+| ------------------------ | ------------------------------------------------- |
+| `Ctrl` `S` | Save all |
+| `Ctrl` `Alt` `Y` | Synchronize |
+| `Ctrl` `Shift` `F12` | Minimize or maximize the editor |
+| `Alt` `Shift` `F` | Add to favorites |
+| `Alt` `Shift` `I` | Inspect the current file with the current profile |
+| `Ctrl` \` | Quick switch the scheme |
+| `Ctrl` `Alt` `S` | Open the settings dialogue |
+| `Ctrl` `Alt` `Shift` `S` | Open the project structure dialogue |
+| `Ctrl` `Tab` | Switch between the tabs and tool window |
-### Navigating and Searching {.row-span-2}
-
-Shortcut | Action
----|---
-`Shift` `Shift` | Search everything, including code and menus
-`Ctrl` `F` | Find
-`F3` | Find next
-`Shift` `F3` | Find previous
-`Ctrl` `R` | Replace
-`Ctrl` `Shift` `A` | Find action
-`Ctrl` `Alt` `Shift` `N` | Search by a symbol name
-`Ctrl` `N` | Find class
-`Ctrl` `Shift` `N` | Find file, instead of class
-`Ctrl` `Shift` `F` | Find in path
-`Ctrl` `F12` | Open file structure pop-up
-`Alt` `Right/Left` | Navigate between open editor tabs
-`Ctrl` `Enter` | Jump to source
-`Shift` `F4` | Open the current editor tab in a new window
-`Ctrl` `E` | Recently opened files pop-up
-`Ctrl` `Shift` `E` | Recently edited files pop-up
-`Ctrl` `Shift` `Backspace` | Go to last edit location
-`Ctrl` `F4` | Close active editor tab
-`Esc` | Return to editor window from a tool window
-`Shift` `Esc` | Hide active or last active tool window
-`Ctrl` `G` | Go to line
-`Ctrl` `H` | Open type hierarchy
-`Ctrl` `Shift` `H` | Open method hierarchy
-`Ctrl` `Alt` `H` | Open call hierarchy
{.shortcuts}
+### Navigating and Searching {.row-span-2}
+
+| Shortcut | Action |
+| -------------------------- | ------------------------------------------- |
+| `Shift` `Shift` | Search everything, including code and menus |
+| `Ctrl` `F` | Find |
+| `F3` | Find next |
+| `Shift` `F3` | Find previous |
+| `Ctrl` `R` | Replace |
+| `Ctrl` `Shift` `A` | Find action |
+| `Ctrl` `Alt` `Shift` `N` | Search by a symbol name |
+| `Ctrl` `N` | Find class |
+| `Ctrl` `Shift` `N` | Find file, instead of class |
+| `Ctrl` `Shift` `F` | Find in path |
+| `Ctrl` `F12` | Open file structure pop-up |
+| `Alt` `Right/Left` | Navigate between open editor tabs |
+| `Ctrl` `Enter` | Jump to source |
+| `Shift` `F4` | Open the current editor tab in a new window |
+| `Ctrl` `E` | Recently opened files pop-up |
+| `Ctrl` `Shift` `E` | Recently edited files pop-up |
+| `Ctrl` `Shift` `Backspace` | Go to last edit location |
+| `Ctrl` `F4` | Close active editor tab |
+| `Esc` | Return to editor window from a tool window |
+| `Shift` `Esc` | Hide active or last active tool window |
+| `Ctrl` `G` | Go to line |
+| `Ctrl` `H` | Open type hierarchy |
+| `Ctrl` `Shift` `H` | Open method hierarchy |
+| `Ctrl` `Alt` `H` | Open call hierarchy |
+{.shortcuts}
### Writing Code {.row-span-4}
-Shortcut | Action
----|---
-`Alt` `Insert` | Generate code, e.g. getters, setters, constructors, new class
-`Ctrl` `O` | Override methods
-`Ctrl` `I` | Implement methods
-`Ctrl` `Alt` `T` | Surround with if...else, try...catch, etc
-`Ctrl` `Y` | Delete line at caret
-`Ctrl` `-` | Collapse the current code block
-`Ctrl` `+` | Expand the current code block
-`Ctrl` `Shift` `-` | Collapse all code blocks
-`Ctrl` `Shift` `+` | Expand all code blocks
-`Ctrl` `D` | Duplicate the current line or selection
-`Ctrl` `Space` | Basic code completion
-`Ctrl` `Shift` `Space` | Smart code completion, filters the list of methods and variables by expected type
-`Ctrl` `Shift` `Enter` | Complete statement
-`Ctrl` `Q` | Quick documentation lookup
-`Ctrl` `P` | Show parameters for selected method
-`Ctrl` `B` | Go to declaration, directly
-`Ctrl` `Alt` `B` | Go to implementations
-`Ctrl` `U` | Go to super-method or super-class
-`Ctrl` `Shift` `I` | Open quick definition lookup
-`Alt` `1` | Toggle project tool window visibility
-`F11` | Toggle bookmark
-`Ctrl` `F11` | Toggle bookmark with mnemonic
-`Ctrl` `/` | Comment or uncomment with line comment
-`Ctrl` `Shift` `/` | Comment or uncomment with block comment
-`Ctrl` `W` | Select successively increasing code blocks
-`Ctrl` `Shift` `W` | Decrease current selection to previous state
-`Ctrl` `[` | Move to code block start
-`Ctrl` `]` | Move to code block end
-`Ctrl` `Shift` `[` | Select to the code block start
-`Ctrl` `Shift` `]` | Select to the code block end
-`Ctrl` `Del` | Delete to the end of a word
-`Ctrl` `Backspace` | Delete to the start of a word
-`Ctrl` `Alt` `O` | Optimize imports
-`Alt` `Enter` | Project quick fix, show intention actions and quick fixes
-`Ctrl` `Alt` `L` | Reformat code
-`Ctrl` `Alt` `I` | Auto-indent lines
-`Tab` | Indent lines
-`Shift` `Tab` | Unindent lines
-`Ctrl` `Shift` `J` | Smart line join
-`Ctrl` `Enter` | Smart line split
-`Shift` `Enter` | Start new line
-`F2` | Next highlighted error
-`Shift` `F2` | Previous highlighted error
-{.shortcuts}
+| Shortcut | Action |
+| ---------------------- | --------------------------------------------------------------------------------- |
+| `Alt` `Insert` | Generate code, e.g. getters, setters, constructors, new class |
+| `Ctrl` `O` | Override methods |
+| `Ctrl` `I` | Implement methods |
+| `Ctrl` `Alt` `T` | Surround with if...else, try...catch, etc |
+| `Ctrl` `Y` | Delete line at caret |
+| `Ctrl` `-` | Collapse the current code block |
+| `Ctrl` `+` | Expand the current code block |
+| `Ctrl` `Shift` `-` | Collapse all code blocks |
+| `Ctrl` `Shift` `+` | Expand all code blocks |
+| `Ctrl` `D` | Duplicate the current line or selection |
+| `Ctrl` `Space` | Basic code completion |
+| `Ctrl` `Shift` `Space` | Smart code completion, filters the list of methods and variables by expected type |
+| `Ctrl` `Shift` `Enter` | Complete statement |
+| `Ctrl` `Q` | Quick documentation lookup |
+| `Ctrl` `P` | Show parameters for selected method |
+| `Ctrl` `B` | Go to declaration, directly |
+| `Ctrl` `Alt` `B` | Go to implementations |
+| `Ctrl` `U` | Go to super-method or super-class |
+| `Ctrl` `Shift` `I` | Open quick definition lookup |
+| `Alt` `1` | Toggle project tool window visibility |
+| `F11` | Toggle bookmark |
+| `Ctrl` `F11` | Toggle bookmark with mnemonic |
+| `Ctrl` `/` | Comment or uncomment with line comment |
+| `Ctrl` `Shift` `/` | Comment or uncomment with block comment |
+| `Ctrl` `W` | Select successively increasing code blocks |
+| `Ctrl` `Shift` `W` | Decrease current selection to previous state |
+| `Ctrl` `[` | Move to code block start |
+| `Ctrl` `]` | Move to code block end |
+| `Ctrl` `Shift` `[` | Select to the code block start |
+| `Ctrl` `Shift` `]` | Select to the code block end |
+| `Ctrl` `Del` | Delete to the end of a word |
+| `Ctrl` `Backspace` | Delete to the start of a word |
+| `Ctrl` `Alt` `O` | Optimize imports |
+| `Alt` `Enter` | Project quick fix, show intention actions and quick fixes |
+| `Ctrl` `Alt` `L` | Reformat code |
+| `Ctrl` `Alt` `I` | Auto-indent lines |
+| `Tab` | Indent lines |
+| `Shift` `Tab` | Unindent lines |
+| `Ctrl` `Shift` `J` | Smart line join |
+| `Ctrl` `Enter` | Smart line split |
+| `Shift` `Enter` | Start new line |
+| `F2` | Next highlighted error |
+| `Shift` `F2` | Previous highlighted error |
+{.shortcuts}
### Viewing Layouts
-Shortcut | Action
----|---
-`Ctrl` `+` | Zoom in
-`Ctrl` `-` | Zoom out
-`Ctrl` `0` | Fit to screen
-`Ctrl` `Shift` `1` | Actual size
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ------------- |
+| `Ctrl` `+` | Zoom in |
+| `Ctrl` `-` | Zoom out |
+| `Ctrl` `0` | Fit to screen |
+| `Ctrl` `Shift` `1` | Actual size |
+{.shortcuts}
### Layout Editor
-Shortcut | Action
----|---
-`B` | Toggle between Design and Blueprint modes
-`O` | Toggle between Portrait and Landscaope modes
-`D` | Toggle devices
-`R` | Force refresh
-`E` | Toggle render errors panel
-`Del` | Delete constraints
-`Ctrl` `+` | Zoom in
-`Ctrl` `-` | Zoom out
-`Ctrl` `0` | Zoom to fit
-`Ctrl` `B` | Go to XML
-`Ctrl` `A` | Select all components
-`Shift` `(click)` | Select multiple components
-{.shortcuts}
+| Shortcut | Action |
+| ----------------- | -------------------------------------------- |
+| `B` | Toggle between Design and Blueprint modes |
+| `O` | Toggle between Portrait and Landscaope modes |
+| `D` | Toggle devices |
+| `R` | Force refresh |
+| `E` | Toggle render errors panel |
+| `Del` | Delete constraints |
+| `Ctrl` `+` | Zoom in |
+| `Ctrl` `-` | Zoom out |
+| `Ctrl` `0` | Zoom to fit |
+| `Ctrl` `B` | Go to XML |
+| `Ctrl` `A` | Select all components |
+| `Shift` `(click)` | Select multiple components |
+{.shortcuts}
### Navigation Editor
-Shortcut | Action
----|---
-`Ctrl` `+` | Zoom in
-`Ctrl` `-` | Zoom out
-`Ctrl` `0` | Zoom to fit
-`Ctrl` `B` | Go to XML
-`E` | Toggle render errors panel
-`Ctrl` `G` | Group into a nested graph
-`Tab` | Cycle through destinations
-`Ctrl` `A` | Select all destinations
-`Ctrl` `(click)` | Select multiple destinations
-{.shortcuts}
-
+| Shortcut | Action |
+| ---------------- | ---------------------------- |
+| `Ctrl` `+` | Zoom in |
+| `Ctrl` `-` | Zoom out |
+| `Ctrl` `0` | Zoom to fit |
+| `Ctrl` `B` | Go to XML |
+| `E` | Toggle render errors panel |
+| `Ctrl` `G` | Group into a nested graph |
+| `Tab` | Cycle through destinations |
+| `Ctrl` `A` | Select all destinations |
+| `Ctrl` `(click)` | Select multiple destinations |
+{.shortcuts}
### Build and Run
-Shortcut | Action
----|---
-`Ctrl` `F9` | Build
-`Shift` `F10` | Build and run
-`Ctrl` `F10` | Apply changes and restart activity
-`Ctrl` `Alt` `F10` | Apply code changes
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ---------------------------------- |
+| `Ctrl` `F9` | Build |
+| `Shift` `F10` | Build and run |
+| `Ctrl` `F10` | Apply changes and restart activity |
+| `Ctrl` `Alt` `F10` | Apply code changes |
+{.shortcuts}
### Debugging
-Shortcut | Action
----|---
-`Shift` `F9` | Debug
-`F8` | Step over
-`F7` | Step into
-`Shift` `F7` | Smart step into
-`Shift` `F8` | Step out
-`Alt` `F9` | Run to cursor
-`Alt` `F8` | Evaluate expression
-`F9` | Resume program
-`Ctrl` `F8` | Toggle breakpoint
-`Ctrl` `Shift` `F8` | View breakpoints
-{.shortcuts}
+| Shortcut | Action |
+| ------------------- | ------------------- |
+| `Shift` `F9` | Debug |
+| `F8` | Step over |
+| `F7` | Step into |
+| `Shift` `F7` | Smart step into |
+| `Shift` `F8` | Step out |
+| `Alt` `F9` | Run to cursor |
+| `Alt` `F8` | Evaluate expression |
+| `F9` | Resume program |
+| `Ctrl` `F8` | Toggle breakpoint |
+| `Ctrl` `Shift` `F8` | View breakpoints |
+{.shortcuts}
### Refactoring
-Shortcut | Action
----|---
-`F5` | Copy
-`F6` | Move
-`Alt` `Del` | Safe delete
-`Shift` `F6` | Rename
-`Ctrl` `F6` | Change signature
-`Ctrl` `Alt` `N` | Inline
-`Ctrl` `Alt` `M` | Extract method
-`Ctrl` `Alt` `V` | Extract variable
-`Ctrl` `Alt` `F` | Extract field
-`Ctrl` `Alt` `C` | Extract constant
-`Ctrl` `Alt` `P` | Extract parameter
-{.shortcuts}
+| Shortcut | Action |
+| ---------------- | ----------------- |
+| `F5` | Copy |
+| `F6` | Move |
+| `Alt` `Del` | Safe delete |
+| `Shift` `F6` | Rename |
+| `Ctrl` `F6` | Change signature |
+| `Ctrl` `Alt` `N` | Inline |
+| `Ctrl` `Alt` `M` | Extract method |
+| `Ctrl` `Alt` `V` | Extract variable |
+| `Ctrl` `Alt` `F` | Extract field |
+| `Ctrl` `Alt` `C` | Extract constant |
+| `Ctrl` `Alt` `P` | Extract parameter |
+{.shortcuts}
### Version Control
-Shortcut | Action
----|---
-`Ctrl` `K` | Commit project to VCS
-`Ctrl` `T` | Update project from VCS
-`Alt` `Shift` `C` | View recent changes
-`Alt` \` | Open VCS pop-up
-{.shortcuts}
-
+| Shortcut | Action |
+| --------------------- | ----------------------- |
+| `Ctrl` `K` | Commit project to VCS |
+| `Ctrl` `T` | Update project from VCS |
+| `Alt` `Shift` `C` | View recent changes |
+| `Alt` \` | Open VCS pop-up |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Android Studio](https://developer.android.com/studio/intro/keyboard-shortcuts) _(developer.android.com)_
+- [Keyboard shortcuts for Android Studio](https://developer.android.com/studio/intro/keyboard-shortcuts)
+ _(developer.android.com)_
diff --git a/source/_posts/apex-legends.md b/source/_posts/apex-legends.md
index 3f18bbe9..a2f346c7 100644
--- a/source/_posts/apex-legends.md
+++ b/source/_posts/apex-legends.md
@@ -2,73 +2,67 @@
title: Apex Legends
date: 2022-11-23 16:23:31.706352
background: bg-[#a74145]
-label:
-tags:
- -
- -
+label:
+tags:
+ -
+ -
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 27 default keyboard shortcuts found in Apex Legends
+ A visual cheat-sheet for the 27 default keyboard shortcuts found in Apex Legends
---
-
-
-Keyboard Shortcuts
-------------------
-
-
+## Keyboard Shortcuts
### Movement
-Shortcut | Action
----|---
-`W` | Move forward
-`S` | Move back
-`A` | Move left
-`D` | Move right
-`Left Shift` | Sprint
-`Space` | Jump
-`C` | Toggle crouch
-`Left Ctrl` | Hold to crouch
-{.shortcuts}
+| Shortcut | Action |
+| ------------ | -------------- |
+| `W` | Move forward |
+| `S` | Move back |
+| `A` | Move left |
+| `D` | Move right |
+| `Left Shift` | Sprint |
+| `Space` | Jump |
+| `C` | Toggle crouch |
+| `Left Ctrl` | Hold to crouch |
+{.shortcuts}
### Weapons and Abilities
-Shortcut | Action
----|---
-`Q` | Tactical ability
-`Z` | Ultimate ability
-`E` | Interact or pickup
-`X` | Alternate interact
-`Tab` | Toggle inventory
-`M` | Toggle map
-`B` | Toggle fire mode
-`V` | Melee
-`R` | Reload
-`1` | Equip first weapon
-`2` | Equip second weapon
-`3` | Holster weapons
-`G` | Equip grenade
-`4` | Use selected health item
-`H` | Toggle Gibraltar's shield
-`N` | Inspect weapon
-{.shortcuts}
+| Shortcut | Action |
+| -------- | ------------------------- |
+| `Q` | Tactical ability |
+| `Z` | Ultimate ability |
+| `E` | Interact or pickup |
+| `X` | Alternate interact |
+| `Tab` | Toggle inventory |
+| `M` | Toggle map |
+| `B` | Toggle fire mode |
+| `V` | Melee |
+| `R` | Reload |
+| `1` | Equip first weapon |
+| `2` | Equip second weapon |
+| `3` | Holster weapons |
+| `G` | Equip grenade |
+| `4` | Use selected health item |
+| `H` | Toggle Gibraltar's shield |
+| `N` | Inspect weapon |
+{.shortcuts}
### Communication
-Shortcut | Action
----|---
-`F` | Ping enemy here
-`T` | Hold to use push to talk
-`Enter` | Message team
-{.shortcuts}
-
+| Shortcut | Action |
+| -------- | ------------------------ |
+| `F` | Ping enemy here |
+| `T` | Hold to use push to talk |
+| `Enter` | Message team |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Apex Legends](https://www.metabomb.net/off-meta/gameplay-guides/apex-legends-controls-pc-playstation-4xbox-one) _(www.metabomb.net)_
+- [Keyboard shortcuts for Apex Legends](https://www.metabomb.net/off-meta/gameplay-guides/apex-legends-controls-pc-playstation-4xbox-one)
+ _(www.metabomb.net)_
diff --git a/source/_posts/apple-music.md b/source/_posts/apple-music.md
index 6efd5183..5a01ecd1 100644
--- a/source/_posts/apple-music.md
+++ b/source/_posts/apple-music.md
@@ -3,130 +3,122 @@ title: Apple Music
date: 2022-11-23 16:23:31.700157
background: bg-[#e05564]
label: Mac
-tags:
- -
- - mac
+tags:
+ -
+ - mac
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 62 keyboard shortcuts found in the Apple Music app. This application is MacOS-only.
+ A visual cheat-sheet for the 62 keyboard shortcuts found in the Apple Music app. This application is MacOS-only.
---
-
-
-Keyboard Shortcuts
-------------------
-
-
+## Keyboard Shortcuts
### Playing Music {.row-span-2}
-Shortcut | Action
----|---
-`Space` | Start playing or pause the selected song
-`Enter` | Play the currently selected song from the beginning
-`Cmd` `Opt` `Right` | Move forward within a song
-`Cmd` `Opt` `Left` | Move backward within a song
-`Cmd` `.` | Stop playing the selected song
-`Right` | When a song is playing, play the next song in a list
-`Left` | When a song is playing, play the previous song in a list
-`Cmd` `L` | Show the currently playing song in the list
-`Cmd` `Opt` `U` | Show the Playing Next queue
-`Opt` `Right` | Listen to the next album in a list
-`Opt` `Left` | Listen to the previous album in a list
-`Cmd` `Up` | Increase the volume
-`Cmd` `Down` | Decrease the volume
-`Cmd` `Opt` `E` | Open the equalizer
-`Cmd` `Shift` `Right` | Go to the next chapter, if available
-`Cmd` `Shift` `Left` | Go to the previous chapter, if available
-`Cmd` `U` | Stream audio file at a specific URL to Music
-{.shortcuts}
+| Shortcut | Action |
+| --------------------- | -------------------------------------------------------- |
+| `Space` | Start playing or pause the selected song |
+| `Enter` | Play the currently selected song from the beginning |
+| `Cmd` `Opt` `Right` | Move forward within a song |
+| `Cmd` `Opt` `Left` | Move backward within a song |
+| `Cmd` `.` | Stop playing the selected song |
+| `Right` | When a song is playing, play the next song in a list |
+| `Left` | When a song is playing, play the previous song in a list |
+| `Cmd` `L` | Show the currently playing song in the list |
+| `Cmd` `Opt` `U` | Show the Playing Next queue |
+| `Opt` `Right` | Listen to the next album in a list |
+| `Opt` `Left` | Listen to the previous album in a list |
+| `Cmd` `Up` | Increase the volume |
+| `Cmd` `Down` | Decrease the volume |
+| `Cmd` `Opt` `E` | Open the equalizer |
+| `Cmd` `Shift` `Right` | Go to the next chapter, if available |
+| `Cmd` `Shift` `Left` | Go to the previous chapter, if available |
+| `Cmd` `U` | Stream audio file at a specific URL to Music |
+{.shortcuts}
### Playlists
-Shortcut | Action
----|---
-`Cmd` `N` | Create a new playlist
-`Cmd` `Shift` `N` | Create a playlist from a selection of songs
-`Cmd` `Opt` `N` | Create a new Smart Playlist
-`Opt` `Space` | Start the Genius Shuffle
-`Cmd` `R` | Refresh a Genius Playlist, when the playlist is selected
-`Cmd` `Del` | Delete the selected playlist without confirmation
-`Opt` `Del` | Delete the selected playlist and all songs it contains from your library
-`Opt` `Del` | Delete the selected song from your library and all playlists
-{.shortcuts}
-
+| Shortcut | Action |
+| ----------------- | ------------------------------------------------------------------------ |
+| `Cmd` `N` | Create a new playlist |
+| `Cmd` `Shift` `N` | Create a playlist from a selection of songs |
+| `Cmd` `Opt` `N` | Create a new Smart Playlist |
+| `Opt` `Space` | Start the Genius Shuffle |
+| `Cmd` `R` | Refresh a Genius Playlist, when the playlist is selected |
+| `Cmd` `Del` | Delete the selected playlist without confirmation |
+| `Opt` `Del` | Delete the selected playlist and all songs it contains from your library |
+| `Opt` `Del` | Delete the selected song from your library and all playlists |
+{.shortcuts}
### Window Options {.row-span-2}
-Shortcut | Action
----|---
-`Cmd` `Shift` `M` | Open the MiniPlayer
-`Cmd` `Shift` `F` | Open the Full Screen Player
-`Cmd` `Ctrl` `F` | Toggle full-screen view
-`Cmd` `/` | Show or hide the status bar
-`Cmd` `I` | Open the info window for the selected song
-`Cmd` `N` | In the info window, see information for the next song
-`Cmd` `P` | In the info window, see information for the previous song
-`Cmd` `Shift` `[` | Go to the previous pane in the info window
-`Cmd` `Shift` `]` | Go to the next pane in the info window
-`Cmd` `J` | Open the View Options window for the selected source
-`Cmd` `T` | Turn the visualizer on or off
-`?` | See more options when a visual effect is showing
-`Cmd` `R` | Refresh Apple Music or the iTunes Store
-`Cmd` `0` | Open the Music window
-`Cmd` `W` | Close the Music window
-`Cmd` `M` | Put the Music window in the Dock
-`Cmd` `H` | Hide the Music window
-`Cmd` `Opt` `H` | Hide all other applications
-{.shortcuts}
+| Shortcut | Action |
+| ----------------- | --------------------------------------------------------- |
+| `Cmd` `Shift` `M` | Open the MiniPlayer |
+| `Cmd` `Shift` `F` | Open the Full Screen Player |
+| `Cmd` `Ctrl` `F` | Toggle full-screen view |
+| `Cmd` `/` | Show or hide the status bar |
+| `Cmd` `I` | Open the info window for the selected song |
+| `Cmd` `N` | In the info window, see information for the next song |
+| `Cmd` `P` | In the info window, see information for the previous song |
+| `Cmd` `Shift` `[` | Go to the previous pane in the info window |
+| `Cmd` `Shift` `]` | Go to the next pane in the info window |
+| `Cmd` `J` | Open the View Options window for the selected source |
+| `Cmd` `T` | Turn the visualizer on or off |
+| `?` | See more options when a visual effect is showing |
+| `Cmd` `R` | Refresh Apple Music or the iTunes Store |
+| `Cmd` `0` | Open the Music window |
+| `Cmd` `W` | Close the Music window |
+| `Cmd` `M` | Put the Music window in the Dock |
+| `Cmd` `H` | Hide the Music window |
+| `Cmd` `Opt` `H` | Hide all other applications |
+{.shortcuts}
### Library
-Shortcut | Action
----|---
-`Cmd` `O` | Add a file to your library
-`Cmd` `Shift` `R` | Show where a song file is located
-`Cmd` `F` | Select the search field
-`Cmd` `Z` | Undo your last typing change while editing an item
-`Cmd` `X` | Cut the selected song's information or artwork
-`Cmd` `C` | Copy the selected song's information or artwork
-`Cmd` `V` | Paste the selected song's information or artwork
-`Cmd` `A` | Select all the songs in the list
-`Cmd` `B` | Show or hide the column browser
-`Cmd` `Shift` `A` | De-select all the songs in the list
-{.shortcuts}
-
+| Shortcut | Action |
+| ----------------- | -------------------------------------------------- |
+| `Cmd` `O` | Add a file to your library |
+| `Cmd` `Shift` `R` | Show where a song file is located |
+| `Cmd` `F` | Select the search field |
+| `Cmd` `Z` | Undo your last typing change while editing an item |
+| `Cmd` `X` | Cut the selected song's information or artwork |
+| `Cmd` `C` | Copy the selected song's information or artwork |
+| `Cmd` `V` | Paste the selected song's information or artwork |
+| `Cmd` `A` | Select all the songs in the list |
+| `Cmd` `B` | Show or hide the column browser |
+| `Cmd` `Shift` `A` | De-select all the songs in the list |
+{.shortcuts}
### iTunes Store
-Shortcut | Action
----|---
-`Opt` `Enter` | Initiate a search in the iTunes Store
-`Cmd` `]` | Go to the next page in the iTunes Store
-`Cmd` `[` | Go to the previous page in the iTunes Store
-`Cmd` `R` | Reload the current page
-{.shortcuts}
+| Shortcut | Action |
+| ------------- | ------------------------------------------- |
+| `Opt` `Enter` | Initiate a search in the iTunes Store |
+| `Cmd` `]` | Go to the next page in the iTunes Store |
+| `Cmd` `[` | Go to the previous page in the iTunes Store |
+| `Cmd` `R` | Reload the current page |
+{.shortcuts}
### Other
-Shortcut | Action
----|---
-`Cmd` `,` | Open Music Preferences
-`Cmd` `Q` | Quit the Music app
-`Cmd` `E` | Eject a CD
-`Cmd` `?` | Open the Music Help menu
-`Cmd` `Opt` | Open a different music library, while opening Music
-{.shortcuts}
-
+| Shortcut | Action |
+| ----------- | --------------------------------------------------- |
+| `Cmd` `,` | Open Music Preferences |
+| `Cmd` `Q` | Quit the Music app |
+| `Cmd` `E` | Eject a CD |
+| `Cmd` `?` | Open the Music Help menu |
+| `Cmd` `Opt` | Open a different music library, while opening Music |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Music on Mac](https://support.apple.com/guide/music/keyboard-shortcuts-mus1019/mac) _(support.apple.com)_
+- [Keyboard shortcuts for Music on Mac](https://support.apple.com/guide/music/keyboard-shortcuts-mus1019/mac)
+ _(support.apple.com)_
diff --git a/source/_posts/arduino-programming.md b/source/_posts/arduino-programming.md
new file mode 100644
index 00000000..c0d0a02a
--- /dev/null
+++ b/source/_posts/arduino-programming.md
@@ -0,0 +1,527 @@
+---
+title: Arduino Programming
+date: 2024-05-29 8:58:31
+background: bg-[#387f83]
+label:
+tags: -cpp -I/O
+categories:
+ - Programming
+intro: |
+ Ardunio programming cheat-sheet for I/O programming and ardunio board programming.
+
+plugins:
+ - copyCode
+---
+
+## Getting Started
+
+### Gather Necessary Materials
+
+- Arduino Board: Any model, such as Arduino Uno, Mega, Nano, etc.
+- USB Cable: Compatible with your Arduino board (commonly USB Type-A to Type-B for Uno).
+- Computer: Windows, macOS, or Linux.
+
+### Install the Arduino IDE
+
+- windows/mac/linux
+- Go to the Arduino Software page.
+- Download the os installer.
+- Run the installer and follow the instructions.
+
+### Connect Your Arduino Board
+
+- Connect the Arduino board to your computer using the USB cable.
+- The power LED on the Arduino should light up, indicating it’s receiving power.
+
+### Configure the Arduino IDE
+
+- Open the Arduino IDE.
+- Select Your Board:
+- Go to Tools > Board and select the model of your Arduino board (e.g., Arduino Uno).
+
+- Select the Port:
+
+- Go to Tools > Port and select the port that the Arduino is connected to (it usually shows as COMx on Windows,
+ /dev/cu.usbmodemxxxx on macOS, and /dev/ttyUSBx on Linux).
+
+## Basic Structure
+
+### Setup and Loop
+
+```cpp
+void setup() {
+ // Code here runs once
+}
+
+void loop() {
+ // Code here runs repeatedly
+}
+```
+
+### Comment
+
+```cpp
+// Single-line comment
+
+/*
+Multi-line
+comment
+*/
+```
+
+### Variable
+
+```cpp
+int ledPin = 13; // Integer
+float voltage = 5.0; // Floating-point number
+char letter = 'A'; // Character
+String text = "Hello"; // String
+```
+
+### Pin Modes
+
+```cpp
+pinMode(pin, mode);
+```
+
+### Digital I/O
+
+```cpp
+digitalWrite(pin, value);
+int value = digitalRead(pin);
+
+```
+
+### Analog I/O
+
+```cpp
+analogWrite(pin, value);
+int value = analogRead(pin);
+
+```
+
+## Serial Communication
+
+### Begin Serial Communication
+
+```cpp
+Serial.begin(baudRate);
+```
+
+### Print to Serial Monitor
+
+```cpp
+Serial.print(data);
+Serial.println(data);
+```
+
+### Read from Serial Monitor
+
+```cpp
+if (Serial.available()) {
+ char data = Serial.read();
+}
+```
+
+## Control Structures
+
+### If Statement
+
+```cpp
+if (condition) {
+ // Code to execute if condition is true
+} else {
+ // Code to execute if condition is false
+}
+```
+
+### For Loop
+
+```cpp
+for (initialization; condition; increment) {
+ // Code to execute
+}
+```
+
+### While Loop
+
+```cpp
+while (condition) {
+ // Code to execute
+}
+```
+
+### Functions
+
+```cpp
+returnType functionName(parameters) {
+ // Code to execute
+ return value;
+}
+```
+
+## Libraries
+
+### Include a Library
+
+```cpp
+#include \` | 96 | 140 | 60 | 1100000 |
+| a | 97 | 141 | 61 | 1100001 |
+| b | 98 | 142 | 62 | 1100010 |
+| c | 99 | 143 | 63 | 1100011 |
+| d | 100 | 144 | 64 | 1100100 |
+| e | 101 | 145 | 65 | 1100101 |
+| f | 102 | 146 | 66 | 1100110 |
+| g | 103 | 147 | 67 | 1100111 |
+| h | 104 | 150 | 68 | 1101000 |
+| i | 105 | 151 | 69 | 1101001 |
+| j | 106 | 152 | 6A | 1101010 |
+| k | 107 | 153 | 6B | 1101011 |
+| l | 108 | 154 | 6C | 1101100 |
+| m | 109 | 155 | 6D | 1101101 |
+| n | 110 | 156 | 6E | 1101110 |
+| o | 111 | 157 | 6F | 1101111 |
+| p | 112 | 160 | 70 | 1110000 |
+| q | 113 | 161 | 71 | 1110001 |
+| r | 114 | 162 | 72 | 1110010 |
+| s | 115 | 163 | 73 | 1110011 |
+| t | 116 | 164 | 74 | 1110100 |
+| u | 117 | 165 | 75 | 1110101 |
+| v | 118 | 166 | 76 | 1110110 |
+| w | 119 | 167 | 77 | 1110111 |
+| x | 120 | 170 | 78 | 1111000 |
+| y | 121 | 171 | 79 | 1111001 |
+| z | 122 | 172 | 7A | 1111010 |
+| { | 123 | 173 | 7B | 1111011 |
+| | 124 | 174 | 7C | 1111100 |
+| } | 125 | 175 | 7D | 1111101 |
+| ~ | 126 | 176 | 7E | 1111110 |
+| (Delete) | 127 | 177 | 7F | 1111111 |
+| € | 128 | 200 | 80 | 10000000 |
+| | 129 | 201 | 81 | 10000001 |
+| ‚ | 130 | 202 | 82 | 10000010 |
+| ƒ | 131 | 203 | 83 | 10000011 |
+| „ | 132 | 204 | 84 | 10000100 |
+| … | 133 | 205 | 85 | 10000101 |
+| † | 134 | 206 | 86 | 10000110 |
+| ‡ | 135 | 207 | 87 | 10000111 |
+| ˆ | 136 | 210 | 88 | 10001000 |
+| ‰ | 137 | 211 | 89 | 10001001 |
+| Š | 138 | 212 | 8A | 10001010 |
+| ‹ | 139 | 213 | 8B | 10001011 |
+| Œ | 140 | 214 | 8C | 10001100 |
+| | 141 | 215 | 8D | 10001101 |
+| Ž | 142 | 216 | 8E | 10001110 |
+| | 143 | 217 | 8F | 10001111 |
+| | 144 | 220 | 90 | 10010000 |
+| ‘ | 145 | 221 | 91 | 10010001 |
+| ’ | 146 | 222 | 92 | 10010010 |
+| “ | 147 | 223 | 93 | 10010011 |
+| ” | 148 | 224 | 94 | 10010100 |
+| • | 149 | 225 | 95 | 10010101 |
+| – | 150 | 226 | 96 | 10010110 |
+| — | 151 | 227 | 97 | 10010111 |
+| ˜ | 152 | 230 | 98 | 10011000 |
+| ™ | 153 | 231 | 99 | 10011001 |
+| š | 154 | 232 | 9A | 10011010 |
+| › | 155 | 233 | 9B | 10011011 |
+| œ | 156 | 234 | 9C | 10011100 |
+| | 157 | 235 | 9D | 10011101 |
+| ž | 158 | 236 | 9E | 10011110 |
+| Ÿ | 159 | 237 | 9F | 10011111 |
+| (Non-breaking space) | 160 | 240 | A0 | 10100000 |
+| ¡ | 161 | 241 | A1 | 10100001 |
+| ¢ | 162 | 242 | A2 | 10100010 |
+| £ | 163 | 243 | A3 | 10100011 |
+| ¤ | 164 | 244 | A4 | 10100100 |
+| ¥ | 165 | 245 | A5 | 10100101 |
+| ¦ | 166 | 246 | A6 | 10100110 |
+| § | 167 | 247 | A7 | 10100111 |
+| ¨ | 168 | 250 | A8 | 10101000 |
+| © | 169 | 251 | A9 | 10101001 |
+| ª | 170 | 252 | AA | 10101010 |
+| « | 171 | 253 | AB | 10101011 |
+| ¬ | 172 | 254 | AC | 10101100 |
+| (Soft hyphen) | 173 | 255 | AD | 10101101 |
+| ® | 174 | 256 | AE | 10101110 |
+| ¯ | 175 | 257 | AF | 10101111 |
+| ° | 176 | 260 | B0 | 10110000 |
+| ± | 177 | 261 | B1 | 10110001 |
+| ² | 178 | 262 | B2 | 10110010 |
+| ³ | 179 | 263 | B3 | 10110011 |
+| ´ | 180 | 264 | B4 | 10110100 |
+| µ | 181 | 265 | B5 | 10110101 |
+| ¶ | 182 | 266 | B6 | 10110110 |
+| · | 183 | 267 | B7 | 10110111 |
+| ¸ | 184 | 270 | B8 | 10111000 |
+| ¹ | 185 | 271 | B9 | 10111001 |
+| º | 186 | 272 | BA | 10111010 |
+| » | 187 | 273 | BB | 10111011 |
+| ¼ | 188 | 274 | BC | 10111100 |
+| ½ | 189 | 275 | BD | 10111101 |
+| ¾ | 190 | 276 | BE | 10111110 |
+| ¿ | 191 | 277 | BF | 10111111 |
+| À | 192 | 300 | C0 | 11000000 |
+| Á | 193 | 301 | C1 | 11000001 |
+| Â | 194 | 302 | C2 | 11000010 |
+| Ã | 195 | 303 | C3 | 11000011 |
+| Ä | 196 | 304 | C4 | 11000100 |
+| Å | 197 | 305 | C5 | 11000101 |
+| Æ | 198 | 306 | C6 | 11000110 |
+| Ç | 199 | 307 | C7 | 11000111 |
+| È | 200 | 310 | C8 | 11001000 |
+| É | 201 | 311 | C9 | 11001001 |
+| Ê | 202 | 312 | CA | 11001010 |
+| Ë | 203 | 313 | CB | 11001011 |
+| Ì | 204 | 314 | CC | 11001100 |
+| Í | 205 | 315 | CD | 11001101 |
+| Î | 206 | 316 | CE | 11001110 |
+| Ï | 207 | 317 | CF | 11001111 |
+| Ð | 208 | 320 | D0 | 11010000 |
+| Ñ | 209 | 321 | D1 | 11010001 |
+| Ò | 210 | 322 | D2 | 11010010 |
+| Ó | 211 | 323 | D3 | 11010011 |
+| Ô | 212 | 324 | D4 | 11010100 |
+| Õ | 213 | 325 | D5 | 11010101 |
+| Ö | 214 | 326 | D6 | 11010110 |
+| × | 215 | 327 | D7 | 11010111 |
+| Ø | 216 | 330 | D8 | 11011000 |
+| Ù | 217 | 331 | D9 | 11011001 |
+| Ú | 218 | 332 | DA | 11011010 |
+| Û | 219 | 333 | DB | 11011011 |
+| Ü | 220 | 334 | DC | 11011100 |
+| Ý | 221 | 335 | DD | 11011101 |
+| Þ | 222 | 336 | DE | 11011110 |
+| ß | 223 | 337 | DF | 11011111 |
+| à | 224 | 340 | E0 | 11100000 |
+| á | 225 | 341 | E1 | 11100001 |
+| â | 226 | 342 | E2 | 11100010 |
+| ã | 227 | 343 | E3 | 11100011 |
+| ä | 228 | 344 | E4 | 11100100 |
+| å | 229 | 345 | E5 | 11100101 |
+| æ | 230 | 346 | E6 | 11100110 |
+| ç | 231 | 347 | E7 | 11100111 |
+| è | 232 | 350 | E8 | 11101000 |
+| é | 233 | 351 | E9 | 11101001 |
+| ê | 234 | 352 | EA | 11101010 |
+| ë | 235 | 353 | EB | 11101011 |
+| ì | 236 | 354 | EC | 11101100 |
+| í | 237 | 355 | ED | 11101101 |
+| î | 238 | 356 | EE | 11101110 |
+| ï | 239 | 357 | EF | 11101111 |
+| ð | 240 | 360 | F0 | 11110000 |
+| ñ | 241 | 361 | F1 | 11110001 |
+| ò | 242 | 362 | F2 | 11110010 |
+| ó | 243 | 363 | F3 | 11110011 |
+| ô | 244 | 364 | F4 | 11110100 |
+| õ | 245 | 365 | F5 | 11110101 |
+| ö | 246 | 366 | F6 | 11110110 |
+| ÷ | 247 | 367 | F7 | 11110111 |
+| ø | 248 | 370 | F8 | 11111000 |
+| ù | 249 | 371 | F9 | 11111001 |
+| ú | 250 | 372 | FA | 11111010 |
+| û | 251 | 373 | FB | 11111011 |
+| ü | 252 | 374 | FC | 11111100 |
+| ý | 253 | 375 | FD | 11111101 |
+| þ | 254 | 376 | FE | 11111110 |
+| ÿ | 255 | 377 | FF | 11111111 |
-| Symbol | Dec | Oct | Hex | Bin |
-|------------------------------------|------|------|------|----------|
-| NUL (Null) | 0 | 0 | 0 | 0 |
-| SOH (Start of Heading) | 1 | 1 | 1 | 1 |
-| STX (Start of Text) | 2 | 2 | 2 | 10 |
-| ETX (End of Text) | 3 | 3 | 3 | 11 |
-| EOT (End of Transmission) | 4 | 4 | 4 | 100 |
-| ENQ (Enquiry) | 5 | 5 | 5 | 101 |
-| ACK (Acknowledgment) | 6 | 6 | 6 | 110 |
-| BEL (Bell) | 7 | 7 | 7 | 111 |
-| BS (Back Space) | 8 | 10 | 8 | 1000 |
-| HT (Horizontal Tab) | 9 | 11 | 9 | 1001 |
-| LF (Line Feed) | 10 | 12 | 0A | 1010 |
-| VT (Vertical Tab) | 11 | 13 | 0B | 1011 |
-| FF (Form Feed) | 12 | 14 | 0C | 1100 |
-| CR (Carriage Return) | 13 | 15 | 0D | 1101 |
-| SO (Shift Out / X-On) | 14 | 16 | 0E | 1110 |
-| SI (Shift In / X-Off) | 15 | 17 | 0F | 1111 |
-| DLE (Data Line Escape) | 16 | 20 | 10 | 10000 |
-| DC1 (Device Control 1 / oft. XON) | 17 | 21 | 11 | 10001 |
-| DC2 (Device Control 2) | 18 | 22 | 12 | 10010 |
-| DC3 (Device Control 3 / oft. XOFF) | 19 | 23 | 13 | 10011 |
-| DC4 (Device Control 4) | 20 | 24 | 14 | 10100 |
-| NAK (Negative Acknowledgement) | 21 | 25 | 15 | 10101 |
-| SYN (Synchronous Idle) | 22 | 26 | 16 | 10110 |
-| ETB (End of Transmit Block) | 23 | 27 | 17 | 10111 |
-| CAN (Cancel) | 24 | 30 | 18 | 11000 |
-| EM (End of Medium) | 25 | 31 | 19 | 11001 |
-| SUB (Substitute) | 26 | 32 | 1A | 11010 |
-| ESC (Escape) | 27 | 33 | 1B | 11011 |
-| FS (File Separator) | 28 | 34 | 1C | 11100 |
-| GS (Group Separator) | 29 | 35 | 1D | 11101 |
-| RS (Record Separator) | 30 | 36 | 1E | 11110 |
-| US (Unit Separator) | 31 | 37 | 1F | 11111 |
-| (Space) | 32 | 40 | 20 | 100000 |
-| ! | 33 | 41 | 21 | 100001 |
-| " | 34 | 42 | 22 | 100010 |
-| # | 35 | 43 | 23 | 100011 |
-| $ | 36 | 44 | 24 | 100100 |
-| % | 37 | 45 | 25 | 100101 |
-| & | 38 | 46 | 26 | 100110 |
-| ' | 39 | 47 | 27 | 100111 |
-| ( | 40 | 50 | 28 | 101000 |
-| ) | 41 | 51 | 29 | 101001 |
-| * | 42 | 52 | 2A | 101010 |
-| + | 43 | 53 | 2B | 101011 |
-| , | 44 | 54 | 2C | 101100 |
-| - | 45 | 55 | 2D | 101101 |
-| . | 46 | 56 | 2E | 101110 |
-| / | 47 | 57 | 2F | 101111 |
-| 0 | 48 | 60 | 30 | 110000 |
-| 1 | 49 | 61 | 31 | 110001 |
-| 2 | 50 | 62 | 32 | 110010 |
-| 3 | 51 | 63 | 33 | 110011 |
-| 4 | 52 | 64 | 34 | 110100 |
-| 5 | 53 | 65 | 35 | 110101 |
-| 6 | 54 | 66 | 36 | 110110 |
-| 7 | 55 | 67 | 37 | 110111 |
-| 8 | 56 | 70 | 38 | 111000 |
-| 9 | 57 | 71 | 39 | 111001 |
-| : | 58 | 72 | 3A | 111010 |
-| ; | 59 | 73 | 3B | 111011 |
-| < | 60 | 74 | 3C | 111100 |
-| = | 61 | 75 | 3D | 111101 |
-| > | 62 | 76 | 3E | 111110 |
-| ? | 63 | 77 | 3F | 111111 |
-| @ | 64 | 100 | 40 | 1000000 |
-| A | 65 | 101 | 41 | 1000001 |
-| B | 66 | 102 | 42 | 1000010 |
-| C | 67 | 103 | 43 | 1000011 |
-| D | 68 | 104 | 44 | 1000100 |
-| E | 69 | 105 | 45 | 1000101 |
-| F | 70 | 106 | 46 | 1000110 |
-| G | 71 | 107 | 47 | 1000111 |
-| H | 72 | 110 | 48 | 1001000 |
-| I | 73 | 111 | 49 | 1001001 |
-| J | 74 | 112 | 4A | 1001010 |
-| K | 75 | 113 | 4B | 1001011 |
-| L | 76 | 114 | 4C | 1001100 |
-| M | 77 | 115 | 4D | 1001101 |
-| N | 78 | 116 | 4E | 1001110 |
-| O | 79 | 117 | 4F | 1001111 |
-| P | 80 | 120 | 50 | 1010000 |
-| Q | 81 | 121 | 51 | 1010001 |
-| R | 82 | 122 | 52 | 1010010 |
-| S | 83 | 123 | 53 | 1010011 |
-| T | 84 | 124 | 54 | 1010100 |
-| U | 85 | 125 | 55 | 1010101 |
-| V | 86 | 126 | 56 | 1010110 |
-| W | 87 | 127 | 57 | 1010111 |
-| X | 88 | 130 | 58 | 1011000 |
-| Y | 89 | 131 | 59 | 1011001 |
-| Z | 90 | 132 | 5A | 1011010 |
-| [ | 91 | 133 | 5B | 1011011 |
-| \ | 92 | 134 | 5C | 1011100 |
-| ] | 93 | 135 | 5D | 1011101 |
-| ^ | 94 | 136 | 5E | 1011110 |
-| _ | 95 | 137 | 5F | 1011111 |
-| \` | 96 | 140 | 60 | 1100000 |
-| a | 97 | 141 | 61 | 1100001 |
-| b | 98 | 142 | 62 | 1100010 |
-| c | 99 | 143 | 63 | 1100011 |
-| d | 100 | 144 | 64 | 1100100 |
-| e | 101 | 145 | 65 | 1100101 |
-| f | 102 | 146 | 66 | 1100110 |
-| g | 103 | 147 | 67 | 1100111 |
-| h | 104 | 150 | 68 | 1101000 |
-| i | 105 | 151 | 69 | 1101001 |
-| j | 106 | 152 | 6A | 1101010 |
-| k | 107 | 153 | 6B | 1101011 |
-| l | 108 | 154 | 6C | 1101100 |
-| m | 109 | 155 | 6D | 1101101 |
-| n | 110 | 156 | 6E | 1101110 |
-| o | 111 | 157 | 6F | 1101111 |
-| p | 112 | 160 | 70 | 1110000 |
-| q | 113 | 161 | 71 | 1110001 |
-| r | 114 | 162 | 72 | 1110010 |
-| s | 115 | 163 | 73 | 1110011 |
-| t | 116 | 164 | 74 | 1110100 |
-| u | 117 | 165 | 75 | 1110101 |
-| v | 118 | 166 | 76 | 1110110 |
-| w | 119 | 167 | 77 | 1110111 |
-| x | 120 | 170 | 78 | 1111000 |
-| y | 121 | 171 | 79 | 1111001 |
-| z | 122 | 172 | 7A | 1111010 |
-| { | 123 | 173 | 7B | 1111011 |
-| | 124 | 174 | 7C | 1111100 |
-| } | 125 | 175 | 7D | 1111101 |
-| ~ | 126 | 176 | 7E | 1111110 |
-| (Delete) | 127 | 177 | 7F | 1111111 |
-| € | 128 | 200 | 80 | 10000000 |
-| | 129 | 201 | 81 | 10000001 |
-| ‚ | 130 | 202 | 82 | 10000010 |
-| ƒ | 131 | 203 | 83 | 10000011 |
-| „ | 132 | 204 | 84 | 10000100 |
-| … | 133 | 205 | 85 | 10000101 |
-| † | 134 | 206 | 86 | 10000110 |
-| ‡ | 135 | 207 | 87 | 10000111 |
-| ˆ | 136 | 210 | 88 | 10001000 |
-| ‰ | 137 | 211 | 89 | 10001001 |
-| Š | 138 | 212 | 8A | 10001010 |
-| ‹ | 139 | 213 | 8B | 10001011 |
-| Œ | 140 | 214 | 8C | 10001100 |
-| | 141 | 215 | 8D | 10001101 |
-| Ž | 142 | 216 | 8E | 10001110 |
-| | 143 | 217 | 8F | 10001111 |
-| | 144 | 220 | 90 | 10010000 |
-| ‘ | 145 | 221 | 91 | 10010001 |
-| ’ | 146 | 222 | 92 | 10010010 |
-| “ | 147 | 223 | 93 | 10010011 |
-| ” | 148 | 224 | 94 | 10010100 |
-| • | 149 | 225 | 95 | 10010101 |
-| – | 150 | 226 | 96 | 10010110 |
-| — | 151 | 227 | 97 | 10010111 |
-| ˜ | 152 | 230 | 98 | 10011000 |
-| ™ | 153 | 231 | 99 | 10011001 |
-| š | 154 | 232 | 9A | 10011010 |
-| › | 155 | 233 | 9B | 10011011 |
-| œ | 156 | 234 | 9C | 10011100 |
-| | 157 | 235 | 9D | 10011101 |
-| ž | 158 | 236 | 9E | 10011110 |
-| Ÿ | 159 | 237 | 9F | 10011111 |
-| (Non-breaking space) | 160 | 240 | A0 | 10100000 |
-| ¡ | 161 | 241 | A1 | 10100001 |
-| ¢ | 162 | 242 | A2 | 10100010 |
-| £ | 163 | 243 | A3 | 10100011 |
-| ¤ | 164 | 244 | A4 | 10100100 |
-| ¥ | 165 | 245 | A5 | 10100101 |
-| ¦ | 166 | 246 | A6 | 10100110 |
-| § | 167 | 247 | A7 | 10100111 |
-| ¨ | 168 | 250 | A8 | 10101000 |
-| © | 169 | 251 | A9 | 10101001 |
-| ª | 170 | 252 | AA | 10101010 |
-| « | 171 | 253 | AB | 10101011 |
-| ¬ | 172 | 254 | AC | 10101100 |
-| (Soft hyphen) | 173 | 255 | AD | 10101101 |
-| ® | 174 | 256 | AE | 10101110 |
-| ¯ | 175 | 257 | AF | 10101111 |
-| ° | 176 | 260 | B0 | 10110000 |
-| ± | 177 | 261 | B1 | 10110001 |
-| ² | 178 | 262 | B2 | 10110010 |
-| ³ | 179 | 263 | B3 | 10110011 |
-| ´ | 180 | 264 | B4 | 10110100 |
-| µ | 181 | 265 | B5 | 10110101 |
-| ¶ | 182 | 266 | B6 | 10110110 |
-| · | 183 | 267 | B7 | 10110111 |
-| ¸ | 184 | 270 | B8 | 10111000 |
-| ¹ | 185 | 271 | B9 | 10111001 |
-| º | 186 | 272 | BA | 10111010 |
-| » | 187 | 273 | BB | 10111011 |
-| ¼ | 188 | 274 | BC | 10111100 |
-| ½ | 189 | 275 | BD | 10111101 |
-| ¾ | 190 | 276 | BE | 10111110 |
-| ¿ | 191 | 277 | BF | 10111111 |
-| À | 192 | 300 | C0 | 11000000 |
-| Á | 193 | 301 | C1 | 11000001 |
-| Â | 194 | 302 | C2 | 11000010 |
-| Ã | 195 | 303 | C3 | 11000011 |
-| Ä | 196 | 304 | C4 | 11000100 |
-| Å | 197 | 305 | C5 | 11000101 |
-| Æ | 198 | 306 | C6 | 11000110 |
-| Ç | 199 | 307 | C7 | 11000111 |
-| È | 200 | 310 | C8 | 11001000 |
-| É | 201 | 311 | C9 | 11001001 |
-| Ê | 202 | 312 | CA | 11001010 |
-| Ë | 203 | 313 | CB | 11001011 |
-| Ì | 204 | 314 | CC | 11001100 |
-| Í | 205 | 315 | CD | 11001101 |
-| Î | 206 | 316 | CE | 11001110 |
-| Ï | 207 | 317 | CF | 11001111 |
-| Ð | 208 | 320 | D0 | 11010000 |
-| Ñ | 209 | 321 | D1 | 11010001 |
-| Ò | 210 | 322 | D2 | 11010010 |
-| Ó | 211 | 323 | D3 | 11010011 |
-| Ô | 212 | 324 | D4 | 11010100 |
-| Õ | 213 | 325 | D5 | 11010101 |
-| Ö | 214 | 326 | D6 | 11010110 |
-| × | 215 | 327 | D7 | 11010111 |
-| Ø | 216 | 330 | D8 | 11011000 |
-| Ù | 217 | 331 | D9 | 11011001 |
-| Ú | 218 | 332 | DA | 11011010 |
-| Û | 219 | 333 | DB | 11011011 |
-| Ü | 220 | 334 | DC | 11011100 |
-| Ý | 221 | 335 | DD | 11011101 |
-| Þ | 222 | 336 | DE | 11011110 |
-| ß | 223 | 337 | DF | 11011111 |
-| à | 224 | 340 | E0 | 11100000 |
-| á | 225 | 341 | E1 | 11100001 |
-| â | 226 | 342 | E2 | 11100010 |
-| ã | 227 | 343 | E3 | 11100011 |
-| ä | 228 | 344 | E4 | 11100100 |
-| å | 229 | 345 | E5 | 11100101 |
-| æ | 230 | 346 | E6 | 11100110 |
-| ç | 231 | 347 | E7 | 11100111 |
-| è | 232 | 350 | E8 | 11101000 |
-| é | 233 | 351 | E9 | 11101001 |
-| ê | 234 | 352 | EA | 11101010 |
-| ë | 235 | 353 | EB | 11101011 |
-| ì | 236 | 354 | EC | 11101100 |
-| í | 237 | 355 | ED | 11101101 |
-| î | 238 | 356 | EE | 11101110 |
-| ï | 239 | 357 | EF | 11101111 |
-| ð | 240 | 360 | F0 | 11110000 |
-| ñ | 241 | 361 | F1 | 11110001 |
-| ò | 242 | 362 | F2 | 11110010 |
-| ó | 243 | 363 | F3 | 11110011 |
-| ô | 244 | 364 | F4 | 11110100 |
-| õ | 245 | 365 | F5 | 11110101 |
-| ö | 246 | 366 | F6 | 11110110 |
-| ÷ | 247 | 367 | F7 | 11110111 |
-| ø | 248 | 370 | F8 | 11111000 |
-| ù | 249 | 371 | F9 | 11111001 |
-| ú | 250 | 372 | FA | 11111010 |
-| û | 251 | 373 | FB | 11111011 |
-| ü | 252 | 374 | FC | 11111100 |
-| ý | 253 | 375 | FD | 11111101 |
-| þ | 254 | 376 | FE | 11111110 |
-| ÿ | 255 | 377 | FF | 11111111 |
{.show-header}
diff --git a/source/_posts/aspect-ratio.md b/source/_posts/aspect-ratio.md
index db8d405e..fa2e3238 100644
--- a/source/_posts/aspect-ratio.md
+++ b/source/_posts/aspect-ratio.md
@@ -1,30 +1,29 @@
---
title: Aspect Ratio
date: 2022-09-21 10:28:43
-background: bg-emerald-600
+background: bg-indigo-600
tags:
- - photo
- - image
- - aspect
- - ratio
- - resolutions
+ - photo
+ - image
+ - aspect
+ - ratio
+ - resolutions
categories:
- - Other
+ - Other
intro: |
- This cheat sheet lists some common aspect ratios and their pixel resolutions. Always confirm your final delivery ratio when shooting.
+ This cheat sheet lists some common aspect ratios and their pixel resolutions. Always confirm your final delivery ratio when shooting.
---
-
-Getting Started {.cols-2}
----------------
+## Getting Started {.cols-2}
### Introduction
+
- The aspect ratio is the ratio between the width and height of the screen or image
- It's usually written as two numbers separated by a colon or "x", ex: 16:9 or 16x9
- Which is interpreted as W pixels in width for every H pixel in height.
- Resolution is the number of pixels (individual points of color)
-{.marker-round}
+{.marker-round}
### Multi-format of Aspect Ratio
@@ -51,20 +50,15 @@ Getting Started {.cols-2}
- [BBCode](https://tableconvert.com/html-to-bbcode?data=https://cheatsheets.zip/aspect-ratio#TableGenerator)
- [PDF](https://tableconvert.com/html-to-pdf?data=https://cheatsheets.zip/aspect-ratio#TableGenerator)
- [JPEG](https://tableconvert.com/html-to-jpeg?data=https://cheatsheets.zip/aspect-ratio#TableGenerator)
-{.cols-4 .marker-none}
-
-
-
-
-Lists of Aspect Ratios
--------------------
+{.cols-4 .marker-none}
+## Lists of Aspect Ratios
### 1080p {.row-span-2}
| Aspect Ratio | Resolution |
-|--------------|-------------|
+| ------------ | ----------- |
| 0.80 (4:5) | 864 x 1080 |
| 1.25 (5:4) | 1350 x 1080 |
| 1.33 (4:3) | 1440 x 1080 |
@@ -78,13 +72,13 @@ Lists of Aspect Ratios
| 2.39 | 1920 x 803 |
| 2.40 | 1920 x 800 |
| 2.44 | 1920 x 787 |
-{.show-header}
+{.show-header}
### 720p {.row-span-2}
| Aspect Ratio | Resolution |
-|--------------|------------|
+| ------------ | ---------- |
| 0.80 (4:5) | 576 x 720 |
| 1.25 (5:4) | 900 x 720 |
| 1.33 (4:3) | 960 x 720 |
@@ -98,35 +92,33 @@ Lists of Aspect Ratios
| 2.39 | 1280 x 536 |
| 2.40 | 1280 x 533 |
| 2.44 | 1280 x 525 |
-{.show-header}
+{.show-header}
### Cinema DCP 4K
| Aspect Ratio | Resolution |
-|-----------------------|-------------|
+| --------------------- | ----------- |
| Flat (1.85) | 3996 x 2160 |
| Scope (2.39) | 4096 x 1716 |
| Full Container (1.90) | 4096 x 2160 |
-{.show-header}
-
+{.show-header}
### Cinema DCP 2K
| Aspect Ratio | Resolution |
-|-----------------------|-------------|
+| --------------------- | ----------- |
| Flat (1.85) | 1998 x 1080 |
| Scope (2.39) | 2048 x 858 |
| Full Container (1.90) | 2048 x 1080 |
-{.show-header}
-
+{.show-header}
### 8K
| Aspect Ratio | Resolution |
-|--------------|-------------|
+| ------------ | ----------- |
| 0.80 (4:5) | 3686 x 4608 |
| 1.25 (5:4) | 5760 x 4608 |
| 1.33 (4:3) | 6144 x 4608 |
@@ -140,14 +132,13 @@ Lists of Aspect Ratios
| 2.39 | 8192 x 3428 |
| 2.40 | 8192 x 3413 |
| 2.44 | 8192 x 3357 |
-{.show-header}
-
+{.show-header}
### 6K
| Aspect Ratio | Resolution |
-|--------------|-------------|
+| ------------ | ----------- |
| 0.80 (4:5) | 2765 x 3456 |
| 1.25 (5:4) | 4320 x 3456 |
| 1.33 (4:3) | 4608 x 3456 |
@@ -161,13 +152,13 @@ Lists of Aspect Ratios
| 2.39 | 6144 x 2571 |
| 2.40 | 6144 x 2560 |
| 2.44 | 6144 x 2518 |
-{.show-header}
+{.show-header}
### 4K
| Aspect Ratio | Resolution |
-|--------------|-------------|
+| ------------ | ----------- |
| 0.80 (4:5) | 2765 x 3456 |
| 1.25 (5:4) | 4320 x 3456 |
| 1.33 (4:3) | 4608 x 3456 |
@@ -181,13 +172,13 @@ Lists of Aspect Ratios
| 2.39 | 6144 x 2571 |
| 2.40 | 6144 x 2560 |
| 2.44 | 6144 x 2518 |
-{.show-header}
+{.show-header}
### 3K
| Aspect Ratio | Resolution |
-|--------------|-------------|
+| ------------ | ----------- |
| 0.80 (4:5) | 1382 x 1728 |
| 1.25 (5:4) | 2160 x 1728 |
| 1.33 (4:3) | 2304 x 1728 |
@@ -201,13 +192,13 @@ Lists of Aspect Ratios
| 2.39 | 3072 x 1285 |
| 2.40 | 3072 x 1280 |
| 2.44 | 3072 x 1259 |
-{.show-header}
+{.show-header}
### 2K
| Aspect Ratio | Resolution |
-|--------------|-------------|
+| ------------ | ----------- |
| 0.80 (4:5) | 922 x 1152 |
| 1.25 (5:4) | 1440 x 1152 |
| 1.33 (4:3) | 1536 x 1152 |
@@ -221,14 +212,13 @@ Lists of Aspect Ratios
| 2.39 | 2048 x 858 |
| 2.40 | 2048 x 853 |
| 2.44 | 2048 x 838 |
-{.show-header}
-
+{.show-header}
### 8K UHD
| Aspect Ratio | Resolution |
-|--------------|-------------|
+| ------------ | ----------- |
| 0.80 (4:5) | 2765 x 3456 |
| 1.25 (5:4) | 5400 x 3456 |
| 1.33 (4:3) | 5760 x 3456 |
@@ -242,13 +232,13 @@ Lists of Aspect Ratios
| 2.39 | 7680 x 3213 |
| 2.40 | 7680 x 3200 |
| 2.44 | 7680 x 3148 |
-{.show-header}
+{.show-header}
### 5K
| Aspect Ratio | Resolution |
-|--------------|-------------|
+| ------------ | ----------- |
| 0.80 (4:5) | 2304 x 2880 |
| 1.25 (5:4) | 3600 x 2880 |
| 1.33 (4:3) | 3840 x 2880 |
@@ -262,13 +252,13 @@ Lists of Aspect Ratios
| 2.39 | 5120 x 2142 |
| 2.40 | 5120 x 2133 |
| 2.44 | 5120 x 2098 |
-{.show-header}
+{.show-header}
### 4K UHD
| Aspect Ratio | Resolution |
-|--------------|-------------|
+| ------------ | ----------- |
| 0.80 (4:5) | 1728 x 2160 |
| 1.25 (5:4) | 2700 x 2160 |
| 1.33 (4:3) | 2880 x 2160 |
@@ -282,13 +272,13 @@ Lists of Aspect Ratios
| 2.39 | 3840 x 1607 |
| 2.40 | 3840 x 1600 |
| 2.44 | 3840 x 1574 |
-{.show-header}
+{.show-header}
### 3K UHD
| Aspect Ratio | Resolution |
-|--------------|-------------|
+| ------------ | ----------- |
| 0.80 (4:5) | 1296 x 1620 |
| 1.25 (5:4) | 2025 x 1620 |
| 1.33 (4:3) | 2160 x 1620 |
@@ -302,10 +292,5 @@ Lists of Aspect Ratios
| 2.39 | 2880 x 1205 |
| 2.40 | 2880 x 1200 |
| 2.44 | 2880 x 1180 |
-{.show-header}
-
-
-
-
-
+{.show-header}
diff --git a/source/_posts/audacity.md b/source/_posts/audacity.md
index ec4bcea8..0ba5e0b3 100644
--- a/source/_posts/audacity.md
+++ b/source/_posts/audacity.md
@@ -2,220 +2,210 @@
title: Audacity
date: 2022-11-23 16:23:31.701833
background: bg-[#0000e1]
-label:
-tags:
- -
- -
+label:
+tags:
+ -
+ -
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 135 default keyboard shortcuts found in Audacity
+ A visual cheat-sheet for the 135 default keyboard shortcuts found in Audacity
---
-
-
-Keyboard Shortcuts
-------------------
-
-
+## Keyboard Shortcuts
### File Menu
-Shortcut | Action
----|---
-`Ctrl` `N` | New
-`Ctrl` `O` | Open
-`Ctrl` `W` | Close
-`Ctrl` `Q` | Exit
-`Ctrl` `S` | Save project
-`Ctrl` `Shift` `E` | Export audio
-`Ctrl` `Shift` `L` | Export multiple
-`Ctrl` `Shift` `I` | Import audio
-{.shortcuts}
-
+| Shortcut | Action |
+| ------------------ | --------------- |
+| `Ctrl` `N` | New |
+| `Ctrl` `O` | Open |
+| `Ctrl` `W` | Close |
+| `Ctrl` `Q` | Exit |
+| `Ctrl` `S` | Save project |
+| `Ctrl` `Shift` `E` | Export audio |
+| `Ctrl` `Shift` `L` | Export multiple |
+| `Ctrl` `Shift` `I` | Import audio |
-### Edit Menu
-
-Shortcut | Action
----|---
-`Ctrl` `Z` | Undo
-`Ctrl` `Y` | Redo
-`Ctrl` `X` | Cut
-`Ctrl` `K` | Delete
-`Ctrl` `C` | Copy
-`Ctrl` `V` | Paste
-`Ctrl` `D` | Duplicate
-`Ctrl` `P` | Preferences
-`Ctrl` `Alt` `X` | Split cut
-`Ctrl` `Alt` `K` | Split delete
-`Ctrl` `L` | Silence audio
-`Ctrl` `T` | Trim audio
-`Ctrl` `Alt` `I` | Split new
-`Ctrl` `J` | Join
-`Ctrl` `Shift` `J` | Detach at silences
-`Ctrl` `B` | Add label at selection
-`Ctrl` `M` | Add label at playback position
-`Ctrl` `Alt` `V` | Paste text to new label
-`Alt` `X` | Cut labeled audio
-`Alt` `K` | Delete labeled audio
-`Alt` `Shift` `X` | Split cut labeled audio
-`Alt` `Shift` `K` | Split delete labeled audio
-`Alt` `L` | Silence labeled audio
-`Alt` `Shift` `C` | Copy labeled audio
-`Alt` `I` | Split labeled audio
-`Alt` `J` | Join labeled audio
-`Alt` `Shift` `J` | Detach labeled audio at silences
{.shortcuts}
+### Edit Menu
+| Shortcut | Action |
+| ------------------ | -------------------------------- |
+| `Ctrl` `Z` | Undo |
+| `Ctrl` `Y` | Redo |
+| `Ctrl` `X` | Cut |
+| `Ctrl` `K` | Delete |
+| `Ctrl` `C` | Copy |
+| `Ctrl` `V` | Paste |
+| `Ctrl` `D` | Duplicate |
+| `Ctrl` `P` | Preferences |
+| `Ctrl` `Alt` `X` | Split cut |
+| `Ctrl` `Alt` `K` | Split delete |
+| `Ctrl` `L` | Silence audio |
+| `Ctrl` `T` | Trim audio |
+| `Ctrl` `Alt` `I` | Split new |
+| `Ctrl` `J` | Join |
+| `Ctrl` `Shift` `J` | Detach at silences |
+| `Ctrl` `B` | Add label at selection |
+| `Ctrl` `M` | Add label at playback position |
+| `Ctrl` `Alt` `V` | Paste text to new label |
+| `Alt` `X` | Cut labeled audio |
+| `Alt` `K` | Delete labeled audio |
+| `Alt` `Shift` `X` | Split cut labeled audio |
+| `Alt` `Shift` `K` | Split delete labeled audio |
+| `Alt` `L` | Silence labeled audio |
+| `Alt` `Shift` `C` | Copy labeled audio |
+| `Alt` `I` | Split labeled audio |
+| `Alt` `J` | Join labeled audio |
+| `Alt` `Shift` `J` | Detach labeled audio at silences |
-
-### Extra Menu {.row-span-4}
-
-Shortcut | Action
----|---
-`F11` | Toggle full screen
-`1` | Play one second
-`B` | Play to selection
-`Shift` `F5` | Play before selection start
-`Shift` `F6` | Play after selection start
-`Shift` `F7` | Play before selection end
-`Shift` `F8` | Play after selection end
-`Ctrl` `Shift` `F5` | Play before and after selection start
-`Ctrl` `Shift` `F7` | Play before and after selection end
-`C` | Play cut preview
-`F1` | Selection tool
-`F2` | Envelope tool
-`F3` | Draw tool
-`F4` | Zoom tool
-`F5` | Time shift tool
-`F6` | Multi tool
-`A` | Previous tool
-`D` | Next tool
-`Backspace` | Delete
-`Alt` `Left` | Move to previous label
-`Alt` `Right` | Move to next label
-`Left` | Short seek left during playback
-`Right` | Short seek right during playback
-`Shift` `Left` | Long seek left during playback
-`Shift` `Right` | Long seek right during playback
-`Shift` `I` | Change recording device
-`Shift` `O` | Change playback device
-`Shift` `H` | Change audio host
-`Shift` `N` | Change recording channels
-`Shift` `Home` | Selection to start
-`Shift` `End` | Selection to end
-`Shift` `Left` | Selection extend left
-`Shift` `Right` | Selection extend right
-`Ctrl` `Shift` `Right` | Selection contract left
-`Ctrl` `Shift` `Left` | Selection contract right
-`Ctrl` `Shift` `F6` | Move backwards from toolbars to tracks
-`Ctrl` `F6` | Move forward from toolbars to tracks
-`Up` | Move focus to previous track
-`Down` | Move focus to next track
-`Ctrl` `Home` | Move focus to first track
-`Ctrl` `End` | Move focus to last track
-`Shift` `Up` | Move focus to previous and select
-`Shift` `Down` | Move focus to next and select
-`Enter` | Toggle focused track
-`Left` | Cursor left
-`Right` | Cursor right
-`,` | Cursor short jump left
-`.` | Cursor short jump right
-`Shift` `,` | Cursor long jump left
-`Shift` `.` | Cursor long jump right
-`Shift` `P` | Change pan on focused track
-`Alt` `Shift` `Left` | Pan left on focused track
-`Alt` `Shift` `Right` | Pan right on focused track
-`Shift` `G` | Change gain on focused track
-`Alt` `Shift` `Up` | Increase gain on focused track
-`Alt` `Shift` `Down` | Decrease gain on focused track
-`Shift` `U` | Mute or unmute focused track
-`Shift` `S` | Solo or unsolo focused track
-`Shift` `C` | Close focused track
{.shortcuts}
+### Extra Menu {.row-span-4}
+| Shortcut | Action |
+| ---------------------- | -------------------------------------- |
+| `F11` | Toggle full screen |
+| `1` | Play one second |
+| `B` | Play to selection |
+| `Shift` `F5` | Play before selection start |
+| `Shift` `F6` | Play after selection start |
+| `Shift` `F7` | Play before selection end |
+| `Shift` `F8` | Play after selection end |
+| `Ctrl` `Shift` `F5` | Play before and after selection start |
+| `Ctrl` `Shift` `F7` | Play before and after selection end |
+| `C` | Play cut preview |
+| `F1` | Selection tool |
+| `F2` | Envelope tool |
+| `F3` | Draw tool |
+| `F4` | Zoom tool |
+| `F5` | Time shift tool |
+| `F6` | Multi tool |
+| `A` | Previous tool |
+| `D` | Next tool |
+| `Backspace` | Delete |
+| `Alt` `Left` | Move to previous label |
+| `Alt` `Right` | Move to next label |
+| `Left` | Short seek left during playback |
+| `Right` | Short seek right during playback |
+| `Shift` `Left` | Long seek left during playback |
+| `Shift` `Right` | Long seek right during playback |
+| `Shift` `I` | Change recording device |
+| `Shift` `O` | Change playback device |
+| `Shift` `H` | Change audio host |
+| `Shift` `N` | Change recording channels |
+| `Shift` `Home` | Selection to start |
+| `Shift` `End` | Selection to end |
+| `Shift` `Left` | Selection extend left |
+| `Shift` `Right` | Selection extend right |
+| `Ctrl` `Shift` `Right` | Selection contract left |
+| `Ctrl` `Shift` `Left` | Selection contract right |
+| `Ctrl` `Shift` `F6` | Move backwards from toolbars to tracks |
+| `Ctrl` `F6` | Move forward from toolbars to tracks |
+| `Up` | Move focus to previous track |
+| `Down` | Move focus to next track |
+| `Ctrl` `Home` | Move focus to first track |
+| `Ctrl` `End` | Move focus to last track |
+| `Shift` `Up` | Move focus to previous and select |
+| `Shift` `Down` | Move focus to next and select |
+| `Enter` | Toggle focused track |
+| `Left` | Cursor left |
+| `Right` | Cursor right |
+| `,` | Cursor short jump left |
+| `.` | Cursor short jump right |
+| `Shift` `,` | Cursor long jump left |
+| `Shift` `.` | Cursor long jump right |
+| `Shift` `P` | Change pan on focused track |
+| `Alt` `Shift` `Left` | Pan left on focused track |
+| `Alt` `Shift` `Right` | Pan right on focused track |
+| `Shift` `G` | Change gain on focused track |
+| `Alt` `Shift` `Up` | Increase gain on focused track |
+| `Alt` `Shift` `Down` | Decrease gain on focused track |
+| `Shift` `U` | Mute or unmute focused track |
+| `Shift` `S` | Solo or unsolo focused track |
+| `Shift` `C` | Close focused track |
-
+{.shortcuts}
### Select Menu
-Shortcut | Action
----|---
-`Ctrl` `A` | Select all
-`Ctrl` `Shift` `A` | Select none
-`Z` | Select at zero crossings
-`Ctrl` `Shift` `K` | Select in all tracks
-`Ctrl` `Shift` `Y` | Select in all sync-locked tracks
-`[` | Left at playback position
-`]` | Right at playback position
-`Shift` `J` | Track start to cursor
-`Shift` `K` | Cursor to track end
-`Q` | Toggle spectral selection
-`Ctrl` `Alt` `P` | Previous clip
-`Ctrl` `Alt` `N` | Next clip
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | -------------------------------- |
+| `Ctrl` `A` | Select all |
+| `Ctrl` `Shift` `A` | Select none |
+| `Z` | Select at zero crossings |
+| `Ctrl` `Shift` `K` | Select in all tracks |
+| `Ctrl` `Shift` `Y` | Select in all sync-locked tracks |
+| `[` | Left at playback position |
+| `]` | Right at playback position |
+| `Shift` `J` | Track start to cursor |
+| `Shift` `K` | Cursor to track end |
+| `Q` | Toggle spectral selection |
+| `Ctrl` `Alt` `P` | Previous clip |
+| `Ctrl` `Alt` `N` | Next clip |
+{.shortcuts}
### View Menu
-Shortcut | Action
----|---
-`Ctrl` `1` | Zoom in
-`Ctrl` `2` | Zoom normal
-`Ctrl` `3` | Zoom out
-`Ctrl` `E` | Zoom to selection
-`Shift` `Z` | Zoom toggle
-`Ctrl` `F` | Fit to width
-`Ctrl` `Shift` `F` | Fit to height
-`Ctrl` `Shift` `C` | Collapse all tracks
-`Ctrl` `Shift` `X` | Expand collapsed tracks
-`Ctrl` `[` | Skip to selection start
-`Ctrl` `]` | Skip to selection end
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ----------------------- |
+| `Ctrl` `1` | Zoom in |
+| `Ctrl` `2` | Zoom normal |
+| `Ctrl` `3` | Zoom out |
+| `Ctrl` `E` | Zoom to selection |
+| `Shift` `Z` | Zoom toggle |
+| `Ctrl` `F` | Fit to width |
+| `Ctrl` `Shift` `F` | Fit to height |
+| `Ctrl` `Shift` `C` | Collapse all tracks |
+| `Ctrl` `Shift` `X` | Expand collapsed tracks |
+| `Ctrl` `[` | Skip to selection start |
+| `Ctrl` `]` | Skip to selection end |
+{.shortcuts}
### Transport Menu
-Shortcut | Action
----|---
-`Space` | Play or stop
-`X` | Play or stop and set cursor
-`Shift` `Space` | Loop play
-`P` | Pause
-`R` | Record
-`Shift` `R` | Record new track
-`Shift` `T` | Timer record...
-`Shift` `D` | Punch and roll record
-`P` | Pause
-`J` | Cursor to track start
-`K` | Cursor to track end
-`Home` | Cursor to project start
-`End` | Cursor to project end
-{.shortcuts}
+| Shortcut | Action |
+| --------------- | --------------------------- |
+| `Space` | Play or stop |
+| `X` | Play or stop and set cursor |
+| `Shift` `Space` | Loop play |
+| `P` | Pause |
+| `R` | Record |
+| `Shift` `R` | Record new track |
+| `Shift` `T` | Timer record... |
+| `Shift` `D` | Punch and roll record |
+| `P` | Pause |
+| `J` | Cursor to track start |
+| `K` | Cursor to track end |
+| `Home` | Cursor to project start |
+| `End` | Cursor to project end |
+{.shortcuts}
### Tracks Menu
-Shortcut | Action
----|---
-`Ctrl` `Shift` `N` | Add new mono track
-`Ctrl` `Shift` `M` | Mix and render to new track
-`Ctrl` `U` | Mute all tracks
-`Ctrl` `Shift` `U` | Unmute all tracks
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | --------------------------- |
+| `Ctrl` `Shift` `N` | Add new mono track |
+| `Ctrl` `Shift` `M` | Mix and render to new track |
+| `Ctrl` `U` | Mute all tracks |
+| `Ctrl` `Shift` `U` | Unmute all tracks |
+{.shortcuts}
### Effect Menu
-Shortcut | Action
----|---
-`Ctrl` `R` | Repeat last effect
-{.shortcuts}
+| Shortcut | Action |
+| ---------- | ------------------ |
+| `Ctrl` `R` | Repeat last effect |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Audacity](https://manual.audacityteam.org/man/keyboard_shortcut_reference.html) _(manual.audacityteam.org)_
+- [Keyboard shortcuts for Audacity](https://manual.audacityteam.org/man/keyboard_shortcut_reference.html)
+ _(manual.audacityteam.org)_
diff --git a/source/_posts/awk.md b/source/_posts/awk.md
index 702e72f3..8f8a9c67 100644
--- a/source/_posts/awk.md
+++ b/source/_posts/awk.md
@@ -3,46 +3,50 @@ title: Awk
date: 2020-12-31 15:18:34
background: bg-slate-600
tags:
- - bash
- - text
- - script
+ - bash
+ - text
+ - script
categories:
- - Linux Command
+ - Linux Command
intro: |
- This is a one page quick reference cheat sheet to the [GNU awk](https://www.gnu.org/software/gawk/manual/gawk.html), which covers commonly used awk expressions and commands.
+ This is a one page quick reference cheat sheet to the [GNU awk](https://www.gnu.org/software/gawk/manual/gawk.html), which covers commonly used awk expressions and commands.
plugins:
- - copyCode
+ - copyCode
---
-Getting Started
----------------
+## Getting Started
### Have a try
+
```shell script {.wrap}
$ awk -F: '{print $1, $NF}' /etc/passwd
```
-----
-| - | - | - |
-|---|---------------|---------------------------|
-| | `-F:` | Colon as a separator |
-| | `{...}` | Awk program |
-| | `print` | Prints the current record |
-| | `$1` | First field |
-| | `$NF` | Last field |
-| | `/etc/passwd` | Input data file |
-{.left-text}
+---
+
+| - | - |
+| ------------- | ------------------------- |
+| `-F:` | Colon as a separator |
+| `{...}` | Awk program |
+| `print` | Prints the current record |
+| `$1` | First field |
+| `$NF` | Last field |
+| `/etc/passwd` | Input data file |
+
+{.left-text}
+### Awk program
-### Awk program
```
-BEGIN {
_(default " ")_ |
+| `OFS` | `O`utput `F`ield `S`eparator
_(default " ")_ |
| `FS` | input `F`ield `S`eparator
_(default " ")_ |
| `ORS` | `O`utput `R`ecord `S`eparator
_(default "\n")_ |
| `RS` | input `R`ecord `S`eparator
_(default "\n")_ |
| `FILENAME` | Name of the file |
-
-
### Expressions
+
| - | - |
-|---------------------|------------------------------------|
+| ------------------- | ---------------------------------- |
| `$1 == "root"` | First field equals root |
| `{print $(NF-1)}` | Second last field |
| `NR!=1{print $0}` | From 2nd record |
@@ -177,7 +178,7 @@ Awk Variables
| `END{print NR}` | Total records |
| `BEGIN{print OFMT}` | Output format |
| `{print NR, $0}` | Line number |
-| `{print NR " " $0}` | Line number (tab) |
+| `{print NR " " $0}` | Line number (tab) |
| `{$1 = NR; print}` | Replace 1st field with line number |
| `$NF > 4` | Last field > 4 |
| `NR % 2 == 0` | Even records |
@@ -185,70 +186,72 @@ Awk Variables
| `BEGIN{print ARGC}` | Total arguments |
| `ORS=NR%5?",":"\n"` | Concatenate records |
-
-
-
### Examples
+
Print sum and average
+
```
awk -F: '{sum += $3}
END { print sum, sum/NR }
' /etc/passwd
```
+
Printing parameters
+
```
awk 'BEGIN {
for (i = 1; i < ARGC; i++)
print ARGV[i] }' a b c
```
+
Output field separator as a comma
+
```
awk 'BEGIN { FS=":";OFS=","}
{print $1,$2,$3,$4}' /etc/passwd
```
+
Position of match
+
```
awk 'BEGIN {
if (match("One Two Three", "Tw"))
print RSTART }'
```
+
Length of match
+
```
awk 'BEGIN {
if (match("One Two Three", "re"))
print RLENGTH }'
```
-
-
-
-
### Environment Variables
+
| - | - |
-|-----------|-----------------------------------------------------------|
+| --------- | --------------------------------------------------------- |
| `ARGC` | Number or arguments |
| `ARGV` | Array of arguments |
| `FNR` | `F`ile `N`umber of `R`ecords |
-| `OFMT` | Format for numbers
_(default "%.6g")_ |
+| `OFMT` | Format for numbers
_(default "%.6g")_ |
| `RSTART` | Location in the string |
| `RLENGTH` | Length of match |
| `SUBSEP` | Multi-dimensional array separator
_(default "\034")_ |
| `ARGIND` | Argument Index |
-
-
### GNU awk only
+
| - | - |
-|---------------|-----------------------|
+| ------------- | --------------------- |
| `ENVIRON` | Environment variables |
| `IGNORECASE` | Ignore case |
| `CONVFMT` | Conversion format |
| `ERRNO` | System errors |
| `FIELDWIDTHS` | Fixed width fields |
-
-
### Defining variable
+
```
awk -v var1="Hello" -v var2="Wold" '
END {print var1, var2}
@@ -256,80 +259,94 @@ awk -v var1="Hello" -v var2="Wold" '
```
#### Use shell variables
+
```
awk -v varName="$PWD" '
END {print varName}' `
- `<=`
- `>=`
-{.cols-3 .marker-none}
-
+{.cols-3 .marker-none}
### Examples
+
```
awk 'BEGIN {
if ("foo" ~ "^fo+$")
print "Fooey!";
}'
```
+
#### Not match
+
```
awk 'BEGIN {
if ("boo" !~ "^fo+$")
print "Boo!";
}'
```
+
#### if in array
+
```
awk 'BEGIN {
assoc["foo"] = "bar";
@@ -339,14 +356,12 @@ awk 'BEGIN {
}'
```
+## Awk Functions
-
-
-Awk Functions
-----------
### Common functions {.col-span-2}
+
| Function | Description |
-|-----------------------|---------------------------------------------------------------------------------|
+| --------------------- | ------------------------------------------------------------------------------- |
| `index(s,t)` | Position in string s where string t occurs, 0 if not found |
| `length(s)` | Length of string s (or $0 if no arg) |
| `rand` | Random number between 0 and 1 |
@@ -362,8 +377,8 @@ Awk Functions
| `toupper(s)` | String s to uppercase |
| `getline` | Set $0 to next input record from current input file. |
-
### User defined function
+
```
awk '
# Returns minimum number
@@ -382,7 +397,7 @@ awk '
function main(num1, num2){
result = find_min(num1, num2)
print "Minimum =", result
-
+
result = find_max(num1, num2)
print "Maximum =", result
}
@@ -393,15 +408,10 @@ awk '
'
```
-
-
-
-Awk Arrays
----------
-
-
+## Awk Arrays
### Array with index
+
```
awk 'BEGIN {
arr[0] = "foo";
@@ -413,6 +423,7 @@ awk 'BEGIN {
```
### Array with key
+
```
awk 'BEGIN {
assoc["foo"] = "bar";
@@ -422,8 +433,8 @@ awk 'BEGIN {
}'
```
-
### Array with split
+
```
awk 'BEGIN {
split("foo:bar:baz", arr, ":");
@@ -433,6 +444,7 @@ awk 'BEGIN {
```
### Array with asort
+
```
awk 'BEGIN {
arr[0] = 3
@@ -444,9 +456,8 @@ awk 'BEGIN {
}'
```
-
-
### Multi-dimensional
+
```
awk 'BEGIN {
multidim[0,0] = "foo";
@@ -457,24 +468,23 @@ awk 'BEGIN {
```
### Multi-dimensional iteration
+
```
awk 'BEGIN {
array[1,2]=3;
array[2,3]=5;
for (comb in array) {
split(comb,sep,SUBSEP);
- print sep[1], sep[2],
+ print sep[1], sep[2],
array[sep[1],sep[2]]
}
}'
```
-
-
-Awk Conditions
-----------
+## Awk Conditions
### if-else statement
+
```
awk -v count=2 'BEGIN {
if (count == 1)
@@ -483,15 +493,17 @@ awk -v count=2 'BEGIN {
print "Huh?";
}'
```
+
#### Ternary operator
+
```
awk -v count=2 'BEGIN {
print (count==1) ? "Yes" : "Huh?";
}'
```
-
### Exists
+
```
awk 'BEGIN {
assoc["foo"] = "bar";
@@ -500,7 +512,9 @@ awk 'BEGIN {
print "Fooey!";
}'
```
+
#### Not exists
+
```
awk 'BEGIN {
assoc["foo"] = "bar";
@@ -510,8 +524,8 @@ awk 'BEGIN {
}'
```
-
### switch
+
```
awk -F: '{
switch (NR * 2 + 1) {
@@ -519,31 +533,32 @@ awk -F: '{
case "11":
print NR - 1
break
-
+
case /2[[:digit:]]+/:
print NR
-
+
default:
print NR + 1
-
+
case -1:
print NR * -1
}
}' /etc/passwd
```
-
-Awk Loops
-----------
+## Awk Loops
### for...i
+
```
awk 'BEGIN {
for (i = 0; i < 10; i++)
print "i=" i;
}'
```
-#### Powers of two between 1 and 100
+
+#### Powers of two between 1 and 100
+
```
awk 'BEGIN {
for (i = 1; i <= 100; i *= 2)
@@ -551,8 +566,8 @@ awk 'BEGIN {
}'
```
-
### for...in
+
```
awk 'BEGIN {
assoc["key1"] = "val1"
@@ -561,7 +576,9 @@ awk 'BEGIN {
print assoc[key];
}'
```
+
#### Arguments
+
```
awk 'BEGIN {
for (argnum in ARGV)
@@ -569,10 +586,10 @@ awk 'BEGIN {
}' a b c
```
-
-
### Examples {.row-span-3}
+
#### Reverse records
+
```
awk -F: '{ x[NR] = $0 }
END {
@@ -583,6 +600,7 @@ awk -F: '{ x[NR] = $0 }
```
#### Reverse fields
+
```
awk -F: '{
for (i = NF; i > 0; i--)
@@ -592,6 +610,7 @@ awk -F: '{
```
#### Sum by record
+
```
awk -F: '{
s=0;
@@ -601,8 +620,8 @@ awk -F: '{
}' /etc/passwd
```
-
#### Sum whole file
+
```
awk -F: '
{for (i = 1; i <= NF; i++)
@@ -612,9 +631,8 @@ awk -F: '
' /etc/passwd
```
-
-
### while {.row-span-2}
+
```
awk 'BEGIN {
while (a < 10) {
@@ -623,7 +641,9 @@ awk 'BEGIN {
}
}'
```
+
#### do...while
+
```
awk '{
i = 1
@@ -634,9 +654,8 @@ awk '{
}' /etc/passwd
```
-
-
### Break
+
```
awk 'BEGIN {
break_num = 5
@@ -648,9 +667,8 @@ awk 'BEGIN {
}'
```
-
-
### Continue
+
```
awk 'BEGIN {
for (x = 0; x <= 10; x++) {
@@ -662,28 +680,30 @@ awk 'BEGIN {
}'
```
-
-
-Awk Formatted Printing
----------
+## Awk Formatted Printing
### Usage
+
#### Right align
+
```
awk 'BEGIN{printf "|%10s|\n", "hello"}'
| hello|
```
+
#### Left align
+
```
awk 'BEGIN{printf "|%-10s|\n", "hello"}'
|hello |
```
-### Common specifiers
+### Common specifiers
+
| Character | Description |
-|---------------|-----------------------|
+| ------------- | --------------------- |
| `c` | ASCII character |
| `d` | Decimal integer |
| `e`, `E`, `f` | Floating-point format |
@@ -691,25 +711,24 @@ awk 'BEGIN{printf "|%-10s|\n", "hello"}'
| `s` | String |
| `%` | Literal % |
-
-
-
### Space
+
```
awk -F: '{
printf "%-10s %s\n", $1, $(NF-1)
}' /etc/passwd | head -n 3
```
+
Outputs
+
```shell script
root /root
bin /bin
daemon /sbin
```
-
-
### Header
+
```
awk -F: 'BEGIN {
printf "%-10s %s\n", "User", "Home"
@@ -717,7 +736,9 @@ awk -F: 'BEGIN {
{ printf "%-10s %s\n", $1, $(NF-1) }
' /etc/passwd | head -n 5
```
+
Outputs
+
```
User Home
---- ----
@@ -726,12 +747,10 @@ bin /bin
daemon /sbin
```
-
-
-Miscellaneous
--------------
+## Miscellaneous
### Regex Metacharacters
+
- `\`
- `^`
- `$`
@@ -744,11 +763,13 @@ Miscellaneous
- `*`
- `+`
- `?`
+
{.cols-3 .marker-none}
### Escape Sequences
+
| - | - |
-|------|---------------------|
+| ---- | ------------------- |
| `\b` | Backspace |
| `\f` | Form feed |
| `\n` | Newline (line feed) |
@@ -756,8 +777,8 @@ Miscellaneous
| `\t` | Horizontal tab |
| `\v` | Vertical tab |
-
### Run script
+
```shell script
$ cat demo.awk
#!/usr/bin/awk -f
@@ -768,11 +789,8 @@ $ awk -f demo.awk /etc/passwd
69
```
+## Also see
-Also see
---------
-
-- [The GNU Awk User's Guide](https://www-zeuthen.desy.de/dv/documentation/unixguide/infohtml/gawk/gawk.html) _(www-zeuthen.desy.de)_
+- [The GNU Awk User's Guide](https://www-zeuthen.desy.de/dv/documentation/unixguide/infohtml/gawk/gawk.html)
+ _(www-zeuthen.desy.de)_
- [AWK cheatsheet](https://gist.github.com/Rafe/3102414) _(gist.github.com)_
-
-
diff --git a/source/_posts/bash.md b/source/_posts/bash.md
index db11a49d..6b5a12b2 100644
--- a/source/_posts/bash.md
+++ b/source/_posts/bash.md
@@ -3,21 +3,20 @@ title: Bash
date: 2020-11-25 18:28:43
background: bg-[#3e4548]
tags:
- - shell
- - sh
- - echo
- - script
- - linux
+ - shell
+ - sh
+ - echo
+ - script
+ - linux
categories:
- - Programming
- - Operating System
+ - Programming
+ - Operating System
intro: This is a quick reference cheat sheet to getting started with linux bash shell scripting.
plugins:
- - copyCode
+ - copyCode
---
-Getting Started
----------------
+## Getting Started
### hello.sh
@@ -27,12 +26,13 @@ Getting Started
VAR="world"
echo "Hello $VAR!" # => Hello world!
```
+
Execute the script
+
```shell script
$ bash hello.sh
```
-
### Variables
```bash
@@ -47,8 +47,6 @@ echo "${NAME}!" # => John! (Variables)
NAME = "John" # => Error (about space)
```
-
-
### Comments
```bash
@@ -62,15 +60,13 @@ very neat comment
in bash
'
```
-Multi-line comments use `:'` to open and `'` to close
-
-
+Multi-line comments use `:'` to open and `'` to close
### Arguments {.row-span-2}
| Expression | Description |
-|-------------|---------------------------------------|
+| ----------- | ------------------------------------- |
| `$1` … `$9` | Parameter 1 ... 9 |
| `$0` | Name of the script itself |
| `$1` | First argument |
@@ -84,7 +80,6 @@ Multi-line comments use `:'` to open and `'` to close
See: [Special parameters](http://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables)
-
### Functions
```bash
@@ -114,10 +109,11 @@ See: [Conditionals](#bash-conditionals)
```bash
echo {A,B}.js
```
+
---
| Expression | Description |
-|------------|---------------------|
+| ---------- | ------------------- |
| `{A,B}` | Same as `A B` |
| `{A,B}.js` | Same as `A.js B.js` |
| `{1..5}` | Same as `1 2 3 4 5` |
@@ -136,17 +132,12 @@ echo "I'm in `pwd`"
See: [Command substitution](http://wiki.bash-hackers.org/syntax/expansion/cmdsubst)
-
-
-Bash Parameter expansions
---------------------
-
-
+## Bash Parameter expansions
### Syntax {.row-span-2}
| Code | Description |
-|-------------------|---------------------|
+| ----------------- | ------------------- |
| `${FOO%suffix}` | Remove suffix |
| `${FOO#prefix}` | Remove prefix |
| `${FOO%%suffix}` | Remove long suffix |
@@ -155,32 +146,35 @@ Bash Parameter expansions
| `${FOO//from/to}` | Replace all |
| `${FOO/%from/to}` | Replace suffix |
| `${FOO/#from/to}` | Replace prefix |
+
#### Substrings
+
| Expression | Description |
-|-----------------|--------------------------------|
+| --------------- | ------------------------------ |
| `${FOO:0:3}` | Substring _(position, length)_ |
| `${FOO:(-3):3}` | Substring from the right |
+
#### Length
+
| Expression | Description |
-|------------|------------------|
+| ---------- | ---------------- |
| `${#FOO}` | Length of `$FOO` |
+
#### Default values
+
| Expression | Description |
-|-------------------|------------------------------------------|
+| ----------------- | ---------------------------------------- |
| `${FOO:-val}` | `$FOO`, or `val` if unset |
| `${FOO:=val}` | Set `$FOO` to `val` if unset |
| `${FOO:+val}` | `val` if `$FOO` is set |
| `${FOO:?message}` | Show message and exit if `$FOO` is unset |
-
-
### Substitution
```bash
echo ${food:-Cake} #=> $food or "Cake"
```
-
```bash
STR="/path/to/foo.cpp"
echo ${STR%.cpp} # /path/to/foo
@@ -196,7 +190,6 @@ echo ${STR##*/} # foo.cpp
echo ${STR/foo/bar} # /path/to/bar.cpp
```
-
### Slicing
```bash
@@ -212,17 +205,17 @@ echo ${name:(-2):2} # => hn
length=2
echo ${name:0:length} # => Jo
```
-See: [Parameter expansion](http://wiki.bash-hackers.org/syntax/pe)
-
+See: [Parameter expansion](http://wiki.bash-hackers.org/syntax/pe)
### basepath & dirpath
+
```bash
SRC="/path/to/foo.cpp"
```
```bash
-BASEPATH=${SRC##*/}
+BASEPATH=${SRC##*/}
echo $BASEPATH # => "foo.cpp"
@@ -230,12 +223,7 @@ DIRPATH=${SRC%$BASEPATH}
echo $DIRPATH # => "/path/to/"
```
-
-
-
-
-
-### Transform
+### Transform
```bash
STR="HELLO WORLD!"
@@ -251,11 +239,7 @@ echo "${ARR[@],}" # => hello world
echo "${ARR[@]^}" # => Hello World
```
-
-
-
-Bash Arrays
-------
+## Bash Arrays
### Defining arrays
@@ -277,12 +261,10 @@ declare -a Numbers=(1 2 3)
Numbers+=(4 5) # Append => 1 2 3 4 5
```
-
-
### Indexing
| - | - |
-|--------------------|---------------|
+| ------------------ | ------------- |
| `${Fruits[0]}` | First element |
| `${Fruits[-1]}` | Last element |
| `${Fruits[*]}` | All elements |
@@ -293,8 +275,6 @@ Numbers+=(4 5) # Append => 1 2 3 4 5
| `${Fruits[@]:3:2}` | Range |
| `${!Fruits[@]}` | Keys of all |
-
-
### Iteration
```bash
@@ -304,7 +284,9 @@ for e in "${Fruits[@]}"; do
echo $e
done
```
+
#### With index
+
```bash
for i in "${!Fruits[@]}"; do
printf "%s\t%s\n" "$i" "${Fruits[$i]}"
@@ -312,7 +294,6 @@ done
```
-
### Operations {.col-span-2}
```bash
@@ -326,6 +307,7 @@ lines=(`cat "logfile"`) # Read from file
```
### Arrays as arguments
+
```bash
function extract()
{
@@ -337,12 +319,7 @@ Fruits=('Apple' 'Banana' 'Orange')
extract Fruits 2 # => Orangle
```
-
-
-
-
-Bash Dictionaries
-------------
+## Bash Dictionaries
### Defining
@@ -357,7 +334,6 @@ sounds[bird]="tweet"
sounds[wolf]="howl"
```
-
### Working with dictionaries
```bash
@@ -375,24 +351,21 @@ for val in "${sounds[@]}"; do
echo $val
done
```
+
---
+
```bash
for key in "${!sounds[@]}"; do
echo $key
done
```
-
-
-
-
-Bash Conditionals
-------------
+## Bash Conditionals
### Integer conditions
| Condition | Description |
-|---------------------|---------------------------------------------|
+| ------------------- | ------------------------------------------- |
| `[[ NUM -eq NUM ]]` | \` | Select all layers
-`Shift` \` | Revert to the previous layer setting
-`Tab` | Start or stop edit mode
-`A` | Selects or deselects all
-`Ctrl` `A` | Apply size and rotation
-`Ctrl` `Shift` `A` | If the active object is automatically duplicated, brings up a menu for actually creating the objects
-`Shift` `A` | Brings up the add menu, the toolbox items that start with ADD
-`B` | Border select, draws a rectangle with the left mouse to select objects
-`Shift` `B` | Render border, this only works in camera view mode
-`C` | Center view, the position of the 3D cursor becomes the new center of the 3D window
-`Alt` `C` | Convert menu, depending on the active object a popup menu is displayed enabling you to convert certain types of ObData
-`Ctrl` `C` | Copy menu, this menu copies information from the active object to selected objects
-`Shift` `C` | Center zero view, the 3D cursor is set to zero and the view is changed so all objects can be displayed
-`D` | Display draw mode menu
-`Shift` `D` | Add duplicate, the selected objects are duplicated
-`Alt` `D` | Add linked duplicate, linked duplicates of the selected objects are created
-`Ctrl` `D` | Draw the texture image as wire
-`Alt` `E` | Start or stop edit mode
-`F` | If selected object is a mash, toggles face select mode on or off
-`Ctrl` `F` | Sort faces, the faces of the active mesh object are sorted based on the current view in the 3D window
-`G` | Grab mode, or translation mode
-`Alt` `G` | Clears translations, given in grab mode
-`Shift` `G` | Group selection
-`I` | Insert object key, a keyposition is inserted in the current frame of all selected objects
-`Ctrl` `J` | Join objects, all selected objects of the same type are added to the active object
-`K` | Show keys, the draw key option is turned on for all selected objects
-`Shift` `K` | Display popup menu for showing and selecting all keys
-`L` | Makes selected object local, makes library linked objects local for the current scene
-`Ctrl` `L` | Link selected, links some of the active object data to all selected objects
-`Shift` `L` | Select linked, selected all objects somehow linked to the active object
-`M` | Move selected objects to another layer
-`Ctrl` `M` | Mirror menu, it is possible to mirror an object along the X, Y, or Z axis
-`N` | Number panel, the location, rotation, and scaling of the active object are displayed and can be modified
-`Alt` `O` | Clear origin, the origin is erased for all child objects, which causes them to move ot the exact location of the parent objects
-`Shift` `O` | If the selected object is a mesh, toggles the subsurf on or off
-`Ctrl` `P` | Make selected objects the children of the active object
-`Alt` `P` | Clears parent relation, user is asked if they wish to keep or clear parent-induced transforms
-`R` | Rotate mode, works on selected objects
-`Alt` `R` | Clears rotation, the X, Y, and Z rotations of selected objects are set to zero
-`S` | Size mode or scaling mode, works on selected objects
-`Alt` `S` | Clears size, the X, Y, and Z dimensions of selected objects are set to 1
-`Shift` `S` | Opens the snap menu
-`T` | Texture space mode, the position of dimensions of the texture space for the selected objects can be changed in the same manner for grab and size mode
-`Ctrl` `T` | Makes selected objects track the active object
-`Alt` `T` | Clears old style track, constraint track is removed as all constrains are
-`U` | Makes object single user, the inverse operation of link
-`V` | Switches in and out of vertex paint mode
-`Alt` `V` | Object image aspect, this hotkey sets the X and Y dimensions of the selected objects in relation to the dimensions of the image texture they have
-`W` | Opens the object booleans menu
-`X` | Deletes selected objects
-`Z` | Toggles solid mode on or off
-`Shift` `Z` | Toggles shaded mode on or off
-`Alt` `Z` | Toggles textured mode on or off
-{.shortcuts}
+| Shortcut | Action |
+| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `Home` | All objects in the visible layer are displayed completely, centered in the window |
+| `PgUp` | Select the next object key, if more than one is selected the selection is shifted up cyclically |
+| `Shift` `PgUp` | Add to selection the next object key |
+| `PgDn` | Select the previous object key, if more than one is selected the selection is shifted up cyclically |
+| `Shift` `PgDn` | Adds to selection the previous object key |
+| \` | Select all layers |
+| `Shift` \` | Revert to the previous layer setting |
+| `Tab` | Start or stop edit mode |
+| `A` | Selects or deselects all |
+| `Ctrl` `A` | Apply size and rotation |
+| `Ctrl` `Shift` `A` | If the active object is automatically duplicated, brings up a menu for actually creating the objects |
+| `Shift` `A` | Brings up the add menu, the toolbox items that start with ADD |
+| `B` | Border select, draws a rectangle with the left mouse to select objects |
+| `Shift` `B` | Render border, this only works in camera view mode |
+| `C` | Center view, the position of the 3D cursor becomes the new center of the 3D window |
+| `Alt` `C` | Convert menu, depending on the active object a popup menu is displayed enabling you to convert certain types of ObData |
+| `Ctrl` `C` | Copy menu, this menu copies information from the active object to selected objects |
+| `Shift` `C` | Center zero view, the 3D cursor is set to zero and the view is changed so all objects can be displayed |
+| `D` | Display draw mode menu |
+| `Shift` `D` | Add duplicate, the selected objects are duplicated |
+| `Alt` `D` | Add linked duplicate, linked duplicates of the selected objects are created |
+| `Ctrl` `D` | Draw the texture image as wire |
+| `Alt` `E` | Start or stop edit mode |
+| `F` | If selected object is a mash, toggles face select mode on or off |
+| `Ctrl` `F` | Sort faces, the faces of the active mesh object are sorted based on the current view in the 3D window |
+| `G` | Grab mode, or translation mode |
+| `Alt` `G` | Clears translations, given in grab mode |
+| `Shift` `G` | Group selection |
+| `I` | Insert object key, a keyposition is inserted in the current frame of all selected objects |
+| `Ctrl` `J` | Join objects, all selected objects of the same type are added to the active object |
+| `K` | Show keys, the draw key option is turned on for all selected objects |
+| `Shift` `K` | Display popup menu for showing and selecting all keys |
+| `L` | Makes selected object local, makes library linked objects local for the current scene |
+| `Ctrl` `L` | Link selected, links some of the active object data to all selected objects |
+| `Shift` `L` | Select linked, selected all objects somehow linked to the active object |
+| `M` | Move selected objects to another layer |
+| `Ctrl` `M` | Mirror menu, it is possible to mirror an object along the X, Y, or Z axis |
+| `N` | Number panel, the location, rotation, and scaling of the active object are displayed and can be modified |
+| `Alt` `O` | Clear origin, the origin is erased for all child objects, which causes them to move ot the exact location of the parent objects |
+| `Shift` `O` | If the selected object is a mesh, toggles the subsurf on or off |
+| `Ctrl` `P` | Make selected objects the children of the active object |
+| `Alt` `P` | Clears parent relation, user is asked if they wish to keep or clear parent-induced transforms |
+| `R` | Rotate mode, works on selected objects |
+| `Alt` `R` | Clears rotation, the X, Y, and Z rotations of selected objects are set to zero |
+| `S` | Size mode or scaling mode, works on selected objects |
+| `Alt` `S` | Clears size, the X, Y, and Z dimensions of selected objects are set to 1 |
+| `Shift` `S` | Opens the snap menu |
+| `T` | Texture space mode, the position of dimensions of the texture space for the selected objects can be changed in the same manner for grab and size mode |
+| `Ctrl` `T` | Makes selected objects track the active object |
+| `Alt` `T` | Clears old style track, constraint track is removed as all constrains are |
+| `U` | Makes object single user, the inverse operation of link |
+| `V` | Switches in and out of vertex paint mode |
+| `Alt` `V` | Object image aspect, this hotkey sets the X and Y dimensions of the selected objects in relation to the dimensions of the image texture they have |
+| `W` | Opens the object booleans menu |
+| `X` | Deletes selected objects |
+| `Z` | Toggles solid mode on or off |
+| `Shift` `Z` | Toggles shaded mode on or off |
+| `Alt` `Z` | Toggles textured mode on or off |
+{.shortcuts}
### Edit Mode - General
-Shortcut | Action
----|---
-`Tab` | Start or stop edit mode
-`Alt` `E` | Start or stop edit mode (alternative)
-`Ctrl` `Tab` | Switches between vertex select, edge select, and face select modes
-`A` | Select or unselect all
-`B` `B` | Circle select
-`Ctrl` `H` | With vertices selected, this creates a hook object
-`N` | Number panel, simpler than the object mode one
-`O` | Switch in and out of proportional editing
-`Shift` `O` | Toggles between smooth and sharp proportional editing
-`P` | Separate, you can choose to make a new object with all selected vertices, edges, faces, and curves
-`Ctrl` `P` | Make vertex parent
-`Ctrl` `S` | Shear, in edit mode this operation enables you to make selected forms slant
-`U` | Undo
-`W` | Displays specials popup menu
-`Shift` `W` | Warp, selected vertices can be bent into curves with this option
-{.shortcuts}
+| Shortcut | Action |
+| ------------ | -------------------------------------------------------------------------------------------------- |
+| `Tab` | Start or stop edit mode |
+| `Alt` `E` | Start or stop edit mode (alternative) |
+| `Ctrl` `Tab` | Switches between vertex select, edge select, and face select modes |
+| `A` | Select or unselect all |
+| `B` `B` | Circle select |
+| `Ctrl` `H` | With vertices selected, this creates a hook object |
+| `N` | Number panel, simpler than the object mode one |
+| `O` | Switch in and out of proportional editing |
+| `Shift` `O` | Toggles between smooth and sharp proportional editing |
+| `P` | Separate, you can choose to make a new object with all selected vertices, edges, faces, and curves |
+| `Ctrl` `P` | Make vertex parent |
+| `Ctrl` `S` | Shear, in edit mode this operation enables you to make selected forms slant |
+| `U` | Undo |
+| `W` | Displays specials popup menu |
+| `Shift` `W` | Warp, selected vertices can be bent into curves with this option |
+{.shortcuts}
### Edit Mode - Mesh
-Shortcut | Action
----|---
-`Ctrl` `+` | Adds to selection all vertices connected by an edge to an already selected vertex
-`Ctrl` `-` | Removes from selection all vertices of the outer ring of selected vertices
-`C` | If using curve deformation, toggles the curve cyclic mode on or off
-`E` | Extrude selected
-`Shift` `E` | Crease subsurf edge
-`Ctrl` `E` | Mark LSCM seam
-`F` | Make edge or face
-`Shift` `F` | Fill selected, all selected vertices that are bound by edges and form a closed polygon are filled with triangular faces
-`Alt` `F` | Beauty fill, edges of all selected triangular faces are switched so equally sized faces are formed
-`Ctrl` `F` | Flip faces, selected triangular faces are paired and common edge of each pair swapped
-`H` | Hide selected, all selected vertices and faces are hidden
-`Shift` `H` | Hide not selected, all non-selected vertices and faces are hidden
-`Alt` `H` | Reveal, all hidden vertices and faces are drawn again
-`Alt` `J` | Join faces, selected triangular faces are joined in pairs and transformed to quads
-`K` | Knife tool menu
-`L` | Select linked
-`Shift` `L` | Deselect linked
-`Ctrl` `L` | Select linked selected
-`M` | Mirror, opens a popup asking for the axis to mirror
-`Alt` `M` | Merges selected vertices as barycentrum or at cursor depending on selection made on popup
-`Ctrl` `N` | Calculate normals outside
-`Ctrl` `Shift` `N` | Calculate normals inside
-`Alt` `S` | Scales each vertex in the direction of its local normal
-`Ctrl` `T` | Make triangles, all selected faces are converted to triangles
-`U` | Undo
-`Shift` `U` | Redo
-`Alt` `U` | Undo menu
-`W` | Special menu
-`X` | Erase selected
-`Y` | Split, this command splits the selected part of a mesh without deleting faces
-{.shortcuts}
+| Shortcut | Action |
+| ------------------ | ----------------------------------------------------------------------------------------------------------------------- |
+| `Ctrl` `+` | Adds to selection all vertices connected by an edge to an already selected vertex |
+| `Ctrl` `-` | Removes from selection all vertices of the outer ring of selected vertices |
+| `C` | If using curve deformation, toggles the curve cyclic mode on or off |
+| `E` | Extrude selected |
+| `Shift` `E` | Crease subsurf edge |
+| `Ctrl` `E` | Mark LSCM seam |
+| `F` | Make edge or face |
+| `Shift` `F` | Fill selected, all selected vertices that are bound by edges and form a closed polygon are filled with triangular faces |
+| `Alt` `F` | Beauty fill, edges of all selected triangular faces are switched so equally sized faces are formed |
+| `Ctrl` `F` | Flip faces, selected triangular faces are paired and common edge of each pair swapped |
+| `H` | Hide selected, all selected vertices and faces are hidden |
+| `Shift` `H` | Hide not selected, all non-selected vertices and faces are hidden |
+| `Alt` `H` | Reveal, all hidden vertices and faces are drawn again |
+| `Alt` `J` | Join faces, selected triangular faces are joined in pairs and transformed to quads |
+| `K` | Knife tool menu |
+| `L` | Select linked |
+| `Shift` `L` | Deselect linked |
+| `Ctrl` `L` | Select linked selected |
+| `M` | Mirror, opens a popup asking for the axis to mirror |
+| `Alt` `M` | Merges selected vertices as barycentrum or at cursor depending on selection made on popup |
+| `Ctrl` `N` | Calculate normals outside |
+| `Ctrl` `Shift` `N` | Calculate normals inside |
+| `Alt` `S` | Scales each vertex in the direction of its local normal |
+| `Ctrl` `T` | Make triangles, all selected faces are converted to triangles |
+| `U` | Undo |
+| `Shift` `U` | Redo |
+| `Alt` `U` | Undo menu |
+| `W` | Special menu |
+| `X` | Erase selected |
+| `Y` | Split, this command splits the selected part of a mesh without deleting faces |
+{.shortcuts}
### Edit Mode - Curve
-Shortcut | Action
----|---
-`C` | Set the selected curves to cyclic or turn cyclic off
-`E` | Extrude curve
-`F` | Add segment, a segment is added between two selected vertices at the end of two curves
-`H` | Toggle handle align or free
-`Shift` `H` | Set handle to auto
-`Ctrl` `H` | Calculate handles
-`L` | Select linked
-`Shift` `L` | Deselect linked
-`M` | Mirror selected control points exactly as for vertices in a mesh
-`T` | Tilt mode, specify an extra axis rotation for each vertex in a 3D curve
-`Alt` `T` | Clear tilt
-`V` | Vector handle
-`W` | The special menu for curves appears
-`X` | Erase selected
-{.shortcuts}
+| Shortcut | Action |
+| ----------- | -------------------------------------------------------------------------------------- |
+| `C` | Set the selected curves to cyclic or turn cyclic off |
+| `E` | Extrude curve |
+| `F` | Add segment, a segment is added between two selected vertices at the end of two curves |
+| `H` | Toggle handle align or free |
+| `Shift` `H` | Set handle to auto |
+| `Ctrl` `H` | Calculate handles |
+| `L` | Select linked |
+| `Shift` `L` | Deselect linked |
+| `M` | Mirror selected control points exactly as for vertices in a mesh |
+| `T` | Tilt mode, specify an extra axis rotation for each vertex in a 3D curve |
+| `Alt` `T` | Clear tilt |
+| `V` | Vector handle |
+| `W` | The special menu for curves appears |
+| `X` | Erase selected |
+{.shortcuts}
### Edit Mode - Surface
-Shortcut | Action
----|---
-`C` | Toggle cyclic menu
-`E` | Extrude selected
-`F` | Add segment, a segment is added between two selected vertices at the end of two curves
-`L` | Select linked
-`Shift` `L` | Deselect linked
-`M` | Mirror selected control points exactly as for vertices in a mesh
-`Shift` `R` | Select row, starting with the last selected vertex
-`W` | The special menu for surfaces appears
-`X` | Erase selected
-{.shortcuts}
+| Shortcut | Action |
+| ----------- | -------------------------------------------------------------------------------------- |
+| `C` | Toggle cyclic menu |
+| `E` | Extrude selected |
+| `F` | Add segment, a segment is added between two selected vertices at the end of two curves |
+| `L` | Select linked |
+| `Shift` `L` | Deselect linked |
+| `M` | Mirror selected control points exactly as for vertices in a mesh |
+| `Shift` `R` | Select row, starting with the last selected vertex |
+| `W` | The special menu for surfaces appears |
+| `X` | Erase selected |
+{.shortcuts}
### Edit Mode - Font
-Shortcut | Action
----|---
-`Right` | Move text cursor one position forward
-`Shift` `Right` | Move text cursor to the end of the line
-`Left` | Move text cursor one position backwards
-`Shift` `Left` | Move text cursor to the start of the line
-`Down` | Move text cursor one line forward
-`Shift` `Down` | Move text cursor to the end of the text
-`Up` | Move text cursor one line back
-`Shift` `Up` | Move text cursor to the beginning of the text
-`Alt` `U` | Reload original data
-`Alt` `V` | Paste text
-{.shortcuts}
+| Shortcut | Action |
+| --------------- | --------------------------------------------- |
+| `Right` | Move text cursor one position forward |
+| `Shift` `Right` | Move text cursor to the end of the line |
+| `Left` | Move text cursor one position backwards |
+| `Shift` `Left` | Move text cursor to the start of the line |
+| `Down` | Move text cursor one line forward |
+| `Shift` `Down` | Move text cursor to the end of the text |
+| `Up` | Move text cursor one line back |
+| `Shift` `Up` | Move text cursor to the beginning of the text |
+| `Alt` `U` | Reload original data |
+| `Alt` `V` | Paste text |
+{.shortcuts}
### VertexPaint
-Shortcut | Action
----|---
-`Shift` `K` | All vertex colors are erased, they are changed to the current drawing color
-`U` | Undo, press twice redos the undone
-`W` | Shared vertexcol, the colors of all faces that share vertices are blended
-{.shortcuts}
+| Shortcut | Action |
+| ----------- | --------------------------------------------------------------------------- |
+| `Shift` `K` | All vertex colors are erased, they are changed to the current drawing color |
+| `U` | Undo, press twice redos the undone |
+| `W` | Shared vertexcol, the colors of all faces that share vertices are blended |
+{.shortcuts}
### UV Editor
-Shortcut | Action
----|---
-`E` | LSCM unwrapping, launches on the faces visible in the UV editor
-`P` | Pin selected vertices, they will stay in place on the UV editor when executing an LSCM unwrap
-`Alt` `P` | Un-pin selected vertices
-{.shortcuts}
+| Shortcut | Action |
+| --------- | --------------------------------------------------------------------------------------------- |
+| `E` | LSCM unwrapping, launches on the faces visible in the UV editor |
+| `P` | Pin selected vertices, they will stay in place on the UV editor when executing an LSCM unwrap |
+| `Alt` `P` | Un-pin selected vertices |
+{.shortcuts}
### FaceSelect
-Shortcut | Action
----|---
-`Tab` | Switches to edit mode
-`F` | With multiple, co-planar faces selected, this will merge them into one FGon so long as they remain co-planar
-`L` | Select linked UVs
-`R` | Calls a menu allowing to rotate the UV coordinates or the vertex col
-`U` | Calls the UV Calculation menu
-{.shortcuts}
-
+| Shortcut | Action |
+| -------- | ------------------------------------------------------------------------------------------------------------ |
+| `Tab` | Switches to edit mode |
+| `F` | With multiple, co-planar faces selected, this will merge them into one FGon so long as they remain co-planar |
+| `L` | Select linked UVs |
+| `R` | Calls a menu allowing to rotate the UV coordinates or the vertex col |
+| `U` | Calls the UV Calculation menu |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Blender](https://download.blender.org/documentation/BlenderHotkeyReference.pdf) _(download.blender.org)_
+- [Keyboard shortcuts for Blender](https://download.blender.org/documentation/BlenderHotkeyReference.pdf)
+ _(download.blender.org)_
diff --git a/source/_posts/brave.md b/source/_posts/brave.md
index 4e326283..6d7e5735 100644
--- a/source/_posts/brave.md
+++ b/source/_posts/brave.md
@@ -2,117 +2,111 @@
title: Brave Browser
date: 2022-11-23 16:23:31.698868
background: bg-[#da6b37]
-label:
-tags:
- -
- -
+label:
+tags:
+ -
+ -
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 64 keyboard shortcuts found in the Brave browser
+ A visual cheat-sheet for the 64 keyboard shortcuts found in the Brave browser
---
-
-
-Keyboard Shortcuts {.cols-2}
-------------------
-
-
+## Keyboard Shortcuts {.cols-2}
### Tabs and Windows
-Shortcut | Action
----|---
-`Ctrl` `N` | Open a new window
-`Ctrl` `Shift` `N` | Open a new window in Private mode
-`Ctrl` `T` | Open a new tab, and jump to it
-`Ctrl` `Shift` `T` | Reopen the last closed tab, and jump to it
-`Ctrl` `Tab` | Jump to the next open tab
-`Ctrl` `Shift` `Tab` | Jump to the previous open tab
-`Ctrl` `1-8` | Jump to a specific tab
-`Ctrl` `9` | Jump to the last tab
-`Alt` `Home` | Open your home page in the current tab
-`Ctrl` `Left` | Open the previous page from your browsing history in the current tab
-`Alt` `Right` | Open the next page from your browsing history in the current tab
-`Ctrl` `W` | Close the current tab
-`Ctrl` `Shift` `W` | Close the current window
-`Alt` `Space` `N` | Minimize the current window
-`Alt` `Space` `X` | Maximize the current window
-`Alt` `F4` | Close the current window
-`Ctrl` `Shift` `Q` | Quit Brave
-{.shortcuts}
+| Shortcut | Action |
+| -------------------- | -------------------------------------------------------------------- |
+| `Ctrl` `N` | Open a new window |
+| `Ctrl` `Shift` `N` | Open a new window in Private mode |
+| `Ctrl` `T` | Open a new tab, and jump to it |
+| `Ctrl` `Shift` `T` | Reopen the last closed tab, and jump to it |
+| `Ctrl` `Tab` | Jump to the next open tab |
+| `Ctrl` `Shift` `Tab` | Jump to the previous open tab |
+| `Ctrl` `1-8` | Jump to a specific tab |
+| `Ctrl` `9` | Jump to the last tab |
+| `Alt` `Home` | Open your home page in the current tab |
+| `Ctrl` `Left` | Open the previous page from your browsing history in the current tab |
+| `Alt` `Right` | Open the next page from your browsing history in the current tab |
+| `Ctrl` `W` | Close the current tab |
+| `Ctrl` `Shift` `W` | Close the current window |
+| `Alt` `Space` `N` | Minimize the current window |
+| `Alt` `Space` `X` | Maximize the current window |
+| `Alt` `F4` | Close the current window |
+| `Ctrl` `Shift` `Q` | Quit Brave |
+{.shortcuts}
### Browser
-Shortcut | Action
----|---
-`Alt` `F` | Open the main menu
-`Ctrl` `Shift` `B` | Show or hide the bookmarks bar
-`Ctrl` `H` | Open the history page in a new tab
-`Ctrl` `J` | Open the downloads page in a new tab
-`Shift` `Esc` | Open the Brave task manager
-`Shift` `Alt` `T` | Set focus on the first item in the toolbar
-`F10` | Set focus on the last item in the toolbar
-`F6` | Switch focus to unfocused dialog, if showing
-`Ctrl` `F` | Open the find bar to search the current page
-`Ctrl` `G` | Jump to the next match in your find bar search
-`Ctrl` `Shift` `G` | Jump to the previous match in your find bar search
-`Ctrl` `Shift` `J` | Open developer tools
-`Ctrl` `Shift` `Delete` | Open the clear browser data options
-`F1` | Open the Brave help center in a new tab
-`Ctrl` `Shift` `M` | Open profile menu
-`` |
-{.shortcuts}
+| Shortcut | Action |
+| ----------------------- | -------------------------------------------------- |
+| `Alt` `F` | Open the main menu |
+| `Ctrl` `Shift` `B` | Show or hide the bookmarks bar |
+| `Ctrl` `H` | Open the history page in a new tab |
+| `Ctrl` `J` | Open the downloads page in a new tab |
+| `Shift` `Esc` | Open the Brave task manager |
+| `Shift` `Alt` `T` | Set focus on the first item in the toolbar |
+| `F10` | Set focus on the last item in the toolbar |
+| `F6` | Switch focus to unfocused dialog, if showing |
+| `Ctrl` `F` | Open the find bar to search the current page |
+| `Ctrl` `G` | Jump to the next match in your find bar search |
+| `Ctrl` `Shift` `G` | Jump to the previous match in your find bar search |
+| `Ctrl` `Shift` `J` | Open developer tools |
+| `Ctrl` `Shift` `Delete` | Open the clear browser data options |
+| `F1` | Open the Brave help center in a new tab |
+| `Ctrl` `Shift` `M` | Open profile menu |
+| `` |
+{.shortcuts}
### Address Bar
-Shortcut | Action
----|---
-`Enter` | Search with your default search engine (after typing)
-`Tab` | Search using a different search engine (after typing)
-`Ctrl` `Enter` | Add www. and .com to a site name, and open it in the current tab (after typing)
-`Alt` `Enter` | Open a new tab and perform a search (after typing)
-`Ctrl` `L` | Jump to the address bar
-`Ctrl` `K` | Search from anywhere on the page
-`Shift` `Delete` | Remove predictions from your address bar (after highlighting them)
-{.shortcuts}
+| Shortcut | Action |
+| ---------------- | ------------------------------------------------------------------------------- |
+| `Enter` | Search with your default search engine (after typing) |
+| `Tab` | Search using a different search engine (after typing) |
+| `Ctrl` `Enter` | Add www. and .com to a site name, and open it in the current tab (after typing) |
+| `Alt` `Enter` | Open a new tab and perform a search (after typing) |
+| `Ctrl` `L` | Jump to the address bar |
+| `Ctrl` `K` | Search from anywhere on the page |
+| `Shift` `Delete` | Remove predictions from your address bar (after highlighting them) |
+{.shortcuts}
### Webpage
-Shortcut | Action
----|---
-`Ctrl` `P` | Open options to print the current page
-`Ctrl` `S` | Open options to save the current page
-`Ctrl` `R` | Reload the current page
-`Ctrl` `Shift` `R` | Reload the current page, ignoring cached content
-`Esc` | Stop the page loading
-`Tab` | Browse clickable items moving forward
-`Shift` `Tab` | Browse clickable items moving backwards
-`Ctrl` `O` | Open a file from your computer in Brave
-`Ctrl` `U` | Display non-editable HTML source code for the current page
-`Ctrl` `D` | Save your current webpage as a bookmark
-`Ctrl` `Shift` `D` | Save all open tabs as bookmarks in a new folder
-`F11` | Turn full-screen mode on or off
-`Ctrl` `+` | Make everything on the page bigger
-`Ctrl` `-` | Make everything on the page smaller
-`Ctrl` `0` | Return everything on the page to default size
-`Space` | Scroll down a webpage, a screen at a time
-`Shift` `Space` | Scroll up a webpage, a screen at a time
-`Home` | Go to the top of the page
-`End` | Go to the bottom of the page
-`Shift` `(scroll)` | Scroll horizontally on the page
-`Alt` `Left` | Move your cursor to the front of the previous word in a text field
-`Ctrl` `Right` | Move your cursor to the back of the next word in a text field
-`Ctrl` `Back` | Delete the previous word in a text field
-`Alt` `Home` | Open the home page in the current tab
-{.shortcuts}
-
+| Shortcut | Action |
+| ------------------ | ------------------------------------------------------------------ |
+| `Ctrl` `P` | Open options to print the current page |
+| `Ctrl` `S` | Open options to save the current page |
+| `Ctrl` `R` | Reload the current page |
+| `Ctrl` `Shift` `R` | Reload the current page, ignoring cached content |
+| `Esc` | Stop the page loading |
+| `Tab` | Browse clickable items moving forward |
+| `Shift` `Tab` | Browse clickable items moving backwards |
+| `Ctrl` `O` | Open a file from your computer in Brave |
+| `Ctrl` `U` | Display non-editable HTML source code for the current page |
+| `Ctrl` `D` | Save your current webpage as a bookmark |
+| `Ctrl` `Shift` `D` | Save all open tabs as bookmarks in a new folder |
+| `F11` | Turn full-screen mode on or off |
+| `Ctrl` `+` | Make everything on the page bigger |
+| `Ctrl` `-` | Make everything on the page smaller |
+| `Ctrl` `0` | Return everything on the page to default size |
+| `Space` | Scroll down a webpage, a screen at a time |
+| `Shift` `Space` | Scroll up a webpage, a screen at a time |
+| `Home` | Go to the top of the page |
+| `End` | Go to the bottom of the page |
+| `Shift` `(scroll)` | Scroll horizontally on the page |
+| `Alt` `Left` | Move your cursor to the front of the previous word in a text field |
+| `Ctrl` `Right` | Move your cursor to the back of the next word in a text field |
+| `Ctrl` `Back` | Delete the previous word in a text field |
+| `Alt` `Home` | Open the home page in the current tab |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Brave](https://support.brave.com/hc/en-us/articles/360032272171-What-keyboard-shortcuts-can-I-use-in-Brave-) _(support.brave.com)_
+- [Keyboard shortcuts for Brave](https://support.brave.com/hc/en-us/articles/360032272171-What-keyboard-shortcuts-can-I-use-in-Brave-)
+ _(support.brave.com)_
diff --git a/source/_posts/c.md b/source/_posts/c.md
index 0e23de65..aaa744c7 100644
--- a/source/_posts/c.md
+++ b/source/_posts/c.md
@@ -6,15 +6,13 @@ tags:
categories:
- Programming
intro: |
- C quick reference cheat sheet that provides basic syntax and methods.
+ C quick reference cheat sheet that provides basic syntax and methods.
plugins:
- - copyCode
+ - copyCode
+ - runCode
---
-Getting Started
-----
-
-
+## Getting Started
### hello.c {.row-span-2}
@@ -31,7 +29,7 @@ int main(void) {
Compile `hello.c` file with `gcc`
```bash
-$ gcc hello.c -o hello
+$ gcc -Wall -g hello.c -o hello
```
Run the compiled binary `hello`
@@ -42,8 +40,6 @@ $ ./hello
Output => Hello World!
-
-
### Variables {.row-span-2}
```c
@@ -63,11 +59,9 @@ int y = 6;
int sum = x + y; // add variables to sum
// declare multiple variables
-int x = 5, y = 6, z = 50;
+int a = 5, b = 6, c = 50;
```
-
-
### Constants
```c
@@ -81,29 +75,25 @@ Best Practices
const int BIRTHYEAR = 1980;
```
-
-
### Comment
```c
// this is a comment
-printf("Hello World!"); // Can comment anywhere in file
+printf("Hello World!\n"); // Can comment anywhere in file
/*Multi-line comment, print Hello World!
to the screen, it's awesome */
```
-
-
### Print text
```c
-printf("I am learning C.");
+printf("I am learning C.\n");
int testInteger = 5;
-printf("Number = %d", testInteger);
+printf("Number = %d\n", testInteger);
float f = 5.99; // floating point number
-printf("Value = %f", f);
+printf("Value = %f\n", f);
short a = 0b1010110; // binary number
int b = 02713; // octal number
@@ -126,8 +116,6 @@ printf("a=%hX, b=%X, c=%lX\n", a, b, c);
// output => a=56, b=5CB, c=1DAB83
```
-
-
### Control the number of spaces
```c
@@ -145,30 +133,30 @@ printf("%-9d %-9d %-9d\n", d1, d2, d3);
output result
```bash
-20 345 700
-56720 9999 20098
-233 205 1
-34 0 23
+20 345 700
+56720 9999 20098
+233 205 1
+34 0 23
```
-In `%-9d`, `d` means to output in `10` base, `9` means to occupy at least `9` characters width, and the width is not enough to fill with spaces, `-` means left alignment
-
-
+In `%-9d`, `d` means to output in `10` base, `9` means to occupy at least `9` characters width, and the width is not
+enough to fill with spaces, `-` means left alignment
### Strings
+
```c
char greetings[] = "Hello World!";
printf("%s", greetings);
```
-access string
+Access string
```c
char greetings[] = "Hello World!";
printf("%c", greetings[0]);
```
-modify string
+Modify string
```c
char greetings[] = "Hello World!";
@@ -188,65 +176,60 @@ printf("%s", greetings);
```
Creating String using character pointer (String Literals)
+
```c
char *greetings = "Hello";
printf("%s", greetings);
// print "Hello!"
```
-**NOTE**: String literals might be stored in read-only section of memory. Modifying a string literal invokes undefined behavior. You can't modify it.!
-
-`C` **does not** have a String type, use `char` type and create an `array` of characters
+**NOTE**: String literals might be stored in read-only section of memory. Modifying a string literal invokes undefined
+behavior. You can't modify it!
+`C` **does not** have a String type, use `char` type and create an `array` of characters
### Condition {.row-span-2}
```c
int time = 20;
if (time < 18) {
- printf("Goodbye!");
+ printf("Goodbye!\n");
} else {
- printf("Good evening!");
+ printf("Good evening!\n");
}
// Output -> "Good evening!"
int time = 22;
if (time < 10) {
- printf("Good morning!");
+ printf("Good morning!\n");
} else if (time < 20) {
- printf("Goodbye!");
+ printf("Goodbye!\n");
} else {
- printf("Good evening!");
+ printf("Good evening!\n");
}
// Output -> "Good evening!"
```
-
-
### Ternary operator {.col-span-2}
```c
int age = 20;
-(age > 19) ? printf("Adult") : printf("Teenager");
+(age > 19) ? printf("Adult\n") : printf("Teenager\n");
```
-
-
### Switch
```c
int day = 4;
switch (day) {
- case 3: printf("Wednesday"); break;
- case 4: printf("Thursday"); break;
+ case 3: printf("Wednesday\n"); break;
+ case 4: printf("Thursday\n"); break;
default:
- printf("Weekend!");
+ printf("Weekend!\n");
}
// output -> "Thursday" (day 4)
```
-
-
### While Loop
```c
@@ -258,9 +241,8 @@ while (i < 5) {
}
```
-**NOTE**: Don't forget to increment the variable used in the condition, otherwise the loop will never end and become an "infinite loop"!
-
-
+**NOTE**: Don't forget to increment the variable used in the condition, otherwise the loop will never end and become an
+"infinite loop"!
### Do/While Loop
@@ -273,8 +255,6 @@ do {
} while (i < 5);
```
-
-
### For Loop
```c
@@ -283,8 +263,6 @@ for (int i = 0; i < 5; i++) {
}
```
-
-
### Break out of the loop Break/Continue {.row-span-2}
```c
@@ -296,7 +274,7 @@ for (int i = 0; i < 10; i++) {
}
```
-break out of the loop when `i` is equal to `4`
+Break out of the loop when `i` is equal to `4`
```c
for (int i = 0; i < 10; i++) {
@@ -309,8 +287,6 @@ for (int i = 0; i < 10; i++) {
Example to skip the value of `4`
-
-
### While Break Example
```c
@@ -326,8 +302,6 @@ while (i < 10) {
}
```
-
-
### While continue example
```c
@@ -343,8 +317,6 @@ while (i < 10) {
}
```
-
-
### Arrays {.row-span-2}
```c
@@ -354,7 +326,7 @@ printf("%d", myNumbers[0]);
// output 25
```
-change array elements
+Change array elements
```c
int myNumbers[] = {25, 50, 75, 100};
@@ -374,7 +346,7 @@ for (i = 0; i < 4; i++) {
}
```
-set array size
+Set array size
```c
// Declare an array of four integers:
@@ -387,15 +359,13 @@ myNumbers[2] = 75;
myNumbers[3] = 100;
```
-
-
### Enumeration Enum {.col-span-2}
```c
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
```
-define enum variable
+Define enum variable
```c
enum week a, b, c;
@@ -411,8 +381,6 @@ enum week a = Mon, b = Wed, c = Sat;
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;
```
-
-
### Enumerate sample applications
```c
@@ -424,13 +392,11 @@ switch(day) {
case Mon: puts("Monday"); break;
case Tues: puts("Tuesday"); break;
case Wed: puts("Wednesday"); break;
- case Thursday: puts("Thursday"); break;
+ case Thurs: puts("Thursday"); break;
default: puts("Error!");
}
```
-
-
### User input
```c
@@ -438,32 +404,28 @@ switch(day) {
int myNum;
// Ask the user to enter a number
-printf("Please enter a number: \n");
+printf("Enter a number: ");
// Get and save the number entered by the user
scanf("%d", &myNum);
// Output the number entered by the user
-printf("The number you entered: %d", myNum);
+printf("The number you entered: %d\n", myNum);
```
-
-
### User input string
```c
// create a string
char firstName[30];
// Ask the user to enter some text
-printf("Enter your name: \n");
+printf("Enter your name: ");
// get and save the text
scanf("%s", &firstName);
// output text
-printf("Hello %s.", firstName);
+printf("Hello %s.\n", firstName);
```
-
-
### memory address
When a variable is created, it is assigned a memory address
@@ -477,20 +439,16 @@ printf("%p", &myAge);
To access it, use the reference operator (`&`)
-
-
### create pointer
```c
int myAge = 43; // an int variable
-printf("%d", myAge); // output the value of myAge(43)
+printf("%d\n", myAge); // output the value of myAge(43)
// Output the memory address of myAge (0x7ffe5367e044)
-printf("%p", &myAge);
+printf("%p\n", &myAge);
```
-
-
### pointer variable {.col-span-2}
```c
@@ -503,8 +461,6 @@ printf("%p\n", &myAge); // output the memory address of myAge (0x7ffe5367e044)
printf("%p\n", ptr); // use the pointer (0x7ffe5367e044) to output the memory address of myAge
```
-
-
### Dereference
```c
@@ -518,10 +474,7 @@ printf("%p\n", ptr);
printf("%d\n", *ptr);
```
-Operators
----
-
-
+## Operators
### Arithmetic Operators
@@ -532,37 +485,33 @@ int sum2 = sum1 + 250; // 400 (150 + 250)
int sum3 = sum2 + sum2; // 800 (400 + 400)
```
-----
+---
| Operator | Name | Example |
-|----------|-----------|---------|
+| -------- | --------- | ------- |
| `+` | Add | `x + y` |
-| `-` | Subtract | `x - y` |
-| `*` | Multiply | `x * y` |
-| `/` | Divide | `x / y` |
+| `-` | Subtract | `x - y` |
+| `*` | Multiply | `x * y` |
+| `/` | Divide | `x / y` |
| `%` | Modulo | `x % y` |
-| `++` | Increment | `++x` |
+| `++` | Increment | `++x` |
| `--` | Decrement | `--x` |
-
-
### Assignment operator
-| example | as |
-|-----------|----------------|
-| x `=` 5 | x `=` 5 |
-| x `+=` 3 | x `=` x `+` 3 |
-| x `-=` 3 | x `=` x `-` 3 |
-| x `*=` 3 | x `=` x `*` 3 |
-| x `/=` 3 | x `=` x `/` 3 |
-| x `%=` 3 | x `=` x `%` 3 |
-| x `&=` 3 | x `=` x `&` 3 |
-| x `|=` 3 | x `=` x `|` 3 |
-| x `^=` 3 | x `=` x `^` 3 |
-| x `>>=` 3 | x `=` x `>>` 3 |
-| x `<<=` 3 | x `=` x `<<` 3 |
-
-
+| Example | As |
+| -------------------- | ------------------------- |
+| x `=` 5 | x `=` 5 |
+| x `+=` 3 | x `=` x `+` 3 |
+| x `-=` 3 | x `=` x `-` 3 |
+| x `*=` 3 | x `=` x `*` 3 |
+| x `/=` 3 | x `=` x `/` 3 |
+| x `%=` 3 | x `=` x `%` 3 |
+| x `&=` 3 | x `=` x `&` 3 |
+| x \|= 3 | x `=` x \| 3 |
+| x `^=` 3 | x `=` x `^` 3 |
+| x `>>=` 3 | x `=` x `>>` 3 |
+| x `<<=` 3 | x `=` x `<<` 3 |
### Comparison Operators
@@ -574,30 +523,28 @@ printf("%d", x > y);
// returns 1 (true) because 5 is greater than 3
```
-----
+---
-| Symbol | Name | Example |
-| --------| -------| -------|
-| `==` | equals | x `==` y |
-| `!=` | not equal to | x `!=` y |
-| `>` | greater than | x `>` y |
-| `<` | less than | x `<` y |
-| `>=` | greater than or equal to | x `>=` y |
-| `<=` | less than or equal to | x `<=` y |
+| Symbol | Name | Example |
+| ------ | ------------------------ | -------- |
+| `==` | equals | x `==` y |
+| `!=` | not equal to | x `!=` y |
+| `>` | greater than | x `>` y |
+| `<` | less than | x `<` y |
+| `>=` | greater than or equal to | x `>=` y |
+| `<=` | less than or equal to | x `<=` y |
Comparison operators are used to compare two values
-
-
### Logical Operators {.col-span-2}
-| Symbol | Name | Description | Example |
-| --------| --------| --------| --------|
-| `&&` | `and` logical | returns true if both statements are true | `x < 5 && x < 10` |
-| `||` | `or` logical | returns true if one of the statements is true | `x < 5 || x < 4` |
-| `!` | `not` logical | Invert result, return false if true | `!(x < 5 && x < 10)` |
-
+| Symbol | Name | Description | Example |
+| ----------------- | ------------- | --------------------------------------------- | ----------------------------- |
+| `&&` | `and` logical | returns true if both statements are true | `x < 5 && x < 10` |
+| \|\| | `or` logical | returns true if one of the statements is true | x < 5 \|\| x < 4 |
+| `!` | `not` logical | Invert result, return false if true | `!(x < 5 && x < 10)` |
+{.show-header}
### Operator Examples {.row-span-2}
@@ -621,45 +568,42 @@ c = a >> 2; /*15 = 0000 1111 */
printf("Line 6 -The value of c is %d\n", c);
```
-
-
### Bitwise operators {.col-span-2}
-operator | description | instance
-:-|:-|:-
-`&` | Bitwise AND operation, "AND" operation by binary digits | `(A & B)` will get `12` which is 0000 1100
-`|` | Bitwise OR operator, "or" operation by binary digit | `(A | B)` will get `61` which is 0011 1101
-`^` | XOR operator, perform "XOR" operation by binary digits | `(A ^ B)` will get `49` which is 0011 0001
-`~` | Inversion operator, perform "inversion" operation by binary bit | `(~A)` will get `-61` which is 1100 0011
-`<<` | binary left shift operator | `A << 2` will get `240` which is 1111 0000
-`>>` | binary right shift operator | `A >> 2` will get `15` which is 0000 1111
-
-Data Types
----
+| Operator | Description | Instance |
+| :-------------- | :-------------------------------------------------------------- | :---------------------------------------------------- |
+| `&` | Bitwise AND operation, "AND" operation by binary digits | `(A & B)` will get `12` which is 0000 1100 |
+| \| | Bitwise OR operator, "or" operation by binary digit | (A \| B) will get`61` which is 0011 1101 |
+| `^` | XOR operator, perform "XOR" operation by binary digits | `(A ^ B)` will get `49` which is 0011 0001 |
+| `~` | Inversion operator, perform "inversion" operation by binary bit | `(~A)` will get `-61` which is 1100 0011 |
+| `<<` | binary left shift operator | `A << 2` will get `240` which is 1111 0000 |
+| `>>` | binary right shift operator | `A >> 2` will get `15` which is 0000 1111 |
+{.show-header}
+## Data Types
### Basic data types {.col-span-2}
-| Data Type | Size Size | Range Range | Description Description |
-| -----| -----| -----| -----|
-| `char` | 1 byte | `−128` ~ `127` | single character/alphanumeric/ASCII |
-| `signed char` | 1 byte | `−128` ~ `127` | -|
-| `unsigned char` | 1 byte | `0` ~ `255` | -|
-| `int` | `2` to `4` bytes | `−32,768` ~ `32,767` | store integers |
-| `signed int` | 2 bytes | `−32,768` ~ `32,767` | |
-| `unsigned int` | 2 bytes | `0` ~ `65,535` | |
-| `short int` | 2 bytes | `−32,768` ~ `32,767` | |
-| `signed short int` | 2 bytes | `−32,768` ~ `32,767` | |
-| `unsigned short int` | 2 bytes | `0` ~ `65,535` | |
-| `long int` | 4 bytes | `-2,147,483,648` ~ `2,147,483,647` | |
-| `signed long int` | 4 bytes | `-2,147,483,648` ~ `2,147,483,647` | |
-| `unsigned long int` | 4 bytes | `0` ~ `4,294,967,295` | |
-| `float` | 4 bytes | `3.4E-38` ~ `3.4E+38` | |
-| `double` | 8 bytes | `1.7E-308` ~ `1.7E+308` | |
-| `long double` | 10 bytes | `3.4E-4932` ~ `1.1E+4932` | |
-
-
+| Data Type | Size | Range | Description |
+| -------------------- | ---------------- | ---------------------------------- | :---------------------------------- |
+| `char` | 1 byte | `−128` ~ `127` | single character/alphanumeric/ASCII |
+| `signed char` | 1 byte | `−128` ~ `127` | |
+| `unsigned char` | 1 byte | `0` ~ `255` | |
+| `int` | `2` to `4` bytes | `−32,768` ~ `32,767` | store integers |
+| `signed int` | 2 bytes | `−32,768` ~ `32,767` | |
+| `unsigned int` | 2 bytes | `0` ~ `65,535` | |
+| `short int` | 2 bytes | `−32,768` ~ `32,767` | |
+| `signed short int` | 2 bytes | `−32,768` ~ `32,767` | |
+| `unsigned short int` | 2 bytes | `0` ~ `65,535` | |
+| `long int` | 4 bytes | `-2,147,483,648` ~ `2,147,483,647` | |
+| `signed long int` | 4 bytes | `-2,147,483,648` ~ `2,147,483,647` | |
+| `unsigned long int` | 4 bytes | `0` ~ `4,294,967,295` | |
+| `float` | 4 bytes | `3.4E-38` ~ `3.4E+38` | |
+| `double` | 8 bytes | `1.7E-308` ~ `1.7E+308` | |
+| `long double` | 10 bytes | `3.4E-4932` ~ `1.1E+4932` | |
+
+{.show-header}
### Data types
@@ -677,41 +621,39 @@ printf("%c\n", myLetter);
printf("%lf\n", myDouble);
```
-----
-
-Data Type | Description
-:-| :-
-`char` | character type
-`short` | short integer
-`int` | integer type
-`long` | long integer
-`float` | single-precision floating-point type
-`double` | double-precision floating-point type
-`void` | no type
-
+---
+| Data Type | Description |
+| :-------- | :----------------------------------- |
+| `char` | character type |
+| `short` | short integer |
+| `int` | integer type |
+| `long` | long integer |
+| `float` | single-precision floating-point type |
+| `double` | double-precision floating-point type |
+| `void` | no type |
### Basic format specifiers
-| format specifier | data type |
-| -----| -----|
-| `%d` or `%i` | `int` integer |
-| `%f` | `float` single-precision decimal type |
-| `%lf` | `double` high precision floating point data or number |
-| `%c` | `char` character |
-| `%s` | for `strings` strings |
-
-
+| Format Specifier | Data Type |
+| ---------------- | :---------------------------------------------------- |
+| `%d` or `%i` | `int` integer |
+| `%f` | `float` single-precision decimal type |
+| `%lf` | `double` high precision floating point data or number |
+| `%c` | `char` character |
+| `%s` | for `strings` strings |
-### Basic format specifiers
+{.show-header}
-| | short | int | long |
-| ----| ----| ----| ----|
-| Octal | `%ho` | `%o` | `%lo` |
-| Decimal | `%hd` | `%d` | `%ld` |
-| Hexadecimal | `%hx` /`%hX` | `%x` /`%X` | `%lx` /`%lX` |
+### Separate base format specifiers
+| Format | Short | Int | Long |
+| ----------- | ------------- | ----------- | :------------ |
+| Octal | `%ho` | `%o` | `%lo` |
+| Decimal | `%hd` | `%d` | `%ld` |
+| Hexadecimal | `%hx` / `%hX` | `%x` / `%X` | `%lx` / `%lX` |
+{.show-header}
### Data format example
@@ -725,26 +667,25 @@ printf("%f\n", myFloatNum);
printf("%c\n", myLetter);
```
-C Preprocessor
----
-
-
+## C Preprocessor
### Preprocessor Directives {.row-span-2}
-command | description
-----| ----
-`#define` | define a macro
-`#include` | include a source code file
-`#undef` | undefined macro
-`#ifdef` | Returns true if the macro is defined
-`#ifndef` | Returns true if the macro is not defined
-`#if` | Compile the following code if the given condition is true
-`#else` | Alternative to `#if`
-`#elif` | If the `#if` condition is false, the current condition is `true`
-`#endif` | End a `#if...#else` conditional compilation block
-`#error` | Print an error message when standard error is encountered
-`#pragma` | Issue special commands to the compiler using the standardized method
+| Directive | Description |
+| ---------- | :------------------------------------------------------------------- |
+| `#define` | define a macro |
+| `#include` | include a source code file |
+| `#undef` | undefined macro |
+| `#ifdef` | Returns true if the macro is defined |
+| `#ifndef` | Returns true if the macro is not defined |
+| `#if` | Compile the following code if the given condition is true |
+| `#else` | Alternative to `#if` |
+| `#elif` | If the `#if` condition is false, the current condition is `true` |
+| `#endif` | End a `#if...#else` conditional compilation block |
+| `#error` | Print an error message when standard error is encountered |
+| `#pragma` | Issue special commands to the compiler using the standardized method |
+
+{.show-header}
```c
// replace all MAX_ARRAY_LENGTH with 20
@@ -757,40 +698,35 @@ command | description
#define FILE_SIZE 42 // undefine and define to 42
```
-
-
### Predefined macros {.row-span-2}
-macro | description
-----| ----
-`__DATE__` | The current date, a character constant in the format "MMM DD YYYY"
-`__TIME__` | The current time, a character constant in the format "HH:MM:SS"
-`__FILE__` | This will contain the current filename, a string constant
-`__LINE__` | This will contain the current line number, a decimal constant
-`__STDC__` | Defined as `1` when the compiler compiles against the `ANSI` standard
-
-
-`ANSI C` defines a number of macros that you can use, but you cannot directly modify these predefined macros
+| Macro | Description |
+| ---------- | :-------------------------------------------------------------------- |
+| `__DATE__` | The current date, a character constant in the format "MMM DD YYYY" |
+| `__TIME__` | The current time, a character constant in the format "HH:MM:SS" |
+| `__FILE__` | This will contain the current filename, a string constant |
+| `__LINE__` | This will contain the current line number, a decimal constant |
+| `__STDC__` | Defined as `1` when the compiler compiles against the `ANSI` standard |
+{.show-header}
+`ANSI C` defines a number of macros that you can use, but you cannot directly modify these predefined macros
#### Predefined macro example
```c
#include
If the file does not exist, a new one will be created
-`r+` | Open a text file in `read-write` mode, allowing reading and writing of the file
-`w+` | Open a text file in `read-write` mode, allowing reading and writing of the file
-`a+` | Open a text file in `read-write` mode, allowing reading and writing of the file
-`rb` | Open a binary file in `read` mode
-`wb` | Open binary file in `write` mode
-`ab` | Open a binary file in `append` mode
-`rb+` | open binary file in `read-write` mode
-`wb+` | Open binary file in `read-write` mode
-`ab+` | open binary file in `read-write` mode
-
-
+| Mode | Description |
+| ----- | :---------------------------------------------------------------------------------------------------------- |
+| `r` | Open a text file in `read` mode, allowing the file to be read |
+| `w` | Open a text file in `write` mode, allowing writing to the file |
+| `a` | Open a text file in `append` mode
If the file does not exist, a new one will be created |
+| `r+` | Open a text file in `read-write` mode, allowing reading and writing of the file |
+| `w+` | Open a text file in `read-write` mode, allowing reading and writing of the file |
+| `a+` | Open a text file in `read-write` mode, allowing reading and writing of the file |
+| `rb` | Open a binary file in `read` mode |
+| `wb` | Open binary file in `write` mode |
+| `ab` | Open a binary file in `append` mode |
+| `rb+` | open binary file in `read-write` mode |
+| `wb+` | Open binary file in `read-write` mode |
+| `ab+` | open binary file in `read-write` mode |
+
+{.show-header}
### Open the file: fopen()
@@ -1269,8 +1170,6 @@ void main() {
After performing all operations on the file, the file must be closed with `fclose()`
-
-
### Write to file: fprintf()
```c{7}
@@ -1286,8 +1185,6 @@ void main() {
}
```
-
-
### Read the file: fscanf()
```c{6}
@@ -1306,8 +1203,6 @@ void main() {
}
```
-
-
### Write to file: fputc()
```c{6}
@@ -1321,8 +1216,6 @@ void main() {
}
```
-
-
### Read the file: fgetc()
```c{8}
@@ -1346,8 +1239,6 @@ void main() {
}
```
-
-
### Write to file: fputs()
```c {8}
@@ -1367,8 +1258,6 @@ void main() {
}
```
-
-
### Read files: fgets()
```c {10}
@@ -1389,8 +1278,6 @@ void main() {
}
```
-
-
### fseek()
```c{8}
@@ -1410,9 +1297,7 @@ void main(void) {
}
```
-set the file pointer to the given position
-
-
+Set the file pointer to the given position
### rewind()
@@ -1445,8 +1330,6 @@ void main() {
// Hello World! Hello World!
```
-
-
### ftell()
```c{11}
diff --git a/source/_posts/canvas.md b/source/_posts/canvas.md
new file mode 100644
index 00000000..256333f1
--- /dev/null
+++ b/source/_posts/canvas.md
@@ -0,0 +1,243 @@
+---
+title: HTML Canvas
+date: 2024-05-28 22:16:42
+background: bg-[#cc5534]
+tags:
+ - web
+categories:
+ - Programming
+intro: |
+ This HTML Canvas quick reference cheat sheet lists the common HTML5 Canvas design tags in readable layout.
+plugins:
+ - copyCode
+ - runCode
+---
+
+## Getting Started
+
+### Basic Setup
+
+```html
+
+
+
+ Hello, CheatSheets.zip!
- ```
-{.collapsible}
-
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
+## Glossary
+
+### AI
+
+- Prompt: input or query that guides an AI model in generating a
+ response.[[s]](https://time.com/collections/the-ai-dictionary-from-allbusiness-com/7273982/definition-of-prompt-ai-prompt)
+- Tokens: the smallest units of text processed by an AI model (e.g., words, subwords, characters, and punctuation marks)
+ that varies depending on the model and the tokenization
+ method.[[s]](https://time.com/collections/the-ai-dictionary-from-allbusiness-com/7273998/definition-of-token/)
+- Token Limit: the maximum number of tokens an AI model can process in one
+ interaction.[[s]](https://time.com/collections/the-ai-dictionary-from-allbusiness-com/7273998/definition-of-token/)
+- Artificial intelligence (AI): technology that enables machines to simulate human cognition (e.g., human learning,
+ comprehension, problem solving, decision making, creativity, and
+ autonomy).[[s]](https://www.ibm.com/think/topics/artificial-intelligence)
+- AI Model: program trained on a set of data to recognize patterns or make decisions without further human
+ intervention.[[s]](https://www.ibm.com/think/topics/ai-model)
+- Large language model (LLM): transformer-based AI model trained on large text datasets to understand and generate
+ natural language.[[s]](https://www.ibm.com/think/topics/large-language-models)
+- Hallucination: AI response that detects nonexistent patterns and creates outputs that are nonsensical and
+ inaccurate.[[s]](https://www.ibm.com/think/topics/ai-hallucinations)
+- Jailbreak: exploiting vulnerabilities in AI systems to bypass their ethical guidelines and perform restricted
+ actions.[[s]](https://www.ibm.com/think/insights/ai-jailbreak)
+
+### Prompt Engineering Techniques
+
+- Zero-shot: prompt with no examples.[[s]](https://www.ibm.com/think/topics/zero-shot-prompting)
+- One-shot: prompt with one example.[[s]](https://www.ibm.com/think/topics/one-shot-prompting)
+- Few-shot: prompt with multiple examples.[[s]](https://www.ibm.com/think/topics/few-shot-prompting)
+- Chain of thought: prompt guiding the model to break down complex reasoning into intermediate
+ steps.[[s]](https://cloud.google.com/discover/what-is-prompt-engineering?hl=en)
+
+### Modes
+
+- Study and learn: interactive learning that encourages step by step problem solving instead of giving direct
+ answers.[[s]](https://openai.com/index/chatgpt-study-mode/)
+- Create image: generate images from text
+ prompts.[[s]](https://help.openai.com/en/articles/9260256-chatgpt-capabilities-overview)
+- Think longer: performs deeper reasoning and generates more accurate, thoughtful, and detailed
+ responses.[[s]](https://openai.com/index/introducing-gpt-5)
+- Deep research: reads and synthesizes content across multiple online sources and produces cited structured
+ outputs.[[s]](https://help.openai.com/en/articles/9260256-chatgpt-capabilities-overview)
+- Web search: finds recent and real-time information
+ online.[[s]](https://help.openai.com/en/articles/9260256-chatgpt-capabilities-overview)
+- Canvas: separate interface for collaborative writing and coding that provides inline editing, suggestions, and
+ feedback.[[s]](https://openai.com/index/introducing-canvas/)
+
+## Prompt Tips
+
+### Efficiency
+
+- Use the latest model as it's generally more capable and easier to
+ prompt.[[s]](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api)
+- Provide general instructions at the start of conversations or when changing direction to avoid repeating them.
+- Don't say polite phrases to the AI (e.g., please, thank you) as it adds unecessary computational
+ costs.[[s]](https://www.techradar.com/computing/artificial-intelligence/chatgpt-spends-tens-of-millions-of-dollars-on-people-playing-please-and-thank-you-but-sam-altman-says-its-worth-it?utm_source=chatgpt.com)
+- Don't explicitly ask the AI for help (e.g., can you help me do x?).
+- Don't explicitly reference yourself unless clarifying multiple entities (e.g., I want to, do x for me).
+
+### Clarity
+
+- Be clear, specific, and provide enough context for the model to understand what you are
+ asking.[[s]](https://help.openai.com/en/articles/10032626-prompt-engineering-best-practices-for-chatgpt)
+- Prompt engineering often requires iterative refinement by adjusting wording, adding context, and simplifying
+ requests.[[s]](https://help.openai.com/en/articles/10032626-prompt-engineering-best-practices-for-chatgpt)
+- Break complex tasks into smaller focused
+ prompts.[[s]](https://help.openai.com/en/articles/4936848-how-do-i-create-a-good-prompt-for-an-ai-model)
+- Specify focus areas, highlight important aspects, and ask for multiple
+ options.[[s]](https://help.openai.com/en/articles/4936848-how-do-i-create-a-good-prompt-for-an-ai-model)
+- Provide examples of the desired output format to improve
+ accuracy.[[s]](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api)
+- Focus on specifying what to do and not just what to
+ avoid.[[s]](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api)
+- Before writing a prompt, identify the goal and expected
+ output.[[s]](https://www.techtarget.com/searchenterpriseai/definition/AI-prompt)
+- Provide important keywords or phrases where possible to faciliate SEO and communicate term preferences to the AI
+ model.[[s]](https://www.techtarget.com/searchenterpriseai/definition/AI-prompt)
+- Keep prompts precise and clean by omitting unnecessary or redundant
+ information.[[s]](https://www.techtarget.com/searchenterpriseai/definition/AI-prompt)
+- Avoid conflicting terms that might confuse the
+ AI.[[s]](https://www.techtarget.com/searchenterpriseai/definition/AI-prompt)
+- Open-ended questions usually provide more detailed responses than [closed-ended questions] and yes/no
+ questions.[[s]](https://www.techtarget.com/searchenterpriseai/definition/AI-prompt)
+- When in doubt, ask AI to generate prompts for
+ you.[[s]](https://www.techtarget.com/searchenterpriseai/definition/AI-prompt)
+### Security
+- Don't share sensitive information with AI as you can't be certain how it's stored, if it will be shared, of if it's
+ vulnerable to data
+ breaches.[[s]](https://www.grantthornton.com/insights/articles/advisory/2023/anticipate-cybersecurity-and-privacy-risks-in-ai)
+## Prompt Structure
+### Prompt Frameworks
+
+General Purpose
+
+```
+[role] [task] [style] [output format] [constraint]
+```
+
+### Role
+
+Standard
+
+- Act as [occupation] with [specifications]
+- [List of roles](https://github.com/f/awesome-chatgpt-prompts)
+
+Roleplay
+
+- Act as [name] with [visual description] [personality] [behaviour examples] [lore] in [scenario]
+
+### Tasks (Language And Text) {.secondary}
+
+[verb] [task] [specifics]
+
+Generate
+
+- Generate [content type] to [entity] about [topic] and cover [aspects]
+- Generate random [names|numbers|words|ideas|X] matching [criteria]
+- [Continue|extend|lengthen]
+
+Summarise
+
+- [Summarise|shorten|write concise|write key points|write main lesson]
+- Create outline
+
+Refine
+
+- [Write better|improve]
+- Paraphrase
+- Correct spelling, grammar, and punctuation errors
+- Change [narrative voice A] to [narrative voice B]
+- Replace X with Y
+
+Explain
+
+- [Explain|elaborate]
+- Explain [how to do|each step of] X
+- Explain what X does
+- Explain X [in simple terms|like I’m 5|simplify]; Simplify X
+- Teach me about [topic|subject]
+- Provide [example|analogy]
+
+Organize
+
+- Sort X by [key] in [order]
+- Categorize
+
+Advise
+
+- Create [strategy|goals|milestones|roadmap|schedule|timeline] for X
+- Recommend [media type] [on|similar to] [topic]
+- Recommend [gifts|X] for [entity|occasion]
+- Recommend improvements
+- Provide [advice|feedback] for X
+
+Analyze
+
+- Extract [themes|keywords|info] about X
+- Identify [similarities|differences] between X and Y
+- Analyse the [sentiment|tone] of X
+- Identify gaps in X
+- Evaluate [strengths and weaknesses|pros and cons] of X
+- Is X [comparison] Y?
+
+Translate
+
+- Translate [language A] into [language B]
+- Convert [unit A] to [unit B]
+- Reformat as [output format]
+
+Filter
+
+- Filter items where [condition]
+- Choose best from [options]
+- Choose [top|lowest|first|last|random] [quantity] from [options]
+
+Engage
+
+- Provide questions about X
+
+Research
+
+- Get up-to-date [facts|news|data] on X
+- Find [sources|references|citations] for X
+- Is this true?
+
+### Tasks (Meta) {.secondary}
+
+Chat Memory
+
+- Based on [previous context] do X
+
+### Tasks (Code) {.secondary}
+
+Generate
+
+- Generate code in [programming language] to do X
+
+Translate
+
+- Translate [programming language A] into [programming language B]
+
+Optimize
+
+- Optimize X for [benefit]
+
+Debug
+
+- Debug X and explain why it's doing Y
+
+### Tasks (Image) {.secondary}
+
+Generate
+
+- Generate image of X in [style]
+
+Edit
+
+- Edit image to have X
+
+### Tasks (File And Image Upload) {.secondary}
+
+Explain
+
+- Question what is shown
+- Interpet visuals
+
+Analysis
+
+- Extract data
+
+### Task (5W1H Questions) {.secondary}
+
+Who
+
+- Who is X?
+- Who is [involved|affected by|responsible] for X?
+- Who should I contact for help with X?
+
+What
+
+- [What is|define|explain|describe] X?
+- What are the key topics of X?
+- What does [quote] mean?
+- [What is done well?|what can be improved?]
+- What is the best way to do X?
+
+When
+
+- When [did|will] X happen?
+- When is the best time to do X?
+
+Where
+
+- Where did X take place?
+- Where to find X?
+
+Why
+
+- Why did X happen?
+- Why is this approach used?
+- Why is X important?
+- Why might X succeed or fail?
+- Why is X preferable to Y?
+
+How
+
+- How to do X?
+- How does X work?
+- How did this happen?
+
+### Style
+
+Using [style]
+
+Imitate
+
+- Using style of [person|brand|genre|character]
+
+Formality
+
+- Formal
+- Informal
+
+Directness
+
+- Direct
+- Indirect
+
+Tones
+
+Positive
+
+- Optimistic
+- Appreciative
+- Assertive
+- Calm
+- Confident
+- Encouraging
+- Friendly
+- Humorous
+- Inspirational
+
+Negative
+
+- Pessimistic
+- Accusatory
+- Concerned
+- Critical
+- Regretful
+- Sarcastic
+- Urgent
+
+### Output Format (Text) {.secondary}
+
+In [output format]
+
+Paragraphs
+
+- Paragraphs **_(default)_**
+
+List
+
+- Bulleted list
+- Numbered list
+- Check list
+
+Code
+
+- Code
+
+Instructions
+
+- Step-by-step instructions
+
+Knowledge Base
+
+- Q&A
+- FAQ
+
+Creative Writing
+
+- [Joke|humour]
+- [Lyrics|song]
+- [Metaphorical|stylized language]
+- Poetry
+- [Script|screenplay|dialogue]
+- [Story|narrative]
+
+Games
+
+- [Quiz|test|flashcards|drills]
+- [Riddle|puzzle]
+- [rpg|choose-your-own-adventure]
+
+### Output Format (Visual) {.secondary}
+
+Data Visualization
+
+- Table
+- [Chart type] chart
+
+Creative Visual
+
+- ASCII Art
+- Emojis
+- Word cloud
+
+### Output Format (File Type) {.secondary}
+
+Document
+
+- PDF
+
+Structured Data And Markup
+
+- Plain text
+- Markdown
+- HTML
+- XML
+- CSV
+- JSON
+- LaTeX
+
+Programming Code And Scripting
+
+- [Programming language]
+- Pseudocode
+- Regular expression
+
+### Constraint
+
+But [constraint]
+
+Length
+
+- Be [extremely detailed|concise]
+- In [quantity] [words|sentences]
+
+Language
+
+- No jargon or technical terms
+
+Structure
+
+- Show [quantity] [examples|options]
+- No headers
+- No pretext titles
+
+Voice And Style
+
+- Use [first-person|second-person|third-person] narrative voice
+- Don't change the wording
+- Use pop culture references
+
+Edits
+
+- Do [minor|major] edits
+- Only show [changed|unchanged] content
+
+## Examples
+
+### Job
+
+Name Business
+
+```{.wrap}
+Suggest creative name for tech startup
+```
+
+```{.wrap}
+Suggest catchy names for bakery business
+```
+
+Interview Questions
+
+```{.wrap}
+Suggest common software engineer interview questions
+```
+
+Create Course Outline
+
+```{.wrap}
+Create course outline on web development for beginners
+```
+
+```{.wrap}
+Create training program outline for customer service workshop
+```
+
+### Relationship
+
+Gift Ideas
+
+```{.wrap}
+Suggest gift ideas for clients
+```
+
+```{.wrap}
+Suggest gift ideas for clients who work as flourists
+```
+
+```{.wrap}
+Suggest gift ideas for my wife who loves steampunk art and crafts, mystery sci-fi, journalling
+```
+
+```{.wrap}
+Suggest creative ideas for 10 year old’s birthday
+```
+
+### Competition
+
+Select Contest Winners
+
+```{.wrap}
+Randomly select 1 name from this list
+```
+
+```{.wrap}
+Randomly select 5 email addresses from this list
+```
+
+```{.wrap}
+Select top 3 records with the shortest lap times from this list
+```
+
+### Programming
+
+Create Code
+
+```{.wrap}
+Create program to calculate the factorial of given number in python
+```
+
+Create Regular Expressions
+
+```{.wrap}
+Create regex to match all email addresses in list
+```
+
+```{.wrap}
+Create regex to match all words that start with "ban"
+```
+
+```{.wrap}
+Create regex to match 8-digit password
+```
+
+Explain Code
+
+```{.wrap}
+Explain why code not working
+```
+
+```{.wrap}
+Explain what code does
+```
+
+```{.wrap}
+Explain how to make a HTTP request in javascript
+```
+
+Update Code
+
+```{.wrap}
+Add code comments
+```
+
+```{.wrap}
+Add class "header" to header tag
+```
+
+```{.wrap}
+Update CSS to change font color to blue
+```
+
+Translate
+
+- Specifically called transpile when addressing programming languages.
+
+```{.wrap}
+Translate code to Python
+```
### Email
-- **Creating email campaigns**
- ``` {.wrap}
- Email inviting Jack to dinner on the weekend
- ```
- ``` {.wrap}
- Create an email sequence for our new customer onboarding process
- ```
- ```
-- **Format and proofread email**
- ``` {.wrap}
- Proofread and format this email I just wrote:
- Hello, do you have any actual tips or tricks for ChatGPT please?
- ```
-- **Provides tips for effective email marketing**
- ``` {.wrap}
- Give me some tips on how to increase open and click-through rates for my email campaigns
- ```
- ``` {.wrap}
- Suggest ways to make my email content more engaging and relevant to my subscribers.
- ```
- ```
-- **Automate email responses**
- ``` {.wrap}
- Email him, "That's a good suggestion, it's coming soon":
- Hello, do you have any actual tips or tricks for ChatGPT please?
- ```
-- **Extract email address from text**
- ``` {.wrap}
- Extract all email addresses for me:
- Sed sit amet sodales tom@gmail.com, at jack@cheatsheets.zip enim. 18261@outlook.com ut eros
- ```
-{.collapsible}
-
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
-
-
-
-
-### Spreadsheets
-- **Help create a spreadsheet formula**
- ``` {.wrap}
- Can you help me create a formula to calculate the sum of cells A1 to A10?
- ```
-- **Explain a formula to you**
- ``` {.wrap}
- Can you explain the meaning of the formula =SUM(A1:A10) in simple terms?
- ```
-- **Create dummy data for placeholders**
- ``` {.wrap}
- Can you generate dummy data for me to use as placeholders in my spreadsheet?
- ```
-- **Help create a complex macro**
- ``` {.wrap}
- I need to create a macro that calculates the average of cells B1 to B10 and inserts the result in cell C1. Can you help me with that?
- ```
-- **Provide tips for improving spreadsheet efficiency**
- ``` {.wrap}
- Can you give me some tips on how to improve the efficiency of my spreadsheet?
- ```
-{.collapsible}
-
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
+Create Emails
+
+```{.wrap}
+Write email inviting Jack to dinner on the weekend
+```
+
+```{.wrap}
+Write email sequence for our new customer onboarding process
+```
+```{.wrap}
+Write email to inform staff of elevator maintenance on 23 June 2025, elevators unavailable for 24 hours, apologise for inconvenience
+```
+```{.wrap}
+Suggest response to message asking about project status
+```
+
+Format Email
+
+```{.wrap}
+Proofread and format email
+```
+
+Email Marketing
+
+```{.wrap}
+Suggest tips to increase open and click-through rates for my email campaigns
+```
+
+```{.wrap}
+Suggest ways to make my email content more engaging and relevant to my subscribers
+```
+
+Extract Data
+
+```{.wrap}
+Extract all email addresses in text
+```
+
+### Spreadsheet
+
+Create Something
+
+```{.wrap}
+Create excel formula to calculate sum of cells A1 to A10
+```
+
+```{.wrap}
+Generate spreadsheet dummy data as a placeholder
+```
+
+```{.wrap}
+Create macro to calculate average of cells B1 to B10 and insert result in cell C1
+```
+
+Explain Something
+
+```{.wrap}
+Explain formula =SUM(A1:A10) in simple terms
+```
+
+```{.wrap}
+Suggest tips to improve spreadsheet efficiency
+```
### Social Media
-- **Give you ideas for memes on any topic**
- ``` {.wrap}
- Can you give me some meme ideas for [dogs]?
- ```
-- **Give you an idea for a post that can drive engagement on any topic**
- ``` {.wrap}
- I want to create a post about climate change that can engage my followers. Can you help me with some ideas?
- ```
-- **Generate hashtags and captions**
- ``` {.wrap}
- I need some hashtags and a caption for a picture of a scenic sunset. Can you generate some for me?
- ```
-- **Offer suggestions reply**
- ``` {.wrap}
- I just received an message asking about the status of a project. Can you suggest a reply for me?
- ```
-{.collapsible}
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
+Create Content
+```{.wrap}
+Suggest meme ideas for dogs
+```
+```{.wrap}
+Suggest climate change post ideas to engage my followers
+```
+```{.wrap}
+Generate hashtags and caption for a picture of scenic sunset
+```
### Reading
-- **Summarize long selections of text**
- ``` {.wrap}
- Can you please summarize this article for me? [your text]
- ```
-- **Translate foreign languages**
- ``` {.wrap}
- Can you translate this sentence into Spanish? [your text]
- ```
-- **Books that are like another book**
- ``` {.wrap}
- Can you recommend books similar to 'The Hunger Games'?
- ```
-{.collapsible}
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
+Text Analysis
+
+```{.wrap}
+Summarize article
+```
+
+```{.wrap}
+Write concise main points
+```
+
+Translate
+```{.wrap}
+Translate to spanish
+```
+Recommendations
+```{.wrap}
+Recommend books similar to Hunger Games
+```
### Design
-- **Create an AI design prompt for you**
- ``` {.wrap}
- Can you help me generate a design prompt for a logo for a new sports brand?
- ```
-- **Suggestions on thumbnails for blogs or videos**
- ``` {.wrap}
- Can you recommend some eye-catching thumbnail designs for my latest YouTube video on healthy eating?
- ```
-- **Font pairings**
- ``` {.wrap}
- Can you suggest a font pairing for a travel blog header design?
- ```
-- **Color pairings**
- ``` {.wrap}
- Can you recommend a color palette for a wedding photography website?
- ```
-{.collapsible}
-
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
-
-
-
-### Analyzing Data
-- **Pull out numbers from large chunks of text**
- ``` {.wrap}
- Please extract all the numbers from this text: [your text]
- ```
-- **Create tables from the text or data you provide**
- ``` {.wrap}
- Can you create a table from this data?: [your data]
- ```
-- **Filter data from large lists**
- ``` {.wrap}
- Please filter this list based on certain criteria: [your list]
- ```
-{.collapsible}
-
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
+Design Prompts
+
+```{.wrap}
+Create design prompt of logo for new sports brand
+```
+
+```{.wrap}
+Suggest eye-catching thumbnail designs for youtube video on healthy eating
+```
+
+Aesthetic Pairings
+
+```{.wrap}
+Suggest font pairing for travel blog header design
+```
+
+```{.wrap}
+Suggest color palette for wedding photography website
+```
+
+### Data Analysis
+
+Data Extraction
+
+```{.wrap}
+Extract all numbers from text
+```
+
+Data Filtering
+```{.wrap}
+Filter list based on [condition]
+```
+Data Presentation
+
+```{.wrap}
+Create table from data
+```
### Paid Ads
-- **Give you ad creative ideas**
- ``` {.wrap}
- Give me ad creative ideas for a new product launch.
- ```
-- **Review the tracking code for errors (tag manager, etc.)**
- ``` {.wrap}
- Review my tag manager code for errors
- ```
-- **Give you ad copy ideas**
- ``` {.wrap}
- Suggest ad copy for a [travel] company
- ```
-- **Facebook audience suggestions**
- ``` {.wrap}
- Recommend a Facebook audience for a clothing line ad campaign
- ```
-- **Create body text, headlines and/or calls to action for your ads**
- ``` {.wrap}
- Create headlines, body text, and calls to action for a new fitness program ad.
- ```
-{.collapsible}
-
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
+Create Ad
+
+```{.wrap}
+Suggest creative ideas for new product launch
+```
+
+```{.wrap}
+Suggest ad copy for travel company
+```
+
+```{.wrap}
+Create headlines, body text, and calls to action for new fitness program ad
+```
+Ad Targeting
+```{.wrap}
+Recommend target Facebook audience for clothing line ad campaign
+```
+
+Ad Technical Support
+
+```{.wrap}
+Review tag manager code for errors
+```
### Amazon FBA
-- **Write or rewrite your product descriptions**
- ``` {.wrap}
- Please help me write a new and compelling product description for my latest item.
- ```
-- **Write or rewrite appeal letters**
- ``` {.wrap}
- I need help rewriting my appeal letter to make it more persuasive.
- ```
-- **Write or rewrite supplier outreach emails**
- ``` {.wrap}
- Can you please help me write an effective email to reach out to potential suppliers?
- ```
-- **Help you find items that could be sold as bundles**
- ``` {.wrap}
- Please suggest some items that would make a good bundle for our customers.
- ```
-- **Organize product and pricing data**
- ``` {.wrap}
- Can you help me organize my product and pricing information into a neat and manageable spreadsheet?
- ```
-{.collapsible}
-
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
-
-
-
-
-
-### Writing/Blogging
-- **Create titles for any of your creative writing projects**
- ``` {.wrap}
- Titles for my short story collection: [your article]
- ```
-- **Create outlines**
- ``` {.wrap}
- Outline for an essay on exercise
- ```
-- **Generate content ideas**
- ``` {.wrap}
- Ideas for a blog on sustainable fashion?
- ```
-- **Summarize any text you give it**
- ``` {.wrap}
- Summarize this article on renewable energy? [your article]
- ```
-- **Create entire blog posts**
- ``` {.wrap}
- Blog post on [financial planning]?
- ```
-- **Expand on a sentence, paragraph, or long text selection**
- ``` {.wrap}
- Expand this sentence on jazz music? [your sentence]
- ```
-- **Change the tone of your writing**
- ``` {.wrap}
- Change tone of this report to conversational? [your report]
- ```
-- **Proofread or edit your writing**
- ``` {.wrap}
- Proofread this article? [your article]
- ```
-- **Format text with headings (great for blog posts)**
- ``` {.wrap}
- Format headings for my blog post? [your post]
- ```
-- **Check any text for bias**
- ``` {.wrap}
- Check this article for bias? [your article]
- ```
-- **Detect plagiarism in any text**
- ``` {.wrap}
- Detect plagiarism in this paper? [your paper]
- ```
-- **Provide you with domain name ideas**
- ``` {.wrap}
- Domain name for my [gardening blog]?
- ```
-{.collapsible}
-
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
-
-
-
-### Teachers/Course Creators
-- **Turn a list of facts or statistics into multiple-choice quizzes**
- ``` {.wrap}
- Can you turn this list of facts about world history into a multiple-choice quiz? [your list]
- ```
-- **Assignment ideas on a specific topic**
- ``` {.wrap}
- I need some ideas for a history assignment on the American Revolution. Can you suggest some?
- ```
-- **Create assigned groups from a list of students**
- ``` {.wrap}
- I have a list of 30 students in my class. Can you divide them into groups of 6 for group projects?
- ```
-- **Create a curve based on test scores**
- ``` {.wrap}
- I need to create a grading curve for my class based on their test scores. Can you help?
- ```
-- **Grade an assignment**
- ``` {.wrap}
- Can you grade this history essay and provide feedback on any areas for improvement?
- ```
-{.collapsible}
-
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
+Product Content
+```{.wrap}
+Write compelling product description for latest item
+```
+Communication
+```{.wrap}
+Rewrite appeal letter to make it more persuasive
+```
-### YouTube
-- **Create timestamps from a transcript**
- ``` {.wrap}
- Can you create timestamps for this transcript of a podcast episode? [your transcript]
- ```
-- **Convert YouTube videos to blog posts with formatting**
- ``` {.wrap}
- Can you turn this YouTube video about cooking into a blog post with headings and bullet points? [video link]
- ```
-- **Come up with a video outline or script**
- ``` {.wrap}
- I need an outline for a video about the benefits of meditation. Can you help?
- ```
-- **Create a response to a comment**
- ``` {.wrap}
- Can you write a thoughtful and polite response to this negative comment on my YouTube video?
- ```
-- **Give you ideas for your thumbnails**
- ``` {.wrap}
- I need some ideas for a thumbnail for my video on 'DIY home decor'. Can you suggest some?
- ```
-- **Analyze your script or transcript and tell you the tone of it**
- ``` {.wrap}
- Can you analyze this script for a video about environmental issues and tell me what the tone is? [your script]
- ```
-- **Video ideas on any topic**
- ``` {.wrap}
- I want to make a series of videos about fashion. Can you suggest some ideas for individual episodes?
- ```
-{.collapsible}
-
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
+```{.wrap}
+Write effective email to reach out to potential suppliers
+```
+Product Strategy
+```{.wrap}
+Suggest items that would make a good bundle for our customers
+```
+```{.wrap}
+Organize product and pricing information into a neat and manageable spreadsheet
+```
-### Research
-- **Help research anything that happened before 2021**
- ``` {.wrap}
- Explain quantum computing in simple terms
- ```
+### Writing
- ``` {.wrap}
- Got any creative ideas for a 10 year old’s birthday?
- ```
+Name Something
- ``` {.wrap}
- How do I make an HTTP request in JavaScript?
- ```
+```{.wrap}
+Suggest titles for short story
+```
- ``` {.wrap}
- Can you tell me about the events leading up to the American Civil War?
- ```
+```{.wrap}
+Suggest titles for article 10 options
+```
- ``` {.wrap}
- What can you tell me about the invention of the printing press?
- ```
+```{.wrap}
+Suggest domain name for gardening blog
+```
- ``` {.wrap}
- Can you research the history of the Olympic Games?
- ```
+Content Creation
- ``` {.wrap}
- Can you give me information about the French Revolution?
- ```
+```{.wrap}
+Create outline for essay on exercise
+```
- ``` {.wrap}
- I'm interested in the history of the Byzantine Empire. Can you help me learn more?
- ```
+```{.wrap}
+Suggest ideas for blog on sustainable fashion
+```
- ``` {.wrap}
- etc...
- ```
+```{.wrap}
+Create blog post on financial planning
+```
- ```
-{.collapsible}
+```{.wrap}
+Expand jazz music sentence
+```
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
+Editing And Formatting
+```{.wrap}
+Change report tone to conversational
+```
+```{.wrap}
+Proofread article
+```
-### SEO
-- **Generate or find keywords**
- ``` {.wrap}
- Generate a list of related keywords for [topic]
- ```
-
- ``` {.wrap}
- Identify long-tail keywords for [topic] content optimization
- ```
-
- ``` {.wrap}
- Find top-performing keywords for [topic]
- ```
-
- ``` {.wrap}
- Generate a list of LSI keywords for [topic]
- ```
-
- ``` {.wrap}
- Find keywords with low competition for [topic]
- ```
-
- ``` {.wrap}
- Create a list of synonyms for [topic] keywords
- ```
-
- ``` {.wrap}
- Find the best keywords for [topic] PPC campaigns
- ```
-
- ``` {.wrap}
- Find the best keywords for [topic] voice search optimization
- ```
-
- ``` {.wrap}
- List the best keywords for [topic] featured snippets
- ```
-
- ``` {.wrap}
- Find the best keywords for [topic] video optimization
- ```
-
- ``` {.wrap}
- Find the best keywords for [topic]
- ```
-
- ``` {.wrap}
- Find the best keywords for [topic] AMP optimization
- ```
-
- ``` {.wrap}
- Find the best keywords for [topic] social media optimization
- ```
-
- ```
-- **More ChatGPT prompts about SEO** {.active}
- ``` {.wrap}
- Create meta descriptions and title tags for [topic]
- ```
+```{.wrap}
+Format headings for blog post
+```
+
+Evaluation
+
+```{.wrap}
+Check for bias
+```
+
+```{.wrap}
+Check for plagiarism
+```
+
+### Teacher
- ``` {.wrap}
- Find opportunities for internal linking related to [topic]
- ```
+Teaching Support
- ``` {.wrap}
- Generate ideas for blog posts and article topics on [topic]
- ```
+```{.wrap}
+Convert work history fact list into multiple-choice quiz
+```
- ``` {.wrap}
- Research industry-specific terminology for use in [topic] content
- ```
+```{.wrap}
+Suggest ideas for history assignment on American Revolution
+```
- ``` {.wrap}
- Find authoritative websites to acquire backlinks for [topic] content
- ```
+```{.wrap}
+Divide list of 30 students into groups of 6
+```
- ``` {.wrap}
- Create an XML sitemap example related to [topic]
- ```
+```{.wrap}
+Create grading curve for class based on their test scores
+```
- ``` {.wrap}
- Research the best meta tags for [topic]
- ```
+```{.wrap}
+Grade history essay and provide feedback on any areas for improvement
+```
- ``` {.wrap}
- Research the best internal linking structure for [topic] content
- ```
+### YouTube
+
+Content Creation
+
+```{.wrap}
+Create timestamps for podcast episode transcript
+```
+
+```{.wrap}
+Convert youtube cooking video into blog post with headings and bullet points
+```
- ``` {.wrap}
- Generate a list of questions people ask about [topic]
- ```
+```{.wrap}
+Create outline for a video about the benefits of meditation
+```
- ``` {.wrap}
- Create a list of the best alt tags for images related to [topic]
- ```
+```{.wrap}
+Suggest thumbnail ideas for video on "DIY home decor"
+```
- ``` {.wrap}
- Create a list of related subtopics for [topic]
- ```
+```{.wrap}
+Suggest fashion video ideas for individual episodes
+```
- ``` {.wrap}
- Find the best time to publish content related to [topic]
- ```
+Analyse
- ``` {.wrap}
- Research the best external linking strategies for [topic]
- ```
-
- ``` {.wrap}
- Find the most popular tools used for [topic] SEO
- ```
+```{.wrap}
+What is the script tone for environmental issues video
+```
- ``` {.wrap}
- Create a list of potential influencers for [topic]
- ```
+Communication
+
+```{.wrap}
+Create thoughtful and polite response to negative comment on youtube video
+```
+
+### Research
- ``` {.wrap}
- Research the best schema markup for [topic]
- ```
+History Research
- ``` {.wrap}
- Find the best header tags for [topic] content
- ```
+```{.wrap}
+Explain events leading up to American Civil War
+```
- ``` {.wrap}
- Create a list of potential link-building opportunities for [topic]
- ```
+```{.wrap}
+Provide key details about printing press invention
+```
- ``` {.wrap}
- Research the best anchor text for [topic] backlinks
- ```
+```{.wrap}
+Research olympic games history
+```
- ``` {.wrap}
- Create a list of potential guest blogging opportunities for [topic]
- ```
+```{.wrap}
+Provide key details about French Revolution
+```
+
+```{.wrap}
+Explain history of Byzantine Empire
+```
+
+Science Reseearch
+
+```{.wrap}
+Explain quantum computing in simple terms
+```
+
+```{.wrap}
+Explain rocket science like i'm five
+```
+
+### SEO
- ``` {.wrap}
- Research the best local SEO strategies for [topic]
- ```
+Keywords
- ``` {.wrap}
- Research the best analytics tools for [topic] website performance
- ```
+```{.wrap}
+Find best keywords for [topic] with low competition
+```
- ``` {.wrap}
- Create a list of potential partnerships for [topic]
- ```
+```{.wrap}
+Generate list of keywords targeting multiple geographic locations
+```
- ``` {.wrap}
- Research the best tactics for [topic] mobile optimization
- ```
+```{.wrap}
+Generate list of keyword synonyms for [topic]
+```
- ``` {.wrap}
- Research the best tactics for [topic] e-commerce optimization. Provide keyword clusters.
- ```
+Content Optimization
- ``` {.wrap}
- Create a list of potential affiliate marketing opportunities for [topic]
- ```
+```{.wrap}
+Find opportunities for internal linking related to [topic]
+```
- ``` {.wrap}
- What are the best affiliate marketing websites for [topic]
- ```
+```{.wrap}
+Research industry-specific terminology for use in [topic] content
+```
- ``` {.wrap}
- What are the best tactics for [topic] international SEO
- ```
+```{.wrap}
+Find best time to publish content related to [topic]
+```
- ``` {.wrap}
- Create a list of potential podcast or podcast guest opportunities for [topic]
- ```
+Link Building
- ``` {.wrap}
- Research the best tactics for [topic] Google My Business optimization
- ```
+```{.wrap}
+Find authoritative websites to acquire backlinks for [topic] content
+```
- ``` {.wrap}
- Find popular content topics related to [topic]
- ```
+```{.wrap}
+Research best external linking strategies for [topic]
+```
- ``` {.wrap}
- Research the best SEO tactics for [topic] and provide actionable steps
- ```
+Tools
- ``` {.wrap}
- Create a list of potential video series or webinar ideas related to [topic]
- ```
+```{.wrap}
+Find most popular tools used for [topic] seo
+```
- ``` {.wrap}
- Research competitor strategies related to [topic]
- ```
+Tactics
- ``` {.wrap}
- Find canonical tag examples related to [topic]
- ```
+```{.wrap}
+Research best tactics for [topic] mobile optimization
+```
- ``` {.wrap}
- Create an example keyword list targeting multiple geographic locations for [topic]
- ```
+```{.wrap}
+What are the best tactics for [topic] international seo?
+```
- ``` {.wrap}
- Generate keyword ideas targeting different stages of the customer purchase funnel for [topic]
- ```
+Competitors
- ``` {.wrap}
- Identify industry hashtags related to [topic].
- ```
-{.collapsible}
+```{.wrap}
+Research competitor strategies related to [topic]
+```
-[💡 I Got an IDEA](https://github.com/Fechin/reference/blob/main/source/_posts/chatgpt.md)
+```{.wrap}
+What are the best affiliate marketing websites for [topic]?
+```
+### Roleplay
+```{.wrap}
+Name: William Shakespeare
+Visual description:
+- Wearing Elizabethan attire.
+- Holding quill.
-Also see
---------
+Personality:
+- Keen observer and a masterful weaver of tales.
+- Knack for finding humor in the most unlikely places.
-- [Awesome ChatGPT Prompts](https://github.com/f/awesome-chatgpt-prompts) _(github.com)_
+Behaviour examples:
+- "To be, or not to be: that is the question: Whether 'tis nobler in the mind to suffer The slings and arrows of outrageous fortune, Or to take arms against a sea of troubles, And by opposing end them?"
+- "Canst thou not minister to a mind diseased?"
+Lore:
+- Grew up in Stratford-upon-Avon and later moved to London.
+- Famous for his tragedies, comedies, and historical plays.
+Scenario:
+- Night of a grand performance at the Globe Theatre.
+- Lead actor is missing and staff are concerned about how to achieve the performance.
+```
+
\ No newline at end of file
diff --git a/source/_posts/chmod.md b/source/_posts/chmod.md
index c0dcf6f0..09175651 100644
--- a/source/_posts/chmod.md
+++ b/source/_posts/chmod.md
@@ -1,49 +1,52 @@
---
title: Chmod
date: 2021-07-01 10:51:44
-background: bg-emerald-600
+background: bg-indigo-600
tags:
- - permission
+ - permission
categories:
- - Linux Command
+ - Linux Command
intro: |
- This quick reference cheat sheet provides a brief overview of file permissions, and the operation of the chmod command
+ This quick reference cheat sheet provides a brief overview of file permissions, and the operation of the chmod command
plugins:
- - copyCode
+ - copyCode
---
-
-Getting Started
---------
-
+## Getting Started
### Syntax
+
```shell script
-$ chmod [options] \` | Focus the Console
-`Ctrl` `L` | Clear the console
-`Shift` `Enter` | Force a multi-line entry
-`Enter` | Execute
-{.shortcuts}
-
+| Shortcut | Action |
+| ---------------------- | ------------------------------ |
+| `Tab` | Accept autocomplete suggestion |
+| `Esc` | Reject autocomplete suggestion |
+| `Up` | Get previous statement |
+| `Down` | Get next statement |
+| `Ctrl` \` | Focus the Console |
+| `Ctrl` `L` | Clear the console |
+| `Shift` `Enter` | Force a multi-line entry |
+| `Enter` | Execute |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools/shortcuts) _(developers.google.com)_
+- [Keyboard shortcuts for Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools/shortcuts)
+ _(developers.google.com)_
diff --git a/source/_posts/code-editor-ios.md b/source/_posts/code-editor-ios.md
index 86b9901c..a107d310 100644
--- a/source/_posts/code-editor-ios.md
+++ b/source/_posts/code-editor-ios.md
@@ -3,81 +3,75 @@ title: Code Editor for iOS
date: 2022-11-23 16:23:31.697110
background: bg-[#4880c2]
label: Mac
-tags:
- -
- - mac
+tags:
+ -
+ - mac
categories:
- - Keyboard Shortcuts
+ - Keyboard Shortcuts
intro: |
- A visual cheat-sheet for the 43 keyboard shortcuts found in the Code Editor for iOS app. This application is MacOS-only.
+ A visual cheat-sheet for the 43 keyboard shortcuts found in the Code Editor for iOS app. This application is MacOS-only.
---
-
-
-Keyboard Shortcuts {.cols-2}
-------------------
-
-
+## Keyboard Shortcuts {.cols-2}
### General Shortcuts I
-Shortcut | Action
----|---
-`Esc` | Show completions
-`Tab` | Insert indent, depending on the preferences of tabs or spaces
-`Cmd` `N` | New document tab
-`Cmd` `W` | Close tab
-`Cmd` `S` | Save
-`Cmd` `Z` | Undo
-`Cmd` `Shift` `Z` | Redo
-`Cmd` `A` | Select all
-`Cmd` `X` | Cut
-`Cmd` `C` | Copy
-`Cmd` `V` | Paste
-`Cmd` `F` | Find
-`Cmd` `G` | Find next
-`Cmd` `Shift` `G` | Find previous
-`Cmd` `/` | Toggle comment
-`Cmd` `[` | Indent selection
-`Cmd` `]` | Dedent selection
-`Cmd` `Shift` `[` | Move to previous tab
-`Cmd` `Shift` `]` | Move to next tab
-`Cmd` `4` | Toggle preview, in editor only
-`Cmd` `K` | Clear scrollback, in terminal and playgrounds only
-{.shortcuts}
+| Shortcut | Action |
+| ----------------- | ------------------------------------------------------------- |
+| `Esc` | Show completions |
+| `Tab` | Insert indent, depending on the preferences of tabs or spaces |
+| `Cmd` `N` | New document tab |
+| `Cmd` `W` | Close tab |
+| `Cmd` `S` | Save |
+| `Cmd` `Z` | Undo |
+| `Cmd` `Shift` `Z` | Redo |
+| `Cmd` `A` | Select all |
+| `Cmd` `X` | Cut |
+| `Cmd` `C` | Copy |
+| `Cmd` `V` | Paste |
+| `Cmd` `F` | Find |
+| `Cmd` `G` | Find next |
+| `Cmd` `Shift` `G` | Find previous |
+| `Cmd` `/` | Toggle comment |
+| `Cmd` `[` | Indent selection |
+| `Cmd` `]` | Dedent selection |
+| `Cmd` `Shift` `[` | Move to previous tab |
+| `Cmd` `Shift` `]` | Move to next tab |
+| `Cmd` `4` | Toggle preview, in editor only |
+| `Cmd` `K` | Clear scrollback, in terminal and playgrounds only |
+{.shortcuts}
### General Shortcuts II
-Shortcut | Action
----|---
-`Cmd` `R` | Reload, in preview only
-`Cmd` `Left` | Back, in preview only
-`Cmd` `Right` | Forward, in preview only
-`Shift` `Left` | Select the previous character
-`Shift` `Right` | Select the next character
-`Cmd` `Left` | Move to the beginning of the current line
-`Cmd` `Right` | Move to the end of the current line
-`Cmd` `Shift` `Left` | Select to the beginning of the current line
-`Cmd` `Shift` `Right` | Select to the end of the current line
-`Opt` `Left` | Move to the beginning of the current word
-`Opt` `Right` | Move to the end of the current word
-`Opt` `Shift` `Left` | Select to the beginning of the current word
-`Opt` `Shift` `Right` | Select to the end of the current word
-`Cmd` `Del` | Delete to the beginning of the current line
-`Cmd` `Opt` `Del` | Delete to the beginning of the current word
-`Cmd` `Del (forward)` | Delete to the end of the current line
-`Cmd` `Opt` `Del (forward)` | Delete to the end of the current word
-`Ctrl` `A` | Move to the beginning of the current line
-`Ctrl` `Shift` `A` | Select to the beginning of the current line
-`Ctrl` `E` | Move to the end of the current line
-`Ctrl` `Shift` `E` | Select to the end of the current line
-`Ctrl` `K` | Delete to the end of the current line
-{.shortcuts}
-
+| Shortcut | Action |
+| --------------------------- | ------------------------------------------- |
+| `Cmd` `R` | Reload, in preview only |
+| `Cmd` `Left` | Back, in preview only |
+| `Cmd` `Right` | Forward, in preview only |
+| `Shift` `Left` | Select the previous character |
+| `Shift` `Right` | Select the next character |
+| `Cmd` `Left` | Move to the beginning of the current line |
+| `Cmd` `Right` | Move to the end of the current line |
+| `Cmd` `Shift` `Left` | Select to the beginning of the current line |
+| `Cmd` `Shift` `Right` | Select to the end of the current line |
+| `Opt` `Left` | Move to the beginning of the current word |
+| `Opt` `Right` | Move to the end of the current word |
+| `Opt` `Shift` `Left` | Select to the beginning of the current word |
+| `Opt` `Shift` `Right` | Select to the end of the current word |
+| `Cmd` `Del` | Delete to the beginning of the current line |
+| `Cmd` `Opt` `Del` | Delete to the beginning of the current word |
+| `Cmd` `Del (forward)` | Delete to the end of the current line |
+| `Cmd` `Opt` `Del (forward)` | Delete to the end of the current word |
+| `Ctrl` `A` | Move to the beginning of the current line |
+| `Ctrl` `Shift` `A` | Select to the beginning of the current line |
+| `Ctrl` `E` | Move to the end of the current line |
+| `Ctrl` `Shift` `E` | Select to the end of the current line |
+| `Ctrl` `K` | Delete to the end of the current line |
+{.shortcuts}
+## Also see
-Also see
---------
-- [Keyboard shortcuts for the Code Editor iOS app](https://library.panic.com/code-editor/shortcut-keys/) _(library.panic.com)_
+- [Keyboard shortcuts for the Code Editor iOS app](https://library.panic.com/code-editor/shortcut-keys/)
+ _(library.panic.com)_
diff --git a/source/_posts/color-picker.md b/source/_posts/color-picker.md
new file mode 100644
index 00000000..f789ec57
--- /dev/null
+++ b/source/_posts/color-picker.md
@@ -0,0 +1,61 @@
+---
+title: Color Picker
+date: 2025-07-01 18:28:43
+background: bg-[#2a6387]
+tags:
+ - html
+ - color
+categories:
+ - Toolkit
+intro: The Color Picker cheat sheet provides you basic color info and choices
+plugins:
+ - copyCode
+---
+
+## Getting Started
+
+
+### Color Basics {.col-span-3}
+
+
+| **Category** | **Description** |
+|:---------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Color Models** | **RGB**: Red, Green, Blue – additive model used in screens.
**HEX**: Hexadecimal color codes, e.g., #FFFFFF.
**HSL**: Hue, Saturation, Lightness – intuitive for color adjustments.
**HSV**: Hue, Saturation, Value – similar to HSL but with different brightness handling. |
+| **Color Terminology** | **Saturation**: Intensity or purity of a color.
**Hue**: The color type (e.g., red, blue).
**Lightness**: Brightness or darkness of a color.
**Opacity**: Transparency level of a color, often defined as alpha in RGBA. |
+| **Color Representation Formats** | **HEX**: `#RRGGBB` or `#RRGGBBAA` (with alpha).
**RGB**: `rgb(255, 255, 255)`
**RGBA**: `rgba(255, 255, 255, 0.5)`
**HSL**: `hsl(120, 100%, 50%)`
**HSLA**: `hsla(120, 100%, 50%, 0.5)` |
+
+
+
+### Main Frameworks {.col-span-3}
+
+| **Framework** | **Color Notation / Syntax** | **Description** | **Documentation Link** |
+|:-----------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------------------------------------------------------------|:-------------------------------------------------------------------------------------------|
+| **CSS** | `color: red;`
`color: #ff0000;`
`color: rgb(255, 0, 0);`
`color: rgba(255, 0, 0, 0.5);`
`color: hsl(0, 100%, 50%);`
`color: hsla(0, 100%, 50%, 0.5);` | Standard CSS color properties and formats. | [CSS Color Documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/color) |
+| **SASS/SCSS** | `$color: #ff0000;`
`color: $color;` | Variables for colors, can use same formats as CSS. | [SASS Color Documentation](https://sass-lang.com/documentation/values/colors) |
+| **Tailwind CSS** | `class="bg-red-500"`
`class="text-green-300"` | Utility classes with predefined color shades. | [Tailwind CSS Colors](https://tailwindcss.com/docs/customizing-colors) |
+| **Bootstrap** | `class="text-primary"`
`class="bg-success"` | Named color classes for quick styling. | [Bootstrap Colors](https://getbootstrap.com/docs/5.0/getting-started/introduction/#colors) |
+| **Material UI** | `style={{ color: 'primary' }}` or theme palette | Uses theme palette, can override with specific color codes. | [Material UI Color](https://mui.com/customization/color/) |
+
+
+## Color Palette
+
+### Tailwind Palette {.col-span-3}
+
+exp1 \|\| exp2 | Either is true _(OR)_ |
+| `!exp` | `exp` is false _(NOT)_ |
#### Bitwise Operators
-| Operator | Description |
-|----------|-------------------------|
-| `a & b` | Binary AND |
-| `a | b` | Binary OR |
-| `a ^ b` | Binary XOR |
-| `~ a` | Binary One's Complement |
-| `a << b` | Binary Shift Left |
-| `a >> b` | Binary Shift Right |
+| Operator | Description |
+| ------------------- | ----------------------- |
+| `a & b` | Binary AND |
+| a \| b | Binary OR |
+| `a ^ b` | Binary XOR |
+| `~ a` | Binary One's Complement |
+| `a << b` | Binary Shift Left |
+| `a >> b` | Binary Shift Right |
### Ternary Operator
@@ -407,8 +405,7 @@ switch (num) {
}
```
-C++ Loops
-------------
+## C++ Loops
### While
@@ -471,6 +468,7 @@ for(int i = 1; i > 0; i++) {
```cpp
#include
_(non-standard)_ |
-| `10 9 * * 5` | At 9:10AM of every Friday |
-| `0 0 * * 0` | At midnight of every Sunday |
-| `15 2 * * 1L` | At 2:15am on the last monday of every month |
-| `15 0 * * 4#2` | At 00:15am on the second thursday of every month |
-| `0 0 1 * *` | Every 1st of month (monthly) |
-| `0 0 1 1 *` | Every 1st of january (yearly) |
+### Cron Generator {.col-span-3}
-| `@reboot` | Every reboot
_(non-standard)_ |
+
_(non-standard)_ |
-{.shortcuts}
+{.shortcuts}
### Special characters {.col-span-2}
+
| Special Character | Description |
-|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|
+| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Asterik(*)` | Matches all values in the field or any possible value. |
| `Hyphen(-)` | Used to define a range.Ex: 1-5 in 5th field(Day Of Week) Every Weekday i.e., Monday to Friday |
| `Slash (/)` | 1st field(Minute) /15 meaning every fifteen minute or increment of range. |
| `Comma (,)` | Used to separate items.Ex: 2,6,8 in 2nd fields(Hour) executes at 2am,6am and 8am |
| `L` | It is allowed only for Day of Month or Day Of Week field, 2L in Day of week indicates Last tuesday of every month |
| `Hash (#)` | It is allowed only for Day Of Week field, which must be followed within range of 1 to 5. For example, 4#1 means "The first Thursday" of given month. |
-| `Question mark (?)` | Can be instead of '*' and allowed for Day of Month and Day Of Week. Usage is restricted to either Day of Month or Day Of Week in a cron expression. |
-
-
+| `Question mark (?)` | Can be instead of '\*' and allowed for Day of Month and Day Of Week. Usage is restricted to either Day of Month or Day Of Week in a cron expression. |
## Also see {.cols-1}
-* [Devhints](https://devhints.io/cron) _(devhints.io)_
-* [Crontab Generator](https://crontab-generator.org/) _(crontab-generator.org)_
-* [Crontab guru](https://crontab.guru/) _(crontab.guru)_
+- [Devhints](https://devhints.io/cron) _(devhints.io)_
+- [Crontab Generator](https://crontab-generator.org/) _(crontab-generator.org)_
+- [Crontab guru](https://crontab.guru/) _(crontab.guru)_
diff --git a/source/_posts/cs.md b/source/_posts/cs.md
index e4f510c3..14d585f3 100644
--- a/source/_posts/cs.md
+++ b/source/_posts/cs.md
@@ -3,21 +3,20 @@ title: C#
date: 2021-12-14 12:22:00
background: bg-[#8c4c8a]
tags:
- - object-oriented
- - class
+ - object-oriented
+ - class
categories:
- - Programming
+ - Programming
intro: |
- C# quick reference cheat sheet that provides basic syntax and methods.
+ C# quick reference cheat sheet that provides basic syntax and methods.
plugins:
- - copyCode
+ - copyCode
---
-
-Getting Started
---------
+## Getting Started
### Hello.cs
+
```cs
class Hello {
// main method
@@ -30,24 +29,26 @@ class Hello {
```
Creates a project directory for new console application
+
```cs
$ dotnet new console
```
-lists all the applications templates
+Lists all the applications templates
+
```cs
-$ dotnet new list
+$ dotnet new list
```
Compiling and running (make sure you are in the project directory)
+
```shell script
$ dotnet run
Hello, world!
```
-
-
### Variables
+
```cs
int intNum = 9;
long longNum = 9999999;
@@ -63,40 +64,40 @@ var str = "999";
var bo = false;
```
+### Primitive Data Types
-### Primitive Data Types
-| Data Type | Size | Range |
-| --------- | ---------------- | ----------------------- |
-| `int` | 4 bytes | -2^31^ ^to^ 2^31^-1 |
-| `long` | 8 bytes | -2^63^ ^to^ 2^63^-1 |
+| Data Type | Size | Range |
+| --------- | ---------------- | ------------------------- |
+| `int` | 4 bytes | -2^31^ ^to^ 2^31^-1 |
+| `long` | 8 bytes | -2^63^ ^to^ 2^63^-1 |
| `float` | 4 bytes | 6 ^to^ 7 decimal digits |
-| `double` | 8 bytes | 15 decimal digits |
+| `double` | 8 bytes | 15 decimal digits |
| `decimal` | 16 bytes | 28 ^to^ 29 decimal digits |
-| `char` | 2 bytes | 0 ^to^ 65535 |
-| `bool` | 1 bit | true / false |
-| `string` | 2 bytes per char | _N/A_ |
-{.show-header}
-
+| `char` | 2 bytes | 0 ^to^ 65535 |
+| `bool` | 1 bit | true / false |
+| `string` | 2 bytes per char | _N/A_ |
+{.show-header}
### Comments
+
```cs
// Single-line comment
-/* Multi-line
+/* Multi-line
comment */
// TODO: Adds comment to a task list in Visual Studio
/// Single-line comment used for documentation
-/** Multi-line comment
+/** Multi-line comment
used for documentation **/
```
-
### Strings
+
```cs
string first = "John";
string last = "Doe";
@@ -105,9 +106,11 @@ string last = "Doe";
string name = first + " " + last;
Console.WriteLine(name); // => John Doe
```
+
See: [Strings](#c-strings)
### User Input
+
```cs
Console.WriteLine("Enter number:");
if(int.TryParse(Console.ReadLine(),out int input))
@@ -117,8 +120,8 @@ if(int.TryParse(Console.ReadLine(),out int input))
}
```
-
### Conditionals
+
```cs
int j = 10;
@@ -131,8 +134,8 @@ if (j == 10) {
}
```
-
### Arrays
+
```cs
char[] chars = new char[10];
chars[0] = 'a';
@@ -143,8 +146,8 @@ int[] mylist = {100, 200};
bool[] answers = {true, false};
```
-
### Loops
+
```cs
int[] numbers = {1, 2, 3, 4, 5};
@@ -152,21 +155,19 @@ for(int i = 0; i < numbers.Length; i++) {
Console.WriteLine(numbers[i]);
}
```
+
---
+
```cs
foreach(int num in numbers) {
Console.WriteLine(num);
}
```
-
-
-
-
-C# Strings
-----------------
+## C# Strings
### String concatenation
+
```cs
string first = "John";
string last = "Doe";
@@ -176,6 +177,7 @@ Console.WriteLine(name); // => John Doe
```
### String interpolation
+
```cs
string first = "John";
string last = "Doe";
@@ -185,25 +187,27 @@ Console.WriteLine(name); // => John Doe
```
### String Members {.row-span-2}
-| Member | Description |
-|------------ |-------------|
-| Length | A property that returns the length of the string. |
-| Compare() | A static method that compares two strings. |
-| Contains() | Determines if the string contains a specific substring. |
-| Equals() | Determines if the two strings have the same character data. |
-| Format() | Formats a string via the {0} notation and by using other primitives. |
-| Trim() | Removes all instances of specific characters from trailing and leading characters. Defaults to removing leading and trailing spaces. |
-| Split() | Removes the provided character and creates an array out of the remaining characters on either side. |
-{.show-header}
+| Member | Description |
+| ---------- | ------------------------------------------------------------------------------------------------------------------------------------ |
+| Length | A property that returns the length of the string. |
+| Compare() | A static method that compares two strings. |
+| Contains() | Determines if the string contains a specific substring. |
+| Equals() | Determines if the two strings have the same character data. |
+| Format() | Formats a string via the {0} notation and by using other primitives. |
+| Trim() | Removes all instances of specific characters from trailing and leading characters. Defaults to removing leading and trailing spaces. |
+| Split() | Removes the provided character and creates an array out of the remaining characters on either side. |
+
+{.show-header}
### Verbatim strings
+
```cs {.wrap}
string longString = @"I can type any characters in here !#@$%^&*()__+ '' \n \t except double quotes and I will be taken literally. I even work with multiple lines.";
```
-
### Member Example
+
```cs
// Using property of System.String
string lengthOfString = "How long?";
@@ -213,20 +217,15 @@ lengthOfString.Length // => 9
lengthOfString.Contains("How"); // => true
```
-
-
-
-Misc
------------
+## Misc
### General .NET Terms {.col-span-2}
-| Term | Definition |
-|------------|------------|
-| Runtime | A collection of services that are required to execute a given compiled unit of code. |
-| Common Language Runtime (CLR) | Primarily locates, loads, and managed .NET objects. The CLR also handles memory management, application hosting, coordination of threads, performaing security checks, and other low-level details. |
-| Managed code | Code that compiles and runs on .NET runtime. C#/F#/VB are examples. |
-| Unmanaged code | Code that compiles straight to machine code and cannot be directly hosted by the .NET runtime. Contains no free memory management, garbage collection, etc. DLLs created from C/C++ are examples. |
-{.show-header}
-
+| Term | Definition |
+| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Runtime | A collection of services that are required to execute a given compiled unit of code. |
+| Common Language Runtime (CLR) | Primarily locates, loads, and managed .NET objects. The CLR also handles memory management, application hosting, coordination of threads, performing security checks, and other low-level details. |
+| Managed code | Code that compiles and runs on .NET runtime. C#/F#/VB are examples. |
+| Unmanaged code | Code that compiles straight to machine code and cannot be directly hosted by the .NET runtime. Contains no free memory management, garbage collection, etc. DLLs created from C/C++ are examples. |
+{.show-header}
diff --git a/source/_posts/css3.md b/source/_posts/css3.md
index 1cfc1976..d0fa6cc4 100644
--- a/source/_posts/css3.md
+++ b/source/_posts/css3.md
@@ -3,81 +3,82 @@ title: CSS 3
date: 2020-12-25 20:22:47
background: bg-[#3473b5]
tags:
- - web
- - css
- - style
+ - web
+ - css
+ - style
categories:
- - Programming
+ - Programming
intro: |
- This is a quick reference cheat sheet for CSS goodness, listing selector syntax, properties, units and other useful bits of information.
+ This is a quick reference cheat sheet for CSS goodness, listing selector syntax, properties, units and other useful bits of information.
plugins:
- - copyCode
+ - copyCode
+ - runCode
---
-
-
-Getting Started
-------------
+## Getting Started
### Introduction {.row-span-3}
+
CSS is rich in capabilities and is more than simply laying out pages.
#### External stylesheet
+
```html {.wrap}
-
+
```
#### Internal stylesheet
+
```html
```
-#### Inline styles
+#### Inline styles
+
```html {.wrap}
Centered text
_one level deep in div_ |
| `div + p` | P tags immediately after div |
| `div ~ p` | P tags preceded by div |
-See also: [Adjacent](https://developer.mozilla.org/en-US/docs/Web/CSS/Adjacent_sibling_combinator) / [Sibling](https://developer.mozilla.org/en-US/docs/Web/CSS/General_sibling_combinator) / [Child](https://developer.mozilla.org/en-US/docs/Web/CSS/Child_combinator) selectors
-
+See also: [Adjacent](https://developer.mozilla.org/en-US/docs/Web/CSS/Adjacent_sibling_combinator) /
+[Sibling](https://developer.mozilla.org/en-US/docs/Web/CSS/General_sibling_combinator) /
+[Child](https://developer.mozilla.org/en-US/docs/Web/CSS/Child_combinator) selectors
### Attribute selectors
| | |
-|----------------------|------------------------------------|
+| -------------------- | ---------------------------------- | ---------------------------- |
| `a[target]` | With a
center / justify |
-| `text-transform:` | capitalize / uppercase / lowercase |
+| `text-align:` | left / right
center / justify | | `text-transform:` | capitalize / uppercase / lowercase |
{.left-text}
See also: [Font](https://developer.mozilla.org/en-US/docs/Web/CSS/font)
@@ -381,7 +366,7 @@ See also: [Font](https://developer.mozilla.org/en-US/docs/Web/CSS/font)
### Shorthand {.secondary .col-span-2}
| | style | weight | size (required) | | line-height | family |
-|---------|----------|--------|-----------------|-----|-------------|-------------------|
+| ------- | -------- | ------ | --------------- | --- | ----------- | ----------------- |
| `font:` | `italic` | `400` | `14px` | `/` | `1.5` | `sans-serif` |
| | style | weight | size (required) | | line-height | family (required) |
@@ -393,11 +378,9 @@ font-size: 12pt;
letter-spacing: 0.02em;
```
-
### Case {.row-span-2}
```css
-
/* Hello */
text-transform: capitalize;
@@ -408,22 +391,16 @@ text-transform: uppercase;
text-transform: lowercase;
```
-
### @font-face
```css
@font-face {
- font-family: 'Glegoo';
- src: url('../Glegoo.woff');
+ font-family: 'Glegoo';
+ src: url('../Glegoo.woff');
}
```
-
-
-
-CSS Colors
-------------
-
+## CSS Colors
### Named color
@@ -434,7 +411,6 @@ color: tan;
color: rebeccapurple;
```
-
### Hexadecimal color
```css
@@ -444,8 +420,6 @@ color: #090a;
color: #009900aa;
```
-
-
### rgb() Colors
```css
@@ -453,11 +427,10 @@ color: rgb(34, 12, 64, 0.6);
color: rgba(34, 12, 64, 0.6);
color: rgb(34 12 64 / 0.6);
color: rgba(34 12 64 / 0.3);
-color: rgb(34.0 12 64 / 60%);
+color: rgb(34 12 64 / 60%);
color: rgba(34.6 12 64 / 30%);
```
-
### HSL Colors
```css
@@ -465,11 +438,12 @@ color: hsl(30, 100%, 50%, 0.6);
color: hsla(30, 100%, 50%, 0.6);
color: hsl(30 100% 50% / 0.6);
color: hsla(30 100% 50% / 0.6);
-color: hsl(30.0 100% 50% / 60%);
+color: hsl(30 100% 50% / 60%);
color: hsla(30.2 100% 50% / 60%);
```
### Other
+
```css
color: inherit;
color: initial;
@@ -479,34 +453,23 @@ color: transparent;
color: currentcolor; /* keyword */
```
-
-
-
-
-
-
-CSS Backgrounds
-----------
+## CSS Backgrounds
### Properties {.row-span-2}
| Property | Description |
-|---------------|---------------|
+| ------------- | ------------- |
| `background:` | _(Shorthand)_ |
-| `background-color:` | See: [Colors](#css-colors) |
-| `background-image:` | url(...) |
-| `background-position:` | left/center/right
top/center/bottom |
-| `background-size:` | cover X Y |
-| `background-clip:` | border-box
padding-box
content-box |
-| `background-repeat:` | no-repeat
repeat-x
repeat-y |
-| `background-attachment:` | scroll/fixed/local |
-{.left-text}
+| `background-color:` | See: [Colors](#css-colors) | | `background-image:` | url(...) | | `background-position:` |
+left/center/right
top/center/bottom | | `background-size:` | cover X Y | | `background-clip:` |
+border-box
padding-box
content-box | | `background-repeat:` | no-repeat
repeat-x
repeat-y | |
+`background-attachment:` | scroll/fixed/local | {.left-text}
### Shorthand {.secondary .col-span-2}
| | color | image | positionX | positionY | | size | repeat | attachment |
-|---------------|--------|--------------|-----------|-----------|-----|----------------|-------------|------------|
+| ------------- | ------ | ------------ | --------- | --------- | --- | -------------- | ----------- | ---------- |
| `background:` | `#ff0` | `url(a.jpg)` | `left` | `top` | `/` | `100px` `auto` | `no-repeat` | `fixed;` |
| `background:` | `#abc` | `url(b.png)` | `center` | `center` | `/` | `cover` | `repeat-x` | `local;` |
| | color | image | posX | posY | | size | repeat | attach.. |
@@ -516,100 +479,100 @@ CSS Backgrounds
```css {.wrap}
background: url(img_man.jpg) no-repeat center;
-background: url(img_flwr.gif) right bottom no-repeat, url(paper.gif) left top repeat;
+background:
+ url(img_flwr.gif) right bottom no-repeat,
+ url(paper.gif) left top repeat;
-background: rgb(2,0,36);
-background: linear-gradient(90deg, rgba(2,0,36,1) 0%, rgba(13,232,230,1) 35%, rgba(0,212,255,1) 100%);
+background: rgb(2, 0, 36);
+background: linear-gradient(
+ 90deg,
+ rgba(2, 0, 36, 1) 0%,
+ rgba(13, 232, 230, 1) 35%,
+ rgba(0, 212, 255, 1) 100%
+);
```
-
-
-
-CSS The Box Model
-------------
-
+## CSS The Box Model
### Maximums/Minimums
```css
.column {
- max-width: 200px;
- width: 500px;
+ max-width: 200px;
+ width: 500px;
}
```
-See also: [max-width](https://developer.mozilla.org/en-US/docs/Web/CSS/max-width) / [min-width](https://developer.mozilla.org/en-US/docs/Web/CSS/min-width) / [max-height](https://developer.mozilla.org/en-US/docs/Web/CSS/max-height) / [min-height](https://developer.mozilla.org/en-US/docs/Web/CSS/min-height)
-
+See also: [max-width](https://developer.mozilla.org/en-US/docs/Web/CSS/max-width) /
+[min-width](https://developer.mozilla.org/en-US/docs/Web/CSS/min-width) /
+[max-height](https://developer.mozilla.org/en-US/docs/Web/CSS/max-height) /
+[min-height](https://developer.mozilla.org/en-US/docs/Web/CSS/min-height)
### Margin / Padding
```css
.block-one {
- margin: 20px;
- padding: 10px;
+ margin: 20px;
+ padding: 10px;
}
```
-See also: [Margin](https://developer.mozilla.org/en-US/docs/Web/CSS/margin) / [Padding](https://developer.mozilla.org/en-US/docs/Web/CSS/padding)
+See also: [Margin](https://developer.mozilla.org/en-US/docs/Web/CSS/margin) /
+[Padding](https://developer.mozilla.org/en-US/docs/Web/CSS/padding)
### Box-sizing
```css
.container {
- box-sizing: border-box;
+ box-sizing: border-box;
}
```
-See also: [Box-sizing](https://developer.mozilla.org/en-US/docs/Web/CSS/Box-sizing)
-
+See also: [Box-sizing](https://developer.mozilla.org/en-US/docs/Web/CSS/Box-sizing)
-### Visibility
+### Visibility
```css
.invisible-elements {
- visibility: hidden;
+ visibility: hidden;
}
```
-See also: [Visibility](https://developer.mozilla.org/en-US/docs/Web/CSS/visibility)
+See also: [Visibility](https://developer.mozilla.org/en-US/docs/Web/CSS/visibility)
### Auto keyword
```css
div {
- margin: auto;
+ margin: auto;
}
```
-See also: [Margin](https://developer.mozilla.org/en-US/docs/Web/CSS/margin)
+See also: [Margin](https://developer.mozilla.org/en-US/docs/Web/CSS/margin)
### Overflow
```css
.small-block {
- overflow: scroll;
+ overflow: scroll;
}
```
-See also: [Overflow](https://developer.mozilla.org/en-US/docs/Web/CSS/overflow)
+See also: [Overflow](https://developer.mozilla.org/en-US/docs/Web/CSS/overflow)
-
-
-CSS Animation {.cols-5}
----------
-
+## CSS Animation {.cols-5}
### Shorthand {.col-span-5 .secondary}
| | name | duration | timing-function | delay | count | direction | fill-mode | play-state |
-|--------------|----------|----------|-----------------|---------|------------|---------------------|-----------|------------|
+| ------------ | -------- | -------- | --------------- | ------- | ---------- | ------------------- | --------- | ---------- |
| `animation:` | `bounce` | `300ms` | `linear` | `100ms` | `infinite` | `alternate-reverse` | `both` | `reverse` |
| | name | duration | timing-function | delay | count | direction | fill-mode | play-state |
### Properties {.row-span-2 .col-span-2}
| Property | Value |
-|------------------------------|--------------------------------------------------------|
+| ---------------------------- | ------------------------------------------------------ |
| `animation:` | _(shorthand)_ |
| `animation-name:` | \
Model Class Name: {{ objectmodel }}
+``` + +## Context Processor {.cols-1} + +### Creating custom Context Processor + +Anywhere, create a `context_processors.py` file + +``` +project_name +└───app_name + ├───... + └───context_processors.pyy +``` + +Create a function in context_processors.py that accepts a HttpRequest object as an argument and returns a dictionary + +A context processor is just a function that accepts an HttpRequest object as an argument and returns a dictionary. Like +this: + +```python +# app_name/context_processors.py +def site_email(request): + return { 'site_email' : 'example@gmail.com' } +``` + +3. Add this to your context_processors setting in settings.py (at the bottom for security reasons) + +```python + TEMPLATES = [ + { … + 'OPTIONS': { + 'context_processors': [ + … + 'app_name.context_processors.site_email', + # New context processor here + … + ], + … }, + +# Now be able to access the 'site_email' template variable on every single django template across your whole site. +``` + +## Model Managers and Querysets + +### Model Manager + +Model manager allow model database reads and writes + +```python +# One line create and save +Article.objects.create(name='Item 1', price=19.95) + +# Read all +Article.objects.all() + +# Create +user = User.objects.first() +article = Article(user=user, name='Item 1', price=19.95) + +# Save +article.save() + +# Read one +Article.objects.get(id=1) + +# Select Related (to avoid n+1 query) +posts = Post.objects.select_related('user', 'category').all() + +# Read or render a 404 not found page +from django.shortcuts import get_object_or_404 +article = get_object_or_404(Article, id=512) + +# Filter +Article.objects.filter(model='dyson', name__icontains='dyson') # __icontains +Article.objects.filter(year__gt=2016) # __gt = greater than +Article.objects.filter(year__lt=2001) # __lt = less than + +# Filter on relationship sub model field +Article.objects.get(user__username='mike') + +# Ordering +Article.objects.order_by('name') # ascending +Article.objects.order_by('-name') # descending + +# Slicing return first +Article.objects.all().order_by('name')[0] + +# Slicing return last +Article.objects.all().order_by('-name')[0] + +# Slicing limit/offset +Article.objects.all().order_by('name')[1..10] + +# Updating +article = Article.objects.first() +article.name = 'new name' +article.save() + +# One line update +Article.objects.filter(id=4).update(name='new name') + +# Deleting +article = Article.objects.first() +article.delete() + +# One line delete +article.objects.get(id=1).delete() + +# Delete all +Article.objects.all().delete() + +# Set ForeignKey field value +model1 = Model(name='dyson') +article.model = model1 + +# Get ForeignKey value +article1.model.name +model1.article_set.all() + +# Add Many-to-Many +article1.tags.add(tag1) +article1.tags.all() +tag1.articles_set.all() +``` + +## Form + +### Form creation {.col-span-2} + +In HTML, a form is a collection of elements inside `` that allow a visitor to do things like enter text, +select options, manipulate objects or controls, and so on, and then send that information back to the server. + +```python +# app_name/forms.py +from django import forms +class ArticleForm(forms.Form): + name = forms.Charfield(max_length=100) + description = forms.Charfield(blank=True, null = True) + + +# Model Form +from django.forms import ModelForm +from app_name.models import Article +class ArticleForm(ModelForm): + class Meta: + model = Article + fields = ['name', 'description', 'price'] # Use '__all__' for all fields + widgets = { + 'name': forms.TextInput(attrs={'class': 'form-control'}), + } + labels = { + 'name': 'First Name', + } + error_messages = { + 'name': {'required': 'This field is required',}, + } + help_texts = { + 'name': 'Enter Your First Name', + } +``` + +```html + + +``` + +- NOTE: If the form contains a file field, your form MUST contain `enctype="multipart/form-data"`, eg: + +```html + +``` + +##### A Tailwind CSS template pack for the wonderful django-crispy-forms. + +```bash +pip install crispy-tailwind +``` + +```python +# settings.py +INSTALLED_APPS = ( + ... + "crispy_forms", + "crispy_tailwind", + ... +) +CRISPY_ALLOWED_TEMPLATE_PACKS = 'tailwind' +CRISPY_TEMPLATE_PACK = 'tailwind' +``` + +```html + +{% load tailwind_filters %} {{ form|crispy }} +``` + +### Form Validation + +```python +# forms.py +from django.core.exceptions import ValidationError + +# field validation +def clean_first_name(self): + data = self.cleaned_data['first_name'] + if data = 'Mike': + raise ValidationError('Your name must not be Mike') + return data + +# form validation +def clean(self): + first_name = self.cleaned_data['first_name'] + last_name = self.cleaned_data['last_name'] + if first_name + last_name = 'MikeTaylor': + raise ValidationError('Your name must not be Mike Taylor') +``` + +## Flash messages {.cols-1} + +### Displaying messages + +```python +# Message tags +# debug, info, success, warning and error + +messages.success(request, 'Login successful') +messages.error(request, 'Login error') +``` + +```html + +{% if messages %} {% for message in messages %} {% message %} {% message.tags %} +{% endfor %} {% endif %} +``` + +## User Model + +### Pre-created + +User Model (pre-created) + +```python +# Get a reference to Django pre-created User model +from django.contrib.auth import get_user_model + +User = get_user_model() + +# Or if you want to custom user model +from django.contrib.auth.models import AbstractUser + +class User(AbstractUser): + # add custom fields and methods + +# To make Django use that model go to settings.py and add: AUTH_USER_MODEL = 'app_name.User' +``` + +## Authentication + +### Authentication : LoginView + +```python +# LoginView is already pre-created by Django +from django.contrib.auth.views import LoginView + +# Add a url to reach that view +path('login/', LoginView.as_view(), name='login') + +# By default the LoginView will try to open a template name 'registration/login.html' and send a login form with it. +``` + +```html + +{% extends "base.html" %} {% block content %} + +{% endblock content %} + + + + +``` + +#### Authentication : LogoutView + +```python +# LogoutView is already pre-created by Django +from django.contrib.auth.views import LogoutView + +# Add a url to reach that view +path('logout/', LoginView.as_view(), name='logout') + +# Include a link in a template + href="{% url 'logout' %}">Logout + +# After link is execute, the user will be logout and redirect to LOGOUT_REDIRECT_URL specified in your settings.py +``` + +#### Authentication : SignupView + +```python +# Create a SignupView (that view is not created by default) +# import sinupview form pre-created by Django +from django.contrib.auth.forms import UserCreationForm +from django.views.generic import CreateView + +class SignupView(CreateView): + template_name = 'registration/signup.html' + form_class = UserCreationForm + + def get_success_url(self): + return reverse("login") +``` + +```html + +{% extends "base.html" %} {% block content %} + +{% endblock content %} +``` + +```python +# Add a url to reach that view +from posts.views import SignupView + +path('signup/', SignupView.as_view(), name='signup') +``` + +```python +# Optional: Customize the UserCreationForm +# (forms.py) +from django.contrib.auth import get_user_model +from django.contrib.auth.forms import UserCreationForm + +User = get_user_model() +class CustomUserCreationForm(UserCreattionForm): + class Meta: + model = User + fields = ['username'] + fields_classes = {'username': UsernameField} +``` + +#### Optional pre-created Authentication routes + +```python +# urls.py +urlpatterns += path('', include('django.contrib.auth.urls')) +# /login, /lougout, /signup, etc. +``` + +#### Template Authentication helpers + +```html + +Login +Signup +Logout + + +{% if request.user.is_authenticated %} Logged in as: {{ request.user.username }} +{% endif %} +``` + +#### Authorization: LoginRequiredMixin and login_required + +```python +from django.contrib.auth.mixins import LoginRequiredMixin + +# Restrict views to auth user only (views.py) +class PostsCreateView(LoginRequiredMixin, generic.CreateView): + ... + ... + + +from django.contrib.auth.decorators import login_required + +@login_required(login_url='/login') +def search_page(request): + ... + ... +``` + +#### Manual Authentication , Login and Logout + +```python +from django.contrib.auth import authenticate, login + +def login_page(request): + if request.method == "POST": + username = request.POST.get("username") + password = request.POST.get("password") + user = authenticate(request, username=username, password=password) + if user is not None: + login(request, user) + return redirect("index") + +return render(request, "registration/login.html", {}) + + +def logout_page(request): + logout(request) + return redirect("index") +``` + +#### User Change password + +```python +# set_password will hash the password +user.set_password('raw password') +``` + +## Create Custom Accounts Model + +```python +~$ python manage.py startapp accounts +``` + +```python +# Add accounts app to settings.py +INSTALLED_APPS = [ … , + 'accounts.apps.AccountsConfig', + ] +. +. +. +AUTH_USER_MODEL = 'accounts.User' +``` + +```python +# accounts/models.py +from django.db import models +from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, PermissionsMixin + +class UserManager(BaseUserManager): + def create_user(self, username, email, password=None, **extra_fields): + if not username: + raise ValueError('Users must have an username') + if not email: + raise ValueError('Users must have an email') + + user = self.model(email=email, **extra_fields) + user.set_password(password) + user.save(using=self._db) + return user + + def create_superuser(self, username, email, password=None, **extra_fields): + extra_fields.setdefault('is_staff', True) + extra_fields.setdefault('is_superuser', True) + extra_fields.setdefault('is_active', True) + + user = self.create_user(username, email, password=password, **extra_fields) + user.save(using=self._db) + return user + + +class User(AbstractBaseUser, PermissionsMixin): + username = models.CharField(verbose_name='Username', max_length=255, unique=True) + email = models.EmailField(verbose_name='email', max_length=255, unique=True) + phone = models.BigIntegerField(verbose_name='Phone Number', unique=True, blank=True, null=True) + is_active = models.BooleanField(default=True, verbose_name="is_active") + is_staff = models.BooleanField(default=False, verbose_name="is_staff") + is_superuser = models.BooleanField(default=False, verbose_name="is_superuser") + + objects = UserManager() + + # We can use any field for username + USERNAME_FIELD = 'username' # or 'email' or 'phone' + REQUIRED_FIELDS = ['username', 'email'] + + def __str__(self): + return self.username + + class Meta: + verbose_name = "User" + verbose_name_plural = "Users" +``` + +```python +# accounts/forms.py +from django import forms +from django.contrib.auth.forms import ReadOnlyPasswordHashField +from django.core.exceptions import ValidationError +from accounts.models import User +from django.utils.translation import gettext_lazy as _ + + +class UserCreationForm(forms.ModelForm): + password1 = forms.CharField(label='Password', widget=forms.PasswordInput) + password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput) + + class Meta: + model = User + fields = ('username', 'email', 'phone', 'is_active', 'is_staff') + + def clean_password2(self): + password1 = self.cleaned_data.get("password1") + password2 = self.cleaned_data.get("password2") + if password1 and password2 and password1 != password2: + raise ValidationError("Passwords don't match") + return password2 + + def save(self, commit=True): + user = super().save(commit=False) + user.set_password(self.cleaned_data["password1"]) + if commit: + user.save() + return user + + +class UserChangeForm(forms.ModelForm): + password = ReadOnlyPasswordHashField() + + class Meta: + model = User + fields = ('username', 'email', 'phone', 'is_active', 'is_staff') + + def clean_password(self): + return self.initial["password"] + + +class LoginForm(forms.Form): + email = forms.CharField( + widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Email'}), label='Email') + password = forms.CharField( + widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password'}),label='Password') + + +class RegisterForm(forms.ModelForm): + password1 = forms.CharField(label='Password', widget=forms.PasswordInput( + attrs={'class': 'form-control'})) + password2 = forms.CharField(label='Password confirmation', + widget=forms.PasswordInput(attrs={'class': 'form-control'})) + + class Meta: + model = User + fields = ('username', 'email', 'phone') + + widgets = { # Optional + 'username': forms.TextInput(attrs={'class': 'form-control'}), + 'email': forms.EmailInput(attrs={'class': 'form-control'}), + 'phone': forms.NumberInput( + attrs={'class': 'form-control', 'type': 'tel', 'maxlength': '11', + 'minlength': '11', 'onkeypress': 'return isNumber(event)', 'required': 'false'})} + + def clean_password2(self): + password1 = self.cleaned_data.get("password1") + password2 = self.cleaned_data.get("password2") + if password1 and password2 and password1 != password2: + raise ValidationError("Passwords don't match") + else: + return password2 + + def save(self, commit=True): + user = super().save(commit=False) + user.set_password(self.cleaned_data["password1"]) + if commit: + user.save() + return user + +class EditProfileForm(forms.ModelForm): + class Meta: + model = User + fields = ('username', 'email', 'phone') + + +class ChangePassword(forms.Form): + password1 = forms.CharField(label=_('Password'), widget=forms.PasswordInput( + attrs={'class': 'form-control', 'placeholder': 'Password'})) + password2 = forms.CharField(label=_('Password confirmation'), + widget=forms.PasswordInput( + attrs={'class': 'form-control', 'placeholder': 'Re-Enter Password'})) + + def clean_password2(self): + password1 = self.cleaned_data.get("password1") + password2 = self.cleaned_data.get("password2") + if password1 and password2 and password1 != password2: + raise ValidationError("Passwords don't match") + else: + return password2 +``` + +```python +# accounts/admin.py +from django import forms +from django.contrib import admin +from django.contrib.auth.admin import UserAdmin as BaseUserAdmin +from django.contrib.auth.forms import ReadOnlyPasswordHashField +from django.core.exceptions import ValidationError +from django.contrib.auth.models import Group +from accounts.models import User + + +class UserCreationForm(forms.ModelForm): + password1 = forms.CharField(label='Password', widget=forms.PasswordInput) + password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput) + + class Meta: + model = User + fields = ('username', 'email', 'phone') + + def clean_password2(self): + # Check that the two password entries match + password1 = self.cleaned_data.get("password1") + password2 = self.cleaned_data.get("password2") + if password1 and password2 and password1 != password2: + raise ValidationError("Passwords don't match") + return password2 + + def save(self, commit=True): + user = super().save(commit=False) + user.set_password(self.cleaned_data["password1"]) + if commit: + user.save() + return user + + +class UserChangeForm(forms.ModelForm): + password = ReadOnlyPasswordHashField() + + class Meta: + model = User + fields = ('username', 'email', 'phone', 'password', 'is_active', 'is_staff') + + +class UserAdmin(BaseUserAdmin): + form = UserChangeForm + add_form = UserCreationForm + list_display = ('username', 'email', 'is_active', 'is_staff', 'is_superuser') + list_editable = ('is_staff', 'is_active') + list_filter = ('is_staff', 'groups') + fieldsets = ( + (None, {'fields': ( 'username', 'email', 'phone', 'password')}), + ('Permissions', {'fields': ('is_staff',)}), + ('Group Permissions', { + 'fields': ('is_active', 'is_superuser', 'groups', 'user_permissions'), + }) + ) + add_fieldsets = ( + (None, { + 'classes': ('wide',), + 'fields': ('username', 'email', 'phone', 'password1', 'password2'), + }), + ('Group Permissions', { + 'fields': ('is_active', 'is_superuser', 'groups', 'user_permissions'), + }) + ) + search_fields = ('username', 'email', 'phone') + ordering = ('username', 'email', 'phone') + filter_horizontal = ('groups', 'user_permissions',) + + +admin.site.register(User, UserAdmin) +# unregister the Group model from admin. +# admin.site.unregister(Group) +``` + +```python +# accounts/urls.py +from django.urls import path +from accounts import views + +app_name = 'accounts' +urlpatterns = [ + path('login/', views.userLogin, name='login'), + path('register/', views.userRegister, name='register'), + path('logout/', views.LogoutPage, name='logout') +] +``` + +```python +# accounts/views.py +from django.shortcuts import render, redirect +from django.contrib.auth import login, logout, authenticate +from django.contrib.auth.decorators import login_required +from django.utils.translation import gettext_lazy as _ +from accounts.forms import LoginForm, RegisterForm +from django.contrib import messages +from accounts.models import User + + +def userRegister(request): + form = RegisterForm() + if request.method == 'POST': + form = RegisterForm(request.POST) + if form.is_valid(): + cd = form.cleaned_data + if not User.objects.filter(email=cd['username']).exists(): + if not User.objects.filter(email=cd['email']).exists(): + user = User.objects.create_user( + username=cd['username'], phone=cd['phone'], email=cd['email'], password=cd['password1']) + user.save() + login(request, user) + messages.success(request, _("You successfully registered a user"), extra_tags="success") + return redirect('app_name:home') + else: + messages.error(request, _("This Email is exists"), extra_tags="warning") + else: + messages.error(request, _("This Username is exists"), extra_tags="warning") + else: + import json + er = json.loads(form.errors.as_json()) + for e in er: + messages.error(request, er[e][0]['message'], 'warning') + return render(request, 'accounts/register.html', {'form': form}) + + +def userLogin(request): + if not request.user.is_active: + if request.method == 'POST': + form = LoginForm(request.POST) + if form.is_valid(): + cd = form.cleaned_data + if User.objects.filter(username=cd['username']).exists(): + user = authenticate(request, username=cd['username'], password=cd['password']) + if user is not None: + login(request, user) + messages.success(request, _("logged in successfully"), extra_tags="success") + return redirect('app_name:home') + else: + messages.error(request, _("your username Or Password is wrong"), extra_tags="warning") + else: + messages.error(request, _("No account created with this username"), extra_tags="warning") + return redirect('accounts:login') + else: + messages.error(request, _("Please enter your information correctly"), extra_tags="warning") + else: + form = LoginForm() + return render(request, 'accounts/login.html', {'form': form}) + else: + return redirect('app_name:home') + + +@login_required() +def LogoutPage(request): + logout(request) + messages.success(request, _("You Logged Out successfully"), extra_tags="success") + return redirect('app_name:home') +``` + +## Send Email + +```python +# settings.py +EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" + +# Send email function +from django.core.email import send_mail + +send_mail( + subject = "A new post has been created", + message = "Go to the web site to see the detail", + from_email = "test@test.com", + recipient_list = ["test2@text.com"] +) +``` + +## Signals + +```python +# models.py +from django.db.models.signals import post_save, pre_save + +def post_user_created_signal(sender, instance, created, **kwargs): + if created: + UserProfile.objects.create(user=instance) + +# Launch the post_user_created_signal method if User model is save +post_save.connect(post_user_created_signal, sender=User) +``` + +## Seed + +```python +from app_name.models import Product, Category +from django.shortcuts import HttpResponse +from faker import Faker + + +def seed(request): + Product.objects.all().delete() + Category.objects.all().delete() + + category = Category() + category.name = "Sports" + category.save() + + category = Category() + category.name = "Home" + category.save() + + fake = Faker() + for _ in range(100): + product = Product() + product.name = fake.unique.word() + product.short_description = fake.sentence() + product.main_picture = fake.image_url() + product.price = fake.random_digit() * 10 + product.category = Category.objects.order_by('?').first() + product.save() + + return HttpResponse('Seeded') +``` + +## Environment Variables + +### .env key/value file + +```python +$ pip install python-decouple +``` + +Create a file name '.env' in the root folder of your project + +```python +SECRET_KEY = 'your secret key' +ALLOWED_HOST = 127.0.0.1 +``` + +In settings.py change security related settings to point to the .env file + +```python +from decouple import config + +SECRET_KEY = config('SECRET_KEY') +ALLOWED_HOST = config('ALLOWED_HOST') +``` + +## Asynchronous Tasks + +### Django Celery Redis + +Celery is a distributed task queue that can collect, record, schedule, and perform tasks outside of your main program. + +#### Step 1: Install Celery Using pip + +```python +~$ pip install celery # pip install celery[redis] +``` + +#### Step 2. Add celery.py File in Your Project Module + +```python +# your_project/celery.py +import os +from celery import Celery + +os.environ.setdefault('DJANGO_SETTINGS_MODULE','your_project_name.settings') +app = Celery('your_project_name') +app.config_from_object('django.conf:settings', namespace='CELERY') +app.autodiscover_tasks() + +@app.task(bind=True) +def debug_task(self): + print(f'Request: {self.request!r}') +``` + +#### Step 3: Import the Celery App to Django + +To ensure that the Celery app is loaded when Django starts, add the following code into the `__init__.py` file +that sits on the project module beside on settings.py file. + +```python +# your_project/__init__.py +from .celery import app as celery_app + +__all__ = ('celery_app',) +``` + +#### Step 4: Download and Run Redis as a Celery ‘broker’ + +```python +~$ redis-server +``` + +You can test that Redis is working properly by typing this into your terminal: + +```python +~$ redis-cli ping +``` + +Redis should reply with PONG - try it! + +#### Step 5: Add Redis as a Dependency in the Django Project: + +```python +~$ pip install redis +``` + +#### Step 6: Celery Stuff Configure to the Django Settings File + +Once Redis is up, add the following code to your settings.py file and use celery-result + +```python +~$ pip install django-celery-results +``` + +This extension enables you to store Celery task results using the Django ORM.Welcome, <%= username %>!
@@ -159,45 +161,38 @@ Docs {.cols-3} <% } %> ``` - ### Using loops + + ```html -<% if (userLoggedIn) { %> -Welcome, <%= username %>!
-<% } else { %> -Please log in.
-<% } %> +