+ The screenshots and descriptions in this document are based on the latest version of Koel at the time of writing.
+ As Koel is an ever-evolving project, the actual UI may differ slightly in newer versions.
+
+
+## More
+
+Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata).
diff --git a/docs/assets/icons/bolt.svg b/docs/assets/icons/bolt.svg
new file mode 100644
index 00000000..02994c20
--- /dev/null
+++ b/docs/assets/icons/bolt.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/icons/expand.svg b/docs/assets/icons/expand.svg
new file mode 100644
index 00000000..d35c9172
--- /dev/null
+++ b/docs/assets/icons/expand.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/icons/filter.svg b/docs/assets/icons/filter.svg
new file mode 100644
index 00000000..1e41b904
--- /dev/null
+++ b/docs/assets/icons/filter.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/icons/heart.svg b/docs/assets/icons/heart.svg
new file mode 100644
index 00000000..e6cdb28e
--- /dev/null
+++ b/docs/assets/icons/heart.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/icons/info.svg b/docs/assets/icons/info.svg
new file mode 100644
index 00000000..c6f603b8
--- /dev/null
+++ b/docs/assets/icons/info.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/icons/plus.svg b/docs/assets/icons/plus.svg
new file mode 100644
index 00000000..26a5a9b0
--- /dev/null
+++ b/docs/assets/icons/plus.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/icons/repeat.svg b/docs/assets/icons/repeat.svg
new file mode 100644
index 00000000..cf2d773a
--- /dev/null
+++ b/docs/assets/icons/repeat.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/icons/shuffle.svg b/docs/assets/icons/shuffle.svg
new file mode 100644
index 00000000..8462c9af
--- /dev/null
+++ b/docs/assets/icons/shuffle.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/icons/sliders.svg b/docs/assets/icons/sliders.svg
new file mode 100644
index 00000000..ae88d465
--- /dev/null
+++ b/docs/assets/icons/sliders.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/icons/volume.svg b/docs/assets/icons/volume.svg
new file mode 100644
index 00000000..d1cd0459
--- /dev/null
+++ b/docs/assets/icons/volume.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/img/app-store.webp b/docs/assets/img/app-store.webp
new file mode 100644
index 00000000..3f0738ee
Binary files /dev/null and b/docs/assets/img/app-store.webp differ
diff --git a/docs/assets/img/google-play.webp b/docs/assets/img/google-play.webp
new file mode 100644
index 00000000..2bf78d87
Binary files /dev/null and b/docs/assets/img/google-play.webp differ
diff --git a/docs/assets/img/home.webp b/docs/assets/img/home.webp
new file mode 100644
index 00000000..a25f7c42
Binary files /dev/null and b/docs/assets/img/home.webp differ
diff --git a/docs/assets/img/interface/albums.webp b/docs/assets/img/interface/albums.webp
new file mode 100644
index 00000000..ad707af7
Binary files /dev/null and b/docs/assets/img/interface/albums.webp differ
diff --git a/docs/assets/img/interface/all-songs.webp b/docs/assets/img/interface/all-songs.webp
new file mode 100644
index 00000000..4eb94030
Binary files /dev/null and b/docs/assets/img/interface/all-songs.webp differ
diff --git a/docs/assets/img/interface/artists.webp b/docs/assets/img/interface/artists.webp
new file mode 100644
index 00000000..901cc949
Binary files /dev/null and b/docs/assets/img/interface/artists.webp differ
diff --git a/docs/assets/img/interface/edit-song.webp b/docs/assets/img/interface/edit-song.webp
new file mode 100644
index 00000000..0ff0b8d5
Binary files /dev/null and b/docs/assets/img/interface/edit-song.webp differ
diff --git a/docs/assets/img/interface/footer.webp b/docs/assets/img/interface/footer.webp
new file mode 100644
index 00000000..92cf1e71
Binary files /dev/null and b/docs/assets/img/interface/footer.webp differ
diff --git a/docs/assets/img/interface/genres.webp b/docs/assets/img/interface/genres.webp
new file mode 100644
index 00000000..17c02df8
Binary files /dev/null and b/docs/assets/img/interface/genres.webp differ
diff --git a/docs/assets/img/interface/new-smart-playlist.webp b/docs/assets/img/interface/new-smart-playlist.webp
new file mode 100644
index 00000000..bbe4bb7d
Binary files /dev/null and b/docs/assets/img/interface/new-smart-playlist.webp differ
diff --git a/docs/assets/img/mobile/artists.webp b/docs/assets/img/mobile/artists.webp
new file mode 100644
index 00000000..64342adb
Binary files /dev/null and b/docs/assets/img/mobile/artists.webp differ
diff --git a/docs/assets/img/mobile/downloaded.webp b/docs/assets/img/mobile/downloaded.webp
new file mode 100644
index 00000000..ebeab73e
Binary files /dev/null and b/docs/assets/img/mobile/downloaded.webp differ
diff --git a/docs/assets/img/mobile/home.webp b/docs/assets/img/mobile/home.webp
new file mode 100644
index 00000000..c568988e
Binary files /dev/null and b/docs/assets/img/mobile/home.webp differ
diff --git a/docs/assets/img/mobile/now-playing.webp b/docs/assets/img/mobile/now-playing.webp
new file mode 100644
index 00000000..cfd2d3a0
Binary files /dev/null and b/docs/assets/img/mobile/now-playing.webp differ
diff --git a/docs/assets/img/plus/about-plus.webp b/docs/assets/img/plus/about-plus.webp
new file mode 100644
index 00000000..48746963
Binary files /dev/null and b/docs/assets/img/plus/about-plus.webp differ
diff --git a/docs/assets/img/plus/collab.webp b/docs/assets/img/plus/collab.webp
new file mode 100644
index 00000000..9dd8b2e9
Binary files /dev/null and b/docs/assets/img/plus/collab.webp differ
diff --git a/docs/assets/img/plus/dialog-key.webp b/docs/assets/img/plus/dialog-key.webp
new file mode 100644
index 00000000..354b0143
Binary files /dev/null and b/docs/assets/img/plus/dialog-key.webp differ
diff --git a/docs/assets/img/plus/dialog.webp b/docs/assets/img/plus/dialog.webp
new file mode 100644
index 00000000..246f9996
Binary files /dev/null and b/docs/assets/img/plus/dialog.webp differ
diff --git a/docs/assets/img/plus/storage/do-bucket-settings.webp b/docs/assets/img/plus/storage/do-bucket-settings.webp
new file mode 100644
index 00000000..6a9a1f07
Binary files /dev/null and b/docs/assets/img/plus/storage/do-bucket-settings.webp differ
diff --git a/docs/assets/img/plus/storage/do-create-bucket.webp b/docs/assets/img/plus/storage/do-create-bucket.webp
new file mode 100644
index 00000000..dd6ce32b
Binary files /dev/null and b/docs/assets/img/plus/storage/do-create-bucket.webp differ
diff --git a/docs/assets/img/plus/storage/do-keys.webp b/docs/assets/img/plus/storage/do-keys.webp
new file mode 100644
index 00000000..60ede049
Binary files /dev/null and b/docs/assets/img/plus/storage/do-keys.webp differ
diff --git a/docs/assets/img/plus/storage/dropbox-app-permissions.webp b/docs/assets/img/plus/storage/dropbox-app-permissions.webp
new file mode 100644
index 00000000..9936aa4d
Binary files /dev/null and b/docs/assets/img/plus/storage/dropbox-app-permissions.webp differ
diff --git a/docs/assets/img/plus/storage/dropbox-create-app.webp b/docs/assets/img/plus/storage/dropbox-create-app.webp
new file mode 100644
index 00000000..deaa2b1c
Binary files /dev/null and b/docs/assets/img/plus/storage/dropbox-create-app.webp differ
diff --git a/docs/assets/img/plus/storage/r2-bucket-settings.webp b/docs/assets/img/plus/storage/r2-bucket-settings.webp
new file mode 100644
index 00000000..18e5c774
Binary files /dev/null and b/docs/assets/img/plus/storage/r2-bucket-settings.webp differ
diff --git a/docs/assets/img/plus/storage/r2-create-bucket.webp b/docs/assets/img/plus/storage/r2-create-bucket.webp
new file mode 100644
index 00000000..1303490a
Binary files /dev/null and b/docs/assets/img/plus/storage/r2-create-bucket.webp differ
diff --git a/docs/assets/img/plus/upgrade-button.webp b/docs/assets/img/plus/upgrade-button.webp
new file mode 100644
index 00000000..1cf12bf5
Binary files /dev/null and b/docs/assets/img/plus/upgrade-button.webp differ
diff --git a/docs/assets/img/remote.jpg b/docs/assets/img/remote.jpg
new file mode 100644
index 00000000..552891fe
Binary files /dev/null and b/docs/assets/img/remote.jpg differ
diff --git a/docs/assets/img/s3-flow.svg b/docs/assets/img/s3-flow.svg
new file mode 100644
index 00000000..881fb208
--- /dev/null
+++ b/docs/assets/img/s3-flow.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/docs/assets/img/settings.webp b/docs/assets/img/settings.webp
new file mode 100644
index 00000000..7a1cd75a
Binary files /dev/null and b/docs/assets/img/settings.webp differ
diff --git a/docs/assets/img/sponsors/do.svg b/docs/assets/img/sponsors/do.svg
new file mode 100755
index 00000000..8b603bee
--- /dev/null
+++ b/docs/assets/img/sponsors/do.svg
@@ -0,0 +1,71 @@
+
+
+
diff --git a/docs/assets/img/sponsors/keycdn.svg b/docs/assets/img/sponsors/keycdn.svg
new file mode 100644
index 00000000..68cdf3cb
--- /dev/null
+++ b/docs/assets/img/sponsors/keycdn.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/img/sponsors/render.svg b/docs/assets/img/sponsors/render.svg
new file mode 100644
index 00000000..853c6f1e
--- /dev/null
+++ b/docs/assets/img/sponsors/render.svg
@@ -0,0 +1,60 @@
+
+
+
diff --git a/docs/assets/img/sponsors/what-the-diff.svg b/docs/assets/img/sponsors/what-the-diff.svg
new file mode 100644
index 00000000..b35ea02f
--- /dev/null
+++ b/docs/assets/img/sponsors/what-the-diff.svg
@@ -0,0 +1,16 @@
+
+
diff --git a/docs/assets/img/theme-classic.webp b/docs/assets/img/theme-classic.webp
new file mode 100644
index 00000000..3e9bad84
Binary files /dev/null and b/docs/assets/img/theme-classic.webp differ
diff --git a/docs/assets/img/theme-dawn.webp b/docs/assets/img/theme-dawn.webp
new file mode 100644
index 00000000..453b6270
Binary files /dev/null and b/docs/assets/img/theme-dawn.webp differ
diff --git a/docs/assets/img/theme-jungle.webp b/docs/assets/img/theme-jungle.webp
new file mode 100644
index 00000000..371b1aa4
Binary files /dev/null and b/docs/assets/img/theme-jungle.webp differ
diff --git a/docs/assets/img/theme-rose.webp b/docs/assets/img/theme-rose.webp
new file mode 100644
index 00000000..e2f5168b
Binary files /dev/null and b/docs/assets/img/theme-rose.webp differ
diff --git a/docs/assets/img/themes.webp b/docs/assets/img/themes.webp
new file mode 100644
index 00000000..35f02fd3
Binary files /dev/null and b/docs/assets/img/themes.webp differ
diff --git a/docs/assets/videos/search.mp4 b/docs/assets/videos/search.mp4
new file mode 100644
index 00000000..bbb83340
Binary files /dev/null and b/docs/assets/videos/search.mp4 differ
diff --git a/docs/assets/videos/search.webm b/docs/assets/videos/search.webm
new file mode 100644
index 00000000..1a6c629e
Binary files /dev/null and b/docs/assets/videos/search.webm differ
diff --git a/docs/cli-commands.md b/docs/cli-commands.md
new file mode 100644
index 00000000..f26bc5dd
--- /dev/null
+++ b/docs/cli-commands.md
@@ -0,0 +1,202 @@
+---
+outline: [2, 3]
+---
+
+# CLI Commands
+
+Koel comes with a set of handy CLI commands to help you manage your installation.
+These commands are available via Laravel’s `artisan` command line interface.
+
+You can run `php artisan list` from your Koel installation directory and pipe the output to `grep` to filter out those under the `koel` namespace:
+
+```bash
+php artisan list | grep koel
+ koel
+ koel:admin:change-password Change a user's password
+ koel:init Install or upgrade Koel
+ koel:license:activate Activate a Koel Plus license
+ koel:license:deactivate Deactivate the currently active Koel Plus license
+ koel:license:status Check the current Koel Plus license status
+ koel:prune Remove empty artists and albums
+ ...
+```
+
+In order to get help on a specific command, run `php artisan -h`.
+
+## Available Commands
+
+### `koel:admin:change-password`
+
+Change a user's password.
+
+#### Usage
+
+```bash
+php artisan koel:admin:change-password []
+```
+
+#### Arguments
+| Name | Description |
+|---------|--------------------------------------------------------------|
+| `email` | The user's email. If empty, will get the default admin user. |
+
+### `koel:init`
+
+Install or upgrade Koel.
+
+Usage
+
+```bash
+php artisan koel:init [options]
+```
+
+#### Options
+| Name | Description |
+|---------------|---------------------------------|
+| `--no-assets` | Do not compile front-end assets |
+
+### `koel:license:activate`
+
+Activate a Koel Plus license.
+
+#### Usage
+
+```bash
+php artisan koel:license:activate
+```
+
+#### Arguments
+
+| Name | Description |
+|-------|------------------------------|
+| `key` | The license key to activate. |
+
+### `koel:license:deactivate`
+
+Deactivate the currently active Koel Plus license.
+
+#### Usage
+
+```bash
+php artisan koel:license:deactivate
+```
+
+### `koel:license:status`
+
+Check the current Koel Plus license status.
+
+#### Usage
+
+```bash
+php artisan koel:license:status
+```
+
+### `koel:prune`
+
+Remove empty artists and albums.
+
+#### Usage
+
+```bash
+php artisan koel:prune
+```
+
+### `koel:scan`
+
+Scan for songs in the configured directory.
+
+#### Usage
+
+```bash
+php artisan koel:scan [options]
+php artisan koel:sync [options] # Alias, deprecated
+```
+
+#### Options:
+
+| Name | Description |
+|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `O`, `--owner=` | The ID of the user who should own the newly scanned songs. Defaults to the first admin user. |
+| `P`, `--private` | Whether to make the newly scanned songs private to the user. |
+| `I`, `--ignore=` | The comma-separated tags to ignore (exclude) from scanning. Valid tags are `title`, `album`,`artist`, `albumartist`, `track`, `disc`, `year`, `genre`, `lyrics`, and `cover`. |
+| `F`, `--force` | Force re-scanning even unchanged files. |
+
+### `koel:search:import`
+
+Import all searchable entities with Scout. See [Instant Search](./usage/search) for more information.
+
+#### Usage
+
+```bash
+php artisan koel:search:import
+```
+
+### `koel:storage`
+
+Set up and configure Koel’s storage.
+
+#### Usage
+
+```bash
+php artisan koel:storage
+```
+
+### `koel:storage:dropbox`
+
+Set up Dropbox as the storage driver for Koel.
+
+#### Usage
+
+```bash
+php artisan koel:storage:dropbox
+```
+
+### `koel:storage:local`
+
+Set up the local storage for Koel. A "local storage" is simply a directory on the server where Koel is installed.
+
+#### Usage
+
+```bash
+php artisan koel:storage:local
+```
+
+### `koel:storage:s3`
+
+Set up Amazon S3 or a compatible service (DigitalOcean Spaces, Cloudflare R2, etc.) as the storage driver for Koel.
+
+#### Usage
+
+```bash
+php artisan koel:storage:s3
+```
+
+:::tip
+To set up the storage driver for Koel, simply use `koel:storage`. Internally, it calls `koel:storage:local`, `koel:storage:s3`, or `koel:storage:dropbox` based on your input.
+:::
+
+### `koel:tags:collect`
+
+Collect additional tags from existing songs. This is a legacy command and is no longer needed for new installations.
+
+#### Usage
+
+```bash
+php artisan koel:tags:collect
+```
+
+## Command Scheduling
+
+Some of the commands, such as `koel:scan` and `koel:prune`, can be scheduled to run at regular intervals.
+Koel uses Laravel’s built-in scheduler to manage this.
+
+In order to set up the scheduler, you need to add the following cron entry to your server:
+
+```bash
+* * * * * cd /path-to-koel-installation && php artisan schedule:run >> /dev/null 2>&1
+```
+
+This will run the scheduler every minute, which will then run any scheduled commands as needed.
+By default, `koel:scan` and `koel:prune` are set to run every day at midnight.
+
+Though you can still manually set up cron jobs for individual commands, the scheduler is the recommended approach to command scheduling in Koel, as it will automatically cover any commands that may be added in the future.
diff --git a/docs/config.ts b/docs/config.ts
new file mode 100644
index 00000000..fbcf42e5
--- /dev/null
+++ b/docs/config.ts
@@ -0,0 +1,9 @@
+// This is the configuration file for the application.
+// For VitePress config (themeConfig), refer to .vitepress/config.mts.
+
+export default {
+ plus: {
+ price: '€29.99',
+ purchaseUrl: 'https://store.koel.dev/checkout/buy/58e8adbc-b1aa-43f9-b768-a52d1d8e6a40?media=0&logo=0&desc=0',
+ }
+}
diff --git a/docs/development.md b/docs/development.md
new file mode 100644
index 00000000..0ec276f0
--- /dev/null
+++ b/docs/development.md
@@ -0,0 +1,50 @@
+# Local Development
+
+Koel is built with Laravel and Vue.js, and as such, it requires a PHP environment to run.
+There are multiple ways to set up a PHP development environment, but if you're on macOS,
+the easiest way is probably to use [Laravel Herd](https://herd.laravel.com/).
+You will also need [Node.js](https://nodejs.org/) and [Yarn](https://yarnpkg.com/) to build the client application.
+For more requirements, refer to the [Requirements section](./guide/getting-started#requirements).
+
+### Running the Local Webserver
+
+Start both the PHP server and the client application in one go with `yarn dev`, which uses [`start-server-and-test`](https://github.com/bahmutov/start-server-and-test) to manage both [vite](https://vitest.dev/) and Laravel:
+
+```bash
+yarn dev
+ vite v2.9.13 dev server running at:
+
+ > Local: http://localhost:3000/
+ > Network: use `--host` to expose
+
+ ready in 761ms.
+
+ Laravel v9.22.1
+
+ > APP_URL: http://localhost:8000
+```
+
+A development version of Koel should now be available at `http://localhost:8000` with full HMR support.
+
+### Testing, Linting, Static Analysis, etc.
+
+```bash
+# PHP-related code quality tasks
+# Basically, take a look at the "scripts" section in composer.json
+composer test # Run the PHP test suite
+composer cs # Run code style checker
+composer cs:fix # Run code style fixer
+composer analyze # Run PHP static analysis
+
+yarn build # Build a production version of the client application
+
+# Client code quality tasks
+# These commands need to be run from within the submodule (resources/assets)
+yarn test # Unit testing
+yarn lint # Lint
+```
+
+### Ask for Help
+
+If you're stuck, the [issue page](https://github.com/koel/koel/issues) on GitHub is a good place to ask for help.
+
diff --git a/docs/guide/getting-started.md b/docs/guide/getting-started.md
new file mode 100644
index 00000000..c2f753d4
--- /dev/null
+++ b/docs/guide/getting-started.md
@@ -0,0 +1,89 @@
+# Getting Started
+
+## Requirements
+
+Koel consists of two parts: the server and the client. The server is a Laravel application acting as the API, and the client is a Vue.js application responsible for the user interface.
+The requirements for each part are as follows:
+
+### Server
+
+* [All requirements by Laravel](https://laravel.com/docs/10.x/deployment#server-requirements) – PHP >= 8.1 with required extensions
+* Any database supported by Laravel – MySQL, MariaDB, PostgreSQL, or SQLite
+* If you're [building Koel from source](#building-from-source), make sure to have [Composer](https://getcomposer.org/), Git, and Node.js >= 14 with [Yarn](https://yarnpkg.com).
+
+### Client
+
+* Koel has been tested on Chrome 47, Firefox 42, Safari 8, Opera 34, and Edge, but having the latest version is always recommended.
+
+## Installation
+
+There are three methods to install and start using Koel:
+
+### Using a Pre-Compiled Archive
+
+Koel supports installing from a pre-compiled archive, which eliminates the need of manually compiling the front-end assets.
+
+First, go to the [Releases page](https://github.com/koel/koel/releases) on GitHub, download either the `.tar.gz` or `.zip` file found under "Assets," and unzip it into the destination web root directory. From there, run the two following commands:
+
+```bash
+php artisan koel:init --no-assets
+
+# Follow the wizard to populate necessary configurations
+
+php artisan serve
+```
+
+### Building from Source
+
+From your console, run the following commands:
+
+```bash
+cd
+git clone https://github.com/koel/koel.git .
+git checkout latest # Check out the latest version at https://github.com/koel/koel/releases
+composer install
+php artisan koel:init
+
+# Follow the wizard to populate necessary configurations
+
+php artisan serve
+```
+
+In both cases, you should now be able to visit http://localhost:8000 in your browser and start using Koel.
+
+::: warning Use a proper webserver
+http://localhost:8000 is only the _development_ server for Koel (or rather, Laravel).
+For optimal performance, you'll want to set up a production server (Apache, nginx, Caddy etc.) and point it to the `public` directory of Koel.
+Koel provides a sample configuration for nginx in `nginx.conf.example`,
+but the process shouldn't be any different from that of a standard PHP application.
+:::
+
+### Using Docker
+
+Koel has an official Docker image: [koel/docker](https://github.com/koel/docker). Please refer to the repository for detailed instructions and issue reporting.
+
+## Configuration
+
+Koel’s configuration is stored in the `.env` file at the root of the project, which is created during the installation process
+by copying the `.env.example` file and filling it with sensible values.
+You can always modify the values to suit your environment.
+
+### Configure a Mailer
+
+Though Koel can work without a mailer, certain features like "forgot password" and user invitation require a mailer to be set up.
+To determine if that's the case, Koel relies on the `MAIL_MAILER` value in the `.env` file.
+Any non-empty value other than `log` or `array` is considered a proper mailer.
+As such, if you don't need email-required features, you can simply set `MAIL_MAILER` to `log` or `array` and leave the rest of the mailer-related values empty,
+and Koel will know to remove/disable these features.
+
+## Upgrade
+
+:::danger Backup your database
+Remember to always back up your database before upgrading.
+:::
+Check out [Releases](https://github.com/koel/koel/releases) for upgrade guides corresponding to your Koel version and installation method.
+
+## Downgrade
+
+Koel does not provide a built-in downgrade mechanism.
+In the unlikely event that you need to downgrade, simply restore your database from a backup and follow the installation guide for the version you want to downgrade to.
diff --git a/docs/guide/what-is-koel.md b/docs/guide/what-is-koel.md
new file mode 100644
index 00000000..43e1f969
--- /dev/null
+++ b/docs/guide/what-is-koel.md
@@ -0,0 +1,15 @@
+# What is Koel?
+
+![Koel's homepage](../assets/img/home.webp)
+
+A complete music streaming solution that hosts and streams your own music collection, Koel is designed to be:
+
+* **Modern and snappy** – Unlike some of our music, we’re not living in the 90s anymore. Koel looks and functions like a true modern application: clean, gorgeous, and fast. As a matter of fact, it won’t even work on prehistoric browsers.
+* **Easy to set up** – Born from a personal frustration of failing to find something easy to install, Koel is dead-simple to get up and running, utilizing some of the most popular and proven technologies in the web development world: [Laravel](https://laravel.com), [Vue](https://vuejs.org), and [Docker](https://www.docker.com/).
+* **Easy to use** – As Koel’s interface draws inspiration from proven streaming services like Spotify and Apple Music, you will feel right at home where everything is exactly where you’d expect it to be.
+* **Feature-rich** – Apart from the standard functionalities (stream, search, song/album/artist browsing, playlist management, etc.), Koel provides advanced features like smart playlists, equalizer, visualizers, 3rd-service integrations, and many more.
+* **Open source** – Koel’s source code is [available on GitHub](https://github.conm/koel/koel) under the [MIT License](https://opensource.org/license/mit), meaning you can use it for free and even contribute to its development. To help finance the project, you can either purchase [Koel Plus](/plus/what-is-koel-plus), get the [mobile app](/mobile-apps), or [become a sponsor](https://github.com/sponsors/phanan).
+
+:::tip TL;DR
+Koel is a music streaming solution that actually works™.
+:::
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 00000000..3f054808
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,17 @@
+---
+# https://vitepress.dev/reference/default-theme-home-page
+layout: home
+
+hero:
+ name: "Koel"
+ text:
+ tagline: The official documentation for Koel, the music streaming solution that works.
+ actions:
+ - theme: brand
+ text: Getting Started
+ link: /guide/getting-started
+ - theme: alt
+ text: Koel Plus
+ link: /plus/what-is-koel-plus
+---
+
diff --git a/docs/markdown-examples.md b/docs/markdown-examples.md
new file mode 100644
index 00000000..f9258a55
--- /dev/null
+++ b/docs/markdown-examples.md
@@ -0,0 +1,85 @@
+# Markdown Extension Examples
+
+This page demonstrates some of the built-in markdown extensions provided by VitePress.
+
+## Syntax Highlighting
+
+VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
+
+**Input**
+
+````md
+```js{4}
+export default {
+ data () {
+ return {
+ msg: 'Highlighted!'
+ }
+ }
+}
+```
+````
+
+**Output**
+
+```js{4}
+export default {
+ data () {
+ return {
+ msg: 'Highlighted!'
+ }
+ }
+}
+```
+
+## Custom Containers
+
+**Input**
+
+```md
+::: info
+This is an info box.
+:::
+
+::: tip
+This is a tip.
+:::
+
+::: warning
+This is a warning.
+:::
+
+::: danger
+This is a dangerous warning.
+:::
+
+::: details
+This is a details block.
+:::
+```
+
+**Output**
+
+::: info
+This is an info box.
+:::
+
+::: tip
+This is a tip.
+:::
+
+::: warning
+This is a warning.
+:::
+
+::: danger
+This is a dangerous warning.
+:::
+
+::: details
+This is a details block.
+:::
+
+## More
+
+Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).
diff --git a/docs/mobile-apps.md b/docs/mobile-apps.md
new file mode 100644
index 00000000..9572322b
--- /dev/null
+++ b/docs/mobile-apps.md
@@ -0,0 +1,19 @@
+# Mobile Apps
+
+While Koel is accessible on mobile devices through its responsive design, the user experience may not be optimal
+compared to a native app due to inherent limitations of web apps on mobile devices.
+
+For a better mobile experience, it's strongly recommended to use [Koel Player](https://github.com/koel/player),
+the official mobile app for Koel, instead. Written in Flutter, Koel Player is available for both [Android](https://play.google.com/store/apps/details?id=phanan.koel.app) and [iOS](https://apps.apple.com/de/app/koel-player/id1576886982?l=en).
+
+
+
+By purchasing Koel Player, you will also be supporting the continuous development of Koel.
+Of course, you can always compile and install the app yourself, as the source code is licensed under MIT.
+
+
+
+
+
+
+
diff --git a/docs/netlify.toml b/docs/netlify.toml
new file mode 100644
index 00000000..3ae45afa
--- /dev/null
+++ b/docs/netlify.toml
@@ -0,0 +1,5 @@
+[[redirects]]
+ from = "/"
+ to = "/guide/what-is-koel"
+ status = 301
+ force = true
diff --git a/docs/plus/collaboration.md b/docs/plus/collaboration.md
new file mode 100644
index 00000000..cf3737a9
--- /dev/null
+++ b/docs/plus/collaboration.md
@@ -0,0 +1,58 @@
+# Collaboration
+
+One of the distinctive features of Koel Plus is the ability for users to share and collaborate with others.
+This page will talk you through the process of setting song visibility and playlist collaboration.
+
+## Setting Song Visibility
+
+With Koel Plus, there are two different visibility settings for songs: public and private.
+
+* _Private_ songs are only visible to the uploader (the "owner")
+* _Public_ songs are visible to all users (**not** the whole internet!) However, only owner can edit or delete them.
+
+The default visibility for uploaded songs is Private. For other users to be able to see and listen to your music, you need to explicitly mark them as public and vice-versa. This can be done in two ways:
+
+- **On an individual basis**: To mark individual songs as public or private, right-click on the songs to bring up the context menu. From there, you can choose "Mark as Public" or "Mark as Private" depending on the current visibility.
+- **Set default upload visibility**: For all future uploads to be public or private by default, you can toggle the "Make uploaded songs public by default" option in your [Profile & Preferences](../usage/profile-preferences#preferences) page. Note that this only affects future uploads, not existing ones.
+
+### Scanning Music
+
+When you scan for music with the `koel:scan` command, discovered songs will be marked as public and assigned to the first admin user.
+You can change this behavior by passing the `--private` option to the command and/or explicitly specify the owner of the songs with the `--owner` option.
+
+```bash
+php artisan koel:scan --private --owner=2
+```
+
+### Migrating from Community Edition
+
+When you upgrade Koel from a previous, Community, edition to Koel Plus, all existing music will be marked as public and assigned to the first admin user.
+This is to ensure all existing music is still accessible to everyone, and the first admin user has full control over them.
+You can always change the visibility of the songs and/or reassign them to other users as you see fit.
+
+```sql
+--- Mark all songs as private
+UPDATE songs SET is_public = 0;
+
+--- Assign all songs to another user
+UPDATE songs SET user_id = 2;
+```
+
+## Playlist Collaboration
+
+A _collaborative playlist_ allows multiple users to add, remove, and reorder songs in a playlist.
+
+:::tip Songs are marked as public
+When a song is added to a collaborative playlist, it will be marked as public if it's not already.
+In addition, you cannot mark a song as private if it's still part of a collaborative playlist.
+:::
+
+To set up or manage collaboration on a playlist, you need to be the playlist's owner. From the sidebar, right-click on the playlist and choose "Collaborate…" from the context menu.
+The "Playlist Collaboration" modal should appear.
+
+
+
+To invite more collaborators, click the "Invite" button. A link will be generated and copied to your clipboard. Share this link with the users you want to collaborate with. They can then paste the link in their browser to join the playlist.
+
+To remove a collaborator, click the "Remove" button next to their name.
+
diff --git a/docs/plus/purchase-activation.md b/docs/plus/purchase-activation.md
new file mode 100644
index 00000000..33bc69d7
--- /dev/null
+++ b/docs/plus/purchase-activation.md
@@ -0,0 +1,71 @@
+# Purchase & Activation
+
+## Pricing
+
+Koel Plus employs a super simple pricing model: a __one-time__ payment of {{ config.plus.price }}.
+You read that right: no subscription, no recurring payments, no hidden fees, no per- or additional-seat costs — I hate those bullshit as much as you do.
+Pay __once__, and you get all current _and_ future updates at no extra fee, forever.
+
+## Purchase
+
+Click here to purchase Koel Plus.
+
+## Activation
+
+
+
+After purchasing, you'll receive an email with a license key. To activate Koel Plus, you can use either the web interface or the command line.
+
+### Via the Web Interface
+
+1. Log into your Koel installation as an admin and locate the "Upgrade to Plus" button in the bottom-left corner of the screen.
+
+2. Click the button to bring up the "Koel Plus" dialog:
+
+3. Click "I have a license key," enter your key in the input field, and click "Activate."
+
+4. If the key is valid, Koel will display a Success message and reload itself.
+
+### Via the Command Line
+
+From the root of your Koel installation, run:
+
+```bash
+php artisan koel:license:activate YOUR_LICENSE_KEY
+```
+
+If the key is valid, you'll see a Success message.
+
+### Verification
+
+To verify that Koel Plus is activated, reload the web app if you haven't done so.
+Afterward, trigger the About Koel modal by clicking the icon in the bottom-right corner of the screen.
+You should see the information about your Koel Plus license in the modal.
+
+
+
+## Deactivation
+
+If for any reason you need to deactivate Koel Plus, you can do so via the command line:
+
+```bash
+php artisan koel:license:deactivate
+```
+
+Reload Koel, and it will revert to the Community edition. You can re-activate it at any time following the steps above.
+
+
+
+
diff --git a/docs/plus/storage-support.md b/docs/plus/storage-support.md
new file mode 100644
index 00000000..1d0655db
--- /dev/null
+++ b/docs/plus/storage-support.md
@@ -0,0 +1,127 @@
+# Storage Support
+
+In addition to storing your music on the same server as Koel’s installation via the `local` storage driver,
+Koel Plus offers several different file storage options, including Amazon S3, S3-compatible services, Dropbox, and likely more in the future.
+This page will guide you through the process of setting up these storage options.
+
+:::warning Warning
+Though possible, changing storage drivers _after_ you've already stored files is not recommended, as it may break links to your existing media.
+:::
+
+:::tip Service UI may change
+The screenshots and instructions on this page may not be 100% up-to-date as 3rd-party services' UI may change.
+The general idea, however, should remain the same.
+:::
+
+## Amazon S3 and Compatible Services
+
+Since Amazon S3 and S3-compatible services share the same API, you can use the same configuration (`AWS_*`) for both.
+Koel has been tested with Amazon S3, [DigitalOcean Spaces](https://www.digitalocean.com/products/spaces), and [Cloudflare R2](https://www.cloudflare.com/developer-platform/r2/), but it should work with any S3-compatible service given the right configuration.
+
+### Amazon S3
+
+Create a new S3 bucket and obtain your access key ID and secret key from the AWS console. Then, populate these values in your `.env` file:
+
+```
+STORAGE_DRIVER=s3
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+AWS_REGION=
+AWS_ENDPOINT=
+AWS_BUCKET=
+```
+
+After reloading, Koel will start using S3 as its storage. You can now upload your music files to your S3 bucket directly from Koel’s web interface.
+
+In order to use S3 for streaming, you'll also need to set up a cross-origin resource sharing (CORS) configuration for your bucket by going to the Permissions tab. Here's a sample policy that allows streaming from any origin:
+
+```json
+[
+ {
+ "AllowedHeaders": [],
+ "AllowedMethods": [
+ "GET"
+ ],
+ "AllowedOrigins": [
+ "*"
+ ],
+ "ExposeHeaders": []
+ }
+]
+```
+
+### DigitalOcean Spaces
+
+To use [DigitalOcean Spaces](https://www.digitalocean.com/products/spaces), you can follow the same steps as with Amazon S3. Below are some screenshots to help you get started.
+
+Create a DigitalOcean Spaces bucket
+
+DigitalOcean Spaces bucket settings with CORS Configurations
+
+The access key ID and secret key can be generated and obtained via the API -> Space Keys tab in the DigitalOcean control panel:
+
+![DigitalOcean Spaces keys](../assets/img/plus/storage/do-keys.webp)
+
+A sample `.env` configuration for DigitalOcean Spaces may look like this:
+
+```
+STORAGE_DRIVER=s3
+
+AWS_ACCESS_KEY_ID=DO000000000000000000
+AWS_SECRET_ACCESS_KEY=TheSecretKeyObtainedFromDO
+AWS_REGION=fra1
+AWS_ENDPOINT=https://fra1.digitaloceanspaces.com
+AWS_BUCKET=koel
+```
+
+### Cloudflare R2
+
+[Cloudflare R2](https://www.cloudflare.com/developer-platform/r2/) is yet another excellent choice for an S3-compatible service.
+The setup is pretty much similar to the above:
+
+Create a Cloudflare R2 bucket
+
+Cloudflare R2 bucket settings with CORS Policy
+
+A sample `.env` configuration for Cloudflare R2 may look like this:
+
+```
+STORAGE_DRIVER=s3
+
+AWS_ACCESS_KEY_ID=c50000000000000000
+AWS_SECRET_ACCESS_KEY=TheSecretKeyObtainedFromR2
+AWS_REGION=auto # Cloudflare R2 explicitly uses the `auto` region
+AWS_ENDPOINT=https://fa37a667b0038bbb7054133627ce74b4.r2.cloudflarestorage.com
+AWS_BUCKET=koel
+```
+
+## Dropbox
+
+Koel Plus also supports using Dropbox as a storage driver, although the setup is a bit different.
+
+1. First, [create a new Dropbox app](https://www.dropbox.com/developers/apps/create) with the "App folder" access type and set up sufficient permissions to read and write files.
+ Create a Dropbox app
+ Set sufficient app permissions
+2. Under your Dropbox app's Settings tab, make a note of the "App key" and "App secret" values. Now, from the root folder of your Koel installation, run the following command:
+ ```bash
+ php artisan koel:storage:dropbox
+ ```
+ You'll be prompted to enter the "App key" and "App secret" values obtained earlier.
+3. Koel will generate a URL for you to visit and authorize the Dropbox app. Afterward, you'll receive an access code.
+4. Enter the access code back into the command line's prompt. Koel will then finalize the setup automatically and start using Dropbox as its storage.
+
+Now when you upload music files to Koel, they'll be stored in your Dropbox app's folder.
+
+:::warning Two-way sync not supported
+Koel does not support two-way sync with Dropbox — at least not yet. This means manual changes made to your Dropbox folder will not be reflected in Koel.
+:::
+
+
diff --git a/docs/plus/what-is-koel-plus.md b/docs/plus/what-is-koel-plus.md
new file mode 100644
index 00000000..8b26aeda
--- /dev/null
+++ b/docs/plus/what-is-koel-plus.md
@@ -0,0 +1,25 @@
+# What is Koel Plus?
+
+## Introduction
+
+Koel Plus is the premium version of Koel. It offers additional features and enhancements on top of the Community edition, including but not limited to:
+
+- **Multi-library Support**: In Koel Plus, each user has their own library, which they populate by uploading their own music.
+- **Music Sharing**: By default, uploaded music is private to the user who uploaded it. However, users can choose to share their music with others by marking songs as public.
+- **Collaboration**: Users can invite others to [collaborate](./collaboration) on their playlists, allowing them to add, remove, and reorder songs.
+- **Cloud Storage Support**: In addition to local storage, Koel Plus supports cloud storage services like Amazon S3 (or any S3-compatible service) and Dropbox. See [Storage Support](./storage-support) for more information.
+
+Other features are being planned or actively developed, for example:
+
+- **SSO**: Users can log into Koel using their existing credentials from another service like Google or Facebook.
+- **Authorization via Proxy-Authorization Header**: Authorize users via a proxy server, allowing Koel to be used in a corporate environment.
+- **Refined Roles & Permissions**: Create custom roles and assign them to users, controlling what they can and cannot do.
+- **Custom Themes**: Allow users to customize the look and feel of Koel in addition to the built-in themes.
+
+## Do you need Koel Plus?
+Since Koel Plus's flagship feature is multi-library support, it's most useful in a multi-user environment, such as a family or a small organization.
+If you're a single user, you might not need Koel Plus.
+
+However, if you want to host your media files on a cloud storage service like Amazon S3 or Dropbox, you'll need Koel Plus.
+Purchasing Koel Plus is also a good way to support the active development of Koel.
+
diff --git a/docs/public/favicon.png b/docs/public/favicon.png
new file mode 100644
index 00000000..ec15ec25
Binary files /dev/null and b/docs/public/favicon.png differ
diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg
new file mode 100644
index 00000000..a9e067a3
--- /dev/null
+++ b/docs/public/favicon.svg
@@ -0,0 +1,35 @@
+
+
\ No newline at end of file
diff --git a/docs/service-integrations.md b/docs/service-integrations.md
new file mode 100644
index 00000000..cdfbc548
--- /dev/null
+++ b/docs/service-integrations.md
@@ -0,0 +1,32 @@
+# Service Integrations
+
+To further enhance your music experience, Koel supports several 3rd-party service integrations: Last.fm, Spotify, and YouTube.
+
+## Last.fm
+
+Connecting Koel to Last.fm will instruct Koel to retrieve artist and album information from Last.fm as well as support scrobbling.
+To enable the connection:
+
+1. [Create a Last.fm API account](https://www.last.fm/api/account/create). In the **Callback URL** field, fill in `https:///api/lastfm/callback` (though this is not used).
+2. Populate the two variables `LASTFM_API_KEY` and `LASTFM_API_SECRET` in `.env` with the credentials grabbed from step 1. This enables Koel to retrieve media information from Last.fm.
+3. To enable scrobbling, go to `https:///#/profile` and click the **Connect** button under Last.fm Integration. This connection is per-user, i.e. each user can connect their own Last.fm account.
+
+## Spotify
+
+Integration with Spotify allows Koel to fetch more metadata like album arts and artist images. To enable the integration:
+
+1. Register for a developer account and create an app in [Spotify dashboard](https://developer.spotify.com/dashboard/)
+2. Populate `SPOTIFY_CLIENT_ID` and `SPOTIFY_CLIENT_SECRET` in `.env` with the credentials from step 1.
+
+## YouTube
+
+With YouTube integration, whenever a song is played, Koel will search YouTube for related videos and display them in the sidebar for you to watch without leaving Koel.
+The only thing you need to do is fill in `.env` with your `YOUTUBE_API_KEY`, which can be obtained via the following:
+
+1. [Create a new Google Project](https://console.developers.google.com/)
+2. From the project's Dashboard, click “ENABLE API” and make sure “YouTube Data API v3” is enabled
+3. From the project's Credentials, click Create credentials → API Key → Server key
+
+:::tip Limitations
+YouTube integration is always disabled on mobile due to OS restrictions. Also, you interact with the videos via YouTube controls. Koel's equalizer, volume, seeker, play/pause buttons etc. doesn't have effect on the videos.
+:::
diff --git a/docs/usage/artist-album-playlist-arts.md b/docs/usage/artist-album-playlist-arts.md
new file mode 100644
index 00000000..47533ff7
--- /dev/null
+++ b/docs/usage/artist-album-playlist-arts.md
@@ -0,0 +1,11 @@
+# Artist, Album, and Playlist Arts
+
+If [integrated](../service-integrations) with Spotify, Koel will attempt to fetch artists' images and album arts from Spotify
+whenever a song is played.
+
+You can upload custom images for artists, albums, and playlists.
+To do so, drag and drop an image file onto the artist, album, or playlist thumbnail.
+
+If there is no available for artist and album, Koel will use a default image (the Koel bird logo).
+For a playlist, a random "thumbnail stack" will be generated and used based on the content.
+
diff --git a/docs/usage/music-discovery.md b/docs/usage/music-discovery.md
new file mode 100644
index 00000000..dba72d63
--- /dev/null
+++ b/docs/usage/music-discovery.md
@@ -0,0 +1,174 @@
+# Music Discovery
+
+There are several ways for Koel to discover your media files.
+You can manually scan for songs, configure a watcher, host your files with Amazon S3, or upload files directly via the web interface.
+
+## Scan via the Web interface
+
+:::warning Not for large libraries
+Scanning via the web interface is vulnerable to HTTP timeouts, so if you have a decent-sized library, opt for other methods instead.
+:::
+
+Upload your songs into a readable directory on your server – preferably outside your web root dir – and configure Koel to scan and sync it by setting a "media path" under Manage → Settings.
+
+![Settings Screen](../assets/img/settings.webp)
+
+Once set, click the "Scan" button to start the process. Koel will scan the directory and its subdirectories for audio files and add them to the database.
+All popular audio formats (`.mp3`, `.ogg`, `.aac`, `.m4a`, `.opus`, and `.flac`) are supported.
+
+## Scan Using the CLI
+
+You can also scan from the CLI with the artisan `koel:scan` command. This method is faster, without a time or library-size limit, and provides useful feedbacks.
+
+```bash
+php artisan koel:scan
+
+ INFO Scanning /var/www/media
+
+ 1189/1189 [============================] 100%
+
+ INFO Scanning completed!
+
+ ⇂ 1150 new or updated song(s)
+ ⇂ 39 unchanged song(s)
+ ⇂ 0 invalid file(s)
+```
+
+Suffix the command with a `-v` flag for more details e.g. scanning errors.
+
+This command can be added as a cron job, for example to run every midnight:
+
+```bash
+0 0 * * * cd /home/user/webapps/koel/ && /usr/local/bin/php artisan koel:scan >/dev/null 2>&1
+```
+
+A better approach is to use Laravel’s built-in scheduler. See [Command Scheduling](../cli-commands#command-scheduling) for more details.
+
+## Upload via the Web Interface
+You can upload songs directly as an admin by clicking the "Upload" sidebar menu item or just drag and drop files and folders into the web interface.
+Note that if you’re not using a cloud storage (available with Koel Plus), you will need to set the media path first,
+as the files will be uploaded into the `%media_path%/__KOEL__UPLOADS__` directory.
+
+Depending on how big your files are, you may want to set `upload_max_filesize` and `post_max_size` in your `php.ini` correspondingly, or uploading may fail with a `Payload too large` error.
+This applies even if you’re using a cloud storage, as the files will be uploaded to your server first before being sent to the cloud.
+
+## Watch the Media Directory
+
+You can also watch your media directory and trigger _selective_ synchronization every time there's a change to it with the help of `inotifywait`.
+In order to start using the feature, follow these steps:
+
+### 1. Install `inotify` Tools
+
+On CentOS for example, you can run this shell command:
+
+``` bash
+sudo yum --enablerepo=epel -y install inotify-tools
+```
+### 2. Set Up a Watcher Script
+
+Now you need to set up a watcher script to run `inotifywait` and send the output to `koel:scan` artisan command. For example, you can create a sample `watch` file in Koel’s root directory with this content:
+
+``` bash
+#!/bin/bash
+
+MEDIA_PATH=/var/www/media/
+PHP_BIN=/usr/local/bin/php
+
+inotifywait -rme move,close_write,delete --format "%e %w%f" $MEDIA_PATH | while read file; do
+ $PHP_BIN artisan koel:sync "${file}"
+done
+```
+### 3. Run the Watcher in the Background
+
+Following the above example:
+
+``` bash
+chmod +x watch
+./watch
+[Ctrl+z]
+bg
+disown -h
+```
+
+You can now verify that it works by `tail -f storage/logs/laravel.log` while making changes to your media directory, for example by adding or removing applicable files via FTP.
+
+## Integration with AWS Lambda
+
+:::warning Deprecated
+Though still functional, this method is deprecated in favor of configuring S3 as a [cloud storage](../plus/storage-support).
+:::
+
+Starting from version v3.0.0, Koel can work seamlessly with Amazon S3 with the help of the [official Koel-AWS package](https://github.com/koel/koel-aws). This allows you to run Koel in your server and have all media files hosted on S3.
+
+### How It Works
+
+1. You upload media files to your S3 bucket
+2. S3 sends events to a Lambda function
+3. The Lambda function calls Koel’s API to sync the media into Koel’s database
+4. You create a streaming request to Koel
+5. Koel gets the media from S3 and streams it to you
+
+
+
+
+
+### Supports and Requirements
+
+As of current, only `mp3`, `ogg`, `m4a`, and `flac` files are supported.
+
+### Step-by-Step Installation
+
+#### 1. Prepare S3 for Streaming
+
+ 1. Create an IAM user, e.g. `koel-user`
+ 2. Create a bucket, e.g. `koel-bucket`
+ 3. Make sure `koel-user` can read `koel-bucket`'s content. You can simply attach the `AmazonS3ReadOnlyAccess` policy to `koel-user`.
+ 4. Allow CORS on `koel-bucket`
+ ```xml
+
+
+ *
+ GET
+ 3000
+ Authorization
+
+
+ ```
+
+#### 2. Configure Lambda for Syncing
+
+1. Clone Koel-AWS's repository: `git clone https://github.com/phanan/koel-aws`
+2. Install necessary packages: `cd koel-aws && npm install --production`
+3. Copy `.env.example` into `.env` and edit the variables there
+4. Zip the whole directory's content into something like `archive.zip`
+5. In AWS Lambda console, create a Lambda function with the following information:
+ ```
+ Name: koel-lambda
+ Runtime: Node.js
+ Code entry type: Upload a .ZIP file (you'll upload the zip file created in step 4 here)
+ Handler: index.handler
+ Role: S3 execution role (a new window will appear, where you can just click next next and next)
+ Memory (MB): 128 should be fine
+ Timeout: 0min 10sec
+ VPC: "No VPC" should be fine
+ ```
+ :::info AWS region
+ Make sure you're creating the function in the same region with `koel-bucket`.
+ :::
+
+#### 3. Configure S3 to send events to Lambda
+
+Under `koel-bucket` "Events" section, create an event with the following details:
+
+```
+Name:
+Events: ObjectCreated(All), ObjectRemoved(All)
+Prefix:
+Suffix:
+Send To: Lambda function
+Lambda function: koel-lambda
+```
+
+#### 4. Configure Koel to Stream from S3
+
+If everything works properly, you can now upload media files to the bucket, and they should appear in Koel. Now after you populate `koel-user`'s `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, and `AWS_REGION` into your Koel's `.env` file, Koel will start streaming media from your S3.
diff --git a/docs/usage/profile-preferences.md b/docs/usage/profile-preferences.md
new file mode 100644
index 00000000..6bcf8569
--- /dev/null
+++ b/docs/usage/profile-preferences.md
@@ -0,0 +1,40 @@
+# Profile and Preferences
+
+To manage your profile and preferences, click on your avatar in the bottom-right corner of the screen.
+From here, you can manage a couple aspects of your account:
+
+## Profile
+
+To update your profile, you must first authenticate yourself by entering your current password.
+After that, you can update your name and email, and set a new password.
+Leaving the New Password field blank will keep your current password intact.
+
+:::tip Pick a strong password
+Koel enforces a strong password policy.
+Make sure to pick a password that is at least 10 characters long and contains a mix of letters, numbers, and special characters.
+Your password will also be checked against a list of leaked passwords for extra security.
+:::
+
+## Themes
+
+At the time of this writing, Koel comes with 17 themes built-in. You can activate a theme simply by clicking on it. The new theme will be applied immediately.
+
+![Theme selection](../assets/img/themes.webp)
+
+More themes are to be added in the future, along with the ability to create your own theme.
+
+## Preferences
+
+Koel allows you to set a couple of preferences:
+
+* Whether to show a notification whenever a new song starts playing
+* Whether to confirm before closing Koel’s browser tab
+* Whether to show a translucent, blurred overlay of the current album’s art
+* Whether to transcode music on the fly (mobile only, useful if you have a slow network connection)
+* Whether to set your uploaded music as public by default
+
+These preferences are saved immediately upon change and synced across all of your devices.
+
+## Service Integration Statuses
+
+If your Koel installation is [integrated](../service-integrations) with any external services, such as Last.fm or Spotify, you can see their statuses here along with the ability to connect or disconnect them when applicable.
diff --git a/docs/usage/remote-controller.md b/docs/usage/remote-controller.md
new file mode 100644
index 00000000..9d7a3c4b
--- /dev/null
+++ b/docs/usage/remote-controller.md
@@ -0,0 +1,32 @@
+# Remote Controller
+
+Koel has a built-in remote controller that lets you control a desktop instance.
+
+## Configuration
+
+
+In order for the remote controller to work, [register](https://dashboard.pusher.com/accounts/sign_up) for a Pusher account
+and create an app. Then, populate the app's credentials into `.env`:
+
+```
+PUSHER_APP_ID=
+PUSHER_APP_KEY=
+PUSHER_APP_SECRET=
+PUSHER_APP_CLUSTER=
+```
+
+Finally, reload your Koel instance to apply the changes.
+
+## Usage
+
+You can access the remote controller by visiting `https:///remote`.
+
+:::tip
+You can pin the remote controller to your phone's home screen for quick access.
+:::
+
+The remote controller will scan for an active Koel instance.
+If found, it will connect to it and allow you to control the playback as well as like/unlike the current song and adjust the volume.
+
+
+
diff --git a/docs/usage/search.md b/docs/usage/search.md
new file mode 100644
index 00000000..a1ff8ed4
--- /dev/null
+++ b/docs/usage/search.md
@@ -0,0 +1,46 @@
+# Instant Search
+
+Powered by [Laravel Scout](https://github.com/laravel/scout), Koel provides an instant search feature that performs full-text,
+fuzzy searches against your music collection and returns the most relevant results as you type.
+
+
+
+## Configuration
+
+Out of the box, Koel uses the [TNTSearch](https://github.com/teamtnt/tntsearch), a powerful full-text search engine written entirely in PHP and requires no configuration.
+
+Switching to [Algolia](https://www.algolia.com/) is just a matter of changing the driver value to `algolia` and populating the credentials into `.env`:
+
+```
+SCOUT_DRIVER=algolia
+ALGOLIA_APP_ID=
+ALGOLIA_SECRET=
+```
+
+Similarly, you can use [Meilisearch](https://www.meilisearch.com/):
+
+```
+SCOUT_DRIVER=meilisearch
+MEILISEARCH_HOST=
+MEILISEARCH_KEY=
+```
+
+## Update the Search Index
+
+If the configuration is done after you have already populated Koel with songs, you'll need to update the search index.
+You can do so by running this command:
+
+```bash
+php artisan koel:search:import
+```
+
+Afterward and for future changes, the index will be updated automatically whenever you add, update, or delete songs, albums, or artists.
+There's literally nothing you need to do to keep the index up to date.
+
+## Usage
+
+To use the instant search, simply start typing in the search box at the top left of the screen or pressing F.
+You'll see the results appear as you type.
diff --git a/docs/usage/streaming.md b/docs/usage/streaming.md
new file mode 100644
index 00000000..32d478b8
--- /dev/null
+++ b/docs/usage/streaming.md
@@ -0,0 +1,34 @@
+# Streaming Music
+
+## Streaming Methods
+
+Koel supports three streaming methods which can be configured via the `STREAMING_METHOD` setting in `.env` file:
+
+* `php`: Use native PHP `readfile()`. This is the default method, and the slowest and most unstable one.
+* `x-accel-redirect`: Use nginx's [X-Accel](https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/) module, designed for serving larger contents directly to the end user. Refer to [`nginx.conf.example`](https://github.com/koel/koel/blob/master/nginx.conf.example) for a sample nginx configuration file.
+* `x-sendfile`: Use Apache's [mod_xsendfile](https://tn123.org/mod_xsendfile/) module. You'll need to install and configure the module manually. A sample configuration is as following:
+ ```apache
+ LoadModule xsendfile_module libexec/apache2/mod_xsendfile.so
+
+ # These configuration can be put in the VirtualHost directive as well
+
+ XSendFile on
+ XSendFilePath /mnt/media
+
+ ```
+ Note that although its home page denotes "Apache2/Apache2.2," the module itself is known to work with later versions of Apache as well.
+:::tip Tip
+If you're using [Koel mobile app](https://koel.dev/#mobile) and can't play the songs, try switching the streaming method to `x-accel-redirect` or `x-sendfile` instead of `php`.
+:::
+
+:::warning Notice
+`STREAMING_METHOD` doesn't have effects if you're transcoding or streaming from a cloud storage.
+:::
+
+## Transcoding FLAC
+
+Koel supports transcoding FLAC to mp3 on the fly when streaming music. This behavior can be controlled via a `TRANSCODE_FLAC` setting in `.env` file:
+
+* `false`: Disable FLAC transcoding. Koel will stream FLAC files as-is, producing the lossless audio quality. This is the default behavior.
+* `true`: Enable FLAC transcoding. Koel will transcode FLAC to mp3 on the fly. You'll need to have [FFmpeg](https://ffmpeg.org/) installed on your server and set its executable path via the `FFMPEG_PATH` setting in the `.env` file. The transcoding quality can also be controlled via `OUTPUT_BIT_RATE` (defaults to `128`).
+
diff --git a/docs/usage/themes.md b/docs/usage/themes.md
new file mode 100644
index 00000000..23339153
--- /dev/null
+++ b/docs/usage/themes.md
@@ -0,0 +1,7 @@
+# Themes
+
+
+
+Koel supports multiple themes out of the box. You can preview and choose one from the [Profile & Preferences](./profile-preferences.md#themes) screen.
+
+
diff --git a/docs/usage/user-management.md b/docs/usage/user-management.md
new file mode 100644
index 00000000..446dc1ec
--- /dev/null
+++ b/docs/usage/user-management.md
@@ -0,0 +1,33 @@
+# User Management
+
+## First Admin User
+Upon installation, Koel prompts to create a first (default) admin user.
+If you're using the [Docker image](../guide/getting-started#using-docker), the admin user will be created automatically with these credentials:
+
+```
+Email: admin@koel.dev
+Password: KoelIsCool
+```
+
+
+Make sure to change these credentials immediately after logging in for the first time!
+
+
+## Changing First Admin Password
+If you forgot the default admin’s password and are unable to log in, you can change it via the command line:
+
+```bash
+php artisan koel:admin:change-password
+```
+
+## Adding More Users
+
+As an admin, you can add more users and manage their profiles under Manage → Users.
+If Koel has been [configured](../guide/getting-started#configure-a-mailer) with a mailer, you can also invite a user via email.
+
+:::tip Multi-library support
+In the Community edition of Koel, all users share the same library (though playlists, favorites, and other stats are private).
+[Koel Plus](../plus/what-is-koel-plus) offers multi-library support, where each user can have their own library with the ability to share and collaborate with others.
+:::
+
+
diff --git a/docs/usage/web-interface.md b/docs/usage/web-interface.md
new file mode 100644
index 00000000..685d5218
--- /dev/null
+++ b/docs/usage/web-interface.md
@@ -0,0 +1,155 @@
+# Using the Web Interface
+
+
+
+Koel’s web interface is designed to be as simple and intuitive as possible, drawing inspiration from the best music players out there. Here’s a quick rundown of what you can do with it.
+
+## Browsing and Searching for Music
+
+The navigation bar on the left side of the screen is where you can find all the main features of Koel.
+You can browse your music library by songs…
+
+![All Songs screen](../assets/img/interface/all-songs.webp)
+
+artists…
+
+![Artists screen](../assets/img/interface/artists.webp)
+
+albums…
+
+![Albums screen](../assets/img/interface/albums.webp)
+
+or genres:
+
+![Genres screen](../assets/img/interface/genres.webp)
+
+You can click on any artist, album, or genre name to see all the songs that belong to it.
+On the artist and album screens, you can also find other albums and songs by the same artist as well as extra metadata
+like the artist or album's information when [configured](../service-integrations).
+
+On any screen with a song list (a "song-list screen") you can:
+
+* Sort the list by clicking on the column headers
+* Filter the list by typing in the filter box (marked with )
+* Select a song by clicking on it. To select multiple songs, hold down Shift or Ctrl/Cmd while clicking.
+* Drag and drop one or more songs to reorder them when applicable
+* Drag and drop one or more songs to applicable menu items to the left to perform actions like adding to a playlist, queueing, or marking them as favorite
+* Right-click on a song to bring up a context menu with options to play, queue, mark as favorite, add to a playlist, and more
+
+To search globally for songs, artists, and albums, see [Instant Search](./search).
+
+## Streaming Music
+
+Play a song by double-clicking on it or pressing Enter on either a song list row or a song card.
+Queue a song (or multiple songs) by right-clicking and choose one of the Queue options, or by dragging and dropping it
+into the queue menu item.
+
+You can use the dedicated button (with the icon) to shuffle the current list or the selected songs.
+To play in order instead of shuffling, hold down Alt/Option while clicking the button.
+
+When a song is playing, you can control playback using the buttons at the bottom of the screen as well as
+rewind/fast-forward the song by clicking and dragging the progress bar.
+
+![Footer controls](../assets/img/interface/footer.webp)
+
+From the same area, you also can:
+
+* like/unlike the current song
+* control the volume
+* switch between repeat modes
+* show the equalizer
+* show the visualizer
+* toggle full-screen mode
+
+Right-clicking the footer area brings up context menu for the currently playing song.
+
+## Creating and Managing Playlists
+
+Koel supports creating an unlimited number of playlists as well as organizing them into folders.
+Start by clicking the button next to the "Playlists" header in the navigation bar. You'll be provided with three options:
+
+* "New Playlist…" brings up a dialog to create a standard playlist
+* "New Smart Playlist…" brings up a dialog to create a smart playlist
+* "New Folder…" brings up a dialog to create a playlist folder
+
+Creating a standard playlist or playlist folder should be straightforward, as you only need to supply a name.
+Once a playlist or playlist folder is created, you can:
+
+* Drag and drop songs into a standard playlist to add them
+* Drag and drop playlists a playlist folder to organize them. You can also drag and drop a playlist out of its folder.
+
+For a smart playlist, you can define the criteria that determine which songs are included in the playlist,
+and Koel will automatically update the playlist based on those criteria.
+For example, with the criteria shown in the following screenshot:
+
+
+
+Koel will include in the playlist:
+
+* all songs by Pink Floyd, and
+* songs by Iron Maiden that have been played more than 99 times by the current user
+
+There are a great variety of criteria to choose from, and you can combine them in any way you like, providing a powerful tool for creating dynamic playlists.
+
+## Editing Songs
+
+As an admin (Community edition) or song owner (Koel Plus), you can edit a song's metadata by right-clicking on it and choosing "Edit…".
+A dialog will appear, allowing you to change the song's title, artist, album, genre, lyrics, and more.
+
+
+
+You can also edit multiple songs at once, in which case the changes will be applied to all of them.
+
+## Downloading Songs
+
+If `ALLOW_DOWNLOAD` is set to `true` (the default value) in your `.env` file, you can download a song by right-clicking on it and choosing "Download."
+You can also download several songs, all songs from an album, all songs by an artist, or a whole playlist, though it might be resource-intensive for large collections.
+
+:::tip `zip-ext` required
+Downloading multiple songs requires the [`zip` extension](https://www.php.net/manual/en/book.zip.php) to be installed and enabled in your PHP environment.
+Koel will silently fail if this requirement is not met.
+:::
+
+## Deleting Songs
+
+As an admin (Community edition) or song owner (Koel Plus), you can delete a song by right-clicking on it and choosing "Delete from Filesystem."
+You'll be prompted to confirm the deletion, and once confirmed, the song will be removed from the database and the filesystem.
+
+:::danger Backup on Delete
+By default, Koel keeps a backup of the song before deleting it.
+You can disable this behavior by setting `BACKUP_ON_DELETE` to `false` in your `.env` file, but be aware that this will make it impossible to recover a song once it's deleted.
+:::
+
+## Share a Song
+
+You can share a song by right-clicking on it and choosing "Copy Shareable URL."
+This will copy a URL to the clipboard that can then be shared with anyone with a Koel account.
+
+## Keyboard Shortcuts
+
+Koel has a number of keyboard shortcuts to make it easier to navigate and control playback.
+Note that these shortcuts are only triggered when the focus is not on an input field (including the volume control and the music track)
+or a textarea.
+
+* F puts the focus into the search box and triggers the instant search screen
+* Enter plays a song. If multiple songs are being selected, Enter adds them to the bottom of the queue, Shift+Enter queues them to top. Adding a Cmd or Ctrl into the combo plays the first selected song right away.
+* Space toggles playback
+* J plays the next song in queue
+* K plays the previous song in queue
+* L marks/unmarks the current song as favorite
+* Ctrl/Cmd+A selects all songs in the current song-list screen when the list is focused
+* Delete removes selected song(s) from the current queue/playlist
+
+With a browser that supports [MediaSession](https://developer.mozilla.org/en-US/docs/Web/API/MediaSession) — basically, all modern browsers — you can control Koel using hardware media keys without even having Koel _or the browser_ focused.
+
+
diff --git a/package.json b/package.json
index 001a456e..cc00a5b1 100644
--- a/package.json
+++ b/package.json
@@ -82,6 +82,7 @@
"ts-loader": "^9.3.0",
"typescript": "^4.8.4",
"vite": "^3.1.6",
+ "vitepress": "^1.0.0-rc.45",
"vitest": "^0.24.0",
"vue-loader": "^16.2.0",
"webpack": "^5.72.0",
@@ -95,7 +96,10 @@
"build": "vite build",
"build-demo": "cross-env VITE_KOEL_ENV=demo vite build",
"dev": "kill-port 8000 && start-test 'php artisan serve --port=8000 --quiet' 'http://127.0.0.1:8000/api/ping' 'vite'",
- "prod": "npm run production"
+ "prod": "npm run production",
+ "docs:dev": "vitepress dev docs",
+ "docs:build": "vitepress build docs",
+ "docs:preview": "vitepress preview docs"
},
"husky": {
"hooks": {
@@ -113,4 +117,4 @@
"eslint"
]
}
-}
+}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index f1bc8468..824711a9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,137 @@
# yarn lockfile v1
+"@algolia/autocomplete-core@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7"
+ integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==
+ dependencies:
+ "@algolia/autocomplete-plugin-algolia-insights" "1.9.3"
+ "@algolia/autocomplete-shared" "1.9.3"
+
+"@algolia/autocomplete-plugin-algolia-insights@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587"
+ integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==
+ dependencies:
+ "@algolia/autocomplete-shared" "1.9.3"
+
+"@algolia/autocomplete-preset-algolia@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da"
+ integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==
+ dependencies:
+ "@algolia/autocomplete-shared" "1.9.3"
+
+"@algolia/autocomplete-shared@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa"
+ integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==
+
+"@algolia/cache-browser-local-storage@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz#14b6dc9abc9e3a304a5fffb063d15f30af1032d1"
+ integrity sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==
+ dependencies:
+ "@algolia/cache-common" "4.22.1"
+
+"@algolia/cache-common@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.22.1.tgz#c625dff4bc2a74e79f9aed67b4e053b0ef1b3ec1"
+ integrity sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==
+
+"@algolia/cache-in-memory@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz#858a3d887f521362e87d04f3943e2810226a0d71"
+ integrity sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==
+ dependencies:
+ "@algolia/cache-common" "4.22.1"
+
+"@algolia/client-account@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.22.1.tgz#a7fb8b66b9a4f0a428e1426b2561144267d76d43"
+ integrity sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==
+ dependencies:
+ "@algolia/client-common" "4.22.1"
+ "@algolia/client-search" "4.22.1"
+ "@algolia/transporter" "4.22.1"
+
+"@algolia/client-analytics@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.22.1.tgz#506558740b4d49b1b1e3393861f729a8ce921851"
+ integrity sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==
+ dependencies:
+ "@algolia/client-common" "4.22.1"
+ "@algolia/client-search" "4.22.1"
+ "@algolia/requester-common" "4.22.1"
+ "@algolia/transporter" "4.22.1"
+
+"@algolia/client-common@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.22.1.tgz#042b19c1b6157c485fa1b551349ab313944d2b05"
+ integrity sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==
+ dependencies:
+ "@algolia/requester-common" "4.22.1"
+ "@algolia/transporter" "4.22.1"
+
+"@algolia/client-personalization@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.22.1.tgz#ff088d797648224fb582e9fe5828f8087835fa3d"
+ integrity sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==
+ dependencies:
+ "@algolia/client-common" "4.22.1"
+ "@algolia/requester-common" "4.22.1"
+ "@algolia/transporter" "4.22.1"
+
+"@algolia/client-search@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.22.1.tgz#508cc6ab3d1f4e9c02735a630d4dff6fbb8514a2"
+ integrity sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==
+ dependencies:
+ "@algolia/client-common" "4.22.1"
+ "@algolia/requester-common" "4.22.1"
+ "@algolia/transporter" "4.22.1"
+
+"@algolia/logger-common@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.22.1.tgz#79cf4cd295de0377a94582c6aaac59b1ded731d9"
+ integrity sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==
+
+"@algolia/logger-console@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.22.1.tgz#0355345f6940f67aaa78ae9b81c06e44e49f2336"
+ integrity sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==
+ dependencies:
+ "@algolia/logger-common" "4.22.1"
+
+"@algolia/requester-browser-xhr@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz#f04df6fe9690a071b267c77d26b83a3be9280361"
+ integrity sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==
+ dependencies:
+ "@algolia/requester-common" "4.22.1"
+
+"@algolia/requester-common@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.22.1.tgz#27be35f3718aafcb6b388ff9c3aa2defabd559ff"
+ integrity sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==
+
+"@algolia/requester-node-http@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz#589a6fa828ad0f325e727a6fcaf4e1a2343cc62b"
+ integrity sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==
+ dependencies:
+ "@algolia/requester-common" "4.22.1"
+
+"@algolia/transporter@4.22.1":
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.22.1.tgz#8843841b857dc021668f31647aa557ff19cd9cb1"
+ integrity sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==
+ dependencies:
+ "@algolia/cache-common" "4.22.1"
+ "@algolia/logger-common" "4.22.1"
+ "@algolia/requester-common" "4.22.1"
+
"@ampproject/remapping@^2.1.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
@@ -272,6 +403,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55"
integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==
+"@babel/parser@^7.23.9":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac"
+ integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==
+
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
@@ -960,16 +1096,154 @@
debug "^3.1.0"
lodash.once "^4.1.1"
+"@docsearch/css@3.6.0", "@docsearch/css@^3.5.2":
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.6.0.tgz#0e9f56f704b3a34d044d15fd9962ebc1536ba4fb"
+ integrity sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==
+
+"@docsearch/js@^3.5.2":
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.6.0.tgz#f9e46943449b9092d874944f7a80bcc071004cfb"
+ integrity sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==
+ dependencies:
+ "@docsearch/react" "3.6.0"
+ preact "^10.0.0"
+
+"@docsearch/react@3.6.0":
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.6.0.tgz#b4f25228ecb7fc473741aefac592121e86dd2958"
+ integrity sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==
+ dependencies:
+ "@algolia/autocomplete-core" "1.9.3"
+ "@algolia/autocomplete-preset-algolia" "1.9.3"
+ "@docsearch/css" "3.6.0"
+ algoliasearch "^4.19.1"
+
+"@esbuild/aix-ppc64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f"
+ integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==
+
+"@esbuild/android-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4"
+ integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==
+
"@esbuild/android-arm@0.15.10":
version "0.15.10"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.10.tgz#a5f9432eb221afc243c321058ef25fe899886892"
integrity sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==
+"@esbuild/android-arm@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824"
+ integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==
+
+"@esbuild/android-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d"
+ integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==
+
+"@esbuild/darwin-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e"
+ integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==
+
+"@esbuild/darwin-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd"
+ integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==
+
+"@esbuild/freebsd-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487"
+ integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==
+
+"@esbuild/freebsd-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c"
+ integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==
+
+"@esbuild/linux-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b"
+ integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==
+
+"@esbuild/linux-arm@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef"
+ integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==
+
+"@esbuild/linux-ia32@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601"
+ integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==
+
"@esbuild/linux-loong64@0.15.10":
version "0.15.10"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz#78a42897c2cf8db9fd5f1811f7590393b77774c7"
integrity sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==
+"@esbuild/linux-loong64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299"
+ integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==
+
+"@esbuild/linux-mips64el@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec"
+ integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==
+
+"@esbuild/linux-ppc64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8"
+ integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==
+
+"@esbuild/linux-riscv64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf"
+ integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==
+
+"@esbuild/linux-s390x@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8"
+ integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==
+
+"@esbuild/linux-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78"
+ integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==
+
+"@esbuild/netbsd-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b"
+ integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==
+
+"@esbuild/openbsd-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0"
+ integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==
+
+"@esbuild/sunos-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30"
+ integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==
+
+"@esbuild/win32-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae"
+ integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==
+
+"@esbuild/win32-ia32@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67"
+ integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==
+
+"@esbuild/win32-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae"
+ integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==
+
"@eslint/eslintrc@^1.3.3":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95"
@@ -1145,6 +1419,83 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
+"@rollup/rollup-android-arm-eabi@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz#b98786c1304b4ff8db3a873180b778649b5dff2b"
+ integrity sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==
+
+"@rollup/rollup-android-arm64@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz#8833679af11172b1bf1ab7cb3bad84df4caf0c9e"
+ integrity sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==
+
+"@rollup/rollup-darwin-arm64@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz#ef02d73e0a95d406e0eb4fd61a53d5d17775659b"
+ integrity sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==
+
+"@rollup/rollup-darwin-x64@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz#3ce5b9bcf92b3341a5c1c58a3e6bcce0ea9e7455"
+ integrity sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==
+
+"@rollup/rollup-linux-arm-gnueabihf@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz#3d3d2c018bdd8e037c6bfedd52acfff1c97e4be4"
+ integrity sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==
+
+"@rollup/rollup-linux-arm64-gnu@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz#5fc8cc978ff396eaa136d7bfe05b5b9138064143"
+ integrity sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==
+
+"@rollup/rollup-linux-arm64-musl@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz#f2ae7d7bed416ffa26d6b948ac5772b520700eef"
+ integrity sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==
+
+"@rollup/rollup-linux-riscv64-gnu@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz#303d57a328ee9a50c85385936f31cf62306d30b6"
+ integrity sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==
+
+"@rollup/rollup-linux-x64-gnu@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz#f672f6508f090fc73f08ba40ff76c20b57424778"
+ integrity sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==
+
+"@rollup/rollup-linux-x64-musl@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz#d2f34b1b157f3e7f13925bca3288192a66755a89"
+ integrity sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==
+
+"@rollup/rollup-win32-arm64-msvc@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz#8ffecc980ae4d9899eb2f9c4ae471a8d58d2da6b"
+ integrity sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==
+
+"@rollup/rollup-win32-ia32-msvc@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz#a7505884f415662e088365b9218b2b03a88fc6f2"
+ integrity sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==
+
+"@rollup/rollup-win32-x64-msvc@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz#6abd79db7ff8d01a58865ba20a63cfd23d9e2a10"
+ integrity sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==
+
+"@shikijs/core@1.2.0", "@shikijs/core@^1.1.5":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.2.0.tgz#c19d1a4d4807d31aa02e9d822aa13da873e6f2e7"
+ integrity sha512-OlFvx+nyr5C8zpcMBnSGir0YPD6K11uYhouqhNmm1qLiis4GA7SsGtu07r9gKS9omks8RtQqHrJL4S+lqWK01A==
+
+"@shikijs/transformers@^1.1.5":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@shikijs/transformers/-/transformers-1.2.0.tgz#954cbb20324be55340701f56b5815aa454fbdd05"
+ integrity sha512-xKn7DtA65DQV4FOfYsrvqM80xOy2xuXnxWWKsZmHv1VII/IOuDUDsWDu3KnpeLH6wqNJWp1GRoNUsHR1aw/VhQ==
+ dependencies:
+ shiki "1.2.0"
+
"@sideway/address@^4.1.5":
version "4.1.5"
resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5"
@@ -1245,6 +1596,11 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2"
integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==
+"@types/estree@1.0.5":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
+ integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
+
"@types/estree@^0.0.51":
version "0.0.51"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
@@ -1260,6 +1616,11 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+"@types/linkify-it@*":
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8"
+ integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==
+
"@types/local-storage@^1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@types/local-storage/-/local-storage-1.4.0.tgz#2838b4c2556b79edf87af75d13a10b25de7a8041"
@@ -1270,6 +1631,19 @@
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.186.tgz#862e5514dd7bd66ada6c70ee5fce844b06c8ee97"
integrity sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==
+"@types/markdown-it@^13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-13.0.7.tgz#4a495115f470075bd4434a0438ac477a49c2e152"
+ integrity sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==
+ dependencies:
+ "@types/linkify-it" "*"
+ "@types/mdurl" "*"
+
+"@types/mdurl@*":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39"
+ integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==
+
"@types/node@*":
version "18.8.3"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.3.tgz#ce750ab4017effa51aed6a7230651778d54e327c"
@@ -1453,6 +1827,11 @@
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-3.1.2.tgz#3cd52114e8871a0b5e7bd7d837469c032e503036"
integrity sha512-3zxKNlvA3oNaKDYX0NBclgxTQ1xaFdL7PzwF6zj9tGFziKwmBa3Q/6XcJQxudlT81WxDjEhHmevvIC4Orc1LhQ==
+"@vitejs/plugin-vue@^5.0.4":
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz#508d6a0f2440f86945835d903fcc0d95d1bb8a37"
+ integrity sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==
+
"@vue/compiler-core@3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128"
@@ -1463,6 +1842,17 @@
estree-walker "^2.0.2"
source-map-js "^1.0.2"
+"@vue/compiler-core@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.21.tgz#868b7085378fc24e58c9aed14c8d62110a62be1a"
+ integrity sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==
+ dependencies:
+ "@babel/parser" "^7.23.9"
+ "@vue/shared" "3.4.21"
+ entities "^4.5.0"
+ estree-walker "^2.0.2"
+ source-map-js "^1.0.2"
+
"@vue/compiler-dom@3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151"
@@ -1471,6 +1861,14 @@
"@vue/compiler-core" "3.3.4"
"@vue/shared" "3.3.4"
+"@vue/compiler-dom@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz#0077c355e2008207283a5a87d510330d22546803"
+ integrity sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==
+ dependencies:
+ "@vue/compiler-core" "3.4.21"
+ "@vue/shared" "3.4.21"
+
"@vue/compiler-sfc@3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df"
@@ -1487,6 +1885,21 @@
postcss "^8.1.10"
source-map-js "^1.0.2"
+"@vue/compiler-sfc@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz#4af920dc31ab99e1ff5d152b5fe0ad12181145b2"
+ integrity sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==
+ dependencies:
+ "@babel/parser" "^7.23.9"
+ "@vue/compiler-core" "3.4.21"
+ "@vue/compiler-dom" "3.4.21"
+ "@vue/compiler-ssr" "3.4.21"
+ "@vue/shared" "3.4.21"
+ estree-walker "^2.0.2"
+ magic-string "^0.30.7"
+ postcss "^8.4.35"
+ source-map-js "^1.0.2"
+
"@vue/compiler-ssr@3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777"
@@ -1495,6 +1908,39 @@
"@vue/compiler-dom" "3.3.4"
"@vue/shared" "3.3.4"
+"@vue/compiler-ssr@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz#b84ae64fb9c265df21fc67f7624587673d324fef"
+ integrity sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==
+ dependencies:
+ "@vue/compiler-dom" "3.4.21"
+ "@vue/shared" "3.4.21"
+
+"@vue/devtools-api@^7.0.14":
+ version "7.0.18"
+ resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-7.0.18.tgz#20a9e8583ec1db7637a09bb6285b5e1e51b6c799"
+ integrity sha512-rNLQ8A2eGmaXAen/xARLY6MVz7tzXFTDlrWJrpTD1VSU7vqmBn9qPIPjRkCdb8/2/En6RGsRebNSqfqh1Ck4pg==
+ dependencies:
+ "@vue/devtools-kit" "^7.0.18"
+
+"@vue/devtools-kit@^7.0.18":
+ version "7.0.18"
+ resolved "https://registry.yarnpkg.com/@vue/devtools-kit/-/devtools-kit-7.0.18.tgz#379ac4183d6a4f53378bdac79b705f979c6c0053"
+ integrity sha512-sLq9GZgoMG2/yb6HOjXE5PzHplV7+Xy3QvMo9Kz43Hhj0B0S0LYfk0EBdU5yZ84JRlH1LhJCp65y0L+NLbK09A==
+ dependencies:
+ "@vue/devtools-shared" "^7.0.18"
+ hookable "^5.5.3"
+ mitt "^3.0.1"
+ perfect-debounce "^1.0.0"
+ speakingurl "^14.0.1"
+
+"@vue/devtools-shared@^7.0.18":
+ version "7.0.18"
+ resolved "https://registry.yarnpkg.com/@vue/devtools-shared/-/devtools-shared-7.0.18.tgz#a0ef8598c2c981d603a451f3a54f04071ea53cc4"
+ integrity sha512-j06/+32P+Uy39hT7g5MGNEkg2nY2DZJxpSnIxz+POm5FDkqT3o4jPsk3TAsKD15C4RoVasd0xIScU6Xf3Hf5aA==
+ dependencies:
+ rfdc "^1.3.1"
+
"@vue/reactivity-transform@3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929"
@@ -1513,6 +1959,13 @@
dependencies:
"@vue/shared" "3.3.4"
+"@vue/reactivity@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.21.tgz#affd3415115b8ebf4927c8d2a0d6a24bccfa9f02"
+ integrity sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==
+ dependencies:
+ "@vue/shared" "3.4.21"
+
"@vue/runtime-core@3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1"
@@ -1521,6 +1974,14 @@
"@vue/reactivity" "3.3.4"
"@vue/shared" "3.3.4"
+"@vue/runtime-core@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.21.tgz#3749c3f024a64c4c27ecd75aea4ca35634db0062"
+ integrity sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==
+ dependencies:
+ "@vue/reactivity" "3.4.21"
+ "@vue/shared" "3.4.21"
+
"@vue/runtime-dom@3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566"
@@ -1530,6 +1991,15 @@
"@vue/shared" "3.3.4"
csstype "^3.1.1"
+"@vue/runtime-dom@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz#91f867ef64eff232cac45095ab28ebc93ac74588"
+ integrity sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==
+ dependencies:
+ "@vue/runtime-core" "3.4.21"
+ "@vue/shared" "3.4.21"
+ csstype "^3.1.3"
+
"@vue/server-renderer@3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c"
@@ -1538,11 +2008,24 @@
"@vue/compiler-ssr" "3.3.4"
"@vue/shared" "3.3.4"
+"@vue/server-renderer@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.21.tgz#150751579d26661ee3ed26a28604667fa4222a97"
+ integrity sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==
+ dependencies:
+ "@vue/compiler-ssr" "3.4.21"
+ "@vue/shared" "3.4.21"
+
"@vue/shared@3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780"
integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==
+"@vue/shared@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.21.tgz#de526a9059d0a599f0b429af7037cd0c3ed7d5a1"
+ integrity sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==
+
"@vue/test-utils@^2.0.0":
version "2.2.4"
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.2.4.tgz#2aa8159cc1f55e5e14d9c1642818e28d6f9d636b"
@@ -1553,7 +2036,7 @@
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.1.0.tgz#c2f646aa2d6ac779f79a83f18c5b82fc40952bfd"
integrity sha512-U4AxAD/tKJ3ajxYew1gkfEotpr96DE/gLXpbl+nPbsNRqGBfQZZA7YhwGoQNDPgon56v+IGZDrYq7pe3GDl9aw==
-"@vueuse/core@^10.9.0":
+"@vueuse/core@10.9.0", "@vueuse/core@^10.7.2", "@vueuse/core@^10.9.0":
version "10.9.0"
resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.9.0.tgz#7d779a95cf0189de176fee63cee4ba44b3c85d64"
integrity sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==
@@ -1563,6 +2046,15 @@
"@vueuse/shared" "10.9.0"
vue-demi ">=0.14.7"
+"@vueuse/integrations@^10.7.2":
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-10.9.0.tgz#2b1a9556215ad3c1f96d39cbfbef102cf6e0ec05"
+ integrity sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==
+ dependencies:
+ "@vueuse/core" "10.9.0"
+ "@vueuse/shared" "10.9.0"
+ vue-demi ">=0.14.7"
+
"@vueuse/metadata@10.9.0":
version "10.9.0"
resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.9.0.tgz#769a1a9db65daac15cf98084cbf7819ed3758620"
@@ -1787,6 +2279,26 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
+algoliasearch@^4.19.1:
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.22.1.tgz#f10fbecdc7654639ec20d62f109c1b3a46bc6afc"
+ integrity sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==
+ dependencies:
+ "@algolia/cache-browser-local-storage" "4.22.1"
+ "@algolia/cache-common" "4.22.1"
+ "@algolia/cache-in-memory" "4.22.1"
+ "@algolia/client-account" "4.22.1"
+ "@algolia/client-analytics" "4.22.1"
+ "@algolia/client-common" "4.22.1"
+ "@algolia/client-personalization" "4.22.1"
+ "@algolia/client-search" "4.22.1"
+ "@algolia/logger-common" "4.22.1"
+ "@algolia/logger-console" "4.22.1"
+ "@algolia/requester-browser-xhr" "4.22.1"
+ "@algolia/requester-common" "4.22.1"
+ "@algolia/requester-node-http" "4.22.1"
+ "@algolia/transporter" "4.22.1"
+
alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
@@ -2626,6 +3138,11 @@ csstype@^3.1.1:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+csstype@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
cypress@^9.5.4:
version "9.7.0"
resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.7.0.tgz#bf55b2afd481f7a113ef5604aa8b693564b5e744"
@@ -2893,6 +3410,11 @@ enquirer@^2.3.6:
dependencies:
ansi-colors "^4.1.1"
+entities@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -3119,6 +3641,35 @@ esbuild@^0.15.9:
esbuild-windows-64 "0.15.10"
esbuild-windows-arm64 "0.15.10"
+esbuild@^0.19.3:
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04"
+ integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.19.12"
+ "@esbuild/android-arm" "0.19.12"
+ "@esbuild/android-arm64" "0.19.12"
+ "@esbuild/android-x64" "0.19.12"
+ "@esbuild/darwin-arm64" "0.19.12"
+ "@esbuild/darwin-x64" "0.19.12"
+ "@esbuild/freebsd-arm64" "0.19.12"
+ "@esbuild/freebsd-x64" "0.19.12"
+ "@esbuild/linux-arm" "0.19.12"
+ "@esbuild/linux-arm64" "0.19.12"
+ "@esbuild/linux-ia32" "0.19.12"
+ "@esbuild/linux-loong64" "0.19.12"
+ "@esbuild/linux-mips64el" "0.19.12"
+ "@esbuild/linux-ppc64" "0.19.12"
+ "@esbuild/linux-riscv64" "0.19.12"
+ "@esbuild/linux-s390x" "0.19.12"
+ "@esbuild/linux-x64" "0.19.12"
+ "@esbuild/netbsd-x64" "0.19.12"
+ "@esbuild/openbsd-x64" "0.19.12"
+ "@esbuild/sunos-x64" "0.19.12"
+ "@esbuild/win32-arm64" "0.19.12"
+ "@esbuild/win32-ia32" "0.19.12"
+ "@esbuild/win32-x64" "0.19.12"
+
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
@@ -3583,6 +4134,13 @@ flatten@^1.0.2:
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
+focus-trap@^7.5.4:
+ version "7.5.4"
+ resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.5.4.tgz#6c4e342fe1dae6add9c2aa332a6e7a0bbd495ba2"
+ integrity sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==
+ dependencies:
+ tabbable "^6.2.0"
+
follow-redirects@^1.14.0, follow-redirects@^1.15.0:
version "1.15.2"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
@@ -3648,6 +4206,11 @@ fsevents@~2.3.2:
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+fsevents@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@@ -3879,6 +4442,11 @@ hash-sum@^2.0.0:
resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
+hookable@^5.5.3:
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d"
+ integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==
+
html-comment-regex@^1.1.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
@@ -4702,11 +5270,23 @@ magic-string@^0.30.0:
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.15"
+magic-string@^0.30.7:
+ version "0.30.8"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613"
+ integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.4.15"
+
map-stream@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==
+mark.js@8.11.1:
+ version "8.11.1"
+ resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5"
+ integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==
+
math-expression-evaluator@^1.2.14:
version "1.4.0"
resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.4.0.tgz#3d66031117fbb7b9715ea6c9c68c2cd2eebd37e2"
@@ -4771,6 +5351,16 @@ minimist@^1.2.8:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+minisearch@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-6.3.0.tgz#985a2f1ca3c73c2d65af94f0616bfe57164b0b6b"
+ integrity sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==
+
+mitt@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1"
+ integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
+
mkdirp@~0.5.1:
version "0.5.6"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
@@ -4798,6 +5388,11 @@ nanoid@^3.3.4:
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+nanoid@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -5054,6 +5649,11 @@ pend@~1.2.0:
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
+perfect-debounce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a"
+ integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==
+
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@@ -5398,6 +5998,20 @@ postcss@^8.1.10, postcss@^8.4.12, postcss@^8.4.16:
picocolors "^1.0.0"
source-map-js "^1.0.2"
+postcss@^8.4.35:
+ version "8.4.35"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7"
+ integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+preact@^10.0.0:
+ version "10.19.6"
+ resolved "https://registry.yarnpkg.com/preact/-/preact-10.19.6.tgz#66007b67aad4d11899f583df1b0116d94a89b8f5"
+ integrity sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==
+
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -5704,6 +6318,11 @@ rfdc@^1.3.0:
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
+rfdc@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f"
+ integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==
+
rimraf@^3.0.0, rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -5711,6 +6330,28 @@ rimraf@^3.0.0, rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
+rollup@^4.2.0:
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.0.tgz#dd2ae144b4cdc2ea25420477f68d4937a721237a"
+ integrity sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==
+ dependencies:
+ "@types/estree" "1.0.5"
+ optionalDependencies:
+ "@rollup/rollup-android-arm-eabi" "4.13.0"
+ "@rollup/rollup-android-arm64" "4.13.0"
+ "@rollup/rollup-darwin-arm64" "4.13.0"
+ "@rollup/rollup-darwin-x64" "4.13.0"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.13.0"
+ "@rollup/rollup-linux-arm64-gnu" "4.13.0"
+ "@rollup/rollup-linux-arm64-musl" "4.13.0"
+ "@rollup/rollup-linux-riscv64-gnu" "4.13.0"
+ "@rollup/rollup-linux-x64-gnu" "4.13.0"
+ "@rollup/rollup-linux-x64-musl" "4.13.0"
+ "@rollup/rollup-win32-arm64-msvc" "4.13.0"
+ "@rollup/rollup-win32-ia32-msvc" "4.13.0"
+ "@rollup/rollup-win32-x64-msvc" "4.13.0"
+ fsevents "~2.3.2"
+
rollup@~2.78.0:
version "2.78.1"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f"
@@ -5865,6 +6506,13 @@ shell-exec@1.0.2:
resolved "https://registry.yarnpkg.com/shell-exec/-/shell-exec-1.0.2.tgz#2e9361b0fde1d73f476c4b6671fa17785f696756"
integrity sha512-jyVd+kU2X+mWKMmGhx4fpWbPsjvD53k9ivqetutVW/BQ+WIZoDoP4d8vUMGezV6saZsiNoW2f9GIhg9Dondohg==
+shiki@1.2.0, shiki@^1.1.5:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.2.0.tgz#7f1b6917cbb10daa1ac3ae62fa29b40c494e2812"
+ integrity sha512-xLhiTMOIUXCv5DqJ4I70GgQCtdlzsTqFLZWcMHHG3TAieBUbvEGthdrlPDlX4mL/Wszx9C6rEcxU6kMlg4YlxA==
+ dependencies:
+ "@shikijs/core" "1.2.0"
+
side-channel@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
@@ -5973,6 +6621,11 @@ source-map@^0.5.3, source-map@^0.5.6:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
+speakingurl@^14.0.1:
+ version "14.0.1"
+ resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53"
+ integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==
+
split@0.3:
version "0.3.3"
resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
@@ -6166,6 +6819,11 @@ symbol-tree@^3.2.4:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+tabbable@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
+ integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
+
tapable@^2.1.1, tapable@^2.2.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
@@ -6509,6 +7167,38 @@ vite@^3.0.0, vite@^3.1.6:
optionalDependencies:
fsevents "~2.3.2"
+vite@^5.1.3:
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.6.tgz#706dae5fab9e97f57578469eef1405fc483943e4"
+ integrity sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==
+ dependencies:
+ esbuild "^0.19.3"
+ postcss "^8.4.35"
+ rollup "^4.2.0"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+vitepress@^1.0.0-rc.45:
+ version "1.0.0-rc.45"
+ resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-1.0.0-rc.45.tgz#1cb41f53fa084c224dd2d910137ef7b2e8c0c191"
+ integrity sha512-/OiYsu5UKpQKA2c0BAZkfyywjfauDjvXyv6Mo4Ra57m5n4Bxg1HgUGoth1CLH2vwUbR/BHvDA9zOM0RDvgeSVQ==
+ dependencies:
+ "@docsearch/css" "^3.5.2"
+ "@docsearch/js" "^3.5.2"
+ "@shikijs/core" "^1.1.5"
+ "@shikijs/transformers" "^1.1.5"
+ "@types/markdown-it" "^13.0.7"
+ "@vitejs/plugin-vue" "^5.0.4"
+ "@vue/devtools-api" "^7.0.14"
+ "@vueuse/core" "^10.7.2"
+ "@vueuse/integrations" "^10.7.2"
+ focus-trap "^7.5.4"
+ mark.js "8.11.1"
+ minisearch "^6.3.0"
+ shiki "^1.1.5"
+ vite "^5.1.3"
+ vue "^3.4.19"
+
vitest@^0.24.0:
version "0.24.0"
resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.24.0.tgz#61555b7b56e07f04a1692352de7d4803de0f5c88"
@@ -6564,6 +7254,17 @@ vue@^3.3.4:
"@vue/server-renderer" "3.3.4"
"@vue/shared" "3.3.4"
+vue@^3.4.19:
+ version "3.4.21"
+ resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.21.tgz#69ec30e267d358ee3a0ce16612ba89e00aaeb731"
+ integrity sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==
+ dependencies:
+ "@vue/compiler-dom" "3.4.21"
+ "@vue/compiler-sfc" "3.4.21"
+ "@vue/runtime-dom" "3.4.21"
+ "@vue/server-renderer" "3.4.21"
+ "@vue/shared" "3.4.21"
+
w3c-hr-time@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"