diff --git a/.env.example b/.env.example
index dc65064bdb..fe8f76839c 100644
--- a/.env.example
+++ b/.env.example
@@ -9,6 +9,9 @@ APP_FORCE_HTTPS=false
# Do note that this disable CSP!!
DEBUGBAR_ENABLED=false
+# enable or disable the v5 layout.
+LIVEWIRE_ENABLED=true
+
# enable or disable log viewer. By default it is enabled.
LOG_VIEWER_ENABLED=true
@@ -101,3 +104,6 @@ TRUSTED_PROXIES=null
# Comma-separated list of class names of diagnostics checks that should be skipped.
#SKIP_DIAGNOSTICS_CHECKS=
+
+VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
+VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
\ No newline at end of file
diff --git a/.github/workflows/.env.mariadb b/.github/workflows/.env.mariadb
index 5b2b4f189d..fd8a185fab 100644
--- a/.github/workflows/.env.mariadb
+++ b/.github/workflows/.env.mariadb
@@ -3,6 +3,7 @@ APP_URL=https://localhost
APP_ENV=dev
APP_KEY=SomeRandomString
APP_DEBUG=true
+LIVEWIRE_ENABLED=false
DB_CONNECTION=mysql
DB_HOST=localhost
diff --git a/.github/workflows/.env.postgresql b/.github/workflows/.env.postgresql
index 2d6c582c84..57702d51d0 100644
--- a/.github/workflows/.env.postgresql
+++ b/.github/workflows/.env.postgresql
@@ -3,6 +3,7 @@ APP_URL=https://localhost
APP_ENV=dev
APP_KEY=SomeRandomString
APP_DEBUG=true
+LIVEWIRE_ENABLED=false
DB_CONNECTION=pgsql
DB_HOST=localhost
diff --git a/.github/workflows/.env.sqlite b/.github/workflows/.env.sqlite
index 1aff99054c..676b77bfaf 100644
--- a/.github/workflows/.env.sqlite
+++ b/.github/workflows/.env.sqlite
@@ -3,6 +3,7 @@ APP_URL=https://localhost
APP_ENV=dev
APP_KEY=SomeRandomString
APP_DEBUG=true
+LIVEWIRE_ENABLED=false
DB_CONNECTION=sqlite
DB_LIST_FOREIGN_KEYS=true
diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml
index 3b914d1ab1..69f1e3b84e 100644
--- a/.github/workflows/CICD.yml
+++ b/.github/workflows/CICD.yml
@@ -69,6 +69,35 @@ jobs:
- name: Check source code for code style errors
run: PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php --verbose --diff --dry-run
+ check_js:
+ name: 2️⃣ JS Node ${{ matrix.node-version }} - Code Style errors & Compilation
+ runs-on: ubuntu-latest
+ needs:
+ - php_syntax_errors
+ strategy:
+ matrix:
+ node-version: [16, 18, 20]
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Install
+ run: npm install -D
+
+ - name: Check Style
+ run: npm run check-formatting
+
+ - name: Check TypeScript
+ run: npm run check
+
+ - name: Compile Front-end
+ run: npm run build
+
phpstan:
name: 2️⃣ PHP 8.2 - PHPStan
runs-on: ubuntu-latest
@@ -106,6 +135,7 @@ jobs:
- sqlite
test-suite:
- Feature
+ - Livewire
# Service containers to run with `container-job`
services:
# Label used to access the service container
@@ -282,6 +312,17 @@ jobs:
with:
composer-options: --no-dev
+ - name: Use Node.js 20
+ uses: actions/setup-node@v3
+ with:
+ node-version: 20
+
+ - name: Install
+ run: npm install
+
+ - name: Compile Front-end
+ run: npm run build
+
- name: Build Dist
run: |
make clean dist
diff --git a/.gitignore b/.gitignore
index e380c9e2f3..2db2a099c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,9 +5,11 @@ build/*
# Those are personal
public/dist/user.css
public/dist/custom.js
+public/build/*
# Pictures we do not commit
public/uploads/**
+public/uploads-*/**
# Storage stuff: useless
/storage/*.key
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000000..8760090e21
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,3 @@
+{
+ "printWidth": 150
+}
diff --git a/Makefile b/Makefile
index 17ae0a2616..4c6374b1f7 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,13 @@ composer:
composer install --prefer-dist --no-dev
php artisan vendor:publish --tag=log-viewer-asset
-dist-gen: clean composer
+npm-build:
+ rm -r public/build 2> /dev/null || true
+ rm -r node_modules 2> /dev/null || true
+ npm install
+ npm run build
+
+dist-gen: clean composer npm-build
@echo "packaging..."
@mkdir Lychee
@mkdir Lychee/public
@@ -19,6 +25,7 @@ dist-gen: clean composer
@cp -r config Lychee
@cp -r composer-cache Lychee
@cp -r database Lychee
+ @cp -r public/build Lychee/public
@cp -r public/dist Lychee/public
@cp -r public/vendor Lychee/public
@cp -r public/installer Lychee/public
@@ -46,6 +53,7 @@ dist-gen: clean composer
@cp -r version.md Lychee
@touch Lychee/storage/logs/laravel.log
@touch Lychee/public/dist/user.css
+ @touch Lychee/public/dist/custom.js
@touch Lychee/public/uploads/import/index.html
@touch Lychee/public/sym/index.html
@@ -63,6 +71,12 @@ dist: dist-clean
clean:
@rm build/* 2> /dev/null || true
@rm -r Lychee 2> /dev/null || true
+ @rm -r public/build 2> /dev/null || true
+ @rm -r node_modules 2> /dev/null || true
+ @rm -r vendor 2> /dev/null || true
+
+install: composer npm-build
+ php artisan migrate
test:
@if [ -x "vendor/bin/phpunit" ]; then \
@@ -90,6 +104,7 @@ formatting:
phpstan:
vendor/bin/phpstan analyze
+# Generating new versions
gen_minor:
php scripts/gen_release.php
git add database
@@ -106,6 +121,8 @@ gen_major:
release_major: gen_major
git commit -m "bump to version $(shell cat version.md)"
+# Building tests 1 by 1
+
TESTS_PHP := $(shell find tests/Feature -name "*Test.php" -printf "%f\n")
TEST_DONE := $(addprefix build/,$(TESTS_PHP:.php=.done))
diff --git a/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php b/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php
index ac35ab4d37..34e8ccf5fb 100644
--- a/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php
+++ b/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php
@@ -4,6 +4,8 @@
use App\Actions\Diagnostics\Diagnostics;
use App\Contracts\DiagnosticPipe;
+use App\Facades\Helpers;
+use App\Livewire\Components\Forms\Add\Upload;
use Carbon\CarbonTimeZone;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\DB;
@@ -53,10 +55,18 @@ public function handle(array &$data, \Closure $next): array
$data[] = Diagnostics::line('Timezone:', ($timeZone !== false ? $timeZone : null)?->getName());
$data[] = Diagnostics::line('Max uploaded file size:', ini_get('upload_max_filesize'));
$data[] = Diagnostics::line('Max post size:', ini_get('post_max_size'));
+ $this->getUploadLimit($data);
$data[] = Diagnostics::line('Max execution time: ', ini_get('max_execution_time'));
$data[] = Diagnostics::line($dbtype . ' Version:', $dbver);
$data[] = '';
return $next($data);
}
+
+ private function getUploadLimit(array &$data): void
+ {
+ $size = Upload::getUploadLimit();
+
+ $data[] = Diagnostics::line('Livewire chunk size:', Helpers::getSymbolByQuantity($size));
+ }
}
diff --git a/app/Actions/Search/PhotoSearch.php b/app/Actions/Search/PhotoSearch.php
index f11a11bbc0..10f7b61070 100644
--- a/app/Actions/Search/PhotoSearch.php
+++ b/app/Actions/Search/PhotoSearch.php
@@ -8,6 +8,7 @@
use App\Models\Extensions\SortingDecorator;
use App\Models\Photo;
use App\Policies\PhotoQueryPolicy;
+use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
class PhotoSearch
@@ -20,9 +21,27 @@ public function __construct(PhotoQueryPolicy $photoQueryPolicy)
}
/**
+ * Apply search directly.
+ *
* @throws InternalLycheeException
*/
public function query(array $terms): Collection
+ {
+ $query = $this->sqlQuery($terms);
+ $sorting = PhotoSortingCriterion::createDefault();
+
+ return (new SortingDecorator($query))
+ ->orderBy($sorting->column, $sorting->order)->get();
+ }
+
+ /**
+ * Create the query manually.
+ *
+ * @param array $terms
+ *
+ * @return Builder
+ */
+ public function sqlQuery(array $terms): Builder
{
$query = $this->photoQueryPolicy->applySearchabilityFilter(
Photo::query()->with(['album', 'size_variants', 'size_variants.sym_links'])
@@ -40,10 +59,6 @@ public function query(array $terms): Collection
);
}
- $sorting = PhotoSortingCriterion::createDefault();
-
- return (new SortingDecorator($query))
- ->orderBy($sorting->column, $sorting->order)
- ->get();
+ return $query;
}
}
diff --git a/app/Assets/Helpers.php b/app/Assets/Helpers.php
index fbea1f9f34..c0281d67db 100644
--- a/app/Assets/Helpers.php
+++ b/app/Assets/Helpers.php
@@ -217,4 +217,52 @@ public function convertSize(string $size): int
return $size;
}
+
+ /**
+ * Converts a decimal degree into integer degree, minutes and seconds.
+ *
+ * @param float|null $decimal
+ * @param bool $type - indicates if the passed decimal indicates a
+ * latitude (`true`) or a longitude (`false`)
+ *
+ * @returns string
+ */
+ public function decimalToDegreeMinutesSeconds(float|null $decimal, bool $type): null|string
+ {
+ if ($decimal === null) {
+ return null;
+ }
+
+ $d = abs($decimal);
+
+ // absolute value of decimal must be smaller than 180;
+ if ($d > 180) {
+ return '';
+ }
+
+ // set direction; north assumed
+ if ($type && $decimal < 0) {
+ $direction = 'S';
+ } elseif (!$type && $decimal < 0) {
+ $direction = 'W';
+ } elseif (!$type) {
+ $direction = 'E';
+ } else {
+ $direction = 'N';
+ }
+
+ // get degrees
+ $degrees = floor($d);
+
+ // get seconds
+ $seconds = ($d - $degrees) * 3600;
+
+ // get minutes
+ $minutes = floor($seconds / 60);
+
+ // reset seconds
+ $seconds = floor($seconds - $minutes * 60);
+
+ return $degrees . '° ' . $minutes . "' " . $seconds . '" ' . $direction;
+ }
}
diff --git a/app/Contracts/Livewire/Openable.php b/app/Contracts/Livewire/Openable.php
new file mode 100644
index 0000000000..1fb10b4eb5
--- /dev/null
+++ b/app/Contracts/Livewire/Openable.php
@@ -0,0 +1,32 @@
+
+ */
+ public static function localized(): array
+ {
+ return [
+ self::ROW->value => __('lychee.ALBUM_DECORATION_ORIENTATION_ROW'),
+ self::ROW_REVERSE->value => __('lychee.ALBUM_DECORATION_ORIENTATION_ROW_REVERSE'),
+ self::COLUMN->value => __('lychee.ALBUM_DECORATION_ORIENTATION_COLUMN'),
+ self::COLUMN_REVERSE->value => __('lychee.ALBUM_DECORATION_ORIENTATION_COLUMN_REVERSE'),
+ ];
+ }
}
diff --git a/app/Enum/AlbumDecorationType.php b/app/Enum/AlbumDecorationType.php
index 46543a73f1..f6a59e6dda 100644
--- a/app/Enum/AlbumDecorationType.php
+++ b/app/Enum/AlbumDecorationType.php
@@ -14,4 +14,21 @@ enum AlbumDecorationType: string
case ALBUM = 'album';
case PHOTO = 'photo';
case ALL = 'all';
+
+ /**
+ * Convert the enum into it's translated format.
+ * Note that it is missing owner.
+ *
+ * @return array
+ */
+ public static function localized(): array
+ {
+ return [
+ self::NONE->value => __('lychee.ALBUM_DECORATION_NONE'),
+ self::LAYERS->value => __('lychee.ALBUM_DECORATION_ORIGINAL'),
+ self::ALBUM->value => __('lychee.ALBUM_DECORATION_ALBUM'),
+ self::PHOTO->value => __('lychee.ALBUM_DECORATION_PHOTO'),
+ self::ALL->value => __('lychee.ALBUM_DECORATION_ALL'),
+ ];
+ }
}
diff --git a/app/Enum/AlbumLayoutType.php b/app/Enum/AlbumLayoutType.php
deleted file mode 100644
index cfe890ee81..0000000000
--- a/app/Enum/AlbumLayoutType.php
+++ /dev/null
@@ -1,15 +0,0 @@
-
+ */
+ public static function localized(): array
+ {
+ return [
+ self::EXIF->value => __('lychee.OVERLAY_EXIF'),
+ self::DESC->value => __('lychee.OVERLAY_DESCRIPTION'),
+ self::DATE->value => __('lychee.OVERLAY_DATE'),
+ self::NONE->value => __('lychee.OVERLAY_NONE'),
+ ];
+ }
}
diff --git a/app/Enum/Livewire/FileStatus.php b/app/Enum/Livewire/FileStatus.php
new file mode 100644
index 0000000000..e9ca3b3a38
--- /dev/null
+++ b/app/Enum/Livewire/FileStatus.php
@@ -0,0 +1,13 @@
+
+ */
+ public static function localized(): array
+ {
+ // yes, the UNJUSTIFIED is dropped.
+ return [
+ self::SQUARE->value => __('lychee.LAYOUT_SQUARES'),
+ self::JUSTIFIED->value => __('lychee.LAYOUT_JUSTIFIED'),
+ self::MASONRY->value => __('lychee.LAYOUT_MASONRY'),
+ self::GRID->value => __('lychee.LAYOUT_GRID'),
+ ];
+ }
+}
diff --git a/app/Enum/Traits/WireableEnumTrait.php b/app/Enum/Traits/WireableEnumTrait.php
new file mode 100644
index 0000000000..edf5a49801
--- /dev/null
+++ b/app/Enum/Traits/WireableEnumTrait.php
@@ -0,0 +1,35 @@
+value;
+ }
+
+ public static function fromLivewire(mixed $value): self
+ {
+ if (!is_string($value) && !is_int($value)) {
+ throw new LycheeLogicException('Enum could not be instanciated from ' . strval($value), null);
+ }
+
+ return self::from($value);
+ }
+
+ /**
+ * @return string[]|int[]|\Closure
+ *
+ * @psalm-return array | Closure(string):(int|string)
+ */
+ protected static function values()
+ {
+ return function (string $name): string {
+ return mb_strtolower($name);
+ };
+ }
+}
\ No newline at end of file
diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php
index 7faff50ac3..b2487d0fe3 100644
--- a/app/Exceptions/Handler.php
+++ b/app/Exceptions/Handler.php
@@ -10,10 +10,12 @@
use App\Exceptions\Handlers\InstallationHandler;
use App\Exceptions\Handlers\MigrationHandler;
use App\Exceptions\Handlers\NoEncryptionKey;
+use App\Exceptions\Handlers\ViteManifestNotFoundHandler;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Contracts\Container\Container;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
+use Illuminate\Foundation\ViteManifestNotFoundException;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
@@ -95,6 +97,22 @@ class Handler extends ExceptionHandler
TokenMismatchException::class,
SessionExpiredException::class,
NoWriteAccessOnLogsExceptions::class,
+ ViteManifestNotFoundException::class,
+ ];
+
+ /** @var array> */
+ protected $exception_checks = [
+ NoEncryptionKey::class,
+ AccessDBDenied::class,
+ InstallationHandler::class,
+ AdminSetterHandler::class,
+ MigrationHandler::class,
+ ViteManifestNotFoundHandler::class,
+ ];
+
+ /** @var array> */
+ protected $force_exception_to_http = [
+ ViteManifestNotFoundException::class,
];
/**
@@ -226,18 +244,41 @@ protected function mapException(\Throwable $e): \Throwable
*/
protected function prepareResponse($request, \Throwable $e): RedirectResponse|Response
{
- if (!$this->isHttpException($e) && config('app.debug') === true) {
- return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e);
- }
-
if (!$this->isHttpException($e)) {
- $e = new HttpException(500, $e->getMessage(), $e);
+ if ($this->mustForceToHttpException($e) || config('app.debug') !== true) {
+ $e = new HttpException(500, $e->getMessage(), $e);
+ } else {
+ return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e);
+ }
}
/** @var HttpExceptionInterface $e */
return $this->toIlluminateResponse($this->renderHttpException($e), $e);
}
+ /**
+ * Check if the exception must be converted to HttpException.
+ *
+ * @param \Throwable $e to check
+ *
+ * @return bool true if conversion is required
+ */
+ protected function mustForceToHttpException(\Throwable $e): bool
+ {
+ // This loop order is more efficient:
+ // We take the first layer of the exception, check if match any of the forced conversion
+ // then the next layer etc...
+ do {
+ foreach ($this->force_exception_to_http as $exception) {
+ if ($e instanceof $exception) {
+ return true;
+ }
+ }
+ } while ($e = $e->getPrevious());
+
+ return false;
+ }
+
/**
* Renders the given HttpException into HTML.
*
@@ -280,13 +321,9 @@ protected function renderHttpException(HttpExceptionInterface $e): SymfonyRespon
// We check, if any of our special handlers wants to do something.
/** @var HttpExceptionHandler[] $checks */
- $checks = [
- new NoEncryptionKey(),
- new AccessDBDenied(),
- new InstallationHandler(),
- new AdminSetterHandler(),
- new MigrationHandler(),
- ];
+ $checks = collect($this->exception_checks)
+ ->map(fn ($c) => new $c())
+ ->toArray();
foreach ($checks as $check) {
if ($check->check($e)) {
diff --git a/app/Exceptions/Handlers/ViteManifestNotFoundHandler.php b/app/Exceptions/Handlers/ViteManifestNotFoundHandler.php
new file mode 100644
index 0000000000..93f6e316bb
--- /dev/null
+++ b/app/Exceptions/Handlers/ViteManifestNotFoundHandler.php
@@ -0,0 +1,42 @@
+getPrevious());
+
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function renderHttpException(SymfonyResponse $defaultResponse, HttpException $e): SymfonyResponse
+ {
+ return response()->view('error.error', [
+ 'code' => $e->getStatusCode(),
+ 'type' => class_basename($e),
+ 'message' => 'Vite manifest not found, please execute `npm run dev`',
+ ], $e->getStatusCode(), $e->getHeaders());
+ }
+}
diff --git a/app/Exceptions/PhotoCollectionEmptyException.php b/app/Exceptions/PhotoCollectionEmptyException.php
new file mode 100644
index 0000000000..7ed4510267
--- /dev/null
+++ b/app/Exceptions/PhotoCollectionEmptyException.php
@@ -0,0 +1,21 @@
+unlock->do($album, $request['password']);
}
+ // If we are using livewire by default, we redirect to Livewire url intead.
+ if (config('app.livewire') === true) {
+ return $photoID === null ?
+ redirect(route('livewire-gallery-album', ['albumId' => $albumID])) :
+ redirect(route('livewire-gallery-photo', ['albumId' => $albumID, 'photoId' => $photoID]));
+ }
+
return $photoID === null ?
redirect('gallery#' . $albumID) :
redirect('gallery#' . $albumID . '/' . $photoID);
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index cd7300f5d3..a562195e0a 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -92,5 +92,6 @@ class Kernel extends HttpKernel
'content_type' => \App\Http\Middleware\ContentType::class,
'accept_content_type' => \App\Http\Middleware\AcceptContentType::class,
'redirect-legacy-id' => \App\Http\Middleware\RedirectLegacyPhotoID::class,
+ 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
}
diff --git a/app/Http/Middleware/AcceptContentType.php b/app/Http/Middleware/AcceptContentType.php
index e31d3c5379..c696f33798 100644
--- a/app/Http/Middleware/AcceptContentType.php
+++ b/app/Http/Middleware/AcceptContentType.php
@@ -19,6 +19,15 @@ class AcceptContentType
public const JSON = 'json';
public const HTML = 'html';
+ /**
+ * The URIs that should be excluded from CSRF verification.
+ *
+ * @var array
+ */
+ protected $except = [
+ 'livewire/upload-file',
+ ];
+
/**
* Handles the incoming request.
*
@@ -36,6 +45,11 @@ class AcceptContentType
*/
public function handle(Request $request, \Closure $next, string $contentType): mixed
{
+ // Skip $except
+ if ($this->inExceptArray($request)) {
+ return $next($request);
+ }
+
if ($contentType === self::JSON) {
if (!$request->expectsJson()) {
throw new UnexpectedContentType(self::JSON);
@@ -60,4 +74,26 @@ public function handle(Request $request, \Closure $next, string $contentType): m
return $next($request);
}
+
+ /**
+ * Determine if the request has a URI that should pass through CSRF verification.
+ *
+ * @param \Illuminate\Http\Request $request
+ *
+ * @return bool
+ */
+ protected function inExceptArray($request)
+ {
+ foreach ($this->except as $except) {
+ if ($except !== '/') {
+ $except = trim($except, '/');
+ }
+
+ if ($request->fullUrlIs($except) || $request->is($except)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
diff --git a/app/Http/Middleware/DisableCSP.php b/app/Http/Middleware/DisableCSP.php
index 43763e2ac4..d747858bcc 100644
--- a/app/Http/Middleware/DisableCSP.php
+++ b/app/Http/Middleware/DisableCSP.php
@@ -3,7 +3,10 @@
namespace App\Http\Middleware;
use App\Contracts\Exceptions\LycheeException;
+use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Http\Request;
+use Illuminate\Support\Facades\File;
+use Illuminate\Support\Str;
/**
* Class DisableCSP.
@@ -44,6 +47,31 @@ public function handle(Request $request, \Closure $next): mixed
config(['secure-headers.csp.script-src.hashes.sha256' => []]);
}
+ // disable unsafe-eval if we are on a Livewire page
+ if (config('app.livewire', false) === true || Str::startsWith($request->getRequestUri(), '/livewire/')) {
+ $this->handleLivewire();
+ }
+
return $next($request);
}
+
+ /**
+ * Disabling rules because of poor decision from the designer of Livewire.
+ *
+ * @return void
+ *
+ * @throws BindingResolutionException
+ */
+ private function handleLivewire()
+ {
+ // We have to disable unsafe-eval because Livewire requires it...
+ // So stupid....
+ config(['secure-headers.csp.script-src.unsafe-eval' => true]);
+
+ // if the public/hot file exists, it means that we need to disable CSP completely
+ // As we will be reloading on the fly the page and Vite has poor CSP support.
+ if (File::exists(public_path('hot'))) {
+ config(['secure-headers.csp.enable' => false]);
+ }
+ }
}
diff --git a/app/Http/Requests/Settings/SetLayoutSettingRequest.php b/app/Http/Requests/Settings/SetLayoutSettingRequest.php
index c75354b105..931ce3ca6d 100644
--- a/app/Http/Requests/Settings/SetLayoutSettingRequest.php
+++ b/app/Http/Requests/Settings/SetLayoutSettingRequest.php
@@ -2,7 +2,7 @@
namespace App\Http\Requests\Settings;
-use App\Enum\AlbumLayoutType;
+use App\Enum\PhotoLayoutType;
use Illuminate\Validation\Rules\Enum;
class SetLayoutSettingRequest extends AbstractSettingRequest
@@ -12,13 +12,13 @@ class SetLayoutSettingRequest extends AbstractSettingRequest
public function rules(): array
{
return [
- self::ATTRIBUTE => ['required', new Enum(AlbumLayoutType::class)],
+ self::ATTRIBUTE => ['required', new Enum(PhotoLayoutType::class)],
];
}
protected function processValidatedValues(array $values, array $files): void
{
$this->name = self::ATTRIBUTE;
- $this->value = AlbumLayoutType::from($values[self::ATTRIBUTE]);
+ $this->value = PhotoLayoutType::from($values[self::ATTRIBUTE]);
}
}
diff --git a/app/Http/Requests/User/U2FRequest.php b/app/Http/Requests/User/U2FRequest.php
index 61611f71c4..8ec64a3520 100644
--- a/app/Http/Requests/User/U2FRequest.php
+++ b/app/Http/Requests/User/U2FRequest.php
@@ -18,6 +18,6 @@ class U2FRequest extends AbstractEmptyRequest
*/
public function authorize(): bool
{
- return Gate::check(UserPolicy::CAN_USE_2FA, [User::class]);
+ return Gate::check(UserPolicy::CAN_EDIT, [User::class]);
}
}
diff --git a/app/Http/Requests/WebAuthn/DeleteCredentialRequest.php b/app/Http/Requests/WebAuthn/DeleteCredentialRequest.php
index 58ca94ea38..51b39e371d 100644
--- a/app/Http/Requests/WebAuthn/DeleteCredentialRequest.php
+++ b/app/Http/Requests/WebAuthn/DeleteCredentialRequest.php
@@ -18,7 +18,7 @@ class DeleteCredentialRequest extends BaseApiRequest
*/
public function authorize(): bool
{
- return Gate::check(UserPolicy::CAN_USE_2FA, [User::class]);
+ return Gate::check(UserPolicy::CAN_EDIT, [User::class]);
}
public function rules(): array
diff --git a/app/Http/Requests/WebAuthn/ListCredentialsRequest.php b/app/Http/Requests/WebAuthn/ListCredentialsRequest.php
index 0667cb6f6e..b38a1c2137 100644
--- a/app/Http/Requests/WebAuthn/ListCredentialsRequest.php
+++ b/app/Http/Requests/WebAuthn/ListCredentialsRequest.php
@@ -3,9 +3,7 @@
namespace App\Http\Requests\WebAuthn;
use App\Http\Requests\AbstractEmptyRequest;
-use App\Models\User;
-use App\Policies\UserPolicy;
-use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Auth;
class ListCredentialsRequest extends AbstractEmptyRequest
{
@@ -14,6 +12,6 @@ class ListCredentialsRequest extends AbstractEmptyRequest
*/
public function authorize(): bool
{
- return Gate::check(UserPolicy::CAN_USE_2FA, [User::class]);
+ return Auth::check();
}
}
diff --git a/app/Http/Resources/Collections/AlbumCollectionResource.php b/app/Http/Resources/Collections/AlbumCollectionResource.php
new file mode 100644
index 0000000000..99326aa7e4
--- /dev/null
+++ b/app/Http/Resources/Collections/AlbumCollectionResource.php
@@ -0,0 +1,19 @@
+ Configs::getValueAsEnum('image_overlay_type', ImageOverlayType::class),
'landing_page_enable' => Configs::getValueAsBool('landing_page_enable'),
'lang' => Configs::getValueAsString('lang'),
- 'layout' => Configs::getValueAsEnum('layout', AlbumLayoutType::class),
+ 'layout' => Configs::getValueAsEnum('layout', PhotoLayoutType::class),
'legacy_id_redirection' => Configs::getValueAsBool('legacy_id_redirection'),
'location_decoding' => Configs::getValueAsBool('location_decoding'),
'location_decoding_timeout' => Configs::getValueAsInt('location_decoding_timeout'),
diff --git a/app/Http/Resources/Models/AlbumResource.php b/app/Http/Resources/Models/AlbumResource.php
index b5a03fec7a..c93938cd4a 100644
--- a/app/Http/Resources/Models/AlbumResource.php
+++ b/app/Http/Resources/Models/AlbumResource.php
@@ -3,6 +3,7 @@
namespace App\Http\Resources\Models;
use App\DTO\AlbumProtectionPolicy;
+use App\Http\Resources\Collections\AlbumCollectionResource;
use App\Http\Resources\Collections\PhotoCollectionResource;
use App\Http\Resources\Rights\AlbumRightsResource;
use App\Http\Resources\Traits\WithStatus;
@@ -46,7 +47,7 @@ public function toArray($request)
// children
'parent_id' => $this->resource->parent_id,
'has_albums' => !$this->resource->isLeaf(),
- 'albums' => AlbumResource::collection($this->whenLoaded('children')),
+ 'albums' => AlbumCollectionResource::make($this->whenLoaded('children')),
'photos' => PhotoCollectionResource::make($this->whenLoaded('photos')),
'num_subalbums' => $this->resource->num_children,
'num_photos' => $this->resource->num_photos,
diff --git a/app/Http/Resources/Models/PhotoResource.php b/app/Http/Resources/Models/PhotoResource.php
index 54302d645e..6cb4340855 100644
--- a/app/Http/Resources/Models/PhotoResource.php
+++ b/app/Http/Resources/Models/PhotoResource.php
@@ -2,12 +2,17 @@
namespace App\Http\Resources\Models;
+use App\Enum\LicenseType;
use App\Enum\SizeVariantType;
+use App\Facades\Helpers;
use App\Http\Resources\Rights\PhotoRightsResource;
use App\Http\Resources\Traits\WithStatus;
+use App\Models\Configs;
use App\Models\Extensions\SizeVariants;
use App\Models\Photo;
+use App\Models\SizeVariant;
use App\Policies\PhotoPolicy;
+use GrahamCampbell\Markdown\Facades\Markdown;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
@@ -65,12 +70,12 @@ public function toArray($request)
'description' => $this->resource->description,
'focal' => $this->resource->focal,
'img_direction' => null,
- 'is_public' => $this->resource->is_public,
+ 'is_public' => $this->resource->is_public, // TO BE REMOVED LATER
'is_starred' => $this->resource->is_starred,
'iso' => $this->resource->iso,
'latitude' => $this->resource->latitude,
'lens' => $this->resource->lens,
- 'license' => $this->resource->license->localization(),
+ 'license' => $this->resource->license,
'live_photo_checksum' => $this->resource->live_photo_checksum,
'live_photo_content_id' => $this->resource->live_photo_content_id,
'live_photo_url' => $this->resource->live_photo_url,
@@ -83,7 +88,7 @@ public function toArray($request)
'size_variants' => [
'medium' => $medium === null ? null : SizeVariantResource::make($medium)->toArray($request),
'medium2x' => $medium2x === null ? null : SizeVariantResource::make($medium2x)->toArray($request),
- 'original' => $original === null ? null : SizeVariantResource::make($original)->noUrl($downgrade)->toArray($request),
+ 'original' => $original === null ? null : SizeVariantResource::make($original)->setNoUrl($downgrade)->toArray($request),
'small' => $small === null ? null : SizeVariantResource::make($small)->toArray($request),
'small2x' => $small2x === null ? null : SizeVariantResource::make($small2x)->toArray($request),
'thumb' => $thumb === null ? null : SizeVariantResource::make($thumb)->toArray($request),
@@ -98,6 +103,70 @@ public function toArray($request)
'rights' => PhotoRightsResource::make($this->resource)->toArray($request),
'next_photo_id' => null,
'previous_photo_id' => null,
+ 'preformatted' => $this->preformatted($original),
+ 'precomputed' => $this->precomputed(),
];
}
+
+ private function preformatted(?SizeVariant $original): array
+ {
+ $overlay_date_format = Configs::getValueAsString('date_format_photo_overlay');
+ $date_format_uploaded = Configs::getValueAsString('date_format_sidebar_uploaded');
+ $date_format_taken_at = Configs::getValueAsString('date_format_sidebar_taken_at');
+
+ return [
+ 'created_at' => $this->resource->created_at->format($date_format_uploaded),
+ 'taken_at' => $this->resource->taken_at?->format($date_format_taken_at),
+ 'date_overlay' => ($this->resource->taken_at ?? $this->resource->created_at)->format($overlay_date_format) ?? '',
+
+ 'shutter' => str_replace('s', 'sec', $this->resource->shutter ?? ''),
+ 'aperture' => str_replace('f/', '', $this->resource->aperture ?? ''),
+ 'iso' => sprintf(__('lychee.PHOTO_ISO'), $this->resource->iso),
+ 'lens' => ($this->resource->lens === '' || $this->resource->lens === null) ? '' : sprintf('(%s)', $this->resource->lens),
+
+ 'duration' => Helpers::secondsToHMS(intval($this->resource->aperture)),
+ 'fps' => $this->resource->focal === null ? $this->resource->focal . ' fps' : '',
+
+ 'filesize' => Helpers::getSymbolByQuantity($original?->filesize ?? 0),
+ 'resolution' => $original?->width . ' x ' . $original?->height,
+ 'latitude' => Helpers::decimalToDegreeMinutesSeconds($this->resource->latitude, true),
+ 'longitude' => Helpers::decimalToDegreeMinutesSeconds($this->resource->longitude, false),
+ 'altitude' => round($this->resource->altitude, 1) . 'm',
+ 'license' => $this->resource->license !== LicenseType::NONE ? $this->resource->license->localization() : '',
+ 'description' => ($this->resource->description ?? '') === '' ? '' : Markdown::convert($this->resource->description)->getContent(),
+ ];
+ }
+
+ private function precomputed(): array
+ {
+ return [
+ 'is_video' => $this->resource->isVideo(),
+ 'is_raw' => $this->resource->isRaw(),
+ 'is_livephoto' => $this->resource->live_photo_url !== null,
+ 'is_camera_date' => $this->resource->taken_at !== null,
+ 'has_exif' => $this->genExifHash() !== '',
+ 'has_location' => $this->has_location(),
+ ];
+ }
+
+ private function has_location(): bool
+ {
+ return $this->resource->longitude !== null &&
+ $this->resource->latitude !== null &&
+ $this->resource->altitude !== null;
+ }
+
+ private function genExifHash(): string
+ {
+ $exifHash = $this->resource->make;
+ $exifHash .= $this->resource->model;
+ $exifHash .= $this->resource->shutter;
+ if (!$this->resource->isVideo()) {
+ $exifHash .= $this->resource->aperture;
+ $exifHash .= $this->resource->focal;
+ }
+ $exifHash .= $this->resource->iso;
+
+ return $exifHash;
+ }
}
diff --git a/app/Http/Resources/Models/SizeVariantResource.php b/app/Http/Resources/Models/SizeVariantResource.php
index 4aa7efcfb7..382c75d08f 100644
--- a/app/Http/Resources/Models/SizeVariantResource.php
+++ b/app/Http/Resources/Models/SizeVariantResource.php
@@ -25,7 +25,7 @@ public function __construct(SizeVariant $sizeVariant)
*
* @return SizeVariantResource
*/
- public function noUrl(bool $noUrl): self
+ public function setNoUrl(bool $noUrl): self
{
$this->noUrl = $noUrl;
diff --git a/app/Http/Resources/Rights/UserRightsResource.php b/app/Http/Resources/Rights/UserRightsResource.php
index a697472850..2129ced9e6 100644
--- a/app/Http/Resources/Rights/UserRightsResource.php
+++ b/app/Http/Resources/Rights/UserRightsResource.php
@@ -29,7 +29,6 @@ public function toArray($request)
{
return [
'can_edit' => Gate::check(UserPolicy::CAN_EDIT, [User::class]),
- 'can_use_2fa' => Gate::check(UserPolicy::CAN_USE_2FA, [User::class]),
];
}
}
diff --git a/app/Http/RuleSets/AddAlbumRuleSet.php b/app/Http/RuleSets/AddAlbumRuleSet.php
new file mode 100644
index 0000000000..ea199a81ae
--- /dev/null
+++ b/app/Http/RuleSets/AddAlbumRuleSet.php
@@ -0,0 +1,19 @@
+ ['present', new RandomIDRule(true)],
+ RequestAttribute::TITLE_ATTRIBUTE => ['required', new TitleRule()],
+ ];
+ }
+}
diff --git a/app/Http/RuleSets/ChangeLoginRuleSet.php b/app/Http/RuleSets/ChangeLoginRuleSet.php
new file mode 100644
index 0000000000..c26dc678f6
--- /dev/null
+++ b/app/Http/RuleSets/ChangeLoginRuleSet.php
@@ -0,0 +1,20 @@
+ ['sometimes', new UsernameRule(true)],
+ RequestAttribute::PASSWORD_ATTRIBUTE => ['required', 'confirmed', new PasswordRule(false)],
+ RequestAttribute::OLD_PASSWORD_ATTRIBUTE => ['required', new PasswordRule(false)],
+ ];
+ }
+}
diff --git a/app/Http/RuleSets/LoginRuleSet.php b/app/Http/RuleSets/LoginRuleSet.php
new file mode 100644
index 0000000000..e8feffcc82
--- /dev/null
+++ b/app/Http/RuleSets/LoginRuleSet.php
@@ -0,0 +1,19 @@
+ ['required', new UsernameRule()],
+ RequestAttribute::PASSWORD_ATTRIBUTE => ['required', new PasswordRule(false)],
+ ];
+ }
+}
diff --git a/app/Http/RuleSets/Users/SetUserSettingsRuleSet.php b/app/Http/RuleSets/Users/SetUserSettingsRuleSet.php
index 0be59d2221..61e5ae1ee2 100644
--- a/app/Http/RuleSets/Users/SetUserSettingsRuleSet.php
+++ b/app/Http/RuleSets/Users/SetUserSettingsRuleSet.php
@@ -17,7 +17,7 @@ public static function rules(): array
{
return [
RequestAttribute::ID_ATTRIBUTE => ['required', new IntegerIDRule(false)],
- RequestAttribute::USERNAME_ATTRIBUTE => ['required', new UsernameRule()],
+ RequestAttribute::USERNAME_ATTRIBUTE => ['required', new UsernameRule(), 'min:1'],
RequestAttribute::PASSWORD_ATTRIBUTE => ['sometimes', new PasswordRule(false)],
RequestAttribute::MAY_UPLOAD_ATTRIBUTE => 'present|boolean',
RequestAttribute::MAY_EDIT_OWN_SETTINGS_ATTRIBUTE => 'present|boolean',
diff --git a/app/Image/Files/NativeLocalFile.php b/app/Image/Files/NativeLocalFile.php
index 37fd483c1c..39df280681 100644
--- a/app/Image/Files/NativeLocalFile.php
+++ b/app/Image/Files/NativeLocalFile.php
@@ -95,6 +95,41 @@ public function write($stream, bool $collectStatistics = false, ?string $mimeTyp
}
}
+ /**
+ * If new content is written to the file, the internally cached mime
+ * type is cleared.
+ * The mime type will be re-determined again upon the next invocation of
+ * {@link NativeLocalFile::getMimeType()}.
+ * This can be avoided by passing the MIME type of the stream.
+ *
+ * @param resource $stream the input stream which provides the input to write
+ * @param string|null $mimeType the mime type of `$stream`
+ *
+ * @returns void
+ */
+ public function append($stream, bool $collectStatistics = false, ?string $mimeType = null): ?StreamStat
+ {
+ try {
+ $streamStat = $collectStatistics ? static::appendStatFilter($stream) : null;
+
+ if (!is_resource($this->stream)) {
+ $this->stream = fopen($this->getPath(), 'a+b');
+ }
+ $this->cachedMimeType = null;
+ stream_copy_to_stream($stream, $this->stream);
+ $this->cachedMimeType = $mimeType;
+ // File statistics info (filesize, access mode, etc.) are cached
+ // by PHP to avoid costly I/O calls.
+ // If cache is not cleared, an old size may be reported after
+ // write.
+ clearstatcache(true, $this->getPath());
+
+ return $streamStat;
+ } catch (\ErrorException $e) {
+ throw new MediaFileOperationException($e->getMessage(), $e);
+ }
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/app/Livewire/Components/Base/ContextMenu.php b/app/Livewire/Components/Base/ContextMenu.php
new file mode 100644
index 0000000000..f443978c48
--- /dev/null
+++ b/app/Livewire/Components/Base/ContextMenu.php
@@ -0,0 +1,78 @@
+type = $type;
+ $this->params = $params;
+ $this->style = $style;
+ $this->open();
+ }
+
+ /**
+ * Close the ContextMenu component.
+ *
+ * @return void
+ */
+ #[On('closeContextMenu')]
+ public function closeContextMenu(): void
+ {
+ $this->close();
+ }
+
+ /**
+ * Rendering of the Component.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.components.context-menu');
+ }
+}
diff --git a/app/Livewire/Components/Base/Modal.php b/app/Livewire/Components/Base/Modal.php
new file mode 100644
index 0000000000..231b79de9d
--- /dev/null
+++ b/app/Livewire/Components/Base/Modal.php
@@ -0,0 +1,88 @@
+ no close button
+ * any other string correspond to the LANG text.
+ *
+ * @var string
+ */
+ public string $close_text = '';
+
+ /**
+ * @var array defines the arguments to be passed to the
+ * Livewire component loaded inside the Modal
+ */
+ public array $params = [];
+
+ /**
+ * Css properties for the modal.
+ *
+ * @var string
+ */
+ public string $modalSize = 'md:max-w-xl';
+
+ /**
+ * Open a Modal.
+ *
+ * @param string $type defines the Component loaded inside the modal
+ * @param string $close_text text to put if we use a close button
+ * @param array $params Arguments to pass to the modal
+ *
+ * @return void
+ */
+ #[On('openModal')]
+ public function openModal(string $type, string $close_text = '', array $params = []): void
+ {
+ $this->open();
+ $this->type = $type;
+ $this->close_text = $close_text;
+ $this->params = $params;
+ }
+
+ /**
+ * Close the Modal component.
+ *
+ * @return void
+ */
+ #[On('closeModal')]
+ public function closeModal(): void
+ {
+ $this->close();
+ }
+
+ /**
+ * Rendering of the Component.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.components.modal');
+ }
+}
diff --git a/app/Livewire/Components/Forms/Add/ImportFromServer.php b/app/Livewire/Components/Forms/Add/ImportFromServer.php
new file mode 100644
index 0000000000..ef67252571
--- /dev/null
+++ b/app/Livewire/Components/Forms/Add/ImportFromServer.php
@@ -0,0 +1,90 @@
+fromServer = resolve(FromServer::class);
+ }
+
+ /**
+ * We load the parameters.
+ *
+ * @param array{parentID:?string} $params set of parameters of the form
+ *
+ * @return void
+ */
+ public function mount(array $params = ['parentID' => null]): void
+ {
+ Gate::authorize(AlbumPolicy::CAN_IMPORT_FROM_SERVER, AbstractAlbum::class);
+
+ $this->form->init($params[Params::PARENT_ID] ?? null);
+ }
+
+ /**
+ * Call the parametrized rendering.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.add.import-from-server');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+
+ /**
+ * Hook the submit button.
+ *
+ * @return StreamedResponse
+ */
+ public function submit(): StreamedResponse
+ {
+ Gate::authorize(AlbumPolicy::CAN_IMPORT_FROM_SERVER, AbstractAlbum::class);
+
+ // Empty error bag
+ $this->resetErrorBag();
+
+ $this->form->prepare();
+ $this->form->validate();
+
+ /** @var int $userId */
+ $userId = Auth::id();
+
+ // Validate
+ return $this->fromServer->do($this->form->paths, $this->form->getAlbum(), $this->form->getImportMode(), $userId);
+ }
+}
diff --git a/app/Livewire/Components/Forms/Add/ImportFromUrl.php b/app/Livewire/Components/Forms/Add/ImportFromUrl.php
new file mode 100644
index 0000000000..ec292b4708
--- /dev/null
+++ b/app/Livewire/Components/Forms/Add/ImportFromUrl.php
@@ -0,0 +1,107 @@
+fromUrl = resolve(FromUrl::class);
+ }
+
+ public ImportFromUrlForm $form;
+
+ /**
+ * We load the parameters.
+ *
+ * @param array{parentID:?string} $params set of parameters of the form
+ *
+ * @return void
+ */
+ public function mount(array $params = ['parentID' => null]): void
+ {
+ $albumId = $params[Params::PARENT_ID] ?? null;
+
+ /** @var Album $album */
+ $album = $albumId === null ? null : Album::query()->findOrFail($albumId);
+
+ Gate::authorize(AlbumPolicy::CAN_UPLOAD, [AbstractAlbum::class, $album]);
+
+ $this->form->init($albumId);
+ }
+
+ /**
+ * Call the parametrized rendering.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.add.import-from-url');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+
+ /**
+ * A form has a Submit method.
+ *
+ * @return void
+ */
+ public function submit(): void
+ {
+ // Reset error bag
+ $this->resetErrorBag();
+
+ $this->form->prepare();
+ $this->form->validate();
+
+ Gate::authorize(AlbumPolicy::CAN_UPLOAD, [AbstractAlbum::class, $this->form->getAlbum()]);
+
+ /** @var int $userId */
+ $userId = Auth::id();
+
+ try {
+ $this->fromUrl->do($this->form->urls, $this->form->getAlbum(), $userId);
+ $this->notify(__('lychee.UPLOAD_IMPORT_COMPLETE'));
+ } catch (MassImportException $e) {
+ $this->notify($e->getMessage());
+ }
+ // Do we want refresh or direcly open newly created Album ?
+ $this->dispatch('reloadPage')->to(PageGalleryAlbum::class);
+ $this->close();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Add/Upload.php b/app/Livewire/Components/Forms/Add/Upload.php
new file mode 100644
index 0000000000..55834adc01
--- /dev/null
+++ b/app/Livewire/Components/Forms/Add/Upload.php
@@ -0,0 +1,169 @@
+ */
+ public array $uploads = [];
+
+ public int $chunkSize;
+ public int $parallelism;
+
+ /**
+ * Mount the component.
+ *
+ * @param array{parentID:?string} $params
+ *
+ * @return void
+ */
+ public function mount(array $params = ['parentID' => null]): void
+ {
+ $this->albumId = $params[Params::PARENT_ID] ?? null;
+ $album = $this->albumId === null ? null : Album::findOrFail($this->albumId);
+ Gate::authorize(AlbumPolicy::CAN_UPLOAD, [AbstractAlbum::class, $album]);
+
+ $this->chunkSize = self::getUploadLimit();
+ $this->parallelism = Configs::getValueAsInt('upload_processing_limit');
+ }
+
+ public function render(): View
+ {
+ return view('livewire.forms.add.upload');
+ }
+
+ /**
+ * @param TemporaryUploadedFile $value
+ * @param string $key
+ *
+ * @return void
+ */
+ public function updatedUploads($value, string $key): void
+ {
+ $keys = explode('.', $key);
+ $index = intval($keys[0]);
+ $attribute = $keys[1] ?? null;
+
+ $fileDetails = $this->uploads[$index];
+ // Initialize data if not existing.
+ $fileDetails['extension'] ??= '.' . pathinfo($fileDetails['fileName'], PATHINFO_EXTENSION);
+ $fileDetails['uuidName'] ??= strtr(base64_encode(random_bytes(12)), '+/', '-_') . $fileDetails['extension'];
+
+ // Ensure data are set
+ $this->uploads[$index]['extension'] = $fileDetails['extension'];
+ $this->uploads[$index]['uuidName'] = $fileDetails['uuidName'];
+ $this->uploads[$index]['stage'] = $fileDetails['stage'] ?? FileStatus::UPLOADING->value;
+ $this->uploads[$index]['progress'] = $fileDetails['progress'] ?? 0;
+
+ if ($attribute === 'fileChunk') {
+ $fileDetails = $this->uploads[$index];
+ /** @var TemporaryUploadedFile $chunkFile */
+ $chunkFile = $fileDetails['fileChunk'];
+ $final = new NativeLocalFile(Storage::path('/livewire-tmp/' . $fileDetails['uuidName']));
+ $final->append($chunkFile->readStream());
+ $chunkFile->delete();
+
+ $curSize = $final->getFilesize();
+
+ $this->uploads[$index]['progress'] = intval($curSize / $fileDetails['fileSize'] * 100);
+ if ($this->uploads[$index]['progress'] === 100) {
+ $this->uploads[$index]['stage'] = FileStatus::READY->value;
+ }
+ }
+
+ $this->triggerProcessing();
+ }
+
+ public function triggerProcessing(): void
+ {
+ foreach ($this->uploads as $idx => $fileData) {
+ if ($fileData['stage'] === FileStatus::READY->value) {
+ $uploadedFile = new NativeLocalFile(Storage::path('/livewire-tmp/' . $fileData['uuidName']));
+ $processableFile = new ProcessableJobFile(
+ $fileData['extension'],
+ $fileData['fileName']
+ );
+ $processableFile->write($uploadedFile->read());
+ $uploadedFile->close();
+ $uploadedFile->delete();
+ $processableFile->close();
+ // End of work-around
+
+ try {
+ $this->uploads[$idx]['stage'] = FileStatus::PROCESSING->value;
+
+ if (Configs::getValueAsBool('use_job_queues')) {
+ ProcessImageJob::dispatch($processableFile, $this->albumId, $fileData['lastModified']);
+ } else {
+ ProcessImageJob::dispatchSync($processableFile, $this->albumId, $fileData['lastModified']);
+ }
+ $this->uploads[$idx]['stage'] = FileStatus::DONE->value;
+ } catch (PhotoSkippedException $e) {
+ $this->uploads[$idx]['stage'] = FileStatus::SKIPPED->value;
+ }
+ }
+ }
+ }
+
+ public static function getUploadLimit(): int
+ {
+ $size = Configs::getValueAsInt('upload_chunk_size');
+ if ($size === 0) {
+ $size = (int) min(
+ Helpers::convertSize(ini_get('upload_max_filesize')),
+ Helpers::convertSize(ini_get('post_max_size')),
+ Helpers::convertSize(ini_get('memory_limit')) / 10
+ );
+ }
+
+ /** @var array $rules */
+ $rules = FileUploadConfiguration::rules();
+ $sizeRule = collect($rules)->first(fn ($rule) => Str::startsWith($rule, 'max:'), 'max:12288');
+ $LivewireSizeLimit = intval(Str::substr($sizeRule, 4)) * 1024;
+
+ return min($size, $LivewireSizeLimit);
+ }
+
+ /**
+ * Close the modal containing the Upload panel.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/Create.php b/app/Livewire/Components/Forms/Album/Create.php
new file mode 100644
index 0000000000..6c355a81e8
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/Create.php
@@ -0,0 +1,102 @@
+parent_id = $params[Params::PARENT_ID];
+ Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, [$this->parent_id]]);
+ }
+
+ /**
+ * Call the parametrized rendering.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.add.create');
+ }
+
+ /**
+ * A form has a Submit method.
+ *
+ * @return void
+ */
+ public function submit(): void
+ {
+ // Reset error bag
+ $this->resetErrorBag();
+
+ // Validate
+ $this->validate();
+
+ /** @var Album|null $parentAlbum */
+ $parentAlbum = $this->parent_id === null ? null : Album::query()->findOrFail($this->parent_id);
+
+ // Authorize
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $parentAlbum]);
+
+ /** @var int $ownerId */
+ $ownerId = Auth::id() ?? throw new UnauthenticatedException();
+ $create = new AlbumCreate($ownerId);
+ $new_album = $create->create($this->title, $parentAlbum);
+
+ $this->redirect(route('livewire-gallery-album', ['albumId' => $new_album->id]), true);
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/CreateTag.php b/app/Livewire/Components/Forms/Album/CreateTag.php
new file mode 100644
index 0000000000..c280045ec7
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/CreateTag.php
@@ -0,0 +1,103 @@
+create = resolve(CreateTagAlbum::class);
+ }
+
+ /**
+ * This defines the set of validation rules to be applied on the input.
+ * It would be a good idea to unify (namely reuse) the rules from the JSON api.
+ *
+ * @return array
+ */
+ protected function rules(): array
+ {
+ return AddTagAlbumRuleSet::rules();
+ }
+
+ /**
+ * Mount the component.
+ *
+ * @param array $params
+ *
+ * @return void
+ */
+ public function mount(array $params = []): void
+ {
+ Gate::authorize(AlbumPolicy::CAN_UPLOAD, [AbstractAlbum::class, null]);
+ }
+
+ /**
+ * Call the parametrized rendering.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.add.create-tag');
+ }
+
+ /**
+ * A form has a Submit method.
+ *
+ * @return void
+ */
+ public function submit(): void
+ {
+ // Reset error bag
+ $this->resetErrorBag();
+
+ $this->tags = explode(',', $this->tag);
+
+ // Validate
+ $this->validate();
+
+ // Authorize
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, null]);
+
+ // Create
+ $new_album = $this->create->create($this->title, $this->tags);
+
+ // Do we want refresh or direcly open newly created Album ?
+ $this->close();
+ $this->redirect(route('livewire-gallery-album', ['albumId' => $new_album->id]), true);
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/Delete.php b/app/Livewire/Components/Forms/Album/Delete.php
new file mode 100644
index 0000000000..114a7205e5
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/Delete.php
@@ -0,0 +1,101 @@
+ */
+ #[Locked] public array $albumIDs;
+ #[Locked] public string $parent_id;
+ #[Locked] public string $title = '';
+ #[Locked] public int $num;
+ private AlbumFactory $albumFactory;
+ private DeleteAction $deleteAction;
+
+ public function boot(): void
+ {
+ $this->albumFactory = resolve(AlbumFactory::class);
+ $this->deleteAction = resolve(DeleteAction::class);
+ }
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to delete
+ *
+ * @return void
+ */
+ public function mount(array $params = ['parentID' => null]): void
+ {
+ $id = $params[Params::ALBUM_ID] ?? null;
+ $this->albumIDs = $id !== null ? [$id] : $params[Params::ALBUM_IDS] ?? [];
+ $this->num = count($this->albumIDs);
+
+ if ($this->num === 1) {
+ $this->title = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0])->title;
+ }
+
+ Gate::authorize(AlbumPolicy::CAN_DELETE_ID, [AbstractAlbum::class, $this->albumIDs]);
+ $this->parent_id = $params[Params::PARENT_ID] ?? SmartAlbumType::UNSORTED->value;
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.delete');
+ }
+
+ /**
+ * Execute deletion.
+ *
+ * @return void
+ */
+ public function delete(): void
+ {
+ $this->validate(DeleteAlbumsRuleSet::rules());
+
+ Gate::authorize(AlbumPolicy::CAN_DELETE_ID, [AbstractAlbum::class, $this->albumIDs]);
+
+ $fileDeleter = $this->deleteAction->do($this->albumIDs);
+ App::terminating(fn () => $fileDeleter->do());
+
+ if ($this->parent_id === SmartAlbumType::UNSORTED->value) {
+ $this->redirect(route('livewire-gallery'), true);
+ } else {
+ $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true);
+ }
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/DeletePanel.php b/app/Livewire/Components/Forms/Album/DeletePanel.php
new file mode 100644
index 0000000000..073e99eaa8
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/DeletePanel.php
@@ -0,0 +1,89 @@
+ */
+ #[Locked] public array $albumIDs;
+ #[Locked] public string $title;
+ private AlbumFactory $albumFactory;
+ private DeleteAction $deleteAction;
+
+ public function boot(): void
+ {
+ $this->albumFactory = resolve(AlbumFactory::class);
+ $this->deleteAction = resolve(DeleteAction::class);
+ }
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param BaseAlbum $album to update the attributes of
+ *
+ * @return void
+ */
+ public function mount(BaseAlbum $album): void
+ {
+ Gate::authorize(AlbumPolicy::CAN_DELETE, [AbstractAlbum::class, $album]);
+
+ $this->albumIDs = [$album->id];
+ $this->title = $album->title;
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.delete-panel');
+ }
+
+ /**
+ * Execute deletion.
+ *
+ * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse
+ */
+ public function delete(): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse
+ {
+ $this->validate(DeleteAlbumsRuleSet::rules());
+
+ $baseAlbum = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0], false);
+
+ Gate::authorize(AlbumPolicy::CAN_DELETE, $baseAlbum);
+
+ $parent_id = ($baseAlbum instanceof Album) ? $baseAlbum->parent_id : null;
+
+ $fileDeleter = $this->deleteAction->do([$baseAlbum->id]);
+ App::terminating(fn () => $fileDeleter->do());
+
+ if ($parent_id !== null) {
+ return redirect()->to(route('livewire-gallery-album', ['albumId' => $parent_id]));
+ }
+
+ return redirect()->to(route('livewire-gallery'));
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/Merge.php b/app/Livewire/Components/Forms/Album/Merge.php
new file mode 100644
index 0000000000..e9654f24c5
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/Merge.php
@@ -0,0 +1,134 @@
+ */
+ #[Locked] public array $albumIDs;
+ #[Locked] public string $titleMoved = '';
+ #[Locked] public int $num;
+ // Destination
+ #[Locked] public ?string $albumID = null;
+ #[Locked] public ?string $title = null;
+ #[Locked] public ?int $lft = null;
+ #[Locked] public ?int $rgt = null;
+ private AlbumFactory $albumFactory;
+ private AlbumMerge $mergeAlbums;
+
+ public function boot(): void
+ {
+ $this->albumFactory = resolve(AlbumFactory::class);
+ $this->mergeAlbums = resolve(AlbumMerge::class);
+ }
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to move
+ *
+ * @return void
+ */
+ public function mount(array $params = ['parentID' => null]): void
+ {
+ $id = $params[Params::ALBUM_ID] ?? null;
+ $this->albumIDs = $id !== null ? [$id] : $params[Params::ALBUM_IDS] ?? [];
+ $this->num = count($this->albumIDs);
+
+ if ($this->num === 1) {
+ /** @var Album $album */
+ $album = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0], false);
+ $this->lft = $album->_lft;
+ $this->rgt = $album->_rgt;
+ } elseif ($this->num > 1) {
+ $this->albumID = array_shift($this->albumIDs);
+ $this->title = $this->albumFactory->findBaseAlbumOrFail($this->albumID, false)->title;
+ }
+
+ if (count($this->albumIDs) === 1) {
+ $this->titleMoved = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0], false)->title;
+ }
+
+ Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]);
+ $this->parent_id = $params[Params::PARENT_ID] ?? null;
+ }
+
+ /**
+ * Prepare confirmation step.
+ *
+ * @param string $id
+ * @param string $title
+ *
+ * @return void
+ */
+ public function setAlbum(string $id, string $title): void
+ {
+ $this->albumID = $id;
+ $this->title = $title;
+ }
+
+ public function submit(): void
+ {
+ $this->albumID = $this->albumID === '' ? null : $this->albumID;
+
+ $this->validate(MergeAlbumsRuleSet::rules());
+ Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]);
+
+ /** @var ?Album $album */
+ $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID);
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $album]);
+
+ // `findOrFail` returns a union type, but we know that it returns the
+ // correct collection in this case
+ /** @var Collection $albums */
+ $albums = Album::query()->findOrFail($this->albumIDs);
+
+ $this->mergeAlbums->do($album, $albums);
+
+ if ($this->parent_id !== null) {
+ $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true);
+ } else {
+ $this->redirect(route('livewire-gallery'), true);
+ }
+ $this->close();
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.merge');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/Move.php b/app/Livewire/Components/Forms/Album/Move.php
new file mode 100644
index 0000000000..24ddcd49e3
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/Move.php
@@ -0,0 +1,127 @@
+ */
+ #[Locked] public array $albumIDs;
+ #[Locked] public string $titleMoved = '';
+ #[Locked] public int $num;
+ // Destination
+ #[Locked] public ?string $albumID = null;
+ #[Locked] public ?string $title = null;
+ #[Locked] public int $lft;
+ #[Locked] public int $rgt;
+ private AlbumFactory $albumFactory;
+ private AlbumMove $moveAlbums;
+
+ public function boot(): void
+ {
+ $this->albumFactory = resolve(AlbumFactory::class);
+ $this->moveAlbums = resolve(AlbumMove::class);
+ }
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to move
+ *
+ * @return void
+ */
+ public function mount(array $params = ['parentID' => null]): void
+ {
+ $id = $params[Params::ALBUM_ID] ?? null;
+ $this->albumIDs = $id !== null ? [$id] : $params[Params::ALBUM_IDS] ?? [];
+ $this->num = count($this->albumIDs);
+
+ if ($this->num === 1) {
+ /** @var Album $album */
+ $album = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0], false);
+ $this->titleMoved = $album->title;
+ $this->lft = $album->_lft;
+ $this->rgt = $album->_rgt;
+ }
+
+ Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]);
+ $this->parent_id = $params[Params::PARENT_ID] ?? null;
+ }
+
+ /**
+ * Prepare confirmation step.
+ *
+ * @param string $id
+ * @param string $title
+ *
+ * @return void
+ */
+ public function setAlbum(string $id, string $title): void
+ {
+ $this->albumID = $id;
+ $this->title = $title;
+ }
+
+ public function submit(): void
+ {
+ $this->albumID = $this->albumID === '' ? null : $this->albumID;
+
+ $this->validate(MoveAlbumsRuleSet::rules());
+ Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]);
+
+ /** @var ?Album $album */
+ $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID);
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $album]);
+
+ // `findOrFail` returns a union type, but we know that it returns the
+ // correct collection in this case
+ /** @var Collection $albums */
+ $albums = Album::query()->findOrFail($this->albumIDs);
+ $this->moveAlbums->do($album, $albums);
+
+ if ($this->parent_id !== null) {
+ $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true);
+ } else {
+ $this->redirect(route('livewire-gallery'), true);
+ }
+ $this->close();
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.move');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/MovePanel.php b/app/Livewire/Components/Forms/Album/MovePanel.php
new file mode 100644
index 0000000000..38041ca154
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/MovePanel.php
@@ -0,0 +1,111 @@
+ */
+ #[Locked] public array $albumIDs;
+ #[Locked] public ?string $titleMoved;
+ // Destination
+ #[Locked] public ?string $albumID = null;
+ #[Locked] public ?string $title = null;
+ #[Locked] public ?string $parent_id = null;
+ #[Locked] public int $lft;
+ #[Locked] public int $rgt;
+ private AlbumMove $moveAlbums;
+
+ public function boot(): void
+ {
+ $this->moveAlbums = resolve(AlbumMove::class);
+ }
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param Album $album to update the attributes of
+ *
+ * @return void
+ */
+ public function mount(Album $album): void
+ {
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $album]);
+
+ $this->albumIDs = [$album->id];
+ $this->titleMoved = $album->title;
+ $this->lft = $album->_lft;
+ $this->rgt = $album->_rgt;
+ $this->parent_id = $album->parent_id;
+ }
+
+ /**
+ * Prepare confirmation step.
+ *
+ * @param string $id
+ * @param string $title
+ *
+ * @return void
+ */
+ public function setAlbum(string $id, string $title)
+ {
+ $this->albumID = $id;
+ $this->title = $title;
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.move-panel');
+ }
+
+ /**
+ * Execute transfer of ownership.
+ */
+ public function move(): void
+ {
+ $this->areValid(MoveAlbumsRuleSet::rules());
+
+ // set default for root.
+ $this->albumID = $this->albumID === '' ? null : $this->albumID;
+ Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]);
+
+ /** @var ?Album $album */
+ $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID);
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $album]);
+
+ // `findOrFail` returns a union type, but we know that it returns the
+ // correct collection in this case
+ /** @var Collection $albums */
+ $albums = Album::query()->findOrFail($this->albumIDs);
+ $this->moveAlbums->do($album, $albums);
+
+ if ($this->parent_id !== null) {
+ $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true);
+ } else {
+ $this->redirect(route('livewire-gallery'), true);
+ }
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/Properties.php b/app/Livewire/Components/Forms/Album/Properties.php
new file mode 100644
index 0000000000..108544ea0d
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/Properties.php
@@ -0,0 +1,137 @@
+albumID = $album->id;
+ $this->title = $album->title;
+ $this->description = $album->description ?? '';
+ $this->sorting_column = $album->sorting?->column->value ?? '';
+ $this->sorting_order = $album->sorting?->order->value ?? '';
+ if ($album instanceof ModelsAlbum) {
+ $this->license = $album->license->value;
+ }
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.properties');
+ }
+
+ /**
+ * Update Username & Password of current user.
+ */
+ public function submit(AlbumFactory $albumFactory): void
+ {
+ $rules = [
+ RequestAttribute::TITLE_ATTRIBUTE => ['required', new TitleRule()],
+ RequestAttribute::LICENSE_ATTRIBUTE => ['required', new Enum(LicenseType::class)],
+ ...SetAlbumDescriptionRuleSet::rules(),
+ ...SetAlbumSortingRuleSet::rules(),
+ ];
+
+ if (!$this->areValid($rules)) {
+ return;
+ }
+
+ $baseAlbum = $albumFactory->findBaseAlbumOrFail($this->albumID, false);
+ Gate::authorize(AlbumPolicy::CAN_EDIT, $baseAlbum);
+
+ $baseAlbum->title = $this->title;
+ $baseAlbum->description = $this->description;
+
+ // Not super pretty but whatever.
+ $column = ColumnSortingPhotoType::tryFrom($this->sorting_column);
+ $order = OrderSortingType::tryFrom($this->sorting_order);
+ $sortingCriterion = $column === null ? null : new PhotoSortingCriterion($column->toColumnSortingType(), $order);
+
+ $baseAlbum->sorting = $sortingCriterion;
+
+ if ($baseAlbum instanceof ModelsAlbum) {
+ $baseAlbum->license = LicenseType::from($this->license);
+ }
+
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ $baseAlbum->save();
+ }
+
+ /**
+ * Return computed property so that it does not stay in memory.
+ *
+ * @return array column sorting
+ */
+ final public function getPhotoSortingColumnsProperty(): array
+ {
+ // ? Dark magic: The ... will expand the array.
+ return ['' => '-', ...ColumnSortingPhotoType::localized()];
+ }
+
+ /**
+ * Return computed property so that it does not stay in memory.
+ *
+ * @return array order
+ */
+ final public function getSortingOrdersProperty(): array
+ {
+ // ? Dark magic: The ... will expand the array.
+ return ['' => '-', ...OrderSortingType::localized()];
+ }
+
+ final public function getLicensesProperty(): array
+ {
+ return LicenseType::localized();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/Rename.php b/app/Livewire/Components/Forms/Album/Rename.php
new file mode 100644
index 0000000000..b830776f26
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/Rename.php
@@ -0,0 +1,93 @@
+ */
+ #[Locked] public array $albumIDs;
+ #[Locked] public int $num;
+ public string $title = '';
+
+ private AlbumFactory $albumFactory;
+
+ public function boot(): void
+ {
+ $this->albumFactory = resolve(AlbumFactory::class);
+ }
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to move
+ *
+ * @return void
+ */
+ public function mount(array $params = ['parentID' => null]): void
+ {
+ $id = $params[Params::ALBUM_ID] ?? null;
+ $this->albumIDs = $id !== null ? [$id] : $params[Params::ALBUM_IDS] ?? [];
+ $this->num = count($this->albumIDs);
+
+ if ($this->num === 1) {
+ $this->title = $this->albumFactory->findBaseAlbumOrFail($this->albumIDs[0], false)->title;
+ }
+
+ Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]);
+ $this->parent_id = $params[Params::PARENT_ID] ?? SmartAlbumType::UNSORTED->value;
+ }
+
+ /**
+ * Rename.
+ *
+ * @return void
+ */
+ public function submit(): void
+ {
+ $this->validate(SetAlbumsTitleRuleSet::rules());
+ Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, $this->albumIDs]);
+ BaseAlbumImpl::query()->whereIn('id', $this->albumIDs)->update(['title' => $this->title]);
+
+ $this->close();
+ $this->dispatch('reloadPage')->to(GalleryAlbum::class);
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.rename');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/SearchAlbum.php b/app/Livewire/Components/Forms/Album/SearchAlbum.php
new file mode 100644
index 0000000000..2a71f53579
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/SearchAlbum.php
@@ -0,0 +1,182 @@
+albumListSaved = $this->getAlbumsListWithPath($lft, $rgt, $parent_id);
+ }
+
+ /**
+ * Give the tree of albums owned by the user.
+ *
+ * @return Collection
+ */
+ public function getAlbumListProperty(): Collection
+ {
+ $filtered = collect($this->albumListSaved);
+ if ($this->search !== null && trim($this->search) !== '') {
+ return $filtered->filter(function (array $album) {
+ return Str::contains($album['title'], ltrim($this->search), true);
+ });
+ }
+
+ return $filtered;
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.search-album');
+ }
+
+ private function getAlbumsListWithPath(?int $lft, ?int $rgt, ?string $parent_id): array
+ {
+ $albumQueryPolicy = resolve(AlbumQueryPolicy::class);
+ $unfiltered = $albumQueryPolicy->applyReachabilityFilter(
+ // We remove all sub albums
+ // Otherwise it would create cyclic dependency
+ Album::query()
+ ->when($lft !== null,
+ fn ($q) => $q->where('_lft', '<', $lft)->orWhere('_rgt', '>', $rgt))
+ );
+ $sorting = AlbumSortingCriterion::createDefault();
+ $query = (new SortingDecorator($unfiltered))
+ ->orderBy($sorting->column, $sorting->order);
+
+ /** @var NsCollection $albums */
+ $albums = $query->get();
+ $tree = $albums->toTree(null);
+
+ $flat_tree = $this->flatten($tree);
+
+ // Prepend with the possibility to move to root if parent is not already root.
+ if ($parent_id !== null) {
+ array_unshift(
+ $flat_tree,
+ [
+ 'id' => null,
+ 'title' => __('lychee.ROOT'),
+ 'original' => __('lychee.ROOT'),
+ 'short_title' => __('lychee.ROOT'),
+ 'thumb' => 'img/no_images.svg',
+ ]
+ );
+ }
+
+ return $flat_tree;
+ }
+
+ /**
+ * Flatten the tree and create bread crumb paths.
+ *
+ * @param mixed $collection
+ * @param string $prefix
+ *
+ * @return array
+ */
+ private function flatten($collection, $prefix = ''): array
+ {
+ $flatArray = [];
+ foreach ($collection as $node) {
+ $title = $prefix . ($prefix !== '' ? '/' : '') . $node->title;
+ $short_title = $this->shorten($title);
+ $flatArray[] = [
+ 'id' => $node->id,
+ 'title' => $title,
+ 'original' => $node->title,
+ 'short_title' => $short_title,
+ 'thumb' => $node->thumb?->thumbUrl ?? 'img/no_images.svg',
+ ];
+ if ($node->children !== null) {
+ $flatArray = array_merge($flatArray, $this->flatten($node->children, $title));
+ unset($node->children);
+ }
+ }
+
+ return $flatArray;
+ }
+
+ /**
+ * shorten the title to reach a targetted length.
+ *
+ * @param string $title to shorten
+ *
+ * @return string short version with elipsis
+ */
+ private function shorten(string $title): string
+ {
+ $len = strlen($title);
+
+ if ($len < self::SHORTEN_BY) {
+ return $title;
+ }
+ /** @var Collection $title_split */
+ $title_split = collect(explode('/', $title));
+ $last_elem = $title_split->last();
+ $len_last_elem = strlen($last_elem);
+
+ $num_chunks = $title_split->count() - 1;
+
+ if ($num_chunks === 0) {
+ return Str::limit($last_elem, self::SHORTEN_BY, '…');
+ }
+
+ $title_split = $title_split->take($num_chunks);
+ /** @var Collection $title_lengths */
+ $title_lengths = $title_split->map(fn ($v) => strlen($v));
+
+ // find best target length.
+
+ $len_to_reduce = self::SHORTEN_BY - $len_last_elem - 2 * $num_chunks;
+ $unit_target_len = (int) ceil($len_to_reduce / $num_chunks);
+
+ do {
+ $unit_target_len--;
+ $title_lengths = $title_lengths->map(fn ($v) => $v <= $unit_target_len ? $v : $unit_target_len + 1);
+ $resulting_len = $title_lengths->sum();
+ } while ($len_to_reduce < $resulting_len);
+
+ $title_split = $title_split->map(fn ($v) => Str::limit($v, $unit_target_len, '…'));
+
+ return implode('/', $title_split->all()) . '/' . $last_elem;
+ }
+
+ public function placeholder(): string
+ {
+ return "Loading album list...
";
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/ShareWith.php b/app/Livewire/Components/Forms/Album/ShareWith.php
new file mode 100644
index 0000000000..f853041c19
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/ShareWith.php
@@ -0,0 +1,155 @@
+album = $album;
+ Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, $this->album]);
+ $this->resetData();
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.share-with');
+ }
+
+ /**
+ * Return the list of users to share with.
+ * This is basically:
+ * - Not the current user.
+ * - Not the owner of the album (just to be sure)
+ * - Not the admins (they already have all access)
+ * - Not users which have already been shared.
+ *
+ * @return array
+ *
+ * @throws UnauthorizedException
+ * @throws QueryBuilderException
+ */
+ public function getUserListProperty(): array
+ {
+ $alreadySelected = collect($this->perms)
+ ->map(fn (AccessPermission $perm) => $perm->user_id)
+ ->all();
+
+ $id = Auth::id() ?? throw new UnauthorizedException();
+ $filtered = User::query()
+ ->where('id', '<>', $id)
+ ->where('id', '<>', $this->album->owner_id)
+ ->where('may_administrate', '<>', true)
+ ->whereNotIn('id', $alreadySelected)
+ ->orderBy('username', 'ASC')
+ ->get()
+ ->map(fn (User $usr) => ['id' => $usr->id, 'username' => $usr->username]);
+
+ if ($this->search !== null && trim($this->search) !== '') {
+ return $filtered->filter(function (array $album) {
+ return Str::contains($album['username'], ltrim($this->search), true);
+ })->all();
+ }
+
+ return $filtered->all();
+ }
+
+ public function add(): void
+ {
+ Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, $this->album]);
+
+ $perm = new AccessPermission();
+ $perm->user_id = $this->userID;
+ $perm->base_album_id = $this->album->id;
+ $perm->grants_full_photo_access = $this->grants_full_photo_access;
+ $perm->grants_download = $this->grants_download;
+ $perm->grants_upload = $this->grants_upload;
+ $perm->grants_edit = $this->grants_edit;
+ $perm->grants_delete = $this->grants_delete;
+ $perm->save();
+
+ $this->resetData();
+ }
+
+ public function select(int $userID, string $username): void
+ {
+ $this->userID = $userID;
+ $this->username = $username;
+ }
+
+ public function clearUsername(): void
+ {
+ $this->userID = null;
+ $this->username = null;
+ }
+
+ private function resetData(): void
+ {
+ $this->perms = $this->album->access_permissions()->with(['user', 'album'])->whereNotNull('user_id')->get()->all();
+ $this->grants_download = Configs::getValueAsBool('grants_download');
+ $this->grants_full_photo_access = Configs::getValueAsBool('grants_full_photo_access');
+ $this->grants_upload = false;
+ $this->grants_edit = false;
+ $this->grants_delete = false;
+ $this->search = null;
+ $this->userID = null;
+ $this->username = null;
+ }
+
+ public function delete(int $id): void
+ {
+ $perm = AccessPermission::with('album')->findOrFail($id);
+ Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, $perm->album]);
+
+ AccessPermission::query()->where('id', '=', $id)->delete();
+ $this->resetData();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/ShareWithLine.php b/app/Livewire/Components/Forms/Album/ShareWithLine.php
new file mode 100644
index 0000000000..e42d1483d6
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/ShareWithLine.php
@@ -0,0 +1,83 @@
+album]);
+
+ $this->album_title = $album_title;
+ $this->perm = $perm;
+ $this->username = $perm->user->username;
+ $this->grants_full_photo_access = $perm->grants_full_photo_access;
+ $this->grants_download = $perm->grants_download;
+ $this->grants_upload = $perm->grants_upload;
+ $this->grants_edit = $perm->grants_edit;
+ $this->grants_delete = $perm->grants_delete;
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.share-with-line');
+ }
+
+ /**
+ * This runs after a wired property is updated.
+ *
+ * @param mixed $field
+ * @param mixed $value
+ *
+ * @return void
+ */
+ public function updated($field, $value): void
+ {
+ Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, $this->perm->album]);
+
+ $this->perm->grants_full_photo_access = $this->grants_full_photo_access;
+ $this->perm->grants_download = $this->grants_download;
+ $this->perm->grants_upload = $this->grants_upload;
+ $this->perm->grants_edit = $this->grants_edit;
+ $this->perm->grants_delete = $this->grants_delete;
+ $this->perm->save();
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/Transfer.php b/app/Livewire/Components/Forms/Album/Transfer.php
new file mode 100644
index 0000000000..1c6e0aa785
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/Transfer.php
@@ -0,0 +1,121 @@
+albumID = $album->id;
+ $this->title = $album->title;
+ $this->current_owner = $album->owner_id;
+ $this->username = $this->getUsersProperty()[0];
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.transfer');
+ }
+
+ /**
+ * Return a table with the user_id and associated username.
+ *
+ * @return array list of usernames
+ */
+ public function getUsersProperty(): array
+ {
+ return User::query()
+ ->select('username')
+ ->where('id', '<>', $this->current_owner)
+ ->orderBy('id', 'ASC')
+ ->pluck('username')
+ ->all();
+ }
+
+ /**
+ * Execute transfer of ownership.
+ *
+ * @param AlbumFactory $albumFactory
+ *
+ * @return RedirectResponse|View
+ */
+ public function transfer(AlbumFactory $albumFactory)
+ {
+ $this->areValid([
+ 'albumID' => ['required', new AlbumIDRule(false)],
+ 'username' => ['required', new UsernameRule()],
+ ]);
+
+ $baseAlbum = $albumFactory->findBaseAlbumOrFail($this->albumID, false);
+
+ // We use CAN DELETE because it is pretty much the same. Only the owner and admin can transfer ownership
+ Gate::authorize(AlbumPolicy::CAN_DELETE, $baseAlbum);
+
+ $userId = User::query()
+ ->select(['id'])
+ ->where('username', '=', $this->username)
+ ->firstOrFail(['id'])->id;
+
+ $baseAlbum->owner_id = $userId;
+ $baseAlbum->save();
+
+ // If this is an Album, we also need to fix the children and photos ownership
+ if ($baseAlbum instanceof Album) {
+ $baseAlbum->makeRoot();
+ $baseAlbum->save();
+ $baseAlbum->fixOwnershipOfChildren();
+ }
+
+ // If we are not an administrator, this mean we no longer have access.
+ if (Auth::user()->may_administrate !== true) {
+ return redirect()->to(route('livewire-gallery'));
+ }
+
+ // Remount the component and re-render.
+ $this->mount($baseAlbum);
+ $this->notify('Transfer successful!');
+
+ return $this->render();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/UnlockAlbum.php b/app/Livewire/Components/Forms/Album/UnlockAlbum.php
new file mode 100644
index 0000000000..4dbac54c15
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/UnlockAlbum.php
@@ -0,0 +1,76 @@
+unlock = resolve(Unlock::class);
+ $this->albumFactory = resolve(AlbumFactory::class);
+ }
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param $albumID album to unlock
+ *
+ * @return void
+ */
+ public function mount(string $albumID): void
+ {
+ $this->albumID = $albumID;
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.unlock-album');
+ }
+
+ /**
+ * Method called from the front-end to unlock the album when given a password.
+ * This will throw an exception on failure!
+ *
+ * @return void
+ */
+ public function submit(): void
+ {
+ if (!$this->areValid(UnlockAlbumRuleSet::rules())) {
+ return;
+ }
+
+ $album = $this->albumFactory->findBaseAlbumOrFail($this->albumID);
+ $this->unlock->do($album, $this->password);
+ $this->redirect(route('livewire-gallery-album', ['albumId' => $this->albumID]));
+ }
+}
diff --git a/app/Livewire/Components/Forms/Album/Visibility.php b/app/Livewire/Components/Forms/Album/Visibility.php
new file mode 100644
index 0000000000..71fabdd06a
--- /dev/null
+++ b/app/Livewire/Components/Forms/Album/Visibility.php
@@ -0,0 +1,147 @@
+albumID = $album->id;
+ $this->is_nsfw = $album->is_nsfw;
+
+ /** @var AccessPermission $perm */
+ $perm = $album->public_permissions();
+
+ $this->is_public = $perm !== null;
+ if ($this->is_public) {
+ $this->setPublic($perm);
+ }
+ }
+
+ /**
+ * When we initialize, we also need to update the public attributes of the components.
+ *
+ * @param AccessPermission $perm
+ *
+ * @return void
+ */
+ private function setPublic(AccessPermission $perm): void
+ {
+ $this->grants_full_photo_access = $perm->grants_full_photo_access;
+ $this->is_link_required = $perm->is_link_required;
+ $this->grants_download = $perm->grants_download;
+ $this->is_password_required = $perm->password !== null;
+ // ! We do NOT load the password as we do not want to expose it.
+ }
+
+ /**
+ * When we set to Private, we automatically reset the all the attributes to false.
+ * The AccessPermission object associated will be destroyed later, as such it is better to reset the data.
+ *
+ * @return void
+ */
+ private function setPrivate(): void
+ {
+ $this->grants_full_photo_access = false;
+ $this->is_link_required = false;
+ $this->is_password_required = false;
+ $this->grants_download = false;
+ $this->password = null;
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.album.visibility');
+ }
+
+ /**
+ * If any attributes are changed, we call this.
+ *
+ * @return void
+ */
+ public function updated()
+ {
+ $albumFactory = resolve(AlbumFactory::class);
+ $baseAlbum = $albumFactory->findBaseAlbumOrFail($this->albumID, false);
+
+ $this->validate(SetAlbumProtectionPolicyRuleSet::rules());
+
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $baseAlbum]);
+
+ if (!$this->is_public) {
+ $this->setPrivate();
+ }
+
+ $albumProtectionPolicy = new AlbumProtectionPolicy(
+ is_public: $this->is_public,
+ is_link_required: $this->is_link_required,
+ is_nsfw: $this->is_nsfw,
+ grants_full_photo_access: $this->grants_full_photo_access,
+ grants_download: $this->grants_download,
+ );
+
+ // No empty string.
+ if ($this->password === '') {
+ $this->password = null;
+ }
+
+ // If password is required but password is empty this means that we do not want to change current password.
+ $passwordUpdateRequested = $this->is_password_required && $this->password !== null;
+
+ // Override password if it is no longer required
+ if (!$this->is_password_required) {
+ $this->password = null;
+ $passwordUpdateRequested = true;
+ }
+
+ $setProtectionPolicy = resolve(SetProtectionPolicy::class);
+ $setProtectionPolicy->do(
+ $baseAlbum,
+ $albumProtectionPolicy,
+ $passwordUpdateRequested,
+ $this->password
+ );
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ }
+}
diff --git a/app/Livewire/Components/Forms/Confirms/SaveAll.php b/app/Livewire/Components/Forms/Confirms/SaveAll.php
new file mode 100644
index 0000000000..c3dc041d90
--- /dev/null
+++ b/app/Livewire/Components/Forms/Confirms/SaveAll.php
@@ -0,0 +1,47 @@
+closeModal();
+ $this->dispatch('saveAll')->to(AllSettings::class);
+ }
+
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Photo/CopyTo.php b/app/Livewire/Components/Forms/Photo/CopyTo.php
new file mode 100644
index 0000000000..a02d4f26b9
--- /dev/null
+++ b/app/Livewire/Components/Forms/Photo/CopyTo.php
@@ -0,0 +1,124 @@
+ */
+ #[Locked] public array $photoIDs;
+ #[Locked] public string $title = '';
+ // Destination
+ #[Locked] public ?string $albumID = null;
+ #[Locked] public ?string $albumTitle = null;
+ #[Locked] public int $num;
+ /**
+ * Boot method.
+ */
+ public function boot(): void
+ {
+ $this->duplicate = resolve(Duplicate::class);
+ }
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move
+ *
+ * @return void
+ */
+ public function mount(array $params = ['albumID' => null]): void
+ {
+ $id = $params[Params::PHOTO_ID] ?? null;
+ $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? [];
+ $this->num = count($this->photoIDs);
+
+ if ($this->num === 1) {
+ /** @var Photo $photo */
+ $photo = Photo::query()->findOrFail($this->photoIDs[0]);
+ $this->title = $photo->title;
+ }
+
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]);
+ $this->parent_id = $params[Params::ALBUM_ID] ?? SmartAlbumType::UNSORTED->value;
+ }
+
+ /**
+ * Prepare confirmation step.
+ *
+ * @param string $id
+ * @param string $title
+ *
+ * @return void
+ */
+ public function setAlbum(string $id, string $title): void
+ {
+ $this->albumID = $id;
+ $this->title = $title;
+
+ $this->validate(DuplicatePhotosRuleSet::rules());
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]);
+
+ $this->albumID = $this->albumID === '' ? null : $this->albumID;
+
+ /** @var ?Album $album */
+ $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID);
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [Album::class, $album]);
+
+ $photos = Photo::query()->with(['size_variants'])->findOrFail($this->photoIDs);
+
+ $copiedPhotos = $this->duplicate->do($photos, $album);
+
+ $notify = new UserNotify();
+
+ $copiedPhotos->each(fn ($photo, $k) => $notify->do($photo));
+
+ // We stay in current album.
+ $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true);
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.photo.copyTo');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Photo/Delete.php b/app/Livewire/Components/Forms/Photo/Delete.php
new file mode 100644
index 0000000000..ebf8855f3d
--- /dev/null
+++ b/app/Livewire/Components/Forms/Photo/Delete.php
@@ -0,0 +1,95 @@
+ */
+ #[Locked] public array $photoIDs;
+ #[Locked] public ?string $albumId = null;
+ #[Locked] public string $title = '';
+ #[Locked] public int $num;
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param array{albumID:?string,photoID?:string,photoIDs?:array} $params to delete
+ *
+ * @return void
+ */
+ public function mount(array $params = ['albumID' => null]): void
+ {
+ $id = $params[Params::PHOTO_ID] ?? null;
+ $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? [];
+
+ Gate::authorize(PhotoPolicy::CAN_DELETE_BY_ID, [Photo::class, $this->photoIDs]);
+
+ $this->num = count($this->photoIDs);
+
+ if ($this->num === 1) {
+ /** @var Photo $photo */
+ $photo = Photo::query()->findOrFail($this->photoIDs[0]);
+ $this->title = $photo->title;
+ }
+
+ $this->albumId = $params[Params::ALBUM_ID] ?? null;
+ $this->num = count($this->photoIDs);
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.photo.delete');
+ }
+
+ /**
+ * Execute deletion.
+ *
+ * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse
+ */
+ public function submit(DeleteAction $delete): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse
+ {
+ $this->validate(DeletePhotosRuleSet::rules());
+
+ Gate::authorize(PhotoPolicy::CAN_DELETE_BY_ID, [Photo::class, $this->photoIDs]);
+
+ $fileDeleter = $delete->do($this->photoIDs);
+ App::terminating(fn () => $fileDeleter->do());
+
+ return redirect()->to(route('livewire-gallery-album', ['albumId' => $this->albumId ?? SmartAlbumType::UNSORTED->value]));
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Photo/Download.php b/app/Livewire/Components/Forms/Photo/Download.php
new file mode 100644
index 0000000000..7ff0b67f27
--- /dev/null
+++ b/app/Livewire/Components/Forms/Photo/Download.php
@@ -0,0 +1,69 @@
+ */
+ #[Locked] public array $photoIDs;
+ public Photo $photo;
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param array{albumID:?string,photoID?:string,photoIDs?:array} $params to download
+ *
+ * @return void
+ */
+ public function mount(array $params = ['albumID' => null]): void
+ {
+ $id = $params[Params::PHOTO_ID] ?? null;
+ $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? [];
+ $num = count($this->photoIDs);
+
+ if ($num === 1) {
+ $this->photo = Photo::query()->findOrFail($this->photoIDs[0]);
+ Gate::authorize(PhotoPolicy::CAN_DOWNLOAD, [Photo::class, $this->photo]);
+ } else {
+ $this->redirect(route('photo_download', ['kind' => DownloadVariantType::ORIGINAL->value]) . '&photoIDs=' . implode(',', $this->photoIDs));
+ }
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.photo.download');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Photo/Move.php b/app/Livewire/Components/Forms/Photo/Move.php
new file mode 100644
index 0000000000..eaea905ce2
--- /dev/null
+++ b/app/Livewire/Components/Forms/Photo/Move.php
@@ -0,0 +1,118 @@
+ */
+ #[Locked] public array $photoIDs;
+ #[Locked] public string $title = '';
+ #[Locked] public int $num;
+ // Destination
+ #[Locked] public ?string $albumID = null;
+ #[Locked] public ?string $albumTitle = null;
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move
+ *
+ * @return void
+ */
+ public function mount(array $params = ['albumID' => null]): void
+ {
+ $id = $params[Params::PHOTO_ID] ?? null;
+ $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? [];
+ $this->num = count($this->photoIDs);
+
+ if ($this->num === 1) {
+ /** @var Photo $photo */
+ $photo = Photo::query()->findOrFail($this->photoIDs[0]);
+ $this->title = $photo->title;
+ }
+
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]);
+ $this->parent_id = $params[Params::ALBUM_ID] ?? SmartAlbumType::UNSORTED->value;
+ }
+
+ /**
+ * Prepare confirmation step.
+ *
+ * @param string $id
+ * @param string $title
+ *
+ * @return void
+ */
+ public function setAlbum(string $id, string $title): void
+ {
+ $this->albumID = $id;
+ $this->title = $title;
+
+ $this->validate(MovePhotosRuleSet::rules());
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]);
+
+ $this->albumID = $this->albumID === '' ? null : $this->albumID;
+
+ /** @var ?Album $album */
+ $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID);
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [Album::class, $album]);
+
+ $photos = Photo::query()->findOrFail($this->photoIDs);
+
+ $notify = new UserNotify();
+
+ /** @var Photo $photo */
+ foreach ($photos as $photo) {
+ $photo->album_id = $album?->id;
+ // Avoid unnecessary DB request, when we access the album of a
+ // photo later (e.g. when a notification is sent).
+ $photo->setRelation('album', $album);
+ if ($album !== null) {
+ $photo->owner_id = $album->owner_id;
+ }
+ $photo->save();
+ $notify->do($photo);
+ }
+
+ // We stay in current album.
+ $this->redirect(route('livewire-gallery-album', ['albumId' => $this->parent_id]), true);
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.photo.move');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Photo/Rename.php b/app/Livewire/Components/Forms/Photo/Rename.php
new file mode 100644
index 0000000000..4993bd0366
--- /dev/null
+++ b/app/Livewire/Components/Forms/Photo/Rename.php
@@ -0,0 +1,83 @@
+ */
+ #[Locked] public array $photoIDs;
+ #[Locked] public int $num;
+ public string $title = '';
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move
+ *
+ * @return void
+ */
+ public function mount(array $params = ['albumID' => null]): void
+ {
+ $id = $params[Params::PHOTO_ID] ?? null;
+ $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? [];
+ $this->num = count($this->photoIDs);
+
+ if ($this->num === 1) {
+ /** @var Photo $photo */
+ $photo = Photo::query()->findOrFail($this->photoIDs[0]);
+ $this->title = $photo->title;
+ }
+
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]);
+ }
+
+ /**
+ * Rename.
+ *
+ * @return void
+ */
+ public function submit(): void
+ {
+ $this->validate(SetPhotosTitleRuleSet::rules());
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]);
+ Photo::query()->whereIn('id', $this->photoIDs)->update(['title' => $this->title]);
+
+ $this->close();
+ $this->dispatch('reloadPage')->to(GalleryAlbum::class);
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.photo.rename');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Photo/Tag.php b/app/Livewire/Components/Forms/Photo/Tag.php
new file mode 100644
index 0000000000..71f7ac24a8
--- /dev/null
+++ b/app/Livewire/Components/Forms/Photo/Tag.php
@@ -0,0 +1,94 @@
+ */
+ #[Locked] public array $photoIDs;
+ #[Locked] public array $tags = [];
+ #[Locked] public int $num;
+ public bool $shall_override = false;
+ public ?string $tag = '';
+
+ /**
+ * This is the equivalent of the constructor for Livewire Components.
+ *
+ * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move
+ *
+ * @return void
+ */
+ public function mount(array $params = ['albumID' => null]): void
+ {
+ $id = $params[Params::PHOTO_ID] ?? null;
+ $this->photoIDs = $id !== null ? [$id] : $params[Params::PHOTO_IDS] ?? [];
+ $this->num = count($this->photoIDs);
+
+ if ($this->num === 1) {
+ /** @var Photo $photo */
+ $photo = Photo::query()->findOrFail($this->photoIDs[0]);
+ $this->tag = implode(', ', $photo->tags);
+ }
+
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]);
+ }
+
+ /**
+ * Tag.
+ *
+ * @return void
+ */
+ public function submit(): void
+ {
+ $this->tags = collect(explode(',', $this->tag))->map(fn ($v) => trim($v))->filter(fn ($v) => $v !== '')->all();
+
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->photoIDs]);
+
+ $photos = Photo::query()->whereIn('id', $this->photoIDs)->get();
+ foreach ($photos as $photo) {
+ if ($this->shall_override) {
+ $photo->tags = $this->tags;
+ } else {
+ $photo->tags = array_unique(array_merge($photo->tags, $this->tags));
+ }
+ $photo->save();
+ }
+
+ $this->close();
+ $this->dispatch('reloadPage')->to(GalleryAlbum::class);
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.photo.tag');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+}
diff --git a/app/Livewire/Components/Forms/Profile/GetApiToken.php b/app/Livewire/Components/Forms/Profile/GetApiToken.php
new file mode 100644
index 0000000000..7f9e528942
--- /dev/null
+++ b/app/Livewire/Components/Forms/Profile/GetApiToken.php
@@ -0,0 +1,111 @@
+tokenReset = resolve(TokenReset::class);
+ $this->tokenDisable = resolve(TokenDisable::class);
+ }
+
+ /**
+ * Mount the current data of the user.
+ * $token is kept empty in order to avoid revealing the data.
+ *
+ * @return void
+ */
+ public function mount(): void
+ {
+ $user = Auth::user() ?? throw new UnauthenticatedException();
+
+ $this->token = __('lychee.TOKEN_NOT_AVAILABLE');
+ $this->isDisabled = true;
+
+ if ($user->token === null) {
+ $this->token = __('lychee.DISABLED_TOKEN_STATUS_MSG');
+ }
+ }
+
+ /**
+ * Renders the modal content.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.profile.get-api-token');
+ }
+
+ /**
+ * Add an handle to close the modal form from a user-land call.
+ *
+ * @return void
+ */
+ public function close(): void
+ {
+ $this->closeModal();
+ }
+
+ /**
+ * Method call from front-end to reset the Token.
+ * We generate a new one on the fly and display it.
+ *
+ * @return void
+ */
+ public function resetToken(): void
+ {
+ /**
+ * Authorize the request.
+ */
+ $this->authorize(UserPolicy::CAN_EDIT, [User::class]);
+
+ $this->token = $this->tokenReset->do();
+ $this->isDisabled = false;
+ }
+
+ /**
+ * Method call from front-end to disable the token.
+ * We simply erase the current one.
+ *
+ * @return void
+ */
+ public function disableToken(): void
+ {
+ /**
+ * Authorize the request.
+ */
+ $this->authorize(UserPolicy::CAN_EDIT, [User::class]);
+
+ $this->tokenDisable->do();
+ $this->token = __('lychee.DISABLED_TOKEN_STATUS_MSG');
+ $this->isDisabled = true;
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Profile/ManageSecondFactor.php b/app/Livewire/Components/Forms/Profile/ManageSecondFactor.php
new file mode 100644
index 0000000000..ab9c9d2921
--- /dev/null
+++ b/app/Livewire/Components/Forms/Profile/ManageSecondFactor.php
@@ -0,0 +1,89 @@
+ 'required|string|min:5|max:255'];
+ }
+
+ /**
+ * Just mount the component with the required WebAuthn Credentials.
+ *
+ * @param WebAuthnCredential $credential
+ *
+ * @return void
+ */
+ public function mount(WebAuthnCredential $credential): void
+ {
+ $this->authorize(UserPolicy::CAN_EDIT, [User::class]);
+
+ if ($credential->authenticatable_id !== (Auth::id() ?? throw new UnauthenticatedException())) {
+ throw new UnauthorizedException();
+ }
+
+ $this->credential = $credential;
+ $this->alias = $credential->alias ?? Str::substr($credential->id, 0, 30);
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.profile.manage-second-factor');
+ }
+
+ /**
+ * This runs after a wired property is updated.
+ *
+ * @param mixed $field
+ * @param mixed $value
+ *
+ * @return void
+ */
+ public function updated($field, $value): void
+ {
+ if (!$this->areValid($this->rules())) {
+ $this->has_error = true;
+
+ return;
+ }
+
+ $this->has_error = false;
+ $this->credential->alias = $this->alias;
+ $this->credential->save();
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ }
+}
diff --git a/app/Livewire/Components/Forms/Profile/SecondFactor.php b/app/Livewire/Components/Forms/Profile/SecondFactor.php
new file mode 100644
index 0000000000..c1f96d18c4
--- /dev/null
+++ b/app/Livewire/Components/Forms/Profile/SecondFactor.php
@@ -0,0 +1,65 @@
+authorize(UserPolicy::CAN_EDIT, [User::class]);
+
+ return view('livewire.modules.profile.second-factor');
+ }
+
+ /**
+ * Return the list of credentials associated to the current logged in user.
+ *
+ * @return Collection
+ *
+ * @throws UnauthenticatedException
+ */
+ public function getCredentialsProperty(): Collection
+ {
+ /** @var \App\Models\User $user */
+ $user = Auth::user() ?? throw new UnauthenticatedException();
+
+ return $user->webAuthnCredentials;
+ }
+
+ /**
+ * Delete an existing credential.
+ *
+ * @param string $id
+ *
+ * @return void
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function delete(string $id): void
+ {
+ /** @var User $user */
+ $user = Auth::user() ?? throw new UnauthenticatedException();
+
+ $user->webAuthnCredentials()->where('id', '=', $id)->delete();
+ $this->notify(__('lychee.U2F_CREDENTIALS_DELETED'));
+ }
+}
diff --git a/app/Livewire/Components/Forms/Profile/SetEmail.php b/app/Livewire/Components/Forms/Profile/SetEmail.php
new file mode 100644
index 0000000000..709945e680
--- /dev/null
+++ b/app/Livewire/Components/Forms/Profile/SetEmail.php
@@ -0,0 +1,67 @@
+authorize(UserPolicy::CAN_EDIT, [User::class]);
+
+ /** @var User $user */
+ $user = Auth::user();
+ $this->value = $user->email;
+ $this->description = __('lychee.ENTER_EMAIL');
+ $this->action = __('lychee.SAVE');
+ }
+
+ /**
+ * Render the component with the email form.
+ *
+ * @return View
+ *
+ * @throws UnauthenticatedException
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.settings.input');
+ }
+
+ /**
+ * Save the email address entered.
+ *
+ * @return void
+ *
+ * @throws UnauthenticatedException
+ */
+ public function save(): void
+ {
+ $this->validate(['value' => 'required|email']);
+
+ $this->authorize(UserPolicy::CAN_EDIT, [User::class]);
+
+ /** @var User $user */
+ $user = Auth::user() ?? throw new UnauthenticatedException();
+ $user->email = $this->value;
+ $user->save();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Profile/SetLogin.php b/app/Livewire/Components/Forms/Profile/SetLogin.php
new file mode 100644
index 0000000000..489ddd0a45
--- /dev/null
+++ b/app/Livewire/Components/Forms/Profile/SetLogin.php
@@ -0,0 +1,92 @@
+updateLogin = resolve(UpdateLogin::class);
+ }
+
+ public function mount(): void
+ {
+ $this->authorize(UserPolicy::CAN_EDIT, [User::class]);
+ }
+
+ /**
+ * Simply render the form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.forms.profile.set-login');
+ }
+
+ /**
+ * Update Username & Password of current user.
+ */
+ public function submit(): void
+ {
+ $this->validate(ChangeLoginRuleSet::rules());
+ $this->validate(['oldPassword' => new CurrentPasswordRule()]);
+
+ $this->authorize(UserPolicy::CAN_EDIT, [User::class]);
+
+ $currentUser = $this->updateLogin->do(
+ $this->username,
+ $this->password,
+ $this->oldPassword,
+ request()->ip()
+ );
+
+ // Update the session with the new credentials of the user.
+ // Otherwise, the session is out-of-sync and falsely assumes the user
+ // to be unauthenticated upon the next request.
+ Auth::login($currentUser);
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+
+ $this->oldPassword = '';
+ $this->username = '';
+ $this->password = '';
+ $this->password_confirmation = '';
+ }
+
+ /**
+ * Open a login modal box.
+ *
+ * @return void
+ */
+ public function openApiTokenModal(): void
+ {
+ $this->openClosableModal('forms.profile.get-api-token', __('lychee.CLOSE'));
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php
new file mode 100644
index 0000000000..d10ae9a52f
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php
@@ -0,0 +1,95 @@
+value1 = $this->config1->value;
+ $this->value2 = $this->config2->value;
+
+ return view('livewire.forms.settings.double-drop-down');
+ }
+
+ /**
+ * This runs before a wired property is updated.
+ *
+ * @param mixed $field
+ * @param mixed $value
+ *
+ * @return void
+ *
+ * @throws InvalidCastException
+ * @throws JsonEncodingException
+ * @throws \RuntimeException
+ */
+ public function updated($field, $value)
+ {
+ Gate::authorize(SettingsPolicy::CAN_EDIT, [Configs::class]);
+ $error_msg = $this->config1->sanity($this->value1);
+ if ($error_msg !== '') {
+ $this->notify($error_msg, NotificationType::ERROR);
+
+ return;
+ }
+ $error_msg = $this->config2->sanity($this->value2);
+ if ($error_msg !== '') {
+ $this->notify($error_msg, NotificationType::ERROR);
+
+ return;
+ }
+
+ $this->config1->value = $this->value1;
+ $this->config1->save();
+ $this->config2->value = $this->value2;
+ $this->config2->save();
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ }
+
+ /**
+ * Defines accessor for the drop down options1.
+ *
+ * @return array
+ */
+ abstract public function getOptions1Property(): array;
+
+ /**
+ * Defines accessor for the drop down options2.
+ *
+ * @return array
+ */
+ abstract public function getOptions2Property(): array;
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php
new file mode 100644
index 0000000000..c7b2ac354a
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php
@@ -0,0 +1,69 @@
+value = $this->config->value;
+
+ return view('livewire.forms.settings.drop-down');
+ }
+
+ /**
+ * This runs before a wired property is updated.
+ *
+ * @param mixed $field
+ * @param mixed $value
+ *
+ * @return void
+ */
+ public function updating($field, $value): void
+ {
+ Gate::authorize(SettingsPolicy::CAN_EDIT, [Configs::class]);
+ $error_msg = $this->config->sanity($value);
+ if ($error_msg !== '') {
+ $this->notify($error_msg, NotificationType::ERROR);
+
+ return;
+ }
+
+ $this->config->value = $value;
+ $this->config->save();
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ }
+
+ /**
+ * Defines accessor for the drop down options1.
+ *
+ * @return array
+ */
+ abstract public function getOptionsProperty(): array;
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/Base/BooleanSetting.php b/app/Livewire/Components/Forms/Settings/Base/BooleanSetting.php
new file mode 100644
index 0000000000..694c3d8a37
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/Base/BooleanSetting.php
@@ -0,0 +1,77 @@
+description = __('lychee.' . $description);
+ $this->footer = $footer !== '' ? __('lychee.' . $footer) : '';
+ $this->config = Configs::where('key', '=', $name)->firstOrFail();
+ }
+
+ /**
+ * Render the toggle element.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ $this->flag = $this->config->value === '1';
+
+ return view('livewire.forms.settings.toggle');
+ }
+
+ /**
+ * This runs before a wired property is updated.
+ *
+ * @param mixed $field
+ * @param mixed $value
+ *
+ * @return void
+ *
+ * @throws InvalidCastException
+ * @throws JsonEncodingException
+ * @throws \RuntimeException
+ */
+ public function updating($field, $value)
+ {
+ Gate::authorize(SettingsPolicy::CAN_EDIT, [Configs::class]);
+
+ $this->config->value = $value === true ? '1' : '0';
+ $this->config->save();
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/Base/StringSetting.php b/app/Livewire/Components/Forms/Settings/Base/StringSetting.php
new file mode 100644
index 0000000000..d64f7b399c
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/Base/StringSetting.php
@@ -0,0 +1,76 @@
+description = __('lychee.' . $description);
+ $this->action = __('lychee.' . $action);
+ $this->placeholder = __('lychee.' . $placeholder);
+ $this->config = Configs::where('key', '=', $name)->firstOrFail();
+ }
+
+ /**
+ * Renders the input form.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ $this->value = $this->config->value;
+
+ return view('livewire.forms.settings.input');
+ }
+
+ /**
+ * Validation call to persist the data (as opposed to drop down menu and toggle which are instant).
+ *
+ * @return void
+ */
+ public function save(): void
+ {
+ Gate::authorize(SettingsPolicy::CAN_EDIT, [Configs::class]);
+ $error_msg = $this->config->sanity($this->value);
+ if ($error_msg !== '') {
+ $this->notify($error_msg, NotificationType::ERROR);
+ $this->value = $this->config->value;
+
+ return;
+ }
+
+ $this->config->value = $this->value;
+ $this->config->save();
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php
new file mode 100644
index 0000000000..cdab0a7ebd
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php
@@ -0,0 +1,34 @@
+description = __('lychee.ALBUM_DECORATION_ORIENTATION');
+ $this->config = Configs::where('key', '=', 'album_decoration_orientation')->firstOrFail();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php
new file mode 100644
index 0000000000..a9fe65396e
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php
@@ -0,0 +1,34 @@
+description = __('lychee.ALBUM_DECORATION');
+ $this->config = Configs::where('key', '=', 'album_decoration')->firstOrFail();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php b/app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php
new file mode 100644
index 0000000000..c7d28fa5dd
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php
@@ -0,0 +1,56 @@
+begin = $matches[1];
+ $this->middle = $matches[2];
+ $this->end = $matches[3];
+
+ $this->config1 = Configs::where('key', '=', 'sorting_albums_col')->firstOrFail();
+ $this->config2 = Configs::where('key', '=', 'sorting_albums_order')->firstOrFail();
+ }
+
+ /**
+ * Give the options on the column.
+ *
+ * @return array
+ */
+ public function getOptions1Property(): array
+ {
+ return ColumnSortingAlbumType::localized();
+ }
+
+ /**
+ * Give the options on the ordering.
+ *
+ * @return array
+ */
+ public function getOptions2Property(): array
+ {
+ return OrderSortingType::localized();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/SetLangSetting.php b/app/Livewire/Components/Forms/Settings/SetLangSetting.php
new file mode 100644
index 0000000000..5f8a20e512
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/SetLangSetting.php
@@ -0,0 +1,35 @@
+description = __('lychee.LANG_TEXT');
+ // We do not use Lang::get_code() because we want to be able to modify it.
+ // We are interested in the setting itself.
+ $this->config = Configs::where('key', '=', 'lang')->firstOrFail();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/SetLayoutSetting.php b/app/Livewire/Components/Forms/Settings/SetLayoutSetting.php
new file mode 100644
index 0000000000..d7488c3cb7
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/SetLayoutSetting.php
@@ -0,0 +1,34 @@
+description = __('lychee.LAYOUT_TYPE');
+ $this->config = Configs::where('key', '=', 'layout')->firstOrFail();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php b/app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php
new file mode 100644
index 0000000000..0b5784829a
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php
@@ -0,0 +1,34 @@
+description = __('lychee.DEFAULT_LICENSE');
+ $this->config = Configs::where('key', '=', 'default_license')->firstOrFail();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php b/app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php
new file mode 100644
index 0000000000..238cd551e5
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php
@@ -0,0 +1,39 @@
+ __('lychee.MAP_PROVIDER_WIKIMEDIA'),
+ 'OpenStreetMap.org' => __('lychee.MAP_PROVIDER_OSM_ORG'),
+ 'OpenStreetMap.de' => __('lychee.MAP_PROVIDER_OSM_DE'),
+ 'OpenStreetMap.fr' => __('lychee.MAP_PROVIDER_OSM_FR'),
+ 'RRZE' => __('lychee.MAP_PROVIDER_RRZE'),
+ ];
+ }
+
+ /**
+ * Mount the config.
+ *
+ * @return void
+ */
+ public function mount()
+ {
+ $this->description = __('lychee.MAP_PROVIDER');
+ $this->config = Configs::where('key', '=', 'map_provider')->firstOrFail();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php b/app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php
new file mode 100644
index 0000000000..8b5a15f59a
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php
@@ -0,0 +1,34 @@
+description = __('lychee.OVERLAY_TYPE');
+ $this->config = Configs::where('key', '=', 'image_overlay_type')->firstOrFail();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php b/app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php
new file mode 100644
index 0000000000..af16d021e7
--- /dev/null
+++ b/app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php
@@ -0,0 +1,56 @@
+begin = $matches[1];
+ $this->middle = $matches[2];
+ $this->end = $matches[3];
+
+ $this->config1 = Configs::where('key', '=', 'sorting_photos_col')->firstOrFail();
+ $this->config2 = Configs::where('key', '=', 'sorting_photos_order')->firstOrFail();
+ }
+
+ /**
+ * Give the columns options.
+ *
+ * @return array
+ */
+ public function getOptions1Property(): array
+ {
+ return ColumnSortingPhotoType::localized();
+ }
+
+ /**
+ * Ordering ascending or descending.
+ *
+ * @return array
+ */
+ public function getOptions2Property(): array
+ {
+ return OrderSortingType::localized();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Components/Menus/AlbumAdd.php b/app/Livewire/Components/Menus/AlbumAdd.php
new file mode 100644
index 0000000000..c8a2a410b8
--- /dev/null
+++ b/app/Livewire/Components/Menus/AlbumAdd.php
@@ -0,0 +1,69 @@
+closeContextMenu();
+ $this->openModal('forms.album.create', $this->params);
+ }
+
+ /**
+ * Open Create Tag Album modal.
+ *
+ * @return void
+ */
+ public function openTagAlbumCreateModal(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.album.create-tag', $this->params);
+ }
+
+ public function openImportFromServerModal(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.add.import-from-server', $this->params);
+ }
+
+ public function openImportFromUrlModal(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.add.import-from-url', $this->params);
+ }
+
+ public function openUploadModal(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.add.upload', $this->params);
+ }
+}
diff --git a/app/Livewire/Components/Menus/AlbumDropdown.php b/app/Livewire/Components/Menus/AlbumDropdown.php
new file mode 100644
index 0000000000..a944619cda
--- /dev/null
+++ b/app/Livewire/Components/Menus/AlbumDropdown.php
@@ -0,0 +1,61 @@
+closeContextMenu();
+ $this->openModal('forms.album.rename', [Params::ALBUM_ID => $this->params[Params::ALBUM_ID], Params::PARENT_ID => $this->params[Params::PARENT_ID]]);
+ }
+
+ public function merge(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.album.merge', [Params::ALBUM_ID => $this->params[Params::ALBUM_ID], Params::PARENT_ID => $this->params[Params::PARENT_ID]]);
+ }
+
+ public function move(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.album.move', [Params::ALBUM_ID => $this->params[Params::ALBUM_ID], Params::PARENT_ID => $this->params[Params::PARENT_ID]]);
+ }
+
+ public function delete(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.album.delete', [Params::ALBUM_ID => $this->params[Params::ALBUM_ID], Params::PARENT_ID => $this->params[Params::PARENT_ID]]);
+ }
+
+ public function download(): void
+ {
+ $this->closeContextMenu();
+ $this->redirect(route('download', ['albumIDs' => $this->params[Params::ALBUM_ID]]));
+ }
+}
diff --git a/app/Livewire/Components/Menus/AlbumsDropdown.php b/app/Livewire/Components/Menus/AlbumsDropdown.php
new file mode 100644
index 0000000000..7cbe9e9d19
--- /dev/null
+++ b/app/Livewire/Components/Menus/AlbumsDropdown.php
@@ -0,0 +1,61 @@
+} */
+ #[Locked] public array $params;
+ /**
+ * Renders the Add menu in the top right.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.context-menus.albums-dropdown');
+ }
+
+ public function renameAll(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.album.rename', [Params::ALBUM_IDS => $this->params[Params::ALBUM_IDS], Params::PARENT_ID => $this->params[Params::PARENT_ID]]);
+ }
+
+ public function mergeAll(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.album.merge', [Params::ALBUM_IDS => $this->params[Params::ALBUM_IDS], Params::PARENT_ID => $this->params[Params::PARENT_ID]]);
+ }
+
+ public function moveAll(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.album.move', [Params::ALBUM_IDS => $this->params[Params::ALBUM_IDS], Params::PARENT_ID => $this->params[Params::PARENT_ID]]);
+ }
+
+ public function deleteAll(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.album.delete', [Params::ALBUM_IDS => $this->params[Params::ALBUM_IDS], Params::PARENT_ID => $this->params[Params::PARENT_ID]]);
+ }
+
+ public function downloadAll(): void
+ {
+ $this->redirect(route('download') . '?albumIDs=' . implode(',', $this->params[Params::ALBUM_IDS]));
+ $this->closeContextMenu();
+ }
+}
diff --git a/app/Livewire/Components/Menus/LeftMenu.php b/app/Livewire/Components/Menus/LeftMenu.php
new file mode 100644
index 0000000000..5c6e494326
--- /dev/null
+++ b/app/Livewire/Components/Menus/LeftMenu.php
@@ -0,0 +1,137 @@
+loadDevMenu();
+
+ return view('livewire.components.left-menu');
+ }
+
+ /**
+ * Open the Context Menu.
+ *
+ * @return void
+ */
+ #[On('openLeftMenu')]
+ public function openLeftMenu(): void
+ {
+ $this->open();
+ }
+
+ /**
+ * Close the LeftMenu component.
+ *
+ * @return void
+ */
+ #[On('closeLeftMenu')]
+ public function closeLeftMenu(): void
+ {
+ $this->close();
+ }
+
+ /**
+ * Toggle the LeftMenu component.
+ *
+ * @return void
+ */
+ #[On('toggleLeftMenu')]
+ public function toggleLeftMenu(): void
+ {
+ $this->toggle();
+ }
+
+ /**
+ * Open a about modal box.
+ * TODO Consider moving this directly to Blade.
+ *
+ * @return void
+ */
+ public function openAboutModal(): void
+ {
+ $this->openClosableModal('modals.about', __('lychee.CLOSE'));
+ }
+
+ /**
+ * We load some data about debuging tools section.
+ *
+ * @return void
+ */
+ private function loadDevMenu(): void
+ {
+ $this->has_dev_tools = Gate::check(SettingsPolicy::CAN_ACCESS_DEV_TOOLS, [Configs::class]);
+ if (!$this->has_dev_tools) {
+ return;
+ }
+
+ // Defining clockwork URL
+ $clockWorkEnabled = config('clockwork.enable') === true || (config('app.debug') === true && config('clockwork.enable') === null);
+ $clockWorkWeb = config('clockwork.web');
+ if ($clockWorkEnabled && $clockWorkWeb === true || is_string($clockWorkWeb)) {
+ $this->clockwork_url = $clockWorkWeb === true ? URL::asset('clockwork/app') : $clockWorkWeb . '/app';
+ }
+
+ // API documentation
+ $this->doc_api_url = Route::has('scramble.docs.api') ? route('scramble.docs.api') : null;
+
+ // Double check to avoid showing an empty section.
+ $this->has_dev_tools = $this->doc_api_url !== null && $this->clockwork_url !== null;
+ }
+}
diff --git a/app/Livewire/Components/Menus/PhotoDropdown.php b/app/Livewire/Components/Menus/PhotoDropdown.php
new file mode 100644
index 0000000000..86c5488653
--- /dev/null
+++ b/app/Livewire/Components/Menus/PhotoDropdown.php
@@ -0,0 +1,118 @@
+params = $params;
+ $this->is_starred = Photo::query()->findOrFail($params[Params::PHOTO_ID])->is_starred;
+ }
+
+ /**
+ * Renders the Add menu in the top right.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.context-menus.photo-dropdown');
+ }
+
+ public function star(): void
+ {
+ $this->closeContextMenu();
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->params[Params::PHOTO_ID]]);
+ Photo::where('id', '=', $this->params[Params::PHOTO_ID])->update(['is_starred' => true]);
+ $this->dispatch('reloadPage')->to(GalleryAlbum::class);
+ }
+
+ public function unstar(): void
+ {
+ $this->closeContextMenu();
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->params[Params::PHOTO_ID]]);
+ Photo::where('id', '=', $this->params[Params::PHOTO_ID])->update(['is_starred' => false]);
+ $this->dispatch('reloadPage')->to(GalleryAlbum::class);
+ }
+
+ public function tag(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.tag', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+
+ public function setAsCover(): void
+ {
+ /** @var Album $album */
+ $album = Album::query()->findOrFail($this->params[Params::ALBUM_ID]);
+
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $album]);
+ $album->cover_id = $album->cover_id === $this->params[Params::PHOTO_ID] ? null : $this->params[Params::PHOTO_ID];
+ $album->save();
+ $this->dispatch('reloadPage')->to(GalleryAlbum::class);
+ $this->closeContextMenu();
+ }
+
+ public function rename(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.rename', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+
+ public function copyTo(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.copy-to', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+
+ public function move(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.move', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+
+ public function delete(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.delete', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+
+ public function download(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.download', [Params::PHOTO_ID => $this->params[Params::PHOTO_ID], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+}
diff --git a/app/Livewire/Components/Menus/PhotosDropdown.php b/app/Livewire/Components/Menus/PhotosDropdown.php
new file mode 100644
index 0000000000..9e74d5caf3
--- /dev/null
+++ b/app/Livewire/Components/Menus/PhotosDropdown.php
@@ -0,0 +1,102 @@
+} */
+ #[Locked] public array $params;
+ #[Locked] public bool $are_starred;
+ /**
+ * mount info and load star condition.
+ *
+ * @param array{albumID:?string,photoIDs:array} $params
+ *
+ * @return void
+ */
+ public function mount(array $params): void
+ {
+ $this->params = $params;
+ $this->are_starred = count($params[Params::PHOTO_IDS]) ===
+ Photo::query()->whereIn('id', $params[Params::PHOTO_IDS])->where('is_starred', '=', true)->count();
+ }
+
+ /**
+ * Renders the Add menu in the top right.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.context-menus.photos-dropdown');
+ }
+
+ public function starAll(): void
+ {
+ $this->closeContextMenu();
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->params[Params::PHOTO_IDS]]);
+ Photo::whereIn('id', $this->params[Params::PHOTO_IDS])->update(['is_starred' => true]);
+ $this->dispatch('reloadPage')->to(GalleryAlbum::class);
+ }
+
+ public function unstarAll(): void
+ {
+ $this->closeContextMenu();
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $this->params[Params::PHOTO_IDS]]);
+ Photo::whereIn('id', $this->params[Params::PHOTO_IDS])->update(['is_starred' => false]);
+ $this->dispatch('reloadPage')->to(GalleryAlbum::class);
+ }
+
+ public function tagAll(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.tag', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+
+ public function renameAll(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.rename', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+
+ public function copyAllTo(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.copy-to', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+
+ public function moveAll(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.move', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+
+ public function deleteAll(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.delete', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+
+ public function downloadAll(): void
+ {
+ $this->closeContextMenu();
+ $this->openModal('forms.photo.download', [Params::PHOTO_IDS => $this->params[Params::PHOTO_IDS], Params::ALBUM_ID => $this->params[Params::ALBUM_ID]]);
+ }
+}
diff --git a/app/Livewire/Components/Modals/About.php b/app/Livewire/Components/Modals/About.php
new file mode 100644
index 0000000000..33383e154e
--- /dev/null
+++ b/app/Livewire/Components/Modals/About.php
@@ -0,0 +1,56 @@
+version = resolve(InstalledVersion::class)->getVersion()->toString();
+ }
+
+ $fileVersion = resolve(FileVersion::class);
+ $gitHubVersion = resolve(GitHubVersion::class);
+ if (Configs::getValueAsBool('check_for_updates')) {
+ // @codeCoverageIgnoreStart
+ $fileVersion->hydrate();
+ $gitHubVersion->hydrate();
+ // @codeCoverageIgnoreEnd
+ }
+ $this->is_new_release_available = !$fileVersion->isUpToDate();
+ $this->is_git_update_available = !$gitHubVersion->isUpToDate();
+ }
+
+ /**
+ * Renders the About component.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.modals.about');
+ }
+}
diff --git a/app/Livewire/Components/Modals/Login.php b/app/Livewire/Components/Modals/Login.php
new file mode 100644
index 0000000000..bbafa5e6ee
--- /dev/null
+++ b/app/Livewire/Components/Modals/Login.php
@@ -0,0 +1,95 @@
+version = resolve(InstalledVersion::class)->getVersion()->toString();
+ }
+
+ $fileVersion = resolve(FileVersion::class);
+ $gitHubVersion = resolve(GitHubVersion::class);
+ if (Configs::getValueAsBool('check_for_updates')) {
+ // @codeCoverageIgnoreStart
+ $fileVersion->hydrate();
+ $gitHubVersion->hydrate();
+ // @codeCoverageIgnoreEnd
+ }
+ $this->is_new_release_available = !$fileVersion->isUpToDate();
+ $this->is_git_update_available = !$gitHubVersion->isUpToDate();
+ }
+
+ /**
+ * Hook the submit button.
+ *
+ * @return void
+ *
+ * @throws \Throwable
+ * @throws ValidationException
+ * @throws BindingResolutionException
+ * @throws \InvalidArgumentException
+ * @throws QueryBuilderException
+ */
+ public function submit(): void
+ {
+ // Empty error bag
+ $this->resetErrorBag();
+
+ // Call Livewire validation on the from
+ $data = $this->validate(LoginRuleSet::rules());
+
+ // apply login as admin and trigger a reload
+ if (Auth::attempt(['username' => $data['username'], 'password' => $data['password']])) {
+ Log::notice(__METHOD__ . ':' . __LINE__ . ' User (' . $data['username'] . ') has logged in from ' . request()->ip());
+ $this->dispatch('login-close');
+ $this->dispatch('reloadPage');
+
+ return;
+ }
+
+ // Wrong login: stay on the modal and update the rendering.
+ $this->addError('wrongLogin', 'Wrong login or password.');
+ Log::error(__METHOD__ . ':' . __LINE__ . ' User (' . $data['username'] . ') has tried to log in from ' . request()->ip());
+ }
+}
diff --git a/app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php b/app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php
new file mode 100644
index 0000000000..ab4b70fedc
--- /dev/null
+++ b/app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php
@@ -0,0 +1,41 @@
+get() : [];
+ }
+}
diff --git a/app/Livewire/Components/Modules/Diagnostics/Errors.php b/app/Livewire/Components/Modules/Diagnostics/Errors.php
new file mode 100644
index 0000000000..e1ea04ea88
--- /dev/null
+++ b/app/Livewire/Components/Modules/Diagnostics/Errors.php
@@ -0,0 +1,63 @@
+
+ Diagnostics
+ -----------
+ ' . __('lychee.LOADING') . ' ...
+
+';
+ }
+
+ /**
+ * Computable property to access the errors.
+ * If we are not ready to load, we return an empty array.
+ *
+ * @return array
+ */
+ public function getDataProperty(): array
+ {
+ return collect(resolve(DiagnosticsErrors::class)->get())->map(function ($line) {
+ $arr = ['color' => '', 'type' => '', 'line' => $line];
+
+ if (Str::startsWith($line, 'Warning: ')) {
+ $arr['color'] = 'text-warning-600';
+ $arr['type'] = 'Warning:';
+ $arr['line'] = Str::substr($line, 9);
+ }
+
+ if (Str::startsWith($line, 'Error: ')) {
+ // @codeCoverageIgnoreStart
+ $arr['color'] = 'text-danger-600';
+ $arr['type'] = 'Error:';
+ $arr['line'] = Str::substr($line, 7);
+ // @codeCoverageIgnoreEnd
+ }
+
+ return $arr;
+ })->all();
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ final public function render(): View
+ {
+ return view('livewire.modules.diagnostics.pre-colored');
+ }
+}
diff --git a/app/Livewire/Components/Modules/Diagnostics/Infos.php b/app/Livewire/Components/Modules/Diagnostics/Infos.php
new file mode 100644
index 0000000000..e9f437cd5f
--- /dev/null
+++ b/app/Livewire/Components/Modules/Diagnostics/Infos.php
@@ -0,0 +1,18 @@
+get() : [];
+ }
+}
diff --git a/app/Livewire/Components/Modules/Diagnostics/Optimize.php b/app/Livewire/Components/Modules/Diagnostics/Optimize.php
new file mode 100644
index 0000000000..f1753c97dc
--- /dev/null
+++ b/app/Livewire/Components/Modules/Diagnostics/Optimize.php
@@ -0,0 +1,54 @@
+optimizeDb = resolve(OptimizeDb::class);
+ $this->optimizeTables = resolve(OptimizeTables::class);
+ $this->action = 'Optimize!';
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ if (!Gate::check(SettingsPolicy::CAN_SEE_DIAGNOSTICS, Configs::class)) {
+ $this->result[] = 'Error: You must have administrator rights to see this.';
+ }
+
+ return view('livewire.modules.diagnostics.with-action-call');
+ }
+
+ /**
+ * Return the size used by Lychee.
+ * We now separate this from the initial get() call as this is quite time consuming.
+ *
+ * @return void
+ */
+ public function do(): void
+ {
+ Gate::authorize(SettingsPolicy::CAN_SEE_DIAGNOSTICS, Configs::class);
+ $this->result = collect($this->optimizeDb->do())->merge(collect($this->optimizeTables->do()))->all();
+ }
+}
diff --git a/app/Livewire/Components/Modules/Diagnostics/Space.php b/app/Livewire/Components/Modules/Diagnostics/Space.php
new file mode 100644
index 0000000000..cedb61f0dd
--- /dev/null
+++ b/app/Livewire/Components/Modules/Diagnostics/Space.php
@@ -0,0 +1,51 @@
+diagnostics = resolve(DiagnosticsSpace::class);
+ $this->action = __('lychee.DIAGNOSTICS_GET_SIZE');
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ if (!Gate::check(SettingsPolicy::CAN_SEE_DIAGNOSTICS, Configs::class)) {
+ $this->result[] = 'Error: You must have administrator rights to see this.';
+ }
+
+ return view('livewire.modules.diagnostics.with-action-call');
+ }
+
+ /**
+ * Return the size used by Lychee.
+ * We now separate this from the initial get() call as this is quite time consuming.
+ *
+ * @return void
+ */
+ public function do(): void
+ {
+ Gate::authorize(SettingsPolicy::CAN_SEE_DIAGNOSTICS, Configs::class);
+ $this->result = $this->diagnostics->get();
+ }
+}
diff --git a/app/Livewire/Components/Modules/Users/UserLine.php b/app/Livewire/Components/Modules/Users/UserLine.php
new file mode 100644
index 0000000000..ca900c32b2
--- /dev/null
+++ b/app/Livewire/Components/Modules/Users/UserLine.php
@@ -0,0 +1,106 @@
+save = resolve(Save::class);
+ }
+
+ /**
+ * Given a user, load the properties.
+ * Note that password stays empty to ensure that we do not update it by mistake.
+ *
+ * @param User $user
+ *
+ * @return void
+ */
+ public function mount(User $user): void
+ {
+ Gate::authorize(UserPolicy::CAN_CREATE_OR_EDIT_OR_DELETE, [User::class]);
+
+ $this->user = $user;
+ $this->id = $user->id;
+ $this->username = $user->username;
+ $this->may_edit_own_settings = $user->may_edit_own_settings;
+ $this->may_upload = $user->may_upload;
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.modules.users.user-line');
+ }
+
+ /**
+ * computed property to check if the state is dirty.
+ * TODO: See if the dirty state of Livewire is usable instead.
+ *
+ * @return bool
+ */
+ public function getHasChangedProperty(): bool
+ {
+ return $this->user->username !== $this->username ||
+ $this->user->may_upload !== $this->may_upload ||
+ $this->user->may_edit_own_settings !== $this->may_edit_own_settings ||
+ $this->password !== '';
+ }
+
+ /**
+ * Save modification done to a user.
+ * Note that an admin can change the password of a user at will.
+ *
+ * @return void
+ */
+ public function save(): void
+ {
+ if (!$this->areValid(SetUserSettingsRuleSet::rules())) {
+ return;
+ }
+
+ Gate::authorize(UserPolicy::CAN_CREATE_OR_EDIT_OR_DELETE, [User::class]);
+
+ $this->save->do(
+ $this->user,
+ $this->username,
+ $this->password,
+ $this->may_upload,
+ $this->may_edit_own_settings
+ );
+ }
+}
diff --git a/app/Livewire/Components/Pages/AllSettings.php b/app/Livewire/Components/Pages/AllSettings.php
new file mode 100644
index 0000000000..6429d9afbf
--- /dev/null
+++ b/app/Livewire/Components/Pages/AllSettings.php
@@ -0,0 +1,75 @@
+form->setConfigs(Configs::orderBy('cat', 'asc')->get());
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.pages.all-settings');
+ }
+
+ /**
+ * Open Saving confirmation modal.
+ *
+ * @return void
+ */
+ public function openConfirmSave(): void
+ {
+ $this->openModal('forms.confirms.save-all');
+ }
+
+ /**
+ * Save everything.
+ *
+ * @return void
+ */
+ #[On('saveAll')]
+ public function saveAll(): void
+ {
+ Gate::authorize(SettingsPolicy::CAN_EDIT, [Configs::class]);
+
+ $this->form->save();
+ }
+
+ public function back(): mixed
+ {
+ $this->dispatch('closeLeftMenu')->to(LeftMenu::class);
+
+ return $this->redirect(route('settings'), true);
+ }
+}
diff --git a/app/Livewire/Components/Pages/Diagnostics.php b/app/Livewire/Components/Pages/Diagnostics.php
new file mode 100644
index 0000000000..a09e8ae222
--- /dev/null
+++ b/app/Livewire/Components/Pages/Diagnostics.php
@@ -0,0 +1,34 @@
+dispatch('closeLeftMenu')->to(LeftMenu::class);
+
+ return $this->redirect(route('livewire-gallery'), true);
+ }
+
+ #[On('reloadPage')]
+ public function reloadPage(): void
+ {
+ $this->render();
+ }
+}
diff --git a/app/Livewire/Components/Pages/Frame.php b/app/Livewire/Components/Pages/Frame.php
new file mode 100644
index 0000000000..0a6bd082b3
--- /dev/null
+++ b/app/Livewire/Components/Pages/Frame.php
@@ -0,0 +1,113 @@
+albumId = $albumId ?? (($randomAlbumId !== '') ? $randomAlbumId : null);
+
+ $album = $this->albumId === null ? null : $this->albumFactory->findAbstractAlbumOrFail($this->albumId);
+ Gate::authorize(AlbumPolicy::CAN_ACCESS, [AbstractAlbum::class, $album]);
+
+ $this->title = $album?->title;
+ $this->loadPhoto();
+ $this->timeout = Configs::getValueAsInt('mod_frame_refresh');
+ $this->back = $albumId !== null ? route('livewire-gallery-album', ['albumId' => $albumId]) : route('livewire-gallery');
+ }
+
+ #[Renderless]
+ public function loadPhoto(int $retries = 5): array
+ {
+ // avoid infinite recursion
+ if ($retries === 0) {
+ $this->src = '';
+ $this->srcset = '';
+
+ return ['src' => '', 'srcset' => ''];
+ }
+
+ // default query
+ $query = $this->photoQueryPolicy->applySearchabilityFilter(Photo::query()->with(['album', 'size_variants', 'size_variants.sym_links']));
+
+ if ($this->albumId !== null) {
+ $query = $this->albumFactory->findAbstractAlbumOrFail($this->albumId)
+ ->photos()
+ ->with(['album', 'size_variants', 'size_variants.sym_links']);
+ }
+
+ /** @var ?Photo $photo */
+ // PHPStan does not understand that `firstOrFail` returns `Photo`, but assumes that it returns `Model`
+ // @phpstan-ignore-next-line
+ $photo = $query->inRandomOrder()->first();
+ if ($photo === null) {
+ $this->title === null ?
+ throw new PhotoCollectionEmptyException() : throw new PhotoCollectionEmptyException('Photo collection of ' . $this->title . ' is empty');
+ }
+
+ // retry
+ if ($photo->isVideo()) {
+ return $this->loadPhoto($retries - 1);
+ }
+
+ $this->src = $photo->size_variants->getMedium()?->url ?? $photo->size_variants->getOriginal()?->url;
+
+ if ($photo->size_variants->getMedium() !== null && $photo->size_variants->getMedium2x() !== null) {
+ $this->srcset = $photo->size_variants->getMedium()->url . ' ' . $photo->size_variants->getMedium()->width . 'w';
+ $this->srcset .= $photo->size_variants->getMedium2x()->url . ' ' . $photo->size_variants->getMedium2x()->width . 'w';
+ } else {
+ $this->srcset = '';
+ }
+
+ return ['src' => $this->src, 'srcset' => $this->srcset];
+ }
+
+ public function boot(): void
+ {
+ $this->albumFactory = resolve(AlbumFactory::class);
+ $this->photoQueryPolicy = resolve(PhotoQueryPolicy::class);
+ }
+}
diff --git a/app/Livewire/Components/Pages/Gallery/Album.php b/app/Livewire/Components/Pages/Gallery/Album.php
new file mode 100644
index 0000000000..2234389365
--- /dev/null
+++ b/app/Livewire/Components/Pages/Gallery/Album.php
@@ -0,0 +1,219 @@
+albumFactory = resolve(AlbumFactory::class);
+ $this->layouts = new Layouts();
+ }
+
+ public function mount(string $albumId, string $photoId = ''): void
+ {
+ $this->albumId = $albumId;
+ $this->photoId = $photoId;
+ $this->flags = new AlbumFlags();
+
+ $this->reloadPage();
+ }
+
+ /**
+ * Rendering of the blade template.
+ *
+ * @return View
+ */
+ final public function render(): View
+ {
+ $this->sessionFlags = SessionFlags::get();
+ $this->rights = AlbumRights::make($this->album);
+
+ if ($this->flags->is_accessible) {
+ $this->num_users = User::count();
+ $this->header_url ??= $this->fetchHeaderUrl()?->url;
+ $this->num_albums = $this->album instanceof ModelsAlbum ? $this->album->children->count() : 0;
+ $this->num_photos = $this->album->photos->count();
+
+ $is_latitude_longitude_found = false;
+ if ($this->album instanceof ModelsAlbum) {
+ $is_latitude_longitude_found = $this->album->all_photos()->whereNotNull('latitude')->whereNotNull('longitude')->count() > 0;
+ } else {
+ $is_latitude_longitude_found = $this->album->photos()->whereNotNull('latitude')->whereNotNull('longitude')->count() > 0;
+ }
+ // Only display if there are actual data
+ $this->flags->is_map_accessible = $this->flags->is_map_accessible && $is_latitude_longitude_found;
+
+ $this->photoFlags = new PhotoFlags(
+ can_autoplay: true,
+ can_rotate: Configs::getValueAsBool('editor_enabled'),
+ can_edit: $this->rights->can_edit,
+ );
+ }
+
+ return view('livewire.pages.gallery.album');
+ }
+
+ /**
+ * Reload the data.
+ *
+ * @return void
+ */
+ #[On('reloadPage')]
+ public function reloadPage(): void
+ {
+ $this->album = $this->albumFactory->findAbstractAlbumOrFail($this->albumId);
+ $this->flags->is_base_album = $this->album instanceof BaseAlbum;
+ $this->flags->is_accessible = Gate::check(AlbumPolicy::CAN_ACCESS, [ModelsAlbum::class, $this->album]);
+
+ if (!$this->flags->is_accessible) {
+ $this->flags->is_password_protected =
+ $this->album->public_permissions() !== null &&
+ $this->album->public_permissions()->password !== null;
+ }
+
+ if (Auth::check() && !$this->flags->is_accessible && !$this->flags->is_password_protected) {
+ $this->redirect(route('livewire-gallery'));
+ }
+ }
+
+ /**
+ * Return the photoIDs (no need to wait to compute the geometry).
+ *
+ * @return Collection
+ */
+ public function getPhotosProperty(): Collection
+ {
+ return $this->album->photos;
+ }
+
+ /**
+ * @return Collection|null
+ */
+ public function getAlbumsProperty(): Collection|null
+ {
+ if ($this->album instanceof ModelsAlbum) {
+ return $this->album->children;
+ }
+
+ return null;
+ }
+
+ /**
+ * Used in the JS front-end to manage the selected albums.
+ *
+ * @return array
+ */
+ public function getAlbumIDsProperty(): array
+ {
+ return $this->getAlbumsProperty()?->map(fn ($v, $k) => $v->id)?->all() ?? [];
+ }
+
+ /**
+ * Fetch the header url
+ * TODO: Later this can be also a field from the album and if null we apply the rdm query.
+ *
+ * @return SizeVariant|null
+ *
+ * @throws QueryBuilderException
+ * @throws RelationNotFoundException
+ */
+ private function fetchHeaderUrl(): SizeVariant|null
+ {
+ if ($this->album->photos->isEmpty()) {
+ return null;
+ }
+
+ return SizeVariant::query()
+ ->where('type', '=', SizeVariantType::MEDIUM)
+ ->whereBelongsTo($this->album->photos)
+ ->where('ratio', '>', 1)
+ ->inRandomOrder()
+ ->first();
+ }
+
+ public function getBackProperty(): string
+ {
+ if ($this->album instanceof ModelsAlbum && $this->album->parent_id !== null) {
+ return route('livewire-gallery-album', ['albumId' => $this->album->parent_id]);
+ }
+
+ return route('livewire-gallery');
+ }
+
+ public function getTitleProperty(): string
+ {
+ return $this->album->title;
+ }
+
+ #[Renderless]
+ public function setCover(?string $photoID): void
+ {
+ if (!$this->album instanceof ModelsAlbum) {
+ return;
+ }
+
+ Gate::authorize(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class, $this->album]);
+
+ $photo = $photoID === null ? null : Photo::query()->findOrFail($photoID);
+ if ($photo !== null) {
+ Gate::authorize(PhotoPolicy::CAN_SEE, [Photo::class, $photo]);
+ }
+
+ $this->album->cover_id = ($this->album->cover_id === $photo->id) ? null : $photo->id;
+ $this->album->save();
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ }
+
+ public function getAlbumFormattedProperty(): AlbumFormatted
+ {
+ return new AlbumFormatted($this->album, $this->fetchHeaderUrl()?->url);
+ }
+
+ public function getNoImagesAlbumsMessageProperty(): string
+ {
+ return 'Nothing to see here';
+ }
+}
diff --git a/app/Livewire/Components/Pages/Gallery/Albums.php b/app/Livewire/Components/Pages/Gallery/Albums.php
new file mode 100644
index 0000000000..18ac64b26a
--- /dev/null
+++ b/app/Livewire/Components/Pages/Gallery/Albums.php
@@ -0,0 +1,93 @@
+ */
+ #[Locked] public array $albumIDs;
+ #[Locked] public ?string $albumId = null;
+ public AlbumsFlags $flags;
+ public AlbumRights $rights;
+ public SessionFlags $sessionFlags;
+
+ /**
+ * Render component.
+ *
+ * @return View
+ *
+ * @throws BindingResolutionException
+ */
+ public function render(): View
+ {
+ $this->flags = new AlbumsFlags();
+ $this->rights = AlbumRights::make(null);
+ $this->albumIDs = $this->topAlbums->albums->map(fn ($v, $k) => $v->id)->all();
+
+ return view('livewire.pages.gallery.albums');
+ }
+
+ public function mount(): void
+ {
+ $this->sessionFlags = SessionFlags::get();
+ }
+
+ #[On('reloadPage')]
+ public function reloadPage(): void
+ {
+ $this->topAlbums = resolve(Top::class)->get();
+ }
+
+ public function boot(): void
+ {
+ $this->topAlbums = resolve(Top::class)->get();
+ $this->title = Configs::getValueAsString('site_title');
+ }
+
+ public function getAlbumsProperty(): Collection
+ {
+ return $this->topAlbums->albums;
+ }
+
+ public function getSmartAlbumsProperty(): Collection
+ {
+ return $this->topAlbums->smart_albums
+ // We filter out the public one (we don't remove it completely to not break the other front-end).
+ ->filter(fn (AbstractAlbum $e, $k) => $e->id !== SmartAlbumType::PUBLIC->value)
+ ->concat($this->topAlbums->tag_albums)
+ ->reject(fn ($album) => $album === null);
+ }
+
+ public function getSharedAlbumsProperty(): Collection
+ {
+ return $this->topAlbums->shared_albums;
+ }
+}
diff --git a/app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php b/app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php
new file mode 100644
index 0000000000..270a9a0e89
--- /dev/null
+++ b/app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php
@@ -0,0 +1,155 @@
+getPhotosProperty());
+ }
+
+ /**
+ * Return the photoIDs (no need to wait to compute the geometry).
+ *
+ * @return Collection
+ */
+ abstract public function getPhotosProperty(): Collection|LengthAwarePaginator;
+
+ /**
+ * Return the albums.
+ *
+ * @return Collection|null
+ */
+ abstract public function getAlbumsProperty(): Collection|null;
+
+ /**
+ * Used in the JS front-end to manage the selected albums.
+ *
+ * @return array
+ */
+ abstract public function getAlbumIDsProperty(): array;
+
+ /**
+ * Back property used to retrieve the URL to step back and back arrow.
+ *
+ * @return string
+ */
+ abstract public function getBackProperty(): string;
+
+ /**
+ * Title property for the header.
+ *
+ * @return string
+ */
+ abstract public function getTitleProperty(): string;
+
+ /**
+ * Data for Details & Hero.
+ *
+ * @return AlbumFormatted|null
+ */
+ abstract public function getAlbumFormattedProperty(): AlbumFormatted|null;
+
+ /**
+ * Return the data used to generate the layout on the front-end.
+ *
+ * @return Layouts
+ */
+ final public function getLayoutsProperty(): Layouts
+ {
+ return $this->layouts;
+ }
+
+ /**
+ * Getter for the license types in the front-end.
+ *
+ * @return array associated array of license type and their localization
+ */
+ final public function getLicensesProperty(): array
+ {
+ return LicenseType::localized();
+ }
+
+ /**
+ * Getter for the OverlayType displayed in photoView.
+ *
+ * @return string enum
+ */
+ final public function getOverlayTypeProperty(): string
+ {
+ return Configs::getValueAsEnum('image_overlay_type', ImageOverlayType::class)->value;
+ }
+
+ final public function getMapProviderProperty(): MapProviders
+ {
+ return Configs::getValueAsEnum('map_provider', MapProviders::class);
+ }
+
+ /**
+ * Message displayed when no result or the page is empty.
+ *
+ * @return string
+ */
+ abstract public function getNoImagesAlbumsMessageProperty(): string;
+}
diff --git a/app/Livewire/Components/Pages/Gallery/Search.php b/app/Livewire/Components/Pages/Gallery/Search.php
new file mode 100644
index 0000000000..dfb8c284ec
--- /dev/null
+++ b/app/Livewire/Components/Pages/Gallery/Search.php
@@ -0,0 +1,168 @@
+ */
+ private LengthAwarePaginator $photos;
+ /** @var Collection */
+ private Collection $albums;
+
+ #[Locked]
+ #[Url(history: true)]
+ public string $urlQuery = '';
+ public string $searchQuery = ''; // ! Wired
+
+ /** @var string[] */
+ protected array $terms = [];
+
+ #[Locked]
+ public int $search_minimum_length_required;
+
+ public function boot(): void
+ {
+ $this->layouts = new Layouts();
+ $this->albumSearch = resolve(AlbumSearch::class);
+ $this->photoSearch = resolve(PhotoSearch::class);
+ $this->photos = new LengthAwarePaginator([], 0, 200);
+ $this->albums = collect([]);
+ $this->num_albums = 0;
+ $this->num_photos = 0;
+ $this->search_minimum_length_required = Configs::getValueAsInt('search_minimum_length_required');
+ }
+
+ public function mount(string $albumId = ''): void
+ {
+ if (!Auth::check() && !Configs::getValueAsBool('search_public')) {
+ redirect(route('livewire-gallery'));
+ }
+
+ $this->rights = AlbumRights::make(null);
+
+ $this->flags = new AlbumFlags();
+ $this->photoFlags = new PhotoFlags(
+ can_autoplay: true,
+ can_rotate: Configs::getValueAsBool('editor_enabled'),
+ can_edit: false,
+ );
+ $this->sessionFlags = SessionFlags::get();
+ $this->flags->is_base_album = false;
+ $this->flags->is_accessible = true;
+ }
+
+ /**
+ * Whenever searchQuery is updated, we recompute the urlQuery.
+ *
+ * @return void
+ */
+ public function updatedSearchQuery(): void
+ {
+ $this->urlQuery = base64_encode($this->searchQuery);
+ }
+
+ /**
+ * Render component.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ $this->searchQuery = base64_decode($this->urlQuery, true);
+ $this->terms = explode(' ', str_replace(
+ ['\\', '%', '_'],
+ ['\\\\', '\\%', '\\_'],
+ $this->searchQuery
+ ));
+
+ if (strlen($this->searchQuery) >= $this->search_minimum_length_required) {
+ /** @var LengthAwarePaginator $photoResults */
+ /** @disregard P1013 Undefined method withQueryString() (stupid intelephense) */
+ $photoResults = $this->photoSearch
+ ->sqlQuery($this->terms)
+ ->orderBy(ColumnSortingPhotoType::TAKEN_AT->value, OrderSortingType::ASC->value)
+ ->paginate(Configs::getValueAsInt('search_pagination_limit'))
+ ->withQueryString();
+ $this->photos = $photoResults;
+ /** @var Collection $albumResults */
+ $albumResults = $this->albumSearch->queryAlbums($this->terms);
+ $this->albums = $albumResults;
+ $this->num_albums = $this->albums->count();
+ $this->num_photos = $this->photos->count();
+ $this->albumId = '';
+ $this->photoId = '';
+ }
+
+ return view('livewire.pages.gallery.search');
+ }
+
+ /**
+ * Return the photos.
+ *
+ * @return Collection
+ */
+ public function getPhotosProperty(): Collection
+ {
+ return collect($this->photos->items());
+ }
+
+ public function getAlbumsProperty(): ?Collection
+ {
+ return $this->albums;
+ }
+
+ public function getAlbumIDsProperty(): array
+ {
+ return $this->albums->map(fn ($v, $k) => $v->id)->all();
+ }
+
+ // For now, simple
+ public function getBackProperty(): string
+ {
+ return route('livewire-gallery');
+ }
+
+ // For now, simple
+ public function getTitleProperty(): string
+ {
+ return __('lychee.SEARCH');
+ }
+
+ public function getAlbumFormattedProperty(): null
+ {
+ return null;
+ }
+
+ public function getNoImagesAlbumsMessageProperty(): string
+ {
+ return strlen($this->searchQuery) < 3 ? '' : 'No results';
+ }
+}
diff --git a/app/Livewire/Components/Pages/Gallery/SensitiveWarning.php b/app/Livewire/Components/Pages/Gallery/SensitiveWarning.php
new file mode 100644
index 0000000000..75fd651f99
--- /dev/null
+++ b/app/Livewire/Components/Pages/Gallery/SensitiveWarning.php
@@ -0,0 +1,60 @@
+text = Configs::getValueAsString('nsfw_banner_override');
+ $this->isBlurred = Configs::getValueAsBool('nsfw_banner_blur_backdrop');
+
+ // TODO: remember if was open or not.
+
+ if ($album instanceof Album) {
+ $this->isOpen = $album->is_nsfw;
+
+ if (Auth::user()?->may_administrate === true) {
+ $this->isOpen = $this->isOpen && Configs::getValueAsBool('nsfw_warning_admin');
+ } else {
+ $this->isOpen = $this->isOpen && Configs::getValueAsBool('nsfw_warning');
+ }
+ }
+ }
+
+ /**
+ * Render the associated view.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.modules.gallery.sensitive-warning');
+ }
+}
diff --git a/app/Livewire/Components/Pages/Jobs.php b/app/Livewire/Components/Pages/Jobs.php
new file mode 100644
index 0000000000..b07d8c5eea
--- /dev/null
+++ b/app/Livewire/Components/Pages/Jobs.php
@@ -0,0 +1,59 @@
+orderBy('id', 'desc')
+ ->limit(Configs::getValueAsInt('log_max_num_line'))
+ ->get();
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.pages.jobs');
+ }
+
+ public function back(): mixed
+ {
+ $this->dispatch('closeLeftMenu')->to(LeftMenu::class);
+
+ return $this->redirect(route('livewire-gallery'), true);
+ }
+}
diff --git a/app/Livewire/Components/Pages/Landing.php b/app/Livewire/Components/Pages/Landing.php
new file mode 100644
index 0000000000..7fee45e3b4
--- /dev/null
+++ b/app/Livewire/Components/Pages/Landing.php
@@ -0,0 +1,43 @@
+title = Configs::getValueAsString('landing_title');
+ $this->subtitle = Configs::getValueAsString('landing_subtitle');
+ $background = Configs::getValueAsString('landing_background');
+ if (!Str::startsWith($background, 'http')) {
+ $background = URL::asset($background);
+ }
+ $this->background = $background;
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.pages.landing');
+ }
+}
diff --git a/app/Livewire/Components/Pages/Map.php b/app/Livewire/Components/Pages/Map.php
new file mode 100644
index 0000000000..63691fff54
--- /dev/null
+++ b/app/Livewire/Components/Pages/Map.php
@@ -0,0 +1,91 @@
+map_provider = Configs::getValueAsEnum('map_provider', MapProviders::class);
+
+ return view('livewire.pages.gallery.map');
+ }
+
+ public function mount(?string $albumId = null): void
+ {
+ $this->albumId = $albumId;
+
+ if ($albumId !== null) {
+ $this->album = $this->albumFactory->findAbstractAlbumOrFail($this->albumId);
+ $this->title = $this->album->title;
+ }
+
+ Gate::authorize(AlbumPolicy::CAN_ACCESS_MAP, [AbstractAlbum::class, $this->album]);
+ }
+
+ /**
+ * @return array
+ */
+ public function getDataProperty(): array
+ {
+ if ($this->albumId === null) {
+ /** @var array $ret */
+ $ret = $this->rootPositionData->do()->toArray(request());
+
+ return $ret;
+ }
+
+ $includeSubAlbums = Configs::getValueAsBool('map_include_subalbums');
+
+ /** @var array $ret */
+ $ret = $this->albumPositionData->get($this->album, $includeSubAlbums)->toArray(request());
+
+ return $ret;
+ }
+
+ public function boot(): void
+ {
+ $this->albumFactory = resolve(AlbumFactory::class);
+ $this->rootPositionData = resolve(RootPositionData::class);
+ $this->albumPositionData = resolve(AlbumPositionData::class);
+ $this->title = Configs::getValueAsString('site_title');
+ }
+
+ public function back(): mixed
+ {
+ if ($this->albumId === null) {
+ return $this->redirect(route('livewire-gallery'), true);
+ } else {
+ return $this->redirect(route('livewire-gallery-album', ['albumId' => $this->albumId]), true);
+ }
+ }
+}
diff --git a/app/Livewire/Components/Pages/Profile.php b/app/Livewire/Components/Pages/Profile.php
new file mode 100644
index 0000000000..5c9f140a38
--- /dev/null
+++ b/app/Livewire/Components/Pages/Profile.php
@@ -0,0 +1,58 @@
+are_notification_active = Configs::getValueAsBool('new_photos_notification');
+ $this->is_token_auh_active = config('auth.guards.lychee.driver', 'session-or-token') === 'session-or-token';
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.pages.profile');
+ }
+
+ public function back(): mixed
+ {
+ $this->dispatch('closeLeftMenu')->to(LeftMenu::class);
+
+ return $this->redirect(route('livewire-gallery'), true);
+ }
+}
diff --git a/app/Livewire/Components/Pages/Settings.php b/app/Livewire/Components/Pages/Settings.php
new file mode 100644
index 0000000000..bd026a5440
--- /dev/null
+++ b/app/Livewire/Components/Pages/Settings.php
@@ -0,0 +1,97 @@
+css = Storage::disk('dist')->get('user.css');
+ $this->js = Storage::disk('dist')->get('custom.js');
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.pages.settings');
+ }
+
+ public function back(): mixed
+ {
+ $this->dispatch('closeLeftMenu')->to(LeftMenu::class);
+
+ return $this->redirect(route('livewire-gallery'), true);
+ }
+
+ /**
+ * Takes the css input text and put it into `dist/user.css`.
+ * This allows admins to actually personalize the look of their
+ * installation.
+ *
+ * @return void
+ *
+ * @throws InsufficientFilesystemPermissions
+ */
+ public function setCSS(): void
+ {
+ Gate::authorize(SettingsPolicy::CAN_EDIT, Configs::class);
+
+ if (Storage::disk('dist')->put('user.css', $this->css) === false) {
+ if (Storage::disk('dist')->get('user.css') !== $this->css) {
+ throw new InsufficientFilesystemPermissions('Could not save CSS');
+ }
+ }
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ }
+
+ /**
+ * Takes the js input text and put it into `dist/custom.js`.
+ * This allows admins to actually execute custom js code on their
+ * Lychee-Laravel installation.
+ *
+ * @return void
+ *
+ * @throws InsufficientFilesystemPermissions
+ */
+ public function setJS(): void
+ {
+ Gate::authorize(SettingsPolicy::CAN_EDIT, Configs::class);
+
+ if (Storage::disk('dist')->put('custom.js', $this->js) === false) {
+ if (Storage::disk('dist')->get('custom.js') !== $this->js) {
+ throw new InsufficientFilesystemPermissions('Could not save JS');
+ }
+ }
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+ }
+}
diff --git a/app/Livewire/Components/Pages/Sharing.php b/app/Livewire/Components/Pages/Sharing.php
new file mode 100644
index 0000000000..a5249aad4f
--- /dev/null
+++ b/app/Livewire/Components/Pages/Sharing.php
@@ -0,0 +1,76 @@
+
+ */
+ public function getPermsProperty(): array
+ {
+ // This could be optimized, but whatever.
+ return
+ AccessPermission::with(['album', 'user'])
+ ->when(!Auth::user()->may_administrate, fn ($q) => $q->whereIn('base_album_id', BaseAlbumImpl::select('id')->where('owner_id', '=', Auth::id())))
+ ->whereNotNull('user_id')
+ ->orderBy('base_album_id', 'asc')
+ ->get()->all();
+ }
+
+ /**
+ * Set up the profile page.
+ *
+ * @return void
+ *
+ * @throws ConfigurationKeyMissingException
+ */
+ public function mount(): void
+ {
+ Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, null]);
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.pages.sharing');
+ }
+
+ public function back(): mixed
+ {
+ $this->dispatch('closeLeftMenu')->to(LeftMenu::class);
+
+ return $this->redirect(route('livewire-gallery'), true);
+ }
+
+ public function delete(int $id): void
+ {
+ $perm = AccessPermission::with('album')->findOrFail($id);
+ Gate::authorize(AlbumPolicy::CAN_SHARE_WITH_USERS, [AbstractAlbum::class, $perm->album]);
+
+ AccessPermission::query()->where('id', '=', $id)->delete();
+ }
+}
diff --git a/app/Livewire/Components/Pages/Users.php b/app/Livewire/Components/Pages/Users.php
new file mode 100644
index 0000000000..c1d3032fb3
--- /dev/null
+++ b/app/Livewire/Components/Pages/Users.php
@@ -0,0 +1,121 @@
+create = resolve(Create::class);
+ }
+
+ /**
+ * Load users.
+ *
+ * @return void
+ */
+ public function mount(): void
+ {
+ Gate::authorize(UserPolicy::CAN_CREATE_OR_EDIT_OR_DELETE, User::class);
+
+ $this->loadUsers();
+ }
+
+ /**
+ * Rendering of the front-end.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('livewire.pages.users');
+ }
+
+ /**
+ * Refresh the user List.
+ *
+ * @return void
+ */
+ public function loadUsers(): void
+ {
+ $this->users = User::orderBy('id', 'asc')->get();
+ }
+
+ /**
+ * Create a new user.
+ *
+ * @return void
+ */
+ public function create(): void
+ {
+ Gate::authorize(UserPolicy::CAN_CREATE_OR_EDIT_OR_DELETE, User::class);
+
+ // Create user
+ $this->create->do(
+ $this->username,
+ $this->password,
+ $this->may_upload,
+ $this->may_edit_own_settings);
+
+ // reset attributes and reload user list (triggers refresh)
+ $this->username = '';
+ $this->password = '';
+ $this->may_upload = false;
+ $this->may_edit_own_settings = false;
+ $this->loadUsers();
+ }
+
+ public function back(): mixed
+ {
+ $this->dispatch('closeLeftMenu')->to(LeftMenu::class);
+
+ return $this->redirect(route('livewire-gallery'), true);
+ }
+
+ /**
+ * Delete an existing credential.
+ *
+ * @param int $id
+ *
+ * @return void
+ */
+ public function delete(int $id): void
+ {
+ if ($id === Auth::id()) {
+ throw new UnauthorizedException('You are not allowed to delete yourself');
+ }
+
+ Gate::authorize(UserPolicy::CAN_CREATE_OR_EDIT_OR_DELETE, [User::class]);
+
+ User::where('id', '=', $id)->delete();
+ $this->loadUsers();
+ }
+}
diff --git a/app/Livewire/DTO/AlbumFlags.php b/app/Livewire/DTO/AlbumFlags.php
new file mode 100644
index 0000000000..0a0add67c1
--- /dev/null
+++ b/app/Livewire/DTO/AlbumFlags.php
@@ -0,0 +1,21 @@
+is_map_accessible = Configs::getValueAsBool('map_display');
+ $this->is_map_accessible = $this->is_map_accessible && (Auth::check() || Configs::getValueAsBool('map_display_public'));
+ $this->is_mod_frame_enabled = Configs::getValueAsBool('mod_frame_enabled');
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/DTO/AlbumFormatted.php b/app/Livewire/DTO/AlbumFormatted.php
new file mode 100644
index 0000000000..da6e042a0e
--- /dev/null
+++ b/app/Livewire/DTO/AlbumFormatted.php
@@ -0,0 +1,43 @@
+url = $url;
+ $this->title = $album->title;
+ if ($album instanceof BaseAlbum) {
+ $this->min_taken_at = $album->min_taken_at?->format($min_max_date_format);
+ $this->max_taken_at = $album->max_taken_at?->format($min_max_date_format);
+ $this->created_at = $album->created_at->format($create_date_format);
+ $this->description = $album->description;
+ }
+ if ($album instanceof Album) {
+ $this->num_children = $album->num_children;
+ $this->num_photos = $album->num_photos;
+ $this->license = $album->license === LicenseType::NONE ? '' : $album->license->localization();
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/DTO/AlbumRights.php b/app/Livewire/DTO/AlbumRights.php
new file mode 100644
index 0000000000..764aff8f41
--- /dev/null
+++ b/app/Livewire/DTO/AlbumRights.php
@@ -0,0 +1,41 @@
+whereNotNull('longitude')->count() > 0;
+ $this->is_map_accessible = $count_locations && Configs::getValueAsBool('map_display');
+ $this->is_map_accessible = $this->is_map_accessible && (Auth::check() || Configs::getValueAsBool('map_display_public'));
+ $this->is_mod_frame_enabled = Configs::getValueAsBool('mod_frame_enabled');
+ $this->can_use_2fa = !Auth::check() && (WebAuthnCredential::query()->whereNull('disabled_at')->count() > 0);
+ $this->can_edit = Gate::check(AlbumPolicy::CAN_EDIT, [AbstractAlbum::class]);
+ $this->is_search_accessible = Auth::check() || Configs::getValueAsBool('search_public');
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/DTO/Layouts.php b/app/Livewire/DTO/Layouts.php
new file mode 100644
index 0000000000..95ed6e9d7b
--- /dev/null
+++ b/app/Livewire/DTO/Layouts.php
@@ -0,0 +1,30 @@
+photo_layout_justified_row_height ??= Configs::getValueAsInt('photo_layout_justified_row_height');
+ $this->photo_layout_masonry_column_width ??= Configs::getValueAsInt('photo_layout_masonry_column_width');
+ $this->photo_layout_grid_column_width ??= Configs::getValueAsInt('photo_layout_grid_column_width');
+ $this->photo_layout_square_column_width ??= Configs::getValueAsInt('photo_layout_square_column_width');
+ $this->photo_layout_gap ??= Configs::getValueAsInt('photo_layout_gap');
+ $this->photos_layout ??= Configs::getValueAsEnum('layout', PhotoLayoutType::class)->value;
+ }
+
+ public function photos_layout(): PhotoLayoutType
+ {
+ return PhotoLayoutType::from($this->photos_layout);
+ }
+}
diff --git a/app/Livewire/DTO/PhotoFlags.php b/app/Livewire/DTO/PhotoFlags.php
new file mode 100644
index 0000000000..266739b85d
--- /dev/null
+++ b/app/Livewire/DTO/PhotoFlags.php
@@ -0,0 +1,18 @@
+ */
+ #[Locked]
+ public array $configs;
+
+ /** @var array */
+ public array $values;
+
+ /**
+ * This allows Livewire to know which values of the $configs we
+ * want to display in the wire:model. Sort of a white listing.
+ *
+ * @var array
+ */
+ protected $rules = [
+ 'values.*' => 'nullable',
+ ];
+
+ /**
+ * Initialize form data.
+ *
+ * @param Collection $configs
+ *
+ * @return void
+ */
+ public function setConfigs(Collection $configs): void
+ {
+ // ! IMPORTANT, WE MUST use all() to get an array and not use the collections,
+ // ! otherwise this messes up the ordering.
+ $this->configs = $configs->all();
+ $this->values = $configs->map(fn (Configs $c, int $k) => $c->value)->all();
+ }
+
+ /**
+ * Save form data.
+ *
+ * @return void
+ *
+ * @throws ValidationException
+ * @throws LycheeAssertionError
+ */
+ public function save(): void
+ {
+ $this->validate();
+ $n = count($this->values);
+ if ($n !== count($this->configs)) {
+ throw new LycheeAssertionError('Number of values do not match number of configs');
+ }
+
+ for ($idx = 0; $idx < $n; $idx++) {
+ $c = $this->configs[$idx];
+ $candidateValue = $this->values[$idx];
+ $template = 'Error: Expected %s, got ' . ($candidateValue ?? 'NULL') . '.';
+
+ $error_msg = $c->sanity($candidateValue, $template);
+ if ($error_msg === '') {
+ $c->value = $candidateValue;
+ $c->save();
+ } else {
+ $this->addError('values.' . $idx, $error_msg);
+ }
+ }
+ }
+}
diff --git a/app/Livewire/Forms/ImportFromServerForm.php b/app/Livewire/Forms/ImportFromServerForm.php
new file mode 100644
index 0000000000..a672b7998f
--- /dev/null
+++ b/app/Livewire/Forms/ImportFromServerForm.php
@@ -0,0 +1,126 @@
+ */
+ public array $paths = [];
+ public bool $delete_imported;
+ public bool $skip_duplicates;
+ public bool $import_via_symlink;
+ public bool $resync_metadata;
+
+ /**
+ * This allows Livewire to know which values of the $configs we
+ * want to display in the wire:model. Sort of a white listing.
+ *
+ * @return array
+ */
+ protected function rules(): array
+ {
+ return [
+ RequestAttribute::ALBUM_ID_ATTRIBUTE => ['present', new RandomIDRule(true)],
+ RequestAttribute::PATH_ATTRIBUTE => 'required|array|min:1',
+ RequestAttribute::PATH_ATTRIBUTE . '.*' => 'required|string|distinct',
+ RequestAttribute::DELETE_IMPORTED_ATTRIBUTE => 'sometimes|boolean',
+ RequestAttribute::SKIP_DUPLICATES_ATTRIBUTE => 'sometimes|boolean',
+ RequestAttribute::IMPORT_VIA_SYMLINK_ATTRIBUTE => 'sometimes|boolean',
+ RequestAttribute::RESYNC_METADATA_ATTRIBUTE => 'sometimes|boolean',
+ ];
+ }
+
+ /**
+ * split path into paths array.
+ *
+ * @return void
+ */
+ public function prepare()
+ {
+ $subject = $this->path;
+
+ // We split the given path string at unescaped spaces into an
+ // array or more precisely we create an array whose entries
+ // match strings with non-space characters or escaped spaces.
+ // After splitting, the escaped spaces must be replaced by
+ // proper spaces as escaping of spaces is a GUI-only thing to
+ // allow input of several paths into a single input field.
+ $matches = $this->split_escaped(' ', '\\', $subject);
+
+ // drop first element: matched elements start at index 1
+ // array_shift($matches);
+ $this->paths = array_map(fn ($v) => str_replace('\\ ', ' ', $v), $matches);
+
+ // Remove empty elements
+ $this->paths = array_filter($this->paths, fn ($v) => $v === '');
+ }
+
+ /**
+ * Dark magic code from Stack Overflow
+ * https://stackoverflow.com/a/27135602.
+ *
+ * @param string $delimiter
+ * @param string $escaper
+ * @param string $text
+ *
+ * @return string[]
+ */
+ private function split_escaped(string $delimiter, string $escaper, string $text): array
+ {
+ $d = preg_quote($delimiter, '~');
+ $e = preg_quote($escaper, '~');
+ $tokens = preg_split(
+ '~' . $e . '(' . $e . '|' . $d . ')(*SKIP)(*FAIL)|' . $d . '~',
+ $text
+ );
+ $escaperReplacement = str_replace(['\\', '$'], ['\\\\', '\\$'], $escaper);
+ $delimiterReplacement = str_replace(['\\', '$'], ['\\\\', '\\$'], $delimiter);
+
+ return preg_replace(
+ ['~' . $e . $e . '~', '~' . $e . $d . '~'],
+ [$escaperReplacement, $delimiterReplacement],
+ $tokens
+ );
+ }
+
+ /**
+ * Initialize form data.
+ *
+ * @param ?string $albumID
+ *
+ * @return void
+ */
+ public function init(?string $albumID): void
+ {
+ $this->albumID = $albumID;
+ $this->path = public_path('uploads/import/');
+ $this->delete_imported = Configs::getValueAsBool('delete_imported');
+ $this->import_via_symlink = !Configs::getValueAsBool('delete_imported') && Configs::getValueAsBool('import_via_symlink');
+ $this->skip_duplicates = Configs::getValueAsBool('skip_duplicates');
+ $this->resync_metadata = false;
+ }
+
+ public function getAlbum(): null|Album
+ {
+ /** @var Album $album */
+ $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID);
+
+ return $album;
+ }
+
+ public function getImportMode(): ImportMode
+ {
+ return new ImportMode($this->delete_imported, $this->skip_duplicates, $this->import_via_symlink, $this->resync_metadata);
+ }
+}
diff --git a/app/Livewire/Forms/ImportFromUrlForm.php b/app/Livewire/Forms/ImportFromUrlForm.php
new file mode 100644
index 0000000000..c9427a3d59
--- /dev/null
+++ b/app/Livewire/Forms/ImportFromUrlForm.php
@@ -0,0 +1,77 @@
+ */
+ public array $urls = [];
+
+ public string $url = '';
+
+ /**
+ * This allows Livewire to know which values of the $configs we
+ * want to display in the wire:model. Sort of a white listing.
+ *
+ * @return array
+ */
+ protected function rules(): array
+ {
+ return [
+ RequestAttribute::ALBUM_ID_ATTRIBUTE => ['present', new RandomIDRule(true)],
+ RequestAttribute::URLS_ATTRIBUTE => 'required|array|min:1',
+ RequestAttribute::URLS_ATTRIBUTE . '.*' => 'required|string',
+ ];
+ }
+
+ /**
+ * split path into paths array.
+ *
+ * @return void
+ */
+ public function prepare()
+ {
+ $this->urls = [$this->url];
+
+ // The replacement below looks suspicious.
+ // If it was really necessary, then there would be much more special
+ // characters (e.i. for example umlauts in international domain names)
+ // which would require replacement by their corresponding %-encoding.
+ // However, I assume that the PHP method `fopen` is happily fine with
+ // any character and internally handles special characters itself.
+ // Hence, either use a proper encoding method here instead of our
+ // home-brewed, poor-man replacement or drop it entirely.
+ // TODO: Find out what is needed and proceed accordingly.
+ // ? We can't use URL encode because we need to preserve :// and ?
+ $this->urls = str_replace(' ', '%20', $this->urls);
+ }
+
+ /**
+ * Initialize form data.
+ *
+ * @param ?string $albumID
+ *
+ * @return void
+ */
+ public function init(?string $albumID): void
+ {
+ $this->albumID = $albumID;
+ }
+
+ public function getAlbum(): null|Album
+ {
+ /** @var Album $album */
+ $album = $this->albumID === null ? null : Album::query()->findOrFail($this->albumID);
+
+ return $album;
+ }
+}
diff --git a/app/Livewire/Forms/PhotoUpdateForm.php b/app/Livewire/Forms/PhotoUpdateForm.php
new file mode 100644
index 0000000000..cb9a313349
--- /dev/null
+++ b/app/Livewire/Forms/PhotoUpdateForm.php
@@ -0,0 +1,103 @@
+ */
+ #[Locked] public array $tags = [];
+ #[Locked] public string $date = '';
+ public function __construct(
+ public string $photoID,
+ public string $title,
+ public string $description,
+ public string $tagsWithComma,
+ public string $uploadDate,
+ public string $uploadTz,
+ public string $license,
+ ) {
+ $this->tags = collect(explode(',', $this->tagsWithComma))->map(fn ($v) => trim($v))->filter(fn ($v) => $v !== '')->all();
+ $this->date = $this->uploadDate . ':' . $this->uploadTz;
+ }
+
+ /**
+ * This allows Livewire to know which values of the $configs we
+ * want to display in the wire:model. Sort of a white listing.
+ *
+ * @return array
+ */
+ protected function rules(): array
+ {
+ return [
+ RequestAttribute::TITLE_ATTRIBUTE => ['required', new TitleRule()],
+ ...SetPhotoDescriptionRuleSet::rules(),
+ RequestAttribute::TAGS_ATTRIBUTE => 'present|array',
+ RequestAttribute::TAGS_ATTRIBUTE . '.*' => 'required|string|min:1',
+ RequestAttribute::LICENSE_ATTRIBUTE => ['required', new Enum(LicenseType::class)],
+ RequestAttribute::DATE_ATTRIBUTE => 'required|date',
+ ];
+ }
+
+ /**
+ * Validate form.
+ *
+ * @return array>
+ */
+ public function validate(): array
+ {
+ /** @var Validator $validator */
+ $validator = ValidatorFacade::make($this->all(), $this->rules());
+
+ if ($validator->fails()) {
+ return $validator->getMessageBag()->messages();
+ }
+
+ return [];
+ }
+
+ /**
+ * Fetch photo associated with request.
+ *
+ * @return Photo
+ */
+ public function getPhoto(): Photo
+ {
+ $this->photo = Photo::query()->findOrFail($this->photoID);
+
+ return $this->photo;
+ }
+
+ /**
+ * Save data in photo.
+ *
+ * @return void
+ */
+ public function save(): void
+ {
+ $photo = Photo::query()->where('id', '=', $this->photoID)->first();
+
+ $photo->title = $this->title;
+ $photo->description = $this->description;
+ $photo->created_at = $this->date;
+ $photo->tags = $this->tags;
+ $photo->license = LicenseType::from($this->license);
+ $photo->save();
+ }
+
+ public function all(): array
+ {
+ return Utils::getPublicProperties($this);
+ }
+}
diff --git a/app/Livewire/Synth/AlbumFlagsSynth.php b/app/Livewire/Synth/AlbumFlagsSynth.php
new file mode 100644
index 0000000000..f98a47633d
--- /dev/null
+++ b/app/Livewire/Synth/AlbumFlagsSynth.php
@@ -0,0 +1,80 @@
+>
+ */
+ public function dehydrate($target): array
+ {
+ $result = [];
+ $cls = new \ReflectionClass(AlbumFlags::class);
+ $props = $cls->getProperties(\ReflectionProperty::IS_PUBLIC);
+ foreach ($props as $prop) {
+ $propertyValue = $prop->getValue($target);
+ if (is_object($propertyValue)) {
+ throw new LycheeLogicException(sprintf('wrong value type for %s', get_class($propertyValue)));
+ }
+ $result[$prop->getName()] = $propertyValue;
+ }
+
+ return [$result, []];
+ }
+
+ /**
+ * @param array $value
+ *
+ * @return AlbumFlags
+ */
+ public function hydrate($value): AlbumFlags
+ {
+ $cls = new \ReflectionClass(AlbumFlags::class);
+
+ /** @var AlbumFlags $flags */
+ $flags = $cls->newInstanceWithoutConstructor();
+ $props = $cls->getProperties(\ReflectionProperty::IS_PUBLIC);
+ foreach ($props as $prop) {
+ $flags->{$prop->getName()} = $value[$prop->getName()];
+ }
+
+ return $flags;
+ }
+
+ /**
+ * @param AlbumFlags $target
+ * @param string $key
+ *
+ * @return string
+ */
+ public function get(&$target, $key)
+ {
+ return $target->{$key};
+ }
+
+ /**
+ * @param AlbumFlags $target
+ * @param string $key
+ * @param bool $value
+ *
+ * @return void
+ */
+ public function set(&$target, $key, $value)
+ {
+ $target->{$key} = $value;
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Synth/AlbumSynth.php b/app/Livewire/Synth/AlbumSynth.php
new file mode 100644
index 0000000000..d6a62f1909
--- /dev/null
+++ b/app/Livewire/Synth/AlbumSynth.php
@@ -0,0 +1,42 @@
+>
+ */
+ public function dehydrate($target): array
+ {
+ return [[
+ 'id' => $target->id,
+ ], []];
+ }
+
+ /**
+ * @param array $value
+ *
+ * @return AbstractAlbum
+ */
+ public function hydrate($value): AbstractAlbum
+ {
+ /** @var AlbumFactory $albumFactory */
+ $albumFactory = resolve(AlbumFactory::class);
+
+ return $albumFactory->findAbstractAlbumOrFail($value['id']);
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Synth/PhotoSynth.php b/app/Livewire/Synth/PhotoSynth.php
new file mode 100644
index 0000000000..d8e762cf9f
--- /dev/null
+++ b/app/Livewire/Synth/PhotoSynth.php
@@ -0,0 +1,38 @@
+>
+ */
+ public function dehydrate($target): array
+ {
+ return [[
+ 'id' => $target->id,
+ ], []];
+ }
+
+ /**
+ * @param array $value
+ *
+ * @return Photo
+ */
+ public function hydrate($value): Photo
+ {
+ return Photo::findOrFail($value['id']);
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Synth/SessionFlagsSynth.php b/app/Livewire/Synth/SessionFlagsSynth.php
new file mode 100644
index 0000000000..a872a7cbf7
--- /dev/null
+++ b/app/Livewire/Synth/SessionFlagsSynth.php
@@ -0,0 +1,81 @@
+>
+ */
+ public function dehydrate($target): array
+ {
+ $result = [];
+ $cls = new \ReflectionClass(SessionFlags::class);
+ $props = $cls->getProperties(\ReflectionProperty::IS_PUBLIC);
+ foreach ($props as $prop) {
+ $propertyValue = $prop->getValue($target);
+ if (is_object($propertyValue)) {
+ throw new LycheeLogicException(sprintf('wrong value type for %s', get_class($propertyValue)));
+ }
+ $result[$prop->getName()] = $propertyValue;
+ }
+
+ return [$result, []];
+ }
+
+ /**
+ * @param array $value
+ *
+ * @return SessionFlags
+ */
+ public function hydrate($value): SessionFlags
+ {
+ $cls = new \ReflectionClass(SessionFlags::class);
+
+ /** @var SessionFlags $flags */
+ $flags = $cls->newInstanceWithoutConstructor();
+ $props = $cls->getProperties(\ReflectionProperty::IS_PUBLIC);
+ foreach ($props as $prop) {
+ $flags->{$prop->getName()} = $value[$prop->getName()];
+ }
+
+ return $flags;
+ }
+
+ /**
+ * @param SessionFlags $target
+ * @param string $key
+ *
+ * @return string
+ */
+ public function get(&$target, $key)
+ {
+ return $target->{$key};
+ }
+
+ /**
+ * @param SessionFlags $target
+ * @param string $key
+ * @param bool $value
+ *
+ * @return void
+ */
+ public function set(&$target, $key, $value)
+ {
+ $target->{$key} = $value;
+ $target->save();
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Traits/AlbumsPhotosContextMenus.php b/app/Livewire/Traits/AlbumsPhotosContextMenus.php
new file mode 100644
index 0000000000..29bae91ad1
--- /dev/null
+++ b/app/Livewire/Traits/AlbumsPhotosContextMenus.php
@@ -0,0 +1,75 @@
+dispatch(
+ 'openContextMenu',
+ 'menus.AlbumAdd',
+ [Params::PARENT_ID => $this->albumId],
+ 'right: 30px; top: 30px; transform-origin: top right;'
+ )->to(ContextMenu::class);
+ }
+
+ #[Renderless]
+ public function openPhotoDropdown(int $x, int $y, string $photoId): void
+ {
+ $this->dispatch(
+ 'openContextMenu',
+ 'menus.PhotoDropdown',
+ [Params::ALBUM_ID => $this->albumId, Params::PHOTO_ID => $photoId],
+ $this->getCss($x, $y)
+ )->to(ContextMenu::class);
+ }
+
+ #[Renderless]
+ public function openPhotosDropdown(int $x, int $y, array $photoIds): void
+ {
+ $this->dispatch(
+ 'openContextMenu',
+ 'menus.PhotosDropdown',
+ [Params::ALBUM_ID => $this->albumId, Params::PHOTO_IDS => $photoIds],
+ $this->getCss($x, $y)
+ )->to(ContextMenu::class);
+ }
+
+ #[Renderless]
+ public function openAlbumDropdown(int $x, int $y, string $albumID): void
+ {
+ $this->dispatch(
+ 'openContextMenu',
+ 'menus.AlbumDropdown',
+ [Params::PARENT_ID => $this->albumId, Params::ALBUM_ID => $albumID],
+ $this->getCss($x, $y)
+ )->to(ContextMenu::class);
+ }
+
+ #[Renderless]
+ public function openAlbumsDropdown(int $x, int $y, array $albumIds): void
+ {
+ $this->dispatch(
+ 'openContextMenu',
+ 'menus.AlbumsDropdown',
+ [Params::PARENT_ID => $this->albumId, Params::ALBUM_IDS => $albumIds],
+ $this->getCss($x, $y)
+ )->to(ContextMenu::class);
+ }
+
+ private function getCss(int $x, int $y): string
+ {
+ return sprintf('transform-origin: top left; left: %dpx; top: %dpx;', $x, $y);
+ }
+}
diff --git a/app/Livewire/Traits/InteractWithContextMenu.php b/app/Livewire/Traits/InteractWithContextMenu.php
new file mode 100644
index 0000000000..168942507c
--- /dev/null
+++ b/app/Livewire/Traits/InteractWithContextMenu.php
@@ -0,0 +1,18 @@
+dispatch('closeContextMenu')->to(ContextMenu::class);
+ }
+}
diff --git a/app/Livewire/Traits/InteractWithModal.php b/app/Livewire/Traits/InteractWithModal.php
new file mode 100644
index 0000000000..6b98053546
--- /dev/null
+++ b/app/Livewire/Traits/InteractWithModal.php
@@ -0,0 +1,45 @@
+dispatch('openModal', $form, '', $params)->to(Modal::class);
+ }
+
+ /**
+ * Open Modal with form and paramters.
+ *
+ * @param string $form Livewire component to include in the modal
+ * @param string $close_text text to put if we use a close button
+ * @param array $params Parameters for said component
+ *
+ * @return void
+ */
+ protected function openClosableModal(string $form, string $close_text, array $params = []): void
+ {
+ $this->dispatch('openModal', $form, $close_text, $params)->to(Modal::class);
+ }
+
+ /**
+ * Close the modal.
+ *
+ * @return void
+ */
+ protected function closeModal(): void
+ {
+ $this->dispatch('closeModal')->to(Modal::class);
+ }
+}
diff --git a/app/Livewire/Traits/Notify.php b/app/Livewire/Traits/Notify.php
new file mode 100644
index 0000000000..4b2a91ebe3
--- /dev/null
+++ b/app/Livewire/Traits/Notify.php
@@ -0,0 +1,24 @@
+dispatch('notify', ['msg' => $message, 'type' => $type->value]);
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Traits/SilentUpdate.php b/app/Livewire/Traits/SilentUpdate.php
new file mode 100644
index 0000000000..03ad78cb1c
--- /dev/null
+++ b/app/Livewire/Traits/SilentUpdate.php
@@ -0,0 +1,23 @@
+isOpen = true;
+ }
+
+ /**
+ * Close the component.
+ *
+ * @return void
+ */
+ #[On('close')]
+ public function close(): void
+ {
+ $this->isOpen = false;
+ }
+
+ /**
+ * Toggle the component.
+ *
+ * @return void
+ */
+ #[On('toggle')]
+ public function toggle(): void
+ {
+ $this->isOpen = !$this->isOpen;
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Traits/UsePhotoViewActions.php b/app/Livewire/Traits/UsePhotoViewActions.php
new file mode 100644
index 0000000000..50137b70ac
--- /dev/null
+++ b/app/Livewire/Traits/UsePhotoViewActions.php
@@ -0,0 +1,145 @@
+validate();
+ if ($valdiation !== []) {
+ $msg = '';
+ foreach ($valdiation as $value) {
+ $msg .= ($msg !== '' ? ' ' : '') . implode(' ', $value);
+ }
+ $this->notify($msg, NotificationType::ERROR);
+
+ return null;
+ }
+
+ Gate::authorize(PhotoPolicy::CAN_EDIT, [Photo::class, $form->getPhoto()]);
+
+ $form->save();
+
+ $this->notify(__('lychee.CHANGE_SUCCESS'));
+
+ return PhotoResource::make($form->getPhoto());
+ }
+
+ /**
+ * Flip the star of a given photo.
+ *
+ * @param array<0,string> $photoIDarg
+ *
+ * @return bool
+ */
+ #[Renderless]
+ public function toggleStar(array $photoIDarg): bool
+ {
+ if (count($photoIDarg) !== 1 || !is_string($photoIDarg[0])) {
+ $this->notify('wrong ID', NotificationType::ERROR);
+
+ return false;
+ }
+ $photo = Photo::query()->findOrFail($photoIDarg[0]);
+
+ Gate::authorize(PhotoPolicy::CAN_EDIT, [Photo::class, $photo]);
+ $photo->is_starred = !$photo->is_starred;
+ $photo->save();
+
+ return true;
+ }
+
+ /**
+ * Rotate selected photo Counter ClockWise.
+ *
+ * @param string $photoID
+ *
+ * @return void
+ */
+ public function rotate_ccw(string $photoID): void
+ {
+ if (!Configs::getValueAsBool('editor_enabled')) {
+ return;
+ }
+
+ $photo = Photo::query()->findOrFail($photoID);
+ Gate::authorize(PhotoPolicy::CAN_EDIT, [Photo::class, $photo]);
+ $rotateStrategy = new RotateStrategy($photo, -1);
+ $photo = $rotateStrategy->do();
+ // Force hard refresh of the page (to load the rotated image)
+ $this->redirect(route('livewire-gallery-photo', ['albumId' => $this->albumId, 'photoId' => $photo->id]));
+ }
+
+ /**
+ * Rotate selected photo ClockWise.
+ *
+ * @param string $photoID
+ *
+ * @return void
+ */
+ public function rotate_cw(string $photoID): void
+ {
+ if (!Configs::getValueAsBool('editor_enabled')) {
+ return;
+ }
+
+ $photo = Photo::query()->findOrFail($photoID);
+ Gate::authorize(PhotoPolicy::CAN_EDIT, [Photo::class, $photo]);
+ $rotateStrategy = new RotateStrategy($photo, 1);
+ $photo = $rotateStrategy->do();
+ // Force hard refresh of the page (to load the rotated image)
+ $this->redirect(route('livewire-gallery-photo', ['albumId' => $this->albumId, 'photoId' => $photo->id]));
+ }
+
+ /**
+ * Set all photos for given id as starred.
+ *
+ * @param array $photoIDs
+ *
+ * @return void
+ */
+ #[Renderless]
+ public function setStar(array $photoIDs): void
+ {
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $photoIDs]);
+ Photo::whereIn('id', $photoIDs)->update(['is_starred' => true]);
+ }
+
+ /**
+ * Set all photos for given id as NOT starred.
+ *
+ * @param array $photoIDs
+ *
+ * @return void
+ */
+ #[Renderless]
+ public function unsetStar(array $photoIDs): void
+ {
+ Gate::authorize(PhotoPolicy::CAN_EDIT_ID, [Photo::class, $photoIDs]);
+ Photo::whereIn('id', $photoIDs)->update(['is_starred' => false]);
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Traits/UseValidator.php b/app/Livewire/Traits/UseValidator.php
new file mode 100644
index 0000000000..5722527671
--- /dev/null
+++ b/app/Livewire/Traits/UseValidator.php
@@ -0,0 +1,37 @@
+all(), $rules);
+
+ if ($validator->fails()) {
+ $msg = '';
+ foreach ($validator->getMessageBag()->messages() as $value) {
+ $msg .= ($msg !== '' ? ' ' : '') . implode(' ', $value);
+ }
+ $this->dispatch('notify', ['msg' => $msg, 'type' => 'error']);
+
+ return false;
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Traits/UseWireable.php b/app/Livewire/Traits/UseWireable.php
new file mode 100644
index 0000000000..b3b78eae13
--- /dev/null
+++ b/app/Livewire/Traits/UseWireable.php
@@ -0,0 +1,47 @@
+getProperties(\ReflectionProperty::IS_PUBLIC);
+
+ foreach ($props as $prop) {
+ $propertyValue = $prop->getValue($this);
+ if (is_object($propertyValue)) {
+ throw new LycheeLogicException(sprintf('Convertion of %s is not supported', get_class($propertyValue)));
+ }
+ $result[$prop->getName()] = $propertyValue;
+ }
+
+ return $result;
+ }
+
+ /**
+ * @param mixed $data
+ *
+ * @return self
+ *
+ * @throws LycheeLogicException
+ * @throws \ReflectionException
+ */
+ public static function fromLivewire(mixed $data)
+ {
+ if (!is_array($data)) {
+ throw new LycheeLogicException('data is not an array');
+ }
+
+ $cls = new \ReflectionClass(self::class);
+
+ return $cls->newInstanceArgs($data);
+ }
+}
\ No newline at end of file
diff --git a/app/Models/Album.php b/app/Models/Album.php
index c1f55cc385..bcd030ebcd 100644
--- a/app/Models/Album.php
+++ b/app/Models/Album.php
@@ -16,6 +16,7 @@
use App\Relations\HasManyChildPhotos;
use App\Relations\HasManyPhotosRecursively;
use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Query\Builder as BaseBuilder;
use Illuminate\Http\UploadedFile;
@@ -120,6 +121,7 @@ class Album extends BaseAlbum implements Node
{
use NodeTrait;
use ToArrayThrowsNotImplemented;
+ use HasFactory;
/**
* The model's attributes.
diff --git a/app/Models/BaseAlbumImpl.php b/app/Models/BaseAlbumImpl.php
index 34bbfbcb3b..2896d47342 100644
--- a/app/Models/BaseAlbumImpl.php
+++ b/app/Models/BaseAlbumImpl.php
@@ -194,6 +194,11 @@ class BaseAlbumImpl extends Model implements HasRandomID
*/
protected $with = ['owner', 'access_permissions'];
+ protected function _toArray(): array
+ {
+ return parent::toArray();
+ }
+
/**
* @param $query
*
diff --git a/app/Models/Extensions/BaseConfigMigration.php b/app/Models/Extensions/BaseConfigMigration.php
new file mode 100644
index 0000000000..beccc0d95e
--- /dev/null
+++ b/app/Models/Extensions/BaseConfigMigration.php
@@ -0,0 +1,31 @@
+
+ */
+ abstract public function getConfigs(): array;
+
+ /**
+ * Run the migrations.
+ */
+ final public function up(): void
+ {
+ DB::table('configs')->insert($this->getConfigs());
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ final public function down(): void
+ {
+ $keys = collect($this->getConfigs())->map(fn ($v) => $v['key'])->all();
+ DB::table('configs')->whereIn('key', $keys)->delete();
+ }
+}
diff --git a/app/Models/Extensions/ToArrayThrowsNotImplemented.php b/app/Models/Extensions/ToArrayThrowsNotImplemented.php
index 9511ebc4b5..400986775e 100644
--- a/app/Models/Extensions/ToArrayThrowsNotImplemented.php
+++ b/app/Models/Extensions/ToArrayThrowsNotImplemented.php
@@ -3,17 +3,28 @@
namespace App\Models\Extensions;
use App\Exceptions\Internal\NotImplementedException;
+use Illuminate\Support\Facades\Route;
/**
* Trait ToArrayThrowsNotImplemented.
*
* Now that we use Resources toArray should no longer be used.
* Throw an exception if we encounter this function in the code.
+ *
+ * Because Livewire uses toArray to serialize models when passing them to sub components,
+ * we still need to allow those cases. Those can be detected by the Route::is() call
*/
trait ToArrayThrowsNotImplemented
{
+ abstract protected function _toArray(): array;
+
final public function toArray(): array
{
- throw new NotImplementedException('->toArray() is deprecated, use Resources instead.');
+ if (Route::is('livewire_index') || Route::is('livewire.message')) {
+ return $this->_toArray();
+ }
+ $details = Route::getCurrentRoute()?->getName() ?? '';
+ $details .= ($details !== '' ? ':' : '') . get_called_class();
+ throw new NotImplementedException($details . '->toArray() is deprecated, use Resources instead.');
}
}
\ No newline at end of file
diff --git a/app/Models/Photo.php b/app/Models/Photo.php
index eee9734ec7..23d0ee7c50 100644
--- a/app/Models/Photo.php
+++ b/app/Models/Photo.php
@@ -24,6 +24,7 @@
use App\Models\Extensions\ToArrayThrowsNotImplemented;
use App\Models\Extensions\UTCBasedTimes;
use App\Relations\HasManySizeVariants;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Carbon;
@@ -122,6 +123,7 @@
*/
class Photo extends Model
{
+ use HasFactory;
use UTCBasedTimes;
use HasAttributesPatch;
use HasRandomIDAndLegacyTimeBasedID;
@@ -294,6 +296,16 @@ protected function getLicenseAttribute(?string $license): LicenseType
return Configs::getValueAsEnum('default_license', LicenseType::class);
}
+ /**
+ * This is to avoid loading the license from configs & albums.
+ *
+ * @return ?string
+ */
+ public function getOriginalLicense(): ?string
+ {
+ return $this->attributes['license'];
+ }
+
/**
* Accessor for attribute `focal`.
*
diff --git a/app/Models/SizeVariant.php b/app/Models/SizeVariant.php
index 1c2df0c17b..14dfed3713 100644
--- a/app/Models/SizeVariant.php
+++ b/app/Models/SizeVariant.php
@@ -18,6 +18,7 @@
use App\Models\Extensions\UTCBasedTimes;
use App\Relations\HasManyBidirectionally;
use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Facades\Auth;
@@ -51,6 +52,7 @@
* @property string $full_path
* @property int $width
* @property int $height
+ * @property float $ratio
* @property int $filesize
* @property Collection $sym_links
*
@@ -82,6 +84,7 @@ class SizeVariant extends Model
use HasBidirectionalRelationships;
use ThrowsConsistentExceptions;
use ToArrayThrowsNotImplemented;
+ use HasFactory;
/**
* This model has no own timestamps as it is inseparably bound to its
@@ -102,6 +105,28 @@ class SizeVariant extends Model
'width' => 'integer',
'height' => 'integer',
'filesize' => 'integer',
+ 'ratio' => 'float',
+ ];
+
+ /**
+ * @var array The list of attributes which exist as columns of the DB
+ * relation but shall not be serialized to JSON
+ */
+ protected $hidden = [
+ 'id', // irrelevant, because a size variant is always serialized as an embedded object of its photo
+ 'photo', // see above and otherwise infinite loops will occur
+ 'photo_id', // see above
+ 'short_path', // serialize url instead
+ 'sym_links', // don't serialize relation of symlinks
+ ];
+
+ /**
+ * @var string[] The list of "virtual" attributes which do not exist as
+ * columns of the DB relation but which shall be appended to
+ * JSON from accessors
+ */
+ protected $appends = [
+ 'url',
];
/**
@@ -114,6 +139,11 @@ public function newEloquentBuilder($query): SizeVariantBuilder
return new SizeVariantBuilder($query);
}
+ protected function _toArray(): array
+ {
+ return parent::toArray();
+ }
+
/**
* Returns the association to the photo which this size variant belongs
* to.
diff --git a/app/Models/SymLink.php b/app/Models/SymLink.php
index f285eec69a..fd55ef2930 100644
--- a/app/Models/SymLink.php
+++ b/app/Models/SymLink.php
@@ -79,6 +79,11 @@ class SymLink extends Model
'size_variant_id', // see above
];
+ final protected function _toArray(): array
+ {
+ return parent::toArray();
+ }
+
/**
* @param $query
*
diff --git a/app/Models/TagAlbum.php b/app/Models/TagAlbum.php
index 447442d5dd..7cab4c2569 100644
--- a/app/Models/TagAlbum.php
+++ b/app/Models/TagAlbum.php
@@ -75,6 +75,14 @@ class TagAlbum extends BaseAlbum
'show_tags' => ArrayCast::class,
];
+ /**
+ * @var array The list of attributes which exist as columns of the DB
+ * relation but shall not be serialized to JSON
+ */
+ protected $hidden = [
+ 'base_class', // don't serialize base class as a relation, the attributes of the base class are flatly merged into the JSON result
+ ];
+
/**
* @var string[] The list of "virtual" attributes which do not exist as
* columns of the DB relation but which shall be appended to
@@ -84,6 +92,14 @@ class TagAlbum extends BaseAlbum
'thumb',
];
+ protected function _toArray(): array
+ {
+ $result = parent::toArray();
+ $result['is_tag_album'] = true;
+
+ return $result;
+ }
+
public function photos(): HasManyPhotosByTag
{
return new HasManyPhotosByTag($this);
diff --git a/app/Models/User.php b/app/Models/User.php
index 58caf939bc..6b48e3dc74 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -11,6 +11,7 @@
use App\Models\Extensions\UTCBasedTimes;
use Carbon\Exceptions\InvalidFormatException;
use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Query\Builder as BaseBuilder;
@@ -74,6 +75,7 @@
*/
class User extends Authenticatable implements WebAuthnAuthenticatable
{
+ use HasFactory;
use Notifiable;
use WebAuthnAuthentication;
use UTCBasedTimes;
@@ -103,6 +105,11 @@ class User extends Authenticatable implements WebAuthnAuthenticatable
'may_edit_own_settings' => 'boolean',
];
+ protected function _toArray(): array
+ {
+ return parent::toArray();
+ }
+
/**
* Create a new Eloquent query builder for the model.
*
diff --git a/app/Policies/AlbumPolicy.php b/app/Policies/AlbumPolicy.php
index 57881cb1c2..d6810e87dd 100644
--- a/app/Policies/AlbumPolicy.php
+++ b/app/Policies/AlbumPolicy.php
@@ -23,6 +23,7 @@ class AlbumPolicy extends BasePolicy
public const IS_OWNER = 'isOwner';
public const CAN_SEE = 'canSee';
public const CAN_ACCESS = 'canAccess';
+ public const CAN_ACCESS_MAP = 'canAccessMap';
public const CAN_DOWNLOAD = 'canDownload';
public const CAN_DELETE = 'canDelete';
public const CAN_UPLOAD = 'canUpload';
@@ -36,12 +37,12 @@ class AlbumPolicy extends BasePolicy
/**
* This ensures that current album is owned by current user.
*
- * @param User|null $user
- * @param BaseAlbum $album
+ * @param User|null $user
+ * @param BaseAlbum|BaseAlbumImpl $album
*
* @return bool
*/
- public function isOwner(?User $user, BaseAlbum $album): bool
+ public function isOwner(?User $user, BaseAlbum|BaseAlbumImpl $album): bool
{
return $user !== null && $album->owner_id === $user->id;
}
@@ -120,6 +121,30 @@ public function canAccess(?User $user, ?AbstractAlbum $album): bool
return false;
}
+ /**
+ * Check if user can access the map.
+ * Note that this is not used to determine the visibility of the header button because
+ * 1. Admin will always return true.
+ * 2. We also check if there are pictures with location data to be display in the album.
+ *
+ * @param User|null $user
+ * @param AbstractAlbum|null $album
+ *
+ * @return bool
+ */
+ public function canAccessMap(?User $user, ?AbstractAlbum $album): bool
+ {
+ if (!Configs::getValueAsBool('map_display')) {
+ return false;
+ }
+
+ if ($user === null && !Configs::getValueAsBool('map_display_public')) {
+ return false;
+ }
+
+ return $this->canAccess($user, $album);
+ }
+
/**
* Check if current user can download the album.
*
@@ -353,16 +378,14 @@ public function canDeleteById(User $user, array $albumIDs): bool
/**
* Check if user can share selected album with another user.
*
- * @param User|null $user
+ * @param User $user
* @param AbstractAlbum $abstractAlbum
*
* @return bool
- *
- * @throws ConfigurationKeyMissingException
*/
- public function canShareWithUsers(?User $user, ?AbstractAlbum $abstractAlbum): bool
+ public function canShareWithUsers(User $user, AbstractAlbum|BaseAlbumImpl|null $abstractAlbum): bool
{
- if ($user?->may_upload !== true) {
+ if ($user->may_upload !== true) {
return false;
}
@@ -371,7 +394,7 @@ public function canShareWithUsers(?User $user, ?AbstractAlbum $abstractAlbum): b
return true;
}
- if (!$abstractAlbum instanceof BaseAlbum) {
+ if (!$abstractAlbum instanceof BaseAlbum && !$abstractAlbum instanceof BaseAlbumImpl) {
return false;
}
diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php
index b3b64c6fd4..7a1ee67d34 100644
--- a/app/Policies/UserPolicy.php
+++ b/app/Policies/UserPolicy.php
@@ -15,7 +15,6 @@ class UserPolicy extends BasePolicy
public const CAN_EDIT = 'canEdit';
public const CAN_CREATE_OR_EDIT_OR_DELETE = 'canCreateOrEditOrDelete';
public const CAN_LIST = 'canList';
- public const CAN_USE_2FA = 'canUse2FA';
public function canCreateOrEditOrDelete(User $user): bool
{
@@ -28,22 +27,6 @@ public function canList(User $user): bool
return $user->may_upload;
}
- /**
- * This function returns false as it is bypassed by the before()
- * which directly checks for admin rights.
- *
- * TODO: Later we will want to use this function to allow users
- * to make use of 2FA as opposed to only the admin for now.
- *
- * @param User $user
- *
- * @return bool
- */
- public function canUse2FA(User $user): bool
- {
- return false;
- }
-
/**
* This defines if user can edit their settings.
*
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 78a95a7ba4..1268e71f47 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -11,6 +11,10 @@
use App\Factories\AlbumFactory;
use App\Image\SizeVariantDefaultFactory;
use App\Image\StreamStatFilter;
+use App\Livewire\Synth\AlbumFlagsSynth;
+use App\Livewire\Synth\AlbumSynth;
+use App\Livewire\Synth\PhotoSynth;
+use App\Livewire\Synth\SessionFlagsSynth;
use App\Metadata\Json\CommitsRequest;
use App\Metadata\Json\UpdateRequest;
use App\Metadata\Versions\FileVersion;
@@ -32,6 +36,7 @@
use Illuminate\Support\Facades\Log;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
+use Livewire\Livewire;
use Opcodes\LogViewer\Facades\LogViewer;
use Safe\Exceptions\StreamException;
use function Safe\stream_filter_register;
@@ -78,6 +83,14 @@ class AppServiceProvider extends ServiceProvider
GitTags::class => GitTags::class,
];
+ private array $livewireSynth =
+ [
+ AlbumSynth::class,
+ PhotoSynth::class,
+ SessionFlagsSynth::class,
+ AlbumFlagsSynth::class,
+ ];
+
/**
* Bootstrap any application services.
*
@@ -139,6 +152,10 @@ public function boot()
// return true to allow viewing the Log Viewer.
return Auth::authenticate() !== null && Gate::check(SettingsPolicy::CAN_SEE_LOGS, Configs::class);
});
+
+ foreach ($this->livewireSynth as $synth) {
+ Livewire::propertySynthesizer($synth);
+ }
}
/**
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
index d0ce993d6e..e65f4f32dd 100644
--- a/app/Providers/RouteServiceProvider.php
+++ b/app/Providers/RouteServiceProvider.php
@@ -51,6 +51,9 @@ public function boot()
Route::middleware('web-admin')
->group(base_path('routes/web-admin.php'));
+ Route::middleware('web')
+ ->group(base_path('routes/web-livewire.php'));
+
Route::middleware('web')
->group(base_path('routes/web.php'));
});
diff --git a/app/SmartAlbums/BaseSmartAlbum.php b/app/SmartAlbums/BaseSmartAlbum.php
index 1ddfc91a51..b4e3b1f09a 100644
--- a/app/SmartAlbums/BaseSmartAlbum.php
+++ b/app/SmartAlbums/BaseSmartAlbum.php
@@ -4,6 +4,7 @@
use App\Contracts\Exceptions\InternalLycheeException;
use App\Contracts\Models\AbstractAlbum;
+use App\DTO\AlbumProtectionPolicy;
use App\DTO\PhotoSortingCriterion;
use App\Enum\SmartAlbumType;
use App\Exceptions\ConfigurationKeyMissingException;
@@ -66,6 +67,36 @@ protected function __construct(SmartAlbumType $id, \Closure $smartCondition)
}
}
+ protected function _toArray(): array
+ {
+ // The properties `thumb` and `photos` are intentionally treated
+ // differently.
+ //
+ // 1. The result always includes `thumb`, hence we call the
+ // getter method to ensure that the property is initialized, if it
+ // has not already been accessed before.
+ // 2. The result only includes the collection `photos`, if it has
+ // already explicitly been accessed earlier and thus is initialized.
+ //
+ // Rationale:
+ //
+ // 1. This resembles the behaviour of a real Eloquent model, if the
+ // attribute `thumb` was part of the `append`-property of model.
+ // 2. This resembles the behaviour of a real Eloquent model for
+ // one-to-many relations.
+ // A relation is only included in the array representation, if the
+ // relation has been loaded.
+ // This avoids unnecessary hydration of photos if the album is
+ // only used within a listing of sub-albums.
+ return [
+ 'id' => $this->id,
+ 'title' => $this->title,
+ 'thumb' => $this->getThumbAttribute(),
+ 'policy' => AlbumProtectionPolicy::ofSmartAlbum($this),
+ 'photos' => $this->photos?->toArray(),
+ ];
+ }
+
/**
* @throws InternalLycheeException
*/
diff --git a/app/View/Components/Footer.php b/app/View/Components/Footer.php
new file mode 100644
index 0000000000..f2104cafd7
--- /dev/null
+++ b/app/View/Components/Footer.php
@@ -0,0 +1,74 @@
+layout = $layout;
+ $this->show_socials = Configs::getValueAsBool('footer_show_social_media');
+ $this->facebook = Configs::getValueAsString('sm_facebook_url');
+ $this->flickr = Configs::getValueAsString('sm_flickr_url');
+ $this->twitter = Configs::getValueAsString('sm_twitter_url');
+ $this->instagram = Configs::getValueAsString('sm_instagram_url');
+ $this->youtube = Configs::getValueAsString('sm_youtube_url');
+
+ $this->hosted_by = __('lychee.HOSTED_WITH_LYCHEE');
+
+ if (Configs::getValueAsBool('footer_show_copyright')) {
+ $copyright_year = Configs::getValueAsString('site_copyright_begin');
+ $copyright_year_end = Configs::getValueAsString('site_copyright_end');
+ if ($copyright_year !== $copyright_year_end) {
+ $copyright_year = $copyright_year . '-' . $copyright_year_end;
+ }
+
+ $this->copyright = sprintf(
+ __('lychee.FOOTER_COPYRIGHT'),
+ Configs::getValueAsString('site_owner'),
+ $copyright_year
+ );
+ }
+
+ $this->additional_footer_text = Configs::getValueAsString('footer_additional_text');
+ }
+
+ /**
+ * Render component.
+ *
+ * @return View
+ *
+ * @throws BindingResolutionException
+ */
+ public function render(): View
+ {
+ return view('components.' . $this->layout);
+ }
+}
diff --git a/app/View/Components/Gallery/Album/SharingLinks.php b/app/View/Components/Gallery/Album/SharingLinks.php
new file mode 100644
index 0000000000..065e5f8a74
--- /dev/null
+++ b/app/View/Components/Gallery/Album/SharingLinks.php
@@ -0,0 +1,31 @@
+url = route('livewire-gallery-album', ['albumId' => $album->id]);
+ $this->rawUrl = rawurlencode($this->url);
+ $raw_title = rawurlencode($album->title);
+ $this->twitter_link = 'https://twitter.com/share?url=' . $this->rawUrl;
+ $this->facebook_link = 'https://www.facebook.com/sharer.php?u=' . $this->rawUrl . '?t=' . $raw_title;
+ $this->mailTo_link = 'mailto:?subject=' . $raw_title . '&' . $this->rawUrl;
+ }
+
+ public function render(): View
+ {
+ return view('components.gallery.album.sharing-links');
+ }
+}
\ No newline at end of file
diff --git a/app/View/Components/Gallery/Album/Thumbs/Album.php b/app/View/Components/Gallery/Album/Thumbs/Album.php
new file mode 100644
index 0000000000..3f1d42f091
--- /dev/null
+++ b/app/View/Components/Gallery/Album/Thumbs/Album.php
@@ -0,0 +1,73 @@
+subType = Configs::getValueAsEnum('album_subtitle_type', ThumbAlbumSubtitleType::class)->value;
+
+ $this->id = $data->id;
+ $this->thumb = $data->thumb;
+ $this->title = $data->title;
+
+ if ($data instanceof BaseSmartAlbum) {
+ $policy = AlbumProtectionPolicy::ofSmartAlbum($data);
+ } else {
+ /** @var BaseAlbum $data */
+ $this->max_taken_at = $data->max_taken_at?->format($date_format);
+ $this->min_taken_at = $data->min_taken_at?->format($date_format);
+ $this->created_at = $data->created_at->format($date_format);
+ $policy = AlbumProtectionPolicy::ofBaseAlbum($data);
+ }
+
+ $this->is_nsfw = $policy->is_nsfw;
+ $this->is_nsfw_blurred = $this->is_nsfw && Configs::getValueAsBool('nsfw_blur');
+ $this->is_public = $policy->is_public;
+ $this->is_link_required = $policy->is_link_required;
+ $this->is_password_required = $policy->is_password_required;
+
+ $this->is_tag_album = $data instanceof TagAlbum;
+ // This aims to indicate whether the current thumb is used to determine the parent.
+ $this->is_cover_id = $data instanceof AlbumModel && $data->thumb !== null && $data->parent?->cover_id === $data->thumb->id;
+ $this->has_subalbum = $data instanceof AlbumModel && !$data->isLeaf();
+ }
+
+ public function render()
+ {
+ return view('components.gallery.album.thumbs.album');
+ }
+}
\ No newline at end of file
diff --git a/app/View/Components/Gallery/Album/Thumbs/AlbumThumb.php b/app/View/Components/Gallery/Album/Thumbs/AlbumThumb.php
new file mode 100644
index 0000000000..1fe15da36e
--- /dev/null
+++ b/app/View/Components/Gallery/Album/Thumbs/AlbumThumb.php
@@ -0,0 +1,48 @@
+class = $class;
+ if ($thumb === 'uploads/thumb/') {
+ $this->src = Str::contains($type, 'video') ? URL::asset('img/play-icon.png') : URL::asset('img/placeholder.png');
+ $this->dataSrc = Str::contains($type, 'raw') ? URL::asset('img/no_images.svg') : '';
+ } else {
+ $this->src = URL::asset('img/no_images.svg');
+
+ if ($thumb !== '') {
+ $this->dataSrc = URL::asset($thumb);
+ }
+ }
+
+ $this->src = sprintf("src='%s'", $this->src);
+ if ($this->dataSrc !== '') {
+ $this->dataSrc = sprintf("data-src='%s'", $this->dataSrc);
+ }
+
+ if ($thumb2x !== '') {
+ $this->dataSrcSet = sprintf("data-srcset='%s 2x'", URL::asset($thumb2x));
+ }
+ }
+
+ public function render()
+ {
+ return view('components.gallery.album.thumbs.album-thumb');
+ }
+}
diff --git a/app/View/Components/Gallery/Album/Thumbs/Photo.php b/app/View/Components/Gallery/Album/Thumbs/Photo.php
new file mode 100644
index 0000000000..549bc318d4
--- /dev/null
+++ b/app/View/Components/Gallery/Album/Thumbs/Photo.php
@@ -0,0 +1,170 @@
+idx = $idx;
+ $date_format = Configs::getValueAsString('date_format_photo_thumb');
+
+ $this->album_id = $albumId;
+ $this->photo_id = $data->id;
+ $this->title = $data->title;
+ $this->taken_at = $data->taken_at?->format($date_format) ?? '';
+ $this->created_at = $data->created_at->format($date_format);
+
+ $this->is_video = $data->isVideo();
+ $this->is_livephoto = $data->live_photo_url !== null;
+ $this->is_cover_id = $data->album?->cover_id === $data->id;
+
+ $thumb = $data->size_variants->getSizeVariant(SizeVariantType::THUMB);
+ $thumb2x = $data->size_variants->getSizeVariant(SizeVariantType::THUMB2X);
+
+ $this->set_src($thumb);
+
+ $dim = 200;
+ $dim2x = 400;
+ $thumbUrl = $thumb?->url;
+ $thumb2xUrl = $thumb2x?->url;
+
+ // Probably this code needs some fix/refactoring, too. However, where is this method invoked and
+ // what is the structure of the passed `data` array? (Could find any invocation.)
+
+ if ($data->size_variants->hasMediumOrSmall()) {
+ $thumbsUrls = $this->setThumbUrls($data->size_variants);
+
+ $this->_w = $thumbsUrls['w'];
+ $this->_h = $thumbsUrls['h'];
+ $dim2x = $thumbsUrls['w2x'];
+ $thumbUrl = $thumbsUrls['thumbUrl'];
+ $thumb2xUrl = $thumbsUrls['thumb2xUrl'];
+
+ $dim = $this->_w;
+ } elseif (!$data->isVideo()) {
+ $original = $data->size_variants->getSizeVariant(SizeVariantType::ORIGINAL);
+
+ $this->_w ??= $original->width;
+ $this->_h ??= $original->height;
+ // Fallback for images with no small or medium.
+ $thumbUrl ??= $original->url;
+ } elseif ($thumbUrl === null) {
+ // Fallback for videos with no small (the case of no thumb is handled else where).
+ $dim = 200;
+ $dim2x = 200;
+ }
+
+ $this->srcset = sprintf("data-src='%s'", URL::asset($thumbUrl));
+ $this->srcset2x = $thumb2xUrl !== null ? sprintf("data-srcset='%s %dw, %s %dw'", URL::asset($thumbUrl), $dim, URL::asset($thumb2xUrl), $dim2x) : '';
+ }
+
+ /**
+ * Define src.
+ *
+ * this is what will be first deplayed before loading.
+ *
+ * @param SizeVariant|null $thumb
+ *
+ * @return void
+ */
+ private function set_src(?SizeVariant $thumb): void
+ {
+ // default is place holder
+ $this->src = URL::asset('img/placeholder.png');
+
+ // if thumb is not null then directly return:
+ // it will be replaced later by src-set
+ if ($thumb !== null) {
+ $this->src = sprintf("src='%s'", $this->src);
+
+ return;
+ }
+
+ // change the png in the other cases.
+ // no need to lazyload too.
+ $this->is_lazyload = false;
+ $this->src = $this->is_video ? URL::asset('img/play-icon.png') : $this->src;
+ $this->src = $this->is_livephoto ? URL::asset('img/live-photo-icon.png') : $this->src;
+ $this->src = sprintf("src='%s'", $this->src);
+ }
+
+ /**
+ * Fetch the thumbs data.
+ *
+ * @param SizeVariants $sizeVariants
+ *
+ * @return array{w:int,w2x:int|null,h:int,thumbUrl:string,thumb2xUrl:string|null}
+ *
+ * @throws InvalidSizeVariantException
+ */
+ private function setThumbUrls(SizeVariants $sizeVariants): array
+ {
+ $small = $sizeVariants->getSizeVariant(SizeVariantType::SMALL);
+ $small2x = $sizeVariants->getSizeVariant(SizeVariantType::SMALL2X);
+ $medium = $sizeVariants->getSizeVariant(SizeVariantType::MEDIUM);
+ $medium2x = $sizeVariants->getSizeVariant(SizeVariantType::MEDIUM2X);
+
+ /** @var int $w */
+ $w = $small?->width ?? $medium?->width;
+ $w2x = $small2x?->width ?? $medium2x?->width;
+ /** @var int $h */
+ $h = $small?->height ?? $medium?->height;
+
+ /** @var string $thumbUrl */
+ $thumbUrl = $small?->url ?? $medium?->url;
+ $thumb2xUrl = $small2x?->url ?? $medium2x?->url;
+
+ return ['w' => $w, 'w2x' => $w2x, 'h' => $h, 'thumbUrl' => $thumbUrl, 'thumb2xUrl' => $thumb2xUrl];
+ }
+
+ /**
+ * Get the view / contents that represent the component.
+ *
+ * @return \Illuminate\Contracts\View\View|\Closure|string
+ *
+ * @throws BindingResolutionException
+ */
+ public function render()
+ {
+ return view('components.gallery.album.thumbs.photo');
+ }
+}
diff --git a/app/View/Components/Gallery/Photo/Download.php b/app/View/Components/Gallery/Photo/Download.php
new file mode 100644
index 0000000000..386232046e
--- /dev/null
+++ b/app/View/Components/Gallery/Photo/Download.php
@@ -0,0 +1,61 @@
+photoId = $photo->id;
+
+ $downgrade = !Gate::check(PhotoPolicy::CAN_ACCESS_FULL_PHOTO, [Photo::class, $photo]) &&
+ !$photo->isVideo() &&
+ $photo->size_variants->hasMedium() === true;
+
+ $rq = request();
+
+ // TODO: Add Live photo
+ $this->size_variants = collect(SizeVariantType::cases())
+ ->map(fn ($v) => $photo->size_variants->getSizeVariant($v))
+ ->filter(fn ($e) => $e !== null)
+ ->map(fn ($v) => SizeVariantResource::make($v))
+ ->map(fn ($v, $k) => $k === 0 ? $v->setNoUrl($downgrade) : $v) // 0 = original
+ ->map(fn ($v) => $v->toArray($rq))
+ ->map(function ($v) {
+ /** @var array{filesize:int} $v */
+ $v['filesize'] = Helpers::getSymbolByQuantity(intval($v['filesize']));
+
+ return $v;
+ })->all();
+ }
+
+ /**
+ * Render the component.
+ *
+ * @return View
+ */
+ public function render(): View
+ {
+ return view('components.gallery.photo.downloads');
+ }
+}
diff --git a/app/View/Components/Meta.php b/app/View/Components/Meta.php
new file mode 100644
index 0000000000..909abae6ef
--- /dev/null
+++ b/app/View/Components/Meta.php
@@ -0,0 +1,75 @@
+photoId !== null) {
+ // $photo = Photo::findOrFail($this->photoId);
+ // $title = $photo->title;
+ // $description = $photo->description;
+ // $imageUrl = url()->to($photo->size_variants->getMedium()?->url ?? $photo->size_variants->getOriginal()->url);
+ // } elseif ($this->albumId !== null) {
+ // $albumFactory = resolve(AlbumFactory::class);
+ // $album = $albumFactory->findAbstractAlbumOrFail($this->albumId, false);
+ // $title = $album->title;
+ // $description = $album instanceof BaseAlbum ? $album->description : '';
+ // $imageUrl = url()->to($album->thumb->thumbUrl ?? '');
+ // }
+
+ $this->pageTitle = $siteTitle . (!blank($siteTitle) && !blank($title) ? ' – ' : '') . $title;
+ $this->pageDescription = !blank($description) ? $description . ' – via Lychee' : '';
+ $this->siteOwner = Configs::getValueAsString('site_owner');
+ $this->imageUrl = $imageUrl;
+ $this->pageUrl = url()->current();
+ $this->rssEnable = Configs::getValueAsBool('rss_enable');
+ $this->userCssUrl = IndexController::getUserCustomFiles('user.css');
+ $this->userJsUrl = IndexController::getUserCustomFiles('custom.js');
+ $this->frame = '';
+ }
+
+ /**
+ * Render component.
+ *
+ * @return View
+ *
+ * @throws BindingResolutionException
+ */
+ public function render(): View
+ {
+ return view('components.meta');
+ }
+}
\ No newline at end of file
diff --git a/composer.json b/composer.json
index ada197ff7b..d9bc0fadbd 100644
--- a/composer.json
+++ b/composer.json
@@ -49,9 +49,11 @@
"doctrine/dbal": "^3.1",
"geocoder-php/cache-provider": "^4.3",
"geocoder-php/nominatim-provider": "^5.5",
+ "graham-campbell/markdown": "^15.0",
"laminas/laminas-text": "^2.9",
"laragear/webauthn": "^1.2.0",
"laravel/framework": "^10.0",
+ "livewire/livewire": "^3.0",
"lychee-org/nestedset": "^8.0",
"lychee-org/php-exif": "^1.0.0",
"maennchen/zipstream-php": "^3.1",
@@ -79,7 +81,8 @@
"mockery/mockery": "^1.5",
"larastan/larastan": "^2.0",
"php-parallel-lint/php-parallel-lint": "^1.3",
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^10.0",
+ "fakerphp/faker": "^1.23.0"
},
"autoload": {
"classmap": [
diff --git a/composer.lock b/composer.lock
index 3b56297954..dc5df53efc 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "b158ae44fc79994db940f20d61f53fd8",
+ "content-hash": "4e0a59023e0ef37787f242d7b0d54c54",
"packages": [
{
"name": "bepsvpt/secure-headers",
@@ -1220,25 +1220,25 @@
},
{
"name": "geocoder-php/common-http",
- "version": "4.5.0",
+ "version": "4.6.0",
"source": {
"type": "git",
"url": "https://github.com/geocoder-php/php-common-http.git",
- "reference": "4ee2cee60d21631e2a09c196bf6b9fd296bca728"
+ "reference": "15629fd7bf771f525282ad1b60d2106bcf630ce9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/geocoder-php/php-common-http/zipball/4ee2cee60d21631e2a09c196bf6b9fd296bca728",
- "reference": "4ee2cee60d21631e2a09c196bf6b9fd296bca728",
+ "url": "https://api.github.com/repos/geocoder-php/php-common-http/zipball/15629fd7bf771f525282ad1b60d2106bcf630ce9",
+ "reference": "15629fd7bf771f525282ad1b60d2106bcf630ce9",
"shasum": ""
},
"require": {
- "php": "^7.4 || ^8.0",
+ "php": "^8.0",
"php-http/client-implementation": "^1.0",
"php-http/discovery": "^1.6",
"php-http/httplug": "^1.0 || ^2.0",
"php-http/message-factory": "^1.0.2",
- "psr/http-message": "^1.0",
+ "psr/http-message": "^1.0 || ^2.0",
"psr/http-message-implementation": "^1.0",
"willdurand/geocoder": "^4.0"
},
@@ -1247,7 +1247,7 @@
"php-http/message": "^1.0",
"php-http/mock-client": "^1.0",
"phpunit/phpunit": "^9.5",
- "symfony/stopwatch": "~2.5"
+ "symfony/stopwatch": "~2.5 || ~5.0"
},
"type": "library",
"extra": {
@@ -1279,9 +1279,9 @@
"http geocoder"
],
"support": {
- "source": "https://github.com/geocoder-php/php-common-http/tree/4.5.0"
+ "source": "https://github.com/geocoder-php/php-common-http/tree/4.6.0"
},
- "time": "2022-07-30T12:09:30+00:00"
+ "time": "2023-07-31T20:07:24+00:00"
},
{
"name": "geocoder-php/nominatim-provider",
@@ -1342,6 +1342,86 @@
},
"time": "2023-03-01T10:18:27+00:00"
},
+ {
+ "name": "graham-campbell/markdown",
+ "version": "v15.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GrahamCampbell/Laravel-Markdown.git",
+ "reference": "94917d0d712c26788095ad2b5eafd9b33cd43095"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/94917d0d712c26788095ad2b5eafd9b33cd43095",
+ "reference": "94917d0d712c26788095ad2b5eafd9b33cd43095",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^8.75 || ^9.0 || ^10.0",
+ "illuminate/filesystem": "^8.75 || ^9.0 || ^10.0",
+ "illuminate/support": "^8.75 || ^9.0 || ^10.0",
+ "illuminate/view": "^8.75 || ^9.0 || ^10.0",
+ "league/commonmark": "^2.4.1",
+ "php": "^7.4.15 || ^8.0.2"
+ },
+ "require-dev": {
+ "graham-campbell/analyzer": "^4.1",
+ "graham-campbell/testbench": "^6.1",
+ "mockery/mockery": "^1.6.6",
+ "phpunit/phpunit": "^9.6.15 || ^10.4.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "GrahamCampbell\\Markdown\\MarkdownServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GrahamCampbell\\Markdown\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Markdown Is A CommonMark Wrapper For Laravel",
+ "keywords": [
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Laravel Markdown",
+ "Laravel-Markdown",
+ "common mark",
+ "commonmark",
+ "framework",
+ "laravel",
+ "markdown"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Laravel-Markdown/issues",
+ "source": "https://github.com/GrahamCampbell/Laravel-Markdown/tree/v15.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/markdown",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-04T02:43:19+00:00"
+ },
{
"name": "graham-campbell/result-type",
"version": "v1.1.2",
@@ -2826,6 +2906,80 @@
],
"time": "2023-10-17T14:13:20+00:00"
},
+ {
+ "name": "livewire/livewire",
+ "version": "v3.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/livewire/livewire.git",
+ "reference": "6dd3bec8c711cd792742be4620057637e261e6f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/livewire/livewire/zipball/6dd3bec8c711cd792742be4620057637e261e6f7",
+ "reference": "6dd3bec8c711cd792742be4620057637e261e6f7",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/database": "^10.0",
+ "illuminate/support": "^10.0",
+ "illuminate/validation": "^10.0",
+ "league/mime-type-detection": "^1.9",
+ "php": "^8.1",
+ "symfony/http-kernel": "^6.2"
+ },
+ "require-dev": {
+ "calebporzio/sushi": "^2.1",
+ "laravel/framework": "^10.0",
+ "laravel/prompts": "^0.1.6",
+ "mockery/mockery": "^1.3.1",
+ "orchestra/testbench": "^8.0",
+ "orchestra/testbench-dusk": "^8.0",
+ "phpunit/phpunit": "^9.0",
+ "psy/psysh": "@stable"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Livewire\\LivewireServiceProvider"
+ ],
+ "aliases": {
+ "Livewire": "Livewire\\Livewire"
+ }
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Livewire\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Caleb Porzio",
+ "email": "calebporzio@gmail.com"
+ }
+ ],
+ "description": "A front-end framework for Laravel.",
+ "support": {
+ "issues": "https://github.com/livewire/livewire/issues",
+ "source": "https://github.com/livewire/livewire/tree/v3.3.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/livewire",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-20T05:34:05+00:00"
+ },
{
"name": "lychee-org/nestedset",
"version": "v8.0.0",
@@ -4506,16 +4660,16 @@
},
{
"name": "psr/http-message",
- "version": "1.1",
+ "version": "2.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
- "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
- "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"shasum": ""
},
"require": {
@@ -4524,7 +4678,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
@@ -4539,7 +4693,7 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
@@ -4553,9 +4707,9 @@
"response"
],
"support": {
- "source": "https://github.com/php-fig/http-message/tree/1.1"
+ "source": "https://github.com/php-fig/http-message/tree/2.0"
},
- "time": "2023-04-04T09:50:52+00:00"
+ "time": "2023-04-04T09:54:51+00:00"
},
{
"name": "psr/log",
@@ -8843,6 +8997,74 @@
],
"time": "2023-02-20T08:34:36+00:00"
},
+ {
+ "name": "fakerphp/faker",
+ "version": "v1.23.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FakerPHP/Faker.git",
+ "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01",
+ "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "conflict": {
+ "fzaninotto/faker": "*"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "doctrine/persistence": "^1.3 || ^2.0",
+ "ext-intl": "*",
+ "phpunit/phpunit": "^9.5.26",
+ "symfony/phpunit-bridge": "^5.4.16"
+ },
+ "suggest": {
+ "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
+ "ext-curl": "Required by Faker\\Provider\\Image to download images.",
+ "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
+ "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
+ "ext-mbstring": "Required for multibyte Unicode string functionality."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "v1.21-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Faker\\": "src/Faker/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "François Zaninotto"
+ }
+ ],
+ "description": "Faker is a PHP library that generates fake data for you.",
+ "keywords": [
+ "data",
+ "faker",
+ "fixtures"
+ ],
+ "support": {
+ "issues": "https://github.com/FakerPHP/Faker/issues",
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0"
+ },
+ "time": "2023-06-12T08:44:38+00:00"
+ },
{
"name": "filp/whoops",
"version": "2.15.4",
@@ -10112,23 +10334,23 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "10.1.10",
+ "version": "10.1.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "599109c8ca6bae97b23482d557d2874c25a65e59"
+ "reference": "78c3b7625965c2513ee96569a4dbb62601784145"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/599109c8ca6bae97b23482d557d2874c25a65e59",
- "reference": "599109c8ca6bae97b23482d557d2874c25a65e59",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145",
+ "reference": "78c3b7625965c2513ee96569a4dbb62601784145",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.15",
+ "nikic/php-parser": "^4.18 || ^5.0",
"php": ">=8.1",
"phpunit/php-file-iterator": "^4.0",
"phpunit/php-text-template": "^3.0",
@@ -10178,7 +10400,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.10"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11"
},
"funding": [
{
@@ -10186,7 +10408,7 @@
"type": "github"
}
],
- "time": "2023-12-11T06:28:43+00:00"
+ "time": "2023-12-21T15:38:30+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -10836,16 +11058,16 @@
},
{
"name": "sebastian/diff",
- "version": "5.0.3",
+ "version": "5.1.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b"
+ "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b",
- "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f",
+ "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f",
"shasum": ""
},
"require": {
@@ -10858,7 +11080,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "5.1-dev"
}
},
"autoload": {
@@ -10891,7 +11113,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy",
- "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3"
+ "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0"
},
"funding": [
{
@@ -10899,7 +11121,7 @@
"type": "github"
}
],
- "time": "2023-05-01T07:48:21+00:00"
+ "time": "2023-12-22T10:55:06+00:00"
},
{
"name": "sebastian/environment",
diff --git a/config/app.php b/config/app.php
index a9ad42350d..9dbeaaebd5 100644
--- a/config/app.php
+++ b/config/app.php
@@ -30,6 +30,18 @@
'env' => env('APP_ENV', 'production'),
+ /*
+ |--------------------------------------------------------------------------
+ | Application Environment
+ |--------------------------------------------------------------------------
+ |
+ | This value determines whether livewire front-end is enabled as it is
+ | currently under development.
+ |
+ */
+
+ 'livewire' => (bool) env('LIVEWIRE_ENABLED', true),
+
/*
|--------------------------------------------------------------------------
| Application Debug Mode
@@ -243,5 +255,16 @@
'aliases' => Facade::defaultAliases()->merge([
'DebugBar' => Barryvdh\Debugbar\Facades\Debugbar::class,
'Helpers' => App\Facades\Helpers::class,
+ // Aliases for easier access in the blade templates
+ 'Configs' => App\Models\Configs::class,
+ 'AlbumPolicy' => App\Policies\AlbumPolicy::class,
+ 'PhotoPolicy' => App\Policies\PhotoPolicy::class,
+ 'SettingsPolicy' => App\Policies\SettingsPolicy::class,
+ 'UserPolicy' => App\Policies\UserPolicy::class,
+ 'User' => App\Models\User::class,
+ 'SizeVariantType' => App\Enum\SizeVariantType::class,
+ 'FileStatus' => App\Enum\Livewire\FileStatus::class,
+ 'Params' => App\Contracts\Livewire\Params::class,
+ 'PhotoLayoutType' => \App\Enum\PhotoLayoutType::class,
])->toArray(),
];
diff --git a/config/filesystems.php b/config/filesystems.php
index 472d722558..b857a508b6 100644
--- a/config/filesystems.php
+++ b/config/filesystems.php
@@ -44,8 +44,8 @@
// Lychee uses the disk "images" to store the media files
'images' => [
'driver' => 'local',
- 'root' => env('LYCHEE_UPLOADS', public_path('uploads/')),
- 'url' => env('LYCHEE_UPLOADS_URL', 'uploads/'),
+ 'root' => env('LYCHEE_UPLOADS', public_path(env('LYCHEE_UPLOADS_DIR', 'uploads/'))),
+ 'url' => env('LYCHEE_UPLOADS_URL', env('APP_URL', 'http://localhost') . '/' . env('LYCHEE_UPLOADS_DIR', 'uploads/')),
'visibility' => env('LYCHEE_IMAGE_VISIBILITY', 'public'),
'directory_visibility' => env('LYCHEE_IMAGE_VISIBILITY', 'public'),
'permissions' => [
@@ -99,5 +99,11 @@
'url' => env('LYCHEE_SYM_URL', 'sym'),
'visibility' => 'public',
],
+
+ 'tmp-for-tests' => [
+ 'driver' => 'local',
+ 'root' => storage_path('image-tmp/'),
+ 'visibility' => 'private',
+ ],
],
];
diff --git a/config/livewire.php b/config/livewire.php
new file mode 100644
index 0000000000..dc056de88f
--- /dev/null
+++ b/config/livewire.php
@@ -0,0 +1,158 @@
+ 'App\\Livewire\\Components',
+
+ /*
+ |---------------------------------------------------------------------------
+ | View Path
+ |---------------------------------------------------------------------------
+ |
+ | This value is used to specify where Livewire component Blade templates are
+ | stored when running file creation commands like `artisan make:livewire`.
+ | It is also used if you choose to omit a component's render() method.
+ |
+ */
+
+ 'view_path' => resource_path('views/livewire'),
+
+ /*
+ |---------------------------------------------------------------------------
+ | Layout
+ |---------------------------------------------------------------------------
+ | The view that will be used as the layout when rendering a single component
+ | as an entire page via `Route::get('/post/create', CreatePost::class);`.
+ | In this case, the view returned by CreatePost will render into $slot.
+ |
+ */
+
+ 'layout' => 'components.layouts.app',
+
+ /*
+ |---------------------------------------------------------------------------
+ | Lazy Loading Placeholder
+ |---------------------------------------------------------------------------
+ | Livewire allows you to lazy load components that would otherwise slow down
+ | the initial page load. Every component can have a custom placeholder or
+ | you can define the default placeholder view for all components below.
+ |
+ */
+
+ 'lazy_placeholder' => null,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Temporary File Uploads
+ |---------------------------------------------------------------------------
+ |
+ | Livewire handles file uploads by storing uploads in a temporary directory
+ | before the file is stored permanently. All file uploads are directed to
+ | a global endpoint for temporary storage. You may configure this below:
+ |
+ */
+
+ 'temporary_file_upload' => [
+ 'disk' => null, // Example: 'local', 's3' | Default: 'default'
+ 'rules' => null, // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB)
+ 'directory' => null, // Example: 'tmp' | Default: 'livewire-tmp'
+ 'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1'
+ 'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs...
+ 'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
+ 'mov', 'avi', 'wmv', 'mp3', 'm4a',
+ 'jpg', 'jpeg', 'mpga', 'webp', 'wma',
+ ],
+ 'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated...
+ ],
+
+ /*
+ |---------------------------------------------------------------------------
+ | Render On Redirect
+ |---------------------------------------------------------------------------
+ |
+ | This value determines if Livewire will run a component's `render()` method
+ | after a redirect has been triggered using something like `redirect(...)`
+ | Setting this to true will render the view once more before redirecting
+ |
+ */
+
+ 'render_on_redirect' => false,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Eloquent Model Binding
+ |---------------------------------------------------------------------------
+ |
+ | Previous versions of Livewire supported binding directly to eloquent model
+ | properties using wire:model by default. However, this behavior has been
+ | deemed too "magical" and has therefore been put under a feature flag.
+ |
+ */
+
+ 'legacy_model_binding' => false,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Auto-inject Frontend Assets
+ |---------------------------------------------------------------------------
+ |
+ | By default, Livewire automatically injects its JavaScript and CSS into the
+ | and of pages containing Livewire components. By disabling
+ | this behavior, you need to use @livewireStyles and @livewireScripts.
+ |
+ */
+
+ 'inject_assets' => true,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Navigate (SPA mode)
+ |---------------------------------------------------------------------------
+ |
+ | By adding `wire:navigate` to links in your Livewire application, Livewire
+ | will prevent the default link handling and instead request those pages
+ | via AJAX, creating an SPA-like effect. Configure this behavior here.
+ |
+ */
+
+ 'navigate' => [
+ 'show_progress_bar' => true,
+ 'progress_bar_color' => '#2299dd',
+ ],
+
+ /*
+ |---------------------------------------------------------------------------
+ | HTML Morph Markers
+ |---------------------------------------------------------------------------
+ |
+ | Livewire intelligently "morphs" existing HTML into the newly rendered HTML
+ | after each update. To make this process more reliable, Livewire injects
+ | "markers" into the rendered Blade surrounding @if, @class & @foreach.
+ |
+ */
+
+ 'inject_morph_markers' => true,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Pagination Theme
+ |---------------------------------------------------------------------------
+ |
+ | When enabling Livewire's pagination feature by using the `WithPagination`
+ | trait, Livewire will use Tailwind templates to render pagination views
+ | on the page. If you want Bootstrap CSS, you can specify: "bootstrap"
+ |
+ */
+
+ 'pagination_theme' => 'tailwind',
+];
diff --git a/database/factories/AlbumFactory.php b/database/factories/AlbumFactory.php
new file mode 100644
index 0000000000..e74325b045
--- /dev/null
+++ b/database/factories/AlbumFactory.php
@@ -0,0 +1,65 @@
+
+ */
+class AlbumFactory extends Factory
+{
+ use OwnedBy;
+
+ /**
+ * The name of the factory's corresponding model.
+ *
+ * @var string
+ */
+ protected $model = Album::class;
+
+ /**
+ * Define the model's default state.
+ *
+ * @return array
+ */
+ public function definition(): array
+ {
+ return [
+ 'title' => fake()->country() . ' ' . fake()->year(),
+ 'owner_id' => 1,
+ ];
+ }
+
+ /**
+ * Defines the parent of the create album.
+ *
+ * @param Album $parent
+ *
+ * @return self
+ */
+ public function children_of(Album $parent): Factory
+ {
+ return $this->afterMaking(
+ fn (Album $album) => $parent->appendNode($album)
+ )
+ ->afterCreating(function (Album $album) use ($parent) {
+ $parent->load('children');
+ $parent->fixOwnershipOfChildren();
+ });
+ }
+
+ /**
+ * Make the album root.
+ *
+ * @return self
+ */
+ public function as_root(): self
+ {
+ return $this->afterMaking(function (Album $album) {
+ $album->makeRoot();
+ });
+ }
+}
diff --git a/database/factories/PhotoFactory.php b/database/factories/PhotoFactory.php
new file mode 100644
index 0000000000..ebd1c46f66
--- /dev/null
+++ b/database/factories/PhotoFactory.php
@@ -0,0 +1,136 @@
+
+ */
+class PhotoFactory extends Factory
+{
+ use OwnedBy;
+
+ private bool $with_size_variants = true;
+
+ /**
+ * The name of the factory's corresponding model.
+ *
+ * @var string
+ */
+ protected $model = Photo::class;
+
+ /**
+ * Define the model's default state.
+ *
+ * @return array
+ */
+ public function definition(): array
+ {
+ return [
+ 'title' => 'CR_' . fake()->numerify('####'),
+ 'description' => null,
+ 'tags' => '',
+ 'is_public' => false,
+ 'owner_id' => 1,
+ 'type' => 'image/jpeg',
+ 'iso' => '100',
+ 'aperture' => 'f/2',
+ 'make' => 'Canon',
+ 'model' => 'Canon EOS R',
+ 'lens' => 'EF200mm f/2L IS',
+ 'shutter' => '1/320 s',
+ 'focal' => '200mm',
+ 'taken_at' => now(),
+ 'taken_at_orig_tz' => null,
+ 'is_starred' => false,
+ 'album_id' => null,
+ 'checksum' => sha1(rand()),
+ 'original_checksum' => sha1(rand()),
+ 'license' => 'none',
+ 'created_at' => now(),
+ 'updated_at' => now(),
+ ];
+ }
+
+ /**
+ * Indicate that the user is suspended.
+ */
+ public function without_size_variants(): Factory
+ {
+ $this->with_size_variants = false;
+
+ return $this;
+ }
+
+ /**
+ * Set a bunch of GPS coordinates (in Netherlands).
+ *
+ * @return array
+ */
+ public function with_GPS_coordinates(): self
+ {
+ return $this->state(function (array $attributes) {
+ return [
+ 'latitude' => '51.81738000',
+ 'longitude' => '5.86694306',
+ 'altitude' => '83.1000',
+ ];
+ });
+ }
+
+ /**
+ * Set a bunch of GPS coordinates (in Netherlands).
+ *
+ * @return array
+ */
+ public function with_subGPS_coordinates(): self
+ {
+ return $this->state(function (array $attributes) {
+ return [
+ 'latitude' => '-51.81738000',
+ 'longitude' => '-5.86694306',
+ 'altitude' => '83.1000',
+ ];
+ });
+ }
+
+ /**
+ * Set a bunch of GPS coordinates (in Netherlands).
+ *
+ * @return self
+ */
+ public function in(Album $album): self
+ {
+ return $this->state(function (array $attributes) use ($album) {
+ return [
+ 'album_id' => $album->id,
+ ];
+ })->afterCreating(function (Photo $photo) {
+ $photo->load('album', 'owner');
+ });
+ }
+
+ /**
+ * Configure the model factory.
+ * We create 7 random Size Variants.
+ */
+ public function configure(): static
+ {
+ return $this->afterCreating(function (Photo $photo) {
+ // Creates the size variants
+ if ($this->with_size_variants) {
+ SizeVariant::factory()->count(7)->allSizeVariants()->create(['photo_id' => $photo->id]);
+ $photo->fresh();
+ $photo->load('size_variants');
+ }
+
+ // Reset the value if it was disabled.
+ $this->with_size_variants = true;
+ });
+ }
+}
diff --git a/database/factories/SizeVariantFactory.php b/database/factories/SizeVariantFactory.php
new file mode 100644
index 0000000000..e2a0bcc097
--- /dev/null
+++ b/database/factories/SizeVariantFactory.php
@@ -0,0 +1,57 @@
+
+ */
+class SizeVariantFactory extends Factory
+{
+ private const H = 360;
+ private const W = 540;
+ private const FS = 141011;
+
+ /**
+ * The name of the factory's corresponding model.
+ *
+ * @var string
+ */
+ protected $model = SizeVariant::class;
+
+ /**
+ * Define the model's default state.
+ *
+ * @return array
+ */
+ public function definition(): array
+ {
+ $hash = fake()->sha1();
+ $url = substr($hash, 0, 2) . '/' . substr($hash, 2, 2) . '/' . substr($hash, 4) . '.jpg';
+
+ return ['type' => SizeVariantType::ORIGINAL, 'short_path' => SizeVariantType::ORIGINAL->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H * 8, 'width' => self::W * 8, 'filesize' => 64 * self::FS];
+ }
+
+ /**
+ * Creates 7 size variant with correct type and size,.
+ */
+ public function allSizeVariants(): Factory
+ {
+ $hash = fake()->sha1();
+ $url = substr($hash, 0, 2) . '/' . substr($hash, 2, 2) . '/' . substr($hash, 4) . '.jpg';
+
+ return $this->state(new Sequence(
+ ['type' => SizeVariantType::ORIGINAL, 'short_path' => SizeVariantType::ORIGINAL->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H * 8, 'width' => self::W * 8, 'filesize' => 64 * self::FS],
+ ['type' => SizeVariantType::MEDIUM2X, 'short_path' => SizeVariantType::MEDIUM2X->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H * 6, 'width' => self::W * 6, 'filesize' => 36 * self::FS],
+ ['type' => SizeVariantType::MEDIUM, 'short_path' => SizeVariantType::MEDIUM->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H * 3, 'width' => self::W * 3, 'filesize' => 9 * self::FS],
+ ['type' => SizeVariantType::SMALL2X, 'short_path' => SizeVariantType::SMALL2X->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H * 2, 'width' => self::W * 2, 'filesize' => 4 * self::FS],
+ ['type' => SizeVariantType::SMALL, 'short_path' => SizeVariantType::SMALL->name() . '/' . $url, 'ratio' => 1.5, 'height' => self::H, 'width' => self::W, 'filesize' => self::FS],
+ ['type' => SizeVariantType::THUMB2X, 'short_path' => SizeVariantType::THUMB2X->name() . '/' . $url, 'ratio' => 1.5, 'height' => 400, 'width' => 400, 'filesize' => 160_000],
+ ['type' => SizeVariantType::THUMB, 'short_path' => SizeVariantType::THUMB->name() . '/' . $url, 'ratio' => 1.5, 'height' => 200, 'width' => 200, 'filesize' => 40_000],
+ ));
+ }
+}
diff --git a/database/factories/Traits/OwnedBy.php b/database/factories/Traits/OwnedBy.php
new file mode 100644
index 0000000000..e421626ebd
--- /dev/null
+++ b/database/factories/Traits/OwnedBy.php
@@ -0,0 +1,26 @@
+state(function (array $attributes) use ($user) {
+ return [
+ 'owner_id' => $user->id,
+ ];
+ });
+ }
+}
\ No newline at end of file
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
index 36125fd748..df30138c27 100644
--- a/database/factories/UserFactory.php
+++ b/database/factories/UserFactory.php
@@ -4,8 +4,10 @@
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
-use Illuminate\Support\Str;
+/**
+ * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
+ */
class UserFactory extends Factory
{
/**
@@ -18,16 +20,59 @@ class UserFactory extends Factory
/**
* Define the model's default state.
*
- * @return array
+ * @return array
*/
- public function definition()
+ public function definition(): array
{
return [
- 'name' => $this->faker->name,
- 'email' => $this->faker->unique()->safeEmail,
- 'email_verified_at' => now(),
+ 'username' => fake()->name(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
- 'remember_token' => Str::random(10),
+ 'may_administrate' => false,
+ 'may_upload' => false,
+ 'email' => fake()->email(),
+ 'token' => null,
+ 'remember_token' => null,
+ 'may_edit_own_settings' => true,
];
}
+
+ /**
+ * Indicate that user is Admin.
+ *
+ * @return Factory
+ */
+ public function may_administrate(): Factory
+ {
+ return $this->state(function (array $attributes) {
+ return [
+ 'may_administrate' => true,
+ ];
+ });
+ }
+
+ /**
+ * Indicate that the user has upload rights.
+ *
+ * @return Factory
+ */
+ public function may_upload(): Factory
+ {
+ return $this->state(function (array $attributes) {
+ return [
+ 'may_upload' => true,
+ ];
+ });
+ }
+
+ /**
+ * Indicates the user is locked.
+ *
+ * @return Factory
+ */
+ public function locked(): Factory
+ {
+ return $this->state(function (array $attributes) {
+ return ['may_edit_own_settings' => false];
+ });
+ }
}
diff --git a/database/migrations/2023_05_04_193000_add_use_last_modified_date_when_no_exit_date_setting.php b/database/migrations/2023_05_04_193000_add_use_last_modified_date_when_no_exit_date_setting.php
index 5d99c45104..fdd150a4bf 100644
--- a/database/migrations/2023_05_04_193000_add_use_last_modified_date_when_no_exit_date_setting.php
+++ b/database/migrations/2023_05_04_193000_add_use_last_modified_date_when_no_exit_date_setting.php
@@ -1,35 +1,19 @@
insert([
- 'key' => 'use_last_modified_date_when_no_exif_date',
- 'value' => '0',
- 'cat' => 'Image Processing',
- 'type_range' => BOOL,
- 'confidentiality' => '0',
- 'description' => 'Use the file\'s last modified time when Exif data has no creation date',
- ]);
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- DB::table('configs')->where('key', '=', 'use_last_modified_date_when_no_exif_date')->delete();
+ return [
+ [
+ 'key' => 'use_last_modified_date_when_no_exif_date',
+ 'value' => '0',
+ 'cat' => 'Image Processing',
+ 'type_range' => '0|1',
+ 'confidentiality' => '0',
+ 'description' => 'Use the file\'s last modified time when Exif data has no creation date',
+ ],
+ ];
}
};
diff --git a/database/migrations/2023_09_24_110932_add_date_display_configurations.php b/database/migrations/2023_09_24_110932_add_date_display_configurations.php
new file mode 100644
index 0000000000..833bb30424
--- /dev/null
+++ b/database/migrations/2023_09_24_110932_add_date_display_configurations.php
@@ -0,0 +1,70 @@
+ 'date_format_photo_thumb',
+ 'value' => 'M j, Y, g:i:s A e',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::STRING_REQ,
+ 'description' => 'Format the date for the photo thumbs. See https://www.php.net/manual/en/datetime.format.php',
+ ],
+ [
+ 'key' => 'date_format_photo_overlay',
+ 'value' => 'M j, Y, g:i:s A e',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::STRING_REQ,
+ 'description' => 'Format the date for the photo overlay. See https://www.php.net/manual/en/datetime.format.php',
+ ],
+ [
+ 'key' => 'date_format_sidebar_uploaded',
+ 'value' => 'M j, Y, g:i:s A e',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::STRING_REQ,
+ 'description' => 'Format the upload date for the photo sidebar. See https://www.php.net/manual/en/datetime.format.php',
+ ],
+ [
+ 'key' => 'date_format_sidebar_taken_at',
+ 'value' => 'M j, Y, g:i:s A e',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::STRING_REQ,
+ 'description' => 'Format the capture date for the photo sidebar. See https://www.php.net/manual/en/datetime.format.php',
+ ],
+ [
+ 'key' => 'date_format_hero_min_max',
+ 'value' => 'F Y',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::STRING_REQ,
+ 'description' => 'Format the date for the album hero. See https://www.php.net/manual/en/datetime.format.php',
+ ],
+ [
+ 'key' => 'date_format_hero_created_at',
+ 'value' => 'M j, Y, g:i:s A T',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::STRING_REQ,
+ 'description' => 'Format the created date for the album details. See https://www.php.net/manual/en/datetime.format.php',
+ ],
+ [
+ 'key' => 'date_format_album_thumb',
+ 'value' => 'M Y',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::STRING_REQ,
+ 'description' => 'Format the date for the album thumbs. See https://www.php.net/manual/en/datetime.format.php',
+ ],
+ ];
+ }
+};
diff --git a/database/migrations/2023_09_24_223901_add_config_livewire_chunk_size.php b/database/migrations/2023_09_24_223901_add_config_livewire_chunk_size.php
new file mode 100644
index 0000000000..b4b0218b9a
--- /dev/null
+++ b/database/migrations/2023_09_24_223901_add_config_livewire_chunk_size.php
@@ -0,0 +1,22 @@
+ 'upload_chunk_size',
+ 'value' => '0',
+ 'confidentiality' => '0',
+ 'cat' => self::IMAGE_PROCESSING,
+ 'type_range' => self::INT,
+ 'description' => 'Size of chunks when uploading in bytes: 0 is auto',
+ ],
+ ];
+ }
+};
diff --git a/database/migrations/2023_09_24_233717_refactor_type_layout_livewire.php b/database/migrations/2023_09_24_233717_refactor_type_layout_livewire.php
new file mode 100644
index 0000000000..854949f1ef
--- /dev/null
+++ b/database/migrations/2023_09_24_233717_refactor_type_layout_livewire.php
@@ -0,0 +1,36 @@
+where('key', '=', 'layout')->update([
+ 'type_range' => self::SQUARE . '|' . self::JUSTIFIED . '|' . self::MASONRY . '|' . self::GRID,
+ 'description' => 'Layout for pictures',
+ ],
+ );
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ DB::table('configs')->where('key', '=', 'layout')->update([
+ 'type_range' => self::SQUARE . '|' . self::JUSTIFIED . '|' . self::UNJUSTIFIED,
+ 'description' => 'Layout for pictures',
+ ],
+ );
+ }
+};
diff --git a/database/migrations/2023_09_25_123925_config_blur_nsfw.php b/database/migrations/2023_09_25_123925_config_blur_nsfw.php
new file mode 100644
index 0000000000..d0e3f38ce2
--- /dev/null
+++ b/database/migrations/2023_09_25_123925_config_blur_nsfw.php
@@ -0,0 +1,22 @@
+ 'nsfw_banner_blur_backdrop',
+ 'value' => '0',
+ 'confidentiality' => '0',
+ 'cat' => self::MOD_NSFW,
+ 'type_range' => self::BOOL,
+ 'description' => 'Blur background instead of dark red opaque.',
+ ],
+ ];
+ }
+};
diff --git a/database/migrations/2023_12_18_232500_config_pagination_search_limit.php b/database/migrations/2023_12_18_232500_config_pagination_search_limit.php
new file mode 100644
index 0000000000..f1605ef86e
--- /dev/null
+++ b/database/migrations/2023_12_18_232500_config_pagination_search_limit.php
@@ -0,0 +1,23 @@
+ 'search_pagination_limit',
+ 'value' => '1000',
+ 'confidentiality' => '0',
+ 'cat' => self::MOD_SEARCH,
+ 'type_range' => self::POSITIVE,
+ 'description' => 'Number of results to display per page.',
+ ],
+ ];
+ }
+};
diff --git a/database/migrations/2023_12_19_115547_search_characters_limit.php b/database/migrations/2023_12_19_115547_search_characters_limit.php
new file mode 100644
index 0000000000..f0ecc93d30
--- /dev/null
+++ b/database/migrations/2023_12_19_115547_search_characters_limit.php
@@ -0,0 +1,23 @@
+ 'search_minimum_length_required',
+ 'value' => '4',
+ 'confidentiality' => '0',
+ 'cat' => self::MOD_SEARCH,
+ 'type_range' => self::POSITIVE,
+ 'description' => 'Number of characters required to trigger search (default: 4).',
+ ],
+ ];
+ }
+};
diff --git a/database/migrations/2023_12_19_122408_add_positive_requirements.php b/database/migrations/2023_12_19_122408_add_positive_requirements.php
index 13fc150903..0155379c1c 100644
--- a/database/migrations/2023_12_19_122408_add_positive_requirements.php
+++ b/database/migrations/2023_12_19_122408_add_positive_requirements.php
@@ -16,6 +16,8 @@
'swipe_tolerance_x',
'swipe_tolerance_y',
'log_max_num_line',
+ 'search_pagination_limit',
+ 'search_minimum_length_required',
];
/**
diff --git a/database/migrations/2023_12_20_180854_add_setting_height_width_gallery.php b/database/migrations/2023_12_20_180854_add_setting_height_width_gallery.php
new file mode 100644
index 0000000000..749499fc43
--- /dev/null
+++ b/database/migrations/2023_12_20_180854_add_setting_height_width_gallery.php
@@ -0,0 +1,58 @@
+ 'photo_layout_justified_row_height',
+ 'value' => '320',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::POSITIVE,
+ 'description' => 'Heights of rows in Justified photo layout',
+ ],
+ [
+ // md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-7
+ 'key' => 'photo_layout_masonry_column_width',
+ 'value' => '300',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::POSITIVE,
+ 'description' => 'Minimum column width in Masonry photo layout.',
+ ],
+ [
+ // md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-7
+ 'key' => 'photo_layout_grid_column_width',
+ 'value' => '250',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::POSITIVE,
+ 'description' => 'Minimum column width in Grid photo layout.',
+ ],
+ [
+ // md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:grid-cols-7
+ 'key' => 'photo_layout_square_column_width',
+ 'value' => '200',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::POSITIVE,
+ 'description' => 'Minimum column width in Square photo layout.',
+ ],
+ [
+ 'key' => 'photo_layout_gap',
+ 'value' => '12',
+ 'confidentiality' => '0',
+ 'cat' => self::GALLERY,
+ 'type_range' => self::POSITIVE,
+ 'description' => 'Gap between columns in Square/Masonry/Grid photo layout.',
+ ],
+ ];
+ }
+};
diff --git a/database/migrations/2023_12_23_160356_bump_version050000.php b/database/migrations/2023_12_23_160356_bump_version050000.php
new file mode 100644
index 0000000000..ff784b8cb1
--- /dev/null
+++ b/database/migrations/2023_12_23_160356_bump_version050000.php
@@ -0,0 +1,24 @@
+where('key', 'version')->update(['value' => '050000']);
+ DB::table('configs')->where('value', '=', 'Lychee v4')->update(['value' => 'Lychee v5']);
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ DB::table('configs')->where('key', 'version')->update(['value' => '041300']);
+ DB::table('configs')->where('value', '=', 'Lychee v5')->update(['value' => 'Lychee v4']);
+ }
+};
diff --git a/lang/cz/lychee.php b/lang/cz/lychee.php
index c7ad4546bd..fd81a2c025 100644
--- a/lang/cz/lychee.php
+++ b/lang/cz/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Heslo',
'ENTER' => 'Vložit',
'CANCEL' => 'Storno',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Příhlásit se',
'CLOSE' => 'Zavřít',
'SETTINGS' => 'Nastavení',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Uživatelé',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'O Lychee',
'DIAGNOSTICS' => 'Diagnostika',
'DIAGNOSTICS_GET_SIZE' => 'Request space usage',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Protokoly',
'SIGN_OUT' => 'Odhlásit se',
'UPDATE_AVAILABLE' => 'Update je k dispozici!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Funkce Mapy byla v nastavení deaktivována.',
'ERROR_SEARCH_DEACTIVATED' => 'Funkce hledání byla v nastavení deaktivována.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Opakovat',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Vzhled fotografií:',
'LAYOUT_SQUARES' => 'Čtvercové náhledy',
'LAYOUT_JUSTIFIED' => 'V poměru stran, zarovnáno',
+ 'LAYOUT_MASONRY' => 'V poměru stran, masonry',
+ 'LAYOUT_GRID' => 'V poměru stran, grid',
'LAYOUT_UNJUSTIFIED' => 'V poměru stran, nezarovnáno',
'SET_LAYOUT' => 'Změnit vzhled',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Bez výsledku',
'VIEW_NO_PUBLIC_ALBUMS' => 'Veřejná alba nejsou k dispozici',
diff --git a/lang/de/lychee.php b/lang/de/lychee.php
index 514bf4c18a..056a06a5ee 100644
--- a/lang/de/lychee.php
+++ b/lang/de/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Kennwort',
'ENTER' => 'Eingabe',
'CANCEL' => 'Abbrechen',
+ 'CONFIRM' => 'Bestätigen',
'SIGN_IN' => 'Anmelden',
'CLOSE' => 'Schließen',
'SETTINGS' => 'Einstellungen',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallerie',
'USERS' => 'Benutzer',
+ 'PROFILE' => 'Profil',
'CREATE' => 'Erstellen',
'REMOVE' => 'Entfernen',
'SHARE' => 'Freigeben',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'Über Lychee',
'DIAGNOSTICS' => 'Diagnose',
'DIAGNOSTICS_GET_SIZE' => 'Speicherplatz-Nutzung abrufen',
+ 'JOBS' => 'Job-Verlauf anzeigen',
'LOGS' => 'Logs anzeigen',
'SIGN_OUT' => 'Abmelden',
'UPDATE_AVAILABLE' => 'Update verfügbar!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Karten sind unter Einstellungen deaktiviert worden.',
'ERROR_SEARCH_DEACTIVATED' => 'Suchfunktion wurde unter Einstellungen deaktiviert.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Änderung erfolgreich.',
'RETRY' => 'Noch einmal versuchen',
'OVERRIDE' => 'Überschreiben',
'TAGS_OVERRIDE_INFO' => 'Wenn das nicht aktiviert ist, werden die Tags zu den vorhandenen Tags des Fotos hinzugefügt.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Layout des Fotos:',
'LAYOUT_SQUARES' => 'Quadratische Miniaturansichten',
'LAYOUT_JUSTIFIED' => 'Seitenverhältnis beibehalten, Blocksatz',
+ 'LAYOUT_MASONRY' => 'Seitenverhältnis beibehalten, masonry',
+ 'LAYOUT_GRID' => 'Seitenverhältnis beibehalten, Gitter',
'LAYOUT_UNJUSTIFIED' => 'Seitenverhältnis beibehalten, Flattersatz',
'SET_LAYOUT' => 'Ausgerichtetes Layout benutzen:',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Standardmäßige Sichtbarkeit wurde erfolgreich geändert.',
'NSFW_BANNER' => 'Krititscher Inhalt Diese Album enthält krititsche Inhalte, die manche Personen anstößig oder verstörend finden könnten.
Zur Einwilligung klicken.
',
+ 'NSFW_HEADER' => 'Krititscher Inhalt',
+ 'NSFW_EXPLANATION' => 'Diese Album enthält krititsche Inhalte, die manche Personen anstößig oder verstörend finden könnten.',
+ 'TAP_CONSENT' => 'Zur Einwilligung klicken.',
'VIEW_NO_RESULT' => 'Keine Ergebnisse',
'VIEW_NO_PUBLIC_ALBUMS' => 'Keine öffentlichen Alben',
diff --git a/lang/el/lychee.php b/lang/el/lychee.php
index 4c8b3b9b2c..f76cb8461a 100644
--- a/lang/el/lychee.php
+++ b/lang/el/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Κωδικός πρόσβασης',
'ENTER' => 'Είσοδος',
'CANCEL' => 'Άκυρο',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Συνδεθείτε',
'CLOSE' => 'Κλείσιμο',
'SETTINGS' => 'Ρυθμίσεις',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Χρήστες',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'Περί Lychee',
'DIAGNOSTICS' => 'Διαγνωστικά',
'DIAGNOSTICS_GET_SIZE' => 'Request space usage',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Εμφάνιση Καταγραφών',
'SIGN_OUT' => 'Αποσύνδεση',
'UPDATE_AVAILABLE' => 'Διαθέσιμη Ενημέρωση!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.',
'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Προσπάθεια ξανά',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Διάταξη φωτογραφιών:',
'LAYOUT_SQUARES' => 'Τετράγωνες μικρογραφίες',
'LAYOUT_JUSTIFIED' => 'Με ίσες αναλογίες',
+ 'LAYOUT_MASONRY' => 'Με ίσες masonry',
+ 'LAYOUT_GRID' => 'Με ίσες grid',
'LAYOUT_UNJUSTIFIED' => 'Με άνισες αναλογίες',
'SET_LAYOUT' => 'Αλλαγή διάταξης',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Κανένα αποτέλεσμα',
'VIEW_NO_PUBLIC_ALBUMS' => 'Κανένα δημόσιο λεύκωμα',
diff --git a/lang/en/lychee.php b/lang/en/lychee.php
index fe52f67857..fd6a1c8eb0 100644
--- a/lang/en/lychee.php
+++ b/lang/en/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Password',
'ENTER' => 'Enter',
'CANCEL' => 'Cancel',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Sign In',
'CLOSE' => 'Close',
'SETTINGS' => 'Settings',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Users',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'About Lychee',
'DIAGNOSTICS' => 'Diagnostics',
'DIAGNOSTICS_GET_SIZE' => 'Request space usage',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Show Logs',
'SIGN_OUT' => 'Sign Out',
'UPDATE_AVAILABLE' => 'Update available!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.',
'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Retry',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -352,7 +356,7 @@
'SORT_CHANGE' => 'Change Sorting',
'DROPBOX_TITLE' => 'Set Dropbox Key',
- 'DROPBOX_TEXT' => "In order to import photos from your Dropbox, you need a valid drop-ins app key from their website . Generate yourself a personal key and enter it below:",
+ 'DROPBOX_TEXT' => "In order to import photos from your Dropbox, you need a valid drop-ins app key from their website . Generate yourself a personal key and enter it below:",
'LANG_TEXT' => 'Change Lychee language for:',
'LANG_TITLE' => 'Change Language',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Layout of photos:',
'LAYOUT_SQUARES' => 'Square thumbnails',
'LAYOUT_JUSTIFIED' => 'With aspect, justified',
+ 'LAYOUT_MASONRY' => 'With aspect, masonry',
+ 'LAYOUT_GRID' => 'With aspect, grid',
'LAYOUT_UNJUSTIFIED' => 'With aspect, unjustified',
'SET_LAYOUT' => 'Change layout',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'No results',
'VIEW_NO_PUBLIC_ALBUMS' => 'No public albums',
diff --git a/lang/es/lychee.php b/lang/es/lychee.php
index 40f2ed59af..beb23e413c 100644
--- a/lang/es/lychee.php
+++ b/lang/es/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Contraseña',
'ENTER' => 'Entrar',
'CANCEL' => 'Cancelar',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Iniciar sesión',
'CLOSE' => 'Cerrar',
'SETTINGS' => 'Configuraciones',
@@ -16,6 +17,7 @@
'GALLERY' => 'Galería',
'USERS' => 'Usuarios',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Crear',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'Acerca de Lychee',
'DIAGNOSTICS' => 'Diagnóstico',
'DIAGNOSTICS_GET_SIZE' => 'Pedir uso de espacio',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Mostrar Registros',
'SIGN_OUT' => 'Cerrar Sesión',
'UPDATE_AVAILABLE' => '¡Actualización disponible!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'La funcionalidad del mapa se ha desactivado en la configuración.',
'ERROR_SEARCH_DEACTIVATED' => 'La función de búsqueda se ha desactivado en la configuración.',
'SUCCESS' => 'Vale',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Procesar de nuevo',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Diseño de fotos:',
'LAYOUT_SQUARES' => 'Miniaturas cuadradas',
'LAYOUT_JUSTIFIED' => 'Con aspecto justificado',
+ 'LAYOUT_MASONRY' => 'Con aspecto, masonry',
+ 'LAYOUT_GRID' => 'Con aspecto, grid',
'LAYOUT_UNJUSTIFIED' => 'Con aspecto, injustificado',
'SET_LAYOUT' => 'Cambia el diseño',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Visibilidad predeterminada del álbum sensible actualizada con éxito.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'No hay resultados',
'VIEW_NO_PUBLIC_ALBUMS' => 'Sin álbumes públicos',
diff --git a/lang/fr/lychee.php b/lang/fr/lychee.php
index 413dab30ef..bddd4ada71 100644
--- a/lang/fr/lychee.php
+++ b/lang/fr/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Mot de passe',
'ENTER' => 'OK',
'CANCEL' => 'Annuler',
+ 'CONFIRM' => 'Confirmer',
'SIGN_IN' => 'Connexion',
'CLOSE' => 'Fermer',
'SETTINGS' => 'Paramètres',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Utilisateurs',
+ 'PROFILE' => 'Profil',
'CREATE' => 'Créer',
'REMOVE' => 'Retirer',
'SHARE' => 'Partager',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'À propos de Lychee',
'DIAGNOSTICS' => 'Diagnostiques',
'DIAGNOSTICS_GET_SIZE' => 'Calculer l’espace utilisé',
+ 'JOBS' => 'Afficher l’historique des Jobs',
'LOGS' => 'Afficher les logs',
'SIGN_OUT' => 'Déconnexion',
'UPDATE_AVAILABLE' => 'Une mise-à-jour est disponible !',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'La carte a été désactivée dans les paramètres.',
'ERROR_SEARCH_DEACTIVATED' => 'La recherche a été désactivée dans les paramètres.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Changement réussi.',
'RETRY' => 'Réessayer',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Affichage des photos :',
'LAYOUT_SQUARES' => 'Miniatures carrées',
'LAYOUT_JUSTIFIED' => 'En proportions, justifiées',
+ 'LAYOUT_MASONRY' => 'En proportion, Maçonnerie',
+ 'LAYOUT_GRID' => 'En proportion, Grille',
'LAYOUT_UNJUSTIFIED' => 'En proportions, non-justifiées',
'SET_LAYOUT' => 'Changer l’affichage',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Visibilé par default des albums sensible mis à jour.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Contenu Sensible',
+ 'NSFW_EXPLANATION' => 'Cet album contient des contenus sensible que certaine personnes peuvent trouver chocant ou troublant.',
+ 'TAP_CONSENT' => 'Tap pour consentir.',
'VIEW_NO_RESULT' => 'Aucun résultat',
'VIEW_NO_PUBLIC_ALBUMS' => 'Aucun album public',
diff --git a/lang/hu/lychee.php b/lang/hu/lychee.php
index 7bd89d6bfa..ddf620e165 100644
--- a/lang/hu/lychee.php
+++ b/lang/hu/lychee.php
@@ -5,6 +5,7 @@
'PASSWORD' => 'Jelszó',
'ENTER' => 'Belépés',
'CANCEL' => 'Mégse',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Bejelentkezés',
'CLOSE' => 'Bezárás',
'SETTINGS' => 'Beállítások',
@@ -14,6 +15,7 @@
'GALLERY' => 'Galéria',
'USERS' => 'Felhasználók',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Létrehozás',
'REMOVE' => 'Törlés',
'SHARE' => 'Megosztás',
@@ -26,6 +28,7 @@
'ABOUT_LYCHEE' => 'A Lychee-ről',
'DIAGNOSTICS' => 'Diagnosztika',
'DIAGNOSTICS_GET_SIZE' => 'Térhasználat lekérése',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Naplók megtekintése',
'SIGN_OUT' => 'Kijelentkezés',
'UPDATE_AVAILABLE' => 'Frissítés elérhető!',
@@ -278,6 +281,7 @@
'ERROR_MAP_DEACTIVATED' => 'Térkép funkció letiltva a beállításokban.',
'ERROR_SEARCH_DEACTIVATED' => 'Keresési funkció letiltva a beállításokban.',
'SUCCESS' => 'Rendben',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Újra',
'OVERRIDE' => 'Felülbírálás',
'TAGS_OVERRIDE_INFO' => 'Ha ez nincs bejelölve, a címkéket hozzáadják a fénykép meglévő címkéihez.',
@@ -396,6 +400,8 @@
'LAYOUT_TYPE' => 'Fényképek elrendezése:',
'LAYOUT_SQUARES' => 'Négyzet alakú bélyegképek',
'LAYOUT_JUSTIFIED' => 'Képaránnyal, igazított',
+ 'LAYOUT_MASONRY' => 'Képaránnyal, masonry',
+ 'LAYOUT_GRID' => 'Képaránnyal, grid',
'LAYOUT_UNJUSTIFIED' => 'Képaránnyal, igazítatlan',
'SET_LAYOUT' => 'Elrendezés megváltoztatása',
@@ -404,6 +410,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Az alapértelmezett érzékeny album láthatósága sikeresen frissítve.',
'NSFW_BANNER' => 'Érzékeny tartalom Ez az album érzékeny tartalmat tartalmaz, amit néhány ember zavaró vagy zavarba ejtő lehet. Tapintson az engedélyezéshez.
',
+ 'NSFW_HEADER' => 'Érzékeny tartalom',
+ 'NSFW_EXPLANATION' => 'Ez az album érzékeny tartalmat tartalmaz, amit néhány ember zavaró vagy zavarba ejtő lehet.',
+ 'TAP_CONSENT' => 'Tapintson az engedélyezéshez.',
'VIEW_NO_RESULT' => 'Nincs találat',
'VIEW_NO_PUBLIC_ALBUMS' => 'Nincsenek nyilvános albumok',
diff --git a/lang/it/lychee.php b/lang/it/lychee.php
index a562eeb3a8..e10c01c55d 100644
--- a/lang/it/lychee.php
+++ b/lang/it/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Password',
'ENTER' => 'Invia',
'CANCEL' => 'Annulla',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Entra',
'CLOSE' => 'Chiudi',
'SETTINGS' => 'Impostazioni',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Utenti',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'Informazioni su Lychee',
'DIAGNOSTICS' => 'Diagnostica',
'DIAGNOSTICS_GET_SIZE' => 'Request space usage',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Visualizza Log',
'SIGN_OUT' => 'Esci',
'UPDATE_AVAILABLE' => 'Aggiornamento disponibile!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.',
'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Riprova',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Layout delle foto:',
'LAYOUT_SQUARES' => 'Miniature Quadrate',
'LAYOUT_JUSTIFIED' => 'Relativo all’aspetto, giustificate',
+ 'LAYOUT_MASONRY' => 'Relativo all’aspetto, masonry',
+ 'LAYOUT_GRID' => 'Relativo all’aspetto, grid',
'LAYOUT_UNJUSTIFIED' => 'Relativo all’aspetto, non giustificate',
'SET_LAYOUT' => 'Cambia layout',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Nessun risultato',
'VIEW_NO_PUBLIC_ALBUMS' => 'Nessun album pubblico',
diff --git a/lang/nl/lychee.php b/lang/nl/lychee.php
index 92bfc89d8d..7fa9de1575 100644
--- a/lang/nl/lychee.php
+++ b/lang/nl/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Wachtwoord',
'ENTER' => 'Enter',
'CANCEL' => 'Annuleer',
+ 'CONFIRM' => 'Doe maar',
'SIGN_IN' => 'Log in',
'CLOSE' => 'Sluit',
'SETTINGS' => 'Settings',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Users',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'Over Lychee',
'DIAGNOSTICS' => 'Diagnostics',
'DIAGNOSTICS_GET_SIZE' => 'Request space usage',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Laat logs zien',
'SIGN_OUT' => 'Log uit',
'UPDATE_AVAILABLE' => 'Update beschikbaar!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.',
'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Probeer opnieuw',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Layout of photos:',
'LAYOUT_SQUARES' => 'Square thumbnails',
'LAYOUT_JUSTIFIED' => 'With aspect, justified',
+ 'LAYOUT_MASONRY' => 'With aspect, masonry',
+ 'LAYOUT_GRID' => 'With aspect, grid',
'LAYOUT_UNJUSTIFIED' => 'With aspect, unjustified',
'SET_LAYOUT' => 'Change layout',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Geen resultaten',
'VIEW_NO_PUBLIC_ALBUMS' => 'Geen publieke albums',
diff --git a/lang/no/lychee.php b/lang/no/lychee.php
index 199338b445..f56dc79e77 100644
--- a/lang/no/lychee.php
+++ b/lang/no/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Passord',
'ENTER' => 'Stig inn',
'CANCEL' => 'Avbryt',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Logg inn',
'CLOSE' => 'Lukk',
'SETTINGS' => 'Innstillinger',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Brukere',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'Om Lychee',
'DIAGNOSTICS' => 'Diagnostikk',
'DIAGNOSTICS_GET_SIZE' => 'Hent diskbruk',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Vis Logg',
'SIGN_OUT' => 'Logg Ut',
'UPDATE_AVAILABLE' => 'Oppdatering er tilgjengelig!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Kartfunksjoner har blitt deaktivert under innstillinger',
'ERROR_SEARCH_DEACTIVATED' => 'Søkefunksjoner har blitt deaktivert under innstillinger',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Prøv igjen',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Oppsett for bilder:',
'LAYOUT_SQUARES' => 'Kvadratiske miniatyrbilder',
'LAYOUT_JUSTIFIED' => 'Med aspektratio, justert',
+ 'LAYOUT_MASONRY' => 'Med aspektratio, masonry',
+ 'LAYOUT_GRID' => 'Med aspektratio, grid',
'LAYOUT_UNJUSTIFIED' => 'Med aspektratio, ikke justert',
'SET_LAYOUT' => 'Lagre oppsett',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Ingen resultater',
'VIEW_NO_PUBLIC_ALBUMS' => 'Ingen offentlige album',
diff --git a/lang/pl/lychee.php b/lang/pl/lychee.php
index 2b58c23402..44da0b566a 100644
--- a/lang/pl/lychee.php
+++ b/lang/pl/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Hasło',
'ENTER' => 'Potwierdź',
'CANCEL' => 'Anuluj',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Zaloguj',
'CLOSE' => 'Zamknij',
'SETTINGS' => 'Ustawienia',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Użytkownicy',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'O Lychee',
'DIAGNOSTICS' => 'Informacje techniczne',
'DIAGNOSTICS_GET_SIZE' => 'Analiza miejsca na dysku',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Logi',
'SIGN_OUT' => 'Wyloguj',
'UPDATE_AVAILABLE' => 'Dostępna aktualizacja!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Funkcja mapy została wyłączona w ustawieniach.',
'ERROR_SEARCH_DEACTIVATED' => 'Funkcja wyszkukiwania została wyłączona w ustawieniach.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Ponów',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Układ zdjęć:',
'LAYOUT_SQUARES' => 'Kwadratowe miniaturki',
'LAYOUT_JUSTIFIED' => 'Aspekt, wyrównane',
+ 'LAYOUT_MASONRY' => 'Aspekt, masonry',
+ 'LAYOUT_GRID' => 'Aspekt, grid',
'LAYOUT_UNJUSTIFIED' => 'Aspekt, bez wyrównania',
'SET_LAYOUT' => 'Zmień układ',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Domyślne ustawienie dotyczące widoczności albumów poufnych ostało zaktualizowane.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Brak wyników',
'VIEW_NO_PUBLIC_ALBUMS' => 'Brak albumów publicznych',
diff --git a/lang/pt/lychee.php b/lang/pt/lychee.php
index a2f4e0ab5f..c1b56ff5c9 100644
--- a/lang/pt/lychee.php
+++ b/lang/pt/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Password',
'ENTER' => 'Inserir',
'CANCEL' => 'Cancelar',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Iniciar Sessão',
'CLOSE' => 'Fechar',
'SETTINGS' => 'Configurações',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Utilizadores',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'Acerca do Lychee',
'DIAGNOSTICS' => 'Diagnosticos',
'DIAGNOSTICS_GET_SIZE' => 'Pedir utilização de espaço',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Mostrar Logs',
'SIGN_OUT' => 'Terminar Sessão',
'UPDATE_AVAILABLE' => 'Atualização disponível!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'A funcionalidade do mapa foi desativada nas configurações.',
'ERROR_SEARCH_DEACTIVATED' => 'A funcionalidade de procura foi desativada nas configurações.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Tentar de novo',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Disposição das fotografias:',
'LAYOUT_SQUARES' => 'Miniaturas quadradas',
'LAYOUT_JUSTIFIED' => 'Com formatação, justificada',
+ 'LAYOUT_MASONRY' => 'Com formatação, masonry',
+ 'LAYOUT_GRID' => 'Com formatação, grid',
'LAYOUT_UNJUSTIFIED' => 'Com formatação, não justificada',
'SET_LAYOUT' => 'Alterar disposição',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Sensibilidade predefinida do álbum visível atualizada com sucesso.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Sem resultados',
'VIEW_NO_PUBLIC_ALBUMS' => 'Sem álbums públicos',
diff --git a/lang/ru/lychee.php b/lang/ru/lychee.php
index 6621ff5e8a..f74e5f5284 100644
--- a/lang/ru/lychee.php
+++ b/lang/ru/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Пароль',
'ENTER' => 'Enter',
'CANCEL' => 'Отмена',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Вход',
'CLOSE' => 'Закрыть',
'SETTINGS' => 'Параметры',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Пользователи',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'О Lychee',
'DIAGNOSTICS' => 'Диагностика',
'DIAGNOSTICS_GET_SIZE' => 'Request space usage',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Логи',
'SIGN_OUT' => 'Выход',
'UPDATE_AVAILABLE' => 'Доступно обновление!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.',
'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.',
'SUCCESS' => 'Ок',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Повторить',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Компоновка фото:',
'LAYOUT_SQUARES' => 'Квадратные превью',
'LAYOUT_JUSTIFIED' => 'По формату, выровнять',
+ 'LAYOUT_MASONRY' => 'По формату, masonry',
+ 'LAYOUT_GRID' => 'По формату, grid',
'LAYOUT_UNJUSTIFIED' => 'По формату, не выравнивать',
'SET_LAYOUT' => 'Изменить компоновку',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Не найдено',
'VIEW_NO_PUBLIC_ALBUMS' => 'Нет публичных альбомов',
diff --git a/lang/sk/lychee.php b/lang/sk/lychee.php
index 197a412f09..76b1d63887 100644
--- a/lang/sk/lychee.php
+++ b/lang/sk/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Heslo',
'ENTER' => 'Zadať',
'CANCEL' => 'Prerušiť',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Prihlásiť',
'CLOSE' => 'Zatvoriť',
'SETTINGS' => 'Nastavenia',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Užívatelia',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'O Lychee',
'DIAGNOSTICS' => 'Diagnostika',
'DIAGNOSTICS_GET_SIZE' => 'Request space usage',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Protokoly',
'SIGN_OUT' => 'Odhlásiť',
'UPDATE_AVAILABLE' => 'Update je k dispozícii!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.',
'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Opakovať',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Rozmiestnenie obrázkov:',
'LAYOUT_SQUARES' => 'Štvorcové náhľady',
'LAYOUT_JUSTIFIED' => 'Zachovaný pomer strán, zarovnané',
+ 'LAYOUT_MASONRY' => 'Zachovaný pomer strán, masonry',
+ 'LAYOUT_GRID' => 'Zachovaný pomer strán, grid',
'LAYOUT_UNJUSTIFIED' => 'Zachovaný pomer strán, nezarovnané',
'SET_LAYOUT' => 'Zmeniť rozmiestnenie',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Žiadny výsledok',
'VIEW_NO_PUBLIC_ALBUMS' => 'Žiadne verejné albumy',
diff --git a/lang/sv/lychee.php b/lang/sv/lychee.php
index 8526f33529..65301e9864 100644
--- a/lang/sv/lychee.php
+++ b/lang/sv/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Lösenord',
'ENTER' => 'Stig in',
'CANCEL' => 'Avbryt',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Logga in',
'CLOSE' => 'Stäng',
'SETTINGS' => 'Settings',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Users',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'Om Lychee',
'DIAGNOSTICS' => 'Diagnostik',
'DIAGNOSTICS_GET_SIZE' => 'Request space usage',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Visa logfilen',
'SIGN_OUT' => 'Logga ut',
'UPDATE_AVAILABLE' => 'En uppdatering finns!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Map functionality has been deactivated under settings.',
'ERROR_SEARCH_DEACTIVATED' => 'Search functionality has been deactivated under settings.',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Försök igen',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Layout of photos:',
'LAYOUT_SQUARES' => 'Square thumbnails',
'LAYOUT_JUSTIFIED' => 'With aspect, justified',
+ 'LAYOUT_MASONRY' => 'With aspect, masonry',
+ 'LAYOUT_GRID' => 'With aspect, grid',
'LAYOUT_UNJUSTIFIED' => 'With aspect, unjustified',
'SET_LAYOUT' => 'Change layout',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Inget resultat',
'VIEW_NO_PUBLIC_ALBUMS' => 'Inga publika album',
diff --git a/lang/vi/lychee.php b/lang/vi/lychee.php
index 528d87d326..6eaf3a2edb 100644
--- a/lang/vi/lychee.php
+++ b/lang/vi/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => 'Mật khẩu',
'ENTER' => 'Ok',
'CANCEL' => 'Bỏ',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => 'Đăng nhập',
'CLOSE' => 'Đóng',
'SETTINGS' => 'Cài đặt',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => 'Người dùng',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Tạo',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => 'Giới thiệu Lychee',
'DIAGNOSTICS' => 'Thông tin hệ thống',
'DIAGNOSTICS_GET_SIZE' => 'Xem dung lượng đã dùng',
+ 'JOBS' => 'Show job history',
'LOGS' => 'Xem nhật ký thay đổi',
'SIGN_OUT' => 'Thoát',
'UPDATE_AVAILABLE' => 'Có phiên bản mới!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => 'Tính năng hiển thị bản đồ đã tắt trong phần cài đặt.',
'ERROR_SEARCH_DEACTIVATED' => 'Tính năng tìm kiếm đã tắt trong phần cài đặt',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => 'Thử lại',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => 'Cách trình bày hình ảnh:',
'LAYOUT_SQUARES' => 'Ô vuông hình nhỏ',
'LAYOUT_JUSTIFIED' => 'Theo tỷ lệ hình, canh đều hai bên',
+ 'LAYOUT_MASONRY' => 'Theo tỷ lệ hình, masonry',
+ 'LAYOUT_GRID' => 'Theo tỷ lệ hình, grid',
'LAYOUT_UNJUSTIFIED' => 'Theo tỷ lệ hình, không canh đều hai bên',
'SET_LAYOUT' => 'Thay đổi cách trình bày',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Chế độ hiển thị album nhạy cảm được cập nhật thành công.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => 'Không có kết quả nào',
'VIEW_NO_PUBLIC_ALBUMS' => 'Chưa có album chia sẻ công cộng nào',
diff --git a/lang/zh_CN/lychee.php b/lang/zh_CN/lychee.php
index 8f016fab63..49ab68198e 100644
--- a/lang/zh_CN/lychee.php
+++ b/lang/zh_CN/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => '密码',
'ENTER' => '确定',
'CANCEL' => '取消',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => '登录',
'CLOSE' => '关闭',
'SETTINGS' => '设置',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => '用户',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => '关于 Lychee',
'DIAGNOSTICS' => '诊断',
'DIAGNOSTICS_GET_SIZE' => '请求空间占用信息',
+ 'JOBS' => 'Show job history',
'LOGS' => '查看日志',
'SIGN_OUT' => '注销登录',
'UPDATE_AVAILABLE' => '可用更新!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => '地图功能已在设置中停用。',
'ERROR_SEARCH_DEACTIVATED' => '搜索功能已在设置中停用。',
'SUCCESS' => 'OK',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => '重试',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => '照片布局:',
'LAYOUT_SQUARES' => '方形缩略图',
'LAYOUT_JUSTIFIED' => '保持长宽比,两端对齐',
+ 'LAYOUT_MASONRY' => '保持长宽比, masonry',
+ 'LAYOUT_GRID' => '保持长宽比, grid',
'LAYOUT_UNJUSTIFIED' => '保持长宽比,不对齐',
'SET_LAYOUT' => '更改布局',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => '敏感相册的默认可见性成功更新。',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => '无结果',
'VIEW_NO_PUBLIC_ALBUMS' => '没有公开相册',
diff --git a/lang/zh_TW/lychee.php b/lang/zh_TW/lychee.php
index 1a794a6f1f..ee19972271 100644
--- a/lang/zh_TW/lychee.php
+++ b/lang/zh_TW/lychee.php
@@ -7,6 +7,7 @@
'PASSWORD' => '密碼',
'ENTER' => '確定',
'CANCEL' => '取消',
+ 'CONFIRM' => 'Confirm',
'SIGN_IN' => '登入',
'CLOSE' => '關閉',
'SETTINGS' => '設定',
@@ -16,6 +17,7 @@
'GALLERY' => 'Gallery',
'USERS' => '使用者',
+ 'PROFILE' => 'Profile',
'CREATE' => 'Create',
'REMOVE' => 'Remove',
'SHARE' => 'Share',
@@ -28,6 +30,7 @@
'ABOUT_LYCHEE' => '關於Lychee',
'DIAGNOSTICS' => '診斷',
'DIAGNOSTICS_GET_SIZE' => '請求空間使用',
+ 'JOBS' => 'Show job history',
'LOGS' => '查看日誌',
'SIGN_OUT' => '登出',
'UPDATE_AVAILABLE' => '可用更新!',
@@ -280,6 +283,7 @@
'ERROR_MAP_DEACTIVATED' => '地圖功能已被設為停用。',
'ERROR_SEARCH_DEACTIVATED' => '搜索功能已在設為停用。',
'SUCCESS' => '好',
+ 'CHANGE_SUCCESS' => 'Change successful.',
'RETRY' => '重試',
'OVERRIDE' => 'Override',
'TAGS_OVERRIDE_INFO' => 'If this is unchecked, the tags will be added to the existing tags of the photo.',
@@ -398,6 +402,8 @@
'LAYOUT_TYPE' => '照片佈局:',
'LAYOUT_SQUARES' => '方形縮略圖',
'LAYOUT_JUSTIFIED' => '有方面,有道理',
+ 'LAYOUT_MASONRY' => '有方面, masonry',
+ 'LAYOUT_GRID' => '有方面, grid',
'LAYOUT_UNJUSTIFIED' => '有方面,沒有道理',
'SET_LAYOUT' => '變更版面',
@@ -406,6 +412,9 @@
'SETTINGS_SUCCESS_NSFW_VISIBLE' => 'Default sensitive album visibility updated with success.',
'NSFW_BANNER' => 'Sensitive content This album contains sensitive content which some people may find offensive or disturbing.
Tap to consent.
',
+ 'NSFW_HEADER' => 'Sensitive content',
+ 'NSFW_EXPLANATION' => 'This album contains sensitive content which some people may find offensive or disturbing.',
+ 'TAP_CONSENT' => 'Tap to consent.',
'VIEW_NO_RESULT' => '無結果',
'VIEW_NO_PUBLIC_ALBUMS' => '沒有公開相簿',
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000000..b6a9c1c45a
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3523 @@
+{
+ "name": "Lychee",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "@types/justified-layout": "^4.1.4",
+ "autoprefixer": "^10.4.16",
+ "justified-layout": "^4.1.0",
+ "laravel-vite-plugin": "^0.8.1",
+ "lazysizes": "^5.3.2",
+ "leaflet": "^1.9.4",
+ "leaflet-gpx": "^1.7.0",
+ "leaflet-rotatedmarker": "^0.2.0",
+ "leaflet.markercluster": "^1.4.1",
+ "postcss": "^8.4.32",
+ "prettier": "^3.1.1",
+ "qrcode": "^1.5.3",
+ "tailwindcss": "^3.3.6",
+ "ts-loader": "^9.5.1",
+ "typescript": "^5.3.3",
+ "vite": "^4.5.1",
+ "vite-plugin-checker": "^0.6.2",
+ "vite-plugin-commonjs": "^0.10.0"
+ },
+ "devDependencies": {
+ "@lychee-org/leaflet.photo": "^1.0.0",
+ "@types/alpinejs": "^3.13.5",
+ "@types/leaflet": "^1.9.8",
+ "@types/leaflet-rotatedmarker": "^0.2.5",
+ "@types/leaflet.markercluster": "^1.5.4",
+ "@types/mousetrap": "^1.6.15",
+ "@types/photoswipe": "^4.1.6",
+ "@types/qrcode": "^1.5.5"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+ "dependencies": {
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/@babel/code-frame/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+ "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+ "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+ "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+ "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+ "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+ "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+ "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+ "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+ "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+ "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+ "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+ "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+ "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+ "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+ "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+ "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+ "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+ "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+ "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@lychee-org/leaflet.photo": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@lychee-org/leaflet.photo/-/leaflet.photo-1.0.0.tgz",
+ "integrity": "sha512-0nUnOvcVxFdwJ7iqdpuZVT7t7ZLwluOTaRGZuGSf0KRd0f1Ebb6fed7uWaSa/TD+mXQIYagsoBtWYG0lxMakKw==",
+ "dev": true
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@types/alpinejs": {
+ "version": "3.13.5",
+ "resolved": "https://registry.npmjs.org/@types/alpinejs/-/alpinejs-3.13.5.tgz",
+ "integrity": "sha512-BSNTroRhmBkNiyd7ELK/5Boja92hnQMST6H4z1BqXKeMVzHjp9o1j5poqd5Tyhjd8oMFwxYC4I00eghfg2xrTA==",
+ "dev": true
+ },
+ "node_modules/@types/eslint": {
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz",
+ "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==",
+ "peer": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+ "peer": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "peer": true
+ },
+ "node_modules/@types/geojson": {
+ "version": "7946.0.13",
+ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.13.tgz",
+ "integrity": "sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==",
+ "dev": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "peer": true
+ },
+ "node_modules/@types/justified-layout": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/@types/justified-layout/-/justified-layout-4.1.4.tgz",
+ "integrity": "sha512-q2ybP0u0NVj87oMnGZOGxY2iUN8ddr48zPOBHBdbOLpsMTA/keGj+93ou+OMCnJk0xewzlNIaVEkxM6VBD3E2w=="
+ },
+ "node_modules/@types/leaflet": {
+ "version": "1.9.8",
+ "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.8.tgz",
+ "integrity": "sha512-EXdsL4EhoUtGm2GC2ZYtXn+Fzc6pluVgagvo2VC1RHWToLGlTRwVYoDpqS/7QXa01rmDyBjJk3Catpf60VMkwg==",
+ "dev": true,
+ "dependencies": {
+ "@types/geojson": "*"
+ }
+ },
+ "node_modules/@types/leaflet-rotatedmarker": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@types/leaflet-rotatedmarker/-/leaflet-rotatedmarker-0.2.5.tgz",
+ "integrity": "sha512-GaKK1bdQ6NYGkVdZj2cHe8Eu1BVf40Jhtmd8pZj5gQSJcTy5iTog0hsMIhf6QQDKnaEgrRJzm4OES6B9vxi4dw==",
+ "dev": true,
+ "dependencies": {
+ "@types/leaflet": "*"
+ }
+ },
+ "node_modules/@types/leaflet.markercluster": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.4.tgz",
+ "integrity": "sha512-tfMP8J62+wfsVLDLGh5Zh1JZxijCaBmVsMAX78MkLPwvPitmZZtSin5aWOVRhZrCS+pEOZwNzexbfWXlY+7yjg==",
+ "dev": true,
+ "dependencies": {
+ "@types/leaflet": "*"
+ }
+ },
+ "node_modules/@types/mousetrap": {
+ "version": "1.6.15",
+ "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.15.tgz",
+ "integrity": "sha512-qL0hyIMNPow317QWW/63RvL1x5MVMV+Ru3NaY9f/CuEpCqrmb7WeuK2071ZY5hczOnm38qExWM2i2WtkXLSqFw==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.10.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz",
+ "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==",
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/photoswipe": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/@types/photoswipe/-/photoswipe-4.1.6.tgz",
+ "integrity": "sha512-6kN4KYjNF4sg79fSwZ46s4Pron4+YJxoW0DQOcHveUZc/3cWd8Q4B9OLlDmEYw9iI6fODU8kyyq8ZBy+8F/+zQ==",
+ "dev": true
+ },
+ "node_modules/@types/qrcode": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.5.tgz",
+ "integrity": "sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
+ "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
+ "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.6",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
+ "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
+ "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/helper-wasm-section": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6",
+ "@webassemblyjs/wasm-opt": "1.11.6",
+ "@webassemblyjs/wasm-parser": "1.11.6",
+ "@webassemblyjs/wast-printer": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
+ "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
+ "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6",
+ "@webassemblyjs/wasm-parser": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
+ "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
+ "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "peer": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "peer": true
+ },
+ "node_modules/acorn": {
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-import-assertions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+ "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+ "peer": true,
+ "peerDependencies": {
+ "acorn": "^8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "peer": true,
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.16",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
+ "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.21.10",
+ "caniuse-lite": "^1.0.30001538",
+ "fraction.js": "^4.3.6",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.22.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
+ "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001565",
+ "electron-to-chromium": "^1.4.601",
+ "node-releases": "^2.0.14",
+ "update-browserslist-db": "^1.0.13"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "peer": true
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001571",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz",
+ "integrity": "sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "node_modules/dijkstrajs": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
+ "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.616",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz",
+ "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/encode-utf8": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
+ "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.15.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
+ "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz",
+ "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w=="
+ },
+ "node_modules/esbuild": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "peer": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "peer": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "peer": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "peer": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "peer": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "peer": true
+ },
+ "node_modules/fastq": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
+ "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
+ "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "peer": true
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/jackspeak": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
+ "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "peer": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "peer": true
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/justified-layout": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/justified-layout/-/justified-layout-4.1.0.tgz",
+ "integrity": "sha512-M5FimNMXgiOYerVRGsXZ2YK9YNCaTtwtYp7Hb2308U1Q9TXXHx5G0p08mcVR5O53qf8bWY4NJcPBxE6zuayXSg=="
+ },
+ "node_modules/laravel-vite-plugin": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.8.1.tgz",
+ "integrity": "sha512-fxzUDjOA37kOsYq8dP+3oPIlw8/kJVXwu0hOXLun82R1LpV02shGeWGYKx2lbpKffL5I0sfPPjfqbYxuqBluAA==",
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "vite-plugin-full-reload": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "vite": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "node_modules/lazysizes": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/lazysizes/-/lazysizes-5.3.2.tgz",
+ "integrity": "sha512-22UzWP+Vedi/sMeOr8O7FWimRVtiNJV2HCa+V8+peZOw6QbswN9k58VUhd7i6iK5bw5QkYrF01LJbeJe0PV8jg=="
+ },
+ "node_modules/leaflet": {
+ "version": "1.9.4",
+ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz",
+ "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA=="
+ },
+ "node_modules/leaflet-gpx": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/leaflet-gpx/-/leaflet-gpx-1.7.0.tgz",
+ "integrity": "sha512-5NS5WKfp5zaAHMB2KM6OUaIng+SZ3e/UHK2++ABl2wELojYlmLqIL8t1Mj6DaZGkIh3kld+mAUvMGdIzC1yGRA=="
+ },
+ "node_modules/leaflet-rotatedmarker": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/leaflet-rotatedmarker/-/leaflet-rotatedmarker-0.2.0.tgz",
+ "integrity": "sha512-yc97gxLXwbZa+Gk9VCcqI0CkvIBC9oNTTjFsHqq4EQvANrvaboib4UdeQLyTnEqDpaXHCqzwwVIDHtvz2mUiDg=="
+ },
+ "node_modules/leaflet.markercluster": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz",
+ "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==",
+ "peerDependencies": {
+ "leaflet": "^1.3.1"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "node_modules/loader-runner": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+ "peer": true,
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
+ },
+ "node_modules/lodash.pick": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q=="
+ },
+ "node_modules/lru-cache": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
+ "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+ "engines": {
+ "node": "14 || >=16.14"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
+ "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "peer": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "peer": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "peer": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-scurry": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
+ "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "dependencies": {
+ "lru-cache": "^9.1.1 || ^10.0.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pngjs": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
+ "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.32",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
+ "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
+ "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.13",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
+ "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/prettier": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
+ "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qrcode": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz",
+ "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==",
+ "dependencies": {
+ "dijkstrajs": "^1.0.1",
+ "encode-utf8": "^1.0.3",
+ "pngjs": "^5.0.0",
+ "yargs": "^15.3.1"
+ },
+ "bin": {
+ "qrcode": "bin/qrcode"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.29.4",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
+ "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "peer": true
+ },
+ "node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "peer": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
+ "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
+ "peer": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "peer": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz",
+ "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.0",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.19.1",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.26.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
+ "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.3.9",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
+ "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^3.1.1",
+ "serialize-javascript": "^6.0.1",
+ "terser": "^5.16.8"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "uglify-js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/terser/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "peer": true
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tiny-invariant": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
+ "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw=="
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
+ },
+ "node_modules/ts-loader": {
+ "version": "9.5.1",
+ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz",
+ "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "enhanced-resolve": "^5.0.0",
+ "micromatch": "^4.0.0",
+ "semver": "^7.3.4",
+ "source-map": "^0.7.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "typescript": "*",
+ "webpack": "^5.0.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+ },
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "peer": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/vite": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz",
+ "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==",
+ "dependencies": {
+ "esbuild": "^0.18.10",
+ "postcss": "^8.4.27",
+ "rollup": "^3.27.1"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@types/node": ">= 14",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-checker": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.6.2.tgz",
+ "integrity": "sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ==",
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "ansi-escapes": "^4.3.0",
+ "chalk": "^4.1.1",
+ "chokidar": "^3.5.1",
+ "commander": "^8.0.0",
+ "fast-glob": "^3.2.7",
+ "fs-extra": "^11.1.0",
+ "lodash.debounce": "^4.0.8",
+ "lodash.pick": "^4.4.0",
+ "npm-run-path": "^4.0.1",
+ "semver": "^7.5.0",
+ "strip-ansi": "^6.0.0",
+ "tiny-invariant": "^1.1.0",
+ "vscode-languageclient": "^7.0.0",
+ "vscode-languageserver": "^7.0.0",
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-uri": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "peerDependencies": {
+ "eslint": ">=7",
+ "meow": "^9.0.0",
+ "optionator": "^0.9.1",
+ "stylelint": ">=13",
+ "typescript": "*",
+ "vite": ">=2.0.0",
+ "vls": "*",
+ "vti": "*",
+ "vue-tsc": ">=1.3.9"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ },
+ "meow": {
+ "optional": true
+ },
+ "optionator": {
+ "optional": true
+ },
+ "stylelint": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ },
+ "vls": {
+ "optional": true
+ },
+ "vti": {
+ "optional": true
+ },
+ "vue-tsc": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-checker/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/vite-plugin-checker/node_modules/commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/vite-plugin-checker/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/vite-plugin-commonjs": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/vite-plugin-commonjs/-/vite-plugin-commonjs-0.10.1.tgz",
+ "integrity": "sha512-taP8R9kYGlCW5OzkVR0UIWRCnG6rSxeWWuA7tnU5b9t5MniibOnDY219NhisTeDhJAeGT8cEnrhVWZ9A5yD+vg==",
+ "dependencies": {
+ "acorn": "^8.8.2",
+ "fast-glob": "^3.2.12",
+ "magic-string": "^0.30.1",
+ "vite-plugin-dynamic-import": "^1.5.0"
+ }
+ },
+ "node_modules/vite-plugin-dynamic-import": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.5.0.tgz",
+ "integrity": "sha512-Qp85c+AVJmLa8MLni74U4BDiWpUeFNx7NJqbGZyR2XJOU7mgW0cb7nwlAMucFyM4arEd92Nfxp4j44xPi6Fu7g==",
+ "dependencies": {
+ "acorn": "^8.8.2",
+ "es-module-lexer": "^1.2.1",
+ "fast-glob": "^3.2.12",
+ "magic-string": "^0.30.1"
+ }
+ },
+ "node_modules/vite-plugin-full-reload": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz",
+ "integrity": "sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==",
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "node_modules/vscode-jsonrpc": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
+ "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==",
+ "engines": {
+ "node": ">=8.0.0 || >=10.0.0"
+ }
+ },
+ "node_modules/vscode-languageclient": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz",
+ "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==",
+ "dependencies": {
+ "minimatch": "^3.0.4",
+ "semver": "^7.3.4",
+ "vscode-languageserver-protocol": "3.16.0"
+ },
+ "engines": {
+ "vscode": "^1.52.0"
+ }
+ },
+ "node_modules/vscode-languageclient/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/vscode-languageclient/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/vscode-languageserver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz",
+ "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==",
+ "dependencies": {
+ "vscode-languageserver-protocol": "3.16.0"
+ },
+ "bin": {
+ "installServerIntoExtension": "bin/installServerIntoExtension"
+ }
+ },
+ "node_modules/vscode-languageserver-protocol": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz",
+ "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==",
+ "dependencies": {
+ "vscode-jsonrpc": "6.0.0",
+ "vscode-languageserver-types": "3.16.0"
+ }
+ },
+ "node_modules/vscode-languageserver-textdocument": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz",
+ "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA=="
+ },
+ "node_modules/vscode-languageserver-types": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
+ "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA=="
+ },
+ "node_modules/vscode-uri": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
+ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "peer": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack": {
+ "version": "5.89.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz",
+ "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==",
+ "peer": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.3",
+ "@types/estree": "^1.0.0",
+ "@webassemblyjs/ast": "^1.11.5",
+ "@webassemblyjs/wasm-edit": "^1.11.5",
+ "@webassemblyjs/wasm-parser": "^1.11.5",
+ "acorn": "^8.7.1",
+ "acorn-import-assertions": "^1.9.0",
+ "browserslist": "^4.14.5",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.15.0",
+ "es-module-lexer": "^1.2.1",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.9",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.2.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.3.7",
+ "watchpack": "^2.4.0",
+ "webpack-sources": "^3.2.3"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependenciesMeta": {
+ "webpack-cli": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "peer": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
+ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/yaml": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dependencies": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000..a6c0cc15e9
--- /dev/null
+++ b/package.json
@@ -0,0 +1,44 @@
+{
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "check": "tsc --noEmit",
+ "dev": "vite",
+ "build": "vite build",
+ "check-formatting": "prettier --check resources/js/ resources/css/",
+ "format": "prettier --write resources/js/ resources/css/"
+ },
+ "devDependencies": {
+ "@lychee-org/leaflet.photo": "^1.0.0",
+ "@types/alpinejs": "^3.13.5",
+ "@types/leaflet": "^1.9.8",
+ "@types/leaflet-rotatedmarker": "^0.2.5",
+ "@types/leaflet.markercluster": "^1.5.4",
+ "@types/mousetrap": "^1.6.15",
+ "@types/photoswipe": "^4.1.6",
+ "@types/qrcode": "^1.5.5"
+ },
+ "dependencies": {
+ "@types/justified-layout": "^4.1.4",
+ "autoprefixer": "^10.4.16",
+ "justified-layout": "^4.1.0",
+ "laravel-vite-plugin": "^0.8.1",
+ "lazysizes": "^5.3.2",
+ "leaflet": "^1.9.4",
+ "leaflet-gpx": "^1.7.0",
+ "leaflet-rotatedmarker": "^0.2.0",
+ "leaflet.markercluster": "^1.4.1",
+ "postcss": "^8.4.32",
+ "prettier": "^3.1.1",
+ "qrcode": "^1.5.3",
+ "tailwindcss": "^3.3.6",
+ "ts-loader": "^9.5.1",
+ "typescript": "^5.3.3",
+ "vite": "^4.5.1",
+ "vite-plugin-checker": "^0.6.2",
+ "vite-plugin-commonjs": "^0.10.0"
+ },
+ "browserslist": [
+ "defaults and fully supports es6-module"
+ ]
+}
diff --git a/phpstan.neon b/phpstan.neon
index d27dbca811..e2b0081c3d 100644
--- a/phpstan.neon
+++ b/phpstan.neon
@@ -9,21 +9,20 @@ parameters:
- app
- scripts
- lang
- - database
+ - database/migrations
- tests
excludePaths:
- - app/View/*
- - app/Http/Livewire/*
- - database/factories/*
- database/migrations/2021_12_04_181200_refactor_models.php
stubFiles:
# these can be removed after https://github.com/thecodingmachine/safe/issues/283 has been merged
+ - phpstan/stubs/Wireable.stub
- phpstan/stubs/image.stub
- phpstan/stubs/imageexception.stub
ignoreErrors:
# False positive php8.2 + phpstan on interface @property
- '#Access to an undefined property App\\Contracts\\Models\\AbstractAlbum::\$id#'
- '#Access to an undefined property App\\Contracts\\Models\\AbstractAlbum::\$title#'
+ - '#Access to an undefined property App\\Contracts\\Models\\AbstractAlbum::\$thumb#'
- '#Access to an undefined property App\\Contracts\\Models\\AbstractAlbum::\$photos#'
- '#Access to an undefined property App\\Contracts\\Image\\StreamStats::\$checksum#'
- '#Access to an undefined property App\\Contracts\\Image\\StreamStats::\$bytes#'
@@ -40,12 +39,16 @@ parameters:
- '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::where(Not)?(Null|In|Between|Exists|Column|Year|Month|Day)?\(\).#'
- '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::delete\(\)#'
- '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::without\(\)#'
+ - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::with\(\)#'
- '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::count\(\).#'
- '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::update\(\).#'
+ - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::inRandomOrder\(\).#'
- '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::groupBy\(\).#'
- '#Dynamic call to static method App\\Models\\Builders\\.*::orderByDesc\(\).#'
- '#Call to an undefined method Illuminate\\Database\\Eloquent\\.*::update\(\)#'
- '#Call to an undefined method Illuminate\\Database\\Eloquent\\.*::with(Only)?\(\)#'
+ - '#Call to an undefined method App\\Relations\\HasManyPhotosRecursively::whereNotNull\(\)#'
+ - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Builder|Illuminate\\Database\\Eloquent\\Relations\\Relation::whereNotNull\(\).#'
- '#Call to private method latest\(\) of parent class Illuminate\\Database\\Eloquent\\Relations\\HasMany#'
- '#Call to protected method asDateTime\(\) of class Illuminate\\Database\\Eloquent\\Model.#'
@@ -73,27 +76,51 @@ parameters:
- '#Property .* \(App\\Models\\.*(\|null)?\) does not accept (Illuminate\\Database\\Eloquent\\Collection\|)?Illuminate\\Database\\Eloquent\\Model(\|null)?.#'
+ - '#Access to an undefined property Laragear\\WebAuthn\\Models\\WebAuthnCredential::\$authenticatable_id#'
# False positive as stub code for PHP has not yet been updated to 2nd parameter, see https://github.com/php/doc-en/issues/1529 and https://www.php.net/imagick.writeimagefile
- '#Method Imagick::writeImageFile\(\) invoked with 2 parameters, 1 required#'
+ # Synth
+ -
+ message: '#Variable property access on .*#'
+ paths:
+ - app/Livewire/Synth
+
+ -
+ message: '#Parameter .* of method App\\Livewire\\Synth\\.* should be contravariant with parameter .* of method Livewire\\Mechanisms\\HandleComponents\\Synthesizers\\Synth::.*#'
+ paths:
+ - app/Livewire/Synth
+
# Migrations
-
message: '#Function define is unsafe to use.#'
paths:
- - database
+ - database/migrations
-
message: '#Variable property access on (mixed|object).#'
paths:
- - database
+ - database/migrations
-
message: '#Access to an undefined property object::\$value.#'
paths:
- - database
+ - database/migrations
# TESTS
+ -
+ message: '#Dynamic call to static method Illuminate\\Testing\\TestResponse::assert(Forbidden|ViewIs|Unauthorized|Ok|Status)#'
+ paths:
+ - tests
+ -
+ message: '#Call to an undefined method Illuminate\\Testing\\TestResponse::(assert)?(SeeLivewire|dispatch|call|Set|Count)#'
+ paths:
+ - tests
+ -
+ message: '#Call to an undefined method Livewire\\Features\\SupportTesting\\Testable::test\(\)#'
+ paths:
+ - tests
-
- message: '#Dynamic call to static method PHPUnit\\Framework\\Assert::assert(Is)?(Not)?(True|False|Equals|Int|Null|Empty)\(\)#'
+ message: '#Dynamic call to static method PHPUnit\\Framework\\Assert::assert(Is)?(Not)?(True|False|Equals|Int|Null|Empty|Count)\(\)#'
paths:
- tests
-
@@ -113,10 +140,11 @@ parameters:
paths:
- tests
-
- message: '#Access to private property App\\Models\\Extensions\\SizeVariants::\$(original|thumb|small|medium)(2x)?#'
+ message: '#Cannot call method .* on Illuminate\\Testing\\PendingCommand\|int.#'
paths:
- tests
+
-
- message: '#Cannot call method .* on Illuminate\\Testing\\PendingCommand\|int.#'
+ message: '#Access to private property App\\Models\\Extensions\\SizeVariants::\$(original|small(2x)?|thumb(2x)?|medium(2x)?)#'
paths:
- - tests
+ - tests
\ No newline at end of file
diff --git a/phpstan/stubs/Wireable.stub b/phpstan/stubs/Wireable.stub
new file mode 100644
index 0000000000..a4dad48967
--- /dev/null
+++ b/phpstan/stubs/Wireable.stub
@@ -0,0 +1,22 @@
+./tests/Feature/LibUnitTests/SharingUnitTest.php
./tests/Feature/LibUnitTests/UsersUnitTest.php
+
+ ./tests/Livewire
+ ./tests/Livewire/Base/BaseLivewireTest.php
+
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000000..2e7af2b7f1
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/public/vendor/log-viewer/app.css b/public/vendor/log-viewer/app.css
index 9d9bde5023..333d32d17d 100644
--- a/public/vendor/log-viewer/app.css
+++ b/public/vendor/log-viewer/app.css
@@ -1 +1 @@
-/*! tailwindcss v3.1.6 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e4e4e7;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a1a1aa;opacity:1}input::placeholder,textarea::placeholder{color:#a1a1aa;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}.\!container{width:100%!important}@media (min-width:640px){.container{max-width:640px}.\!container{max-width:640px!important}}@media (min-width:768px){.container{max-width:768px}.\!container{max-width:768px!important}}@media (min-width:1024px){.container{max-width:1024px}.\!container{max-width:1024px!important}}@media (min-width:1280px){.container{max-width:1280px}.\!container{max-width:1280px!important}}@media (min-width:1536px){.container{max-width:1536px}.\!container{max-width:1536px!important}}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{left:0;right:0}.inset-0,.inset-y-0{bottom:0;top:0}.bottom-0{bottom:0}.left-3{left:.75rem}.right-7{right:1.75rem}.right-0{right:0}.top-9{top:2.25rem}.top-0{top:0}.bottom-10{bottom:2.5rem}.left-0{left:0}.-left-\[200\%\]{left:-200%}.right-\[200\%\]{right:200%}.bottom-4{bottom:1rem}.right-4{right:1rem}.z-20{z-index:20}.z-10{z-index:10}.m-1{margin:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-auto{margin-bottom:auto;margin-top:auto}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-1\.5{margin-left:.375rem;margin-right:.375rem}.mb-1{margin-bottom:.25rem}.ml-3{margin-left:.75rem}.ml-2{margin-left:.5rem}.mt-0{margin-top:0}.mr-1\.5{margin-right:.375rem}.mr-1{margin-right:.25rem}.mt-2{margin-top:.5rem}.mb-8{margin-bottom:2rem}.mt-6{margin-top:1.5rem}.ml-1{margin-left:.25rem}.mt-1{margin-top:.25rem}.mr-2{margin-right:.5rem}.mb-5{margin-bottom:1.25rem}.mr-5{margin-right:1.25rem}.-mr-2{margin-right:-.5rem}.mr-2\.5{margin-right:.625rem}.mb-4{margin-bottom:1rem}.mt-3{margin-top:.75rem}.ml-5{margin-left:1.25rem}.mb-2{margin-bottom:.5rem}.mr-4{margin-right:1rem}.mr-3{margin-right:.75rem}.-mb-0\.5{margin-bottom:-.125rem}.-mb-0{margin-bottom:0}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-full{height:100%}.h-\[18px\]{height:18px}.h-5{height:1.25rem}.h-3{height:.75rem}.h-4{height:1rem}.h-14{height:3.5rem}.h-7{height:1.75rem}.h-6{height:1.5rem}.h-0{height:0}.max-h-screen{max-height:100vh}.max-h-60{max-height:15rem}.min-h-\[38px\]{min-height:38px}.min-h-screen{min-height:100vh}.w-\[18px\]{width:18px}.w-full{width:100%}.w-5{width:1.25rem}.w-3{width:.75rem}.w-4{width:1rem}.w-48{width:12rem}.w-14{width:3.5rem}.w-screen{width:100vw}.w-6{width:1.5rem}.w-\[120px\]{width:120px}.w-\[180px\]{width:180px}.w-\[110px\]{width:110px}.w-auto{width:auto}.min-w-\[240px\]{min-width:240px}.min-w-full{min-width:100%}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.max-w-\[1px\]{max-width:1px}.flex-1{flex:1 1 0%}.shrink{flex-shrink:1}.table-fixed{table-layout:fixed}.border-separate{border-collapse:separate}.translate-x-full{--tw-translate-x:100%}.translate-x-0,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x:0px}.rotate-90{--tw-rotate:90deg}.rotate-90,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-flow-col{grid-auto-flow:column}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-brand-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-brand-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.bg-opacity-75{--tw-bg-opacity:0.75}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-gray-100{--tw-gradient-from:#f4f4f5;--tw-gradient-to:hsla(240,5%,96%,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent}.p-1{padding:.25rem}.p-12{padding:3rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-4{padding-left:1rem;padding-right:1rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-4{padding-bottom:1rem;padding-top:1rem}.px-8{padding-left:2rem;padding-right:2rem}.pr-4{padding-right:1rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-9{padding-right:2.25rem}.pl-10{padding-left:2.5rem}.pl-2{padding-left:.5rem}.pt-2{padding-top:.5rem}.pb-1{padding-bottom:.25rem}.pt-3{padding-top:.75rem}.pb-16{padding-bottom:4rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-base{font-size:1rem;line-height:1.5rem}.font-semibold{font-weight:600}.font-normal{font-weight:400}.font-medium{font-weight:500}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.text-brand-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.text-brand-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-brand-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.opacity-100{opacity:1}.opacity-0{opacity:0}.opacity-90{opacity:.9}.opacity-75{opacity:.75}.opacity-25{opacity:.25}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-brand-500{outline-color:#0ea5e9}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-opacity-5{--tw-ring-opacity:0.05}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.spin{-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:spin;-moz-animation-name:spin;-ms-animation-name:spin;animation-name:spin;-webkit-animation-timing-function:linear;-moz-animation-timing-function:linear;-ms-animation-timing-function:linear;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}html.dark{color-scheme:dark}#bmc-wbtn{height:48px!important;width:48px!important}#bmc-wbtn>img{height:32px!important;width:32px!important}.log-levels-selector .dropdown-toggle{white-space:nowrap}.log-levels-selector .dropdown-toggle:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .log-levels-selector .dropdown-toggle:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.log-levels-selector .dropdown-toggle>svg{height:1rem;margin-left:.25rem;opacity:.75;width:1rem}.log-levels-selector .dropdown .log-level{font-weight:600}.log-levels-selector .dropdown .log-level.success{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown .log-level.success{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.info{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown .log-level.info{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.warning{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown .log-level.warning{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.danger{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown .log-level.danger{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.none{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown .log-level.none{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-count{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));margin-left:2rem;white-space:nowrap}.dark .log-levels-selector .dropdown .log-count{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.success{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.info{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.warning{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.danger{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.none{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-count{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.dark .log-levels-selector .dropdown button.active .log-count{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.log-levels-selector .dropdown .no-results{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));font-size:.75rem;line-height:1rem;padding:.25rem 1rem;text-align:center}.dark .log-levels-selector .dropdown .no-results{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-item{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));cursor:pointer;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dark .log-item{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.log-item.success.active>td,.log-item.success:focus-within>td,.log-item.success:hover>td{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}.dark .log-item.success.active>td,.dark .log-item.success:focus-within>td,.dark .log-item.success:hover>td{--tw-bg-opacity:0.4;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.log-item.success .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.dark .log-item.success .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.log-item.success .log-level{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.dark .log-item.success .log-level{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.log-item.info.active>td,.log-item.info:focus-within>td,.log-item.info:hover>td{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.dark .log-item.info.active>td,.dark .log-item.info:focus-within>td,.dark .log-item.info:hover>td{--tw-bg-opacity:0.4;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.log-item.info .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.dark .log-item.info .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.log-item.info .log-level{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.dark .log-item.info .log-level{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.log-item.warning.active>td,.log-item.warning:focus-within>td,.log-item.warning:hover>td{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}.dark .log-item.warning.active>td,.dark .log-item.warning:focus-within>td,.dark .log-item.warning:hover>td{--tw-bg-opacity:0.4;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.log-item.warning .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}.dark .log-item.warning .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.log-item.warning .log-level{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.dark .log-item.warning .log-level{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.log-item.danger.active>td,.log-item.danger:focus-within>td,.log-item.danger:hover>td{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}.dark .log-item.danger.active>td,.dark .log-item.danger:focus-within>td,.dark .log-item.danger:hover>td{--tw-bg-opacity:0.4;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.log-item.danger .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}.dark .log-item.danger .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.log-item.danger .log-level{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.dark .log-item.danger .log-level{--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.log-item.none.active>td,.log-item.none:focus-within>td,.log-item.none:hover>td{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.dark .log-item.none.active>td,.dark .log-item.none:focus-within>td,.dark .log-item.none:hover>td{--tw-bg-opacity:0.4;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.log-item.none .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.dark .log-item.none .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.log-item.none .log-level{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.dark .log-item.none .log-level{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-item:hover .log-level-icon{opacity:1}.badge{align-items:center;border-radius:.375rem;cursor:pointer;display:inline-flex;font-size:.875rem;line-height:1.25rem;margin-right:.5rem;margin-top:.25rem;padding:.25rem .75rem;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.badge.success{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity));border-color:rgb(167 243 208/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.success{--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity));border-color:rgb(6 95 70/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.success:hover{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.dark .badge.success:hover{--tw-bg-opacity:0.75;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.badge.success .checkmark{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.dark .badge.success .checkmark{--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.badge.success.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity));border-color:rgb(4 120 87/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dark .badge.success.active{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity));border-color:rgb(5 150 105/var(--tw-border-opacity))}.badge.success.active:hover{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.dark .badge.success.active:hover{--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.badge.success.active .checkmark{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}.dark .badge.success.active .checkmark{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity));border-color:rgb(4 120 87/var(--tw-border-opacity))}.badge.success.active .checkmark>svg{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}.dark .badge.success.active .checkmark>svg{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.badge.info{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(186 230 253/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.info{--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(7 89 133/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.info:hover{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.dark .badge.info:hover{--tw-bg-opacity:0.75;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.badge.info .checkmark{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}.dark .badge.info .checkmark{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.badge.info.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity));border-color:rgb(3 105 161/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dark .badge.info.active{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity));border-color:rgb(2 132 199/var(--tw-border-opacity))}.badge.info.active:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.dark .badge.info.active:hover{--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.badge.info.active .checkmark{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.dark .badge.info.active .checkmark{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity));border-color:rgb(3 105 161/var(--tw-border-opacity))}.badge.info.active .checkmark>svg{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.dark .badge.info.active .checkmark>svg{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.badge.warning{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity));border-color:rgb(253 230 138/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.warning{--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity));border-color:rgb(146 64 14/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.warning:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.dark .badge.warning:hover{--tw-bg-opacity:0.75;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.badge.warning .checkmark{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}.dark .badge.warning .checkmark{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.badge.warning.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity));border-color:rgb(180 83 9/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dark .badge.warning.active{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity));border-color:rgb(217 119 6/var(--tw-border-opacity))}.badge.warning.active:hover{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.dark .badge.warning.active:hover{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.badge.warning.active .checkmark{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}.dark .badge.warning.active .checkmark{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity));border-color:rgb(180 83 9/var(--tw-border-opacity))}.badge.warning.active .checkmark>svg{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.dark .badge.warning.active .checkmark>svg{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.badge.danger{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity));border-color:rgb(254 205 211/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.danger{--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity));border-color:rgb(159 18 57/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.danger:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.dark .badge.danger:hover{--tw-bg-opacity:0.75;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.badge.danger .checkmark{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.dark .badge.danger .checkmark{--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.badge.danger.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity));border-color:rgb(190 18 60/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dark .badge.danger.active{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity));border-color:rgb(225 29 72/var(--tw-border-opacity))}.badge.danger.active:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.dark .badge.danger.active:hover{--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.badge.danger.active .checkmark{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}.dark .badge.danger.active .checkmark{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity));border-color:rgb(190 18 60/var(--tw-border-opacity))}.badge.danger.active .checkmark>svg{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.dark .badge.danger.active .checkmark>svg{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.badge.none{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.none{--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));border-color:rgb(39 39 42/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.none:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.dark .badge.none:hover{--tw-bg-opacity:0.75;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.badge.none .checkmark{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.dark .badge.none .checkmark{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.badge.none.active{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:rgb(39 39 42/var(--tw-text-opacity))}.dark .badge.none.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity));color:rgb(244 244 245/var(--tw-text-opacity))}.badge.none.active:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.dark .badge.none.active:hover{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.badge.none.active .checkmark{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.dark .badge.none.active .checkmark{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity))}.badge.none.active .checkmark>svg{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .badge.none.active .checkmark>svg{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.log-list table>thead th{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));color:rgb(113 113 122/var(--tw-text-opacity));font-size:.875rem;font-weight:600;line-height:1.25rem;padding:.5rem;position:sticky;text-align:left;top:0;z-index:10}.file-list .folder-container .folder-item-container.log-list table>thead th{position:sticky}.dark .log-list table>thead th{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.log-list .log-group{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));position:relative}.dark .log-list .log-group{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.log-list .log-group .log-item>td{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity));border-top-width:1px;font-size:.75rem;line-height:1rem;padding:.375rem .25rem}.dark .log-list .log-group .log-item>td{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .log-item>td{font-size:.875rem;line-height:1.25rem;padding:.5rem}}.log-list .log-group.first .log-item>td{border-top-color:transparent}.log-list .log-group .log-stack{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity));font-size:10px;line-height:.75rem;padding:.25rem .5rem;white-space:pre-wrap;word-break:break-all}.dark .log-list .log-group .log-stack{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .log-stack{font-size:.75rem;line-height:1rem;padding:.5rem 2rem}}.log-list .log-group .log-link{align-items:center;border-radius:.25rem;display:flex;justify-content:flex-end;margin-bottom:-.125rem;margin-top:-.125rem;padding-bottom:.125rem;padding-left:.25rem;padding-top:.125rem;width:100%}@media (min-width:640px){.log-list .log-group .log-link{min-width:64px}}.log-list .log-group .log-link>svg{height:1rem;margin-left:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.log-list .log-group .log-link:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .log-list .log-group .log-link:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.log-list .log-group code,.log-list .log-group mark{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(24 24 27/var(--tw-text-opacity));padding:.125rem .25rem}.dark .log-list .log-group code,.dark .log-list .log-group mark{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.pagination{align-items:center;display:flex;justify-content:center;width:100%}@media (min-width:640px){.pagination{margin-top:.5rem;padding-left:1rem;padding-right:1rem}}@media (min-width:1024px){.pagination{padding-left:0;padding-right:0}}.pagination .previous{display:flex;flex:1 1 0%;justify-content:flex-start;margin-top:-1px;width:0}@media (min-width:768px){.pagination .previous{justify-content:flex-end}}.pagination .previous button{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-right:.25rem;padding-top:.75rem}.dark .pagination .previous button{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .previous button:hover{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity));color:rgb(63 63 70/var(--tw-text-opacity))}.dark .pagination .previous button:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.pagination .previous button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .pagination .previous button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.pagination .previous button svg{color:currentColor;height:1.25rem;margin-left:.75rem;margin-right:.75rem;width:1.25rem}.pagination .next{display:flex;flex:1 1 0%;justify-content:flex-end;margin-top:-1px;width:0}@media (min-width:768px){.pagination .next{justify-content:flex-start}}.pagination .next button{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:.25rem;padding-top:.75rem}.dark .pagination .next button{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .next button:hover{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity));color:rgb(63 63 70/var(--tw-text-opacity))}.dark .pagination .next button:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.pagination .next button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .pagination .next button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.pagination .next button svg{color:currentColor;height:1.25rem;margin-left:.75rem;margin-right:.75rem;width:1.25rem}.pagination .pages{display:none}@media (min-width:640px){.pagination .pages{display:flex;margin-top:-1px}}.pagination .pages span{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:1rem;padding-right:1rem;padding-top:.75rem}.dark .pagination .pages span{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .pages button{align-items:center;border-top-width:2px;display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:1rem;padding-right:1rem;padding-top:.75rem}.pagination .pages button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .pagination .pages button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.search{--tw-border-opacity:1;--tw-bg-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(212 212 216/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;display:flex;font-size:.875rem;line-height:1.25rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.dark .search{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity));color:rgb(244 244 245/var(--tw-text-opacity))}.search .prefix-icon{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));margin-left:.75rem;margin-right:.25rem}.dark .search .prefix-icon{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.search input{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:transparent;background-color:inherit;border-radius:.25rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);flex:1 1 0%;padding:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.search input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-color:transparent;outline:2px solid transparent;outline-offset:2px}.dark .search input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search.has-error{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.search .submit-search button{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-bottom-right-radius:.25rem;border-top-right-radius:.25rem;color:rgb(82 82 91/var(--tw-text-opacity));display:flex;padding:.5rem;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dark .search .submit-search button{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity));color:rgb(212 212 216/var(--tw-text-opacity))}.search .submit-search button:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.dark .search .submit-search button:hover{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.search .submit-search button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .search .submit-search button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search .submit-search button>svg{height:1.25rem;margin-left:.25rem;opacity:.75;width:1.25rem}.search .clear-search{position:absolute;right:0;top:0}.search .clear-search button{--tw-text-opacity:1;border-radius:.25rem;color:rgb(161 161 170/var(--tw-text-opacity));padding:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dark .search .clear-search button{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.search .clear-search button:hover{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.dark .search .clear-search button:hover{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.search .clear-search button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .search .clear-search button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search .clear-search button>svg{height:1.25rem;width:1.25rem}.search-progress-bar{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));border-radius:.25rem;height:.125rem;position:absolute;top:.25rem;transition-duration:.3s;transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:linear}.dark .search-progress-bar{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.dropdown{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(24 24 27/var(--tw-text-opacity));margin-top:-.25rem;overflow:hidden;position:absolute;right:.25rem;top:100%;z-index:40}.dark .dropdown{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.dropdown{transform-origin:top right!important}.dropdown:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));--tw-ring-opacity:0.5;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .dropdown:focus{--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity));--tw-ring-opacity:0.5}.dropdown.up{bottom:100%;margin-bottom:-.25rem;margin-top:0;top:auto;transform-origin:bottom right!important}.dropdown.left{left:.25rem;right:auto;transform-origin:top left!important}.dropdown.left.up{transform-origin:bottom left!important}.dropdown a:not(.inline-link),.dropdown button:not(.inline-link){align-items:center;display:block;display:flex;font-size:.875rem;line-height:1.25rem;outline-color:#0ea5e9;padding:.5rem 1rem;text-align:left;width:100%}.dark .dropdown a:not(.inline-link),.dark .dropdown button:not(.inline-link){outline-color:#075985}.dropdown a:not(.inline-link)>svg,.dropdown button:not(.inline-link)>svg{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));height:1rem;margin-right:.75rem;width:1rem}.dropdown a:not(.inline-link)>svg.spin,.dropdown button:not(.inline-link)>svg.spin{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.dropdown a.active,.dropdown a:hover,.dropdown button.active,.dropdown button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dropdown a.active>.checkmark,.dropdown a:hover>.checkmark,.dropdown button.active>.checkmark,.dropdown button:hover>.checkmark{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.dark .dropdown a.active>.checkmark,.dark .dropdown a:hover>.checkmark,.dark .dropdown button.active>.checkmark,.dark .dropdown button:hover>.checkmark{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.dropdown a.active>svg,.dropdown a:hover>svg,.dropdown button.active>svg,.dropdown button:hover>svg{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dropdown .divider{border-top-width:1px;margin-bottom:.5rem;margin-top:.5rem;width:100%}.dark .dropdown .divider{--tw-border-opacity:1;border-top-color:rgb(63 63 70/var(--tw-border-opacity))}.dropdown .label{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));font-size:.75rem;font-weight:600;line-height:1rem;margin:.25rem 1rem}.file-list{height:100%;overflow-y:auto;padding-bottom:1rem;padding-left:.75rem;padding-right:.75rem;position:relative}@media (min-width:768px){.file-list{padding-left:0;padding-right:0}}.file-list .file-item-container,.file-list .folder-item-container{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(39 39 42/var(--tw-text-opacity));margin-top:.5rem;position:relative;top:0}.dark .file-list .file-item-container,.dark .file-list .folder-item-container{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.file-list .file-item-container .file-item,.file-list .folder-item-container .file-item{border-color:transparent;border-radius:.375rem;border-width:1px;cursor:pointer;position:relative;transition-duration:.1s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.file-list .file-item-container .file-item,.file-list .file-item-container .file-item .file-item-info,.file-list .folder-item-container .file-item,.file-list .folder-item-container .file-item .file-item-info{align-items:center;display:flex;justify-content:space-between;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter}.file-list .file-item-container .file-item .file-item-info,.file-list .folder-item-container .file-item .file-item-info{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem;flex:1 1 0%;outline-color:#0ea5e9;padding:.5rem .75rem .5rem 1rem;text-align:left;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dark .file-list .file-item-container .file-item .file-item-info,.dark .file-list .folder-item-container .file-item .file-item-info{outline-color:#0369a1}.file-list .file-item-container .file-item .file-item-info:hover,.file-list .folder-item-container .file-item .file-item-info:hover{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}.dark .file-list .file-item-container .file-item .file-item-info:hover,.dark .file-list .folder-item-container .file-item .file-item-info:hover{--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.file-list .file-item-container .file-item .file-icon,.file-list .folder-item-container .file-item .file-icon{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));margin-right:.5rem}.dark .file-list .file-item-container .file-item .file-icon,.dark .file-list .folder-item-container .file-item .file-icon{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.file-list .file-item-container .file-item .file-icon>svg,.file-list .folder-item-container .file-item .file-icon>svg{height:1rem;width:1rem}.file-list .file-item-container .file-item .file-name,.file-list .folder-item-container .file-item .file-name{font-size:.875rem;line-height:1.25rem;margin-right:.75rem;width:100%;word-break:break-word}.file-list .file-item-container .file-item .file-size,.file-list .folder-item-container .file-item .file-size{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));font-size:.75rem;line-height:1rem;white-space:nowrap}.dark .file-list .file-item-container .file-item .file-size,.dark .file-list .folder-item-container .file-item .file-size{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity));opacity:.9}.file-list .file-item-container.active .file-item,.file-list .folder-item-container.active .file-item{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(14 165 233/var(--tw-border-opacity))}.dark .file-list .file-item-container.active .file-item,.dark .file-list .folder-item-container.active .file-item{--tw-border-opacity:1;--tw-bg-opacity:0.4;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(12 74 110/var(--tw-border-opacity))}.file-list .file-item-container.active-folder .file-item,.file-list .folder-item-container.active-folder .file-item{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.dark .file-list .file-item-container.active-folder .file-item,.dark .file-list .folder-item-container.active-folder .file-item{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.file-list .file-item-container:hover .file-item,.file-list .folder-item-container:hover .file-item{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.dark .file-list .file-item-container:hover .file-item,.dark .file-list .folder-item-container:hover .file-item{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.file-list .file-item-container .file-dropdown-toggle,.file-list .folder-item-container .file-dropdown-toggle{--tw-text-opacity:1;align-items:center;align-self:stretch;border-bottom-right-radius:.375rem;border-color:transparent;border-left-width:1px;border-top-right-radius:.375rem;color:rgb(113 113 122/var(--tw-text-opacity));display:flex;justify-content:center;outline-color:#0ea5e9;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.dark .file-list .file-item-container .file-dropdown-toggle,.dark .file-list .folder-item-container .file-dropdown-toggle{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));outline-color:#0369a1}.file-list .file-item-container .file-dropdown-toggle:hover,.file-list .folder-item-container .file-dropdown-toggle:hover{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(2 132 199/var(--tw-border-opacity))}.dark .file-list .file-item-container .file-dropdown-toggle:hover,.dark .file-list .folder-item-container .file-dropdown-toggle:hover{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(7 89 133/var(--tw-border-opacity))}.file-list .folder-container .folder-item-container.sticky{position:sticky}.file-list .folder-container:first-child>.folder-item-container{margin-top:0}.menu-button{--tw-text-opacity:1;border-radius:.375rem;color:rgb(161 161 170/var(--tw-text-opacity));cursor:pointer;outline-color:#0ea5e9;padding:.5rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.menu-button:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.dark .menu-button:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.menu-button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}.dark .menu-button:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}a.button,button.button{--tw-text-opacity:1;align-items:center;border-radius:.375rem;color:rgb(24 24 27/var(--tw-text-opacity));display:block;display:flex;font-size:.875rem;line-height:1.25rem;outline-color:#0ea5e9;padding:.5rem 1rem;text-align:left;width:100%}.dark a.button,.dark button.button{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity));outline-color:#075985}a.button>svg,button.button>svg{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity));height:1rem;width:1rem}.dark a.button>svg,.dark button.button>svg{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}a.button>svg.spin,button.button>svg.spin{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}a.button:hover,button.button:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.dark a.button:hover,.dark button.button:hover{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.select{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(63 63 70/var(--tw-text-opacity));font-weight:400;margin-bottom:-.125rem;margin-top:-.125rem;outline:2px solid transparent;outline-offset:2px;padding:.125rem .25rem}.dark .select{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));color:rgb(212 212 216/var(--tw-text-opacity))}.select:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}.dark .select:hover{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.select:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.dark .select:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.keyboard-shortcut{--tw-text-opacity:1;align-items:center;color:rgb(82 82 91/var(--tw-text-opacity));display:flex;font-size:.875rem;justify-content:flex-start;line-height:1.25rem;margin-bottom:.75rem;width:100%}.dark .keyboard-shortcut{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.keyboard-shortcut .shortcut{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(244 244 245/var(--tw-ring-opacity));align-items:center;border-color:rgb(161 161 170/var(--tw-border-opacity));border-radius:.25rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:inline-flex;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1rem;height:1.5rem;justify-content:center;line-height:1.5rem;margin-right:.5rem;width:1.5rem}.dark .keyboard-shortcut .shortcut{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(24 24 27/var(--tw-ring-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity))}.hover\:border-brand-600:hover{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:text-brand-800:hover{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.focus\:border-brand-500:focus{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-brand-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.group:hover .group-hover\:inline-block{display:inline-block}.group:hover .group-hover\:hidden{display:none}.group:hover .group-hover\:border-brand-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.group:hover .group-hover\:underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.group:hover .group-hover\:opacity-100{opacity:1}.group:focus .group-focus\:inline-block{display:inline-block}.group:focus .group-focus\:hidden{display:none}.dark .dark\:border-gray-600{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}.dark .dark\:border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}.dark .dark\:border-gray-800{--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.dark .dark\:border-gray-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.dark .dark\:border-brand-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.dark .dark\:bg-gray-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.dark .dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.dark .dark\:bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}.dark .dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.dark .dark\:bg-opacity-40{--tw-bg-opacity:0.4}.dark .dark\:from-gray-900{--tw-gradient-from:#18181b;--tw-gradient-to:rgba(24,24,27,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark .dark\:text-brand-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.dark .dark\:text-gray-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.dark .dark\:text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.dark .dark\:text-gray-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}.dark .dark\:text-gray-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.dark .dark\:text-brand-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.dark .dark\:text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.dark .dark\:opacity-90{opacity:.9}.dark .dark\:outline-brand-800{outline-color:#075985}.dark .hover\:dark\:border-brand-800:hover{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.dark .dark\:hover\:border-brand-700:hover{--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}.dark .dark\:hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}.dark .dark\:hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.dark .dark\:hover\:text-brand-600:hover{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.dark .dark\:hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.dark .dark\:focus\:ring-brand-700:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.group:hover .dark .group-hover\:dark\:border-brand-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}@media (min-width:640px){.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:flex-col-reverse{flex-direction:column-reverse}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:duration-300{transition-duration:.3s}}@media (min-width:768px){.md\:fixed{position:fixed}.md\:inset-y-0{bottom:0;top:0}.md\:left-0{left:0}.md\:left-auto{left:auto}.md\:right-auto{right:auto}.md\:mx-0{margin-left:0;margin-right:0}.md\:mx-3{margin-left:.75rem;margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:block{display:block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-88{width:22rem}.md\:flex-col{flex-direction:column}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:pl-88{padding-left:22rem}.md\:pb-12{padding-bottom:3rem}.md\:opacity-75{opacity:.75}}@media (min-width:1024px){.lg\:absolute{position:absolute}.lg\:left-0{left:0}.lg\:right-0{right:0}.lg\:top-2{top:.5rem}.lg\:right-6{right:1.5rem}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:mt-0{margin-top:0}.lg\:mb-0{margin-bottom:0}.lg\:block{display:block}.lg\:inline{display:inline}.lg\:table-cell{display:table-cell}.lg\:hidden{display:none}.lg\:w-auto{width:auto}.lg\:flex-row{flex-direction:row}.lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}.lg\:pl-2{padding-left:.5rem}}@media (min-width:1280px){.xl\:inline{display:inline}}
+/*! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e4e4e7;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a1a1aa;opacity:1}input::placeholder,textarea::placeholder{color:#a1a1aa;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{bottom:0;top:0}.-left-\[200\%\]{left:-200%}.bottom-0{bottom:0}.bottom-10{bottom:2.5rem}.bottom-4{bottom:1rem}.left-0{left:0}.left-3{left:.75rem}.right-0{right:0}.right-4{right:1rem}.right-7{right:1.75rem}.right-\[200\%\]{right:200%}.top-0{top:0}.top-9{top:2.25rem}.z-10{z-index:10}.z-20{z-index:20}.m-1{margin:.25rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-1\.5{margin-left:.375rem;margin-right:.375rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.my-auto{margin-bottom:auto;margin-top:auto}.-mb-0{margin-bottom:0}.-mb-0\.5{margin-bottom:-.125rem}.-mb-px{margin-bottom:-1px}.-mr-2{margin-right:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-5{margin-left:1.25rem}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-2\.5{margin-right:.625rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-0{height:0}.h-14{height:3.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-\[18px\]{height:18px}.h-full{height:100%}.max-h-60{max-height:15rem}.max-h-screen{max-height:100vh}.min-h-\[38px\]{min-height:38px}.min-h-screen{min-height:100vh}.w-14{width:3.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-\[18px\]{width:18px}.w-full{width:100%}.w-screen{width:100vw}.min-w-\[240px\]{min-width:240px}.min-w-full{min-width:100%}.max-w-\[1px\]{max-width:1px}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.shrink{flex-shrink:1}.table-fixed{table-layout:fixed}.border-separate{border-collapse:separate}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.rotate-90{--tw-rotate:90deg}.rotate-90,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-flow-col{grid-auto-flow:column}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-brand-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.bg-brand-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-opacity-75{--tw-bg-opacity:0.75}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-gray-100{--tw-gradient-from:#f4f4f5 var(--tw-gradient-from-position);--tw-gradient-to:hsla(240,5%,96%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.p-12{padding:3rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-1{padding-bottom:.25rem}.pb-16{padding-bottom:4rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-9{padding-right:2.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-brand-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.text-brand-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}.text-brand-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-brand-500{outline-color:#0ea5e9}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-opacity-5{--tw-ring-opacity:0.05}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.spin{-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:spin;-moz-animation-name:spin;-ms-animation-name:spin;animation-name:spin;-webkit-animation-timing-function:linear;-moz-animation-timing-function:linear;-ms-animation-timing-function:linear;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}html.dark{color-scheme:dark}#bmc-wbtn{height:48px!important;width:48px!important}#bmc-wbtn>img{height:32px!important;width:32px!important}.log-levels-selector .dropdown-toggle{white-space:nowrap}.log-levels-selector .dropdown-toggle:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .log-levels-selector .dropdown-toggle:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.log-levels-selector .dropdown-toggle>svg{height:1rem;margin-left:.25rem;opacity:.75;width:1rem}.log-levels-selector .dropdown .log-level{font-weight:600}.log-levels-selector .dropdown .log-level.success{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown .log-level.success){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.info{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown .log-level.info){--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.warning{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown .log-level.warning){--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.danger{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown .log-level.danger){--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-level.none{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown .log-level.none){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-levels-selector .dropdown .log-count{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));margin-left:2rem;white-space:nowrap}:is(.dark .log-levels-selector .dropdown .log-count){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.success{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.info{--tw-text-opacity:1;color:rgb(224 242 254/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.warning{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.danger{--tw-text-opacity:1;color:rgb(255 228 230/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-level.none{--tw-text-opacity:1;color:rgb(244 244 245/var(--tw-text-opacity))}.log-levels-selector .dropdown button.active .log-count{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}:is(.dark .log-levels-selector .dropdown button.active .log-count){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.log-levels-selector .dropdown .no-results{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));font-size:.75rem;line-height:1rem;padding:.25rem 1rem;text-align:center}:is(.dark .log-levels-selector .dropdown .no-results){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-item{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));cursor:pointer;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}:is(.dark .log-item){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.log-item.success.active>td,.log-item.success:focus-within>td,.log-item.success:hover>td{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity))}:is(.dark .log-item.success.active>td),:is(.dark .log-item.success:focus-within>td),:is(.dark .log-item.success:hover>td){--tw-bg-opacity:0.4;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.log-item.success .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}:is(.dark .log-item.success .log-level-indicator){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.log-item.success .log-level{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}:is(.dark .log-item.success .log-level){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.log-item.info.active>td,.log-item.info:focus-within>td,.log-item.info:hover>td{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}:is(.dark .log-item.info.active>td),:is(.dark .log-item.info:focus-within>td),:is(.dark .log-item.info:hover>td){--tw-bg-opacity:0.4;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.log-item.info .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}:is(.dark .log-item.info .log-level-indicator){--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.log-item.info .log-level{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}:is(.dark .log-item.info .log-level){--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.log-item.warning.active>td,.log-item.warning:focus-within>td,.log-item.warning:hover>td{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity))}:is(.dark .log-item.warning.active>td),:is(.dark .log-item.warning:focus-within>td),:is(.dark .log-item.warning:hover>td){--tw-bg-opacity:0.4;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.log-item.warning .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity))}:is(.dark .log-item.warning .log-level-indicator){--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity))}.log-item.warning .log-level{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}:is(.dark .log-item.warning .log-level){--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}.log-item.danger.active>td,.log-item.danger:focus-within>td,.log-item.danger:hover>td{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity))}:is(.dark .log-item.danger.active>td),:is(.dark .log-item.danger:focus-within>td),:is(.dark .log-item.danger:hover>td){--tw-bg-opacity:0.4;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.log-item.danger .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity))}:is(.dark .log-item.danger .log-level-indicator){--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity))}.log-item.danger .log-level{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}:is(.dark .log-item.danger .log-level){--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}.log-item.none.active>td,.log-item.none:focus-within>td,.log-item.none:hover>td{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:is(.dark .log-item.none.active>td),:is(.dark .log-item.none:focus-within>td),:is(.dark .log-item.none:hover>td){--tw-bg-opacity:0.4;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.log-item.none .log-level-indicator{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}:is(.dark .log-item.none .log-level-indicator){--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity))}.log-item.none .log-level{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}:is(.dark .log-item.none .log-level){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.log-item:hover .log-level-icon{opacity:1}.badge{align-items:center;border-radius:.375rem;cursor:pointer;display:inline-flex;font-size:.875rem;line-height:1.25rem;margin-right:.5rem;margin-top:.25rem;padding:.25rem .75rem;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.badge.success{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity));border-color:rgb(167 243 208/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.success){--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity));border-color:rgb(6 95 70/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.success:hover{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}:is(.dark .badge.success:hover){--tw-bg-opacity:0.75;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.badge.success .checkmark{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}:is(.dark .badge.success .checkmark){--tw-border-opacity:1;border-color:rgb(6 95 70/var(--tw-border-opacity))}.badge.success.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity));border-color:rgb(4 120 87/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .badge.success.active){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity));border-color:rgb(5 150 105/var(--tw-border-opacity))}.badge.success.active:hover{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}:is(.dark .badge.success.active:hover){--tw-bg-opacity:1;background-color:rgb(6 95 70/var(--tw-bg-opacity))}.badge.success.active .checkmark{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity))}:is(.dark .badge.success.active .checkmark){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity));border-color:rgb(4 120 87/var(--tw-border-opacity))}.badge.success.active .checkmark>svg{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity))}:is(.dark .badge.success.active .checkmark>svg){--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.badge.info{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(186 230 253/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.info){--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(7 89 133/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.info:hover{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}:is(.dark .badge.info:hover){--tw-bg-opacity:0.75;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.badge.info .checkmark{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity))}:is(.dark .badge.info .checkmark){--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.badge.info.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity));border-color:rgb(3 105 161/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .badge.info.active){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity));border-color:rgb(2 132 199/var(--tw-border-opacity))}.badge.info.active:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}:is(.dark .badge.info.active:hover){--tw-bg-opacity:1;background-color:rgb(7 89 133/var(--tw-bg-opacity))}.badge.info.active .checkmark{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}:is(.dark .badge.info.active .checkmark){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity));border-color:rgb(3 105 161/var(--tw-border-opacity))}.badge.info.active .checkmark>svg{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}:is(.dark .badge.info.active .checkmark>svg){--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.badge.warning{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity));border-color:rgb(253 230 138/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.warning){--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity));border-color:rgb(146 64 14/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.warning:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}:is(.dark .badge.warning:hover){--tw-bg-opacity:0.75;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.badge.warning .checkmark{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity))}:is(.dark .badge.warning .checkmark){--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity))}.badge.warning.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity));border-color:rgb(180 83 9/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .badge.warning.active){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity));border-color:rgb(217 119 6/var(--tw-border-opacity))}.badge.warning.active:hover{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}:is(.dark .badge.warning.active:hover){--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity))}.badge.warning.active .checkmark{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity))}:is(.dark .badge.warning.active .checkmark){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity));border-color:rgb(180 83 9/var(--tw-border-opacity))}.badge.warning.active .checkmark>svg{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}:is(.dark .badge.warning.active .checkmark>svg){--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.badge.danger{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity));border-color:rgb(254 205 211/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.danger){--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity));border-color:rgb(159 18 57/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.danger:hover{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}:is(.dark .badge.danger:hover){--tw-bg-opacity:0.75;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.badge.danger .checkmark{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}:is(.dark .badge.danger .checkmark){--tw-border-opacity:1;border-color:rgb(159 18 57/var(--tw-border-opacity))}.badge.danger.active{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity));border-color:rgb(190 18 60/var(--tw-border-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .badge.danger.active){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity));border-color:rgb(225 29 72/var(--tw-border-opacity))}.badge.danger.active:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}:is(.dark .badge.danger.active:hover){--tw-bg-opacity:1;background-color:rgb(159 18 57/var(--tw-bg-opacity))}.badge.danger.active .checkmark{--tw-border-opacity:1;border-color:rgb(225 29 72/var(--tw-border-opacity))}:is(.dark .badge.danger.active .checkmark){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity));border-color:rgb(190 18 60/var(--tw-border-opacity))}.badge.danger.active .checkmark>svg{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}:is(.dark .badge.danger.active .checkmark>svg){--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.badge.none{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-width:1px;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.none){--tw-border-opacity:1;--tw-bg-opacity:0.4;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));border-color:rgb(39 39 42/var(--tw-border-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}.badge.none:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:is(.dark .badge.none:hover){--tw-bg-opacity:0.75;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.badge.none .checkmark{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}:is(.dark .badge.none .checkmark){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.badge.none.active{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));color:rgb(39 39 42/var(--tw-text-opacity))}:is(.dark .badge.none.active){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity));color:rgb(244 244 245/var(--tw-text-opacity))}.badge.none.active:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:is(.dark .badge.none.active:hover){--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.badge.none.active .checkmark{--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}:is(.dark .badge.none.active .checkmark){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity))}.badge.none.active .checkmark>svg{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .badge.none.active .checkmark>svg){--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.log-list table>thead th{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));color:rgb(113 113 122/var(--tw-text-opacity));font-size:.75rem;font-weight:600;line-height:1rem;padding:.5rem .25rem;position:sticky;text-align:left;top:0;z-index:10}.file-list .folder-container .folder-item-container.log-list table>thead th{position:sticky}:is(.dark .log-list table>thead th){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));color:rgb(161 161 170/var(--tw-text-opacity))}@media (min-width:1024px){.log-list table>thead th{font-size:.875rem;line-height:1.25rem;padding-left:.5rem;padding-right:.5rem}}.log-list .log-group{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));position:relative}:is(.dark .log-list .log-group){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.log-list .log-group .log-item>td{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity));border-top-width:1px;font-size:.75rem;line-height:1rem;padding:.375rem .25rem}:is(.dark .log-list .log-group .log-item>td){--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .log-item>td{font-size:.875rem;line-height:1.25rem;padding:.5rem}}.log-list .log-group.first .log-item>td{border-top-color:transparent}.log-list .log-group .mail-preview-attributes{--tw-border-opacity:1;background-color:rgba(240,249,255,.3);border-color:rgb(224 242 254/var(--tw-border-opacity));border-radius:.25rem;border-width:1px;font-size:.75rem;line-height:1rem;margin-bottom:1rem;overflow-x:auto;width:100%}:is(.dark .log-list .log-group .mail-preview-attributes){--tw-border-opacity:1;background-color:rgba(12,74,110,.2);border-color:rgb(7 89 133/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .mail-preview-attributes{font-size:.875rem;line-height:1.25rem;margin-bottom:1.5rem;overflow:hidden}}.log-list .log-group .mail-preview-attributes table{width:100%}.log-list .log-group .mail-preview-attributes td{padding:.25rem .5rem}@media (min-width:1024px){.log-list .log-group .mail-preview-attributes td{padding:.5rem 1.5rem}}.log-list .log-group .mail-preview-attributes td:not(:first-child){overflow-wrap:anywhere}.log-list .log-group .mail-preview-attributes tr:first-child td{padding-top:.375rem}@media (min-width:1024px){.log-list .log-group .mail-preview-attributes tr:first-child td{padding-top:.75rem}}.log-list .log-group .mail-preview-attributes tr:last-child td{padding-bottom:.375rem}@media (min-width:1024px){.log-list .log-group .mail-preview-attributes tr:last-child td{padding-bottom:.75rem}}.log-list .log-group .mail-preview-attributes tr:not(:last-child) td{--tw-border-opacity:1;border-bottom-width:1px;border-color:rgb(224 242 254/var(--tw-border-opacity))}:is(.dark .log-list .log-group .mail-preview-attributes tr:not(:last-child) td){--tw-border-opacity:1;border-color:rgb(12 74 110/var(--tw-border-opacity))}.log-list .log-group .mail-preview-html{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-radius:.25rem;border-width:1px;margin-bottom:1rem;overflow:auto;width:100%}:is(.dark .log-list .log-group .mail-preview-html){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .mail-preview-html{margin-bottom:1.5rem}}.log-list .log-group .mail-preview-text{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-radius:.25rem;border-width:1px;font-size:.875rem;line-height:1.25rem;margin-bottom:1rem;padding:1rem;white-space:pre-wrap;width:100%}:is(.dark .log-list .log-group .mail-preview-text){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .mail-preview-text{margin-bottom:1.5rem}}.log-list .log-group .mail-attachment-button{--tw-bg-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.25rem;border-width:1px;display:flex;justify-content:space-between;padding:.25rem .5rem}:is(.dark .log-list .log-group .mail-attachment-button){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .mail-attachment-button{padding:.5rem 1rem}}.log-list .log-group .mail-attachment-button{max-width:460px}.log-list .log-group .mail-attachment-button:not(:last-child){margin-bottom:.5rem}.log-list .log-group .mail-attachment-button a:focus{outline-color:#0ea5e9}.log-list .log-group .tabs-container{font-size:.75rem;line-height:1rem}@media (min-width:1024px){.log-list .log-group .tabs-container{font-size:.875rem;line-height:1.25rem}}.log-list .log-group .log-stack,.log-list .log-group .mail-preview,.log-list .log-group .tabs-container{padding:.25rem .5rem}@media (min-width:1024px){.log-list .log-group .log-stack,.log-list .log-group .mail-preview,.log-list .log-group .tabs-container{padding:.5rem 2rem}}.log-list .log-group .log-stack{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity));font-size:10px;line-height:.75rem;white-space:pre-wrap;word-break:break-all}:is(.dark .log-list .log-group .log-stack){--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}@media (min-width:1024px){.log-list .log-group .log-stack{font-size:.75rem;line-height:1rem}}.log-list .log-group .log-link{align-items:center;border-radius:.25rem;display:flex;justify-content:flex-end;margin-bottom:-.125rem;margin-top:-.125rem;padding-bottom:.125rem;padding-left:.25rem;padding-top:.125rem;width:100%}@media (min-width:640px){.log-list .log-group .log-link{min-width:64px}}.log-list .log-group .log-link>svg{height:1rem;margin-left:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.log-list .log-group .log-link:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .log-list .log-group .log-link:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.log-list .log-group code,.log-list .log-group mark{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(24 24 27/var(--tw-text-opacity));padding:.125rem .25rem}:is(.dark .log-list .log-group code),:is(.dark .log-list .log-group mark){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.pagination{align-items:center;display:flex;justify-content:center;width:100%}@media (min-width:640px){.pagination{margin-top:.5rem;padding-left:1rem;padding-right:1rem}}@media (min-width:1024px){.pagination{padding-left:0;padding-right:0}}.pagination .previous{display:flex;flex:1 1 0%;justify-content:flex-start;margin-top:-1px;width:0}@media (min-width:768px){.pagination .previous{justify-content:flex-end}}.pagination .previous button{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-right:.25rem;padding-top:.75rem}:is(.dark .pagination .previous button){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .previous button:hover{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity));color:rgb(63 63 70/var(--tw-text-opacity))}:is(.dark .pagination .previous button:hover){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.pagination .previous button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .pagination .previous button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.pagination .previous button svg{color:currentColor;height:1.25rem;margin-left:.75rem;margin-right:.75rem;width:1.25rem}.pagination .next{display:flex;flex:1 1 0%;justify-content:flex-end;margin-top:-1px;width:0}@media (min-width:768px){.pagination .next{justify-content:flex-start}}.pagination .next button{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:.25rem;padding-top:.75rem}:is(.dark .pagination .next button){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .next button:hover{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity));color:rgb(63 63 70/var(--tw-text-opacity))}:is(.dark .pagination .next button:hover){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.pagination .next button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .pagination .next button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.pagination .next button svg{color:currentColor;height:1.25rem;margin-left:.75rem;margin-right:.75rem;width:1.25rem}.pagination .pages{display:none}@media (min-width:640px){.pagination .pages{display:flex;margin-top:-1px}}.pagination .pages span{--tw-text-opacity:1;align-items:center;border-color:transparent;border-top-width:2px;color:rgb(113 113 122/var(--tw-text-opacity));display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:1rem;padding-right:1rem;padding-top:.75rem}:is(.dark .pagination .pages span){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.pagination .pages button{align-items:center;border-top-width:2px;display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding-left:1rem;padding-right:1rem;padding-top:.75rem}.pagination .pages button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .pagination .pages button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(56 189 248/var(--tw-ring-opacity))}.search{--tw-border-opacity:1;--tw-bg-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(212 212 216/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;display:flex;font-size:.875rem;line-height:1.25rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}:is(.dark .search){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity));color:rgb(244 244 245/var(--tw-text-opacity))}.search .prefix-icon{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));margin-left:.75rem;margin-right:.25rem}:is(.dark .search .prefix-icon){--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.search input{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:transparent;background-color:inherit;border-radius:.25rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);flex:1 1 0%;padding:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.search input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));border-color:transparent;outline:2px solid transparent;outline-offset:2px}:is(.dark .search input:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search.has-error{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.search .submit-search button{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-bottom-right-radius:.25rem;border-top-right-radius:.25rem;color:rgb(82 82 91/var(--tw-text-opacity));display:flex;padding:.5rem;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}:is(.dark .search .submit-search button){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity));color:rgb(212 212 216/var(--tw-text-opacity))}.search .submit-search button:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}:is(.dark .search .submit-search button:hover){--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}.search .submit-search button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .search .submit-search button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search .submit-search button>svg{height:1.25rem;margin-left:.25rem;opacity:.75;width:1.25rem}.search .clear-search{position:absolute;right:0;top:0}.search .clear-search button{--tw-text-opacity:1;border-radius:.25rem;color:rgb(161 161 170/var(--tw-text-opacity));padding:.25rem;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}:is(.dark .search .clear-search button){--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.search .clear-search button:hover{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}:is(.dark .search .clear-search button:hover){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.search .clear-search button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .search .clear-search button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.search .clear-search button>svg{height:1.25rem;width:1.25rem}.search-progress-bar{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));border-radius:.25rem;height:.125rem;position:absolute;top:.25rem;transition-duration:.3s;transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:linear}:is(.dark .search-progress-bar){--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.dropdown{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(228 228 231/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(24 24 27/var(--tw-text-opacity));margin-top:-.25rem;overflow:hidden;position:absolute;right:.25rem;top:100%;z-index:40}:is(.dark .dropdown){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));border-color:rgb(63 63 70/var(--tw-border-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.dropdown{transform-origin:top right!important}.dropdown:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));--tw-ring-opacity:0.5;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .dropdown:focus){--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity));--tw-ring-opacity:0.5}.dropdown.up{bottom:100%;margin-bottom:-.25rem;margin-top:0;top:auto;transform-origin:bottom right!important}.dropdown.left{left:.25rem;right:auto;transform-origin:top left!important}.dropdown.left.up{transform-origin:bottom left!important}.dropdown a:not(.inline-link),.dropdown button:not(.inline-link){align-items:center;display:block;display:flex;font-size:.875rem;line-height:1.25rem;outline-color:#0ea5e9;padding:.5rem 1rem;text-align:left;width:100%}:is(.dark .dropdown a:not(.inline-link)),:is(.dark .dropdown button:not(.inline-link)){outline-color:#075985}.dropdown a:not(.inline-link)>svg,.dropdown button:not(.inline-link)>svg{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));height:1rem;margin-right:.75rem;width:1rem}.dropdown a:not(.inline-link)>svg.spin,.dropdown button:not(.inline-link)>svg.spin{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.dropdown a.active,.dropdown a:hover,.dropdown button.active,.dropdown button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.dropdown a.active>.checkmark,.dropdown a:hover>.checkmark,.dropdown button.active>.checkmark,.dropdown button:hover>.checkmark{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}:is(.dark .dropdown a.active>.checkmark),:is(.dark .dropdown a:hover>.checkmark),:is(.dark .dropdown button.active>.checkmark),:is(.dark .dropdown button:hover>.checkmark){--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.dropdown a.active>svg,.dropdown a:hover>svg,.dropdown button.active>svg,.dropdown button:hover>svg{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dropdown .divider{border-top-width:1px;margin-bottom:.5rem;margin-top:.5rem;width:100%}:is(.dark .dropdown .divider){--tw-border-opacity:1;border-top-color:rgb(63 63 70/var(--tw-border-opacity))}.dropdown .label{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));font-size:.75rem;font-weight:600;line-height:1rem;margin:.25rem 1rem}.file-list{height:100%;overflow-y:auto;padding-bottom:1rem;padding-left:.75rem;padding-right:.75rem;position:relative}@media (min-width:768px){.file-list{padding-left:0;padding-right:0}}.file-list .file-item-container,.file-list .folder-item-container{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(39 39 42/var(--tw-text-opacity));margin-top:.5rem;position:relative;top:0}:is(.dark .file-list .file-item-container),:is(.dark .file-list .folder-item-container){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity));color:rgb(228 228 231/var(--tw-text-opacity))}.file-list .file-item-container .file-item,.file-list .folder-item-container .file-item{border-color:transparent;border-radius:.375rem;border-width:1px;cursor:pointer;position:relative;transition-duration:.1s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.file-list .file-item-container .file-item,.file-list .file-item-container .file-item .file-item-info,.file-list .folder-item-container .file-item,.file-list .folder-item-container .file-item .file-item-info{align-items:center;display:flex;justify-content:space-between;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter}.file-list .file-item-container .file-item .file-item-info,.file-list .folder-item-container .file-item .file-item-info{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem;flex:1 1 0%;outline-color:#0ea5e9;padding:.5rem .75rem .5rem 1rem;text-align:left;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}:is(.dark .file-list .file-item-container .file-item .file-item-info),:is(.dark .file-list .folder-item-container .file-item .file-item-info){outline-color:#0369a1}.file-list .file-item-container .file-item .file-item-info:hover,.file-list .folder-item-container .file-item .file-item-info:hover{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity))}:is(.dark .file-list .file-item-container .file-item .file-item-info:hover),:is(.dark .file-list .folder-item-container .file-item .file-item-info:hover){--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity))}.file-list .file-item-container .file-item .file-icon,.file-list .folder-item-container .file-item .file-icon{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));margin-right:.5rem}:is(.dark .file-list .file-item-container .file-item .file-icon),:is(.dark .file-list .folder-item-container .file-item .file-icon){--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.file-list .file-item-container .file-item .file-icon>svg,.file-list .folder-item-container .file-item .file-icon>svg{height:1rem;width:1rem}.file-list .file-item-container .file-item .file-name,.file-list .folder-item-container .file-item .file-name{font-size:.875rem;line-height:1.25rem;margin-right:.75rem;width:100%;word-break:break-word}.file-list .file-item-container .file-item .file-size,.file-list .folder-item-container .file-item .file-size{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity));font-size:.75rem;line-height:1rem;white-space:nowrap}:is(.dark .file-list .file-item-container .file-item .file-size),:is(.dark .file-list .folder-item-container .file-item .file-size){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity));opacity:.9}.file-list .file-item-container.active .file-item,.file-list .folder-item-container.active .file-item{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(14 165 233/var(--tw-border-opacity))}:is(.dark .file-list .file-item-container.active .file-item),:is(.dark .file-list .folder-item-container.active .file-item){--tw-border-opacity:1;--tw-bg-opacity:0.4;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(12 74 110/var(--tw-border-opacity))}.file-list .file-item-container.active-folder .file-item,.file-list .folder-item-container.active-folder .file-item{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}:is(.dark .file-list .file-item-container.active-folder .file-item),:is(.dark .file-list .folder-item-container.active-folder .file-item){--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.file-list .file-item-container:hover .file-item,.file-list .folder-item-container:hover .file-item{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}:is(.dark .file-list .file-item-container:hover .file-item),:is(.dark .file-list .folder-item-container:hover .file-item){--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}.file-list .file-item-container .file-dropdown-toggle,.file-list .folder-item-container .file-dropdown-toggle{--tw-text-opacity:1;align-items:center;align-self:stretch;border-bottom-right-radius:.375rem;border-color:transparent;border-left-width:1px;border-top-right-radius:.375rem;color:rgb(113 113 122/var(--tw-text-opacity));display:flex;justify-content:center;outline-color:#0ea5e9;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}:is(.dark .file-list .file-item-container .file-dropdown-toggle),:is(.dark .file-list .folder-item-container .file-dropdown-toggle){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity));outline-color:#0369a1}.file-list .file-item-container .file-dropdown-toggle:hover,.file-list .folder-item-container .file-dropdown-toggle:hover{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity));border-color:rgb(2 132 199/var(--tw-border-opacity))}:is(.dark .file-list .file-item-container .file-dropdown-toggle:hover),:is(.dark .file-list .folder-item-container .file-dropdown-toggle:hover){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(12 74 110/var(--tw-bg-opacity));border-color:rgb(7 89 133/var(--tw-border-opacity))}.file-list .folder-container .folder-item-container.sticky{position:sticky}.file-list .folder-container:first-child>.folder-item-container{margin-top:0}.menu-button{--tw-text-opacity:1;border-radius:.375rem;color:rgb(161 161 170/var(--tw-text-opacity));cursor:pointer;outline-color:#0ea5e9;padding:.5rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.menu-button:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}:is(.dark .menu-button:hover){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}.menu-button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid transparent;outline-offset:2px}:is(.dark .menu-button:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}a.button,button.button{--tw-text-opacity:1;align-items:center;border-radius:.375rem;color:rgb(24 24 27/var(--tw-text-opacity));display:block;display:flex;font-size:.875rem;line-height:1.25rem;outline-color:#0ea5e9;padding:.5rem 1rem;text-align:left;width:100%}:is(.dark a.button),:is(.dark button.button){--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity));outline-color:#075985}a.button>svg,button.button>svg{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity));height:1rem;width:1rem}:is(.dark a.button>svg),:is(.dark button.button>svg){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}a.button>svg.spin,button.button>svg.spin{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}a.button:hover,button.button:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}:is(.dark a.button:hover),:is(.dark button.button:hover){--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.select{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(63 63 70/var(--tw-text-opacity));font-weight:400;margin-bottom:-.125rem;margin-top:-.125rem;outline:2px solid transparent;outline-offset:2px;padding:.125rem .25rem}:is(.dark .select){--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity));color:rgb(212 212 216/var(--tw-text-opacity))}.select:hover{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity))}:is(.dark .select:hover){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.select:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}:is(.dark .select:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.keyboard-shortcut{--tw-text-opacity:1;align-items:center;color:rgb(82 82 91/var(--tw-text-opacity));display:flex;font-size:.875rem;justify-content:flex-start;line-height:1.25rem;margin-bottom:.75rem;width:100%}:is(.dark .keyboard-shortcut){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.keyboard-shortcut .shortcut{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(244 244 245/var(--tw-ring-opacity));align-items:center;border-color:rgb(161 161 170/var(--tw-border-opacity));border-radius:.25rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:inline-flex;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1rem;height:1.5rem;justify-content:center;line-height:1.5rem;margin-right:.5rem;width:1.5rem}:is(.dark .keyboard-shortcut .shortcut){--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(24 24 27/var(--tw-ring-opacity));border-color:rgb(82 82 91/var(--tw-border-opacity))}.hover\:border-brand-600:hover{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.hover\:text-brand-800:hover{--tw-text-opacity:1;color:rgb(7 89 133/var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.focus\:border-brand-500:focus{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-brand-500:focus{outline-color:#0ea5e9}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-brand-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.group:hover .group-hover\:inline-block{display:inline-block}.group:hover .group-hover\:hidden{display:none}.group:hover .group-hover\:border-brand-600{--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:opacity-100{opacity:1}.group:focus .group-focus\:inline-block{display:inline-block}.group:focus .group-focus\:hidden{display:none}:is(.dark .dark\:border-brand-400){--tw-border-opacity:1;border-color:rgb(56 189 248/var(--tw-border-opacity))}:is(.dark .dark\:border-brand-600){--tw-border-opacity:1;border-color:rgb(2 132 199/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-600){--tw-border-opacity:1;border-color:rgb(82 82 91/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}:is(.dark .dark\:border-gray-800){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}:is(.dark .dark\:border-yellow-800){--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}:is(.dark .dark\:bg-yellow-900){--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity))}:is(.dark .dark\:bg-opacity-40){--tw-bg-opacity:0.4}:is(.dark .dark\:from-gray-900){--tw-gradient-from:#18181b var(--tw-gradient-from-position);--tw-gradient-to:rgba(24,24,27,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(.dark .dark\:text-blue-500){--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}:is(.dark .dark\:text-brand-500){--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}:is(.dark .dark\:text-brand-600){--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}:is(.dark .dark\:text-green-500){--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}:is(.dark .dark\:text-yellow-400){--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}:is(.dark .dark\:opacity-90){opacity:.9}:is(.dark .dark\:outline-brand-800){outline-color:#075985}:is(.dark .dark\:hover\:border-brand-700:hover){--tw-border-opacity:1;border-color:rgb(3 105 161/var(--tw-border-opacity))}:is(.dark .dark\:hover\:border-gray-400:hover){--tw-border-opacity:1;border-color:rgb(161 161 170/var(--tw-border-opacity))}:is(.dark .hover\:dark\:border-brand-800):hover{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}:is(.dark .dark\:hover\:bg-gray-600:hover){--tw-bg-opacity:1;background-color:rgb(82 82 91/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-blue-400:hover){--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-brand-600:hover){--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-gray-200:hover){--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-gray-300:hover){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity))}:is(.dark .dark\:focus\:ring-brand-700:focus){--tw-ring-opacity:1;--tw-ring-color:rgb(3 105 161/var(--tw-ring-opacity))}.group:hover :is(.dark .group-hover\:dark\:border-brand-800){--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity))}@media (min-width:640px){.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:flex-col-reverse{flex-direction:column-reverse}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:duration-300{transition-duration:.3s}}@media (min-width:768px){.md\:fixed{position:fixed}.md\:inset-y-0{bottom:0;top:0}.md\:left-0{left:0}.md\:left-auto{left:auto}.md\:right-auto{right:auto}.md\:mx-0{margin-left:0;margin-right:0}.md\:mx-3{margin-left:.75rem;margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:block{display:block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-88{width:22rem}.md\:flex-col{flex-direction:column}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:pb-12{padding-bottom:3rem}.md\:pl-88{padding-left:22rem}.md\:opacity-75{opacity:.75}}@media (min-width:1024px){.lg\:absolute{position:absolute}.lg\:left-0{left:0}.lg\:right-0{right:0}.lg\:right-6{right:1.5rem}.lg\:top-2{top:.5rem}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:mb-0{margin-bottom:0}.lg\:mt-0{margin-top:0}.lg\:block{display:block}.lg\:inline{display:inline}.lg\:table-cell{display:table-cell}.lg\:hidden{display:none}.lg\:w-auto{width:auto}.lg\:flex-row{flex-direction:row}.lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}.lg\:pl-2{padding-left:.5rem}.lg\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:1280px){.xl\:inline{display:inline}}
diff --git a/public/vendor/log-viewer/app.js b/public/vendor/log-viewer/app.js
index 9d1ae1061b..bfaf39b495 100644
--- a/public/vendor/log-viewer/app.js
+++ b/public/vendor/log-viewer/app.js
@@ -1,2 +1,2 @@
/*! For license information please see app.js.LICENSE.txt */
-(()=>{var e,t={520:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z","clip-rule":"evenodd"})])}},889:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z","clip-rule":"evenodd"})])}},10:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18"})])}},488:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"})])}},683:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3"})])}},69:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13.5 6H5.25A2.25 2.25 0 003 8.25v10.5A2.25 2.25 0 005.25 21h10.5A2.25 2.25 0 0018 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"})])}},246:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M19.5 8.25l-7.5 7.5-7.5-7.5"})])}},388:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M8.25 4.5l7.5 7.5-7.5 7.5"})])}},782:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"})])}},156:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9.75v6.75m0 0l-3-3m3 3l3-3m-8.25 6a4.5 4.5 0 01-1.41-8.775 5.25 5.25 0 0110.233-2.33 3 3 0 013.758 3.848A3.752 3.752 0 0118 19.5H6.75z"})])}},904:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z"}),r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})])}},960:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 17.25v1.007a3 3 0 01-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0115 18.257V17.25m6-12V15a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 15V5.25m18 0A2.25 2.25 0 0018.75 3H5.25A2.25 2.25 0 003 5.25m18 0V12a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 12V5.25"})])}},243:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 6.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 12.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 18.75a.75.75 0 110-1.5.75.75 0 010 1.5z"})])}},706:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"})])}},413:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M2.25 12.75V12A2.25 2.25 0 014.5 9.75h15A2.25 2.25 0 0121.75 12v.75m-8.69-6.44l-2.12-2.12a1.5 1.5 0 00-1.061-.44H4.5A2.25 2.25 0 002.25 6v12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9a2.25 2.25 0 00-2.25-2.25h-5.379a1.5 1.5 0 01-1.06-.44z"})])}},199:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 00-1.883 2.542l.857 6a2.25 2.25 0 002.227 1.932H19.05a2.25 2.25 0 002.227-1.932l.857-6a2.25 2.25 0 00-1.883-2.542m-16.5 0V6A2.25 2.25 0 016 3.75h3.879a1.5 1.5 0 011.06.44l2.122 2.12a1.5 1.5 0 001.06.44H18A2.25 2.25 0 0120.25 9v.776"})])}},923:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13.19 8.688a4.5 4.5 0 011.242 7.244l-4.5 4.5a4.5 4.5 0 01-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 00-6.364-6.364l-4.5 4.5a4.5 4.5 0 001.242 7.244"})])}},447:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"})])}},902:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z"})])}},390:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z"})])}},908:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M7.217 10.907a2.25 2.25 0 100 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186l9.566-5.314m-9.566 7.5l9.566 5.314m0 0a2.25 2.25 0 103.935 2.186 2.25 2.25 0 00-3.935-2.186zm0-12.814a2.25 2.25 0 103.933-2.185 2.25 2.25 0 00-3.933 2.185z"})])}},817:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z"})])}},558:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"})])}},505:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true"},[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"})])}},598:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M4.755 10.059a7.5 7.5 0 0112.548-3.364l1.903 1.903h-3.183a.75.75 0 100 1.5h4.992a.75.75 0 00.75-.75V4.356a.75.75 0 00-1.5 0v3.18l-1.9-1.9A9 9 0 003.306 9.67a.75.75 0 101.45.388zm15.408 3.352a.75.75 0 00-.919.53 7.5 7.5 0 01-12.548 3.364l-1.902-1.903h3.183a.75.75 0 000-1.5H2.984a.75.75 0 00-.75.75v4.992a.75.75 0 001.5 0v-3.18l1.9 1.9a9 9 0 0015.059-4.035.75.75 0 00-.53-.918z","clip-rule":"evenodd"})])}},462:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M3 6.75A.75.75 0 013.75 6h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 6.75zM3 12a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 12zm0 5.25a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75a.75.75 0 01-.75-.75z","clip-rule":"evenodd"})])}},452:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M16.28 11.47a.75.75 0 010 1.06l-7.5 7.5a.75.75 0 01-1.06-1.06L14.69 12 7.72 5.03a.75.75 0 011.06-1.06l7.5 7.5z","clip-rule":"evenodd"})])}},640:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z","clip-rule":"evenodd"})])}},307:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z","clip-rule":"evenodd"})])}},968:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{d:"M7.493 18.75c-.425 0-.82-.236-.975-.632A7.48 7.48 0 016 15.375c0-1.75.599-3.358 1.602-4.634.151-.192.373-.309.6-.397.473-.183.89-.514 1.212-.924a9.042 9.042 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75 2.25 2.25 0 012.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H14.23c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23h-.777zM2.331 10.977a11.969 11.969 0 00-.831 4.398 12 12 0 00.52 3.507c.26.85 1.084 1.368 1.973 1.368H4.9c.445 0 .72-.498.523-.898a8.963 8.963 0 01-.924-3.977c0-1.708.476-3.305 1.302-4.666.245-.403-.028-.959-.5-.959H4.25c-.832 0-1.612.453-1.918 1.227z"})])}},36:(e,t,n)=>{const{createElementVNode:r,openBlock:o,createElementBlock:i}=n(821);e.exports=function(e,t){return o(),i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"},[r("path",{"fill-rule":"evenodd",d:"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 01.67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 11-.671-1.34l.041-.022zM12 9a.75.75 0 100-1.5.75.75 0 000 1.5z","clip-rule":"evenodd"})])}},500:(e,t,n)=>{"use strict";var r=n(821),o=!1;function i(e,t,n){return Array.isArray(e)?(e.length=Math.max(e.length,t),e.splice(t,1,n),n):(e[t]=n,n)}function a(){return"undefined"!=typeof navigator&&"undefined"!=typeof window?window:void 0!==n.g?n.g:{}}const l="function"==typeof Proxy,s="devtools-plugin:setup";let c,u,f;function d(){return function(){var e;return void 0!==c||("undefined"!=typeof window&&window.performance?(c=!0,u=window.performance):void 0!==n.g&&(null===(e=n.g.perf_hooks)||void 0===e?void 0:e.performance)?(c=!0,u=n.g.perf_hooks.performance):c=!1),c}()?u.now():Date.now()}class p{constructor(e,t){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=e,this.hook=t;const n={};if(e.settings)for(const t in e.settings){const r=e.settings[t];n[t]=r.defaultValue}const r=`__vue-devtools-plugin-settings__${e.id}`;let o=Object.assign({},n);try{const e=localStorage.getItem(r),t=JSON.parse(e);Object.assign(o,t)}catch(e){}this.fallbacks={getSettings:()=>o,setSettings(e){try{localStorage.setItem(r,JSON.stringify(e))}catch(e){}o=e},now:()=>d()},t&&t.on("plugin:settings:set",((e,t)=>{e===this.plugin.id&&this.fallbacks.setSettings(t)})),this.proxiedOn=new Proxy({},{get:(e,t)=>this.target?this.target.on[t]:(...e)=>{this.onQueue.push({method:t,args:e})}}),this.proxiedTarget=new Proxy({},{get:(e,t)=>this.target?this.target[t]:"on"===t?this.proxiedOn:Object.keys(this.fallbacks).includes(t)?(...e)=>(this.targetQueue.push({method:t,args:e,resolve:()=>{}}),this.fallbacks[t](...e)):(...e)=>new Promise((n=>{this.targetQueue.push({method:t,args:e,resolve:n})}))})}async setRealTarget(e){this.target=e;for(const e of this.onQueue)this.target.on[e.method](...e.args);for(const e of this.targetQueue)e.resolve(await this.target[e.method](...e.args))}}function h(e,t){const n=e,r=a(),o=a().__VUE_DEVTOOLS_GLOBAL_HOOK__,i=l&&n.enableEarlyProxy;if(!o||!r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__&&i){const e=i?new p(n,o):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:e}),e&&t(e.proxiedTarget)}else o.emit(s,e,t)}const v=e=>f=e,m=Symbol();function g(e){return e&&"object"==typeof e&&"[object Object]"===Object.prototype.toString.call(e)&&"function"!=typeof e.toJSON}var y;!function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"}(y||(y={}));const b="undefined"!=typeof window,w=!1,C=(()=>"object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:"object"==typeof globalThis?globalThis:{HTMLElement:null})();function _(e,t,n){const r=new XMLHttpRequest;r.open("GET",e),r.responseType="blob",r.onload=function(){O(r.response,t,n)},r.onerror=function(){},r.send()}function E(e){const t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return t.status>=200&&t.status<=299}function x(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(t){const n=document.createEvent("MouseEvents");n.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(n)}}const k="object"==typeof navigator?navigator:{userAgent:""},S=(()=>/Macintosh/.test(k.userAgent)&&/AppleWebKit/.test(k.userAgent)&&!/Safari/.test(k.userAgent))(),O=b?"undefined"!=typeof HTMLAnchorElement&&"download"in HTMLAnchorElement.prototype&&!S?function(e,t="download",n){const r=document.createElement("a");r.download=t,r.rel="noopener","string"==typeof e?(r.href=e,r.origin!==location.origin?E(r.href)?_(e,t,n):(r.target="_blank",x(r)):x(r)):(r.href=URL.createObjectURL(e),setTimeout((function(){URL.revokeObjectURL(r.href)}),4e4),setTimeout((function(){x(r)}),0))}:"msSaveOrOpenBlob"in k?function(e,t="download",n){if("string"==typeof e)if(E(e))_(e,t,n);else{const t=document.createElement("a");t.href=e,t.target="_blank",setTimeout((function(){x(t)}))}else navigator.msSaveOrOpenBlob(function(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e}(e,n),t)}:function(e,t,n,r){(r=r||open("","_blank"))&&(r.document.title=r.document.body.innerText="downloading...");if("string"==typeof e)return _(e,t,n);const o="application/octet-stream"===e.type,i=/constructor/i.test(String(C.HTMLElement))||"safari"in C,a=/CriOS\/[\d]+/.test(navigator.userAgent);if((a||o&&i||S)&&"undefined"!=typeof FileReader){const t=new FileReader;t.onloadend=function(){let e=t.result;if("string"!=typeof e)throw r=null,new Error("Wrong reader.result type");e=a?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{const t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout((function(){URL.revokeObjectURL(t)}),4e4)}}:()=>{};function N(e,t){"function"==typeof __VUE_DEVTOOLS_TOAST__&&__VUE_DEVTOOLS_TOAST__("🍍 "+e,t)}function P(e){return"_a"in e&&"install"in e}function T(){if(!("clipboard"in navigator))return N("Your browser doesn't support the Clipboard API","error"),!0}function V(e){return!!(e instanceof Error&&e.message.toLowerCase().includes("document is not focused"))&&(N('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.',"warn"),!0)}let R;async function L(e){try{const t=await(R||(R=document.createElement("input"),R.type="file",R.accept=".json"),function(){return new Promise(((e,t)=>{R.onchange=async()=>{const t=R.files;if(!t)return e(null);const n=t.item(0);return e(n?{text:await n.text(),file:n}:null)},R.oncancel=()=>e(null),R.onerror=t,R.click()}))}),n=await t();if(!n)return;const{text:r,file:o}=n;e.state.value=JSON.parse(r),N(`Global state imported from "${o.name}".`)}catch(e){N("Failed to export the state as JSON. Check the console for more details.","error")}}function A(e){return{_custom:{display:e}}}const j="🍍 Pinia (root)",B="_root";function I(e){return P(e)?{id:B,label:j}:{id:e.$id,label:e.$id}}function M(e){return e?Array.isArray(e)?e.reduce(((e,t)=>(e.keys.push(t.key),e.operations.push(t.type),e.oldValue[t.key]=t.oldValue,e.newValue[t.key]=t.newValue,e)),{oldValue:{},keys:[],operations:[],newValue:{}}):{operation:A(e.type),key:A(e.key),oldValue:e.oldValue,newValue:e.newValue}:{}}function F(e){switch(e){case y.direct:return"mutation";case y.patchFunction:case y.patchObject:return"$patch";default:return"unknown"}}let D=!0;const U=[],$="pinia:mutations",H="pinia",{assign:z}=Object,q=e=>"🍍 "+e;function W(e,t){h({id:"dev.esm.pinia",label:"Pinia 🍍",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:U,app:e},(n=>{"function"!=typeof n.now&&N("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),n.addTimelineLayer({id:$,label:"Pinia 🍍",color:15064968}),n.addInspector({id:H,label:"Pinia 🍍",icon:"storage",treeFilterPlaceholder:"Search stores",actions:[{icon:"content_copy",action:()=>{!async function(e){if(!T())try{await navigator.clipboard.writeText(JSON.stringify(e.state.value)),N("Global state copied to clipboard.")}catch(e){if(V(e))return;N("Failed to serialize the state. Check the console for more details.","error")}}(t)},tooltip:"Serialize and copy the state"},{icon:"content_paste",action:async()=>{await async function(e){if(!T())try{e.state.value=JSON.parse(await navigator.clipboard.readText()),N("Global state pasted from clipboard.")}catch(e){if(V(e))return;N("Failed to deserialize the state from clipboard. Check the console for more details.","error")}}(t),n.sendInspectorTree(H),n.sendInspectorState(H)},tooltip:"Replace the state with the content of your clipboard"},{icon:"save",action:()=>{!async function(e){try{O(new Blob([JSON.stringify(e.state.value)],{type:"text/plain;charset=utf-8"}),"pinia-state.json")}catch(e){N("Failed to export the state as JSON. Check the console for more details.","error")}}(t)},tooltip:"Save the state as a JSON file"},{icon:"folder_open",action:async()=>{await L(t),n.sendInspectorTree(H),n.sendInspectorState(H)},tooltip:"Import the state from a JSON file"}],nodeActions:[{icon:"restore",tooltip:"Reset the state (option store only)",action:e=>{const n=t._s.get(e);n?n._isOptionsAPI?(n.$reset(),N(`Store "${e}" reset.`)):N(`Cannot reset "${e}" store because it's a setup store.`,"warn"):N(`Cannot reset "${e}" store because it wasn't found.`,"warn")}}]}),n.on.inspectComponent(((e,t)=>{const n=e.componentInstance&&e.componentInstance.proxy;if(n&&n._pStores){const t=e.componentInstance.proxy._pStores;Object.values(t).forEach((t=>{e.instanceData.state.push({type:q(t.$id),key:"state",editable:!0,value:t._isOptionsAPI?{_custom:{value:(0,r.toRaw)(t.$state),actions:[{icon:"restore",tooltip:"Reset the state of this store",action:()=>t.$reset()}]}}:Object.keys(t.$state).reduce(((e,n)=>(e[n]=t.$state[n],e)),{})}),t._getters&&t._getters.length&&e.instanceData.state.push({type:q(t.$id),key:"getters",editable:!1,value:t._getters.reduce(((e,n)=>{try{e[n]=t[n]}catch(t){e[n]=t}return e}),{})})}))}})),n.on.getInspectorTree((n=>{if(n.app===e&&n.inspectorId===H){let e=[t];e=e.concat(Array.from(t._s.values())),n.rootNodes=(n.filter?e.filter((e=>"$id"in e?e.$id.toLowerCase().includes(n.filter.toLowerCase()):j.toLowerCase().includes(n.filter.toLowerCase()))):e).map(I)}})),n.on.getInspectorState((n=>{if(n.app===e&&n.inspectorId===H){const e=n.nodeId===B?t:t._s.get(n.nodeId);if(!e)return;e&&(n.state=function(e){if(P(e)){const t=Array.from(e._s.keys()),n=e._s,r={state:t.map((t=>({editable:!0,key:t,value:e.state.value[t]}))),getters:t.filter((e=>n.get(e)._getters)).map((e=>{const t=n.get(e);return{editable:!1,key:e,value:t._getters.reduce(((e,n)=>(e[n]=t[n],e)),{})}}))};return r}const t={state:Object.keys(e.$state).map((t=>({editable:!0,key:t,value:e.$state[t]})))};return e._getters&&e._getters.length&&(t.getters=e._getters.map((t=>({editable:!1,key:t,value:e[t]})))),e._customProperties.size&&(t.customProperties=Array.from(e._customProperties).map((t=>({editable:!0,key:t,value:e[t]})))),t}(e))}})),n.on.editInspectorState(((n,r)=>{if(n.app===e&&n.inspectorId===H){const e=n.nodeId===B?t:t._s.get(n.nodeId);if(!e)return N(`store "${n.nodeId}" not found`,"error");const{path:r}=n;P(e)?r.unshift("state"):1===r.length&&e._customProperties.has(r[0])&&!(r[0]in e.$state)||r.unshift("$state"),D=!1,n.set(e,r,n.state.value),D=!0}})),n.on.editComponentState((e=>{if(e.type.startsWith("🍍")){const n=e.type.replace(/^🍍\s*/,""),r=t._s.get(n);if(!r)return N(`store "${n}" not found`,"error");const{path:o}=e;if("state"!==o[0])return N(`Invalid path for store "${n}":\n${o}\nOnly state can be modified.`);o[0]="$state",D=!1,e.set(r,o,e.state.value),D=!0}}))}))}let K,G=0;function Z(e,t){const n=t.reduce(((t,n)=>(t[n]=(0,r.toRaw)(e)[n],t)),{});for(const t in n)e[t]=function(){const r=G,o=new Proxy(e,{get:(...e)=>(K=r,Reflect.get(...e)),set:(...e)=>(K=r,Reflect.set(...e))});return n[t].apply(o,arguments)}}function Y({app:e,store:t,options:n}){if(!t.$id.startsWith("__hot:")){if(n.state&&(t._isOptionsAPI=!0),"function"==typeof n.state){Z(t,Object.keys(n.actions));const e=t._hotUpdate;(0,r.toRaw)(t)._hotUpdate=function(n){e.apply(this,arguments),Z(t,Object.keys(n._hmrPayload.actions))}}!function(e,t){U.includes(q(t.$id))||U.push(q(t.$id)),h({id:"dev.esm.pinia",label:"Pinia 🍍",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:U,app:e,settings:{logStoreChanges:{label:"Notify about new/deleted stores",type:"boolean",defaultValue:!0}}},(e=>{const n="function"==typeof e.now?e.now.bind(e):Date.now;t.$onAction((({after:r,onError:o,name:i,args:a})=>{const l=G++;e.addTimelineEvent({layerId:$,event:{time:n(),title:"🛫 "+i,subtitle:"start",data:{store:A(t.$id),action:A(i),args:a},groupId:l}}),r((r=>{K=void 0,e.addTimelineEvent({layerId:$,event:{time:n(),title:"🛬 "+i,subtitle:"end",data:{store:A(t.$id),action:A(i),args:a,result:r},groupId:l}})})),o((r=>{K=void 0,e.addTimelineEvent({layerId:$,event:{time:n(),logType:"error",title:"💥 "+i,subtitle:"end",data:{store:A(t.$id),action:A(i),args:a,error:r},groupId:l}})}))}),!0),t._customProperties.forEach((o=>{(0,r.watch)((()=>(0,r.unref)(t[o])),((t,r)=>{e.notifyComponentUpdate(),e.sendInspectorState(H),D&&e.addTimelineEvent({layerId:$,event:{time:n(),title:"Change",subtitle:o,data:{newValue:t,oldValue:r},groupId:K}})}),{deep:!0})})),t.$subscribe((({events:r,type:o},i)=>{if(e.notifyComponentUpdate(),e.sendInspectorState(H),!D)return;const a={time:n(),title:F(o),data:z({store:A(t.$id)},M(r)),groupId:K};K=void 0,o===y.patchFunction?a.subtitle="⤵️":o===y.patchObject?a.subtitle="🧩":r&&!Array.isArray(r)&&(a.subtitle=r.type),r&&(a.data["rawEvent(s)"]={_custom:{display:"DebuggerEvent",type:"object",tooltip:"raw DebuggerEvent[]",value:r}}),e.addTimelineEvent({layerId:$,event:a})}),{detached:!0,flush:"sync"});const o=t._hotUpdate;t._hotUpdate=(0,r.markRaw)((r=>{o(r),e.addTimelineEvent({layerId:$,event:{time:n(),title:"🔥 "+t.$id,subtitle:"HMR update",data:{store:A(t.$id),info:A("HMR update")}}}),e.notifyComponentUpdate(),e.sendInspectorTree(H),e.sendInspectorState(H)}));const{$dispose:i}=t;t.$dispose=()=>{i(),e.notifyComponentUpdate(),e.sendInspectorTree(H),e.sendInspectorState(H),e.getSettings().logStoreChanges&&N(`Disposed "${t.$id}" store 🗑`)},e.notifyComponentUpdate(),e.sendInspectorTree(H),e.sendInspectorState(H),e.getSettings().logStoreChanges&&N(`"${t.$id}" store installed 🆕`)}))}(e,t)}}const J=()=>{};function Q(e,t,n,o=J){e.push(t);const i=()=>{const n=e.indexOf(t);n>-1&&(e.splice(n,1),o())};return!n&&(0,r.getCurrentScope)()&&(0,r.onScopeDispose)(i),i}function X(e,...t){e.slice().forEach((e=>{e(...t)}))}function ee(e,t){e instanceof Map&&t instanceof Map&&t.forEach(((t,n)=>e.set(n,t))),e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],i=e[n];g(i)&&g(o)&&e.hasOwnProperty(n)&&!(0,r.isRef)(o)&&!(0,r.isReactive)(o)?e[n]=ee(i,o):e[n]=o}return e}const te=Symbol(),ne=new WeakMap;const{assign:re}=Object;function oe(e,t,n={},a,l,s){let c;const u=re({actions:{}},n);const f={deep:!0};let d,p;let h,m=(0,r.markRaw)([]),b=(0,r.markRaw)([]);const C=a.state.value[e];s||C||(o?i(a.state.value,e,{}):a.state.value[e]={});const _=(0,r.ref)({});let E;function x(t){let n;d=p=!1,"function"==typeof t?(t(a.state.value[e]),n={type:y.patchFunction,storeId:e,events:h}):(ee(a.state.value[e],t),n={type:y.patchObject,payload:t,storeId:e,events:h});const o=E=Symbol();(0,r.nextTick)().then((()=>{E===o&&(d=!0)})),p=!0,X(m,n,a.state.value[e])}const k=J;function S(t,n){return function(){v(a);const r=Array.from(arguments),o=[],i=[];let l;X(b,{args:r,name:t,store:P,after:function(e){o.push(e)},onError:function(e){i.push(e)}});try{l=n.apply(this&&this.$id===e?this:P,r)}catch(e){throw X(i,e),e}return l instanceof Promise?l.then((e=>(X(o,e),e))).catch((e=>(X(i,e),Promise.reject(e)))):(X(o,l),l)}}const O=(0,r.markRaw)({actions:{},getters:{},state:[],hotState:_}),N={_p:a,$id:e,$onAction:Q.bind(null,b),$patch:x,$reset:k,$subscribe(t,n={}){const o=Q(m,t,n.detached,(()=>i())),i=c.run((()=>(0,r.watch)((()=>a.state.value[e]),(r=>{("sync"===n.flush?p:d)&&t({storeId:e,type:y.direct,events:h},r)}),re({},f,n))));return o},$dispose:function(){c.stop(),m=[],b=[],a._s.delete(e)}};o&&(N._r=!1);const P=(0,r.reactive)(w?re({_hmrPayload:O,_customProperties:(0,r.markRaw)(new Set)},N):N);a._s.set(e,P);const T=a._e.run((()=>(c=(0,r.effectScope)(),c.run((()=>t())))));for(const t in T){const n=T[t];if((0,r.isRef)(n)&&(R=n,!(0,r.isRef)(R)||!R.effect)||(0,r.isReactive)(n))s||(!C||(V=n,o?ne.has(V):g(V)&&V.hasOwnProperty(te))||((0,r.isRef)(n)?n.value=C[t]:ee(n,C[t])),o?i(a.state.value[e],t,n):a.state.value[e][t]=n);else if("function"==typeof n){const e=S(t,n);o?i(T,t,e):T[t]=e,u.actions[t]=n}else 0}var V,R;if(o?Object.keys(T).forEach((e=>{i(P,e,T[e])})):(re(P,T),re((0,r.toRaw)(P),T)),Object.defineProperty(P,"$state",{get:()=>a.state.value[e],set:e=>{x((t=>{re(t,e)}))}}),w){const e={writable:!0,configurable:!0,enumerable:!1};["_p","_hmrPayload","_getters","_customProperties"].forEach((t=>{Object.defineProperty(P,t,re({value:P[t]},e))}))}return o&&(P._r=!0),a._p.forEach((e=>{if(w){const t=c.run((()=>e({store:P,app:a._a,pinia:a,options:u})));Object.keys(t||{}).forEach((e=>P._customProperties.add(e))),re(P,t)}else re(P,c.run((()=>e({store:P,app:a._a,pinia:a,options:u}))))})),C&&s&&n.hydrate&&n.hydrate(P.$state,C),d=!0,p=!0,P}function ie(e,t,n){let a,l;const s="function"==typeof t;function c(e,n){const c=(0,r.getCurrentInstance)();(e=e||c&&(0,r.inject)(m,null))&&v(e),(e=f)._s.has(a)||(s?oe(a,t,l,e):function(e,t,n,a){const{state:l,actions:s,getters:c}=t,u=n.state.value[e];let f;f=oe(e,(function(){u||(o?i(n.state.value,e,l?l():{}):n.state.value[e]=l?l():{});const t=(0,r.toRefs)(n.state.value[e]);return re(t,s,Object.keys(c||{}).reduce(((t,i)=>(t[i]=(0,r.markRaw)((0,r.computed)((()=>{v(n);const t=n._s.get(e);if(!o||t._r)return c[i].call(t,t)}))),t)),{}))}),t,n,0,!0),f.$reset=function(){const e=l?l():{};this.$patch((t=>{re(t,e)}))}}(a,l,e));return e._s.get(a)}return"string"==typeof e?(a=e,l=s?n:t):(l=e,a=e.id),c.$id=a,c}function ae(e,t){return function(){return e.apply(t,arguments)}}const{toString:le}=Object.prototype,{getPrototypeOf:se}=Object,ce=(ue=Object.create(null),e=>{const t=le.call(e);return ue[t]||(ue[t]=t.slice(8,-1).toLowerCase())});var ue;const fe=e=>(e=e.toLowerCase(),t=>ce(t)===e),de=e=>t=>typeof t===e,{isArray:pe}=Array,he=de("undefined");const ve=fe("ArrayBuffer");const me=de("string"),ge=de("function"),ye=de("number"),be=e=>null!==e&&"object"==typeof e,we=e=>{if("object"!==ce(e))return!1;const t=se(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},Ce=fe("Date"),_e=fe("File"),Ee=fe("Blob"),xe=fe("FileList"),ke=fe("URLSearchParams");function Se(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),pe(e))for(r=0,o=e.length;r0;)if(r=n[o],t===r.toLowerCase())return r;return null}const Ne="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Pe=e=>!he(e)&&e!==Ne;const Te=(Ve="undefined"!=typeof Uint8Array&&se(Uint8Array),e=>Ve&&e instanceof Ve);var Ve;const Re=fe("HTMLFormElement"),Le=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Ae=fe("RegExp"),je=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};Se(n,((n,o)=>{!1!==t(n,o,e)&&(r[o]=n)})),Object.defineProperties(e,r)},Be="abcdefghijklmnopqrstuvwxyz",Ie="0123456789",Me={DIGIT:Ie,ALPHA:Be,ALPHA_DIGIT:Be+Be.toUpperCase()+Ie};const Fe={isArray:pe,isArrayBuffer:ve,isBuffer:function(e){return null!==e&&!he(e)&&null!==e.constructor&&!he(e.constructor)&&ge(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{const t="[object FormData]";return e&&("function"==typeof FormData&&e instanceof FormData||le.call(e)===t||ge(e.toString)&&e.toString()===t)},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&ve(e.buffer),t},isString:me,isNumber:ye,isBoolean:e=>!0===e||!1===e,isObject:be,isPlainObject:we,isUndefined:he,isDate:Ce,isFile:_e,isBlob:Ee,isRegExp:Ae,isFunction:ge,isStream:e=>be(e)&&ge(e.pipe),isURLSearchParams:ke,isTypedArray:Te,isFileList:xe,forEach:Se,merge:function e(){const{caseless:t}=Pe(this)&&this||{},n={},r=(r,o)=>{const i=t&&Oe(n,o)||o;we(n[i])&&we(r)?n[i]=e(n[i],r):we(r)?n[i]=e({},r):pe(r)?n[i]=r.slice():n[i]=r};for(let e=0,t=arguments.length;e(Se(t,((t,r)=>{n&&ge(t)?e[r]=ae(t,n):e[r]=t}),{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,i,a;const l={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)a=o[i],r&&!r(a,e,t)||l[a]||(t[a]=e[a],l[a]=!0);e=!1!==n&&se(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:ce,kindOfTest:fe,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(pe(e))return e;let t=e.length;if(!ye(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:Re,hasOwnProperty:Le,hasOwnProp:Le,reduceDescriptors:je,freezeMethods:e=>{je(e,((t,n)=>{if(ge(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];ge(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return pe(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:Oe,global:Ne,isContextDefined:Pe,ALPHABET:Me,generateString:(e=16,t=Me.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&ge(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(be(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=pe(e)?[]:{};return Se(e,((e,t)=>{const i=n(e,r+1);!he(i)&&(o[t]=i)})),t[r]=void 0,o}}return e};return n(e,0)}};function De(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}Fe.inherits(De,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Fe.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const Ue=De.prototype,$e={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{$e[e]={value:e}})),Object.defineProperties(De,$e),Object.defineProperty(Ue,"isAxiosError",{value:!0}),De.from=(e,t,n,r,o,i)=>{const a=Object.create(Ue);return Fe.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),De.call(a,e.message,t,n,r,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};const He=De,ze=null;var qe=n(764).lW;function We(e){return Fe.isPlainObject(e)||Fe.isArray(e)}function Ke(e){return Fe.endsWith(e,"[]")?e.slice(0,-2):e}function Ge(e,t,n){return e?e.concat(t).map((function(e,t){return e=Ke(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const Ze=Fe.toFlatObject(Fe,{},null,(function(e){return/^is[A-Z]/.test(e)}));const Ye=function(e,t,n){if(!Fe.isObject(e))throw new TypeError("target must be an object");t=t||new(ze||FormData);const r=(n=Fe.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!Fe.isUndefined(t[e])}))).metaTokens,o=n.visitor||c,i=n.dots,a=n.indexes,l=(n.Blob||"undefined"!=typeof Blob&&Blob)&&Fe.isSpecCompliantForm(t);if(!Fe.isFunction(o))throw new TypeError("visitor must be a function");function s(e){if(null===e)return"";if(Fe.isDate(e))return e.toISOString();if(!l&&Fe.isBlob(e))throw new He("Blob is not supported. Use a Buffer instead.");return Fe.isArrayBuffer(e)||Fe.isTypedArray(e)?l&&"function"==typeof Blob?new Blob([e]):qe.from(e):e}function c(e,n,o){let l=e;if(e&&!o&&"object"==typeof e)if(Fe.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(Fe.isArray(e)&&function(e){return Fe.isArray(e)&&!e.some(We)}(e)||(Fe.isFileList(e)||Fe.endsWith(n,"[]"))&&(l=Fe.toArray(e)))return n=Ke(n),l.forEach((function(e,r){!Fe.isUndefined(e)&&null!==e&&t.append(!0===a?Ge([n],r,i):null===a?n:n+"[]",s(e))})),!1;return!!We(e)||(t.append(Ge(o,n,i),s(e)),!1)}const u=[],f=Object.assign(Ze,{defaultVisitor:c,convertValue:s,isVisitable:We});if(!Fe.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!Fe.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+r.join("."));u.push(n),Fe.forEach(n,(function(n,i){!0===(!(Fe.isUndefined(n)||null===n)&&o.call(t,n,Fe.isString(i)?i.trim():i,r,f))&&e(n,r?r.concat(i):[i])})),u.pop()}}(e),t};function Je(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Qe(e,t){this._pairs=[],e&&Ye(e,this,t)}const Xe=Qe.prototype;Xe.append=function(e,t){this._pairs.push([e,t])},Xe.toString=function(e){const t=e?function(t){return e.call(this,t,Je)}:Je;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const et=Qe;function tt(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function nt(e,t,n){if(!t)return e;const r=n&&n.encode||tt,o=n&&n.serialize;let i;if(i=o?o(t,n):Fe.isURLSearchParams(t)?t.toString():new et(t,n).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}const rt=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Fe.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},ot={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},it="undefined"!=typeof URLSearchParams?URLSearchParams:et,at=FormData,lt=(()=>{let e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&("undefined"!=typeof window&&"undefined"!=typeof document)})(),st="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,ct={isBrowser:!0,classes:{URLSearchParams:it,FormData:at,Blob},isStandardBrowserEnv:lt,isStandardBrowserWebWorkerEnv:st,protocols:["http","https","file","blob","url","data"]};const ut=function(e){function t(e,n,r,o){let i=e[o++];const a=Number.isFinite(+i),l=o>=e.length;if(i=!i&&Fe.isArray(r)?r.length:i,l)return Fe.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!a;r[i]&&Fe.isObject(r[i])||(r[i]=[]);return t(e,n,r[i],o)&&Fe.isArray(r[i])&&(r[i]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r{t(function(e){return Fe.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null},ft={"Content-Type":void 0};const dt={transitional:ot,adapter:["xhr","http"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=Fe.isObject(e);o&&Fe.isHTMLForm(e)&&(e=new FormData(e));if(Fe.isFormData(e))return r&&r?JSON.stringify(ut(e)):e;if(Fe.isArrayBuffer(e)||Fe.isBuffer(e)||Fe.isStream(e)||Fe.isFile(e)||Fe.isBlob(e))return e;if(Fe.isArrayBufferView(e))return e.buffer;if(Fe.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Ye(e,new ct.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return ct.isNode&&Fe.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((i=Fe.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Ye(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(Fe.isString(e))try{return(t||JSON.parse)(e),Fe.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||dt.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(e&&Fe.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw He.from(e,He.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ct.classes.FormData,Blob:ct.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Fe.forEach(["delete","get","head"],(function(e){dt.headers[e]={}})),Fe.forEach(["post","put","patch"],(function(e){dt.headers[e]=Fe.merge(ft)}));const pt=dt,ht=Fe.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),vt=Symbol("internals");function mt(e){return e&&String(e).trim().toLowerCase()}function gt(e){return!1===e||null==e?e:Fe.isArray(e)?e.map(gt):String(e)}function yt(e,t,n,r){return Fe.isFunction(r)?r.call(this,t,n):Fe.isString(t)?Fe.isString(r)?-1!==t.indexOf(r):Fe.isRegExp(r)?r.test(t):void 0:void 0}class bt{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=mt(t);if(!o)throw new Error("header name must be a non-empty string");const i=Fe.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=gt(e))}const i=(e,t)=>Fe.forEach(e,((e,n)=>o(e,n,t)));return Fe.isPlainObject(e)||e instanceof this.constructor?i(e,t):Fe.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z]+$/.test(e.trim())?i((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&ht[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t):null!=e&&o(t,e,n),this}get(e,t){if(e=mt(e)){const n=Fe.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(Fe.isFunction(t))return t.call(this,e,n);if(Fe.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=mt(e)){const n=Fe.findKey(this,e);return!(!n||void 0===this[n]||t&&!yt(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=mt(e)){const o=Fe.findKey(n,e);!o||t&&!yt(0,n[o],o,t)||(delete n[o],r=!0)}}return Fe.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!yt(0,this[o],o,e)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return Fe.forEach(this,((r,o)=>{const i=Fe.findKey(n,o);if(i)return t[i]=gt(r),void delete t[o];const a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();a!==o&&delete t[o],t[a]=gt(r),n[a]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Fe.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&Fe.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[vt]=this[vt]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=mt(e);t[r]||(!function(e,t){const n=Fe.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return Fe.isArray(e)?e.forEach(r):r(e),this}}bt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Fe.freezeMethods(bt.prototype),Fe.freezeMethods(bt);const wt=bt;function Ct(e,t){const n=this||pt,r=t||n,o=wt.from(r.headers);let i=r.data;return Fe.forEach(e,(function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function _t(e){return!(!e||!e.__CANCEL__)}function Et(e,t,n){He.call(this,null==e?"canceled":e,He.ERR_CANCELED,t,n),this.name="CanceledError"}Fe.inherits(Et,He,{__CANCEL__:!0});const xt=Et;const kt=ct.isStandardBrowserEnv?{write:function(e,t,n,r,o,i){const a=[];a.push(e+"="+encodeURIComponent(t)),Fe.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),Fe.isString(r)&&a.push("path="+r),Fe.isString(o)&&a.push("domain="+o),!0===i&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function St(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Ot=ct.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function r(n){let r=n;return e&&(t.setAttribute("href",r),r=t.href),t.setAttribute("href",r),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=r(window.location.href),function(e){const t=Fe.isString(e)?r(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0};const Nt=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,i=0,a=0;return t=void 0!==t?t:1e3,function(l){const s=Date.now(),c=r[a];o||(o=s),n[i]=l,r[i]=s;let u=a,f=0;for(;u!==i;)f+=n[u++],u%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),s-o{const i=o.loaded,a=o.lengthComputable?o.total:void 0,l=i-n,s=r(l);n=i;const c={loaded:i,total:a,progress:a?i/a:void 0,bytes:l,rate:s||void 0,estimated:s&&a&&i<=a?(a-i)/s:void 0,event:o};c[t?"download":"upload"]=!0,e(c)}}const Tt="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){let r=e.data;const o=wt.from(e.headers).normalize(),i=e.responseType;let a;function l(){e.cancelToken&&e.cancelToken.unsubscribe(a),e.signal&&e.signal.removeEventListener("abort",a)}Fe.isFormData(r)&&(ct.isStandardBrowserEnv||ct.isStandardBrowserWebWorkerEnv)&&o.setContentType(!1);let s=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.set("Authorization","Basic "+btoa(t+":"+n))}const c=St(e.baseURL,e.url);function u(){if(!s)return;const r=wt.from("getAllResponseHeaders"in s&&s.getAllResponseHeaders());!function(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new He("Request failed with status code "+n.status,[He.ERR_BAD_REQUEST,He.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),l()}),(function(e){n(e),l()}),{data:i&&"text"!==i&&"json"!==i?s.response:s.responseText,status:s.status,statusText:s.statusText,headers:r,config:e,request:s}),s=null}if(s.open(e.method.toUpperCase(),nt(c,e.params,e.paramsSerializer),!0),s.timeout=e.timeout,"onloadend"in s?s.onloadend=u:s.onreadystatechange=function(){s&&4===s.readyState&&(0!==s.status||s.responseURL&&0===s.responseURL.indexOf("file:"))&&setTimeout(u)},s.onabort=function(){s&&(n(new He("Request aborted",He.ECONNABORTED,e,s)),s=null)},s.onerror=function(){n(new He("Network Error",He.ERR_NETWORK,e,s)),s=null},s.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const r=e.transitional||ot;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new He(t,r.clarifyTimeoutError?He.ETIMEDOUT:He.ECONNABORTED,e,s)),s=null},ct.isStandardBrowserEnv){const t=(e.withCredentials||Ot(c))&&e.xsrfCookieName&&kt.read(e.xsrfCookieName);t&&o.set(e.xsrfHeaderName,t)}void 0===r&&o.setContentType(null),"setRequestHeader"in s&&Fe.forEach(o.toJSON(),(function(e,t){s.setRequestHeader(t,e)})),Fe.isUndefined(e.withCredentials)||(s.withCredentials=!!e.withCredentials),i&&"json"!==i&&(s.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&s.addEventListener("progress",Pt(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&s.upload&&s.upload.addEventListener("progress",Pt(e.onUploadProgress)),(e.cancelToken||e.signal)&&(a=t=>{s&&(n(!t||t.type?new xt(null,e,s):t),s.abort(),s=null)},e.cancelToken&&e.cancelToken.subscribe(a),e.signal&&(e.signal.aborted?a():e.signal.addEventListener("abort",a)));const f=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(c);f&&-1===ct.protocols.indexOf(f)?n(new He("Unsupported protocol "+f+":",He.ERR_BAD_REQUEST,e)):s.send(r||null)}))},Vt={http:ze,xhr:Tt};Fe.forEach(Vt,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Rt={getAdapter:e=>{e=Fe.isArray(e)?e:[e];const{length:t}=e;let n,r;for(let o=0;oe instanceof wt?e.toJSON():e;function Bt(e,t){t=t||{};const n={};function r(e,t,n){return Fe.isPlainObject(e)&&Fe.isPlainObject(t)?Fe.merge.call({caseless:n},e,t):Fe.isPlainObject(t)?Fe.merge({},t):Fe.isArray(t)?t.slice():t}function o(e,t,n){return Fe.isUndefined(t)?Fe.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!Fe.isUndefined(t))return r(void 0,t)}function a(e,t){return Fe.isUndefined(t)?Fe.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function l(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}const s={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:l,headers:(e,t)=>o(jt(e),jt(t),!0)};return Fe.forEach(Object.keys(e).concat(Object.keys(t)),(function(r){const i=s[r]||o,a=i(e[r],t[r],r);Fe.isUndefined(a)&&i!==l||(n[r]=a)})),n}const It="1.3.2",Mt={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Mt[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Ft={};Mt.transitional=function(e,t,n){return(r,o,i)=>{if(!1===e)throw new He(function(e,t){return"[Axios v"+It+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}(o," has been removed"+(t?" in "+t:"")),He.ERR_DEPRECATED);return t&&!Ft[o]&&(Ft[o]=!0),!e||e(r,o,i)}};const Dt={assertOptions:function(e,t,n){if("object"!=typeof e)throw new He("options must be an object",He.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],a=t[i];if(a){const t=e[i],n=void 0===t||a(t,i,e);if(!0!==n)throw new He("option "+i+" must be "+n,He.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new He("Unknown option "+i,He.ERR_BAD_OPTION)}},validators:Mt},Ut=Dt.validators;class $t{constructor(e){this.defaults=e,this.interceptors={request:new rt,response:new rt}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Bt(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;let i;void 0!==n&&Dt.assertOptions(n,{silentJSONParsing:Ut.transitional(Ut.boolean),forcedJSONParsing:Ut.transitional(Ut.boolean),clarifyTimeoutError:Ut.transitional(Ut.boolean)},!1),void 0!==r&&Dt.assertOptions(r,{encode:Ut.function,serialize:Ut.function},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase(),i=o&&Fe.merge(o.common,o[t.method]),i&&Fe.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=wt.concat(i,o);const a=[];let l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,a.unshift(e.fulfilled,e.rejected))}));const s=[];let c;this.interceptors.response.forEach((function(e){s.push(e.fulfilled,e.rejected)}));let u,f=0;if(!l){const e=[At.bind(this),void 0];for(e.unshift.apply(e,a),e.push.apply(e,s),u=e.length,c=Promise.resolve(t);f{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new xt(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;const t=new zt((function(t){e=t}));return{token:t,cancel:e}}}const qt=zt;const Wt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Wt).forEach((([e,t])=>{Wt[t]=e}));const Kt=Wt;const Gt=function e(t){const n=new Ht(t),r=ae(Ht.prototype.request,n);return Fe.extend(r,Ht.prototype,n,{allOwnKeys:!0}),Fe.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(Bt(t,n))},r}(pt);Gt.Axios=Ht,Gt.CanceledError=xt,Gt.CancelToken=qt,Gt.isCancel=_t,Gt.VERSION=It,Gt.toFormData=Ye,Gt.AxiosError=He,Gt.Cancel=Gt.CanceledError,Gt.all=function(e){return Promise.all(e)},Gt.spread=function(e){return function(t){return e.apply(null,t)}},Gt.isAxiosError=function(e){return Fe.isObject(e)&&!0===e.isAxiosError},Gt.mergeConfig=Bt,Gt.AxiosHeaders=wt,Gt.formToJSON=e=>ut(Fe.isHTMLForm(e)?new FormData(e):e),Gt.HttpStatusCode=Kt,Gt.default=Gt;const Zt=Gt,Yt="undefined"!=typeof window;function Jt(e){return e.__esModule||"Module"===e[Symbol.toStringTag]}const Qt=Object.assign;function Xt(e,t){const n={};for(const r in t){const o=t[r];n[r]=tn(o)?o.map(e):e(o)}return n}const en=()=>{},tn=Array.isArray;const nn=/\/$/,rn=e=>e.replace(nn,"");function on(e,t,n="/"){let r,o={},i="",a="";const l=t.indexOf("#");let s=t.indexOf("?");return l=0&&(s=-1),s>-1&&(r=t.slice(0,s),i=t.slice(s+1,l>-1?l:t.length),o=e(i)),l>-1&&(r=r||t.slice(0,l),a=t.slice(l,t.length)),r=function(e,t){if(e.startsWith("/"))return e;0;if(!e)return t;const n=t.split("/"),r=e.split("/");let o,i,a=n.length-1;for(o=0;o1&&a--}return n.slice(0,a).join("/")+"/"+r.slice(o-(o===r.length?1:0)).join("/")}(null!=r?r:t,n),{fullPath:r+(i&&"?")+i+a,path:r,query:o,hash:a}}function an(e,t){return t&&e.toLowerCase().startsWith(t.toLowerCase())?e.slice(t.length)||"/":e}function ln(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function sn(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!cn(e[n],t[n]))return!1;return!0}function cn(e,t){return tn(e)?un(e,t):tn(t)?un(t,e):e===t}function un(e,t){return tn(t)?e.length===t.length&&e.every(((e,n)=>e===t[n])):1===e.length&&e[0]===t}var fn,dn;!function(e){e.pop="pop",e.push="push"}(fn||(fn={})),function(e){e.back="back",e.forward="forward",e.unknown=""}(dn||(dn={}));function pn(e){if(!e)if(Yt){const t=document.querySelector("base");e=(e=t&&t.getAttribute("href")||"/").replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return"/"!==e[0]&&"#"!==e[0]&&(e="/"+e),rn(e)}const hn=/^[^#]+#/;function vn(e,t){return e.replace(hn,"#")+t}const mn=()=>({left:window.pageXOffset,top:window.pageYOffset});function gn(e){let t;if("el"in e){const n=e.el,r="string"==typeof n&&n.startsWith("#");0;const o="string"==typeof n?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=function(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(null!=t.left?t.left:window.pageXOffset,null!=t.top?t.top:window.pageYOffset)}function yn(e,t){return(history.state?history.state.position-t:-1)+e}const bn=new Map;let wn=()=>location.protocol+"//"+location.host;function Cn(e,t){const{pathname:n,search:r,hash:o}=t,i=e.indexOf("#");if(i>-1){let t=o.includes(e.slice(i))?e.slice(i).length:1,n=o.slice(t);return"/"!==n[0]&&(n="/"+n),an(n,"")}return an(n,e)+r+o}function _n(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?mn():null}}function En(e){const t=function(e){const{history:t,location:n}=window,r={value:Cn(e,n)},o={value:t.state};function i(r,i,a){const l=e.indexOf("#"),s=l>-1?(n.host&&document.querySelector("base")?e:e.slice(l))+r:wn()+e+r;try{t[a?"replaceState":"pushState"](i,"",s),o.value=i}catch(e){n[a?"replace":"assign"](s)}}return o.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0),{location:r,state:o,push:function(e,n){const a=Qt({},o.value,t.state,{forward:e,scroll:mn()});i(a.current,a,!0),i(e,Qt({},_n(r.value,e,null),{position:a.position+1},n),!1),r.value=e},replace:function(e,n){i(e,Qt({},t.state,_n(o.value.back,e,o.value.forward,!0),n,{position:o.value.position}),!0),r.value=e}}}(e=pn(e)),n=function(e,t,n,r){let o=[],i=[],a=null;const l=({state:i})=>{const l=Cn(e,location),s=n.value,c=t.value;let u=0;if(i){if(n.value=l,t.value=i,a&&a===s)return void(a=null);u=c?i.position-c.position:0}else r(l);o.forEach((e=>{e(n.value,s,{delta:u,type:fn.pop,direction:u?u>0?dn.forward:dn.back:dn.unknown})}))};function s(){const{history:e}=window;e.state&&e.replaceState(Qt({},e.state,{scroll:mn()}),"")}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",s),{pauseListeners:function(){a=n.value},listen:function(e){o.push(e);const t=()=>{const t=o.indexOf(e);t>-1&&o.splice(t,1)};return i.push(t),t},destroy:function(){for(const e of i)e();i=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",s)}}}(e,t.state,t.location,t.replace);const r=Qt({location:"",base:e,go:function(e,t=!0){t||n.pauseListeners(),history.go(e)},createHref:vn.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function xn(e){return"string"==typeof e||"symbol"==typeof e}const kn={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Sn=Symbol("");var On;!function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"}(On||(On={}));function Nn(e,t){return Qt(new Error,{type:e,[Sn]:!0},t)}function Pn(e,t){return e instanceof Error&&Sn in e&&(null==t||!!(e.type&t))}const Tn="[^/]+?",Vn={sensitive:!1,strict:!1,start:!0,end:!0},Rn=/[.+*?^${}()[\]/\\]/g;function Ln(e,t){let n=0;for(;nt.length?1===t.length&&80===t[0]?1:-1:0}function An(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const Bn={type:0,value:""},In=/[a-zA-Z0-9_]/;function Mn(e,t,n){const r=function(e,t){const n=Qt({},Vn,t),r=[];let o=n.start?"^":"";const i=[];for(const t of e){const e=t.length?[]:[90];n.strict&&!t.length&&(o+="/");for(let r=0;r1&&("*"===l||"+"===l)&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:c,regexp:u,repeatable:"*"===l||"+"===l,optional:"*"===l||"?"===l})):t("Invalid state to consume buffer"),c="")}function d(){c+=l}for(;s{i(d)}:en}function i(e){if(xn(e)){const t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(i),t.alias.forEach(i))}else{const t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(i),e.alias.forEach(i))}}function a(e){let t=0;for(;t=0&&(e.record.path!==n[t].record.path||!qn(e,n[t]));)t++;n.splice(t,0,e),e.record.name&&!$n(e)&&r.set(e.record.name,e)}return t=zn({strict:!1,end:!0,sensitive:!1},t),e.forEach((e=>o(e))),{addRoute:o,resolve:function(e,t){let o,i,a,l={};if("name"in e&&e.name){if(o=r.get(e.name),!o)throw Nn(1,{location:e});0,a=o.record.name,l=Qt(Dn(t.params,o.keys.filter((e=>!e.optional)).map((e=>e.name))),e.params&&Dn(e.params,o.keys.map((e=>e.name)))),i=o.stringify(l)}else if("path"in e)i=e.path,o=n.find((e=>e.re.test(i))),o&&(l=o.parse(i),a=o.record.name);else{if(o=t.name?r.get(t.name):n.find((e=>e.re.test(t.path))),!o)throw Nn(1,{location:e,currentLocation:t});a=o.record.name,l=Qt({},t.params,e.params),i=o.stringify(l)}const s=[];let c=o;for(;c;)s.unshift(c.record),c=c.parent;return{name:a,path:i,params:l,matched:s,meta:Hn(s)}},removeRoute:i,getRoutes:function(){return n},getRecordMatcher:function(e){return r.get(e)}}}function Dn(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Un(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]="boolean"==typeof n?n:n[r];return t}function $n(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Hn(e){return e.reduce(((e,t)=>Qt(e,t.meta)),{})}function zn(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function qn(e,t){return t.children.some((t=>t===e||qn(e,t)))}const Wn=/#/g,Kn=/&/g,Gn=/\//g,Zn=/=/g,Yn=/\?/g,Jn=/\+/g,Qn=/%5B/g,Xn=/%5D/g,er=/%5E/g,tr=/%60/g,nr=/%7B/g,rr=/%7C/g,or=/%7D/g,ir=/%20/g;function ar(e){return encodeURI(""+e).replace(rr,"|").replace(Qn,"[").replace(Xn,"]")}function lr(e){return ar(e).replace(Jn,"%2B").replace(ir,"+").replace(Wn,"%23").replace(Kn,"%26").replace(tr,"`").replace(nr,"{").replace(or,"}").replace(er,"^")}function sr(e){return null==e?"":function(e){return ar(e).replace(Wn,"%23").replace(Yn,"%3F")}(e).replace(Gn,"%2F")}function cr(e){try{return decodeURIComponent(""+e)}catch(e){}return""+e}function ur(e){const t={};if(""===e||"?"===e)return t;const n=("?"===e[0]?e.slice(1):e).split("&");for(let e=0;ee&&lr(e))):[r&&lr(r)];o.forEach((e=>{void 0!==e&&(t+=(t.length?"&":"")+n,null!=e&&(t+="="+e))}))}return t}function dr(e){const t={};for(const n in e){const r=e[n];void 0!==r&&(t[n]=tn(r)?r.map((e=>null==e?null:""+e)):null==r?r:""+r)}return t}const pr=Symbol(""),hr=Symbol(""),vr=Symbol(""),mr=Symbol(""),gr=Symbol("");function yr(){let e=[];return{add:function(t){return e.push(t),()=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)}},list:()=>e,reset:function(){e=[]}}}function br(e,t,n,r,o){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise(((a,l)=>{const s=e=>{var s;!1===e?l(Nn(4,{from:n,to:t})):e instanceof Error?l(e):"string"==typeof(s=e)||s&&"object"==typeof s?l(Nn(2,{from:t,to:e})):(i&&r.enterCallbacks[o]===i&&"function"==typeof e&&i.push(e),a())},c=e.call(r&&r.instances[o],t,n,s);let u=Promise.resolve(c);e.length<3&&(u=u.then(s)),u.catch((e=>l(e)))}))}function wr(e,t,n,r){const o=[];for(const a of e){0;for(const e in a.components){let l=a.components[e];if("beforeRouteEnter"===t||a.instances[e])if("object"==typeof(i=l)||"displayName"in i||"props"in i||"__vccOpts"in i){const i=(l.__vccOpts||l)[t];i&&o.push(br(i,n,r,a,e))}else{let i=l();0,o.push((()=>i.then((o=>{if(!o)return Promise.reject(new Error(`Couldn't resolve component "${e}" at "${a.path}"`));const i=Jt(o)?o.default:o;a.components[e]=i;const l=(i.__vccOpts||i)[t];return l&&br(l,n,r,a,e)()}))))}}}var i;return o}function Cr(e){const t=(0,r.inject)(vr),n=(0,r.inject)(mr),o=(0,r.computed)((()=>t.resolve((0,r.unref)(e.to)))),i=(0,r.computed)((()=>{const{matched:e}=o.value,{length:t}=e,r=e[t-1],i=n.matched;if(!r||!i.length)return-1;const a=i.findIndex(ln.bind(null,r));if(a>-1)return a;const l=Er(e[t-2]);return t>1&&Er(r)===l&&i[i.length-1].path!==l?i.findIndex(ln.bind(null,e[t-2])):a})),a=(0,r.computed)((()=>i.value>-1&&function(e,t){for(const n in t){const r=t[n],o=e[n];if("string"==typeof r){if(r!==o)return!1}else if(!tn(o)||o.length!==r.length||r.some(((e,t)=>e!==o[t])))return!1}return!0}(n.params,o.value.params))),l=(0,r.computed)((()=>i.value>-1&&i.value===n.matched.length-1&&sn(n.params,o.value.params)));return{route:o,href:(0,r.computed)((()=>o.value.href)),isActive:a,isExactActive:l,navigate:function(n={}){return function(e){if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)return;if(e.defaultPrevented)return;if(void 0!==e.button&&0!==e.button)return;if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}e.preventDefault&&e.preventDefault();return!0}(n)?t[(0,r.unref)(e.replace)?"replace":"push"]((0,r.unref)(e.to)).catch(en):Promise.resolve()}}}const _r=(0,r.defineComponent)({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Cr,setup(e,{slots:t}){const n=(0,r.reactive)(Cr(e)),{options:o}=(0,r.inject)(vr),i=(0,r.computed)((()=>({[xr(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[xr(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive})));return()=>{const o=t.default&&t.default(n);return e.custom?o:(0,r.h)("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},o)}}});function Er(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const xr=(e,t,n)=>null!=e?e:null!=t?t:n;function kr(e,t){if(!e)return null;const n=e(t);return 1===n.length?n[0]:n}const Sr=(0,r.defineComponent)({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=(0,r.inject)(gr),i=(0,r.computed)((()=>e.route||o.value)),a=(0,r.inject)(hr,0),l=(0,r.computed)((()=>{let e=(0,r.unref)(a);const{matched:t}=i.value;let n;for(;(n=t[e])&&!n.components;)e++;return e})),s=(0,r.computed)((()=>i.value.matched[l.value]));(0,r.provide)(hr,(0,r.computed)((()=>l.value+1))),(0,r.provide)(pr,s),(0,r.provide)(gr,i);const c=(0,r.ref)();return(0,r.watch)((()=>[c.value,s.value,e.name]),(([e,t,n],[r,o,i])=>{t&&(t.instances[n]=e,o&&o!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=o.leaveGuards),t.updateGuards.size||(t.updateGuards=o.updateGuards))),!e||!t||o&&ln(t,o)&&r||(t.enterCallbacks[n]||[]).forEach((t=>t(e)))}),{flush:"post"}),()=>{const o=i.value,a=e.name,l=s.value,u=l&&l.components[a];if(!u)return kr(n.default,{Component:u,route:o});const f=l.props[a],d=f?!0===f?o.params:"function"==typeof f?f(o):f:null,p=(0,r.h)(u,Qt({},d,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(l.instances[a]=null)},ref:c}));return kr(n.default,{Component:p,route:o})||p}}});function Or(e){return e.reduce(((e,t)=>e.then((()=>t()))),Promise.resolve())}function Nr(){return(0,r.inject)(vr)}function Pr(){return(0,r.inject)(mr)}function Tr(e,t,...n){if(e in t){let r=t[e];return"function"==typeof r?r(...n):r}let r=new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map((e=>`"${e}"`)).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,Tr),r}var Vr,Rr=((Vr=Rr||{})[Vr.None=0]="None",Vr[Vr.RenderStrategy=1]="RenderStrategy",Vr[Vr.Static=2]="Static",Vr),Lr=(e=>(e[e.Unmount=0]="Unmount",e[e.Hidden=1]="Hidden",e))(Lr||{});function Ar({visible:e=!0,features:t=0,ourProps:n,theirProps:r,...o}){var i;let a=Ir(r,n),l=Object.assign(o,{props:a});if(e||2&t&&a.static)return jr(l);if(1&t){return Tr(null==(i=a.unmount)||i?0:1,{0:()=>null,1:()=>jr({...o,props:{...a,hidden:!0,style:{display:"none"}}})})}return jr(l)}function jr({props:e,attrs:t,slots:n,slot:o,name:i}){var a,l;let{as:s,...c}=Mr(e,["unmount","static"]),u=null==(a=n.default)?void 0:a.call(n,o),f={};if(o){let e=!1,t=[];for(let[n,r]of Object.entries(o))"boolean"==typeof r&&(e=!0),!0===r&&t.push(n);e&&(f["data-headlessui-state"]=t.join(" "))}if("template"===s){if(u=Br(null!=u?u:[]),Object.keys(c).length>0||Object.keys(t).length>0){let[e,...n]=null!=u?u:[];if(!function(e){return null!=e&&("string"==typeof e.type||"object"==typeof e.type||"function"==typeof e.type)}(e)||n.length>0)throw new Error(['Passing props on "template"!',"",`The current component <${i} /> is rendering a "template".`,"However we need to passthrough the following props:",Object.keys(c).concat(Object.keys(t)).map((e=>e.trim())).filter(((e,t,n)=>n.indexOf(e)===t)).sort(((e,t)=>e.localeCompare(t))).map((e=>` - ${e}`)).join("\n"),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "template".',"Render a single element as the child so that we can forward the props onto that element."].map((e=>` - ${e}`)).join("\n")].join("\n"));let o=Ir(null!=(l=e.props)?l:{},c),a=(0,r.cloneVNode)(e,o);for(let e in o)e.startsWith("on")&&(a.props||(a.props={}),a.props[e]=o[e]);return a}return Array.isArray(u)&&1===u.length?u[0]:u}return(0,r.h)(s,Object.assign({},c,f),{default:()=>u})}function Br(e){return e.flatMap((e=>e.type===r.Fragment?Br(e.children):[e]))}function Ir(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},n={};for(let r of e)for(let e in r)e.startsWith("on")&&"function"==typeof r[e]?(null!=n[e]||(n[e]=[]),n[e].push(r[e])):t[e]=r[e];if(t.disabled||t["aria-disabled"])return Object.assign(t,Object.fromEntries(Object.keys(n).map((e=>[e,void 0]))));for(let e in n)Object.assign(t,{[e](t,...r){let o=n[e];for(let e of o){if(t instanceof Event&&t.defaultPrevented)return;e(t,...r)}}});return t}function Mr(e,t=[]){let n=Object.assign({},e);for(let e of t)e in n&&delete n[e];return n}let Fr=0;function Dr(){return++Fr}var Ur=(e=>(e.Space=" ",e.Enter="Enter",e.Escape="Escape",e.Backspace="Backspace",e.Delete="Delete",e.ArrowLeft="ArrowLeft",e.ArrowUp="ArrowUp",e.ArrowRight="ArrowRight",e.ArrowDown="ArrowDown",e.Home="Home",e.End="End",e.PageUp="PageUp",e.PageDown="PageDown",e.Tab="Tab",e))(Ur||{});var $r=(e=>(e[e.First=0]="First",e[e.Previous=1]="Previous",e[e.Next=2]="Next",e[e.Last=3]="Last",e[e.Specific=4]="Specific",e[e.Nothing=5]="Nothing",e))($r||{});function Hr(e,t){let n=t.resolveItems();if(n.length<=0)return null;let r=t.resolveActiveIndex(),o=null!=r?r:-1,i=(()=>{switch(e.focus){case 0:return n.findIndex((e=>!t.resolveDisabled(e)));case 1:{let e=n.slice().reverse().findIndex(((e,n,r)=>!(-1!==o&&r.length-n-1>=o)&&!t.resolveDisabled(e)));return-1===e?e:n.length-1-e}case 2:return n.findIndex(((e,n)=>!(n<=o)&&!t.resolveDisabled(e)));case 3:{let e=n.slice().reverse().findIndex((e=>!t.resolveDisabled(e)));return-1===e?e:n.length-1-e}case 4:return n.findIndex((n=>t.resolveId(n)===e.id));case 5:return null;default:!function(e){throw new Error("Unexpected object: "+e)}(e)}})();return-1===i?r:i}function zr(e){var t;return null==e||null==e.value?null:null!=(t=e.value.$el)?t:e.value}let qr=new class{constructor(){this.current=this.detect(),this.currentId=0}set(e){this.current!==e&&(this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return"server"===this.current}get isClient(){return"client"===this.current}detect(){return"undefined"==typeof window||"undefined"==typeof document?"server":"client"}};function Wr(e){if(qr.isServer)return null;if(e instanceof Node)return e.ownerDocument;if(null!=e&&e.hasOwnProperty("value")){let t=zr(e);if(t)return t.ownerDocument}return document}let Kr=Symbol("Context");var Gr=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(Gr||{});function Zr(){return(0,r.inject)(Kr,null)}function Yr(e){(0,r.provide)(Kr,e)}function Jr(e,t){if(e)return e;let n=null!=t?t:"button";return"string"==typeof n&&"button"===n.toLowerCase()?"button":void 0}function Qr(e,t){let n=(0,r.ref)(Jr(e.value.type,e.value.as));return(0,r.onMounted)((()=>{n.value=Jr(e.value.type,e.value.as)})),(0,r.watchEffect)((()=>{var e;n.value||!zr(t)||zr(t)instanceof HTMLButtonElement&&(null==(e=zr(t))||!e.hasAttribute("type"))&&(n.value="button")})),n}let Xr=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map((e=>`${e}:not([tabindex='-1'])`)).join(",");var eo=(e=>(e[e.First=1]="First",e[e.Previous=2]="Previous",e[e.Next=4]="Next",e[e.Last=8]="Last",e[e.WrapAround=16]="WrapAround",e[e.NoScroll=32]="NoScroll",e))(eo||{}),to=(e=>(e[e.Error=0]="Error",e[e.Overflow=1]="Overflow",e[e.Success=2]="Success",e[e.Underflow=3]="Underflow",e))(to||{}),no=(e=>(e[e.Previous=-1]="Previous",e[e.Next=1]="Next",e))(no||{});function ro(e=document.body){return null==e?[]:Array.from(e.querySelectorAll(Xr)).sort(((e,t)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER))))}var oo=(e=>(e[e.Strict=0]="Strict",e[e.Loose=1]="Loose",e))(oo||{});function io(e,t=0){var n;return e!==(null==(n=Wr(e))?void 0:n.body)&&Tr(t,{0:()=>e.matches(Xr),1(){let t=e;for(;null!==t;){if(t.matches(Xr))return!0;t=t.parentElement}return!1}})}function ao(e){let t=Wr(e);(0,r.nextTick)((()=>{t&&!io(t.activeElement,0)&&lo(e)}))}function lo(e){null==e||e.focus({preventScroll:!0})}let so=["textarea","input"].join(",");function co(e,t=(e=>e)){return e.slice().sort(((e,n)=>{let r=t(e),o=t(n);if(null===r||null===o)return 0;let i=r.compareDocumentPosition(o);return i&Node.DOCUMENT_POSITION_FOLLOWING?-1:i&Node.DOCUMENT_POSITION_PRECEDING?1:0}))}function uo(e,t){return fo(ro(),t,{relativeTo:e})}function fo(e,t,{sorted:n=!0,relativeTo:r=null,skipElements:o=[]}={}){var i;let a=null!=(i=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:null==e?void 0:e.ownerDocument)?i:document,l=Array.isArray(e)?n?co(e):e:ro(e);o.length>0&&l.length>1&&(l=l.filter((e=>!o.includes(e)))),r=null!=r?r:a.activeElement;let s,c=(()=>{if(5&t)return 1;if(10&t)return-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),u=(()=>{if(1&t)return 0;if(2&t)return Math.max(0,l.indexOf(r))-1;if(4&t)return Math.max(0,l.indexOf(r))+1;if(8&t)return l.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),f=32&t?{preventScroll:!0}:{},d=0,p=l.length;do{if(d>=p||d+p<=0)return 0;let e=u+d;if(16&t)e=(e+p)%p;else{if(e<0)return 3;if(e>=p)return 1}s=l[e],null==s||s.focus(f),d+=c}while(s!==a.activeElement);return 6&t&&function(e){var t,n;return null!=(n=null==(t=null==e?void 0:e.matches)?void 0:t.call(e,so))&&n}(s)&&s.select(),s.hasAttribute("tabindex")||s.setAttribute("tabindex","0"),2}function po(e,t,n){qr.isServer||(0,r.watchEffect)((r=>{document.addEventListener(e,t,n),r((()=>document.removeEventListener(e,t,n)))}))}function ho(e,t,n=(0,r.computed)((()=>!0))){function o(r,o){if(!n.value||r.defaultPrevented)return;let i=o(r);if(null===i||!i.getRootNode().contains(i))return;let a=function e(t){return"function"==typeof t?e(t()):Array.isArray(t)||t instanceof Set?t:[t]}(e);for(let e of a){if(null===e)continue;let t=e instanceof HTMLElement?e:zr(e);if(null!=t&&t.contains(i)||r.composed&&r.composedPath().includes(t))return}return!io(i,oo.Loose)&&-1!==i.tabIndex&&r.preventDefault(),t(r,i)}let i=(0,r.ref)(null);po("mousedown",(e=>{var t,r;n.value&&(i.value=(null==(r=null==(t=e.composedPath)?void 0:t.call(e))?void 0:r[0])||e.target)}),!0),po("click",(e=>{!i.value||(o(e,(()=>i.value)),i.value=null)}),!0),po("blur",(e=>o(e,(()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null))),!0)}function vo(e){return[e.screenX,e.screenY]}function mo(){let e=(0,r.ref)([-1,-1]);return{wasMoved(t){let n=vo(t);return(e.value[0]!==n[0]||e.value[1]!==n[1])&&(e.value=n,!0)},update(t){e.value=vo(t)}}}var go=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(go||{}),yo=(e=>(e[e.Pointer=0]="Pointer",e[e.Other=1]="Other",e))(yo||{});let bo=Symbol("MenuContext");function wo(e){let t=(0,r.inject)(bo,null);if(null===t){let t=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,wo),t}return t}let Co=(0,r.defineComponent)({name:"Menu",props:{as:{type:[Object,String],default:"template"}},setup(e,{slots:t,attrs:n}){let o=(0,r.ref)(1),i=(0,r.ref)(null),a=(0,r.ref)(null),l=(0,r.ref)([]),s=(0,r.ref)(""),c=(0,r.ref)(null),u=(0,r.ref)(1);function f(e=(e=>e)){let t=null!==c.value?l.value[c.value]:null,n=co(e(l.value.slice()),(e=>zr(e.dataRef.domRef))),r=t?n.indexOf(t):null;return-1===r&&(r=null),{items:n,activeItemIndex:r}}let d={menuState:o,buttonRef:i,itemsRef:a,items:l,searchQuery:s,activeItemIndex:c,activationTrigger:u,closeMenu:()=>{o.value=1,c.value=null},openMenu:()=>o.value=0,goToItem(e,t,n){let r=f(),o=Hr(e===$r.Specific?{focus:$r.Specific,id:t}:{focus:e},{resolveItems:()=>r.items,resolveActiveIndex:()=>r.activeItemIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.disabled});s.value="",c.value=o,u.value=null!=n?n:1,l.value=r.items},search(e){let t=""!==s.value?0:1;s.value+=e.toLowerCase();let n=(null!==c.value?l.value.slice(c.value+t).concat(l.value.slice(0,c.value+t)):l.value).find((e=>e.dataRef.textValue.startsWith(s.value)&&!e.dataRef.disabled)),r=n?l.value.indexOf(n):-1;-1===r||r===c.value||(c.value=r,u.value=1)},clearSearch(){s.value=""},registerItem(e,t){let n=f((n=>[...n,{id:e,dataRef:t}]));l.value=n.items,c.value=n.activeItemIndex,u.value=1},unregisterItem(e){let t=f((t=>{let n=t.findIndex((t=>t.id===e));return-1!==n&&t.splice(n,1),t}));l.value=t.items,c.value=t.activeItemIndex,u.value=1}};return ho([i,a],((e,t)=>{var n;d.closeMenu(),io(t,oo.Loose)||(e.preventDefault(),null==(n=zr(i))||n.focus())}),(0,r.computed)((()=>0===o.value))),(0,r.provide)(bo,d),Yr((0,r.computed)((()=>Tr(o.value,{0:Gr.Open,1:Gr.Closed})))),()=>{let r={open:0===o.value,close:d.closeMenu};return Ar({ourProps:{},theirProps:e,slot:r,slots:t,attrs:n,name:"Menu"})}}}),_o=(0,r.defineComponent)({name:"MenuButton",props:{disabled:{type:Boolean,default:!1},as:{type:[Object,String],default:"button"},id:{type:String,default:()=>`headlessui-menu-button-${Dr()}`}},setup(e,{attrs:t,slots:n,expose:o}){let i=wo("MenuButton");function a(e){switch(e.key){case Ur.Space:case Ur.Enter:case Ur.ArrowDown:e.preventDefault(),e.stopPropagation(),i.openMenu(),(0,r.nextTick)((()=>{var e;null==(e=zr(i.itemsRef))||e.focus({preventScroll:!0}),i.goToItem($r.First)}));break;case Ur.ArrowUp:e.preventDefault(),e.stopPropagation(),i.openMenu(),(0,r.nextTick)((()=>{var e;null==(e=zr(i.itemsRef))||e.focus({preventScroll:!0}),i.goToItem($r.Last)}))}}function l(e){if(e.key===Ur.Space)e.preventDefault()}function s(t){e.disabled||(0===i.menuState.value?(i.closeMenu(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})}))):(t.preventDefault(),i.openMenu(),function(e){requestAnimationFrame((()=>requestAnimationFrame(e)))}((()=>{var e;return null==(e=zr(i.itemsRef))?void 0:e.focus({preventScroll:!0})}))))}o({el:i.buttonRef,$el:i.buttonRef});let c=Qr((0,r.computed)((()=>({as:e.as,type:t.type}))),i.buttonRef);return()=>{var r;let o={open:0===i.menuState.value},{id:u,...f}=e;return Ar({ourProps:{ref:i.buttonRef,id:u,type:c.value,"aria-haspopup":"menu","aria-controls":null==(r=zr(i.itemsRef))?void 0:r.id,"aria-expanded":e.disabled?void 0:0===i.menuState.value,onKeydown:a,onKeyup:l,onClick:s},theirProps:f,slot:o,attrs:t,slots:n,name:"MenuButton"})}}}),Eo=(0,r.defineComponent)({name:"MenuItems",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:()=>`headlessui-menu-items-${Dr()}`}},setup(e,{attrs:t,slots:n,expose:o}){let i=wo("MenuItems"),a=(0,r.ref)(null);function l(e){var t;switch(a.value&&clearTimeout(a.value),e.key){case Ur.Space:if(""!==i.searchQuery.value)return e.preventDefault(),e.stopPropagation(),i.search(e.key);case Ur.Enter:if(e.preventDefault(),e.stopPropagation(),null!==i.activeItemIndex.value){null==(t=zr(i.items.value[i.activeItemIndex.value].dataRef.domRef))||t.click()}i.closeMenu(),ao(zr(i.buttonRef));break;case Ur.ArrowDown:return e.preventDefault(),e.stopPropagation(),i.goToItem($r.Next);case Ur.ArrowUp:return e.preventDefault(),e.stopPropagation(),i.goToItem($r.Previous);case Ur.Home:case Ur.PageUp:return e.preventDefault(),e.stopPropagation(),i.goToItem($r.First);case Ur.End:case Ur.PageDown:return e.preventDefault(),e.stopPropagation(),i.goToItem($r.Last);case Ur.Escape:e.preventDefault(),e.stopPropagation(),i.closeMenu(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})}));break;case Ur.Tab:e.preventDefault(),e.stopPropagation(),i.closeMenu(),(0,r.nextTick)((()=>uo(zr(i.buttonRef),e.shiftKey?eo.Previous:eo.Next)));break;default:1===e.key.length&&(i.search(e.key),a.value=setTimeout((()=>i.clearSearch()),350))}}function s(e){if(e.key===Ur.Space)e.preventDefault()}o({el:i.itemsRef,$el:i.itemsRef}),function({container:e,accept:t,walk:n,enabled:o}){(0,r.watchEffect)((()=>{let r=e.value;if(!r||void 0!==o&&!o.value)return;let i=Wr(e);if(!i)return;let a=Object.assign((e=>t(e)),{acceptNode:t}),l=i.createTreeWalker(r,NodeFilter.SHOW_ELEMENT,a,!1);for(;l.nextNode();)n(l.currentNode)}))}({container:(0,r.computed)((()=>zr(i.itemsRef))),enabled:(0,r.computed)((()=>0===i.menuState.value)),accept:e=>"menuitem"===e.getAttribute("role")?NodeFilter.FILTER_REJECT:e.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT,walk(e){e.setAttribute("role","none")}});let c=Zr(),u=(0,r.computed)((()=>null!==c?c.value===Gr.Open:0===i.menuState.value));return()=>{var r,o;let a={open:0===i.menuState.value},{id:c,...f}=e;return Ar({ourProps:{"aria-activedescendant":null===i.activeItemIndex.value||null==(r=i.items.value[i.activeItemIndex.value])?void 0:r.id,"aria-labelledby":null==(o=zr(i.buttonRef))?void 0:o.id,id:c,onKeydown:l,onKeyup:s,role:"menu",tabIndex:0,ref:i.itemsRef},theirProps:f,slot:a,attrs:t,slots:n,features:Rr.RenderStrategy|Rr.Static,visible:u.value,name:"MenuItems"})}}}),xo=(0,r.defineComponent)({name:"MenuItem",inheritAttrs:!1,props:{as:{type:[Object,String],default:"template"},disabled:{type:Boolean,default:!1},id:{type:String,default:()=>`headlessui-menu-item-${Dr()}`}},setup(e,{slots:t,attrs:n,expose:o}){let i=wo("MenuItem"),a=(0,r.ref)(null);o({el:a,$el:a});let l=(0,r.computed)((()=>null!==i.activeItemIndex.value&&i.items.value[i.activeItemIndex.value].id===e.id)),s=(0,r.computed)((()=>({disabled:e.disabled,textValue:"",domRef:a})));function c(t){if(e.disabled)return t.preventDefault();i.closeMenu(),ao(zr(i.buttonRef))}function u(){if(e.disabled)return i.goToItem($r.Nothing);i.goToItem($r.Specific,e.id)}(0,r.onMounted)((()=>{var e,t;let n=null==(t=null==(e=zr(a))?void 0:e.textContent)?void 0:t.toLowerCase().trim();void 0!==n&&(s.value.textValue=n)})),(0,r.onMounted)((()=>i.registerItem(e.id,s))),(0,r.onUnmounted)((()=>i.unregisterItem(e.id))),(0,r.watchEffect)((()=>{0===i.menuState.value&&(!l.value||0!==i.activationTrigger.value&&(0,r.nextTick)((()=>{var e,t;return null==(t=null==(e=zr(a))?void 0:e.scrollIntoView)?void 0:t.call(e,{block:"nearest"})})))}));let f=mo();function d(e){f.update(e)}function p(t){!f.wasMoved(t)||e.disabled||l.value||i.goToItem($r.Specific,e.id,0)}function h(t){!f.wasMoved(t)||e.disabled||!l.value||i.goToItem($r.Nothing)}return()=>{let{disabled:r}=e,o={active:l.value,disabled:r,close:i.closeMenu},{id:s,...f}=e;return Ar({ourProps:{id:s,ref:a,role:"menuitem",tabIndex:!0===r?void 0:-1,"aria-disabled":!0===r||void 0,disabled:void 0,onClick:c,onFocus:u,onPointerenter:d,onMouseenter:d,onPointermove:p,onMousemove:p,onPointerleave:h,onMouseleave:h},theirProps:{...n,...f},slot:o,attrs:n,slots:t,name:"MenuItem"})}}});var ko=n(505),So=n(10),Oo=n(706),No=n(558),Po=n(413),To=n(199),Vo=n(388),Ro=n(243),Lo=n(782),Ao=n(156),jo=n(488),Bo=ie({id:"hosts",state:function(){return{selectedHostIdentifier:null}},getters:{supportsHosts:function(){return LogViewer.supports_hosts},hosts:function(){return LogViewer.hosts||[]},hasRemoteHosts:function(){return this.hosts.some((function(e){return e.is_remote}))},selectedHost:function(){var e=this;return this.hosts.find((function(t){return t.identifier===e.selectedHostIdentifier}))},localHost:function(){return this.hosts.find((function(e){return!e.is_remote}))},hostQueryParam:function(){return this.selectedHost&&this.selectedHost.is_remote?this.selectedHost.identifier:void 0}},actions:{selectHost:function(e){var t;this.supportsHosts||(e=null),"string"==typeof e&&(e=this.hosts.find((function(t){return t.identifier===e}))),e||(e=this.hosts.find((function(e){return!e.is_remote}))),this.selectedHostIdentifier=(null===(t=e)||void 0===t?void 0:t.identifier)||null}}});var Io;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;const Mo="undefined"!=typeof window,Fo=(Object.prototype.toString,e=>"function"==typeof e),Do=e=>"string"==typeof e,Uo=()=>{};Mo&&(null==(Io=null==window?void 0:window.navigator)?void 0:Io.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function $o(e){return"function"==typeof e?e():(0,r.unref)(e)}function Ho(e,t){return function(...n){return new Promise(((r,o)=>{Promise.resolve(e((()=>t.apply(this,n)),{fn:t,thisArg:this,args:n})).then(r).catch(o)}))}}const zo=e=>e();function qo(e){return!!(0,r.getCurrentScope)()&&((0,r.onScopeDispose)(e),!0)}Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var Wo=Object.getOwnPropertySymbols,Ko=Object.prototype.hasOwnProperty,Go=Object.prototype.propertyIsEnumerable,Zo=(e,t)=>{var n={};for(var r in e)Ko.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&Wo)for(var r of Wo(e))t.indexOf(r)<0&&Go.call(e,r)&&(n[r]=e[r]);return n};function Yo(e,t,n={}){const o=n,{eventFilter:i=zo}=o,a=Zo(o,["eventFilter"]);return(0,r.watch)(e,Ho(i,t),a)}Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var Jo=Object.defineProperty,Qo=Object.defineProperties,Xo=Object.getOwnPropertyDescriptors,ei=Object.getOwnPropertySymbols,ti=Object.prototype.hasOwnProperty,ni=Object.prototype.propertyIsEnumerable,ri=(e,t,n)=>t in e?Jo(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,oi=(e,t)=>{for(var n in t||(t={}))ti.call(t,n)&&ri(e,n,t[n]);if(ei)for(var n of ei(t))ni.call(t,n)&&ri(e,n,t[n]);return e},ii=(e,t)=>Qo(e,Xo(t)),ai=(e,t)=>{var n={};for(var r in e)ti.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&ei)for(var r of ei(e))t.indexOf(r)<0&&ni.call(e,r)&&(n[r]=e[r]);return n};function li(e,t,n={}){const o=n,{eventFilter:i}=o,a=ai(o,["eventFilter"]),{eventFilter:l,pause:s,resume:c,isActive:u}=function(e=zo){const t=(0,r.ref)(!0);return{isActive:(0,r.readonly)(t),pause:function(){t.value=!1},resume:function(){t.value=!0},eventFilter:(...n)=>{t.value&&e(...n)}}}(i);return{stop:Yo(e,t,ii(oi({},a),{eventFilter:l})),pause:s,resume:c,isActive:u}}Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;function si(e){var t;const n=$o(e);return null!=(t=null==n?void 0:n.$el)?t:n}const ci=Mo?window:void 0;Mo&&window.document,Mo&&window.navigator,Mo&&window.location;function ui(...e){let t,n,o,i;if(Do(e[0])||Array.isArray(e[0])?([n,o,i]=e,t=ci):[t,n,o,i]=e,!t)return Uo;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const a=[],l=()=>{a.forEach((e=>e())),a.length=0},s=(0,r.watch)((()=>si(t)),(e=>{l(),e&&a.push(...n.flatMap((t=>o.map((n=>((e,t,n)=>(e.addEventListener(t,n,i),()=>e.removeEventListener(t,n,i)))(e,t,n))))))}),{immediate:!0,flush:"post"}),c=()=>{s(),l()};return qo(c),c}Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;const fi="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},di="__vueuse_ssr_handlers__";fi[di]=fi[di]||{};const pi=fi[di];function hi(e,t){return pi[e]||t}function vi(e){return null==e?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":"boolean"==typeof e?"boolean":"string"==typeof e?"string":"object"==typeof e?"object":Number.isNaN(e)?"any":"number"}var mi=Object.defineProperty,gi=Object.getOwnPropertySymbols,yi=Object.prototype.hasOwnProperty,bi=Object.prototype.propertyIsEnumerable,wi=(e,t,n)=>t in e?mi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ci=(e,t)=>{for(var n in t||(t={}))yi.call(t,n)&&wi(e,n,t[n]);if(gi)for(var n of gi(t))bi.call(t,n)&&wi(e,n,t[n]);return e};const _i={boolean:{read:e=>"true"===e,write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function Ei(e,t,n,o={}){var i;const{flush:a="pre",deep:l=!0,listenToStorageChanges:s=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:f,window:d=ci,eventFilter:p,onError:h=(e=>{})}=o,v=(f?r.shallowRef:r.ref)(t);if(!n)try{n=hi("getDefaultStorage",(()=>{var e;return null==(e=ci)?void 0:e.localStorage}))()}catch(e){h(e)}if(!n)return v;const m=$o(t),g=vi(m),y=null!=(i=o.serializer)?i:_i[g],{pause:b,resume:w}=li(v,(()=>function(t){try{if(null==t)n.removeItem(e);else{const r=y.write(t),o=n.getItem(e);o!==r&&(n.setItem(e,r),d&&(null==d||d.dispatchEvent(new StorageEvent("storage",{key:e,oldValue:o,newValue:r,storageArea:n}))))}}catch(e){h(e)}}(v.value)),{flush:a,deep:l,eventFilter:p});return d&&s&&ui(d,"storage",C),C(),v;function C(t){if(!t||t.storageArea===n)if(t&&null==t.key)v.value=m;else if(!t||t.key===e){b();try{v.value=function(t){const r=t?t.newValue:n.getItem(e);if(null==r)return c&&null!==m&&n.setItem(e,y.write(m)),m;if(!t&&u){const e=y.read(r);return Fo(u)?u(e,m):"object"!==g||Array.isArray(e)?e:Ci(Ci({},m),e)}return"string"!=typeof r?r:y.read(r)}(t)}catch(e){h(e)}finally{t?(0,r.nextTick)(w):w()}}}}Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;new Map;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;function xi(e,t,n={}){const{window:r=ci}=n;return Ei(e,t,null==r?void 0:r.localStorage,n)}Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var ki,Si;(Si=ki||(ki={})).UP="UP",Si.RIGHT="RIGHT",Si.DOWN="DOWN",Si.LEFT="LEFT",Si.NONE="NONE";Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var Oi=Object.defineProperty,Ni=Object.getOwnPropertySymbols,Pi=Object.prototype.hasOwnProperty,Ti=Object.prototype.propertyIsEnumerable,Vi=(e,t,n)=>t in e?Oi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;((e,t)=>{for(var n in t||(t={}))Pi.call(t,n)&&Vi(e,n,t[n]);if(Ni)for(var n of Ni(t))Ti.call(t,n)&&Vi(e,n,t[n])})({linear:function(e){return e}},{easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]});var Ri=ie({id:"search",state:function(){return{query:"",searchMoreRoute:null,searching:!1,percentScanned:0,error:null}},getters:{hasQuery:function(e){return""!==String(e.query).trim()}},actions:{init:function(){this.checkSearchProgress()},setQuery:function(e){this.query=e},update:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;this.query=e,this.error=t&&""!==t?t:null,this.searchMoreRoute=n,this.searching=r,this.percentScanned=o,this.searching&&this.checkSearchProgress()},checkSearchProgress:function(){var e=this,t=this.query;if(""!==t){var n="?"+new URLSearchParams({query:t});fetch(this.searchMoreRoute+n).then((function(e){return e.json()})).then((function(n){if(e.query===t){var r=e.searching;e.searching=n.hasMoreResults,e.percentScanned=n.percentScanned,e.searching?e.checkSearchProgress():r&&!e.searching&&window.dispatchEvent(new CustomEvent("reload-results"))}}))}}}}),Li=ie({id:"pagination",state:function(){return{page:1,pagination:{}}},getters:{currentPage:function(e){return 1!==e.page?Number(e.page):null},links:function(e){var t;return((null===(t=e.pagination)||void 0===t?void 0:t.links)||[]).slice(1,-1)},linksShort:function(e){var t;return((null===(t=e.pagination)||void 0===t?void 0:t.links_short)||[]).slice(1,-1)},hasPages:function(e){var t;return(null===(t=e.pagination)||void 0===t?void 0:t.last_page)>1},hasMorePages:function(e){var t;return null!==(null===(t=e.pagination)||void 0===t?void 0:t.next_page_url)}},actions:{setPagination:function(e){var t,n;(this.pagination=e,(null===(t=this.pagination)||void 0===t?void 0:t.last_page)0}))},totalResults:function(){return this.levelsFound.reduce((function(e,t){return e+t.count}),0)},levelsSelected:function(){return this.levelsFound.filter((function(e){return e.selected}))},totalResultsSelected:function(){return this.levelsSelected.reduce((function(e,t){return e+t.count}),0)}},actions:{setLevelCounts:function(e){e.hasOwnProperty("length")?this.levelCounts=e:this.levelCounts=Object.values(e)},selectAllLevels:function(){this.selectedLevels=Ai,this.levelCounts.forEach((function(e){return e.selected=!0}))},deselectAllLevels:function(){this.selectedLevels=[],this.levelCounts.forEach((function(e){return e.selected=!1}))},toggleLevel:function(e){var t=this.levelCounts.find((function(t){return t.level===e}))||{};this.selectedLevels.includes(e)?(this.selectedLevels=this.selectedLevels.filter((function(t){return t!==e})),t.selected=!1):(this.selectedLevels.push(e),t.selected=!0)}}}),Bi=n(486),Ii={System:"System",Light:"Light",Dark:"Dark"},Mi=ie({id:"logViewer",state:function(){return{theme:xi("logViewerTheme",Ii.System),shorterStackTraces:xi("logViewerShorterStackTraces",!1),direction:xi("logViewerDirection","desc"),resultsPerPage:xi("logViewerResultsPerPage",25),helpSlideOverOpen:!1,loading:!1,error:null,logs:[],levelCounts:[],performance:{},hasMoreResults:!1,percentScanned:100,abortController:null,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,stacksOpen:[],stacksInView:[],stackTops:{},containerTop:0,showLevelsDropdown:!0}},getters:{selectedFile:function(){return Fi().selectedFile},isOpen:function(e){return function(t){return e.stacksOpen.includes(t)}},isMobile:function(e){return e.viewportWidth<=1023},tableRowHeight:function(){return this.isMobile?29:36},headerHeight:function(){return this.isMobile?0:36},shouldBeSticky:function(e){var t=this;return function(n){return t.isOpen(n)&&e.stacksInView.includes(n)}},stickTopPosition:function(){var e=this;return function(t){var n=e.pixelsAboveFold(t);return n<0?Math.max(e.headerHeight-e.tableRowHeight,e.headerHeight+n)+"px":e.headerHeight+"px"}},pixelsAboveFold:function(e){var t=this;return function(n){var r=document.getElementById("tbody-"+n);if(!r)return!1;var o=r.getClientRects()[0];return o.top+o.height-t.tableRowHeight-t.headerHeight-e.containerTop}},isInViewport:function(){var e=this;return function(t){return e.pixelsAboveFold(t)>-e.tableRowHeight}}},actions:{setViewportDimensions:function(e,t){this.viewportWidth=e,this.viewportHeight=t;var n=document.querySelector(".log-item-container");n&&(this.containerTop=n.getBoundingClientRect().top)},toggleTheme:function(){switch(this.theme){case Ii.System:this.theme=Ii.Light;break;case Ii.Light:this.theme=Ii.Dark;break;default:this.theme=Ii.System}this.syncTheme()},syncTheme:function(){var e=this.theme;e===Ii.Dark||e===Ii.System&&window.matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},toggle:function(e){this.isOpen(e)?this.stacksOpen=this.stacksOpen.filter((function(t){return t!==e})):this.stacksOpen.push(e),this.onScroll()},onScroll:function(){var e=this;this.stacksOpen.forEach((function(t){e.isInViewport(t)?(e.stacksInView.includes(t)||e.stacksInView.push(t),e.stackTops[t]=e.stickTopPosition(t)):(e.stacksInView=e.stacksInView.filter((function(e){return e!==t})),delete e.stackTops[t])}))},reset:function(){this.stacksOpen=[],this.stacksInView=[],this.stackTops={};var e=document.querySelector(".log-item-container");e&&(this.containerTop=e.getBoundingClientRect().top,e.scrollTo(0,0))},loadLogs:(0,Bi.debounce)((function(){var e,t=this,n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).silently,o=void 0!==n&&n,i=Bo(),a=Fi(),l=Ri(),s=Li(),c=ji();if(0!==a.folders.length&&(this.abortController&&this.abortController.abort(),this.selectedFile||l.hasQuery)){this.abortController=new AbortController;var u={host:i.hostQueryParam,file:null===(e=this.selectedFile)||void 0===e?void 0:e.identifier,direction:this.direction,query:l.query,page:s.currentPage,per_page:this.resultsPerPage,levels:(0,r.toRaw)(c.selectedLevels.length>0?c.selectedLevels:"none"),shorter_stack_traces:this.shorterStackTraces};o||(this.loading=!0),Zt.get("".concat(LogViewer.basePath,"/api/logs"),{params:u,signal:this.abortController.signal}).then((function(e){var n=e.data;t.logs=u.host?n.logs.map((function(e){var t={host:u.host,file:e.file_identifier,query:"log-index:".concat(e.index)};return e.url="".concat(window.location.host).concat(LogViewer.basePath,"?").concat(new URLSearchParams(t)),e})):n.logs,t.hasMoreResults=n.hasMoreResults,t.percentScanned=n.percentScanned,t.error=n.error||null,t.performance=n.performance||{},c.setLevelCounts(n.levelCounts),s.setPagination(n.pagination),t.loading=!1,o||(0,r.nextTick)((function(){t.reset(),n.expandAutomatically&&t.stacksOpen.push(0)})),t.hasMoreResults&&t.loadLogs({silently:!0})})).catch((function(e){var n,r;if("ERR_CANCELED"===e.code)return t.hasMoreResults=!1,void(t.percentScanned=100);t.loading=!1,t.error=e.message,null!==(n=e.response)&&void 0!==n&&null!==(r=n.data)&&void 0!==r&&r.message&&(t.error+=": "+e.response.data.message)}))}}),10)}}),Fi=ie({id:"files",state:function(){return{folders:[],direction:xi("fileViewerDirection","desc"),selectedFileIdentifier:null,error:null,clearingCache:{},cacheRecentlyCleared:{},deleting:{},abortController:null,loading:!1,checkBoxesVisibility:!1,filesChecked:[],openFolderIdentifiers:[],foldersInView:[],containerTop:0,sidebarOpen:!1}},getters:{selectedHost:function(){return Bo().selectedHost},hostQueryParam:function(){return Bo().hostQueryParam},files:function(e){return e.folders.flatMap((function(e){return e.files}))},selectedFile:function(e){return e.files.find((function(t){return t.identifier===e.selectedFileIdentifier}))},foldersOpen:function(e){return e.openFolderIdentifiers.map((function(t){return e.folders.find((function(e){return e.identifier===t}))}))},isOpen:function(){var e=this;return function(t){return e.foldersOpen.includes(t)}},isChecked:function(e){return function(t){return e.filesChecked.includes("string"==typeof t?t:t.identifier)}},shouldBeSticky:function(e){var t=this;return function(n){return t.isOpen(n)&&e.foldersInView.includes(n)}},isInViewport:function(){var e=this;return function(t){return e.pixelsAboveFold(t)>-36}},pixelsAboveFold:function(e){return function(t){var n=document.getElementById("folder-"+t);if(!n)return!1;var r=n.getClientRects()[0];return r.top+r.height-e.containerTop}},hasFilesChecked:function(e){return e.filesChecked.length>0}},actions:{setDirection:function(e){this.direction=e},selectFile:function(e){this.selectedFileIdentifier!==e&&(this.selectedFileIdentifier=e,this.openFolderForActiveFile(),this.sidebarOpen=!1)},openFolderForActiveFile:function(){var e=this;if(this.selectedFile){var t=this.folders.find((function(t){return t.files.some((function(t){return t.identifier===e.selectedFile.identifier}))}));t&&!this.isOpen(t)&&this.toggle(t)}},openRootFolderIfNoneOpen:function(){var e=this.folders.find((function(e){return e.is_root}));e&&0===this.openFolderIdentifiers.length&&this.openFolderIdentifiers.push(e.identifier)},loadFolders:function(){var e=this;return this.abortController&&this.abortController.abort(),this.selectedHost?(this.abortController=new AbortController,this.loading=!0,Zt.get("".concat(LogViewer.basePath,"/api/folders"),{params:{host:this.hostQueryParam,direction:this.direction},signal:this.abortController.signal}).then((function(t){var n=t.data;e.folders=n,e.error=n.error||null,e.loading=!1,0===e.openFolderIdentifiers.length&&(e.openFolderForActiveFile(),e.openRootFolderIfNoneOpen()),e.onScroll()})).catch((function(t){var n,r;"ERR_CANCELED"!==t.code&&(e.loading=!1,e.error=t.message,null!==(n=t.response)&&void 0!==n&&null!==(r=n.data)&&void 0!==r&&r.message&&(e.error+=": "+t.response.data.message))}))):(this.folders=[],this.error=null,void(this.loading=!1))},toggle:function(e){this.isOpen(e)?this.openFolderIdentifiers=this.openFolderIdentifiers.filter((function(t){return t!==e.identifier})):this.openFolderIdentifiers.push(e.identifier),this.onScroll()},onScroll:function(){var e=this;this.foldersOpen.forEach((function(t){e.isInViewport(t)?e.foldersInView.includes(t)||e.foldersInView.push(t):e.foldersInView=e.foldersInView.filter((function(e){return e!==t}))}))},reset:function(){this.openFolderIdentifiers=[],this.foldersInView=[];var e=document.getElementById("file-list-container");e&&(this.containerTop=e.getBoundingClientRect().top,e.scrollTo(0,0))},toggleSidebar:function(){this.sidebarOpen=!this.sidebarOpen},checkBoxToggle:function(e){this.isChecked(e)?this.filesChecked=this.filesChecked.filter((function(t){return t!==e})):this.filesChecked.push(e)},toggleCheckboxVisibility:function(){this.checkBoxesVisibility=!this.checkBoxesVisibility},resetChecks:function(){this.filesChecked=[],this.checkBoxesVisibility=!1},clearCacheForFile:function(e){var t=this;return this.clearingCache[e.identifier]=!0,Zt.post("".concat(LogViewer.basePath,"/api/files/").concat(e.identifier,"/clear-cache"),{},{params:{host:this.hostQueryParam}}).then((function(){e.identifier===t.selectedFileIdentifier&&Mi().loadLogs(),t.cacheRecentlyCleared[e.identifier]=!0,setTimeout((function(){return t.cacheRecentlyCleared[e.identifier]=!1}),2e3)})).catch((function(e){})).finally((function(){return t.clearingCache[e.identifier]=!1}))},deleteFile:function(e){var t=this;return Zt.delete("".concat(LogViewer.basePath,"/api/files/").concat(e.identifier),{params:{host:this.hostQueryParam}}).then((function(){return t.loadFolders()}))},clearCacheForFolder:function(e){var t=this;return this.clearingCache[e.identifier]=!0,Zt.post("".concat(LogViewer.basePath,"/api/folders/").concat(e.identifier,"/clear-cache"),{},{params:{host:this.hostQueryParam}}).then((function(){e.files.some((function(e){return e.identifier===t.selectedFileIdentifier}))&&Mi().loadLogs(),t.cacheRecentlyCleared[e.identifier]=!0,setTimeout((function(){return t.cacheRecentlyCleared[e.identifier]=!1}),2e3)})).catch((function(e){})).finally((function(){t.clearingCache[e.identifier]=!1}))},deleteFolder:function(e){var t=this;return this.deleting[e.identifier]=!0,Zt.delete("".concat(LogViewer.basePath,"/api/folders/").concat(e.identifier),{params:{host:this.hostQueryParam}}).then((function(){return t.loadFolders()})).catch((function(e){})).finally((function(){t.deleting[e.identifier]=!1}))},deleteSelectedFiles:function(){return Zt.post("".concat(LogViewer.basePath,"/api/delete-multiple-files"),{files:this.filesChecked},{params:{host:this.hostQueryParam}})},clearCacheForAllFiles:function(){var e=this;this.clearingCache["*"]=!0,Zt.post("".concat(LogViewer.basePath,"/api/clear-cache-all"),{},{params:{host:this.hostQueryParam}}).then((function(){e.cacheRecentlyCleared["*"]=!0,setTimeout((function(){return e.cacheRecentlyCleared["*"]=!1}),2e3),Mi().loadLogs()})).catch((function(e){})).finally((function(){return e.clearingCache["*"]=!1}))}}}),Di=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(t)try{e=e.replace(new RegExp(t,"gi"),"$& ")}catch(e){}return Ui(e).replace(/<mark>/g,"").replace(/<\/mark>/g," ")},Ui=function(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'"};return e.replace(/[&<>"']/g,(function(e){return t[e]}))},$i=function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t);var n=document.getSelection().rangeCount>0&&document.getSelection().getRangeAt(0);t.select(),document.execCommand("copy"),document.body.removeChild(t),n&&(document.getSelection().removeAllRanges(),document.getSelection().addRange(n))},Hi=function(e,t,n){var r=e.currentRoute.value,o={host:r.query.host||void 0,file:r.query.file||void 0,query:r.query.query||void 0,page:r.query.page||void 0};"host"===t?(o.file=void 0,o.page=void 0):"file"===t&&void 0!==o.page&&(o.page=void 0),o[t]=n?String(n):void 0,e.push({name:"home",query:o})},zi=function(){var e=(0,r.ref)({});return{dropdownDirections:e,calculateDropdownDirection:function(t){e.value[t.dataset.toggleId]=function(e){window.innerWidth||document.documentElement.clientWidth;var t=window.innerHeight||document.documentElement.clientHeight;return e.getBoundingClientRect().bottom+190=0&&null===n[r].offsetParent;)r--;return n[r]?n[r]:null},ta=function(e,t){for(var n=Array.from(document.querySelectorAll(".".concat(t))),r=n.findIndex((function(t){return t===e}))+1;r0&&t[0].focus();else if(e.key===Xi.Hosts){e.preventDefault();var r=document.getElementById("hosts-toggle-button");null==r||r.click()}else if(e.key===Xi.Severity){e.preventDefault();var o=document.getElementById("severity-dropdown-toggle");null==o||o.click()}else if(e.key===Xi.Settings){e.preventDefault();var i=document.querySelector("#desktop-site-settings .menu-button");null==i||i.click()}else if(e.key===Xi.Search){e.preventDefault();var a=document.getElementById("query");null==a||a.focus()}else if(e.key===Xi.Refresh){e.preventDefault();var l=document.getElementById("reload-logs-button");null==l||l.click()}},oa=function(e){if("ArrowLeft"===e.key)e.preventDefault(),function(){var e=document.querySelector(".file-item-container.active .file-item-info");if(e)e.nextElementSibling.focus();else{var t,n=document.querySelector(".file-item-container .file-item-info");null==n||null===(t=n.nextElementSibling)||void 0===t||t.focus()}}();else if("ArrowRight"===e.key){var t=na(document.activeElement,Ji),n=Array.from(document.querySelectorAll(".".concat(Qi)));n.length>t&&(e.preventDefault(),n[t].focus())}else if("ArrowUp"===e.key){var r=ea(document.activeElement,Ji);r&&(e.preventDefault(),r.focus())}else if("ArrowDown"===e.key){var o=ta(document.activeElement,Ji);o&&(e.preventDefault(),o.focus())}},ia=function(e){if("ArrowLeft"===e.key){var t=na(document.activeElement,Qi),n=Array.from(document.querySelectorAll(".".concat(Ji)));n.length>t&&(e.preventDefault(),n[t].focus())}else if("ArrowUp"===e.key){var r=ea(document.activeElement,Qi);r&&(e.preventDefault(),r.focus())}else if("ArrowDown"===e.key){var o=ta(document.activeElement,Qi);o&&(e.preventDefault(),o.focus())}else if("Enter"===e.key||" "===e.key){e.preventDefault();var i=document.activeElement;i.click(),i.focus()}},aa=function(e){if("ArrowUp"===e.key){var t=ea(document.activeElement,Yi);t&&(e.preventDefault(),t.focus())}else if("ArrowDown"===e.key){var n=ta(document.activeElement,Yi);n&&(e.preventDefault(),n.focus())}else"ArrowRight"===e.key&&(e.preventDefault(),document.activeElement.nextElementSibling.focus())},la=function(e){if("ArrowLeft"===e.key)e.preventDefault(),document.activeElement.previousElementSibling.focus();else if("ArrowRight"===e.key){e.preventDefault();var t=Array.from(document.querySelectorAll(".".concat(Ji)));t.length>0&&t[0].focus()}};function sa(e){return sa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},sa(e)}function ca(){ca=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function c(e,t,n,o){var i=t&&t.prototype instanceof d?t:d,a=Object.create(i.prototype),l=new k(o||[]);return r(a,"_invoke",{value:C(e,n,l)}),a}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var f={};function d(){}function p(){}function h(){}var v={};s(v,i,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(S([])));g&&g!==t&&n.call(g,i)&&(v=g);var y=h.prototype=d.prototype=Object.create(v);function b(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function o(r,i,a,l){var s=u(e[r],e,i);if("throw"!==s.type){var c=s.arg,f=c.value;return f&&"object"==sa(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){o("next",e,a,l)}),(function(e){o("throw",e,a,l)})):t.resolve(f).then((function(e){c.value=e,a(c)}),(function(e){return o("throw",e,a,l)}))}l(s.arg)}var i;r(this,"_invoke",{value:function(e,n){function r(){return new t((function(t,r){o(e,n,t,r)}))}return i=i?i.then(r,r):r()}})}function C(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return O()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var l=_(a,n);if(l){if(l===f)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=u(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===f)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}function _(e,t){var n=t.method,r=e.iterator[n];if(void 0===r)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,_(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),f;var o=u(r,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,f;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function S(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,o=function t(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(l&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;x(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:S(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},e}function ua(e,t,n,r,o,i,a){try{var l=e[i](a),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}var fa={class:"file-item group"},da={key:0,class:"sr-only"},pa={key:1,class:"sr-only"},ha={key:2,class:"my-auto mr-2"},va=["onClick","checked","value"],ma={class:"file-name"},ga=(0,r.createElementVNode)("span",{class:"sr-only"},"Name:",-1),ya={class:"file-size"},ba=(0,r.createElementVNode)("span",{class:"sr-only"},"Size:",-1),wa={class:"py-2"},Ca={class:"text-brand-500"},_a=["href"],Ea=(0,r.createElementVNode)("div",{class:"divider"},null,-1);const xa={__name:"FileListItem",props:{logFile:{type:Object,required:!0},showSelectToggle:{type:Boolean,default:!1}},emits:["selectForDeletion"],setup:function(e,t){t.emit;var n=e,o=Fi(),i=Nr(),a=zi(),l=a.dropdownDirections,s=a.calculateDropdownDirection,c=(0,r.computed)((function(){return o.selectedFile&&o.selectedFile.identifier===n.logFile.identifier})),u=function(){var e,t=(e=ca().mark((function e(){return ca().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!confirm("Are you sure you want to delete the log file '".concat(n.logFile.name,"'? THIS ACTION CANNOT BE UNDONE."))){e.next=6;break}return e.next=3,o.deleteFile(n.logFile);case 3:return n.logFile.identifier===o.selectedFileIdentifier&&Hi(i,"file",null),e.next=6,o.loadFolders();case 6:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){ua(i,r,o,a,l,"next",e)}function l(e){ua(i,r,o,a,l,"throw",e)}a(void 0)}))});return function(){return t.apply(this,arguments)}}(),f=function(){o.checkBoxToggle(n.logFile.identifier)},d=function(){o.toggleCheckboxVisibility(),f()};return function(t,n){return(0,r.openBlock)(),(0,r.createElementBlock)("div",{class:(0,r.normalizeClass)(["file-item-container",[(0,r.unref)(c)?"active":""]])},[(0,r.createVNode)((0,r.unref)(Co),null,{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",fa,[(0,r.createElementVNode)("button",{class:"file-item-info",onKeydown:n[0]||(n[0]=function(){return(0,r.unref)(aa)&&(0,r.unref)(aa).apply(void 0,arguments)})},[(0,r.unref)(c)?(0,r.createCommentVNode)("",!0):((0,r.openBlock)(),(0,r.createElementBlock)("span",da,"Select log file")),(0,r.unref)(c)?((0,r.openBlock)(),(0,r.createElementBlock)("span",pa,"Deselect log file")):(0,r.createCommentVNode)("",!0),e.logFile.can_delete?(0,r.withDirectives)(((0,r.openBlock)(),(0,r.createElementBlock)("span",ha,[(0,r.createElementVNode)("input",{type:"checkbox",onClick:(0,r.withModifiers)(f,["stop"]),checked:(0,r.unref)(o).isChecked(e.logFile),value:(0,r.unref)(o).isChecked(e.logFile)},null,8,va)],512)),[[r.vShow,(0,r.unref)(o).checkBoxesVisibility]]):(0,r.createCommentVNode)("",!0),(0,r.createElementVNode)("span",ma,[ga,(0,r.createTextVNode)((0,r.toDisplayString)(e.logFile.name),1)]),(0,r.createElementVNode)("span",ya,[ba,(0,r.createTextVNode)((0,r.toDisplayString)(e.logFile.size_formatted),1)])],32),(0,r.createVNode)((0,r.unref)(_o),{as:"button",class:"file-dropdown-toggle group-hover:border-brand-600 group-hover:dark:border-brand-800","data-toggle-id":e.logFile.identifier,onKeydown:(0,r.unref)(la),onClick:n[1]||(n[1]=(0,r.withModifiers)((function(e){return(0,r.unref)(s)(e.target)}),["stop"]))},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(Ro),{class:"w-4 h-4 pointer-events-none"})]})),_:1},8,["data-toggle-id","onKeydown"])]),(0,r.createVNode)(r.Transition,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(Eo),{as:"div",class:(0,r.normalizeClass)(["dropdown w-48",[(0,r.unref)(l)[e.logFile.identifier]]])},{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",wa,[(0,r.createVNode)((0,r.unref)(xo),{onClick:n[2]||(n[2]=(0,r.withModifiers)((function(t){return(0,r.unref)(o).clearCacheForFile(e.logFile)}),["stop","prevent"]))},{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([n?"active":""])},[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Lo),{class:"h-4 w-4 mr-2"},null,512),[[r.vShow,!(0,r.unref)(o).clearingCache[e.logFile.identifier]]]),(0,r.withDirectives)((0,r.createVNode)(Zi,null,null,512),[[r.vShow,(0,r.unref)(o).clearingCache[e.logFile.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Clear index",512),[[r.vShow,!(0,r.unref)(o).cacheRecentlyCleared[e.logFile.identifier]&&!(0,r.unref)(o).clearingCache[e.logFile.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Clearing...",512),[[r.vShow,!(0,r.unref)(o).cacheRecentlyCleared[e.logFile.identifier]&&(0,r.unref)(o).clearingCache[e.logFile.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",Ca,"Index cleared",512),[[r.vShow,(0,r.unref)(o).cacheRecentlyCleared[e.logFile.identifier]]])],2)]})),_:1}),e.logFile.can_download?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(xo),{key:0,onClick:n[3]||(n[3]=(0,r.withModifiers)((function(){}),["stop"]))},{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("a",{href:e.logFile.download_url,download:"",class:(0,r.normalizeClass)([n?"active":""])},[(0,r.createVNode)((0,r.unref)(Ao),{class:"w-4 h-4 mr-2"}),(0,r.createTextVNode)(" Download ")],10,_a)]})),_:1})):(0,r.createCommentVNode)("",!0),e.logFile.can_delete?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[Ea,(0,r.createVNode)((0,r.unref)(xo),{onClick:(0,r.withModifiers)(u,["stop","prevent"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createVNode)((0,r.unref)(No),{class:"w-4 h-4 mr-2"}),(0,r.createTextVNode)(" Delete ")],2)]})),_:1},8,["onClick"]),(0,r.createVNode)((0,r.unref)(xo),{onClick:(0,r.withModifiers)(d,["stop"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createVNode)((0,r.unref)(No),{class:"w-4 h-4 mr-2"}),(0,r.createTextVNode)(" Delete Multiple ")],2)]})),_:1},8,["onClick"])],64)):(0,r.createCommentVNode)("",!0)])]})),_:1},8,["class"])]})),_:1})]})),_:1})],2)}}},ka=xa;var Sa=n(904),Oa=n(908),Na=n(960),Pa=n(817),Ta=n(902),Va=n(390),Ra=n(69),La=n(520),Aa={class:"checkmark w-[18px] h-[18px] bg-gray-50 dark:bg-gray-800 rounded border dark:border-gray-600 inline-flex items-center justify-center"};const ja={__name:"Checkmark",props:{checked:{type:Boolean,required:!0}},setup:function(e){return function(t,n){return(0,r.openBlock)(),(0,r.createElementBlock)("div",Aa,[e.checked?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(La),{key:0,width:"18",height:"18",class:"w-full h-full"})):(0,r.createCommentVNode)("",!0)])}}};var Ba={width:"884",height:"1279",viewBox:"0 0 884 1279",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Ia=[(0,r.createStaticVNode)(' ',14)];const Ma={},Fa=(0,Ki.Z)(Ma,[["render",function(e,t){return(0,r.openBlock)(),(0,r.createElementBlock)("svg",Ba,Ia)}]]);var Da=(0,r.createElementVNode)("span",{class:"sr-only"},"Settings dropdown",-1),Ua={class:"py-2"},$a=(0,r.createElementVNode)("div",{class:"label"},"Settings",-1),Ha=(0,r.createElementVNode)("span",{class:"ml-3"},"Shorter stack traces",-1),za=(0,r.createElementVNode)("div",{class:"divider"},null,-1),qa=(0,r.createElementVNode)("div",{class:"label"},"Actions",-1),Wa={class:"text-brand-500"},Ka={class:"text-brand-500"},Ga=(0,r.createElementVNode)("div",{class:"divider"},null,-1),Za=["innerHTML"],Ya=(0,r.createElementVNode)("div",{class:"divider"},null,-1),Ja={class:"w-4 h-4 mr-3 flex flex-col items-center"};const Qa={__name:"SiteSettingsDropdown",setup:function(e){var t=Mi(),n=Fi(),o=(0,r.ref)(!1),i=function(){$i(window.location.href),o.value=!0,setTimeout((function(){return o.value=!1}),2e3)};return(0,r.watch)((function(){return t.shorterStackTraces}),(function(){return t.loadLogs()})),function(e,a){return(0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(Co),{as:"div",class:"relative"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(_o),{as:"button",class:"menu-button"},{default:(0,r.withCtx)((function(){return[Da,(0,r.createVNode)((0,r.unref)(Sa),{class:"w-5 h-5"})]})),_:1}),(0,r.createVNode)(r.Transition,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(Eo),{as:"div",style:{"min-width":"250px"},class:"dropdown"},{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",Ua,[$a,(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(e){var n=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([n?"active":""]),onClick:a[0]||(a[0]=(0,r.withModifiers)((function(e){return(0,r.unref)(t).shorterStackTraces=!(0,r.unref)(t).shorterStackTraces}),["stop","prevent"]))},[(0,r.createVNode)(ja,{checked:(0,r.unref)(t).shorterStackTraces},null,8,["checked"]),Ha],2)]})),_:1}),za,qa,(0,r.createVNode)((0,r.unref)(xo),{onClick:(0,r.withModifiers)((0,r.unref)(n).clearCacheForAllFiles,["stop","prevent"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([t?"active":""])},[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Lo),{class:"w-4 h-4 mr-1.5"},null,512),[[r.vShow,!(0,r.unref)(n).clearingCache["*"]]]),(0,r.withDirectives)((0,r.createVNode)(Zi,{class:"w-4 h-4 mr-1.5"},null,512),[[r.vShow,(0,r.unref)(n).clearingCache["*"]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Clear indices for all files",512),[[r.vShow,!(0,r.unref)(n).cacheRecentlyCleared["*"]&&!(0,r.unref)(n).clearingCache["*"]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Please wait...",512),[[r.vShow,!(0,r.unref)(n).cacheRecentlyCleared["*"]&&(0,r.unref)(n).clearingCache["*"]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",Wa,"File indices cleared",512),[[r.vShow,(0,r.unref)(n).cacheRecentlyCleared["*"]]])],2)]})),_:1},8,["onClick"]),(0,r.createVNode)((0,r.unref)(xo),{onClick:(0,r.withModifiers)(i,["stop","prevent"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createVNode)((0,r.unref)(Oa),{class:"w-4 h-4"}),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Share this page",512),[[r.vShow,!o.value]]),(0,r.withDirectives)((0,r.createElementVNode)("span",Ka,"Link copied!",512),[[r.vShow,o.value]])],2)]})),_:1},8,["onClick"]),Ga,(0,r.createVNode)((0,r.unref)(xo),{onClick:a[1]||(a[1]=(0,r.withModifiers)((function(e){return(0,r.unref)(t).toggleTheme()}),["stop","prevent"]))},{default:(0,r.withCtx)((function(e){var n=e.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([n?"active":""])},[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Na),{class:"w-4 h-4"},null,512),[[r.vShow,(0,r.unref)(t).theme===(0,r.unref)(Ii).System]]),(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Pa),{class:"w-4 h-4"},null,512),[[r.vShow,(0,r.unref)(t).theme===(0,r.unref)(Ii).Light]]),(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Ta),{class:"w-4 h-4"},null,512),[[r.vShow,(0,r.unref)(t).theme===(0,r.unref)(Ii).Dark]]),(0,r.createElementVNode)("span",null,[(0,r.createTextVNode)("Theme: "),(0,r.createElementVNode)("span",{innerHTML:(0,r.unref)(t).theme,class:"font-semibold"},null,8,Za)])],2)]})),_:1}),(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(e){var n=e.active;return[(0,r.createElementVNode)("button",{onClick:a[2]||(a[2]=function(e){return(0,r.unref)(t).helpSlideOverOpen=!0}),class:(0,r.normalizeClass)([n?"active":""])},[(0,r.createVNode)((0,r.unref)(Va),{class:"w-4 h-4"}),(0,r.createTextVNode)(" Keyboard Shortcuts ")],2)]})),_:1}),(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("a",{href:"https://log-viewer.opcodes.io/docs",target:"_blank",class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createVNode)((0,r.unref)(Va),{class:"w-4 h-4"}),(0,r.createTextVNode)(" Documentation ")],2)]})),_:1}),(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("a",{href:"https://www.github.com/opcodesio/log-viewer",target:"_blank",class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createVNode)((0,r.unref)(Va),{class:"w-4 h-4"}),(0,r.createTextVNode)(" Help ")],2)]})),_:1}),Ya,(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("a",{href:"https://www.buymeacoffee.com/arunas",target:"_blank",class:(0,r.normalizeClass)([t?"active":""])},[(0,r.createElementVNode)("div",Ja,[(0,r.createVNode)(Fa,{class:"h-4 w-auto"})]),(0,r.createElementVNode)("strong",{class:(0,r.normalizeClass)([t?"text-white":"text-brand-500"])},"Show your support",2),(0,r.createVNode)((0,r.unref)(Ra),{class:"ml-2 w-4 h-4 opacity-75"})],2)]})),_:1})])]})),_:1})]})),_:1})]})),_:1})}}};var Xa=(e=>(e[e.None=1]="None",e[e.Focusable=2]="Focusable",e[e.Hidden=4]="Hidden",e))(Xa||{});let el=(0,r.defineComponent)({name:"Hidden",props:{as:{type:[Object,String],default:"div"},features:{type:Number,default:1}},setup:(e,{slots:t,attrs:n})=>()=>{let{features:r,...o}=e;return Ar({ourProps:{"aria-hidden":2==(2&r)||void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...4==(4&r)&&2!=(2&r)&&{display:"none"}}},theirProps:o,slot:{},attrs:n,slots:t,name:"Hidden"})}});function tl(e={},t=null,n=[]){for(let[r,o]of Object.entries(e))rl(n,nl(t,r),o);return n}function nl(e,t){return e?e+"["+t+"]":t}function rl(e,t,n){if(Array.isArray(n))for(let[r,o]of n.entries())rl(e,nl(t,r.toString()),o);else n instanceof Date?e.push([t,n.toISOString()]):"boolean"==typeof n?e.push([t,n?"1":"0"]):"string"==typeof n?e.push([t,n]):"number"==typeof n?e.push([t,`${n}`]):null==n?e.push([t,""]):tl(n,t,e)}function ol(e,t){return e===t}var il=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(il||{}),al=(e=>(e[e.Single=0]="Single",e[e.Multi=1]="Multi",e))(al||{}),ll=(e=>(e[e.Pointer=0]="Pointer",e[e.Other=1]="Other",e))(ll||{});let sl=Symbol("ListboxContext");function cl(e){let t=(0,r.inject)(sl,null);if(null===t){let t=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,cl),t}return t}let ul=(0,r.defineComponent)({name:"Listbox",emits:{"update:modelValue":e=>!0},props:{as:{type:[Object,String],default:"template"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],default:()=>ol},horizontal:{type:[Boolean],default:!1},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},name:{type:String,optional:!0},multiple:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(e,{slots:t,attrs:n,emit:o}){let i=(0,r.ref)(1),a=(0,r.ref)(null),l=(0,r.ref)(null),s=(0,r.ref)(null),c=(0,r.ref)([]),u=(0,r.ref)(""),f=(0,r.ref)(null),d=(0,r.ref)(1);function p(e=(e=>e)){let t=null!==f.value?c.value[f.value]:null,n=co(e(c.value.slice()),(e=>zr(e.dataRef.domRef))),r=t?n.indexOf(t):null;return-1===r&&(r=null),{options:n,activeOptionIndex:r}}let h=(0,r.computed)((()=>e.multiple?1:0)),[v,m]=function(e,t,n){let o=(0,r.ref)(null==n?void 0:n.value),i=(0,r.computed)((()=>void 0!==e.value));return[(0,r.computed)((()=>i.value?e.value:o.value)),function(e){return i.value||(o.value=e),null==t?void 0:t(e)}]}((0,r.computed)((()=>void 0===e.modelValue?Tr(h.value,{1:[],0:void 0}):e.modelValue)),(e=>o("update:modelValue",e)),(0,r.computed)((()=>e.defaultValue))),g={listboxState:i,value:v,mode:h,compare(t,n){if("string"==typeof e.by){let r=e.by;return(null==t?void 0:t[r])===(null==n?void 0:n[r])}return e.by(t,n)},orientation:(0,r.computed)((()=>e.horizontal?"horizontal":"vertical")),labelRef:a,buttonRef:l,optionsRef:s,disabled:(0,r.computed)((()=>e.disabled)),options:c,searchQuery:u,activeOptionIndex:f,activationTrigger:d,closeListbox(){e.disabled||1!==i.value&&(i.value=1,f.value=null)},openListbox(){e.disabled||0!==i.value&&(i.value=0)},goToOption(t,n,r){if(e.disabled||1===i.value)return;let o=p(),a=Hr(t===$r.Specific?{focus:$r.Specific,id:n}:{focus:t},{resolveItems:()=>o.options,resolveActiveIndex:()=>o.activeOptionIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.disabled});u.value="",f.value=a,d.value=null!=r?r:1,c.value=o.options},search(t){if(e.disabled||1===i.value)return;let n=""!==u.value?0:1;u.value+=t.toLowerCase();let r=(null!==f.value?c.value.slice(f.value+n).concat(c.value.slice(0,f.value+n)):c.value).find((e=>e.dataRef.textValue.startsWith(u.value)&&!e.dataRef.disabled)),o=r?c.value.indexOf(r):-1;-1===o||o===f.value||(f.value=o,d.value=1)},clearSearch(){e.disabled||1!==i.value&&""!==u.value&&(u.value="")},registerOption(e,t){let n=p((n=>[...n,{id:e,dataRef:t}]));c.value=n.options,f.value=n.activeOptionIndex},unregisterOption(e){let t=p((t=>{let n=t.findIndex((t=>t.id===e));return-1!==n&&t.splice(n,1),t}));c.value=t.options,f.value=t.activeOptionIndex,d.value=1},select(t){e.disabled||m(Tr(h.value,{0:()=>t,1:()=>{let e=(0,r.toRaw)(g.value.value).slice(),n=(0,r.toRaw)(t),o=e.findIndex((e=>g.compare(n,(0,r.toRaw)(e))));return-1===o?e.push(n):e.splice(o,1),e}}))}};ho([l,s],((e,t)=>{var n;g.closeListbox(),io(t,oo.Loose)||(e.preventDefault(),null==(n=zr(l))||n.focus())}),(0,r.computed)((()=>0===i.value))),(0,r.provide)(sl,g),Yr((0,r.computed)((()=>Tr(i.value,{0:Gr.Open,1:Gr.Closed}))));let y=(0,r.computed)((()=>{var e;return null==(e=zr(l))?void 0:e.closest("form")}));return(0,r.onMounted)((()=>{(0,r.watch)([y],(()=>{if(y.value&&void 0!==e.defaultValue)return y.value.addEventListener("reset",t),()=>{var e;null==(e=y.value)||e.removeEventListener("reset",t)};function t(){g.select(e.defaultValue)}}),{immediate:!0})})),()=>{let{name:o,modelValue:a,disabled:l,...s}=e,c={open:0===i.value,disabled:l,value:v.value};return(0,r.h)(r.Fragment,[...null!=o&&null!=v.value?tl({[o]:v.value}).map((([e,t])=>(0,r.h)(el,function(e){let t=Object.assign({},e);for(let e in t)void 0===t[e]&&delete t[e];return t}({features:Xa.Hidden,key:e,as:"input",type:"hidden",hidden:!0,readOnly:!0,name:e,value:t})))):[],Ar({ourProps:{},theirProps:{...n,...Mr(s,["defaultValue","onUpdate:modelValue","horizontal","multiple","by"])},slot:c,slots:t,attrs:n,name:"Listbox"})])}}}),fl=(0,r.defineComponent)({name:"ListboxLabel",props:{as:{type:[Object,String],default:"label"},id:{type:String,default:()=>`headlessui-listbox-label-${Dr()}`}},setup(e,{attrs:t,slots:n}){let r=cl("ListboxLabel");function o(){var e;null==(e=zr(r.buttonRef))||e.focus({preventScroll:!0})}return()=>{let i={open:0===r.listboxState.value,disabled:r.disabled.value},{id:a,...l}=e;return Ar({ourProps:{id:a,ref:r.labelRef,onClick:o},theirProps:l,slot:i,attrs:t,slots:n,name:"ListboxLabel"})}}}),dl=(0,r.defineComponent)({name:"ListboxButton",props:{as:{type:[Object,String],default:"button"},id:{type:String,default:()=>`headlessui-listbox-button-${Dr()}`}},setup(e,{attrs:t,slots:n,expose:o}){let i=cl("ListboxButton");function a(e){switch(e.key){case Ur.Space:case Ur.Enter:case Ur.ArrowDown:e.preventDefault(),i.openListbox(),(0,r.nextTick)((()=>{var e;null==(e=zr(i.optionsRef))||e.focus({preventScroll:!0}),i.value.value||i.goToOption($r.First)}));break;case Ur.ArrowUp:e.preventDefault(),i.openListbox(),(0,r.nextTick)((()=>{var e;null==(e=zr(i.optionsRef))||e.focus({preventScroll:!0}),i.value.value||i.goToOption($r.Last)}))}}function l(e){if(e.key===Ur.Space)e.preventDefault()}function s(e){i.disabled.value||(0===i.listboxState.value?(i.closeListbox(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})}))):(e.preventDefault(),i.openListbox(),function(e){requestAnimationFrame((()=>requestAnimationFrame(e)))}((()=>{var e;return null==(e=zr(i.optionsRef))?void 0:e.focus({preventScroll:!0})}))))}o({el:i.buttonRef,$el:i.buttonRef});let c=Qr((0,r.computed)((()=>({as:e.as,type:t.type}))),i.buttonRef);return()=>{var r,o;let u={open:0===i.listboxState.value,disabled:i.disabled.value,value:i.value.value},{id:f,...d}=e;return Ar({ourProps:{ref:i.buttonRef,id:f,type:c.value,"aria-haspopup":"listbox","aria-controls":null==(r=zr(i.optionsRef))?void 0:r.id,"aria-expanded":i.disabled.value?void 0:0===i.listboxState.value,"aria-labelledby":i.labelRef.value?[null==(o=zr(i.labelRef))?void 0:o.id,f].join(" "):void 0,disabled:!0===i.disabled.value||void 0,onKeydown:a,onKeyup:l,onClick:s},theirProps:d,slot:u,attrs:t,slots:n,name:"ListboxButton"})}}}),pl=(0,r.defineComponent)({name:"ListboxOptions",props:{as:{type:[Object,String],default:"ul"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:()=>`headlessui-listbox-options-${Dr()}`}},setup(e,{attrs:t,slots:n,expose:o}){let i=cl("ListboxOptions"),a=(0,r.ref)(null);function l(e){switch(a.value&&clearTimeout(a.value),e.key){case Ur.Space:if(""!==i.searchQuery.value)return e.preventDefault(),e.stopPropagation(),i.search(e.key);case Ur.Enter:if(e.preventDefault(),e.stopPropagation(),null!==i.activeOptionIndex.value){let e=i.options.value[i.activeOptionIndex.value];i.select(e.dataRef.value)}0===i.mode.value&&(i.closeListbox(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})})));break;case Tr(i.orientation.value,{vertical:Ur.ArrowDown,horizontal:Ur.ArrowRight}):return e.preventDefault(),e.stopPropagation(),i.goToOption($r.Next);case Tr(i.orientation.value,{vertical:Ur.ArrowUp,horizontal:Ur.ArrowLeft}):return e.preventDefault(),e.stopPropagation(),i.goToOption($r.Previous);case Ur.Home:case Ur.PageUp:return e.preventDefault(),e.stopPropagation(),i.goToOption($r.First);case Ur.End:case Ur.PageDown:return e.preventDefault(),e.stopPropagation(),i.goToOption($r.Last);case Ur.Escape:e.preventDefault(),e.stopPropagation(),i.closeListbox(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})}));break;case Ur.Tab:e.preventDefault(),e.stopPropagation();break;default:1===e.key.length&&(i.search(e.key),a.value=setTimeout((()=>i.clearSearch()),350))}}o({el:i.optionsRef,$el:i.optionsRef});let s=Zr(),c=(0,r.computed)((()=>null!==s?s.value===Gr.Open:0===i.listboxState.value));return()=>{var r,o,a,s;let u={open:0===i.listboxState.value},{id:f,...d}=e;return Ar({ourProps:{"aria-activedescendant":null===i.activeOptionIndex.value||null==(r=i.options.value[i.activeOptionIndex.value])?void 0:r.id,"aria-multiselectable":1===i.mode.value||void 0,"aria-labelledby":null!=(s=null==(o=zr(i.labelRef))?void 0:o.id)?s:null==(a=zr(i.buttonRef))?void 0:a.id,"aria-orientation":i.orientation.value,id:f,onKeydown:l,role:"listbox",tabIndex:0,ref:i.optionsRef},theirProps:d,slot:u,attrs:t,slots:n,features:Rr.RenderStrategy|Rr.Static,visible:c.value,name:"ListboxOptions"})}}}),hl=(0,r.defineComponent)({name:"ListboxOption",props:{as:{type:[Object,String],default:"li"},value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1},id:{type:String,default:()=>`headlessui-listbox.option-${Dr()}`}},setup(e,{slots:t,attrs:n,expose:o}){let i=cl("ListboxOption"),a=(0,r.ref)(null);o({el:a,$el:a});let l=(0,r.computed)((()=>null!==i.activeOptionIndex.value&&i.options.value[i.activeOptionIndex.value].id===e.id)),s=(0,r.computed)((()=>Tr(i.mode.value,{0:()=>i.compare((0,r.toRaw)(i.value.value),(0,r.toRaw)(e.value)),1:()=>(0,r.toRaw)(i.value.value).some((t=>i.compare((0,r.toRaw)(t),(0,r.toRaw)(e.value))))}))),c=(0,r.computed)((()=>Tr(i.mode.value,{1:()=>{var t;let n=(0,r.toRaw)(i.value.value);return(null==(t=i.options.value.find((e=>n.some((t=>i.compare((0,r.toRaw)(t),(0,r.toRaw)(e.dataRef.value)))))))?void 0:t.id)===e.id},0:()=>s.value}))),u=(0,r.computed)((()=>({disabled:e.disabled,value:e.value,textValue:"",domRef:a})));function f(t){if(e.disabled)return t.preventDefault();i.select(e.value),0===i.mode.value&&(i.closeListbox(),(0,r.nextTick)((()=>{var e;return null==(e=zr(i.buttonRef))?void 0:e.focus({preventScroll:!0})})))}function d(){if(e.disabled)return i.goToOption($r.Nothing);i.goToOption($r.Specific,e.id)}(0,r.onMounted)((()=>{var e,t;let n=null==(t=null==(e=zr(a))?void 0:e.textContent)?void 0:t.toLowerCase().trim();void 0!==n&&(u.value.textValue=n)})),(0,r.onMounted)((()=>i.registerOption(e.id,u))),(0,r.onUnmounted)((()=>i.unregisterOption(e.id))),(0,r.onMounted)((()=>{(0,r.watch)([i.listboxState,s],(()=>{0===i.listboxState.value&&(!s.value||Tr(i.mode.value,{1:()=>{c.value&&i.goToOption($r.Specific,e.id)},0:()=>{i.goToOption($r.Specific,e.id)}}))}),{immediate:!0})})),(0,r.watchEffect)((()=>{0===i.listboxState.value&&(!l.value||0!==i.activationTrigger.value&&(0,r.nextTick)((()=>{var e,t;return null==(t=null==(e=zr(a))?void 0:e.scrollIntoView)?void 0:t.call(e,{block:"nearest"})})))}));let p=mo();function h(e){p.update(e)}function v(t){!p.wasMoved(t)||e.disabled||l.value||i.goToOption($r.Specific,e.id,0)}function m(t){!p.wasMoved(t)||e.disabled||!l.value||i.goToOption($r.Nothing)}return()=>{let{disabled:r}=e,o={active:l.value,selected:s.value,disabled:r},{id:i,value:c,disabled:u,...p}=e;return Ar({ourProps:{id:i,ref:a,role:"option",tabIndex:!0===r?void 0:-1,"aria-disabled":!0===r||void 0,"aria-selected":s.value,disabled:void 0,onClick:f,onFocus:d,onPointerenter:h,onMouseenter:h,onPointermove:v,onMousemove:v,onPointerleave:m,onMouseleave:m},theirProps:p,slot:o,attrs:n,slots:t,name:"ListboxOption"})}}});var vl=n(889),ml={class:"relative mt-1"},gl={class:"block truncate"},yl={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};const bl={__name:"HostSelector",setup:function(e){var t=Nr(),n=Bo();return(0,r.watch)((function(){return n.selectedHost}),(function(e){Hi(t,"host",null!=e&&e.is_remote?e.identifier:null)})),function(e,t){return(0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(ul),{as:"div",modelValue:(0,r.unref)(n).selectedHostIdentifier,"onUpdate:modelValue":t[0]||(t[0]=function(e){return(0,r.unref)(n).selectedHostIdentifier=e})},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(fl),{class:"ml-1 block text-sm text-gray-500 dark:text-gray-400"},{default:(0,r.withCtx)((function(){return[(0,r.createTextVNode)("Select host")]})),_:1}),(0,r.createElementVNode)("div",ml,[(0,r.createVNode)((0,r.unref)(dl),{id:"hosts-toggle-button",class:"cursor-pointer relative text-gray-800 dark:text-gray-200 w-full cursor-default rounded-md border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 py-2 pl-4 pr-10 text-left hover:border-brand-600 hover:dark:border-brand-800 focus:border-brand-500 focus:outline-none focus:ring-1 focus:ring-brand-500 text-sm"},{default:(0,r.withCtx)((function(){var e;return[(0,r.createElementVNode)("span",gl,(0,r.toDisplayString)((null===(e=(0,r.unref)(n).selectedHost)||void 0===e?void 0:e.name)||"Please select a server"),1),(0,r.createElementVNode)("span",yl,[(0,r.createVNode)((0,r.unref)(vl),{class:"h-5 w-5 text-gray-400","aria-hidden":"true"})])]})),_:1}),(0,r.createVNode)(r.Transition,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(pl),{class:"absolute z-20 mt-1 max-h-60 w-full overflow-auto rounded-md shadow-md bg-white dark:bg-gray-800 py-1 border border-gray-200 dark:border-gray-700 ring-1 ring-brand ring-opacity-5 focus:outline-none text-sm"},{default:(0,r.withCtx)((function(){return[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)((0,r.unref)(n).hosts,(function(e){return(0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(hl),{as:"template",key:e.identifier,value:e.identifier},{default:(0,r.withCtx)((function(t){var n=t.active,o=t.selected;return[(0,r.createElementVNode)("li",{class:(0,r.normalizeClass)([n?"text-white bg-brand-600":"text-gray-900 dark:text-gray-300","relative cursor-default select-none py-2 pl-3 pr-9"])},[(0,r.createElementVNode)("span",{class:(0,r.normalizeClass)([o?"font-semibold":"font-normal","block truncate"])},(0,r.toDisplayString)(e.name),3),o?((0,r.openBlock)(),(0,r.createElementBlock)("span",{key:0,class:(0,r.normalizeClass)([n?"text-white":"text-brand-600","absolute inset-y-0 right-0 flex items-center pr-4"])},[(0,r.createVNode)((0,r.unref)(La),{class:"h-5 w-5","aria-hidden":"true"})],2)):(0,r.createCommentVNode)("",!0)],2)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1})])]})),_:1},8,["modelValue"])}}},wl=bl;function Cl(e){return Cl="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cl(e)}function _l(){_l=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function c(e,t,n,o){var i=t&&t.prototype instanceof d?t:d,a=Object.create(i.prototype),l=new k(o||[]);return r(a,"_invoke",{value:C(e,n,l)}),a}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var f={};function d(){}function p(){}function h(){}var v={};s(v,i,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(S([])));g&&g!==t&&n.call(g,i)&&(v=g);var y=h.prototype=d.prototype=Object.create(v);function b(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function o(r,i,a,l){var s=u(e[r],e,i);if("throw"!==s.type){var c=s.arg,f=c.value;return f&&"object"==Cl(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){o("next",e,a,l)}),(function(e){o("throw",e,a,l)})):t.resolve(f).then((function(e){c.value=e,a(c)}),(function(e){return o("throw",e,a,l)}))}l(s.arg)}var i;r(this,"_invoke",{value:function(e,n){function r(){return new t((function(t,r){o(e,n,t,r)}))}return i=i?i.then(r,r):r()}})}function C(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return O()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var l=_(a,n);if(l){if(l===f)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=u(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===f)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}function _(e,t){var n=t.method,r=e.iterator[n];if(void 0===r)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,_(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),f;var o=u(r,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,f;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function S(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,o=function t(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(l&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;x(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:S(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},e}function El(e,t,n,r,o,i,a){try{var l=e[i](a),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}function xl(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){El(i,r,o,a,l,"next",e)}function l(e){El(i,r,o,a,l,"throw",e)}a(void 0)}))}}var kl={class:"flex flex-col h-full py-5"},Sl={class:"mx-3 md:mx-0 mb-1"},Ol={class:"sm:flex sm:flex-col-reverse"},Nl={class:"font-semibold text-brand-700 dark:text-brand-600 text-2xl flex items-center"},Pl=(0,r.createElementVNode)("a",{href:"https://www.github.com/opcodesio/log-viewer",target:"_blank",class:"rounded ml-3 text-gray-400 hover:text-brand-800 dark:hover:text-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-500 dark:focus:ring-brand-700 p-1"},[(0,r.createElementVNode)("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5",viewBox:"0 0 24 24",fill:"currentColor",title:""},[(0,r.createElementVNode)("path",{d:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"})])],-1),Tl={class:"md:hidden flex-1 flex justify-end"},Vl={type:"button",class:"menu-button"},Rl={key:0},Ll=["href"],Al={key:0,class:"bg-yellow-100 dark:bg-yellow-900 bg-opacity-75 dark:bg-opacity-40 border border-yellow-300 dark:border-yellow-800 rounded-md px-2 py-1 mt-2 text-xs leading-5 text-yellow-700 dark:text-yellow-400"},jl=(0,r.createElementVNode)("code",{class:"font-mono px-2 py-1 bg-gray-100 dark:bg-gray-900 rounded"},"php artisan log-viewer:publish",-1),Bl={key:2,class:"flex justify-between items-baseline mt-6"},Il={class:"ml-1 block text-sm text-gray-500 dark:text-gray-400 truncate"},Ml={class:"text-sm text-gray-500 dark:text-gray-400"},Fl=(0,r.createElementVNode)("label",{for:"file-sort-direction",class:"sr-only"},"Sort direction",-1),Dl=[(0,r.createElementVNode)("option",{value:"desc"},"Newest first",-1),(0,r.createElementVNode)("option",{value:"asc"},"Oldest first",-1)],Ul={key:3,class:"mx-1 mt-1 text-red-600 text-xs"},$l=(0,r.createElementVNode)("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"Please select files to delete and confirm or cancel deletion.",-1),Hl=["onClick"],zl={id:"file-list-container",class:"relative h-full overflow-hidden"},ql=["id"],Wl=["onClick"],Kl={class:"file-item group"},Gl={key:0,class:"sr-only"},Zl={key:1,class:"sr-only"},Yl={class:"file-icon group-hover:hidden group-focus:hidden"},Jl={class:"file-icon hidden group-hover:inline-block group-focus:inline-block"},Ql={class:"file-name"},Xl={key:0},es=(0,r.createElementVNode)("span",{class:"text-gray-500 dark:text-gray-400"},"root",-1),ts={key:1},ns=(0,r.createElementVNode)("span",{class:"sr-only"},"Open folder options",-1),rs={class:"py-2"},os={class:"text-brand-500"},is=["href"],as=(0,r.createElementVNode)("div",{class:"divider"},null,-1),ls=["onClick","disabled"],ss={class:"folder-files pl-3 ml-1 border-l border-gray-200 dark:border-gray-800"},cs={key:0,class:"text-center text-sm text-gray-600 dark:text-gray-400"},us=(0,r.createElementVNode)("p",{class:"mb-5"},"No log files were found.",-1),fs={class:"flex items-center justify-center px-1"},ds=(0,r.createElementVNode)("div",{class:"pointer-events-none absolute z-10 bottom-0 h-4 w-full bg-gradient-to-t from-gray-100 dark:from-gray-900 to-transparent"},null,-1),ps={class:"absolute inset-y-0 left-3 right-7 lg:left-0 lg:right-0 z-10"},hs={class:"rounded-md bg-white text-gray-800 dark:bg-gray-700 dark:text-gray-200 opacity-90 w-full h-full flex items-center justify-center"};const vs={__name:"FileList",setup:function(e){var t=Nr(),n=Pr(),o=Bo(),i=Fi(),a=zi(),l=a.dropdownDirections,s=a.calculateDropdownDirection,c=function(){var e=xl(_l().mark((function e(n){return _l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!confirm("Are you sure you want to delete the log folder '".concat(n.path,"'? THIS ACTION CANNOT BE UNDONE."))){e.next=4;break}return e.next=3,i.deleteFolder(n);case 3:n.files.some((function(e){return e.identifier===i.selectedFileIdentifier}))&&Hi(t,"file",null);case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),u=function(){var e=xl(_l().mark((function e(){return _l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!confirm("Are you sure you want to delete selected log files? THIS ACTION CANNOT BE UNDONE.")){e.next=7;break}return e.next=3,i.deleteSelectedFiles();case 3:return i.filesChecked.includes(i.selectedFileIdentifier)&&Hi(t,"file",null),i.resetChecks(),e.next=7,i.loadFolders();case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return(0,r.onMounted)(xl(_l().mark((function e(){return _l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o.selectHost(n.query.host||null);case 1:case"end":return e.stop()}}),e)})))),(0,r.watch)((function(){return i.direction}),(function(){return i.loadFolders()})),function(e,a){var f,d;return(0,r.openBlock)(),(0,r.createElementBlock)("nav",kl,[(0,r.createElementVNode)("div",Sl,[(0,r.createElementVNode)("div",Ol,[(0,r.createElementVNode)("h1",Nl,[(0,r.createTextVNode)(" Log Viewer "),Pl,(0,r.createElementVNode)("span",Tl,[(0,r.createVNode)(Qa,{class:"ml-2"}),(0,r.createElementVNode)("button",Vl,[(0,r.createVNode)((0,r.unref)(ko),{class:"w-5 h-5 ml-2",onClick:(0,r.unref)(i).toggleSidebar},null,8,["onClick"])])])]),e.LogViewer.back_to_system_url?((0,r.openBlock)(),(0,r.createElementBlock)("div",Rl,[(0,r.createElementVNode)("a",{href:e.LogViewer.back_to_system_url,class:"rounded shrink inline-flex items-center text-sm text-gray-500 dark:text-gray-400 hover:text-brand-800 dark:hover:text-brand-600 focus:outline-none focus:ring-2 focus:ring-brand-500 dark:focus:ring-brand-700 mt-0"},[(0,r.createVNode)((0,r.unref)(So),{class:"h-3 w-3 mr-1.5"}),(0,r.createTextVNode)(" "+(0,r.toDisplayString)(e.LogViewer.back_to_system_label||"Back to ".concat(e.LogViewer.app_name)),1)],8,Ll)])):(0,r.createCommentVNode)("",!0)]),e.LogViewer.assets_outdated?((0,r.openBlock)(),(0,r.createElementBlock)("div",Al,[(0,r.createVNode)((0,r.unref)(Oo),{class:"h-4 w-4 mr-1 inline"}),(0,r.createTextVNode)(" Front-end assets are outdated. To update, please run "),jl])):(0,r.createCommentVNode)("",!0),(0,r.unref)(o).supportsHosts&&(0,r.unref)(o).hasRemoteHosts?((0,r.openBlock)(),(0,r.createBlock)(wl,{key:1,class:"mb-8 mt-6"})):(0,r.createCommentVNode)("",!0),(null===(f=(0,r.unref)(i).folders)||void 0===f?void 0:f.length)>0?((0,r.openBlock)(),(0,r.createElementBlock)("div",Bl,[(0,r.createElementVNode)("div",Il,"Log files on "+(0,r.toDisplayString)(null===(d=(0,r.unref)(i).selectedHost)||void 0===d?void 0:d.name),1),(0,r.createElementVNode)("div",Ml,[Fl,(0,r.withDirectives)((0,r.createElementVNode)("select",{id:"file-sort-direction",class:"select","onUpdate:modelValue":a[0]||(a[0]=function(e){return(0,r.unref)(i).direction=e})},Dl,512),[[r.vModelSelect,(0,r.unref)(i).direction]])])])):(0,r.createCommentVNode)("",!0),(0,r.unref)(i).error?((0,r.openBlock)(),(0,r.createElementBlock)("p",Ul,(0,r.toDisplayString)((0,r.unref)(i).error),1)):(0,r.createCommentVNode)("",!0)]),(0,r.withDirectives)((0,r.createElementVNode)("div",null,[$l,(0,r.createElementVNode)("div",{class:(0,r.normalizeClass)(["grid grid-flow-col pr-4 mt-2",[(0,r.unref)(i).hasFilesChecked?"justify-between":"justify-end"]])},[(0,r.withDirectives)((0,r.createElementVNode)("button",{onClick:(0,r.withModifiers)(u,["stop"]),class:"button inline-flex"},[(0,r.createVNode)((0,r.unref)(No),{class:"w-5 mr-1"}),(0,r.createTextVNode)(" Delete selected files ")],8,Hl),[[r.vShow,(0,r.unref)(i).hasFilesChecked]]),(0,r.createElementVNode)("button",{class:"button inline-flex",onClick:a[1]||(a[1]=(0,r.withModifiers)((function(e){return(0,r.unref)(i).resetChecks()}),["stop"]))},[(0,r.createTextVNode)(" Cancel "),(0,r.createVNode)((0,r.unref)(ko),{class:"w-5 ml-1"})])],2)],512),[[r.vShow,(0,r.unref)(i).checkBoxesVisibility]]),(0,r.createElementVNode)("div",zl,[(0,r.createElementVNode)("div",{class:"file-list",onScroll:a[6]||(a[6]=function(e){return(0,r.unref)(i).onScroll(e)})},[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)((0,r.unref)(i).folders,(function(e){return(0,r.openBlock)(),(0,r.createElementBlock)("div",{key:e.identifier,id:"folder-".concat(e.identifier),class:"relative folder-container"},[(0,r.createVNode)((0,r.unref)(Co),null,{default:(0,r.withCtx)((function(t){var n=t.open;return[(0,r.createElementVNode)("div",{class:(0,r.normalizeClass)(["folder-item-container",[(0,r.unref)(i).isOpen(e)?"active-folder":"",(0,r.unref)(i).shouldBeSticky(e)?"sticky "+(n?"z-20":"z-10"):""]]),onClick:function(t){return(0,r.unref)(i).toggle(e)}},[(0,r.createElementVNode)("div",Kl,[(0,r.createElementVNode)("button",{class:"file-item-info group",onKeydown:a[2]||(a[2]=function(){return(0,r.unref)(aa)&&(0,r.unref)(aa).apply(void 0,arguments)})},[(0,r.unref)(i).isOpen(e)?(0,r.createCommentVNode)("",!0):((0,r.openBlock)(),(0,r.createElementBlock)("span",Gl,"Open folder")),(0,r.unref)(i).isOpen(e)?((0,r.openBlock)(),(0,r.createElementBlock)("span",Zl,"Close folder")):(0,r.createCommentVNode)("",!0),(0,r.createElementVNode)("span",Yl,[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Po),{class:"w-5 h-5"},null,512),[[r.vShow,!(0,r.unref)(i).isOpen(e)]]),(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(To),{class:"w-5 h-5"},null,512),[[r.vShow,(0,r.unref)(i).isOpen(e)]])]),(0,r.createElementVNode)("span",Jl,[(0,r.createVNode)((0,r.unref)(Vo),{class:(0,r.normalizeClass)([(0,r.unref)(i).isOpen(e)?"rotate-90":"","transition duration-100"])},null,8,["class"])]),(0,r.createElementVNode)("span",Ql,[String(e.clean_path||"").startsWith("root")?((0,r.openBlock)(),(0,r.createElementBlock)("span",Xl,[es,(0,r.createTextVNode)((0,r.toDisplayString)(String(e.clean_path).substring(4)),1)])):((0,r.openBlock)(),(0,r.createElementBlock)("span",ts,(0,r.toDisplayString)(e.clean_path),1))])],32),(0,r.createVNode)((0,r.unref)(_o),{as:"button",class:"file-dropdown-toggle group-hover:border-brand-600 group-hover:dark:border-brand-800","data-toggle-id":e.identifier,onKeydown:(0,r.unref)(la),onClick:a[3]||(a[3]=(0,r.withModifiers)((function(e){return(0,r.unref)(s)(e.target)}),["stop"]))},{default:(0,r.withCtx)((function(){return[ns,(0,r.createVNode)((0,r.unref)(Ro),{class:"w-4 h-4 pointer-events-none"})]})),_:2},1032,["data-toggle-id","onKeydown"])]),(0,r.createVNode)(r.Transition,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:(0,r.withCtx)((function(){return[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Eo),{static:"",as:"div",class:(0,r.normalizeClass)(["dropdown w-48",[(0,r.unref)(l)[e.identifier]]])},{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",rs,[(0,r.createVNode)((0,r.unref)(xo),{onClick:(0,r.withModifiers)((function(t){return(0,r.unref)(i).clearCacheForFolder(e)}),["stop","prevent"])},{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([n?"active":""])},[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Lo),{class:"w-4 h-4 mr-2"},null,512),[[r.vShow,!(0,r.unref)(i).clearingCache[e.identifier]]]),(0,r.withDirectives)((0,r.createVNode)(Zi,{class:"w-4 h-4 mr-2"},null,512),[[r.vShow,(0,r.unref)(i).clearingCache[e.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Clear indices",512),[[r.vShow,!(0,r.unref)(i).cacheRecentlyCleared[e.identifier]&&!(0,r.unref)(i).clearingCache[e.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",null,"Clearing...",512),[[r.vShow,!(0,r.unref)(i).cacheRecentlyCleared[e.identifier]&&(0,r.unref)(i).clearingCache[e.identifier]]]),(0,r.withDirectives)((0,r.createElementVNode)("span",os,"Indices cleared",512),[[r.vShow,(0,r.unref)(i).cacheRecentlyCleared[e.identifier]]])],2)]})),_:2},1032,["onClick"]),e.can_download?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(xo),{key:0},{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("a",{href:e.download_url,download:"",onClick:a[4]||(a[4]=(0,r.withModifiers)((function(){}),["stop"])),class:(0,r.normalizeClass)([n?"active":""])},[(0,r.createVNode)((0,r.unref)(Ao),{class:"w-4 h-4 mr-2"}),(0,r.createTextVNode)(" Download ")],10,is)]})),_:2},1024)):(0,r.createCommentVNode)("",!0),e.can_delete?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[as,(0,r.createVNode)((0,r.unref)(xo),null,{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("button",{onClick:(0,r.withModifiers)((function(t){return c(e)}),["stop"]),disabled:(0,r.unref)(i).deleting[e.identifier],class:(0,r.normalizeClass)([n?"active":""])},[(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(No),{class:"w-4 h-4 mr-2"},null,512),[[r.vShow,!(0,r.unref)(i).deleting[e.identifier]]]),(0,r.withDirectives)((0,r.createVNode)(Zi,null,null,512),[[r.vShow,(0,r.unref)(i).deleting[e.identifier]]]),(0,r.createTextVNode)(" Delete ")],10,ls)]})),_:2},1024)],64)):(0,r.createCommentVNode)("",!0)])]})),_:2},1032,["class"]),[[r.vShow,n]])]})),_:2},1024)],10,Wl)]})),_:2},1024),(0,r.withDirectives)((0,r.createElementVNode)("div",ss,[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(e.files||[],(function(e){return(0,r.openBlock)(),(0,r.createBlock)(ka,{key:e.identifier,"log-file":e,onClick:function(r){return o=e.identifier,void(n.query.file&&n.query.file===o?Hi(t,"file",null):Hi(t,"file",o));var o}},null,8,["log-file","onClick"])})),128))],512),[[r.vShow,(0,r.unref)(i).isOpen(e)]])],8,ql)})),128)),0===(0,r.unref)(i).folders.length?((0,r.openBlock)(),(0,r.createElementBlock)("div",cs,[us,(0,r.createElementVNode)("div",fs,[(0,r.createElementVNode)("button",{onClick:a[5]||(a[5]=(0,r.withModifiers)((function(e){return(0,r.unref)(i).loadFolders()}),["prevent"])),class:"inline-flex items-center px-4 py-2 text-left text-sm bg-white hover:bg-gray-50 outline-brand-500 dark:outline-brand-800 text-gray-900 dark:text-gray-200 rounded-md dark:bg-gray-700 dark:hover:bg-gray-600"},[(0,r.createVNode)((0,r.unref)(jo),{class:"w-4 h-4 mr-1.5"}),(0,r.createTextVNode)(" Refresh file list ")])])])):(0,r.createCommentVNode)("",!0)],32),ds,(0,r.withDirectives)((0,r.createElementVNode)("div",ps,[(0,r.createElementVNode)("div",hs,[(0,r.createVNode)(Zi,{class:"w-14 h-14"})])],512),[[r.vShow,(0,r.unref)(i).loading]])])])}}},ms=vs;var gs=n(598),ys=n(462),bs=n(640),ws=n(307),Cs=n(36),_s=n(452),Es=n(683),xs={class:"pagination"},ks={class:"previous"},Ss=["disabled"],Os=(0,r.createElementVNode)("span",{class:"sm:hidden"},"Previous page",-1),Ns={class:"sm:hidden border-transparent text-gray-500 dark:text-gray-400 border-t-2 pt-3 px-4 inline-flex items-center text-sm font-medium"},Ps={class:"pages"},Ts={key:0,class:"border-brand-500 text-brand-600 dark:border-brand-600 dark:text-brand-500","aria-current":"page"},Vs={key:1},Rs=["onClick"],Ls={class:"next"},As=["disabled"],js=(0,r.createElementVNode)("span",{class:"sm:hidden"},"Next page",-1);const Bs={__name:"Pagination",props:{loading:{type:Boolean,required:!0},short:{type:Boolean,default:!1}},setup:function(e){var t=Li(),n=Nr(),o=Pr(),i=((0,r.computed)((function(){return Number(o.query.page)||1})),function(e){e<1&&(e=1),t.pagination&&e>t.pagination.last_page&&(e=t.pagination.last_page),Hi(n,"page",e>1?Number(e):null)}),a=function(){return i(t.page+1)},l=function(){return i(t.page-1)};return function(n,o){return(0,r.openBlock)(),(0,r.createElementBlock)("nav",xs,[(0,r.createElementVNode)("div",ks,[1!==(0,r.unref)(t).page?((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:0,onClick:l,disabled:e.loading,rel:"prev"},[(0,r.createVNode)((0,r.unref)(So),{class:"h-5 w-5"}),Os],8,Ss)):(0,r.createCommentVNode)("",!0)]),(0,r.createElementVNode)("div",Ns,[(0,r.createElementVNode)("span",null,(0,r.toDisplayString)((0,r.unref)(t).page),1)]),(0,r.createElementVNode)("div",Ps,[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(e.short?(0,r.unref)(t).linksShort:(0,r.unref)(t).links,(function(e){return(0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,null,[e.active?((0,r.openBlock)(),(0,r.createElementBlock)("button",Ts,(0,r.toDisplayString)(Number(e.label).toLocaleString()),1)):"..."===e.label?((0,r.openBlock)(),(0,r.createElementBlock)("span",Vs,(0,r.toDisplayString)(e.label),1)):((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:2,onClick:function(t){return i(Number(e.label))},class:"border-transparent text-gray-500 dark:text-gray-400 hover:text-gray-700 hover:border-gray-300 dark:hover:text-gray-300 dark:hover:border-gray-400"},(0,r.toDisplayString)(Number(e.label).toLocaleString()),9,Rs))],64)})),256))]),(0,r.createElementVNode)("div",Ls,[(0,r.unref)(t).hasMorePages?((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:0,onClick:a,disabled:e.loading,rel:"next"},[js,(0,r.createVNode)((0,r.unref)(Es),{class:"h-5 w-5"})],8,As)):(0,r.createCommentVNode)("",!0)])])}}},Is=Bs;var Ms=n(246),Fs={class:"flex items-center"},Ds={class:"opacity-90 mr-1"},Us={class:"font-semibold"},$s={class:"opacity-90 mr-1"},Hs={class:"font-semibold"},zs={key:2,class:"opacity-90"},qs={key:3,class:"opacity-90"},Ws={class:"py-2"},Ks={class:"label flex justify-between"},Gs={key:0,class:"no-results"},Zs={class:"flex-1 inline-flex justify-between"},Ys={class:"log-count"};const Js={__name:"LevelButtons",setup:function(e){var t=Mi(),n=ji();return(0,r.watch)((function(){return n.selectedLevels}),(function(){return t.loadLogs()})),function(e,o){return(0,r.openBlock)(),(0,r.createElementBlock)("div",Fs,[(0,r.createVNode)((0,r.unref)(Co),{as:"div",class:"mr-5 relative log-levels-selector"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(_o),{as:"button",id:"severity-dropdown-toggle",class:(0,r.normalizeClass)(["dropdown-toggle badge none",(0,r.unref)(n).levelsSelected.length>0?"active":""])},{default:(0,r.withCtx)((function(){return[(0,r.unref)(n).levelsSelected.length>2?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[(0,r.createElementVNode)("span",Ds,(0,r.toDisplayString)((0,r.unref)(n).totalResultsSelected.toLocaleString()+((0,r.unref)(t).hasMoreResults?"+":""))+" entries in",1),(0,r.createElementVNode)("strong",Us,(0,r.toDisplayString)((0,r.unref)(n).levelsSelected[0].level_name)+" + "+(0,r.toDisplayString)((0,r.unref)(n).levelsSelected.length-1)+" more",1)],64)):(0,r.unref)(n).levelsSelected.length>0?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[(0,r.createElementVNode)("span",$s,(0,r.toDisplayString)((0,r.unref)(n).totalResultsSelected.toLocaleString()+((0,r.unref)(t).hasMoreResults?"+":""))+" entries in",1),(0,r.createElementVNode)("strong",Hs,(0,r.toDisplayString)((0,r.unref)(n).levelsSelected.map((function(e){return e.level_name})).join(", ")),1)],64)):(0,r.unref)(n).levelsFound.length>0?((0,r.openBlock)(),(0,r.createElementBlock)("span",zs,(0,r.toDisplayString)((0,r.unref)(n).totalResults.toLocaleString()+((0,r.unref)(t).hasMoreResults?"+":""))+" entries found. None selected",1)):((0,r.openBlock)(),(0,r.createElementBlock)("span",qs,"No entries found")),(0,r.createVNode)((0,r.unref)(Ms),{class:"w-4 h-4"})]})),_:1},8,["class"]),(0,r.createVNode)(r.Transition,{"leave-active-class":"transition ease-in duration-100","leave-from-class":"opacity-100 scale-100","leave-to-class":"opacity-0 scale-90","enter-active-class":"transition ease-out duration-100","enter-from-class":"opacity-0 scale-90","enter-to-class":"opacity-100 scale-100"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(Eo),{as:"div",class:"dropdown down left min-w-[240px]"},{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",Ws,[(0,r.createElementVNode)("div",Ks,[(0,r.createTextVNode)(" Severity "),(0,r.unref)(n).levelsFound.length>0?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[(0,r.unref)(n).levelsSelected.length===(0,r.unref)(n).levelsFound.length?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(xo),{key:0,onClick:(0,r.withModifiers)((0,r.unref)(n).deselectAllLevels,["stop"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("a",{class:(0,r.normalizeClass)(["inline-link px-2 -mr-2 py-1 -my-1 rounded-md cursor-pointer text-brand-700 dark:text-brand-500 font-normal",[t?"active":""]])}," Deselect all ",2)]})),_:1},8,["onClick"])):((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(xo),{key:1,onClick:(0,r.withModifiers)((0,r.unref)(n).selectAllLevels,["stop"])},{default:(0,r.withCtx)((function(e){var t=e.active;return[(0,r.createElementVNode)("a",{class:(0,r.normalizeClass)(["inline-link px-2 -mr-2 py-1 -my-1 rounded-md cursor-pointer text-brand-700 dark:text-brand-500 font-normal",[t?"active":""]])}," Select all ",2)]})),_:1},8,["onClick"]))],64)):(0,r.createCommentVNode)("",!0)]),0===(0,r.unref)(n).levelsFound.length?((0,r.openBlock)(),(0,r.createElementBlock)("div",Gs,"There are no severity filters to display because no entries have been found.")):((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,{key:1},(0,r.renderList)((0,r.unref)(n).levelsFound,(function(e){return(0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(xo),{onClick:(0,r.withModifiers)((function(t){return(0,r.unref)(n).toggleLevel(e.level)}),["stop","prevent"])},{default:(0,r.withCtx)((function(t){var n=t.active;return[(0,r.createElementVNode)("button",{class:(0,r.normalizeClass)([n?"active":""])},[(0,r.createVNode)(ja,{class:"checkmark mr-2.5",checked:e.selected},null,8,["checked"]),(0,r.createElementVNode)("span",Zs,[(0,r.createElementVNode)("span",{class:(0,r.normalizeClass)(["log-level",e.level_class])},(0,r.toDisplayString)(e.level_name),3),(0,r.createElementVNode)("span",Ys,(0,r.toDisplayString)(Number(e.count).toLocaleString()),1)])],2)]})),_:2},1032,["onClick"])})),256))])]})),_:1})]})),_:1})]})),_:1})])}}};var Qs=n(447),Xs={class:"flex-1"},ec={class:"prefix-icon"},tc=(0,r.createElementVNode)("label",{for:"query",class:"sr-only"},"Search",-1),nc={class:"relative flex-1 m-1"},rc=["onKeydown"],oc={class:"clear-search"},ic={class:"submit-search"},ac={key:0,disabled:"disabled"},lc={class:"hidden xl:inline ml-1"},sc={class:"hidden xl:inline ml-1"},cc={class:"relative h-0 w-full overflow-visible"},uc=["innerHTML"];const fc={__name:"SearchInput",setup:function(e){var t=Ri(),n=Mi(),o=Nr(),i=Pr(),a=(0,r.computed)((function(){return n.selectedFile})),l=(0,r.ref)(i.query.query||""),s=function(){var e;Hi(o,"query",""===l.value?null:l.value),null===(e=document.getElementById("query-submit"))||void 0===e||e.focus()},c=function(){l.value="",s()};return(0,r.watch)((function(){return i.query.query}),(function(e){return l.value=e||""})),function(e,o){return(0,r.openBlock)(),(0,r.createElementBlock)("div",Xs,[(0,r.createElementVNode)("div",{class:(0,r.normalizeClass)(["search",{"has-error":(0,r.unref)(n).error}])},[(0,r.createElementVNode)("div",ec,[tc,(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(Qs),{class:"h-4 w-4"},null,512),[[r.vShow,!(0,r.unref)(n).hasMoreResults]]),(0,r.withDirectives)((0,r.createVNode)(Zi,{class:"w-4 h-4"},null,512),[[r.vShow,(0,r.unref)(n).hasMoreResults]])]),(0,r.createElementVNode)("div",nc,[(0,r.withDirectives)((0,r.createElementVNode)("input",{"onUpdate:modelValue":o[0]||(o[0]=function(e){return l.value=e}),name:"query",id:"query",type:"text",onKeydown:[(0,r.withKeys)(s,["enter"]),o[1]||(o[1]=(0,r.withKeys)((function(e){return e.target.blur()}),["esc"]))]},null,40,rc),[[r.vModelText,l.value]]),(0,r.withDirectives)((0,r.createElementVNode)("div",oc,[(0,r.createElementVNode)("button",{onClick:c},[(0,r.createVNode)((0,r.unref)(ko),{class:"h-4 w-4"})])],512),[[r.vShow,(0,r.unref)(t).hasQuery]])]),(0,r.createElementVNode)("div",ic,[(0,r.unref)(n).hasMoreResults?((0,r.openBlock)(),(0,r.createElementBlock)("button",ac,[(0,r.createElementVNode)("span",null,[(0,r.createTextVNode)("Searching"),(0,r.createElementVNode)("span",lc,(0,r.toDisplayString)((0,r.unref)(a)?(0,r.unref)(a).name:"all files"),1),(0,r.createTextVNode)("...")])])):((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:1,onClick:s,id:"query-submit"},[(0,r.createElementVNode)("span",null,[(0,r.createTextVNode)("Search"),(0,r.createElementVNode)("span",sc,(0,r.toDisplayString)((0,r.unref)(a)?'in "'+(0,r.unref)(a).name+'"':"all files"),1)]),(0,r.createVNode)((0,r.unref)(Es),{class:"h-4 w-4"})]))])],2),(0,r.createElementVNode)("div",cc,[(0,r.withDirectives)((0,r.createElementVNode)("div",{class:"search-progress-bar",style:(0,r.normalizeStyle)({width:(0,r.unref)(n).percentScanned+"%"})},null,4),[[r.vShow,(0,r.unref)(n).hasMoreResults]])]),(0,r.withDirectives)((0,r.createElementVNode)("p",{class:"mt-1 text-red-600 text-xs",innerHTML:(0,r.unref)(n).error},null,8,uc),[[r.vShow,(0,r.unref)(n).error]])])}}},dc=fc;var pc=n(923),hc=n(968),vc=["onClick"],mc={class:"sr-only"},gc={class:"text-green-600 dark:text-green-500 hidden md:inline"};const yc={__name:"LogCopyButton",props:{log:{type:Object,required:!0}},setup:function(e){var t=e,n=(0,r.ref)(!1),o=function(){$i(t.log.url),n.value=!0,setTimeout((function(){return n.value=!1}),1e3)};return function(t,i){return(0,r.openBlock)(),(0,r.createElementBlock)("button",{class:"log-link group",onClick:(0,r.withModifiers)(o,["stop"]),onKeydown:i[0]||(i[0]=function(){return(0,r.unref)(ia)&&(0,r.unref)(ia).apply(void 0,arguments)}),title:"Copy link to this log entry"},[(0,r.createElementVNode)("span",mc,"Log index "+(0,r.toDisplayString)(e.log.index)+". Click the button to copy link to this log entry.",1),(0,r.withDirectives)((0,r.createElementVNode)("span",{class:"hidden md:inline group-hover:underline"},(0,r.toDisplayString)(Number(e.log.index).toLocaleString()),513),[[r.vShow,!n.value]]),(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(pc),{class:"md:opacity-75 group-hover:opacity-100"},null,512),[[r.vShow,!n.value]]),(0,r.withDirectives)((0,r.createVNode)((0,r.unref)(hc),{class:"text-green-600 dark:text-green-500 md:hidden"},null,512),[[r.vShow,n.value]]),(0,r.withDirectives)((0,r.createElementVNode)("span",gc,"Copied!",512),[[r.vShow,n.value]])],40,vc)}}};var bc={class:"h-full w-full py-5 log-list"},wc={class:"flex flex-col h-full w-full md:mx-3 mb-4"},Cc={class:"md:px-4 mb-4 flex flex-col-reverse lg:flex-row items-start"},_c={key:0,class:"flex items-center mr-5 mt-3 md:mt-0"},Ec={class:"w-full lg:w-auto flex-1 flex justify-end min-h-[38px]"},xc={class:"hidden md:block ml-5"},kc={class:"hidden md:block"},Sc={class:"md:hidden"},Oc={type:"button",class:"menu-button"},Nc={key:0,class:"relative overflow-hidden h-full text-sm"},Pc={class:"mx-2 mt-1 mb-2 text-right lg:mx-0 lg:mt-0 lg:mb-0 lg:absolute lg:top-2 lg:right-6 z-20 text-sm text-gray-500 dark:text-gray-400"},Tc=(0,r.createElementVNode)("label",{for:"log-sort-direction",class:"sr-only"},"Sort direction",-1),Vc=[(0,r.createElementVNode)("option",{value:"desc"},"Newest first",-1),(0,r.createElementVNode)("option",{value:"asc"},"Oldest first",-1)],Rc=(0,r.createElementVNode)("label",{for:"items-per-page",class:"sr-only"},"Items per page",-1),Lc=[(0,r.createStaticVNode)('10 items per page 25 items per page 50 items per page 100 items per page 250 items per page 500 items per page ',6)],Ac={class:"inline-block min-w-full max-w-full align-middle"},jc={class:"table-fixed min-w-full max-w-full border-separate",style:{"border-spacing":"0"}},Bc=(0,r.createElementVNode)("thead",{class:"bg-gray-50"},[(0,r.createElementVNode)("tr",null,[(0,r.createElementVNode)("th",{scope:"col",class:"w-[120px] hidden lg:table-cell"},[(0,r.createElementVNode)("div",{class:"pl-2"},"Level")]),(0,r.createElementVNode)("th",{scope:"col",class:"w-[180px] hidden lg:table-cell"},"Time"),(0,r.createElementVNode)("th",{scope:"col",class:"w-[110px] hidden lg:table-cell"},"Env"),(0,r.createElementVNode)("th",{scope:"col",class:"hidden lg:table-cell"},"Description"),(0,r.createElementVNode)("th",{scope:"col",class:"hidden lg:table-cell"},[(0,r.createElementVNode)("span",{class:"sr-only"},"Log index")])])],-1),Ic=["id","data-index"],Mc=["onClick"],Fc={class:"log-level truncate"},Dc={class:"flex items-center lg:pl-2"},Uc=["aria-expanded"],$c={key:0,class:"sr-only"},Hc={key:1,class:"sr-only"},zc={class:"w-full h-full group-hover:hidden group-focus:hidden"},qc={class:"w-full h-full hidden group-hover:inline-block group-focus:inline-block"},Wc={class:"whitespace-nowrap text-gray-900 dark:text-gray-200"},Kc=["innerHTML"],Gc={class:"lg:hidden"},Zc=["innerHTML"],Yc=["innerHTML"],Jc={class:"whitespace-nowrap text-gray-500 dark:text-gray-300 dark:opacity-90 text-xs hidden lg:table-cell"},Qc={colspan:"6"},Xc={class:"lg:hidden flex justify-between px-2 pt-2 pb-1 text-xs"},eu={class:"flex-1"},tu=(0,r.createElementVNode)("span",{class:"font-semibold"},"Time:",-1),nu={class:"flex-1"},ru=(0,r.createElementVNode)("span",{class:"font-semibold"},"Env:",-1),ou=["innerHTML"],iu=(0,r.createElementVNode)("p",{class:"mx-2 lg:mx-8 pt-2 border-t font-semibold text-gray-700 dark:text-gray-400"},"Context:",-1),au=["innerHTML"],lu={key:1,class:"py-4 px-8 text-gray-500 italic"},su={key:1,class:"log-group"},cu={colspan:"6"},uu={class:"bg-white text-gray-600 dark:bg-gray-800 dark:text-gray-200 p-12"},fu=(0,r.createElementVNode)("div",{class:"text-center font-semibold"},"No results",-1),du={class:"text-center mt-6"},pu=["onClick"],hu={class:"absolute inset-0 top-9 md:px-4 z-20"},vu={class:"rounded-md bg-white text-gray-800 dark:bg-gray-700 dark:text-gray-200 opacity-90 w-full h-full flex items-center justify-center"},mu={key:1,class:"flex h-full items-center justify-center text-gray-600 dark:text-gray-400"},gu={key:0},yu={key:1},bu={key:2,class:"md:px-4"},wu={class:"hidden lg:block"},Cu={class:"lg:hidden"};const _u={__name:"LogList",setup:function(e){var t=Nr(),n=Fi(),o=Mi(),i=Ri(),a=Li(),l=ji(),s=(0,r.computed)((function(){return n.selectedFile||String(i.query||"").trim().length>0})),c=(0,r.computed)((function(){return o.logs&&(o.logs.length>0||!o.hasMoreResults)&&(o.selectedFile||i.hasQuery)})),u=function(e){return JSON.stringify(e,(function(e,t){return"string"==typeof t?t.replaceAll("\n"," "):t}),2)},f=function(){Hi(t,"file",null)},d=function(){Hi(t,"query",null)};return(0,r.watch)([function(){return o.direction},function(){return o.resultsPerPage}],(function(){return o.loadLogs()})),function(e,t){var p,h;return(0,r.openBlock)(),(0,r.createElementBlock)("div",bc,[(0,r.createElementVNode)("div",wc,[(0,r.createElementVNode)("div",Cc,[(0,r.unref)(s)?((0,r.openBlock)(),(0,r.createElementBlock)("div",_c,[(0,r.createVNode)(Js)])):(0,r.createCommentVNode)("",!0),(0,r.createElementVNode)("div",Ec,[(0,r.createVNode)(dc),(0,r.createElementVNode)("div",xc,[(0,r.createElementVNode)("button",{onClick:t[0]||(t[0]=function(e){return(0,r.unref)(o).loadLogs()}),id:"reload-logs-button",title:"Reload current results",class:"menu-button"},[(0,r.createVNode)((0,r.unref)(gs),{class:"w-5 h-5"})])]),(0,r.createElementVNode)("div",kc,[(0,r.createVNode)(Qa,{class:"ml-2",id:"desktop-site-settings"})]),(0,r.createElementVNode)("div",Sc,[(0,r.createElementVNode)("button",Oc,[(0,r.createVNode)((0,r.unref)(ys),{class:"w-5 h-5 ml-2",onClick:(0,r.unref)(n).toggleSidebar},null,8,["onClick"])])])])]),(0,r.unref)(c)?((0,r.openBlock)(),(0,r.createElementBlock)("div",Nc,[(0,r.createElementVNode)("div",Pc,[Tc,(0,r.withDirectives)((0,r.createElementVNode)("select",{id:"log-sort-direction","onUpdate:modelValue":t[1]||(t[1]=function(e){return(0,r.unref)(o).direction=e}),class:"select mr-4"},Vc,512),[[r.vModelSelect,(0,r.unref)(o).direction]]),Rc,(0,r.withDirectives)((0,r.createElementVNode)("select",{id:"items-per-page","onUpdate:modelValue":t[2]||(t[2]=function(e){return(0,r.unref)(o).resultsPerPage=e}),class:"select"},Lc,512),[[r.vModelSelect,(0,r.unref)(o).resultsPerPage]])]),(0,r.createElementVNode)("div",{class:"log-item-container h-full overflow-y-auto md:px-4",onScroll:t[5]||(t[5]=function(e){return(0,r.unref)(o).onScroll(e)})},[(0,r.createElementVNode)("div",Ac,[(0,r.createElementVNode)("table",jc,[Bc,(0,r.unref)(o).logs&&(0,r.unref)(o).logs.length>0?((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,{key:0},(0,r.renderList)((0,r.unref)(o).logs,(function(n,a){return(0,r.openBlock)(),(0,r.createElementBlock)("tbody",{key:a,class:(0,r.normalizeClass)([0===a?"first":"","log-group"]),id:"tbody-".concat(a),"data-index":a},[(0,r.createElementVNode)("tr",{onClick:function(e){return(0,r.unref)(o).toggle(a)},class:(0,r.normalizeClass)(["log-item group",n.level_class,(0,r.unref)(o).isOpen(a)?"active":"",(0,r.unref)(o).shouldBeSticky(a)?"sticky z-2":""]),style:(0,r.normalizeStyle)({top:(0,r.unref)(o).stackTops[a]||0})},[(0,r.createElementVNode)("td",Fc,[(0,r.createElementVNode)("div",Dc,[(0,r.createElementVNode)("button",{"aria-expanded":(0,r.unref)(o).isOpen(a),onKeydown:t[3]||(t[3]=function(){return(0,r.unref)(oa)&&(0,r.unref)(oa).apply(void 0,arguments)}),class:"log-level-icon mr-2 opacity-75 w-5 h-5 hidden lg:block group focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-brand-500 rounded-md"},[(0,r.unref)(o).isOpen(a)?(0,r.createCommentVNode)("",!0):((0,r.openBlock)(),(0,r.createElementBlock)("span",$c,"Expand log entry")),(0,r.unref)(o).isOpen(a)?((0,r.openBlock)(),(0,r.createElementBlock)("span",Hc,"Collapse log entry")):(0,r.createCommentVNode)("",!0),(0,r.createElementVNode)("span",zc,["danger"===n.level_class?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(bs),{key:0})):"warning"===n.level_class?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(ws),{key:1})):((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(Cs),{key:2}))]),(0,r.createElementVNode)("span",qc,[(0,r.createVNode)((0,r.unref)(_s),{class:(0,r.normalizeClass)([(0,r.unref)(o).isOpen(a)?"rotate-90":"","transition duration-100"])},null,8,["class"])])],40,Uc),(0,r.createElementVNode)("span",null,(0,r.toDisplayString)(n.level_name),1)])]),(0,r.createElementVNode)("td",Wc,[(0,r.createElementVNode)("span",{class:"hidden lg:inline",innerHTML:(0,r.unref)(Di)(n.datetime,(0,r.unref)(i).query)},null,8,Kc),(0,r.createElementVNode)("span",Gc,(0,r.toDisplayString)(n.time),1)]),(0,r.createElementVNode)("td",{class:"whitespace-nowrap text-gray-500 dark:text-gray-300 dark:opacity-90 hidden lg:table-cell",innerHTML:(0,r.unref)(Di)(n.environment,(0,r.unref)(i).query)},null,8,Zc),(0,r.createElementVNode)("td",{class:"max-w-[1px] w-full truncate text-gray-500 dark:text-gray-300 dark:opacity-90",innerHTML:(0,r.unref)(Di)(n.text,(0,r.unref)(i).query)},null,8,Yc),(0,r.createElementVNode)("td",Jc,[(0,r.createVNode)(yc,{log:n,class:"pr-2 large-screen"},null,8,["log"])])],14,Mc),(0,r.withDirectives)((0,r.createElementVNode)("tr",null,[(0,r.createElementVNode)("td",Qc,[(0,r.createElementVNode)("div",Xc,[(0,r.createElementVNode)("div",eu,[tu,(0,r.createTextVNode)(" "+(0,r.toDisplayString)(n.datetime),1)]),(0,r.createElementVNode)("div",nu,[ru,(0,r.createTextVNode)(" "+(0,r.toDisplayString)(n.environment),1)]),(0,r.createElementVNode)("div",null,[(0,r.createVNode)(yc,{log:n},null,8,["log"])])]),(0,r.createElementVNode)("pre",{class:"log-stack",innerHTML:(0,r.unref)(Di)(n.full_text,(0,r.unref)(i).query)},null,8,ou),n.contexts&&n.contexts.length>0?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[iu,((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(n.contexts,(function(e){return(0,r.openBlock)(),(0,r.createElementBlock)("pre",{class:"log-stack",innerHTML:u(e)},null,8,au)})),256))],64)):(0,r.createCommentVNode)("",!0),n.full_text_incomplete?((0,r.openBlock)(),(0,r.createElementBlock)("div",lu,[(0,r.createTextVNode)(" The contents of this log have been cut short to the first "+(0,r.toDisplayString)(e.LogViewer.max_log_size_formatted)+". The full size of this log entry is ",1),(0,r.createElementVNode)("strong",null,(0,r.toDisplayString)(n.full_text_length_formatted),1)])):(0,r.createCommentVNode)("",!0)])],512),[[r.vShow,(0,r.unref)(o).isOpen(a)]])],10,Ic)})),128)):((0,r.openBlock)(),(0,r.createElementBlock)("tbody",su,[(0,r.createElementVNode)("tr",null,[(0,r.createElementVNode)("td",cu,[(0,r.createElementVNode)("div",uu,[fu,(0,r.createElementVNode)("div",du,[(null===(p=(0,r.unref)(i).query)||void 0===p?void 0:p.length)>0?((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:0,class:"px-3 py-2 border dark:border-gray-700 text-gray-800 dark:text-gray-200 hover:border-brand-600 dark:hover:border-brand-700 rounded-md",onClick:d},"Clear search query ")):(0,r.createCommentVNode)("",!0),(null===(h=(0,r.unref)(i).query)||void 0===h?void 0:h.length)>0&&(0,r.unref)(n).selectedFile?((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:1,class:"px-3 ml-3 py-2 border dark:border-gray-700 text-gray-800 dark:text-gray-200 hover:border-brand-600 dark:hover:border-brand-700 rounded-md",onClick:(0,r.withModifiers)(f,["prevent"])},"Search all files ",8,pu)):(0,r.createCommentVNode)("",!0),(0,r.unref)(l).levelsFound.length>0&&0===(0,r.unref)(l).levelsSelected.length?((0,r.openBlock)(),(0,r.createElementBlock)("button",{key:2,class:"px-3 ml-3 py-2 border dark:border-gray-700 text-gray-800 dark:text-gray-200 hover:border-brand-600 dark:hover:border-brand-700 rounded-md",onClick:t[4]||(t[4]=function(){var e;return(0,r.unref)(l).selectAllLevels&&(e=(0,r.unref)(l)).selectAllLevels.apply(e,arguments)})},"Select all severities ")):(0,r.createCommentVNode)("",!0)])])])])]))])])],32),(0,r.withDirectives)((0,r.createElementVNode)("div",hu,[(0,r.createElementVNode)("div",vu,[(0,r.createVNode)(Zi,{class:"w-14 h-14"})])],512),[[r.vShow,(0,r.unref)(o).loading&&(!(0,r.unref)(o).isMobile||!(0,r.unref)(n).sidebarOpen)]])])):((0,r.openBlock)(),(0,r.createElementBlock)("div",mu,[(0,r.unref)(o).hasMoreResults?((0,r.openBlock)(),(0,r.createElementBlock)("span",gu,"Searching...")):((0,r.openBlock)(),(0,r.createElementBlock)("span",yu,"Select a file or start searching..."))])),(0,r.unref)(c)&&(0,r.unref)(a).hasPages?((0,r.openBlock)(),(0,r.createElementBlock)("div",bu,[(0,r.createElementVNode)("div",wu,[(0,r.createVNode)(Is,{loading:(0,r.unref)(o).loading},null,8,["loading"])]),(0,r.createElementVNode)("div",Cu,[(0,r.createVNode)(Is,{loading:(0,r.unref)(o).loading,short:!0},null,8,["loading"])])])):(0,r.createCommentVNode)("",!0)])])}}},Eu=_u;var xu={width:"4169",height:"913",viewBox:"0 0 4169 913",fill:"none",xmlns:"http://www.w3.org/2000/svg"},ku=[(0,r.createStaticVNode)(' ',19)];const Su={},Ou=(0,Ki.Z)(Su,[["render",function(e,t){return(0,r.openBlock)(),(0,r.createElementBlock)("svg",xu,ku)}]]);function Nu(){let e=[],t=[],n={enqueue(e){t.push(e)},addEventListener:(e,t,r,o)=>(e.addEventListener(t,r,o),n.add((()=>e.removeEventListener(t,r,o)))),requestAnimationFrame(...e){let t=requestAnimationFrame(...e);n.add((()=>cancelAnimationFrame(t)))},nextFrame(...e){n.requestAnimationFrame((()=>{n.requestAnimationFrame(...e)}))},setTimeout(...e){let t=setTimeout(...e);n.add((()=>clearTimeout(t)))},add(t){e.push(t)},style(e,t,n){let r=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:n}),this.add((()=>{Object.assign(e.style,{[t]:r})}))},dispose(){for(let t of e.splice(0))t()},async workQueue(){for(let e of t.splice(0))await e()}};return n}function Pu(e,...t){e&&t.length>0&&e.classList.add(...t)}function Tu(e,...t){e&&t.length>0&&e.classList.remove(...t)}var Vu=(e=>(e.Finished="finished",e.Cancelled="cancelled",e))(Vu||{});function Ru(e,t,n,r,o,i){let a=Nu(),l=void 0!==i?function(e){let t={called:!1};return(...n)=>{if(!t.called)return t.called=!0,e(...n)}}(i):()=>{};return Tu(e,...o),Pu(e,...t,...n),a.nextFrame((()=>{Tu(e,...n),Pu(e,...r),a.add(function(e,t){let n=Nu();if(!e)return n.dispose;let{transitionDuration:r,transitionDelay:o}=getComputedStyle(e),[i,a]=[r,o].map((e=>{let[t=0]=e.split(",").filter(Boolean).map((e=>e.includes("ms")?parseFloat(e):1e3*parseFloat(e))).sort(((e,t)=>t-e));return t}));return 0!==i?n.setTimeout((()=>t("finished")),i+a):t("finished"),n.add((()=>t("cancelled"))),n.dispose}(e,(n=>(Tu(e,...r,...t),Pu(e,...o),l(n)))))})),a.add((()=>Tu(e,...t,...n,...r,...o))),a.add((()=>l("cancelled"))),a.dispose}function Lu(e=""){return e.split(" ").filter((e=>e.trim().length>1))}let Au=Symbol("TransitionContext");var ju=(e=>(e.Visible="visible",e.Hidden="hidden",e))(ju||{});let Bu=Symbol("NestingContext");function Iu(e){return"children"in e?Iu(e.children):e.value.filter((({state:e})=>"visible"===e)).length>0}function Mu(e){let t=(0,r.ref)([]),n=(0,r.ref)(!1);function o(r,o=Lr.Hidden){let i=t.value.findIndex((({id:e})=>e===r));-1!==i&&(Tr(o,{[Lr.Unmount](){t.value.splice(i,1)},[Lr.Hidden](){t.value[i].state="hidden"}}),!Iu(t)&&n.value&&(null==e||e()))}return(0,r.onMounted)((()=>n.value=!0)),(0,r.onUnmounted)((()=>n.value=!1)),{children:t,register:function(e){let n=t.value.find((({id:t})=>t===e));return n?"visible"!==n.state&&(n.state="visible"):t.value.push({id:e,state:"visible"}),()=>o(e,Lr.Unmount)},unregister:o}}let Fu=Rr.RenderStrategy,Du=(0,r.defineComponent)({props:{as:{type:[Object,String],default:"div"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:""},enterFrom:{type:[String],default:""},enterTo:{type:[String],default:""},entered:{type:[String],default:""},leave:{type:[String],default:""},leaveFrom:{type:[String],default:""},leaveTo:{type:[String],default:""}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(e,{emit:t,attrs:n,slots:o,expose:i}){if(null===(0,r.inject)(Au,null)&&null!==Zr())return()=>(0,r.h)($u,{...e,onBeforeEnter:()=>t("beforeEnter"),onAfterEnter:()=>t("afterEnter"),onBeforeLeave:()=>t("beforeLeave"),onAfterLeave:()=>t("afterLeave")},o);let a=(0,r.ref)(null),l=(0,r.ref)("visible"),s=(0,r.computed)((()=>e.unmount?Lr.Unmount:Lr.Hidden));i({el:a,$el:a});let{show:c,appear:u}=function(){let e=(0,r.inject)(Au,null);if(null===e)throw new Error("A is used but it is missing a parent .");return e}(),{register:f,unregister:d}=function(){let e=(0,r.inject)(Bu,null);if(null===e)throw new Error("A is used but it is missing a parent .");return e}(),p={value:!0},h=Dr(),v={value:!1},m=Mu((()=>{v.value||(l.value="hidden",d(h),t("afterLeave"))}));(0,r.onMounted)((()=>{let e=f(h);(0,r.onUnmounted)(e)})),(0,r.watchEffect)((()=>{if(s.value===Lr.Hidden&&h){if(c&&"visible"!==l.value)return void(l.value="visible");Tr(l.value,{hidden:()=>d(h),visible:()=>f(h)})}}));let g=Lu(e.enter),y=Lu(e.enterFrom),b=Lu(e.enterTo),w=Lu(e.entered),C=Lu(e.leave),_=Lu(e.leaveFrom),E=Lu(e.leaveTo);return(0,r.onMounted)((()=>{(0,r.watchEffect)((()=>{if("visible"===l.value){let e=zr(a);if(e instanceof Comment&&""===e.data)throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")}}))})),(0,r.onMounted)((()=>{(0,r.watch)([c],((e,n,r)=>{(function(e){let n=p.value&&!u.value,r=zr(a);!r||!(r instanceof HTMLElement)||n||(v.value=!0,c.value&&t("beforeEnter"),c.value||t("beforeLeave"),e(c.value?Ru(r,g,y,b,w,(e=>{v.value=!1,e===Vu.Finished&&t("afterEnter")})):Ru(r,C,_,E,w,(e=>{v.value=!1,e===Vu.Finished&&(Iu(m)||(l.value="hidden",d(h),t("afterLeave")))}))))})(r),p.value=!1}),{immediate:!0})})),(0,r.provide)(Bu,m),Yr((0,r.computed)((()=>Tr(l.value,{visible:Gr.Open,hidden:Gr.Closed})))),()=>{let{appear:t,show:i,enter:s,enterFrom:f,enterTo:d,entered:p,leave:h,leaveFrom:v,leaveTo:m,...b}=e,w={ref:a};return Ar({theirProps:{...b,...u&&c&&qr.isServer?{class:(0,r.normalizeClass)([b.class,...g,...y])}:{}},ourProps:w,slot:{},slots:o,attrs:n,features:Fu,visible:"visible"===l.value,name:"TransitionChild"})}}}),Uu=Du,$u=(0,r.defineComponent)({inheritAttrs:!1,props:{as:{type:[Object,String],default:"div"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:""},enterFrom:{type:[String],default:""},enterTo:{type:[String],default:""},entered:{type:[String],default:""},leave:{type:[String],default:""},leaveFrom:{type:[String],default:""},leaveTo:{type:[String],default:""}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(e,{emit:t,attrs:n,slots:o}){let i=Zr(),a=(0,r.computed)((()=>null===e.show&&null!==i?Tr(i.value,{[Gr.Open]:!0,[Gr.Closed]:!1}):e.show));(0,r.watchEffect)((()=>{if(![!0,!1].includes(a.value))throw new Error('A is used but it is missing a `:show="true | false"` prop.')}));let l=(0,r.ref)(a.value?"visible":"hidden"),s=Mu((()=>{l.value="hidden"})),c=(0,r.ref)(!0),u={show:a,appear:(0,r.computed)((()=>e.appear||!c.value))};return(0,r.onMounted)((()=>{(0,r.watchEffect)((()=>{c.value=!1,a.value?l.value="visible":Iu(s)||(l.value="hidden")}))})),(0,r.provide)(Bu,s),(0,r.provide)(Au,u),()=>{let i=Mr(e,["show","appear","unmount","onBeforeEnter","onBeforeLeave","onAfterEnter","onAfterLeave"]),a={unmount:e.unmount};return Ar({ourProps:{...a,as:"template"},theirProps:{},slot:{},slots:{...o,default:()=>[(0,r.h)(Uu,{onBeforeEnter:()=>t("beforeEnter"),onAfterEnter:()=>t("afterEnter"),onBeforeLeave:()=>t("beforeLeave"),onAfterLeave:()=>t("afterLeave"),...n,...a,...i},o.default)]},attrs:{},features:Fu,visible:"visible"===l.value,name:"Transition"})}}});var Hu=(e=>(e[e.Forwards=0]="Forwards",e[e.Backwards=1]="Backwards",e))(Hu||{});function zu(){let e=(0,r.ref)(0);return function(e,t,n){qr.isServer||(0,r.watchEffect)((r=>{window.addEventListener(e,t,n),r((()=>window.removeEventListener(e,t,n)))}))}("keydown",(t=>{"Tab"===t.key&&(e.value=t.shiftKey?1:0)})),e}function qu(e,t,n,o){qr.isServer||(0,r.watchEffect)((r=>{(e=null!=e?e:window).addEventListener(t,n,o),r((()=>e.removeEventListener(t,n,o)))}))}var Wu=(e=>(e[e.None=1]="None",e[e.InitialFocus=2]="InitialFocus",e[e.TabLock=4]="TabLock",e[e.FocusLock=8]="FocusLock",e[e.RestoreFocus=16]="RestoreFocus",e[e.All=30]="All",e))(Wu||{});let Ku=Object.assign((0,r.defineComponent)({name:"FocusTrap",props:{as:{type:[Object,String],default:"div"},initialFocus:{type:Object,default:null},features:{type:Number,default:30},containers:{type:Object,default:(0,r.ref)(new Set)}},inheritAttrs:!1,setup(e,{attrs:t,slots:n,expose:o}){let i=(0,r.ref)(null);o({el:i,$el:i});let a=(0,r.computed)((()=>Wr(i)));!function({ownerDocument:e},t){let n=(0,r.ref)(null);function o(){var t;n.value||(n.value=null==(t=e.value)?void 0:t.activeElement)}function i(){!n.value||(lo(n.value),n.value=null)}(0,r.onMounted)((()=>{(0,r.watch)(t,((e,t)=>{e!==t&&(e?o():i())}),{immediate:!0})})),(0,r.onUnmounted)(i)}({ownerDocument:a},(0,r.computed)((()=>Boolean(16&e.features))));let l=function({ownerDocument:e,container:t,initialFocus:n},o){let i=(0,r.ref)(null),a=(0,r.ref)(!1);return(0,r.onMounted)((()=>a.value=!0)),(0,r.onUnmounted)((()=>a.value=!1)),(0,r.onMounted)((()=>{(0,r.watch)([t,n,o],((r,l)=>{if(r.every(((e,t)=>(null==l?void 0:l[t])===e))||!o.value)return;let s=zr(t);!s||function(e){"function"==typeof queueMicrotask?queueMicrotask(e):Promise.resolve().then(e).catch((e=>setTimeout((()=>{throw e}))))}((()=>{var t,r;if(!a.value)return;let o=zr(n),l=null==(t=e.value)?void 0:t.activeElement;if(o){if(o===l)return void(i.value=l)}else if(s.contains(l))return void(i.value=l);o?lo(o):(fo(s,eo.First|eo.NoScroll),to.Error),i.value=null==(r=e.value)?void 0:r.activeElement}))}),{immediate:!0,flush:"post"})})),i}({ownerDocument:a,container:i,initialFocus:(0,r.computed)((()=>e.initialFocus))},(0,r.computed)((()=>Boolean(2&e.features))));!function({ownerDocument:e,container:t,containers:n,previousActiveElement:r},o){var i;qu(null==(i=e.value)?void 0:i.defaultView,"focus",(e=>{if(!o.value)return;let i=new Set(null==n?void 0:n.value);i.add(t);let a=r.value;if(!a)return;let l=e.target;l&&l instanceof HTMLElement?Gu(i,l)?(r.value=l,lo(l)):(e.preventDefault(),e.stopPropagation(),lo(a)):lo(r.value)}),!0)}({ownerDocument:a,container:i,containers:e.containers,previousActiveElement:l},(0,r.computed)((()=>Boolean(8&e.features))));let s=zu();function c(e){let t=zr(i);t&&Tr(s.value,{[Hu.Forwards]:()=>{fo(t,eo.First,{skipElements:[e.relatedTarget]})},[Hu.Backwards]:()=>{fo(t,eo.Last,{skipElements:[e.relatedTarget]})}})}let u=(0,r.ref)(!1);function f(e){"Tab"===e.key&&(u.value=!0,requestAnimationFrame((()=>{u.value=!1})))}function d(t){var n;let r=new Set(null==(n=e.containers)?void 0:n.value);r.add(i);let o=t.relatedTarget;o instanceof HTMLElement&&"true"!==o.dataset.headlessuiFocusGuard&&(Gu(r,o)||(u.value?fo(zr(i),Tr(s.value,{[Hu.Forwards]:()=>eo.Next,[Hu.Backwards]:()=>eo.Previous})|eo.WrapAround,{relativeTo:t.target}):t.target instanceof HTMLElement&&lo(t.target)))}return()=>{let o={ref:i,onKeydown:f,onFocusout:d},{features:a,initialFocus:l,containers:s,...u}=e;return(0,r.h)(r.Fragment,[Boolean(4&a)&&(0,r.h)(el,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:c,features:Xa.Focusable}),Ar({ourProps:o,theirProps:{...t,...u},slot:{},attrs:t,slots:n,name:"FocusTrap"}),Boolean(4&a)&&(0,r.h)(el,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:c,features:Xa.Focusable})])}}}),{features:Wu});function Gu(e,t){var n;for(let r of e)if(null!=(n=r.value)&&n.contains(t))return!0;return!1}let Zu="body > *",Yu=new Set,Ju=new Map;function Qu(e){e.setAttribute("aria-hidden","true"),e.inert=!0}function Xu(e){let t=Ju.get(e);!t||(null===t["aria-hidden"]?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",t["aria-hidden"]),e.inert=t.inert)}function ef(e,t=(0,r.ref)(!0)){(0,r.watchEffect)((n=>{if(!t.value||!e.value)return;let r=e.value,o=Wr(r);if(o){Yu.add(r);for(let e of Ju.keys())e.contains(r)&&(Xu(e),Ju.delete(e));o.querySelectorAll(Zu).forEach((e=>{if(e instanceof HTMLElement){for(let t of Yu)if(e.contains(t))return;1===Yu.size&&(Ju.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),Qu(e))}})),n((()=>{if(Yu.delete(r),Yu.size>0)o.querySelectorAll(Zu).forEach((e=>{if(e instanceof HTMLElement&&!Ju.has(e)){for(let t of Yu)if(e.contains(t))return;Ju.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),Qu(e)}}));else for(let e of Ju.keys())Xu(e),Ju.delete(e)}))}}))}let tf=Symbol("ForcePortalRootContext");let nf=(0,r.defineComponent)({name:"ForcePortalRoot",props:{as:{type:[Object,String],default:"template"},force:{type:Boolean,default:!1}},setup:(e,{slots:t,attrs:n})=>((0,r.provide)(tf,e.force),()=>{let{force:r,...o}=e;return Ar({theirProps:o,ourProps:{},slot:{},slots:t,attrs:n,name:"ForcePortalRoot"})})});let rf=(0,r.defineComponent)({name:"Portal",props:{as:{type:[Object,String],default:"div"}},setup(e,{slots:t,attrs:n}){let o=(0,r.ref)(null),i=(0,r.computed)((()=>Wr(o))),a=(0,r.inject)(tf,!1),l=(0,r.inject)(of,null),s=(0,r.ref)(!0===a||null==l?function(e){let t=Wr(e);if(!t){if(null===e)return null;throw new Error(`[Headless UI]: Cannot find ownerDocument for contextElement: ${e}`)}let n=t.getElementById("headlessui-portal-root");if(n)return n;let r=t.createElement("div");return r.setAttribute("id","headlessui-portal-root"),t.body.appendChild(r)}(o.value):l.resolveTarget());return(0,r.watchEffect)((()=>{a||null!=l&&(s.value=l.resolveTarget())})),(0,r.onUnmounted)((()=>{var e,t;let n=null==(e=i.value)?void 0:e.getElementById("headlessui-portal-root");!n||s.value===n&&s.value.children.length<=0&&(null==(t=s.value.parentElement)||t.removeChild(s.value))})),()=>{if(null===s.value)return null;let i={ref:o,"data-headlessui-portal":""};return(0,r.h)(r.Teleport,{to:s.value},Ar({ourProps:i,theirProps:e,slot:{},attrs:n,slots:t,name:"Portal"}))}}}),of=Symbol("PortalGroupContext"),af=(0,r.defineComponent)({name:"PortalGroup",props:{as:{type:[Object,String],default:"template"},target:{type:Object,default:null}},setup(e,{attrs:t,slots:n}){let o=(0,r.reactive)({resolveTarget:()=>e.target});return(0,r.provide)(of,o),()=>{let{target:r,...o}=e;return Ar({theirProps:o,ourProps:{},slot:{},attrs:t,slots:n,name:"PortalGroup"})}}}),lf=Symbol("StackContext");var sf=(e=>(e[e.Add=0]="Add",e[e.Remove=1]="Remove",e))(sf||{});function cf({type:e,enabled:t,element:n,onUpdate:o}){let i=(0,r.inject)(lf,(()=>{}));function a(...e){null==o||o(...e),i(...e)}(0,r.onMounted)((()=>{(0,r.watch)(t,((t,r)=>{t?a(0,e,n):!0===r&&a(1,e,n)}),{immediate:!0,flush:"sync"})})),(0,r.onUnmounted)((()=>{t.value&&a(1,e,n)})),(0,r.provide)(lf,a)}let uf=Symbol("DescriptionContext");(0,r.defineComponent)({name:"Description",props:{as:{type:[Object,String],default:"p"},id:{type:String,default:()=>`headlessui-description-${Dr()}`}},setup(e,{attrs:t,slots:n}){let o=function(){let e=(0,r.inject)(uf,null);if(null===e)throw new Error("Missing parent");return e}();return(0,r.onMounted)((()=>(0,r.onUnmounted)(o.register(e.id)))),()=>{let{name:i="Description",slot:a=(0,r.ref)({}),props:l={}}=o,{id:s,...c}=e,u={...Object.entries(l).reduce(((e,[t,n])=>Object.assign(e,{[t]:(0,r.unref)(n)})),{}),id:s};return Ar({ourProps:u,theirProps:c,slot:a.value,attrs:t,slots:n,name:i})}}});function ff(){let e;return{before({doc:t}){var n;let r=t.documentElement;e=(null!=(n=t.defaultView)?n:window).innerWidth-r.clientWidth},after({doc:t,d:n}){let r=t.documentElement,o=r.clientWidth-r.offsetWidth,i=e-o;n.style(r,"paddingRight",`${i}px`)}}}function df(){if(!(/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0))return{};let e;return{before(){e=window.pageYOffset},after({doc:t,d:n,meta:r}){function o(e){return r.containers.flatMap((e=>e())).some((t=>t.contains(e)))}n.style(t.body,"marginTop",`-${e}px`),window.scrollTo(0,0);let i=null;n.addEventListener(t,"click",(e=>{if(e.target instanceof HTMLElement)try{let n=e.target.closest("a");if(!n)return;let{hash:r}=new URL(n.href),a=t.querySelector(r);a&&!o(a)&&(i=a)}catch{}}),!0),n.addEventListener(t,"touchmove",(e=>{e.target instanceof HTMLElement&&!o(e.target)&&e.preventDefault()}),{passive:!1}),n.add((()=>{window.scrollTo(0,window.pageYOffset+e),i&&i.isConnected&&(i.scrollIntoView({block:"nearest"}),i=null)}))}}}function pf(e){let t={};for(let n of e)Object.assign(t,n(t));return t}let hf=function(e,t){let n=e(),r=new Set;return{getSnapshot:()=>n,subscribe:e=>(r.add(e),()=>r.delete(e)),dispatch(e,...o){let i=t[e].call(n,...o);i&&(n=i,r.forEach((e=>e())))}}}((()=>new Map),{PUSH(e,t){var n;let r=null!=(n=this.get(e))?n:{doc:e,count:0,d:Nu(),meta:new Set};return r.count++,r.meta.add(t),this.set(e,r),this},POP(e,t){let n=this.get(e);return n&&(n.count--,n.meta.delete(t)),this},SCROLL_PREVENT({doc:e,d:t,meta:n}){let r={doc:e,d:t,meta:pf(n)},o=[df(),ff(),{before({doc:e,d:t}){t.style(e.documentElement,"overflow","hidden")}}];o.forEach((({before:e})=>null==e?void 0:e(r))),o.forEach((({after:e})=>null==e?void 0:e(r)))},SCROLL_ALLOW({d:e}){e.dispose()},TEARDOWN({doc:e}){this.delete(e)}});function vf(e,t,n){let o=function(e){let t=(0,r.shallowRef)(e.getSnapshot());return(0,r.onUnmounted)(e.subscribe((()=>{t.value=e.getSnapshot()}))),t}(hf),i=(0,r.computed)((()=>{let t=e.value?o.value.get(e.value):void 0;return!!t&&t.count>0}));return(0,r.watch)([e,t],(([e,t],[r],o)=>{if(!e||!t)return;hf.dispatch("PUSH",e,n);let i=!1;o((()=>{i||(hf.dispatch("POP",null!=r?r:e,n),i=!0)}))}),{immediate:!0}),i}hf.subscribe((()=>{let e=hf.getSnapshot(),t=new Map;for(let[n]of e)t.set(n,n.documentElement.style.overflow);for(let n of e.values()){let e="hidden"===t.get(n.doc),r=0!==n.count;(r&&!e||!r&&e)&&hf.dispatch(n.count>0?"SCROLL_PREVENT":"SCROLL_ALLOW",n),0===n.count&&hf.dispatch("TEARDOWN",n)}}));var mf=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(mf||{});let gf=Symbol("DialogContext");function yf(e){let t=(0,r.inject)(gf,null);if(null===t){let t=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,yf),t}return t}let bf="DC8F892D-2EBD-447C-A4C8-A03058436FF4",wf=(0,r.defineComponent)({name:"Dialog",inheritAttrs:!1,props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},open:{type:[Boolean,String],default:bf},initialFocus:{type:Object,default:null},id:{type:String,default:()=>`headlessui-dialog-${Dr()}`}},emits:{close:e=>!0},setup(e,{emit:t,attrs:n,slots:o,expose:i}){var a;let l=(0,r.ref)(!1);(0,r.onMounted)((()=>{l.value=!0}));let s=(0,r.ref)(0),c=Zr(),u=(0,r.computed)((()=>e.open===bf&&null!==c?Tr(c.value,{[Gr.Open]:!0,[Gr.Closed]:!1}):e.open)),f=(0,r.ref)(new Set),d=(0,r.ref)(null),p=(0,r.ref)(null),h=(0,r.computed)((()=>Wr(d)));if(i({el:d,$el:d}),e.open===bf&&null===c)throw new Error("You forgot to provide an `open` prop to the `Dialog`.");if("boolean"!=typeof u.value)throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${u.value===bf?void 0:e.open}`);let v=(0,r.computed)((()=>l.value&&u.value?0:1)),m=(0,r.computed)((()=>0===v.value)),g=(0,r.computed)((()=>s.value>1)),y=((0,r.inject)(gf,null),(0,r.computed)((()=>g.value?"parent":"leaf")));ef(d,(0,r.computed)((()=>!!g.value&&m.value))),cf({type:"Dialog",enabled:(0,r.computed)((()=>0===v.value)),element:d,onUpdate:(e,t,n)=>{if("Dialog"===t)return Tr(e,{[sf.Add](){f.value.add(n),s.value+=1},[sf.Remove](){f.value.delete(n),s.value-=1}})}});let b=function({slot:e=(0,r.ref)({}),name:t="Description",props:n={}}={}){let o=(0,r.ref)([]);return(0,r.provide)(uf,{register:function(e){return o.value.push(e),()=>{let t=o.value.indexOf(e);-1!==t&&o.value.splice(t,1)}},slot:e,name:t,props:n}),(0,r.computed)((()=>o.value.length>0?o.value.join(" "):void 0))}({name:"DialogDescription",slot:(0,r.computed)((()=>({open:u.value})))}),w=(0,r.ref)(null),C={titleId:w,panelRef:(0,r.ref)(null),dialogState:v,setTitleId(e){w.value!==e&&(w.value=e)},close(){t("close",!1)}};function _(){var e,t,n;return[...Array.from(null!=(t=null==(e=h.value)?void 0:e.querySelectorAll("html > *, body > *, [data-headlessui-portal]"))?t:[]).filter((e=>!(e===document.body||e===document.head||!(e instanceof HTMLElement)||e.contains(zr(p))||C.panelRef.value&&e.contains(C.panelRef.value)))),null!=(n=C.panelRef.value)?n:d.value]}return(0,r.provide)(gf,C),ho((()=>_()),((e,t)=>{C.close(),(0,r.nextTick)((()=>null==t?void 0:t.focus()))}),(0,r.computed)((()=>0===v.value&&!g.value))),qu(null==(a=h.value)?void 0:a.defaultView,"keydown",(e=>{e.defaultPrevented||e.key===Ur.Escape&&0===v.value&&(g.value||(e.preventDefault(),e.stopPropagation(),C.close()))})),vf(h,m,(e=>{var t;return{containers:[...null!=(t=e.containers)?t:[],_]}})),(0,r.watchEffect)((e=>{if(0!==v.value)return;let t=zr(d);if(!t)return;let n=new IntersectionObserver((e=>{for(let t of e)0===t.boundingClientRect.x&&0===t.boundingClientRect.y&&0===t.boundingClientRect.width&&0===t.boundingClientRect.height&&C.close()}));n.observe(t),e((()=>n.disconnect()))})),()=>{let{id:t,open:i,initialFocus:a,...l}=e,s={...n,ref:d,id:t,role:"dialog","aria-modal":0===v.value||void 0,"aria-labelledby":w.value,"aria-describedby":b.value},c={open:0===v.value};return(0,r.h)(nf,{force:!0},(()=>[(0,r.h)(rf,(()=>(0,r.h)(af,{target:d.value},(()=>(0,r.h)(nf,{force:!1},(()=>(0,r.h)(Ku,{initialFocus:a,containers:f,features:m.value?Tr(y.value,{parent:Ku.features.RestoreFocus,leaf:Ku.features.All&~Ku.features.FocusLock}):Ku.features.None},(()=>Ar({ourProps:s,theirProps:l,slot:c,attrs:n,slots:o,visible:0===v.value,features:Rr.RenderStrategy|Rr.Static,name:"Dialog"}))))))))),(0,r.h)(el,{features:Xa.Hidden,ref:p})]))}}}),Cf=((0,r.defineComponent)({name:"DialogOverlay",props:{as:{type:[Object,String],default:"div"},id:{type:String,default:()=>`headlessui-dialog-overlay-${Dr()}`}},setup(e,{attrs:t,slots:n}){let r=yf("DialogOverlay");function o(e){e.target===e.currentTarget&&(e.preventDefault(),e.stopPropagation(),r.close())}return()=>{let{id:i,...a}=e;return Ar({ourProps:{id:i,"aria-hidden":!0,onClick:o},theirProps:a,slot:{open:0===r.dialogState.value},attrs:t,slots:n,name:"DialogOverlay"})}}}),(0,r.defineComponent)({name:"DialogBackdrop",props:{as:{type:[Object,String],default:"div"},id:{type:String,default:()=>`headlessui-dialog-backdrop-${Dr()}`}},inheritAttrs:!1,setup(e,{attrs:t,slots:n,expose:o}){let i=yf("DialogBackdrop"),a=(0,r.ref)(null);return o({el:a,$el:a}),(0,r.onMounted)((()=>{if(null===i.panelRef.value)throw new Error("A component is being used, but a component is missing.")})),()=>{let{id:o,...l}=e,s={id:o,ref:a,"aria-hidden":!0};return(0,r.h)(nf,{force:!0},(()=>(0,r.h)(rf,(()=>Ar({ourProps:s,theirProps:{...t,...l},slot:{open:0===i.dialogState.value},attrs:t,slots:n,name:"DialogBackdrop"})))))}}}),(0,r.defineComponent)({name:"DialogPanel",props:{as:{type:[Object,String],default:"div"},id:{type:String,default:()=>`headlessui-dialog-panel-${Dr()}`}},setup(e,{attrs:t,slots:n,expose:r}){let o=yf("DialogPanel");function i(e){e.stopPropagation()}return r({el:o.panelRef,$el:o.panelRef}),()=>{let{id:r,...a}=e;return Ar({ourProps:{id:r,ref:o.panelRef,onClick:i},theirProps:a,slot:{open:0===o.dialogState.value},attrs:t,slots:n,name:"DialogPanel"})}}})),_f=(0,r.defineComponent)({name:"DialogTitle",props:{as:{type:[Object,String],default:"h2"},id:{type:String,default:()=>`headlessui-dialog-title-${Dr()}`}},setup(e,{attrs:t,slots:n}){let o=yf("DialogTitle");return(0,r.onMounted)((()=>{o.setTitleId(e.id),(0,r.onUnmounted)((()=>o.setTitleId(null)))})),()=>{let{id:r,...i}=e;return Ar({ourProps:{id:r},theirProps:i,slot:{open:0===o.dialogState.value},attrs:t,slots:n,name:"DialogTitle"})}}});var Ef=(0,r.createElementVNode)("div",{class:"fixed inset-0"},null,-1),xf={class:"fixed inset-0 overflow-hidden"},kf={class:"absolute inset-0 overflow-hidden"},Sf={class:"pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10"},Of={class:"flex h-full flex-col overflow-y-scroll bg-white py-6 shadow-xl"},Nf={class:"px-4 sm:px-6"},Pf={class:"flex items-start justify-between"},Tf={class:"ml-3 flex h-7 items-center"},Vf=(0,r.createElementVNode)("span",{class:"sr-only"},"Close panel",-1),Rf={class:"relative mt-6 flex-1 px-4 sm:px-6"},Lf={class:"keyboard-shortcut"},Af={class:"shortcut"},jf=(0,r.createElementVNode)("span",{class:"description"},"Select a host",-1),Bf={class:"keyboard-shortcut"},If={class:"shortcut"},Mf=(0,r.createElementVNode)("span",{class:"description"},"Jump to file selection",-1),Ff={class:"keyboard-shortcut"},Df={class:"shortcut"},Uf=(0,r.createElementVNode)("span",{class:"description"},"Jump to logs",-1),$f={class:"keyboard-shortcut"},Hf={class:"shortcut"},zf=(0,r.createElementVNode)("span",{class:"description"},"Severity selection",-1),qf={class:"keyboard-shortcut"},Wf={class:"shortcut"},Kf=(0,r.createElementVNode)("span",{class:"description"},"Settings",-1),Gf={class:"keyboard-shortcut"},Zf={class:"shortcut"},Yf=(0,r.createElementVNode)("span",{class:"description"},"Search",-1),Jf={class:"keyboard-shortcut"},Qf={class:"shortcut"},Xf=(0,r.createElementVNode)("span",{class:"description"},"Refresh logs",-1),ed={class:"keyboard-shortcut"},td={class:"shortcut"},nd=(0,r.createElementVNode)("span",{class:"description"},"Keyboard shortcuts help",-1);const rd={__name:"KeyboardShortcutsOverlay",setup:function(e){var t=Mi();return function(e,n){return(0,r.openBlock)(),(0,r.createBlock)((0,r.unref)($u),{as:"template",show:(0,r.unref)(t).helpSlideOverOpen},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(wf),{as:"div",class:"relative z-20",onClose:n[1]||(n[1]=function(e){return(0,r.unref)(t).helpSlideOverOpen=!1})},{default:(0,r.withCtx)((function(){return[Ef,(0,r.createElementVNode)("div",xf,[(0,r.createElementVNode)("div",kf,[(0,r.createElementVNode)("div",Sf,[(0,r.createVNode)((0,r.unref)(Du),{as:"template",enter:"transform transition ease-in-out duration-200 sm:duration-300","enter-from":"translate-x-full","enter-to":"translate-x-0",leave:"transform transition ease-in-out duration-200 sm:duration-300","leave-from":"translate-x-0","leave-to":"translate-x-full"},{default:(0,r.withCtx)((function(){return[(0,r.createVNode)((0,r.unref)(Cf),{class:"pointer-events-auto w-screen max-w-md"},{default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",Of,[(0,r.createElementVNode)("div",Nf,[(0,r.createElementVNode)("div",Pf,[(0,r.createVNode)((0,r.unref)(_f),{class:"text-base font-semibold leading-6 text-gray-900"},{default:(0,r.withCtx)((function(){return[(0,r.createTextVNode)("Keyboard Shortcuts")]})),_:1}),(0,r.createElementVNode)("div",Tf,[(0,r.createElementVNode)("button",{type:"button",class:"rounded-md bg-white text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-brand-500 focus:ring-offset-2",onClick:n[0]||(n[0]=function(e){return(0,r.unref)(t).helpSlideOverOpen=!1})},[Vf,(0,r.createVNode)((0,r.unref)(ko),{class:"h-6 w-6","aria-hidden":"true"})])])])]),(0,r.createElementVNode)("div",Rf,[(0,r.createElementVNode)("div",Lf,[(0,r.createElementVNode)("span",Af,(0,r.toDisplayString)((0,r.unref)(Xi).Hosts),1),jf]),(0,r.createElementVNode)("div",Bf,[(0,r.createElementVNode)("span",If,(0,r.toDisplayString)((0,r.unref)(Xi).Files),1),Mf]),(0,r.createElementVNode)("div",Ff,[(0,r.createElementVNode)("span",Df,(0,r.toDisplayString)((0,r.unref)(Xi).Logs),1),Uf]),(0,r.createElementVNode)("div",$f,[(0,r.createElementVNode)("span",Hf,(0,r.toDisplayString)((0,r.unref)(Xi).Severity),1),zf]),(0,r.createElementVNode)("div",qf,[(0,r.createElementVNode)("span",Wf,(0,r.toDisplayString)((0,r.unref)(Xi).Settings),1),Kf]),(0,r.createElementVNode)("div",Gf,[(0,r.createElementVNode)("span",Zf,(0,r.toDisplayString)((0,r.unref)(Xi).Search),1),Yf]),(0,r.createElementVNode)("div",Jf,[(0,r.createElementVNode)("span",Qf,(0,r.toDisplayString)((0,r.unref)(Xi).Refresh),1),Xf]),(0,r.createElementVNode)("div",ed,[(0,r.createElementVNode)("span",td,(0,r.toDisplayString)((0,r.unref)(Xi).ShortcutHelp),1),nd])])])]})),_:1})]})),_:1})])])])]})),_:1})]})),_:1},8,["show"])}}};function od(e){return od="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},od(e)}function id(){id=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function c(e,t,n,o){var i=t&&t.prototype instanceof d?t:d,a=Object.create(i.prototype),l=new k(o||[]);return r(a,"_invoke",{value:C(e,n,l)}),a}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var f={};function d(){}function p(){}function h(){}var v={};s(v,i,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(S([])));g&&g!==t&&n.call(g,i)&&(v=g);var y=h.prototype=d.prototype=Object.create(v);function b(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function o(r,i,a,l){var s=u(e[r],e,i);if("throw"!==s.type){var c=s.arg,f=c.value;return f&&"object"==od(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){o("next",e,a,l)}),(function(e){o("throw",e,a,l)})):t.resolve(f).then((function(e){c.value=e,a(c)}),(function(e){return o("throw",e,a,l)}))}l(s.arg)}var i;r(this,"_invoke",{value:function(e,n){function r(){return new t((function(t,r){o(e,n,t,r)}))}return i=i?i.then(r,r):r()}})}function C(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return O()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var l=_(a,n);if(l){if(l===f)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=u(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===f)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}function _(e,t){var n=t.method,r=e.iterator[n];if(void 0===r)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,_(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),f;var o=u(r,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,f;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function S(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,o=function t(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(l&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;x(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:S(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},e}function ad(e,t,n,r,o,i,a){try{var l=e[i](a),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}var ld={class:"md:pl-88 flex flex-col flex-1 min-h-screen max-h-screen max-w-full"},sd={class:"absolute bottom-4 right-4 flex items-center"},cd={class:"text-xs text-gray-500 dark:text-gray-400 mr-5 -mb-0.5"},ud=(0,r.createElementVNode)("span",{class:"hidden md:inline"},"Memory: ",-1),fd={class:"font-semibold"},dd=(0,r.createElementVNode)("span",{class:"mx-1.5"},"·",-1),pd=(0,r.createElementVNode)("span",{class:"hidden md:inline"},"Duration: ",-1),hd={class:"font-semibold"},vd=(0,r.createElementVNode)("span",{class:"mx-1.5"},"·",-1),md=(0,r.createElementVNode)("span",{class:"hidden md:inline"},"Version: ",-1),gd={class:"font-semibold"},yd={key:0,href:"https://www.buymeacoffee.com/arunas",target:"_blank"};const bd={__name:"Home",setup:function(e){var t=Bo(),n=Mi(),o=Fi(),i=Ri(),a=Li(),l=Pr(),s=Nr();return(0,r.onBeforeMount)((function(){n.syncTheme(),document.addEventListener("keydown",ra)})),(0,r.onBeforeUnmount)((function(){document.removeEventListener("keydown",ra)})),(0,r.onMounted)((function(){setInterval(n.syncTheme,1e3)})),(0,r.watch)((function(){return l.query}),(function(e){o.selectFile(e.file||null),a.setPage(e.page||1),i.setQuery(e.query||""),n.loadLogs()}),{immediate:!0}),(0,r.watch)((function(){return l.query.host}),function(){var e,r=(e=id().mark((function e(r){return id().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.selectHost(r||null),r&&!t.selectedHostIdentifier&&Hi(s,"host",null),o.reset(),e.next=5,o.loadFolders();case 5:n.loadLogs();case 6:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){ad(i,r,o,a,l,"next",e)}function l(e){ad(i,r,o,a,l,"throw",e)}a(void 0)}))});return function(e){return r.apply(this,arguments)}}(),{immediate:!0}),(0,r.onMounted)((function(){window.onresize=function(){n.setViewportDimensions(window.innerWidth,window.innerHeight)}})),function(e,t){var i;return(0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,null,[(0,r.createElementVNode)("div",{class:(0,r.normalizeClass)(["absolute z-20 top-0 bottom-10 bg-gray-100 dark:bg-gray-900 md:left-0 md:flex md:w-88 md:flex-col md:fixed md:inset-y-0",[(0,r.unref)(o).sidebarOpen?"left-0 right-0 md:left-auto md:right-auto":"-left-[200%] right-[200%] md:left-auto md:right-auto"]])},[(0,r.createVNode)(ms)],2),(0,r.createElementVNode)("div",ld,[(0,r.createVNode)(Eu,{class:"pb-16 md:pb-12"})]),(0,r.createElementVNode)("div",sd,[(0,r.createElementVNode)("p",cd,[null!==(i=(0,r.unref)(n).performance)&&void 0!==i&&i.requestTime?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[(0,r.createElementVNode)("span",null,[ud,(0,r.createElementVNode)("span",fd,(0,r.toDisplayString)((0,r.unref)(n).performance.memoryUsage),1)]),dd,(0,r.createElementVNode)("span",null,[pd,(0,r.createElementVNode)("span",hd,(0,r.toDisplayString)((0,r.unref)(n).performance.requestTime),1)]),vd],64)):(0,r.createCommentVNode)("",!0),(0,r.createElementVNode)("span",null,[md,(0,r.createElementVNode)("span",gd,(0,r.toDisplayString)(e.LogViewer.version),1)])]),e.LogViewer.show_support_link?((0,r.openBlock)(),(0,r.createElementBlock)("a",yd,[(0,r.createVNode)(Ou,{class:"h-6 w-auto",title:"Support me by buying me a cup of coffee ❤️"})])):(0,r.createCommentVNode)("",!0)]),(0,r.createVNode)(rd)],64)}}},wd=bd;function Cd(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,o=e}finally{try{if(!s&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw o}}return l}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _d(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n""+e)),d=Xt.bind(null,sr),p=Xt.bind(null,cr);function h(e,r){if(r=Qt({},r||c.value),"string"==typeof e){const o=on(n,e,r.path),a=t.resolve({path:o.path},r),l=i.createHref(o.fullPath);return Qt(o,a,{params:p(a.params),hash:cr(o.hash),redirectedFrom:void 0,href:l})}let a;if("path"in e)a=Qt({},e,{path:on(n,e.path,r.path).path});else{const t=Qt({},e.params);for(const e in t)null==t[e]&&delete t[e];a=Qt({},e,{params:d(e.params)}),r.params=d(r.params)}const l=t.resolve(a,r),s=e.hash||"";l.params=f(p(l.params));const u=function(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}(o,Qt({},e,{hash:(h=s,ar(h).replace(nr,"{").replace(or,"}").replace(er,"^")),path:l.path}));var h;const v=i.createHref(u);return Qt({fullPath:u,hash:s,query:o===fr?dr(e.query):e.query||{}},l,{redirectedFrom:void 0,href:v})}function v(e){return"string"==typeof e?on(n,e,c.value.path):Qt({},e)}function m(e,t){if(u!==e)return Nn(8,{from:t,to:e})}function g(e){return b(e)}function y(e){const t=e.matched[e.matched.length-1];if(t&&t.redirect){const{redirect:n}=t;let r="function"==typeof n?n(e):n;return"string"==typeof r&&(r=r.includes("?")||r.includes("#")?r=v(r):{path:r},r.params={}),Qt({query:e.query,hash:e.hash,params:"path"in r?{}:e.params},r)}}function b(e,t){const n=u=h(e),r=c.value,i=e.state,a=e.force,l=!0===e.replace,s=y(n);if(s)return b(Qt(v(s),{state:"object"==typeof s?Qt({},i,s.state):i,force:a,replace:l}),t||n);const f=n;let d;return f.redirectedFrom=t,!a&&function(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&ln(t.matched[r],n.matched[o])&&sn(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}(o,r,n)&&(d=Nn(16,{to:f,from:r}),V(r,r,!0,!1)),(d?Promise.resolve(d):C(f,r)).catch((e=>Pn(e)?Pn(e,2)?e:T(e):P(e,f,r))).then((e=>{if(e){if(Pn(e,2))return b(Qt({replace:l},v(e.to),{state:"object"==typeof e.to?Qt({},i,e.to.state):i,force:a}),t||f)}else e=E(f,r,!0,l,i);return _(f,r,e),e}))}function w(e,t){const n=m(e,t);return n?Promise.reject(n):Promise.resolve()}function C(e,t){let n;const[r,o,i]=function(e,t){const n=[],r=[],o=[],i=Math.max(t.matched.length,e.matched.length);for(let a=0;aln(e,i)))?r.push(i):n.push(i));const l=e.matched[a];l&&(t.matched.find((e=>ln(e,l)))||o.push(l))}return[n,r,o]}(e,t);n=wr(r.reverse(),"beforeRouteLeave",e,t);for(const o of r)o.leaveGuards.forEach((r=>{n.push(br(r,e,t))}));const s=w.bind(null,e,t);return n.push(s),Or(n).then((()=>{n=[];for(const r of a.list())n.push(br(r,e,t));return n.push(s),Or(n)})).then((()=>{n=wr(o,"beforeRouteUpdate",e,t);for(const r of o)r.updateGuards.forEach((r=>{n.push(br(r,e,t))}));return n.push(s),Or(n)})).then((()=>{n=[];for(const r of e.matched)if(r.beforeEnter&&!t.matched.includes(r))if(tn(r.beforeEnter))for(const o of r.beforeEnter)n.push(br(o,e,t));else n.push(br(r.beforeEnter,e,t));return n.push(s),Or(n)})).then((()=>(e.matched.forEach((e=>e.enterCallbacks={})),n=wr(i,"beforeRouteEnter",e,t),n.push(s),Or(n)))).then((()=>{n=[];for(const r of l.list())n.push(br(r,e,t));return n.push(s),Or(n)})).catch((e=>Pn(e,8)?e:Promise.reject(e)))}function _(e,t,n){for(const r of s.list())r(e,t,n)}function E(e,t,n,r,o){const a=m(e,t);if(a)return a;const l=t===kn,s=Yt?history.state:{};n&&(r||l?i.replace(e.fullPath,Qt({scroll:l&&s&&s.scroll},o)):i.push(e.fullPath,o)),c.value=e,V(e,t,n,l),T()}let x;function k(){x||(x=i.listen(((e,t,n)=>{if(!j.listening)return;const r=h(e),o=y(r);if(o)return void b(Qt(o,{replace:!0}),r).catch(en);u=r;const a=c.value;Yt&&function(e,t){bn.set(e,t)}(yn(a.fullPath,n.delta),mn()),C(r,a).catch((e=>Pn(e,12)?e:Pn(e,2)?(b(e.to,r).then((e=>{Pn(e,20)&&!n.delta&&n.type===fn.pop&&i.go(-1,!1)})).catch(en),Promise.reject()):(n.delta&&i.go(-n.delta,!1),P(e,r,a)))).then((e=>{(e=e||E(r,a,!1))&&(n.delta&&!Pn(e,8)?i.go(-n.delta,!1):n.type===fn.pop&&Pn(e,20)&&i.go(-1,!1)),_(r,a,e)})).catch(en)})))}let S,O=yr(),N=yr();function P(e,t,n){T(e);const r=N.list();return r.length&&r.forEach((r=>r(e,t,n))),Promise.reject(e)}function T(e){return S||(S=!e,k(),O.list().forEach((([t,n])=>e?n(e):t())),O.reset()),e}function V(t,n,o,i){const{scrollBehavior:a}=e;if(!Yt||!a)return Promise.resolve();const l=!o&&function(e){const t=bn.get(e);return bn.delete(e),t}(yn(t.fullPath,0))||(i||!o)&&history.state&&history.state.scroll||null;return(0,r.nextTick)().then((()=>a(t,n,l))).then((e=>e&&gn(e))).catch((e=>P(e,t,n)))}const R=e=>i.go(e);let L;const A=new Set,j={currentRoute:c,listening:!0,addRoute:function(e,n){let r,o;return xn(e)?(r=t.getRecordMatcher(e),o=n):o=e,t.addRoute(o,r)},removeRoute:function(e){const n=t.getRecordMatcher(e);n&&t.removeRoute(n)},hasRoute:function(e){return!!t.getRecordMatcher(e)},getRoutes:function(){return t.getRoutes().map((e=>e.record))},resolve:h,options:e,push:g,replace:function(e){return g(Qt(v(e),{replace:!0}))},go:R,back:()=>R(-1),forward:()=>R(1),beforeEach:a.add,beforeResolve:l.add,afterEach:s.add,onError:N.add,isReady:function(){return S&&c.value!==kn?Promise.resolve():new Promise(((e,t)=>{O.add([e,t])}))},install(e){e.component("RouterLink",_r),e.component("RouterView",Sr),e.config.globalProperties.$router=this,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>(0,r.unref)(c)}),Yt&&!L&&c.value===kn&&(L=!0,g(i.location).catch((e=>{0})));const t={};for(const e in kn)t[e]=(0,r.computed)((()=>c.value[e]));e.provide(vr,this),e.provide(mr,(0,r.reactive)(t)),e.provide(gr,c);const n=e.unmount;A.add(e),e.unmount=function(){A.delete(e),A.size<1&&(u=kn,x&&x(),x=null,c.value=kn,L=!1,S=!1),n()}}};return j}({routes:[{path:LogViewer.basePath,name:"home",component:wd}],history:En(),base:Pd}),Vd=function(){const e=(0,r.effectScope)(!0),t=e.run((()=>(0,r.ref)({})));let n=[],i=[];const a=(0,r.markRaw)({install(e){v(a),o||(a._a=e,e.provide(m,a),e.config.globalProperties.$pinia=a,w&&W(e,a),i.forEach((e=>n.push(e))),i=[])},use(e){return this._a||o?n.push(e):i.push(e),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return w&&"undefined"!=typeof Proxy&&a.use(Y),a}(),Rd=(0,r.createApp)({router:Td});Rd.use(Td),Rd.use(Vd),Rd.mixin({computed:{LogViewer:function(){return window.LogViewer}}}),Rd.mount("#log-viewer")},742:(e,t)=>{"use strict";t.byteLength=function(e){var t=s(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,i=s(e),a=i[0],l=i[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,a,l)),u=0,f=l>0?a-4:a;for(n=0;n>16&255,c[u++]=t>>8&255,c[u++]=255&t;2===l&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,c[u++]=255&t);1===l&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t);return c},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,i=[],a=16383,l=0,s=r-o;ls?s:l+a));1===o?(t=e[r-1],i.push(n[t>>2]+n[t<<4&63]+"==")):2===o&&(t=(e[r-2]<<8)+e[r-1],i.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return i.join("")};for(var n=[],r=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,l=i.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,r){for(var o,i,a=[],l=t;l>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},764:(e,t,n)=>{"use strict";var r=n(742),o=n(645),i=n(826);function a(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function l(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function h(e,t){if(s.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return U(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return $(e).length;default:if(r)return U(e).length;t=(""+t).toLowerCase(),r=!0}}function v(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return S(this,t,n);case"ascii":return N(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return k(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return V(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function m(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function g(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=s.from(t,r)),s.isBuffer(t))return 0===t.length?-1:y(e,t,n,r,o);if("number"==typeof t)return t&=255,s.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):y(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function y(e,t,n,r,o){var i,a=1,l=e.length,s=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,l/=2,s/=2,n/=2}function c(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var u=-1;for(i=n;il&&(n=l-s),i=n;i>=0;i--){for(var f=!0,d=0;do&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function k(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function S(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:c>223?3:c>191?2:1;if(o+f<=n)switch(f){case 1:c<128&&(u=c);break;case 2:128==(192&(i=e[o+1]))&&(s=(31&c)<<6|63&i)>127&&(u=s);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(s=(15&c)<<12|(63&i)<<6|63&a)>2047&&(s<55296||s>57343)&&(u=s);break;case 4:i=e[o+1],a=e[o+2],l=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&l)&&(s=(15&c)<<18|(63&i)<<12|(63&a)<<6|63&l)>65535&&s<1114112&&(u=s)}null===u?(u=65533,f=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),o+=f}return function(e){var t=e.length;if(t<=O)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},s.prototype.compare=function(e,t,n,r,o){if(!s.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),l=Math.min(i,a),c=this.slice(r,o),u=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return b(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return C(this,e,t,n);case"latin1":case"binary":return _(this,e,t,n);case"base64":return E(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function N(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!s.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function A(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function j(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function B(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function I(e,t,n,r,i){return i||B(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function M(e,t,n,r,i){return i||B(e,0,n,8),o.write(e,t,n,r,52,8),n+8}s.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},s.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},s.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},s.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},s.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},s.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},s.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},s.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},s.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},s.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},s.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},s.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):A(this,e,t,!0),t+2},s.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):A(this,e,t,!1),t+2},s.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):j(this,e,t,!0),t+4},s.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):j(this,e,t,!1),t+4},s.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,l=0;for(this[t]=255&e;++i>0)-l&255;return t+n},s.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,l=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===l&&0!==this[t+i+1]&&(l=1),this[t+i]=(e/a>>0)-l&255;return t+n},s.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},s.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):A(this,e,t,!0),t+2},s.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):A(this,e,t,!1),t+2},s.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):j(this,e,t,!0),t+4},s.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):j(this,e,t,!1),t+4},s.prototype.writeFloatLE=function(e,t,n){return I(this,e,t,!0,n)},s.prototype.writeFloatBE=function(e,t,n){return I(this,e,t,!1,n)},s.prototype.writeDoubleLE=function(e,t,n){return M(this,e,t,!0,n)},s.prototype.writeDoubleBE=function(e,t,n){return M(this,e,t,!1,n)},s.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!s.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function $(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(F,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function H(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}},645:(e,t)=>{t.read=function(e,t,n,r,o){var i,a,l=8*o-r-1,s=(1<>1,u=-7,f=n?o-1:0,d=n?-1:1,p=e[t+f];for(f+=d,i=p&(1<<-u)-1,p>>=-u,u+=l;u>0;i=256*i+e[t+f],f+=d,u-=8);for(a=i&(1<<-u)-1,i>>=-u,u+=r;u>0;a=256*a+e[t+f],f+=d,u-=8);if(0===i)i=1-c;else{if(i===s)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=c}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,l,s,c=8*i-o-1,u=(1<>1,d=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,h=r?1:-1,v=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(l=isNaN(t)?1:0,a=u):(a=Math.floor(Math.log(t)/Math.LN2),t*(s=Math.pow(2,-a))<1&&(a--,s*=2),(t+=a+f>=1?d/s:d*Math.pow(2,1-f))*s>=2&&(a++,s/=2),a+f>=u?(l=0,a=u):a+f>=1?(l=(t*s-1)*Math.pow(2,o),a+=f):(l=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&l,p+=h,l/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=h,a/=256,c-=8);e[n+p-h]|=128*v}},826:e=>{var t={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==t.call(e)}},486:function(e,t,n){var r;e=n.nmd(e),function(){var o,i=200,a="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",l="Expected a function",s="Invalid `variable` option passed into `_.template`",c="__lodash_hash_undefined__",u=500,f="__lodash_placeholder__",d=1,p=2,h=4,v=1,m=2,g=1,y=2,b=4,w=8,C=16,_=32,E=64,x=128,k=256,S=512,O=30,N="...",P=800,T=16,V=1,R=2,L=1/0,A=9007199254740991,j=17976931348623157e292,B=NaN,I=4294967295,M=I-1,F=I>>>1,D=[["ary",x],["bind",g],["bindKey",y],["curry",w],["curryRight",C],["flip",S],["partial",_],["partialRight",E],["rearg",k]],U="[object Arguments]",$="[object Array]",H="[object AsyncFunction]",z="[object Boolean]",q="[object Date]",W="[object DOMException]",K="[object Error]",G="[object Function]",Z="[object GeneratorFunction]",Y="[object Map]",J="[object Number]",Q="[object Null]",X="[object Object]",ee="[object Promise]",te="[object Proxy]",ne="[object RegExp]",re="[object Set]",oe="[object String]",ie="[object Symbol]",ae="[object Undefined]",le="[object WeakMap]",se="[object WeakSet]",ce="[object ArrayBuffer]",ue="[object DataView]",fe="[object Float32Array]",de="[object Float64Array]",pe="[object Int8Array]",he="[object Int16Array]",ve="[object Int32Array]",me="[object Uint8Array]",ge="[object Uint8ClampedArray]",ye="[object Uint16Array]",be="[object Uint32Array]",we=/\b__p \+= '';/g,Ce=/\b(__p \+=) '' \+/g,_e=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Ee=/&(?:amp|lt|gt|quot|#39);/g,xe=/[&<>"']/g,ke=RegExp(Ee.source),Se=RegExp(xe.source),Oe=/<%-([\s\S]+?)%>/g,Ne=/<%([\s\S]+?)%>/g,Pe=/<%=([\s\S]+?)%>/g,Te=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ve=/^\w*$/,Re=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Le=/[\\^$.*+?()[\]{}|]/g,Ae=RegExp(Le.source),je=/^\s+/,Be=/\s/,Ie=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Me=/\{\n\/\* \[wrapped with (.+)\] \*/,Fe=/,? & /,De=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ue=/[()=,{}\[\]\/\s]/,$e=/\\(\\)?/g,He=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ze=/\w*$/,qe=/^[-+]0x[0-9a-f]+$/i,We=/^0b[01]+$/i,Ke=/^\[object .+?Constructor\]$/,Ge=/^0o[0-7]+$/i,Ze=/^(?:0|[1-9]\d*)$/,Ye=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Je=/($^)/,Qe=/['\n\r\u2028\u2029\\]/g,Xe="\\ud800-\\udfff",et="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",tt="\\u2700-\\u27bf",nt="a-z\\xdf-\\xf6\\xf8-\\xff",rt="A-Z\\xc0-\\xd6\\xd8-\\xde",ot="\\ufe0e\\ufe0f",it="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",at="['’]",lt="["+Xe+"]",st="["+it+"]",ct="["+et+"]",ut="\\d+",ft="["+tt+"]",dt="["+nt+"]",pt="[^"+Xe+it+ut+tt+nt+rt+"]",ht="\\ud83c[\\udffb-\\udfff]",vt="[^"+Xe+"]",mt="(?:\\ud83c[\\udde6-\\uddff]){2}",gt="[\\ud800-\\udbff][\\udc00-\\udfff]",yt="["+rt+"]",bt="\\u200d",wt="(?:"+dt+"|"+pt+")",Ct="(?:"+yt+"|"+pt+")",_t="(?:['’](?:d|ll|m|re|s|t|ve))?",Et="(?:['’](?:D|LL|M|RE|S|T|VE))?",xt="(?:"+ct+"|"+ht+")"+"?",kt="["+ot+"]?",St=kt+xt+("(?:"+bt+"(?:"+[vt,mt,gt].join("|")+")"+kt+xt+")*"),Ot="(?:"+[ft,mt,gt].join("|")+")"+St,Nt="(?:"+[vt+ct+"?",ct,mt,gt,lt].join("|")+")",Pt=RegExp(at,"g"),Tt=RegExp(ct,"g"),Vt=RegExp(ht+"(?="+ht+")|"+Nt+St,"g"),Rt=RegExp([yt+"?"+dt+"+"+_t+"(?="+[st,yt,"$"].join("|")+")",Ct+"+"+Et+"(?="+[st,yt+wt,"$"].join("|")+")",yt+"?"+wt+"+"+_t,yt+"+"+Et,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ut,Ot].join("|"),"g"),Lt=RegExp("["+bt+Xe+et+ot+"]"),At=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,jt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Bt=-1,It={};It[fe]=It[de]=It[pe]=It[he]=It[ve]=It[me]=It[ge]=It[ye]=It[be]=!0,It[U]=It[$]=It[ce]=It[z]=It[ue]=It[q]=It[K]=It[G]=It[Y]=It[J]=It[X]=It[ne]=It[re]=It[oe]=It[le]=!1;var Mt={};Mt[U]=Mt[$]=Mt[ce]=Mt[ue]=Mt[z]=Mt[q]=Mt[fe]=Mt[de]=Mt[pe]=Mt[he]=Mt[ve]=Mt[Y]=Mt[J]=Mt[X]=Mt[ne]=Mt[re]=Mt[oe]=Mt[ie]=Mt[me]=Mt[ge]=Mt[ye]=Mt[be]=!0,Mt[K]=Mt[G]=Mt[le]=!1;var Ft={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Dt=parseFloat,Ut=parseInt,$t="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,Ht="object"==typeof self&&self&&self.Object===Object&&self,zt=$t||Ht||Function("return this")(),qt=t&&!t.nodeType&&t,Wt=qt&&e&&!e.nodeType&&e,Kt=Wt&&Wt.exports===qt,Gt=Kt&&$t.process,Zt=function(){try{var e=Wt&&Wt.require&&Wt.require("util").types;return e||Gt&&Gt.binding&&Gt.binding("util")}catch(e){}}(),Yt=Zt&&Zt.isArrayBuffer,Jt=Zt&&Zt.isDate,Qt=Zt&&Zt.isMap,Xt=Zt&&Zt.isRegExp,en=Zt&&Zt.isSet,tn=Zt&&Zt.isTypedArray;function nn(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function rn(e,t,n,r){for(var o=-1,i=null==e?0:e.length;++o-1}function un(e,t,n){for(var r=-1,o=null==e?0:e.length;++r-1;);return n}function Ln(e,t){for(var n=e.length;n--&&bn(t,e[n],0)>-1;);return n}var An=xn({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),jn=xn({"&":"&","<":"<",">":">",'"':""","'":"'"});function Bn(e){return"\\"+Ft[e]}function In(e){return Lt.test(e)}function Mn(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}function Fn(e,t){return function(n){return e(t(n))}}function Dn(e,t){for(var n=-1,r=e.length,o=0,i=[];++n",""":'"',"'":"'"});var Kn=function e(t){var n,r=(t=null==t?zt:Kn.defaults(zt.Object(),t,Kn.pick(zt,jt))).Array,Be=t.Date,Xe=t.Error,et=t.Function,tt=t.Math,nt=t.Object,rt=t.RegExp,ot=t.String,it=t.TypeError,at=r.prototype,lt=et.prototype,st=nt.prototype,ct=t["__core-js_shared__"],ut=lt.toString,ft=st.hasOwnProperty,dt=0,pt=(n=/[^.]+$/.exec(ct&&ct.keys&&ct.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",ht=st.toString,vt=ut.call(nt),mt=zt._,gt=rt("^"+ut.call(ft).replace(Le,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),yt=Kt?t.Buffer:o,bt=t.Symbol,wt=t.Uint8Array,Ct=yt?yt.allocUnsafe:o,_t=Fn(nt.getPrototypeOf,nt),Et=nt.create,xt=st.propertyIsEnumerable,kt=at.splice,St=bt?bt.isConcatSpreadable:o,Ot=bt?bt.iterator:o,Nt=bt?bt.toStringTag:o,Vt=function(){try{var e=$i(nt,"defineProperty");return e({},"",{}),e}catch(e){}}(),Lt=t.clearTimeout!==zt.clearTimeout&&t.clearTimeout,Ft=Be&&Be.now!==zt.Date.now&&Be.now,$t=t.setTimeout!==zt.setTimeout&&t.setTimeout,Ht=tt.ceil,qt=tt.floor,Wt=nt.getOwnPropertySymbols,Gt=yt?yt.isBuffer:o,Zt=t.isFinite,mn=at.join,xn=Fn(nt.keys,nt),Gn=tt.max,Zn=tt.min,Yn=Be.now,Jn=t.parseInt,Qn=tt.random,Xn=at.reverse,er=$i(t,"DataView"),tr=$i(t,"Map"),nr=$i(t,"Promise"),rr=$i(t,"Set"),or=$i(t,"WeakMap"),ir=$i(nt,"create"),ar=or&&new or,lr={},sr=ha(er),cr=ha(tr),ur=ha(nr),fr=ha(rr),dr=ha(or),pr=bt?bt.prototype:o,hr=pr?pr.valueOf:o,vr=pr?pr.toString:o;function mr(e){if(Vl(e)&&!wl(e)&&!(e instanceof wr)){if(e instanceof br)return e;if(ft.call(e,"__wrapped__"))return va(e)}return new br(e)}var gr=function(){function e(){}return function(t){if(!Tl(t))return{};if(Et)return Et(t);e.prototype=t;var n=new e;return e.prototype=o,n}}();function yr(){}function br(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=o}function wr(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=I,this.__views__=[]}function Cr(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function Mr(e,t,n,r,i,a){var l,s=t&d,c=t&p,u=t&h;if(n&&(l=i?n(e,r,i,a):n(e)),l!==o)return l;if(!Tl(e))return e;var f=wl(e);if(f){if(l=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&ft.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!s)return ai(e,l)}else{var v=qi(e),m=v==G||v==Z;if(xl(e))return ei(e,s);if(v==X||v==U||m&&!i){if(l=c||m?{}:Ki(e),!s)return c?function(e,t){return li(e,zi(e),t)}(e,function(e,t){return e&&li(t,ss(t),e)}(l,e)):function(e,t){return li(e,Hi(e),t)}(e,Ar(l,e))}else{if(!Mt[v])return i?e:{};l=function(e,t,n){var r=e.constructor;switch(t){case ce:return ti(e);case z:case q:return new r(+e);case ue:return function(e,t){var n=t?ti(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case fe:case de:case pe:case he:case ve:case me:case ge:case ye:case be:return ni(e,n);case Y:return new r;case J:case oe:return new r(e);case ne:return function(e){var t=new e.constructor(e.source,ze.exec(e));return t.lastIndex=e.lastIndex,t}(e);case re:return new r;case ie:return o=e,hr?nt(hr.call(o)):{}}var o}(e,v,s)}}a||(a=new kr);var g=a.get(e);if(g)return g;a.set(e,l),Bl(e)?e.forEach((function(r){l.add(Mr(r,t,n,r,e,a))})):Rl(e)&&e.forEach((function(r,o){l.set(o,Mr(r,t,n,o,e,a))}));var y=f?o:(u?c?ji:Ai:c?ss:ls)(e);return on(y||e,(function(r,o){y&&(r=e[o=r]),Vr(l,o,Mr(r,t,n,o,e,a))})),l}function Fr(e,t,n){var r=n.length;if(null==e)return!r;for(e=nt(e);r--;){var i=n[r],a=t[i],l=e[i];if(l===o&&!(i in e)||!a(l))return!1}return!0}function Dr(e,t,n){if("function"!=typeof e)throw new it(l);return la((function(){e.apply(o,n)}),t)}function Ur(e,t,n,r){var o=-1,a=cn,l=!0,s=e.length,c=[],u=t.length;if(!s)return c;n&&(t=fn(t,Pn(n))),r?(a=un,l=!1):t.length>=i&&(a=Vn,l=!1,t=new xr(t));e:for(;++o-1},_r.prototype.set=function(e,t){var n=this.__data__,r=Rr(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Er.prototype.clear=function(){this.size=0,this.__data__={hash:new Cr,map:new(tr||_r),string:new Cr}},Er.prototype.delete=function(e){var t=Di(this,e).delete(e);return this.size-=t?1:0,t},Er.prototype.get=function(e){return Di(this,e).get(e)},Er.prototype.has=function(e){return Di(this,e).has(e)},Er.prototype.set=function(e,t){var n=Di(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},xr.prototype.add=xr.prototype.push=function(e){return this.__data__.set(e,c),this},xr.prototype.has=function(e){return this.__data__.has(e)},kr.prototype.clear=function(){this.__data__=new _r,this.size=0},kr.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},kr.prototype.get=function(e){return this.__data__.get(e)},kr.prototype.has=function(e){return this.__data__.has(e)},kr.prototype.set=function(e,t){var n=this.__data__;if(n instanceof _r){var r=n.__data__;if(!tr||r.length0&&n(l)?t>1?Kr(l,t-1,n,r,o):dn(o,l):r||(o[o.length]=l)}return o}var Gr=fi(),Zr=fi(!0);function Yr(e,t){return e&&Gr(e,t,ls)}function Jr(e,t){return e&&Zr(e,t,ls)}function Qr(e,t){return sn(t,(function(t){return Ol(e[t])}))}function Xr(e,t){for(var n=0,r=(t=Yo(t,e)).length;null!=e&&nt}function ro(e,t){return null!=e&&ft.call(e,t)}function oo(e,t){return null!=e&&t in nt(e)}function io(e,t,n){for(var i=n?un:cn,a=e[0].length,l=e.length,s=l,c=r(l),u=1/0,f=[];s--;){var d=e[s];s&&t&&(d=fn(d,Pn(t))),u=Zn(d.length,u),c[s]=!n&&(t||a>=120&&d.length>=120)?new xr(s&&d):o}d=e[0];var p=-1,h=c[0];e:for(;++p=l?s:s*("desc"==n[r]?-1:1)}return e.index-t.index}(e,t,n)}))}function _o(e,t,n){for(var r=-1,o=t.length,i={};++r-1;)l!==e&&kt.call(l,s,1),kt.call(e,s,1);return e}function xo(e,t){for(var n=e?t.length:0,r=n-1;n--;){var o=t[n];if(n==r||o!==i){var i=o;Zi(o)?kt.call(e,o,1):$o(e,o)}}return e}function ko(e,t){return e+qt(Qn()*(t-e+1))}function So(e,t){var n="";if(!e||t<1||t>A)return n;do{t%2&&(n+=e),(t=qt(t/2))&&(e+=e)}while(t);return n}function Oo(e,t){return sa(ra(e,t,Ls),e+"")}function No(e){return Or(ms(e))}function Po(e,t){var n=ms(e);return fa(n,Ir(t,0,n.length))}function To(e,t,n,r){if(!Tl(e))return e;for(var i=-1,a=(t=Yo(t,e)).length,l=a-1,s=e;null!=s&&++ii?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var a=r(i);++o>>1,a=e[i];null!==a&&!Ml(a)&&(n?a<=t:a=i){var u=t?null:Si(e);if(u)return Un(u);l=!1,o=Vn,c=new xr}else c=t?[]:s;e:for(;++r=r?e:Ao(e,t,n)}var Xo=Lt||function(e){return zt.clearTimeout(e)};function ei(e,t){if(t)return e.slice();var n=e.length,r=Ct?Ct(n):new e.constructor(n);return e.copy(r),r}function ti(e){var t=new e.constructor(e.byteLength);return new wt(t).set(new wt(e)),t}function ni(e,t){var n=t?ti(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function ri(e,t){if(e!==t){var n=e!==o,r=null===e,i=e==e,a=Ml(e),l=t!==o,s=null===t,c=t==t,u=Ml(t);if(!s&&!u&&!a&&e>t||a&&l&&c&&!s&&!u||r&&l&&c||!n&&c||!i)return 1;if(!r&&!a&&!u&&e1?n[i-1]:o,l=i>2?n[2]:o;for(a=e.length>3&&"function"==typeof a?(i--,a):o,l&&Yi(n[0],n[1],l)&&(a=i<3?o:a,i=1),t=nt(t);++r-1?i[a?t[l]:l]:o}}function mi(e){return Li((function(t){var n=t.length,r=n,i=br.prototype.thru;for(e&&t.reverse();r--;){var a=t[r];if("function"!=typeof a)throw new it(l);if(i&&!s&&"wrapper"==Ii(a))var s=new br([],!0)}for(r=s?r:n;++r1&&w.reverse(),d&&us))return!1;var u=a.get(e),f=a.get(t);if(u&&f)return u==t&&f==e;var d=-1,p=!0,h=n&m?new xr:o;for(a.set(e,t),a.set(t,e);++d-1&&e%1==0&&e1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(Ie,"{\n/* [wrapped with "+t+"] */\n")}(r,function(e,t){return on(D,(function(n){var r="_."+n[0];t&n[1]&&!cn(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(Me);return t?t[1].split(Fe):[]}(r),n)))}function ua(e){var t=0,n=0;return function(){var r=Yn(),i=T-(r-n);if(n=r,i>0){if(++t>=P)return arguments[0]}else t=0;return e.apply(o,arguments)}}function fa(e,t){var n=-1,r=e.length,i=r-1;for(t=t===o?r:t;++n1?e[t-1]:o;return n="function"==typeof n?(e.pop(),n):o,ja(e,n)}));function $a(e){var t=mr(e);return t.__chain__=!0,t}function Ha(e,t){return t(e)}var za=Li((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return Br(t,e)};return!(t>1||this.__actions__.length)&&r instanceof wr&&Zi(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:Ha,args:[i],thisArg:o}),new br(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(o),e}))):this.thru(i)}));var qa=si((function(e,t,n){ft.call(e,n)?++e[n]:jr(e,n,1)}));var Wa=vi(ba),Ka=vi(wa);function Ga(e,t){return(wl(e)?on:$r)(e,Fi(t,3))}function Za(e,t){return(wl(e)?an:Hr)(e,Fi(t,3))}var Ya=si((function(e,t,n){ft.call(e,n)?e[n].push(t):jr(e,n,[t])}));var Ja=Oo((function(e,t,n){var o=-1,i="function"==typeof t,a=_l(e)?r(e.length):[];return $r(e,(function(e){a[++o]=i?nn(t,e,n):ao(e,t,n)})),a})),Qa=si((function(e,t,n){jr(e,n,t)}));function Xa(e,t){return(wl(e)?fn:mo)(e,Fi(t,3))}var el=si((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var tl=Oo((function(e,t){if(null==e)return[];var n=t.length;return n>1&&Yi(e,t[0],t[1])?t=[]:n>2&&Yi(t[0],t[1],t[2])&&(t=[t[0]]),Co(e,Kr(t,1),[])})),nl=Ft||function(){return zt.Date.now()};function rl(e,t,n){return t=n?o:t,t=e&&null==t?e.length:t,Ni(e,x,o,o,o,o,t)}function ol(e,t){var n;if("function"!=typeof t)throw new it(l);return e=zl(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=o),n}}var il=Oo((function(e,t,n){var r=g;if(n.length){var o=Dn(n,Mi(il));r|=_}return Ni(e,r,t,n,o)})),al=Oo((function(e,t,n){var r=g|y;if(n.length){var o=Dn(n,Mi(al));r|=_}return Ni(t,r,e,n,o)}));function ll(e,t,n){var r,i,a,s,c,u,f=0,d=!1,p=!1,h=!0;if("function"!=typeof e)throw new it(l);function v(t){var n=r,a=i;return r=i=o,f=t,s=e.apply(a,n)}function m(e){var n=e-u;return u===o||n>=t||n<0||p&&e-f>=a}function g(){var e=nl();if(m(e))return y(e);c=la(g,function(e){var n=t-(e-u);return p?Zn(n,a-(e-f)):n}(e))}function y(e){return c=o,h&&r?v(e):(r=i=o,s)}function b(){var e=nl(),n=m(e);if(r=arguments,i=this,u=e,n){if(c===o)return function(e){return f=e,c=la(g,t),d?v(e):s}(u);if(p)return Xo(c),c=la(g,t),v(u)}return c===o&&(c=la(g,t)),s}return t=Wl(t)||0,Tl(n)&&(d=!!n.leading,a=(p="maxWait"in n)?Gn(Wl(n.maxWait)||0,t):a,h="trailing"in n?!!n.trailing:h),b.cancel=function(){c!==o&&Xo(c),f=0,r=u=i=c=o},b.flush=function(){return c===o?s:y(nl())},b}var sl=Oo((function(e,t){return Dr(e,1,t)})),cl=Oo((function(e,t,n){return Dr(e,Wl(t)||0,n)}));function ul(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new it(l);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(ul.Cache||Er),n}function fl(e){if("function"!=typeof e)throw new it(l);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}ul.Cache=Er;var dl=Jo((function(e,t){var n=(t=1==t.length&&wl(t[0])?fn(t[0],Pn(Fi())):fn(Kr(t,1),Pn(Fi()))).length;return Oo((function(r){for(var o=-1,i=Zn(r.length,n);++o=t})),bl=lo(function(){return arguments}())?lo:function(e){return Vl(e)&&ft.call(e,"callee")&&!xt.call(e,"callee")},wl=r.isArray,Cl=Yt?Pn(Yt):function(e){return Vl(e)&&to(e)==ce};function _l(e){return null!=e&&Pl(e.length)&&!Ol(e)}function El(e){return Vl(e)&&_l(e)}var xl=Gt||Ws,kl=Jt?Pn(Jt):function(e){return Vl(e)&&to(e)==q};function Sl(e){if(!Vl(e))return!1;var t=to(e);return t==K||t==W||"string"==typeof e.message&&"string"==typeof e.name&&!Al(e)}function Ol(e){if(!Tl(e))return!1;var t=to(e);return t==G||t==Z||t==H||t==te}function Nl(e){return"number"==typeof e&&e==zl(e)}function Pl(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=A}function Tl(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Vl(e){return null!=e&&"object"==typeof e}var Rl=Qt?Pn(Qt):function(e){return Vl(e)&&qi(e)==Y};function Ll(e){return"number"==typeof e||Vl(e)&&to(e)==J}function Al(e){if(!Vl(e)||to(e)!=X)return!1;var t=_t(e);if(null===t)return!0;var n=ft.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&ut.call(n)==vt}var jl=Xt?Pn(Xt):function(e){return Vl(e)&&to(e)==ne};var Bl=en?Pn(en):function(e){return Vl(e)&&qi(e)==re};function Il(e){return"string"==typeof e||!wl(e)&&Vl(e)&&to(e)==oe}function Ml(e){return"symbol"==typeof e||Vl(e)&&to(e)==ie}var Fl=tn?Pn(tn):function(e){return Vl(e)&&Pl(e.length)&&!!It[to(e)]};var Dl=Ei(vo),Ul=Ei((function(e,t){return e<=t}));function $l(e){if(!e)return[];if(_l(e))return Il(e)?zn(e):ai(e);if(Ot&&e[Ot])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Ot]());var t=qi(e);return(t==Y?Mn:t==re?Un:ms)(e)}function Hl(e){return e?(e=Wl(e))===L||e===-L?(e<0?-1:1)*j:e==e?e:0:0===e?e:0}function zl(e){var t=Hl(e),n=t%1;return t==t?n?t-n:t:0}function ql(e){return e?Ir(zl(e),0,I):0}function Wl(e){if("number"==typeof e)return e;if(Ml(e))return B;if(Tl(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Tl(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=Nn(e);var n=We.test(e);return n||Ge.test(e)?Ut(e.slice(2),n?2:8):qe.test(e)?B:+e}function Kl(e){return li(e,ss(e))}function Gl(e){return null==e?"":Do(e)}var Zl=ci((function(e,t){if(ea(t)||_l(t))li(t,ls(t),e);else for(var n in t)ft.call(t,n)&&Vr(e,n,t[n])})),Yl=ci((function(e,t){li(t,ss(t),e)})),Jl=ci((function(e,t,n,r){li(t,ss(t),e,r)})),Ql=ci((function(e,t,n,r){li(t,ls(t),e,r)})),Xl=Li(Br);var es=Oo((function(e,t){e=nt(e);var n=-1,r=t.length,i=r>2?t[2]:o;for(i&&Yi(t[0],t[1],i)&&(r=1);++n1),t})),li(e,ji(e),n),r&&(n=Mr(n,d|p|h,Vi));for(var o=t.length;o--;)$o(n,t[o]);return n}));var ds=Li((function(e,t){return null==e?{}:function(e,t){return _o(e,t,(function(t,n){return rs(e,n)}))}(e,t)}));function ps(e,t){if(null==e)return{};var n=fn(ji(e),(function(e){return[e]}));return t=Fi(t),_o(e,n,(function(e,n){return t(e,n[0])}))}var hs=Oi(ls),vs=Oi(ss);function ms(e){return null==e?[]:Tn(e,ls(e))}var gs=pi((function(e,t,n){return t=t.toLowerCase(),e+(n?ys(t):t)}));function ys(e){return Ss(Gl(e).toLowerCase())}function bs(e){return(e=Gl(e))&&e.replace(Ye,An).replace(Tt,"")}var ws=pi((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),Cs=pi((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),_s=di("toLowerCase");var Es=pi((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var xs=pi((function(e,t,n){return e+(n?" ":"")+Ss(t)}));var ks=pi((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),Ss=di("toUpperCase");function Os(e,t,n){return e=Gl(e),(t=n?o:t)===o?function(e){return At.test(e)}(e)?function(e){return e.match(Rt)||[]}(e):function(e){return e.match(De)||[]}(e):e.match(t)||[]}var Ns=Oo((function(e,t){try{return nn(e,o,t)}catch(e){return Sl(e)?e:new Xe(e)}})),Ps=Li((function(e,t){return on(t,(function(t){t=pa(t),jr(e,t,il(e[t],e))})),e}));function Ts(e){return function(){return e}}var Vs=mi(),Rs=mi(!0);function Ls(e){return e}function As(e){return fo("function"==typeof e?e:Mr(e,d))}var js=Oo((function(e,t){return function(n){return ao(n,e,t)}})),Bs=Oo((function(e,t){return function(n){return ao(e,n,t)}}));function Is(e,t,n){var r=ls(t),o=Qr(t,r);null!=n||Tl(t)&&(o.length||!r.length)||(n=t,t=e,e=this,o=Qr(t,ls(t)));var i=!(Tl(n)&&"chain"in n&&!n.chain),a=Ol(e);return on(o,(function(n){var r=t[n];e[n]=r,a&&(e.prototype[n]=function(){var t=this.__chain__;if(i||t){var n=e(this.__wrapped__);return(n.__actions__=ai(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,dn([this.value()],arguments))})})),e}function Ms(){}var Fs=wi(fn),Ds=wi(ln),Us=wi(vn);function $s(e){return Ji(e)?En(pa(e)):function(e){return function(t){return Xr(t,e)}}(e)}var Hs=_i(),zs=_i(!0);function qs(){return[]}function Ws(){return!1}var Ks=bi((function(e,t){return e+t}),0),Gs=ki("ceil"),Zs=bi((function(e,t){return e/t}),1),Ys=ki("floor");var Js,Qs=bi((function(e,t){return e*t}),1),Xs=ki("round"),ec=bi((function(e,t){return e-t}),0);return mr.after=function(e,t){if("function"!=typeof t)throw new it(l);return e=zl(e),function(){if(--e<1)return t.apply(this,arguments)}},mr.ary=rl,mr.assign=Zl,mr.assignIn=Yl,mr.assignInWith=Jl,mr.assignWith=Ql,mr.at=Xl,mr.before=ol,mr.bind=il,mr.bindAll=Ps,mr.bindKey=al,mr.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return wl(e)?e:[e]},mr.chain=$a,mr.chunk=function(e,t,n){t=(n?Yi(e,t,n):t===o)?1:Gn(zl(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var a=0,l=0,s=r(Ht(i/t));ai?0:i+n),(r=r===o||r>i?i:zl(r))<0&&(r+=i),r=n>r?0:ql(r);n>>0)?(e=Gl(e))&&("string"==typeof t||null!=t&&!jl(t))&&!(t=Do(t))&&In(e)?Qo(zn(e),0,n):e.split(t,n):[]},mr.spread=function(e,t){if("function"!=typeof e)throw new it(l);return t=null==t?0:Gn(zl(t),0),Oo((function(n){var r=n[t],o=Qo(n,0,t);return r&&dn(o,r),nn(e,this,o)}))},mr.tail=function(e){var t=null==e?0:e.length;return t?Ao(e,1,t):[]},mr.take=function(e,t,n){return e&&e.length?Ao(e,0,(t=n||t===o?1:zl(t))<0?0:t):[]},mr.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?Ao(e,(t=r-(t=n||t===o?1:zl(t)))<0?0:t,r):[]},mr.takeRightWhile=function(e,t){return e&&e.length?zo(e,Fi(t,3),!1,!0):[]},mr.takeWhile=function(e,t){return e&&e.length?zo(e,Fi(t,3)):[]},mr.tap=function(e,t){return t(e),e},mr.throttle=function(e,t,n){var r=!0,o=!0;if("function"!=typeof e)throw new it(l);return Tl(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),ll(e,t,{leading:r,maxWait:t,trailing:o})},mr.thru=Ha,mr.toArray=$l,mr.toPairs=hs,mr.toPairsIn=vs,mr.toPath=function(e){return wl(e)?fn(e,pa):Ml(e)?[e]:ai(da(Gl(e)))},mr.toPlainObject=Kl,mr.transform=function(e,t,n){var r=wl(e),o=r||xl(e)||Fl(e);if(t=Fi(t,4),null==n){var i=e&&e.constructor;n=o?r?new i:[]:Tl(e)&&Ol(i)?gr(_t(e)):{}}return(o?on:Yr)(e,(function(e,r,o){return t(n,e,r,o)})),n},mr.unary=function(e){return rl(e,1)},mr.union=Va,mr.unionBy=Ra,mr.unionWith=La,mr.uniq=function(e){return e&&e.length?Uo(e):[]},mr.uniqBy=function(e,t){return e&&e.length?Uo(e,Fi(t,2)):[]},mr.uniqWith=function(e,t){return t="function"==typeof t?t:o,e&&e.length?Uo(e,o,t):[]},mr.unset=function(e,t){return null==e||$o(e,t)},mr.unzip=Aa,mr.unzipWith=ja,mr.update=function(e,t,n){return null==e?e:Ho(e,t,Zo(n))},mr.updateWith=function(e,t,n,r){return r="function"==typeof r?r:o,null==e?e:Ho(e,t,Zo(n),r)},mr.values=ms,mr.valuesIn=function(e){return null==e?[]:Tn(e,ss(e))},mr.without=Ba,mr.words=Os,mr.wrap=function(e,t){return pl(Zo(t),e)},mr.xor=Ia,mr.xorBy=Ma,mr.xorWith=Fa,mr.zip=Da,mr.zipObject=function(e,t){return Ko(e||[],t||[],Vr)},mr.zipObjectDeep=function(e,t){return Ko(e||[],t||[],To)},mr.zipWith=Ua,mr.entries=hs,mr.entriesIn=vs,mr.extend=Yl,mr.extendWith=Jl,Is(mr,mr),mr.add=Ks,mr.attempt=Ns,mr.camelCase=gs,mr.capitalize=ys,mr.ceil=Gs,mr.clamp=function(e,t,n){return n===o&&(n=t,t=o),n!==o&&(n=(n=Wl(n))==n?n:0),t!==o&&(t=(t=Wl(t))==t?t:0),Ir(Wl(e),t,n)},mr.clone=function(e){return Mr(e,h)},mr.cloneDeep=function(e){return Mr(e,d|h)},mr.cloneDeepWith=function(e,t){return Mr(e,d|h,t="function"==typeof t?t:o)},mr.cloneWith=function(e,t){return Mr(e,h,t="function"==typeof t?t:o)},mr.conformsTo=function(e,t){return null==t||Fr(e,t,ls(t))},mr.deburr=bs,mr.defaultTo=function(e,t){return null==e||e!=e?t:e},mr.divide=Zs,mr.endsWith=function(e,t,n){e=Gl(e),t=Do(t);var r=e.length,i=n=n===o?r:Ir(zl(n),0,r);return(n-=t.length)>=0&&e.slice(n,i)==t},mr.eq=ml,mr.escape=function(e){return(e=Gl(e))&&Se.test(e)?e.replace(xe,jn):e},mr.escapeRegExp=function(e){return(e=Gl(e))&&Ae.test(e)?e.replace(Le,"\\$&"):e},mr.every=function(e,t,n){var r=wl(e)?ln:zr;return n&&Yi(e,t,n)&&(t=o),r(e,Fi(t,3))},mr.find=Wa,mr.findIndex=ba,mr.findKey=function(e,t){return gn(e,Fi(t,3),Yr)},mr.findLast=Ka,mr.findLastIndex=wa,mr.findLastKey=function(e,t){return gn(e,Fi(t,3),Jr)},mr.floor=Ys,mr.forEach=Ga,mr.forEachRight=Za,mr.forIn=function(e,t){return null==e?e:Gr(e,Fi(t,3),ss)},mr.forInRight=function(e,t){return null==e?e:Zr(e,Fi(t,3),ss)},mr.forOwn=function(e,t){return e&&Yr(e,Fi(t,3))},mr.forOwnRight=function(e,t){return e&&Jr(e,Fi(t,3))},mr.get=ns,mr.gt=gl,mr.gte=yl,mr.has=function(e,t){return null!=e&&Wi(e,t,ro)},mr.hasIn=rs,mr.head=_a,mr.identity=Ls,mr.includes=function(e,t,n,r){e=_l(e)?e:ms(e),n=n&&!r?zl(n):0;var o=e.length;return n<0&&(n=Gn(o+n,0)),Il(e)?n<=o&&e.indexOf(t,n)>-1:!!o&&bn(e,t,n)>-1},mr.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var o=null==n?0:zl(n);return o<0&&(o=Gn(r+o,0)),bn(e,t,o)},mr.inRange=function(e,t,n){return t=Hl(t),n===o?(n=t,t=0):n=Hl(n),function(e,t,n){return e>=Zn(t,n)&&e=-A&&e<=A},mr.isSet=Bl,mr.isString=Il,mr.isSymbol=Ml,mr.isTypedArray=Fl,mr.isUndefined=function(e){return e===o},mr.isWeakMap=function(e){return Vl(e)&&qi(e)==le},mr.isWeakSet=function(e){return Vl(e)&&to(e)==se},mr.join=function(e,t){return null==e?"":mn.call(e,t)},mr.kebabCase=ws,mr.last=Sa,mr.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return n!==o&&(i=(i=zl(n))<0?Gn(r+i,0):Zn(i,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,i):yn(e,Cn,i,!0)},mr.lowerCase=Cs,mr.lowerFirst=_s,mr.lt=Dl,mr.lte=Ul,mr.max=function(e){return e&&e.length?qr(e,Ls,no):o},mr.maxBy=function(e,t){return e&&e.length?qr(e,Fi(t,2),no):o},mr.mean=function(e){return _n(e,Ls)},mr.meanBy=function(e,t){return _n(e,Fi(t,2))},mr.min=function(e){return e&&e.length?qr(e,Ls,vo):o},mr.minBy=function(e,t){return e&&e.length?qr(e,Fi(t,2),vo):o},mr.stubArray=qs,mr.stubFalse=Ws,mr.stubObject=function(){return{}},mr.stubString=function(){return""},mr.stubTrue=function(){return!0},mr.multiply=Qs,mr.nth=function(e,t){return e&&e.length?wo(e,zl(t)):o},mr.noConflict=function(){return zt._===this&&(zt._=mt),this},mr.noop=Ms,mr.now=nl,mr.pad=function(e,t,n){e=Gl(e);var r=(t=zl(t))?Hn(e):0;if(!t||r>=t)return e;var o=(t-r)/2;return Ci(qt(o),n)+e+Ci(Ht(o),n)},mr.padEnd=function(e,t,n){e=Gl(e);var r=(t=zl(t))?Hn(e):0;return t&&rt){var r=e;e=t,t=r}if(n||e%1||t%1){var i=Qn();return Zn(e+i*(t-e+Dt("1e-"+((i+"").length-1))),t)}return ko(e,t)},mr.reduce=function(e,t,n){var r=wl(e)?pn:kn,o=arguments.length<3;return r(e,Fi(t,4),n,o,$r)},mr.reduceRight=function(e,t,n){var r=wl(e)?hn:kn,o=arguments.length<3;return r(e,Fi(t,4),n,o,Hr)},mr.repeat=function(e,t,n){return t=(n?Yi(e,t,n):t===o)?1:zl(t),So(Gl(e),t)},mr.replace=function(){var e=arguments,t=Gl(e[0]);return e.length<3?t:t.replace(e[1],e[2])},mr.result=function(e,t,n){var r=-1,i=(t=Yo(t,e)).length;for(i||(i=1,e=o);++rA)return[];var n=I,r=Zn(e,I);t=Fi(t),e-=I;for(var o=On(r,t);++n=a)return e;var s=n-Hn(r);if(s<1)return r;var c=l?Qo(l,0,s).join(""):e.slice(0,s);if(i===o)return c+r;if(l&&(s+=c.length-s),jl(i)){if(e.slice(s).search(i)){var u,f=c;for(i.global||(i=rt(i.source,Gl(ze.exec(i))+"g")),i.lastIndex=0;u=i.exec(f);)var d=u.index;c=c.slice(0,d===o?s:d)}}else if(e.indexOf(Do(i),s)!=s){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+r},mr.unescape=function(e){return(e=Gl(e))&&ke.test(e)?e.replace(Ee,Wn):e},mr.uniqueId=function(e){var t=++dt;return Gl(e)+t},mr.upperCase=ks,mr.upperFirst=Ss,mr.each=Ga,mr.eachRight=Za,mr.first=_a,Is(mr,(Js={},Yr(mr,(function(e,t){ft.call(mr.prototype,t)||(Js[t]=e)})),Js),{chain:!1}),mr.VERSION="4.17.21",on(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){mr[e].placeholder=mr})),on(["drop","take"],(function(e,t){wr.prototype[e]=function(n){n=n===o?1:Gn(zl(n),0);var r=this.__filtered__&&!t?new wr(this):this.clone();return r.__filtered__?r.__takeCount__=Zn(n,r.__takeCount__):r.__views__.push({size:Zn(n,I),type:e+(r.__dir__<0?"Right":"")}),r},wr.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),on(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=n==V||3==n;wr.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Fi(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),on(["head","last"],(function(e,t){var n="take"+(t?"Right":"");wr.prototype[e]=function(){return this[n](1).value()[0]}})),on(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");wr.prototype[e]=function(){return this.__filtered__?new wr(this):this[n](1)}})),wr.prototype.compact=function(){return this.filter(Ls)},wr.prototype.find=function(e){return this.filter(e).head()},wr.prototype.findLast=function(e){return this.reverse().find(e)},wr.prototype.invokeMap=Oo((function(e,t){return"function"==typeof e?new wr(this):this.map((function(n){return ao(n,e,t)}))})),wr.prototype.reject=function(e){return this.filter(fl(Fi(e)))},wr.prototype.slice=function(e,t){e=zl(e);var n=this;return n.__filtered__&&(e>0||t<0)?new wr(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==o&&(n=(t=zl(t))<0?n.dropRight(-t):n.take(t-e)),n)},wr.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},wr.prototype.toArray=function(){return this.take(I)},Yr(wr.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=mr[r?"take"+("last"==t?"Right":""):t],a=r||/^find/.test(t);i&&(mr.prototype[t]=function(){var t=this.__wrapped__,l=r?[1]:arguments,s=t instanceof wr,c=l[0],u=s||wl(t),f=function(e){var t=i.apply(mr,dn([e],l));return r&&d?t[0]:t};u&&n&&"function"==typeof c&&1!=c.length&&(s=u=!1);var d=this.__chain__,p=!!this.__actions__.length,h=a&&!d,v=s&&!p;if(!a&&u){t=v?t:new wr(this);var m=e.apply(t,l);return m.__actions__.push({func:Ha,args:[f],thisArg:o}),new br(m,d)}return h&&v?e.apply(this,l):(m=this.thru(f),h?r?m.value()[0]:m.value():m)})})),on(["pop","push","shift","sort","splice","unshift"],(function(e){var t=at[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);mr.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var o=this.value();return t.apply(wl(o)?o:[],e)}return this[n]((function(n){return t.apply(wl(n)?n:[],e)}))}})),Yr(wr.prototype,(function(e,t){var n=mr[t];if(n){var r=n.name+"";ft.call(lr,r)||(lr[r]=[]),lr[r].push({name:t,func:n})}})),lr[gi(o,y).name]=[{name:"wrapper",func:o}],wr.prototype.clone=function(){var e=new wr(this.__wrapped__);return e.__actions__=ai(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=ai(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=ai(this.__views__),e},wr.prototype.reverse=function(){if(this.__filtered__){var e=new wr(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},wr.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=wl(e),r=t<0,o=n?e.length:0,i=function(e,t,n){var r=-1,o=n.length;for(;++r=this.__values__.length;return{done:e,value:e?o:this.__values__[this.__index__++]}},mr.prototype.plant=function(e){for(var t,n=this;n instanceof yr;){var r=va(n);r.__index__=0,r.__values__=o,t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t},mr.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof wr){var t=e;return this.__actions__.length&&(t=new wr(this)),(t=t.reverse()).__actions__.push({func:Ha,args:[Ta],thisArg:o}),new br(t,this.__chain__)}return this.thru(Ta)},mr.prototype.toJSON=mr.prototype.valueOf=mr.prototype.value=function(){return qo(this.__wrapped__,this.__actions__)},mr.prototype.first=mr.prototype.head,Ot&&(mr.prototype[Ot]=function(){return this}),mr}();zt._=Kn,(r=function(){return Kn}.call(t,n,t,e))===o||(e.exports=r)}.call(this)},378:()=>{},744:(e,t)=>{"use strict";t.Z=(e,t)=>{const n=e.__vccOpts||e;for(const[e,r]of t)n[e]=r;return n}},821:(e,t,n)=>{"use strict";n.r(t),n.d(t,{BaseTransition:()=>vr,Comment:()=>si,EffectScope:()=>pe,Fragment:()=>ai,KeepAlive:()=>Or,ReactiveEffect:()=>Ne,Static:()=>ci,Suspense:()=>Yn,Teleport:()=>oi,Text:()=>li,Transition:()=>Ja,TransitionGroup:()=>ml,VueElement:()=>za,assertNumber:()=>ln,callWithAsyncErrorHandling:()=>cn,callWithErrorHandling:()=>sn,camelize:()=>ee,capitalize:()=>re,cloneVNode:()=>Ti,compatUtils:()=>ka,compile:()=>Uf,computed:()=>ia,createApp:()=>Gl,createBlock:()=>bi,createCommentVNode:()=>Li,createElementBlock:()=>yi,createElementVNode:()=>Si,createHydrationRenderer:()=>Zo,createPropsRestProxy:()=>ha,createRenderer:()=>Go,createSSRApp:()=>Zl,createSlots:()=>oo,createStaticVNode:()=>Ri,createTextVNode:()=>Vi,createVNode:()=>Oi,customRef:()=>Xt,defineAsyncComponent:()=>xr,defineComponent:()=>_r,defineCustomElement:()=>Ua,defineEmits:()=>la,defineExpose:()=>sa,defineProps:()=>aa,defineSSRCustomElement:()=>$a,devtools:()=>Pn,effect:()=>Te,effectScope:()=>he,getCurrentInstance:()=>Hi,getCurrentScope:()=>me,getTransitionRawChildren:()=>Cr,guardReactiveProps:()=>Pi,h:()=>ma,handleError:()=>un,hydrate:()=>Kl,initCustomFormatter:()=>ba,initDirectivesForSSR:()=>Ql,inject:()=>rr,isMemoSame:()=>Ca,isProxy:()=>Bt,isReactive:()=>Lt,isReadonly:()=>At,isRef:()=>Ht,isRuntimeOnly:()=>Xi,isShallow:()=>jt,isVNode:()=>wi,markRaw:()=>Mt,mergeDefaults:()=>pa,mergeProps:()=>Ii,nextTick:()=>wn,normalizeClass:()=>d,normalizeProps:()=>p,normalizeStyle:()=>l,onActivated:()=>Pr,onBeforeMount:()=>Ir,onBeforeUnmount:()=>Ur,onBeforeUpdate:()=>Fr,onDeactivated:()=>Tr,onErrorCaptured:()=>Wr,onMounted:()=>Mr,onRenderTracked:()=>qr,onRenderTriggered:()=>zr,onScopeDispose:()=>ge,onServerPrefetch:()=>Hr,onUnmounted:()=>$r,onUpdated:()=>Dr,openBlock:()=>di,popScopeId:()=>Dn,provide:()=>nr,proxyRefs:()=>Jt,pushScopeId:()=>Fn,queuePostFlushCb:()=>En,reactive:()=>Nt,readonly:()=>Tt,ref:()=>zt,registerRuntimeCompiler:()=>Qi,render:()=>Wl,renderList:()=>ro,renderSlot:()=>io,resolveComponent:()=>Jr,resolveDirective:()=>eo,resolveDynamicComponent:()=>Xr,resolveFilter:()=>xa,resolveTransitionHooks:()=>gr,setBlockTracking:()=>mi,setDevtoolsHook:()=>Rn,setTransitionHooks:()=>wr,shallowReactive:()=>Pt,shallowReadonly:()=>Vt,shallowRef:()=>qt,ssrContextKey:()=>ga,ssrUtils:()=>Ea,stop:()=>Ve,toDisplayString:()=>_,toHandlerKey:()=>oe,toHandlers:()=>lo,toRaw:()=>It,toRef:()=>nn,toRefs:()=>en,transformVNodeArgs:()=>_i,triggerRef:()=>Gt,unref:()=>Zt,useAttrs:()=>fa,useCssModule:()=>qa,useCssVars:()=>Wa,useSSRContext:()=>ya,useSlots:()=>ua,useTransitionState:()=>pr,vModelCheckbox:()=>xl,vModelDynamic:()=>Vl,vModelRadio:()=>Sl,vModelSelect:()=>Ol,vModelText:()=>El,vShow:()=>Fl,version:()=>_a,warn:()=>an,watch:()=>sr,watchEffect:()=>or,watchPostEffect:()=>ir,watchSyncEffect:()=>ar,withAsyncContext:()=>va,withCtx:()=>$n,withDefaults:()=>ca,withDirectives:()=>Kr,withKeys:()=>Ml,withMemo:()=>wa,withModifiers:()=>Bl,withScopeId:()=>Un});var r={};function o(e,t){const n=Object.create(null),r=e.split(",");for(let e=0;e!!n[e.toLowerCase()]:e=>!!n[e]}n.r(r),n.d(r,{BaseTransition:()=>vr,Comment:()=>si,EffectScope:()=>pe,Fragment:()=>ai,KeepAlive:()=>Or,ReactiveEffect:()=>Ne,Static:()=>ci,Suspense:()=>Yn,Teleport:()=>oi,Text:()=>li,Transition:()=>Ja,TransitionGroup:()=>ml,VueElement:()=>za,assertNumber:()=>ln,callWithAsyncErrorHandling:()=>cn,callWithErrorHandling:()=>sn,camelize:()=>ee,capitalize:()=>re,cloneVNode:()=>Ti,compatUtils:()=>ka,computed:()=>ia,createApp:()=>Gl,createBlock:()=>bi,createCommentVNode:()=>Li,createElementBlock:()=>yi,createElementVNode:()=>Si,createHydrationRenderer:()=>Zo,createPropsRestProxy:()=>ha,createRenderer:()=>Go,createSSRApp:()=>Zl,createSlots:()=>oo,createStaticVNode:()=>Ri,createTextVNode:()=>Vi,createVNode:()=>Oi,customRef:()=>Xt,defineAsyncComponent:()=>xr,defineComponent:()=>_r,defineCustomElement:()=>Ua,defineEmits:()=>la,defineExpose:()=>sa,defineProps:()=>aa,defineSSRCustomElement:()=>$a,devtools:()=>Pn,effect:()=>Te,effectScope:()=>he,getCurrentInstance:()=>Hi,getCurrentScope:()=>me,getTransitionRawChildren:()=>Cr,guardReactiveProps:()=>Pi,h:()=>ma,handleError:()=>un,hydrate:()=>Kl,initCustomFormatter:()=>ba,initDirectivesForSSR:()=>Ql,inject:()=>rr,isMemoSame:()=>Ca,isProxy:()=>Bt,isReactive:()=>Lt,isReadonly:()=>At,isRef:()=>Ht,isRuntimeOnly:()=>Xi,isShallow:()=>jt,isVNode:()=>wi,markRaw:()=>Mt,mergeDefaults:()=>pa,mergeProps:()=>Ii,nextTick:()=>wn,normalizeClass:()=>d,normalizeProps:()=>p,normalizeStyle:()=>l,onActivated:()=>Pr,onBeforeMount:()=>Ir,onBeforeUnmount:()=>Ur,onBeforeUpdate:()=>Fr,onDeactivated:()=>Tr,onErrorCaptured:()=>Wr,onMounted:()=>Mr,onRenderTracked:()=>qr,onRenderTriggered:()=>zr,onScopeDispose:()=>ge,onServerPrefetch:()=>Hr,onUnmounted:()=>$r,onUpdated:()=>Dr,openBlock:()=>di,popScopeId:()=>Dn,provide:()=>nr,proxyRefs:()=>Jt,pushScopeId:()=>Fn,queuePostFlushCb:()=>En,reactive:()=>Nt,readonly:()=>Tt,ref:()=>zt,registerRuntimeCompiler:()=>Qi,render:()=>Wl,renderList:()=>ro,renderSlot:()=>io,resolveComponent:()=>Jr,resolveDirective:()=>eo,resolveDynamicComponent:()=>Xr,resolveFilter:()=>xa,resolveTransitionHooks:()=>gr,setBlockTracking:()=>mi,setDevtoolsHook:()=>Rn,setTransitionHooks:()=>wr,shallowReactive:()=>Pt,shallowReadonly:()=>Vt,shallowRef:()=>qt,ssrContextKey:()=>ga,ssrUtils:()=>Ea,stop:()=>Ve,toDisplayString:()=>_,toHandlerKey:()=>oe,toHandlers:()=>lo,toRaw:()=>It,toRef:()=>nn,toRefs:()=>en,transformVNodeArgs:()=>_i,triggerRef:()=>Gt,unref:()=>Zt,useAttrs:()=>fa,useCssModule:()=>qa,useCssVars:()=>Wa,useSSRContext:()=>ya,useSlots:()=>ua,useTransitionState:()=>pr,vModelCheckbox:()=>xl,vModelDynamic:()=>Vl,vModelRadio:()=>Sl,vModelSelect:()=>Ol,vModelText:()=>El,vShow:()=>Fl,version:()=>_a,warn:()=>an,watch:()=>sr,watchEffect:()=>or,watchPostEffect:()=>ir,watchSyncEffect:()=>ar,withAsyncContext:()=>va,withCtx:()=>$n,withDefaults:()=>ca,withDirectives:()=>Kr,withKeys:()=>Ml,withMemo:()=>wa,withModifiers:()=>Bl,withScopeId:()=>Un});const i={1:"TEXT",2:"CLASS",4:"STYLE",8:"PROPS",16:"FULL_PROPS",32:"HYDRATE_EVENTS",64:"STABLE_FRAGMENT",128:"KEYED_FRAGMENT",256:"UNKEYED_FRAGMENT",512:"NEED_PATCH",1024:"DYNAMIC_SLOTS",2048:"DEV_ROOT_FRAGMENT",[-1]:"HOISTED",[-2]:"BAIL"},a=o("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt");function l(e){if(j(e)){const t={};for(let n=0;n{if(e){const n=e.split(c);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function d(e){let t="";if(U(e))t=e;else if(j(e))for(let n=0;nw(e,t)))}const _=e=>U(e)?e:null==e?"":j(e)||H(e)&&(e.toString===q||!D(e.toString))?JSON.stringify(e,E,2):String(e),E=(e,t)=>t&&t.__v_isRef?E(e,t.value):B(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:I(t)?{[`Set(${t.size})`]:[...t.values()]}:!H(t)||j(t)||G(t)?t:String(t),x={},k=[],S=()=>{},O=()=>!1,N=/^on[^a-z]/,P=e=>N.test(e),T=e=>e.startsWith("onUpdate:"),V=Object.assign,R=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},L=Object.prototype.hasOwnProperty,A=(e,t)=>L.call(e,t),j=Array.isArray,B=e=>"[object Map]"===W(e),I=e=>"[object Set]"===W(e),M=e=>"[object Date]"===W(e),F=e=>"[object RegExp]"===W(e),D=e=>"function"==typeof e,U=e=>"string"==typeof e,$=e=>"symbol"==typeof e,H=e=>null!==e&&"object"==typeof e,z=e=>H(e)&&D(e.then)&&D(e.catch),q=Object.prototype.toString,W=e=>q.call(e),K=e=>W(e).slice(8,-1),G=e=>"[object Object]"===W(e),Z=e=>U(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,Y=o(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),J=o("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),Q=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},X=/-(\w)/g,ee=Q((e=>e.replace(X,((e,t)=>t?t.toUpperCase():"")))),te=/\B([A-Z])/g,ne=Q((e=>e.replace(te,"-$1").toLowerCase())),re=Q((e=>e.charAt(0).toUpperCase()+e.slice(1))),oe=Q((e=>e?`on${re(e)}`:"")),ie=(e,t)=>!Object.is(e,t),ae=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},se=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ce=e=>{const t=U(e)?Number(e):NaN;return isNaN(t)?e:t};let ue;const fe=()=>ue||(ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==n.g?n.g:{});let de;class pe{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=de,!e&&de&&(this.index=(de.scopes||(de.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=de;try{return de=this,e()}finally{de=t}}else 0}on(){de=this}off(){de=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t{const t=new Set(e);return t.w=0,t.n=0,t},be=e=>(e.w&Ee)>0,we=e=>(e.n&Ee)>0,Ce=new WeakMap;let _e=0,Ee=1;const xe=30;let ke;const Se=Symbol(""),Oe=Symbol("");class Ne{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],this.parent=void 0,ve(this,n)}run(){if(!this.active)return this.fn();let e=ke,t=Re;for(;e;){if(e===this)return;e=e.parent}try{return this.parent=ke,ke=this,Re=!0,Ee=1<<++_e,_e<=xe?(({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{("length"===n||n>=e)&&l.push(t)}))}else switch(void 0!==n&&l.push(a.get(n)),t){case"add":j(e)?Z(n)&&l.push(a.get("length")):(l.push(a.get(Se)),B(e)&&l.push(a.get(Oe)));break;case"delete":j(e)||(l.push(a.get(Se)),B(e)&&l.push(a.get(Oe)));break;case"set":B(e)&&l.push(a.get(Se))}if(1===l.length)l[0]&&Fe(l[0]);else{const e=[];for(const t of l)t&&e.push(...t);Fe(ye(e))}}function Fe(e,t){const n=j(e)?e:[...e];for(const e of n)e.computed&&De(e,t);for(const e of n)e.computed||De(e,t)}function De(e,t){(e!==ke||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Ue=o("__proto__,__v_isRef,__isVue"),$e=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter($)),He=Ye(),ze=Ye(!1,!0),qe=Ye(!0),We=Ye(!0,!0),Ke=Ge();function Ge(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=It(this);for(let e=0,t=this.length;e{e[t]=function(...e){Ae();const n=It(this)[t].apply(this,e);return je(),n}})),e}function Ze(e){const t=It(this);return Be(t,0,e),t.hasOwnProperty(e)}function Ye(e=!1,t=!1){return function(n,r,o){if("__v_isReactive"===r)return!e;if("__v_isReadonly"===r)return e;if("__v_isShallow"===r)return t;if("__v_raw"===r&&o===(e?t?Ot:St:t?kt:xt).get(n))return n;const i=j(n);if(!e){if(i&&A(Ke,r))return Reflect.get(Ke,r,o);if("hasOwnProperty"===r)return Ze}const a=Reflect.get(n,r,o);return($(r)?$e.has(r):Ue(r))?a:(e||Be(n,0,r),t?a:Ht(a)?i&&Z(r)?a:a.value:H(a)?e?Tt(a):Nt(a):a)}}function Je(e=!1){return function(t,n,r,o){let i=t[n];if(At(i)&&Ht(i)&&!Ht(r))return!1;if(!e&&(jt(r)||At(r)||(i=It(i),r=It(r)),!j(t)&&Ht(i)&&!Ht(r)))return i.value=r,!0;const a=j(t)&&Z(n)?Number(n)!0,deleteProperty:(e,t)=>!0},et=V({},Qe,{get:ze,set:Je(!0)}),tt=V({},Xe,{get:We}),nt=e=>e,rt=e=>Reflect.getPrototypeOf(e);function ot(e,t,n=!1,r=!1){const o=It(e=e.__v_raw),i=It(t);n||(t!==i&&Be(o,0,t),Be(o,0,i));const{has:a}=rt(o),l=r?nt:n?Dt:Ft;return a.call(o,t)?l(e.get(t)):a.call(o,i)?l(e.get(i)):void(e!==o&&e.get(t))}function it(e,t=!1){const n=this.__v_raw,r=It(n),o=It(e);return t||(e!==o&&Be(r,0,e),Be(r,0,o)),e===o?n.has(e):n.has(e)||n.has(o)}function at(e,t=!1){return e=e.__v_raw,!t&&Be(It(e),0,Se),Reflect.get(e,"size",e)}function lt(e){e=It(e);const t=It(this);return rt(t).has.call(t,e)||(t.add(e),Me(t,"add",e,e)),this}function st(e,t){t=It(t);const n=It(this),{has:r,get:o}=rt(n);let i=r.call(n,e);i||(e=It(e),i=r.call(n,e));const a=o.call(n,e);return n.set(e,t),i?ie(t,a)&&Me(n,"set",e,t):Me(n,"add",e,t),this}function ct(e){const t=It(this),{has:n,get:r}=rt(t);let o=n.call(t,e);o||(e=It(e),o=n.call(t,e));r&&r.call(t,e);const i=t.delete(e);return o&&Me(t,"delete",e,void 0),i}function ut(){const e=It(this),t=0!==e.size,n=e.clear();return t&&Me(e,"clear",void 0,void 0),n}function ft(e,t){return function(n,r){const o=this,i=o.__v_raw,a=It(i),l=t?nt:e?Dt:Ft;return!e&&Be(a,0,Se),i.forEach(((e,t)=>n.call(r,l(e),l(t),o)))}}function dt(e,t,n){return function(...r){const o=this.__v_raw,i=It(o),a=B(i),l="entries"===e||e===Symbol.iterator&&a,s="keys"===e&&a,c=o[e](...r),u=n?nt:t?Dt:Ft;return!t&&Be(i,0,s?Oe:Se),{next(){const{value:e,done:t}=c.next();return t?{value:e,done:t}:{value:l?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function pt(e){return function(...t){return"delete"!==e&&this}}function ht(){const e={get(e){return ot(this,e)},get size(){return at(this)},has:it,add:lt,set:st,delete:ct,clear:ut,forEach:ft(!1,!1)},t={get(e){return ot(this,e,!1,!0)},get size(){return at(this)},has:it,add:lt,set:st,delete:ct,clear:ut,forEach:ft(!1,!0)},n={get(e){return ot(this,e,!0)},get size(){return at(this,!0)},has(e){return it.call(this,e,!0)},add:pt("add"),set:pt("set"),delete:pt("delete"),clear:pt("clear"),forEach:ft(!0,!1)},r={get(e){return ot(this,e,!0,!0)},get size(){return at(this,!0)},has(e){return it.call(this,e,!0)},add:pt("add"),set:pt("set"),delete:pt("delete"),clear:pt("clear"),forEach:ft(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((o=>{e[o]=dt(o,!1,!1),n[o]=dt(o,!0,!1),t[o]=dt(o,!1,!0),r[o]=dt(o,!0,!0)})),[e,n,t,r]}const[vt,mt,gt,yt]=ht();function bt(e,t){const n=t?e?yt:gt:e?mt:vt;return(t,r,o)=>"__v_isReactive"===r?!e:"__v_isReadonly"===r?e:"__v_raw"===r?t:Reflect.get(A(n,r)&&r in t?n:t,r,o)}const wt={get:bt(!1,!1)},Ct={get:bt(!1,!0)},_t={get:bt(!0,!1)},Et={get:bt(!0,!0)};const xt=new WeakMap,kt=new WeakMap,St=new WeakMap,Ot=new WeakMap;function Nt(e){return At(e)?e:Rt(e,!1,Qe,wt,xt)}function Pt(e){return Rt(e,!1,et,Ct,kt)}function Tt(e){return Rt(e,!0,Xe,_t,St)}function Vt(e){return Rt(e,!0,tt,Et,Ot)}function Rt(e,t,n,r,o){if(!H(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const a=(l=e).__v_skip||!Object.isExtensible(l)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}(K(l));var l;if(0===a)return e;const s=new Proxy(e,2===a?r:n);return o.set(e,s),s}function Lt(e){return At(e)?Lt(e.__v_raw):!(!e||!e.__v_isReactive)}function At(e){return!(!e||!e.__v_isReadonly)}function jt(e){return!(!e||!e.__v_isShallow)}function Bt(e){return Lt(e)||At(e)}function It(e){const t=e&&e.__v_raw;return t?It(t):e}function Mt(e){return le(e,"__v_skip",!0),e}const Ft=e=>H(e)?Nt(e):e,Dt=e=>H(e)?Tt(e):e;function Ut(e){Re&&ke&&Ie((e=It(e)).dep||(e.dep=ye()))}function $t(e,t){const n=(e=It(e)).dep;n&&Fe(n)}function Ht(e){return!(!e||!0!==e.__v_isRef)}function zt(e){return Wt(e,!1)}function qt(e){return Wt(e,!0)}function Wt(e,t){return Ht(e)?e:new Kt(e,t)}class Kt{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:It(e),this._value=t?e:Ft(e)}get value(){return Ut(this),this._value}set value(e){const t=this.__v_isShallow||jt(e)||At(e);e=t?e:It(e),ie(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Ft(e),$t(this))}}function Gt(e){$t(e)}function Zt(e){return Ht(e)?e.value:e}const Yt={get:(e,t,n)=>Zt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ht(o)&&!Ht(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function Jt(e){return Lt(e)?e:new Proxy(e,Yt)}class Qt{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:t,set:n}=e((()=>Ut(this)),(()=>$t(this)));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}function Xt(e){return new Qt(e)}function en(e){const t=j(e)?new Array(e.length):{};for(const n in e)t[n]=nn(e,n);return t}class tn{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0}get value(){const e=this._object[this._key];return void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return function(e,t){var n;return null===(n=Ce.get(e))||void 0===n?void 0:n.get(t)}(It(this._object),this._key)}}function nn(e,t,n){const r=e[t];return Ht(r)?r:new tn(e,t,n)}var rn;class on{constructor(e,t,n,r){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this[rn]=!1,this._dirty=!0,this.effect=new Ne(e,(()=>{this._dirty||(this._dirty=!0,$t(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=n}get value(){const e=It(this);return Ut(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}rn="__v_isReadonly";function an(e,...t){}function ln(e,t){}function sn(e,t,n,r){let o;try{o=r?e(...r):e()}catch(e){un(e,t,n)}return o}function cn(e,t,n,r){if(D(e)){const o=sn(e,t,n,r);return o&&z(o)&&o.catch((e=>{un(e,t,n)})),o}const o=[];for(let i=0;i>>1;Sn(pn[r])Sn(e)-Sn(t))),gn=0;gnnull==e.id?1/0:e.id,On=(e,t)=>{const n=Sn(e)-Sn(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Nn(e){dn=!1,fn=!0,pn.sort(On);try{for(hn=0;hnPn.emit(e,...t))),Tn=[];else if("undefined"!=typeof window&&window.HTMLElement&&!(null===(r=null===(n=window.navigator)||void 0===n?void 0:n.userAgent)||void 0===r?void 0:r.includes("jsdom"))){(t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push((e=>{Rn(e,t)})),setTimeout((()=>{Pn||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,Vn=!0,Tn=[])}),3e3)}else Vn=!0,Tn=[]}function Ln(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||x;let o=n;const i=t.startsWith("update:"),a=i&&t.slice(7);if(a&&a in r){const e=`${"modelValue"===a?"model":a}Modifiers`,{number:t,trim:i}=r[e]||x;i&&(o=n.map((e=>U(e)?e.trim():e))),t&&(o=n.map(se))}let l;let s=r[l=oe(t)]||r[l=oe(ee(t))];!s&&i&&(s=r[l=oe(ne(t))]),s&&cn(s,e,6,o);const c=r[l+"Once"];if(c){if(e.emitted){if(e.emitted[l])return}else e.emitted={};e.emitted[l]=!0,cn(c,e,6,o)}}function An(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(void 0!==o)return o;const i=e.emits;let a={},l=!1;if(!D(e)){const r=e=>{const n=An(e,t,!0);n&&(l=!0,V(a,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return i||l?(j(i)?i.forEach((e=>a[e]=null)):V(a,i),H(e)&&r.set(e,a),a):(H(e)&&r.set(e,null),null)}function jn(e,t){return!(!e||!P(t))&&(t=t.slice(2).replace(/Once$/,""),A(e,t[0].toLowerCase()+t.slice(1))||A(e,ne(t))||A(e,t))}let Bn=null,In=null;function Mn(e){const t=Bn;return Bn=e,In=e&&e.type.__scopeId||null,t}function Fn(e){In=e}function Dn(){In=null}const Un=e=>$n;function $n(e,t=Bn,n){if(!t)return e;if(e._n)return e;const r=(...n)=>{r._d&&mi(-1);const o=Mn(t);let i;try{i=e(...n)}finally{Mn(o),r._d&&mi(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Hn(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:i,propsOptions:[a],slots:l,attrs:s,emit:c,render:u,renderCache:f,data:d,setupState:p,ctx:h,inheritAttrs:v}=e;let m,g;const y=Mn(e);try{if(4&n.shapeFlag){const e=o||r;m=Ai(u.call(e,e,f,i,p,d,h)),g=s}else{const e=t;0,m=Ai(e.length>1?e(i,{attrs:s,slots:l,emit:c}):e(i,null)),g=t.props?s:qn(s)}}catch(t){ui.length=0,un(t,e,1),m=Oi(si)}let b=m;if(g&&!1!==v){const e=Object.keys(g),{shapeFlag:t}=b;e.length&&7&t&&(a&&e.some(T)&&(g=Wn(g,a)),b=Ti(b,g))}return n.dirs&&(b=Ti(b),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&(b.transition=n.transition),m=b,Mn(y),m}function zn(e){let t;for(let n=0;n{let t;for(const n in e)("class"===n||"style"===n||P(n))&&((t||(t={}))[n]=e[n]);return t},Wn=(e,t)=>{const n={};for(const r in e)T(r)&&r.slice(9)in t||(n[r]=e[r]);return n};function Kn(e,t,n){const r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let o=0;oe.__isSuspense,Yn={name:"Suspense",__isSuspense:!0,process(e,t,n,r,o,i,a,l,s,c){null==e?function(e,t,n,r,o,i,a,l,s){const{p:c,o:{createElement:u}}=s,f=u("div"),d=e.suspense=Qn(e,o,r,t,f,n,i,a,l,s);c(null,d.pendingBranch=e.ssContent,f,null,r,d,i,a),d.deps>0?(Jn(e,"onPending"),Jn(e,"onFallback"),c(null,e.ssFallback,t,n,r,null,i,a),tr(d,e.ssFallback)):d.resolve()}(t,n,r,o,i,a,l,s,c):function(e,t,n,r,o,i,a,l,{p:s,um:c,o:{createElement:u}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const d=t.ssContent,p=t.ssFallback,{activeBranch:h,pendingBranch:v,isInFallback:m,isHydrating:g}=f;if(v)f.pendingBranch=d,Ci(d,v)?(s(v,d,f.hiddenContainer,null,o,f,i,a,l),f.deps<=0?f.resolve():m&&(s(h,p,n,r,o,null,i,a,l),tr(f,p))):(f.pendingId++,g?(f.isHydrating=!1,f.activeBranch=v):c(v,o,f),f.deps=0,f.effects.length=0,f.hiddenContainer=u("div"),m?(s(null,d,f.hiddenContainer,null,o,f,i,a,l),f.deps<=0?f.resolve():(s(h,p,n,r,o,null,i,a,l),tr(f,p))):h&&Ci(d,h)?(s(h,d,n,r,o,f,i,a,l),f.resolve(!0)):(s(null,d,f.hiddenContainer,null,o,f,i,a,l),f.deps<=0&&f.resolve()));else if(h&&Ci(d,h))s(h,d,n,r,o,f,i,a,l),tr(f,d);else if(Jn(t,"onPending"),f.pendingBranch=d,f.pendingId++,s(null,d,f.hiddenContainer,null,o,f,i,a,l),f.deps<=0)f.resolve();else{const{timeout:e,pendingId:t}=f;e>0?setTimeout((()=>{f.pendingId===t&&f.fallback(p)}),e):0===e&&f.fallback(p)}}(e,t,n,r,o,a,l,s,c)},hydrate:function(e,t,n,r,o,i,a,l,s){const c=t.suspense=Qn(t,r,n,e.parentNode,document.createElement("div"),null,o,i,a,l,!0),u=s(e,c.pendingBranch=t.ssContent,n,c,i,a);0===c.deps&&c.resolve();return u},create:Qn,normalize:function(e){const{shapeFlag:t,children:n}=e,r=32&t;e.ssContent=Xn(r?n.default:n),e.ssFallback=r?Xn(n.fallback):Oi(si)}};function Jn(e,t){const n=e.props&&e.props[t];D(n)&&n()}function Qn(e,t,n,r,o,i,a,l,s,c,u=!1){const{p:f,m:d,um:p,n:h,o:{parentNode:v,remove:m}}=c,g=e.props?ce(e.props.timeout):void 0;const y={vnode:e,parent:t,parentComponent:n,isSVG:a,container:r,hiddenContainer:o,anchor:i,deps:0,pendingId:0,timeout:"number"==typeof g?g:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:u,isUnmounted:!1,effects:[],resolve(e=!1){const{vnode:t,activeBranch:n,pendingBranch:r,pendingId:o,effects:i,parentComponent:a,container:l}=y;if(y.isHydrating)y.isHydrating=!1;else if(!e){const e=n&&r.transition&&"out-in"===r.transition.mode;e&&(n.transition.afterLeave=()=>{o===y.pendingId&&d(r,l,t,0)});let{anchor:t}=y;n&&(t=h(n),p(n,a,y,!0)),e||d(r,l,t,0)}tr(y,r),y.pendingBranch=null,y.isInFallback=!1;let s=y.parent,c=!1;for(;s;){if(s.pendingBranch){s.effects.push(...i),c=!0;break}s=s.parent}c||En(i),y.effects=[],Jn(t,"onResolve")},fallback(e){if(!y.pendingBranch)return;const{vnode:t,activeBranch:n,parentComponent:r,container:o,isSVG:i}=y;Jn(t,"onFallback");const a=h(n),c=()=>{y.isInFallback&&(f(null,e,o,a,r,null,i,l,s),tr(y,e))},u=e.transition&&"out-in"===e.transition.mode;u&&(n.transition.afterLeave=c),y.isInFallback=!0,p(n,r,null,!0),u||c()},move(e,t,n){y.activeBranch&&d(y.activeBranch,e,t,n),y.container=e},next:()=>y.activeBranch&&h(y.activeBranch),registerDep(e,t){const n=!!y.pendingBranch;n&&y.deps++;const r=e.vnode.el;e.asyncDep.catch((t=>{un(t,e,0)})).then((o=>{if(e.isUnmounted||y.isUnmounted||y.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:i}=e;Ji(e,o,!1),r&&(i.el=r);const l=!r&&e.subTree.el;t(e,i,v(r||e.subTree.el),r?null:h(e.subTree),y,a,s),l&&m(l),Gn(e,i.el),n&&0==--y.deps&&y.resolve()}))},unmount(e,t){y.isUnmounted=!0,y.activeBranch&&p(y.activeBranch,n,e,t),y.pendingBranch&&p(y.pendingBranch,n,e,t)}};return y}function Xn(e){let t;if(D(e)){const n=vi&&e._c;n&&(e._d=!1,di()),e=e(),n&&(e._d=!0,t=fi,pi())}if(j(e)){const t=zn(e);0,e=t}return e=Ai(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter((t=>t!==e))),e}function er(e,t){t&&t.pendingBranch?j(e)?t.effects.push(...e):t.effects.push(e):En(e)}function tr(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e,o=n.el=t.el;r&&r.subTree===n&&(r.vnode.el=o,Gn(r,o))}function nr(e,t){if($i){let n=$i.provides;const r=$i.parent&&$i.parent.provides;r===n&&(n=$i.provides=Object.create(r)),n[e]=t}else 0}function rr(e,t,n=!1){const r=$i||Bn;if(r){const o=null==r.parent?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&D(t)?t.call(r.proxy):t}else 0}function or(e,t){return cr(e,null,t)}function ir(e,t){return cr(e,null,{flush:"post"})}function ar(e,t){return cr(e,null,{flush:"sync"})}const lr={};function sr(e,t,n){return cr(e,t,n)}function cr(e,t,{immediate:n,deep:r,flush:o,onTrack:i,onTrigger:a}=x){const l=me()===(null==$i?void 0:$i.scope)?$i:null;let s,c,u=!1,f=!1;if(Ht(e)?(s=()=>e.value,u=jt(e)):Lt(e)?(s=()=>e,r=!0):j(e)?(f=!0,u=e.some((e=>Lt(e)||jt(e))),s=()=>e.map((e=>Ht(e)?e.value:Lt(e)?dr(e):D(e)?sn(e,l,2):void 0))):s=D(e)?t?()=>sn(e,l,2):()=>{if(!l||!l.isUnmounted)return c&&c(),cn(e,l,3,[p])}:S,t&&r){const e=s;s=()=>dr(e())}let d,p=e=>{c=g.onStop=()=>{sn(e,l,4)}};if(Zi){if(p=S,t?n&&cn(t,l,3,[s(),f?[]:void 0,p]):s(),"sync"!==o)return S;{const e=ya();d=e.__watcherHandles||(e.__watcherHandles=[])}}let h=f?new Array(e.length).fill(lr):lr;const v=()=>{if(g.active)if(t){const e=g.run();(r||u||(f?e.some(((e,t)=>ie(e,h[t]))):ie(e,h)))&&(c&&c(),cn(t,l,3,[e,h===lr?void 0:f&&h[0]===lr?[]:h,p]),h=e)}else g.run()};let m;v.allowRecurse=!!t,"sync"===o?m=v:"post"===o?m=()=>Ko(v,l&&l.suspense):(v.pre=!0,l&&(v.id=l.uid),m=()=>Cn(v));const g=new Ne(s,m);t?n?v():h=g.run():"post"===o?Ko(g.run.bind(g),l&&l.suspense):g.run();const y=()=>{g.stop(),l&&l.scope&&R(l.scope.effects,g)};return d&&d.push(y),y}function ur(e,t,n){const r=this.proxy,o=U(e)?e.includes(".")?fr(r,e):()=>r[e]:e.bind(r,r);let i;D(t)?i=t:(i=t.handler,n=t);const a=$i;zi(this);const l=cr(o,i.bind(r),n);return a?zi(a):qi(),l}function fr(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e{dr(e,t)}));else if(G(e))for(const n in e)dr(e[n],t);return e}function pr(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Mr((()=>{e.isMounted=!0})),Ur((()=>{e.isUnmounting=!0})),e}const hr=[Function,Array],vr={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:hr,onEnter:hr,onAfterEnter:hr,onEnterCancelled:hr,onBeforeLeave:hr,onLeave:hr,onAfterLeave:hr,onLeaveCancelled:hr,onBeforeAppear:hr,onAppear:hr,onAfterAppear:hr,onAppearCancelled:hr},setup(e,{slots:t}){const n=Hi(),r=pr();let o;return()=>{const i=t.default&&Cr(t.default(),!0);if(!i||!i.length)return;let a=i[0];if(i.length>1){let e=!1;for(const t of i)if(t.type!==si){0,a=t,e=!0;break}}const l=It(e),{mode:s}=l;if(r.isLeaving)return yr(a);const c=br(a);if(!c)return yr(a);const u=gr(c,l,r,n);wr(c,u);const f=n.subTree,d=f&&br(f);let p=!1;const{getTransitionKey:h}=c.type;if(h){const e=h();void 0===o?o=e:e!==o&&(o=e,p=!0)}if(d&&d.type!==si&&(!Ci(c,d)||p)){const e=gr(d,l,r,n);if(wr(d,e),"out-in"===s)return r.isLeaving=!0,e.afterLeave=()=>{r.isLeaving=!1,!1!==n.update.active&&n.update()},yr(a);"in-out"===s&&c.type!==si&&(e.delayLeave=(e,t,n)=>{mr(r,d)[String(d.key)]=d,e._leaveCb=()=>{t(),e._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=n})}return a}}};function mr(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function gr(e,t,n,r){const{appear:o,mode:i,persisted:a=!1,onBeforeEnter:l,onEnter:s,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:f,onLeave:d,onAfterLeave:p,onLeaveCancelled:h,onBeforeAppear:v,onAppear:m,onAfterAppear:g,onAppearCancelled:y}=t,b=String(e.key),w=mr(n,e),C=(e,t)=>{e&&cn(e,r,9,t)},_=(e,t)=>{const n=t[1];C(e,t),j(e)?e.every((e=>e.length<=1))&&n():e.length<=1&&n()},E={mode:i,persisted:a,beforeEnter(t){let r=l;if(!n.isMounted){if(!o)return;r=v||l}t._leaveCb&&t._leaveCb(!0);const i=w[b];i&&Ci(e,i)&&i.el._leaveCb&&i.el._leaveCb(),C(r,[t])},enter(e){let t=s,r=c,i=u;if(!n.isMounted){if(!o)return;t=m||s,r=g||c,i=y||u}let a=!1;const l=e._enterCb=t=>{a||(a=!0,C(t?i:r,[e]),E.delayedLeave&&E.delayedLeave(),e._enterCb=void 0)};t?_(t,[e,l]):l()},leave(t,r){const o=String(e.key);if(t._enterCb&&t._enterCb(!0),n.isUnmounting)return r();C(f,[t]);let i=!1;const a=t._leaveCb=n=>{i||(i=!0,r(),C(n?h:p,[t]),t._leaveCb=void 0,w[o]===e&&delete w[o])};w[o]=e,d?_(d,[t,a]):a()},clone:e=>gr(e,t,n,r)};return E}function yr(e){if(Sr(e))return(e=Ti(e)).children=null,e}function br(e){return Sr(e)?e.children?e.children[0]:void 0:e}function wr(e,t){6&e.shapeFlag&&e.component?wr(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Cr(e,t=!1,n){let r=[],o=0;for(let i=0;i1)for(let e=0;e!!e.type.__asyncLoader;function xr(e){D(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:i,suspensible:a=!0,onError:l}=e;let s,c=null,u=0;const f=()=>{let e;return c||(e=c=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{l(e,(()=>t((u++,c=null,f()))),(()=>n(e)),u+1)}));throw e})).then((t=>e!==c&&c?c:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),s=t,t))))};return _r({name:"AsyncComponentWrapper",__asyncLoader:f,get __asyncResolved(){return s},setup(){const e=$i;if(s)return()=>kr(s,e);const t=t=>{c=null,un(t,e,13,!r)};if(a&&e.suspense||Zi)return f().then((t=>()=>kr(t,e))).catch((e=>(t(e),()=>r?Oi(r,{error:e}):null)));const l=zt(!1),u=zt(),d=zt(!!o);return o&&setTimeout((()=>{d.value=!1}),o),null!=i&&setTimeout((()=>{if(!l.value&&!u.value){const e=new Error(`Async component timed out after ${i}ms.`);t(e),u.value=e}}),i),f().then((()=>{l.value=!0,e.parent&&Sr(e.parent.vnode)&&Cn(e.parent.update)})).catch((e=>{t(e),u.value=e})),()=>l.value&&s?kr(s,e):u.value&&r?Oi(r,{error:u.value}):n&&!d.value?Oi(n):void 0}})}function kr(e,t){const{ref:n,props:r,children:o,ce:i}=t.vnode,a=Oi(e,r,o);return a.ref=n,a.ce=i,delete t.vnode.ce,a}const Sr=e=>e.type.__isKeepAlive,Or={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=Hi(),r=n.ctx;if(!r.renderer)return()=>{const e=t.default&&t.default();return e&&1===e.length?e[0]:e};const o=new Map,i=new Set;let a=null;const l=n.suspense,{renderer:{p:s,m:c,um:u,o:{createElement:f}}}=r,d=f("div");function p(e){Lr(e),u(e,n,l,!0)}function h(e){o.forEach(((t,n)=>{const r=ra(t.type);!r||e&&e(r)||v(n)}))}function v(e){const t=o.get(e);a&&Ci(t,a)?a&&Lr(a):p(t),o.delete(e),i.delete(e)}r.activate=(e,t,n,r,o)=>{const i=e.component;c(e,t,n,0,l),s(i.vnode,e,t,n,i,l,r,e.slotScopeIds,o),Ko((()=>{i.isDeactivated=!1,i.a&&ae(i.a);const t=e.props&&e.props.onVnodeMounted;t&&Mi(t,i.parent,e)}),l)},r.deactivate=e=>{const t=e.component;c(e,d,null,1,l),Ko((()=>{t.da&&ae(t.da);const n=e.props&&e.props.onVnodeUnmounted;n&&Mi(n,t.parent,e),t.isDeactivated=!0}),l)},sr((()=>[e.include,e.exclude]),(([e,t])=>{e&&h((t=>Nr(e,t))),t&&h((e=>!Nr(t,e)))}),{flush:"post",deep:!0});let m=null;const g=()=>{null!=m&&o.set(m,Ar(n.subTree))};return Mr(g),Dr(g),Ur((()=>{o.forEach((e=>{const{subTree:t,suspense:r}=n,o=Ar(t);if(e.type!==o.type||e.key!==o.key)p(e);else{Lr(o);const e=o.component.da;e&&Ko(e,r)}}))})),()=>{if(m=null,!t.default)return null;const n=t.default(),r=n[0];if(n.length>1)return a=null,n;if(!(wi(r)&&(4&r.shapeFlag||128&r.shapeFlag)))return a=null,r;let l=Ar(r);const s=l.type,c=ra(Er(l)?l.type.__asyncResolved||{}:s),{include:u,exclude:f,max:d}=e;if(u&&(!c||!Nr(u,c))||f&&c&&Nr(f,c))return a=l,r;const p=null==l.key?s:l.key,h=o.get(p);return l.el&&(l=Ti(l),128&r.shapeFlag&&(r.ssContent=l)),m=p,h?(l.el=h.el,l.component=h.component,l.transition&&wr(l,l.transition),l.shapeFlag|=512,i.delete(p),i.add(p)):(i.add(p),d&&i.size>parseInt(d,10)&&v(i.values().next().value)),l.shapeFlag|=256,a=l,Zn(r.type)?r:l}}};function Nr(e,t){return j(e)?e.some((e=>Nr(e,t))):U(e)?e.split(",").includes(t):!!F(e)&&e.test(t)}function Pr(e,t){Vr(e,"a",t)}function Tr(e,t){Vr(e,"da",t)}function Vr(e,t,n=$i){const r=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(jr(t,r,n),n){let e=n.parent;for(;e&&e.parent;)Sr(e.parent.vnode)&&Rr(r,t,n,e),e=e.parent}}function Rr(e,t,n,r){const o=jr(t,e,r,!0);$r((()=>{R(r[t],o)}),n)}function Lr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function Ar(e){return 128&e.shapeFlag?e.ssContent:e}function jr(e,t,n=$i,r=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;Ae(),zi(n);const o=cn(t,n,e,r);return qi(),je(),o});return r?o.unshift(i):o.push(i),i}}const Br=e=>(t,n=$i)=>(!Zi||"sp"===e)&&jr(e,((...e)=>t(...e)),n),Ir=Br("bm"),Mr=Br("m"),Fr=Br("bu"),Dr=Br("u"),Ur=Br("bum"),$r=Br("um"),Hr=Br("sp"),zr=Br("rtg"),qr=Br("rtc");function Wr(e,t=$i){jr("ec",e,t)}function Kr(e,t){const n=Bn;if(null===n)return e;const r=na(n)||n.proxy,o=e.dirs||(e.dirs=[]);for(let e=0;et(e,n,void 0,i&&i[n])));else{const n=Object.keys(e);o=new Array(n.length);for(let r=0,a=n.length;r{const t=r.fn(...e);return t&&(t.key=r.key),t}:r.fn)}return e}function io(e,t,n={},r,o){if(Bn.isCE||Bn.parent&&Er(Bn.parent)&&Bn.parent.isCE)return"default"!==t&&(n.name=t),Oi("slot",n,r&&r());let i=e[t];i&&i._c&&(i._d=!1),di();const a=i&&ao(i(n)),l=bi(ai,{key:n.key||a&&a.key||`_${t}`},a||(r?r():[]),a&&1===e._?64:-2);return!o&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),i&&i._c&&(i._d=!0),l}function ao(e){return e.some((e=>!wi(e)||e.type!==si&&!(e.type===ai&&!ao(e.children))))?e:null}function lo(e,t){const n={};for(const r in e)n[t&&/[A-Z]/.test(r)?`on:${r}`:oe(r)]=e[r];return n}const so=e=>e?Wi(e)?na(e)||e.proxy:so(e.parent):null,co=V(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>so(e.parent),$root:e=>so(e.root),$emit:e=>e.emit,$options:e=>yo(e),$forceUpdate:e=>e.f||(e.f=()=>Cn(e.update)),$nextTick:e=>e.n||(e.n=wn.bind(e.proxy)),$watch:e=>ur.bind(e)}),uo=(e,t)=>e!==x&&!e.__isScriptSetup&&A(e,t),fo={get({_:e},t){const{ctx:n,setupState:r,data:o,props:i,accessCache:a,type:l,appContext:s}=e;let c;if("$"!==t[0]){const l=a[t];if(void 0!==l)switch(l){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(uo(r,t))return a[t]=1,r[t];if(o!==x&&A(o,t))return a[t]=2,o[t];if((c=e.propsOptions[0])&&A(c,t))return a[t]=3,i[t];if(n!==x&&A(n,t))return a[t]=4,n[t];ho&&(a[t]=0)}}const u=co[t];let f,d;return u?("$attrs"===t&&Be(e,0,t),u(e)):(f=l.__cssModules)&&(f=f[t])?f:n!==x&&A(n,t)?(a[t]=4,n[t]):(d=s.config.globalProperties,A(d,t)?d[t]:void 0)},set({_:e},t,n){const{data:r,setupState:o,ctx:i}=e;return uo(o,t)?(o[t]=n,!0):r!==x&&A(r,t)?(r[t]=n,!0):!A(e.props,t)&&(("$"!==t[0]||!(t.slice(1)in e))&&(i[t]=n,!0))},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:i}},a){let l;return!!n[a]||e!==x&&A(e,a)||uo(t,a)||(l=i[0])&&A(l,a)||A(r,a)||A(co,a)||A(o.config.globalProperties,a)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:A(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};const po=V({},fo,{get(e,t){if(t!==Symbol.unscopables)return fo.get(e,t,e)},has:(e,t)=>"_"!==t[0]&&!a(t)});let ho=!0;function vo(e){const t=yo(e),n=e.proxy,r=e.ctx;ho=!1,t.beforeCreate&&mo(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:a,watch:l,provide:s,inject:c,created:u,beforeMount:f,mounted:d,beforeUpdate:p,updated:h,activated:v,deactivated:m,beforeDestroy:g,beforeUnmount:y,destroyed:b,unmounted:w,render:C,renderTracked:_,renderTriggered:E,errorCaptured:x,serverPrefetch:k,expose:O,inheritAttrs:N,components:P,directives:T,filters:V}=t;if(c&&function(e,t,n=S,r=!1){j(e)&&(e=_o(e));for(const n in e){const o=e[n];let i;i=H(o)?"default"in o?rr(o.from||n,o.default,!0):rr(o.from||n):rr(o),Ht(i)&&r?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e}):t[n]=i}}(c,r,null,e.appContext.config.unwrapInjectedRef),a)for(const e in a){const t=a[e];D(t)&&(r[e]=t.bind(n))}if(o){0;const t=o.call(n,n);0,H(t)&&(e.data=Nt(t))}if(ho=!0,i)for(const e in i){const t=i[e],o=D(t)?t.bind(n,n):D(t.get)?t.get.bind(n,n):S;0;const a=!D(t)&&D(t.set)?t.set.bind(n):S,l=ia({get:o,set:a});Object.defineProperty(r,e,{enumerable:!0,configurable:!0,get:()=>l.value,set:e=>l.value=e})}if(l)for(const e in l)go(l[e],r,n,e);if(s){const e=D(s)?s.call(n):s;Reflect.ownKeys(e).forEach((t=>{nr(t,e[t])}))}function R(e,t){j(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(u&&mo(u,e,"c"),R(Ir,f),R(Mr,d),R(Fr,p),R(Dr,h),R(Pr,v),R(Tr,m),R(Wr,x),R(qr,_),R(zr,E),R(Ur,y),R($r,w),R(Hr,k),j(O))if(O.length){const t=e.exposed||(e.exposed={});O.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});C&&e.render===S&&(e.render=C),null!=N&&(e.inheritAttrs=N),P&&(e.components=P),T&&(e.directives=T)}function mo(e,t,n){cn(j(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function go(e,t,n,r){const o=r.includes(".")?fr(n,r):()=>n[r];if(U(e)){const n=t[e];D(n)&&sr(o,n)}else if(D(e))sr(o,e.bind(n));else if(H(e))if(j(e))e.forEach((e=>go(e,t,n,r)));else{const r=D(e.handler)?e.handler.bind(n):t[e.handler];D(r)&&sr(o,r,e)}else 0}function yo(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,l=i.get(t);let s;return l?s=l:o.length||n||r?(s={},o.length&&o.forEach((e=>bo(s,e,a,!0))),bo(s,t,a)):s=t,H(t)&&i.set(t,s),s}function bo(e,t,n,r=!1){const{mixins:o,extends:i}=t;i&&bo(e,i,n,!0),o&&o.forEach((t=>bo(e,t,n,!0)));for(const o in t)if(r&&"expose"===o);else{const r=wo[o]||n&&n[o];e[o]=r?r(e[o],t[o]):t[o]}return e}const wo={data:Co,props:xo,emits:xo,methods:xo,computed:xo,beforeCreate:Eo,created:Eo,beforeMount:Eo,mounted:Eo,beforeUpdate:Eo,updated:Eo,beforeDestroy:Eo,beforeUnmount:Eo,destroyed:Eo,unmounted:Eo,activated:Eo,deactivated:Eo,errorCaptured:Eo,serverPrefetch:Eo,components:xo,directives:xo,watch:function(e,t){if(!e)return t;if(!t)return e;const n=V(Object.create(null),e);for(const r in t)n[r]=Eo(e[r],t[r]);return n},provide:Co,inject:function(e,t){return xo(_o(e),_o(t))}};function Co(e,t){return t?e?function(){return V(D(e)?e.call(this,this):e,D(t)?t.call(this,this):t)}:t:e}function _o(e){if(j(e)){const t={};for(let n=0;n{s=!0;const[n,r]=Oo(e,t,!0);V(a,n),r&&l.push(...r)};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}if(!i&&!s)return H(e)&&r.set(e,k),k;if(j(i))for(let e=0;e-1,r[1]=n<0||e-1||A(r,"default"))&&l.push(t)}}}}const c=[a,l];return H(e)&&r.set(e,c),c}function No(e){return"$"!==e[0]}function Po(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:null===e?"null":""}function To(e,t){return Po(e)===Po(t)}function Vo(e,t){return j(t)?t.findIndex((t=>To(t,e))):D(t)&&To(t,e)?0:-1}const Ro=e=>"_"===e[0]||"$stable"===e,Lo=e=>j(e)?e.map(Ai):[Ai(e)],Ao=(e,t,n)=>{if(t._n)return t;const r=$n(((...e)=>Lo(t(...e))),n);return r._c=!1,r},jo=(e,t,n)=>{const r=e._ctx;for(const n in e){if(Ro(n))continue;const o=e[n];if(D(o))t[n]=Ao(0,o,r);else if(null!=o){0;const e=Lo(o);t[n]=()=>e}}},Bo=(e,t)=>{const n=Lo(t);e.slots.default=()=>n},Io=(e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=It(t),le(t,"_",n)):jo(t,e.slots={})}else e.slots={},t&&Bo(e,t);le(e.slots,Ei,1)},Mo=(e,t,n)=>{const{vnode:r,slots:o}=e;let i=!0,a=x;if(32&r.shapeFlag){const e=t._;e?n&&1===e?i=!1:(V(o,t),n||1!==e||delete o._):(i=!t.$stable,jo(t,o)),a=t}else t&&(Bo(e,t),a={default:1});if(i)for(const e in o)Ro(e)||e in a||delete o[e]};function Fo(){return{app:null,config:{isNativeTag:O,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Do=0;function Uo(e,t){return function(n,r=null){D(n)||(n=Object.assign({},n)),null==r||H(r)||(r=null);const o=Fo(),i=new Set;let a=!1;const l=o.app={_uid:Do++,_component:n,_props:r,_container:null,_context:o,_instance:null,version:_a,get config(){return o.config},set config(e){0},use:(e,...t)=>(i.has(e)||(e&&D(e.install)?(i.add(e),e.install(l,...t)):D(e)&&(i.add(e),e(l,...t))),l),mixin:e=>(o.mixins.includes(e)||o.mixins.push(e),l),component:(e,t)=>t?(o.components[e]=t,l):o.components[e],directive:(e,t)=>t?(o.directives[e]=t,l):o.directives[e],mount(i,s,c){if(!a){0;const u=Oi(n,r);return u.appContext=o,s&&t?t(u,i):e(u,i,c),a=!0,l._container=i,i.__vue_app__=l,na(u.component)||u.component.proxy}},unmount(){a&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(o.provides[e]=t,l)};return l}}function $o(e,t,n,r,o=!1){if(j(e))return void e.forEach(((e,i)=>$o(e,t&&(j(t)?t[i]:t),n,r,o)));if(Er(r)&&!o)return;const i=4&r.shapeFlag?na(r.component)||r.component.proxy:r.el,a=o?null:i,{i:l,r:s}=e;const c=t&&t.r,u=l.refs===x?l.refs={}:l.refs,f=l.setupState;if(null!=c&&c!==s&&(U(c)?(u[c]=null,A(f,c)&&(f[c]=null)):Ht(c)&&(c.value=null)),D(s))sn(s,l,12,[a,u]);else{const t=U(s),r=Ht(s);if(t||r){const l=()=>{if(e.f){const n=t?A(f,s)?f[s]:u[s]:s.value;o?j(n)&&R(n,i):j(n)?n.includes(i)||n.push(i):t?(u[s]=[i],A(f,s)&&(f[s]=u[s])):(s.value=[i],e.k&&(u[e.k]=s.value))}else t?(u[s]=a,A(f,s)&&(f[s]=a)):r&&(s.value=a,e.k&&(u[e.k]=a))};a?(l.id=-1,Ko(l,n)):l()}else 0}}let Ho=!1;const zo=e=>/svg/.test(e.namespaceURI)&&"foreignObject"!==e.tagName,qo=e=>8===e.nodeType;function Wo(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:i,parentNode:a,remove:l,insert:s,createComment:c}}=e,u=(n,r,l,c,m,g=!1)=>{const y=qo(n)&&"["===n.data,b=()=>h(n,r,l,c,m,y),{type:w,ref:C,shapeFlag:_,patchFlag:E}=r;let x=n.nodeType;r.el=n,-2===E&&(g=!1,r.dynamicChildren=null);let k=null;switch(w){case li:3!==x?""===r.children?(s(r.el=o(""),a(n),n),k=n):k=b():(n.data!==r.children&&(Ho=!0,n.data=r.children),k=i(n));break;case si:k=8!==x||y?b():i(n);break;case ci:if(y&&(x=(n=i(n)).nodeType),1===x||3===x){k=n;const e=!r.children.length;for(let t=0;t{a=a||!!t.dynamicChildren;const{type:s,props:c,patchFlag:u,shapeFlag:f,dirs:p}=t,h="input"===s&&p||"option"===s;if(h||-1!==u){if(p&&Gr(t,null,n,"created"),c)if(h||!a||48&u)for(const t in c)(h&&t.endsWith("value")||P(t)&&!Y(t))&&r(e,t,null,c[t],!1,void 0,n);else c.onClick&&r(e,"onClick",null,c.onClick,!1,void 0,n);let s;if((s=c&&c.onVnodeBeforeMount)&&Mi(s,n,t),p&&Gr(t,null,n,"beforeMount"),((s=c&&c.onVnodeMounted)||p)&&er((()=>{s&&Mi(s,n,t),p&&Gr(t,null,n,"mounted")}),o),16&f&&(!c||!c.innerHTML&&!c.textContent)){let r=d(e.firstChild,t,e,n,o,i,a);for(;r;){Ho=!0;const e=r;r=r.nextSibling,l(e)}}else 8&f&&e.textContent!==t.children&&(Ho=!0,e.textContent=t.children)}return e.nextSibling},d=(e,t,r,o,i,a,l)=>{l=l||!!t.dynamicChildren;const s=t.children,c=s.length;for(let t=0;t{const{slotScopeIds:u}=t;u&&(o=o?o.concat(u):u);const f=a(e),p=d(i(e),t,f,n,r,o,l);return p&&qo(p)&&"]"===p.data?i(t.anchor=p):(Ho=!0,s(t.anchor=c("]"),f,p),p)},h=(e,t,r,o,s,c)=>{if(Ho=!0,t.el=null,c){const t=v(e);for(;;){const n=i(e);if(!n||n===t)break;l(n)}}const u=i(e),f=a(e);return l(e),n(null,t,f,u,r,o,zo(f),s),u},v=e=>{let t=0;for(;e;)if((e=i(e))&&qo(e)&&("["===e.data&&t++,"]"===e.data)){if(0===t)return i(e);t--}return e};return[(e,t)=>{if(!t.hasChildNodes())return n(null,e,t),kn(),void(t._vnode=e);Ho=!1,u(t.firstChild,e,null,null,null),kn(),t._vnode=e},u]}const Ko=er;function Go(e){return Yo(e)}function Zo(e){return Yo(e,Wo)}function Yo(e,t){fe().__VUE__=!0;const{insert:n,remove:r,patchProp:o,createElement:i,createText:a,createComment:l,setText:s,setElementText:c,parentNode:u,nextSibling:f,setScopeId:d=S,insertStaticContent:p}=e,h=(e,t,n,r=null,o=null,i=null,a=!1,l=null,s=!!t.dynamicChildren)=>{if(e===t)return;e&&!Ci(e,t)&&(r=q(e),D(e,o,i,!0),e=null),-2===t.patchFlag&&(s=!1,t.dynamicChildren=null);const{type:c,ref:u,shapeFlag:f}=t;switch(c){case li:v(e,t,n,r);break;case si:m(e,t,n,r);break;case ci:null==e&&g(t,n,r,a);break;case ai:P(e,t,n,r,o,i,a,l,s);break;default:1&f?b(e,t,n,r,o,i,a,l,s):6&f?T(e,t,n,r,o,i,a,l,s):(64&f||128&f)&&c.process(e,t,n,r,o,i,a,l,s,K)}null!=u&&o&&$o(u,e&&e.ref,i,t||e,!t)},v=(e,t,r,o)=>{if(null==e)n(t.el=a(t.children),r,o);else{const n=t.el=e.el;t.children!==e.children&&s(n,t.children)}},m=(e,t,r,o)=>{null==e?n(t.el=l(t.children||""),r,o):t.el=e.el},g=(e,t,n,r)=>{[e.el,e.anchor]=p(e.children,t,n,r,e.el,e.anchor)},y=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=f(e),r(e),e=n;r(t)},b=(e,t,n,r,o,i,a,l,s)=>{a=a||"svg"===t.type,null==e?w(t,n,r,o,i,a,l,s):E(e,t,o,i,a,l,s)},w=(e,t,r,a,l,s,u,f)=>{let d,p;const{type:h,props:v,shapeFlag:m,transition:g,dirs:y}=e;if(d=e.el=i(e.type,s,v&&v.is,v),8&m?c(d,e.children):16&m&&_(e.children,d,null,a,l,s&&"foreignObject"!==h,u,f),y&&Gr(e,null,a,"created"),C(d,e,e.scopeId,u,a),v){for(const t in v)"value"===t||Y(t)||o(d,t,null,v[t],s,e.children,a,l,z);"value"in v&&o(d,"value",null,v.value),(p=v.onVnodeBeforeMount)&&Mi(p,a,e)}y&&Gr(e,null,a,"beforeMount");const b=(!l||l&&!l.pendingBranch)&&g&&!g.persisted;b&&g.beforeEnter(d),n(d,t,r),((p=v&&v.onVnodeMounted)||b||y)&&Ko((()=>{p&&Mi(p,a,e),b&&g.enter(d),y&&Gr(e,null,a,"mounted")}),l)},C=(e,t,n,r,o)=>{if(n&&d(e,n),r)for(let t=0;t{for(let c=s;c{const s=t.el=e.el;let{patchFlag:u,dynamicChildren:f,dirs:d}=t;u|=16&e.patchFlag;const p=e.props||x,h=t.props||x;let v;n&&Jo(n,!1),(v=h.onVnodeBeforeUpdate)&&Mi(v,n,t,e),d&&Gr(t,e,n,"beforeUpdate"),n&&Jo(n,!0);const m=i&&"foreignObject"!==t.type;if(f?O(e.dynamicChildren,f,s,n,r,m,a):l||B(e,t,s,null,n,r,m,a,!1),u>0){if(16&u)N(s,t,p,h,n,r,i);else if(2&u&&p.class!==h.class&&o(s,"class",null,h.class,i),4&u&&o(s,"style",p.style,h.style,i),8&u){const a=t.dynamicProps;for(let t=0;t{v&&Mi(v,n,t,e),d&&Gr(t,e,n,"updated")}),r)},O=(e,t,n,r,o,i,a)=>{for(let l=0;l{if(n!==r){if(n!==x)for(const s in n)Y(s)||s in r||o(e,s,n[s],null,l,t.children,i,a,z);for(const s in r){if(Y(s))continue;const c=r[s],u=n[s];c!==u&&"value"!==s&&o(e,s,u,c,l,t.children,i,a,z)}"value"in r&&o(e,"value",n.value,r.value)}},P=(e,t,r,o,i,l,s,c,u)=>{const f=t.el=e?e.el:a(""),d=t.anchor=e?e.anchor:a("");let{patchFlag:p,dynamicChildren:h,slotScopeIds:v}=t;v&&(c=c?c.concat(v):v),null==e?(n(f,r,o),n(d,r,o),_(t.children,r,d,i,l,s,c,u)):p>0&&64&p&&h&&e.dynamicChildren?(O(e.dynamicChildren,h,r,i,l,s,c),(null!=t.key||i&&t===i.subTree)&&Qo(e,t,!0)):B(e,t,r,d,i,l,s,c,u)},T=(e,t,n,r,o,i,a,l,s)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?o.ctx.activate(t,n,r,a,s):V(t,n,r,o,i,a,s):R(e,t,s)},V=(e,t,n,r,o,i,a)=>{const l=e.component=Ui(e,r,o);if(Sr(e)&&(l.ctx.renderer=K),Yi(l),l.asyncDep){if(o&&o.registerDep(l,L),!e.el){const e=l.subTree=Oi(si);m(null,e,t,n)}}else L(l,e,t,n,o,i,a)},R=(e,t,n)=>{const r=t.component=e.component;if(function(e,t,n){const{props:r,children:o,component:i}=e,{props:a,children:l,patchFlag:s}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&s>=0))return!(!o&&!l||l&&l.$stable)||r!==a&&(r?!a||Kn(r,a,c):!!a);if(1024&s)return!0;if(16&s)return r?Kn(r,a,c):!!a;if(8&s){const e=t.dynamicProps;for(let t=0;thn&&pn.splice(t,1)}(r.update),r.update()}else t.el=e.el,r.vnode=t},L=(e,t,n,r,o,i,a)=>{const l=e.effect=new Ne((()=>{if(e.isMounted){let t,{next:n,bu:r,u:l,parent:s,vnode:c}=e,f=n;0,Jo(e,!1),n?(n.el=c.el,j(e,n,a)):n=c,r&&ae(r),(t=n.props&&n.props.onVnodeBeforeUpdate)&&Mi(t,s,n,c),Jo(e,!0);const d=Hn(e);0;const p=e.subTree;e.subTree=d,h(p,d,u(p.el),q(p),e,o,i),n.el=d.el,null===f&&Gn(e,d.el),l&&Ko(l,o),(t=n.props&&n.props.onVnodeUpdated)&&Ko((()=>Mi(t,s,n,c)),o)}else{let a;const{el:l,props:s}=t,{bm:c,m:u,parent:f}=e,d=Er(t);if(Jo(e,!1),c&&ae(c),!d&&(a=s&&s.onVnodeBeforeMount)&&Mi(a,f,t),Jo(e,!0),l&&Z){const n=()=>{e.subTree=Hn(e),Z(l,e.subTree,e,o,null)};d?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{0;const a=e.subTree=Hn(e);0,h(null,a,n,r,e,o,i),t.el=a.el}if(u&&Ko(u,o),!d&&(a=s&&s.onVnodeMounted)){const e=t;Ko((()=>Mi(a,f,e)),o)}(256&t.shapeFlag||f&&Er(f.vnode)&&256&f.vnode.shapeFlag)&&e.a&&Ko(e.a,o),e.isMounted=!0,t=n=r=null}}),(()=>Cn(s)),e.scope),s=e.update=()=>l.run();s.id=e.uid,Jo(e,!0),s()},j=(e,t,n)=>{t.component=e;const r=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,r){const{props:o,attrs:i,vnode:{patchFlag:a}}=e,l=It(o),[s]=e.propsOptions;let c=!1;if(!(r||a>0)||16&a){let r;ko(e,t,o,i)&&(c=!0);for(const i in l)t&&(A(t,i)||(r=ne(i))!==i&&A(t,r))||(s?!n||void 0===n[i]&&void 0===n[r]||(o[i]=So(s,l,i,void 0,e,!0)):delete o[i]);if(i!==l)for(const e in i)t&&A(t,e)||(delete i[e],c=!0)}else if(8&a){const n=e.vnode.dynamicProps;for(let r=0;r{const u=e&&e.children,f=e?e.shapeFlag:0,d=t.children,{patchFlag:p,shapeFlag:h}=t;if(p>0){if(128&p)return void M(u,d,n,r,o,i,a,l,s);if(256&p)return void I(u,d,n,r,o,i,a,l,s)}8&h?(16&f&&z(u,o,i),d!==u&&c(n,d)):16&f?16&h?M(u,d,n,r,o,i,a,l,s):z(u,o,i,!0):(8&f&&c(n,""),16&h&&_(d,n,r,o,i,a,l,s))},I=(e,t,n,r,o,i,a,l,s)=>{t=t||k;const c=(e=e||k).length,u=t.length,f=Math.min(c,u);let d;for(d=0;du?z(e,o,i,!0,!1,f):_(t,n,r,o,i,a,l,s,f)},M=(e,t,n,r,o,i,a,l,s)=>{let c=0;const u=t.length;let f=e.length-1,d=u-1;for(;c<=f&&c<=d;){const r=e[c],u=t[c]=s?ji(t[c]):Ai(t[c]);if(!Ci(r,u))break;h(r,u,n,null,o,i,a,l,s),c++}for(;c<=f&&c<=d;){const r=e[f],c=t[d]=s?ji(t[d]):Ai(t[d]);if(!Ci(r,c))break;h(r,c,n,null,o,i,a,l,s),f--,d--}if(c>f){if(c<=d){const e=d+1,f=ed)for(;c<=f;)D(e[c],o,i,!0),c++;else{const p=c,v=c,m=new Map;for(c=v;c<=d;c++){const e=t[c]=s?ji(t[c]):Ai(t[c]);null!=e.key&&m.set(e.key,c)}let g,y=0;const b=d-v+1;let w=!1,C=0;const _=new Array(b);for(c=0;c=b){D(r,o,i,!0);continue}let u;if(null!=r.key)u=m.get(r.key);else for(g=v;g<=d;g++)if(0===_[g-v]&&Ci(r,t[g])){u=g;break}void 0===u?D(r,o,i,!0):(_[u-v]=c+1,u>=C?C=u:w=!0,h(r,t[u],n,null,o,i,a,l,s),y++)}const E=w?function(e){const t=e.slice(),n=[0];let r,o,i,a,l;const s=e.length;for(r=0;r>1,e[n[l]]0&&(t[r]=n[i-1]),n[i]=r)}}i=n.length,a=n[i-1];for(;i-- >0;)n[i]=a,a=t[a];return n}(_):k;for(g=E.length-1,c=b-1;c>=0;c--){const e=v+c,f=t[e],d=e+1{const{el:a,type:l,transition:s,children:c,shapeFlag:u}=e;if(6&u)return void F(e.component.subTree,t,r,o);if(128&u)return void e.suspense.move(t,r,o);if(64&u)return void l.move(e,t,r,K);if(l===ai){n(a,t,r);for(let e=0;e{let i;for(;e&&e!==t;)i=f(e),n(e,r,o),e=i;n(t,r,o)})(e,t,r);if(2!==o&&1&u&&s)if(0===o)s.beforeEnter(a),n(a,t,r),Ko((()=>s.enter(a)),i);else{const{leave:e,delayLeave:o,afterLeave:i}=s,l=()=>n(a,t,r),c=()=>{e(a,(()=>{l(),i&&i()}))};o?o(a,l,c):c()}else n(a,t,r)},D=(e,t,n,r=!1,o=!1)=>{const{type:i,props:a,ref:l,children:s,dynamicChildren:c,shapeFlag:u,patchFlag:f,dirs:d}=e;if(null!=l&&$o(l,null,n,e,!0),256&u)return void t.ctx.deactivate(e);const p=1&u&&d,h=!Er(e);let v;if(h&&(v=a&&a.onVnodeBeforeUnmount)&&Mi(v,t,e),6&u)H(e.component,n,r);else{if(128&u)return void e.suspense.unmount(n,r);p&&Gr(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,o,K,r):c&&(i!==ai||f>0&&64&f)?z(c,t,n,!1,!0):(i===ai&&384&f||!o&&16&u)&&z(s,t,n),r&&U(e)}(h&&(v=a&&a.onVnodeUnmounted)||p)&&Ko((()=>{v&&Mi(v,t,e),p&&Gr(e,null,t,"unmounted")}),n)},U=e=>{const{type:t,el:n,anchor:o,transition:i}=e;if(t===ai)return void $(n,o);if(t===ci)return void y(e);const a=()=>{r(n),i&&!i.persisted&&i.afterLeave&&i.afterLeave()};if(1&e.shapeFlag&&i&&!i.persisted){const{leave:t,delayLeave:r}=i,o=()=>t(n,a);r?r(e.el,a,o):o()}else a()},$=(e,t)=>{let n;for(;e!==t;)n=f(e),r(e),e=n;r(t)},H=(e,t,n)=>{const{bum:r,scope:o,update:i,subTree:a,um:l}=e;r&&ae(r),o.stop(),i&&(i.active=!1,D(a,e,t,n)),l&&Ko(l,t),Ko((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},z=(e,t,n,r=!1,o=!1,i=0)=>{for(let a=i;a6&e.shapeFlag?q(e.component.subTree):128&e.shapeFlag?e.suspense.next():f(e.anchor||e.el),W=(e,t,n)=>{null==e?t._vnode&&D(t._vnode,null,null,!0):h(t._vnode||null,e,t,null,null,null,n),xn(),kn(),t._vnode=e},K={p:h,um:D,m:F,r:U,mt:V,mc:_,pc:B,pbc:O,n:q,o:e};let G,Z;return t&&([G,Z]=t(K)),{render:W,hydrate:G,createApp:Uo(W,G)}}function Jo({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Qo(e,t,n=!1){const r=e.children,o=t.children;if(j(r)&&j(o))for(let e=0;ee.__isTeleport,ei=e=>e&&(e.disabled||""===e.disabled),ti=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,ni=(e,t)=>{const n=e&&e.to;if(U(n)){if(t){const e=t(n);return e}return null}return n};function ri(e,t,n,{o:{insert:r},m:o},i=2){0===i&&r(e.targetAnchor,t,n);const{el:a,anchor:l,shapeFlag:s,children:c,props:u}=e,f=2===i;if(f&&r(a,t,n),(!f||ei(u))&&16&s)for(let e=0;e{16&y&&u(b,e,t,o,i,a,l,s)};g?m(n,c):f&&m(f,d)}else{t.el=e.el;const r=t.anchor=e.anchor,u=t.target=e.target,p=t.targetAnchor=e.targetAnchor,v=ei(e.props),m=v?n:u,y=v?r:p;if(a=a||ti(u),w?(d(e.dynamicChildren,w,m,o,i,a,l),Qo(e,t,!0)):s||f(e,t,m,y,o,i,a,l,!1),g)v||ri(t,n,r,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=ni(t.props,h);e&&ri(t,e,null,c,0)}else v&&ri(t,u,p,c,1)}ii(t)},remove(e,t,n,r,{um:o,o:{remove:i}},a){const{shapeFlag:l,children:s,anchor:c,targetAnchor:u,target:f,props:d}=e;if(f&&i(u),(a||!ei(d))&&(i(c),16&l))for(let e=0;e0?fi||k:null,pi(),vi>0&&fi&&fi.push(e),e}function yi(e,t,n,r,o,i){return gi(Si(e,t,n,r,o,i,!0))}function bi(e,t,n,r,o){return gi(Oi(e,t,n,r,o,!0))}function wi(e){return!!e&&!0===e.__v_isVNode}function Ci(e,t){return e.type===t.type&&e.key===t.key}function _i(e){hi=e}const Ei="__vInternal",xi=({key:e})=>null!=e?e:null,ki=({ref:e,ref_key:t,ref_for:n})=>null!=e?U(e)||Ht(e)||D(e)?{i:Bn,r:e,k:t,f:!!n}:e:null;function Si(e,t=null,n=null,r=0,o=null,i=(e===ai?0:1),a=!1,l=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&xi(t),ref:t&&ki(t),scopeId:In,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Bn};return l?(Bi(s,n),128&i&&e.normalize(s)):n&&(s.shapeFlag|=U(n)?8:16),vi>0&&!a&&fi&&(s.patchFlag>0||6&i)&&32!==s.patchFlag&&fi.push(s),s}const Oi=Ni;function Ni(e,t=null,n=null,r=0,o=null,i=!1){if(e&&e!==Qr||(e=si),wi(e)){const r=Ti(e,t,!0);return n&&Bi(r,n),vi>0&&!i&&fi&&(6&r.shapeFlag?fi[fi.indexOf(e)]=r:fi.push(r)),r.patchFlag|=-2,r}if(oa(e)&&(e=e.__vccOpts),t){t=Pi(t);let{class:e,style:n}=t;e&&!U(e)&&(t.class=d(e)),H(n)&&(Bt(n)&&!j(n)&&(n=V({},n)),t.style=l(n))}return Si(e,t,n,r,o,U(e)?1:Zn(e)?128:Xo(e)?64:H(e)?4:D(e)?2:0,i,!0)}function Pi(e){return e?Bt(e)||Ei in e?V({},e):e:null}function Ti(e,t,n=!1){const{props:r,ref:o,patchFlag:i,children:a}=e,l=t?Ii(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&xi(l),ref:t&&t.ref?n&&o?j(o)?o.concat(ki(t)):[o,ki(t)]:ki(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ai?-1===i?16:16|i:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ti(e.ssContent),ssFallback:e.ssFallback&&Ti(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Vi(e=" ",t=0){return Oi(li,null,e,t)}function Ri(e,t){const n=Oi(ci,null,e);return n.staticCount=t,n}function Li(e="",t=!1){return t?(di(),bi(si,null,e)):Oi(si,null,e)}function Ai(e){return null==e||"boolean"==typeof e?Oi(si):j(e)?Oi(ai,null,e.slice()):"object"==typeof e?ji(e):Oi(li,null,String(e))}function ji(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:Ti(e)}function Bi(e,t){let n=0;const{shapeFlag:r}=e;if(null==t)t=null;else if(j(t))n=16;else if("object"==typeof t){if(65&r){const n=t.default;return void(n&&(n._c&&(n._d=!1),Bi(e,n()),n._c&&(n._d=!0)))}{n=32;const r=t._;r||Ei in t?3===r&&Bn&&(1===Bn.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=Bn}}else D(t)?(t={default:t,_ctx:Bn},n=32):(t=String(t),64&r?(n=16,t=[Vi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ii(...e){const t={};for(let n=0;n$i||Bn,zi=e=>{$i=e,e.scope.on()},qi=()=>{$i&&$i.scope.off(),$i=null};function Wi(e){return 4&e.vnode.shapeFlag}let Ki,Gi,Zi=!1;function Yi(e,t=!1){Zi=t;const{props:n,children:r}=e.vnode,o=Wi(e);!function(e,t,n,r=!1){const o={},i={};le(i,Ei,1),e.propsDefaults=Object.create(null),ko(e,t,o,i);for(const t in e.propsOptions[0])t in o||(o[t]=void 0);n?e.props=r?o:Pt(o):e.type.props?e.props=o:e.props=i,e.attrs=i}(e,n,o,t),Io(e,r);const i=o?function(e,t){const n=e.type;0;e.accessCache=Object.create(null),e.proxy=Mt(new Proxy(e.ctx,fo)),!1;const{setup:r}=n;if(r){const n=e.setupContext=r.length>1?ta(e):null;zi(e),Ae();const o=sn(r,e,0,[e.props,n]);if(je(),qi(),z(o)){if(o.then(qi,qi),t)return o.then((n=>{Ji(e,n,t)})).catch((t=>{un(t,e,0)}));e.asyncDep=o}else Ji(e,o,t)}else ea(e,t)}(e,t):void 0;return Zi=!1,i}function Ji(e,t,n){D(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:H(t)&&(e.setupState=Jt(t)),ea(e,n)}function Qi(e){Ki=e,Gi=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,po))}}const Xi=()=>!Ki;function ea(e,t,n){const r=e.type;if(!e.render){if(!t&&Ki&&!r.render){const t=r.template||yo(e).template;if(t){0;const{isCustomElement:n,compilerOptions:o}=e.appContext.config,{delimiters:i,compilerOptions:a}=r,l=V(V({isCustomElement:n,delimiters:i},o),a);r.render=Ki(t,l)}}e.render=r.render||S,Gi&&Gi(e)}zi(e),Ae(),vo(e),je(),qi()}function ta(e){const t=t=>{e.exposed=t||{}};let n;return{get attrs(){return n||(n=function(e){return new Proxy(e.attrs,{get:(t,n)=>(Be(e,0,"$attrs"),t[n])})}(e))},slots:e.slots,emit:e.emit,expose:t}}function na(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Jt(Mt(e.exposed)),{get:(t,n)=>n in t?t[n]:n in co?co[n](e):void 0,has:(e,t)=>t in e||t in co}))}function ra(e,t=!0){return D(e)?e.displayName||e.name:e.name||t&&e.__name}function oa(e){return D(e)&&"__vccOpts"in e}const ia=(e,t)=>function(e,t,n=!1){let r,o;const i=D(e);return i?(r=e,o=S):(r=e.get,o=e.set),new on(r,o,i||!o,n)}(e,0,Zi);function aa(){return null}function la(){return null}function sa(e){0}function ca(e,t){return null}function ua(){return da().slots}function fa(){return da().attrs}function da(){const e=Hi();return e.setupContext||(e.setupContext=ta(e))}function pa(e,t){const n=j(e)?e.reduce(((e,t)=>(e[t]={},e)),{}):e;for(const e in t){const r=n[e];r?j(r)||D(r)?n[e]={type:r,default:t[e]}:r.default=t[e]:null===r&&(n[e]={default:t[e]})}return n}function ha(e,t){const n={};for(const r in e)t.includes(r)||Object.defineProperty(n,r,{enumerable:!0,get:()=>e[r]});return n}function va(e){const t=Hi();let n=e();return qi(),z(n)&&(n=n.catch((e=>{throw zi(t),e}))),[n,()=>zi(t)]}function ma(e,t,n){const r=arguments.length;return 2===r?H(t)&&!j(t)?wi(t)?Oi(e,null,[t]):Oi(e,t):Oi(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):3===r&&wi(n)&&(n=[n]),Oi(e,t,n))}const ga=Symbol(""),ya=()=>{{const e=rr(ga);return e}};function ba(){return void 0}function wa(e,t,n,r){const o=n[r];if(o&&Ca(o,e))return o;const i=t();return i.memo=e.slice(),n[r]=i}function Ca(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let e=0;e0&&fi&&fi.push(e),!0}const _a="3.2.47",Ea={createComponentInstance:Ui,setupComponent:Yi,renderComponentRoot:Hn,setCurrentRenderingInstance:Mn,isVNode:wi,normalizeVNode:Ai},xa=null,ka=null,Sa="undefined"!=typeof document?document:null,Oa=Sa&&Sa.createElement("template"),Na={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?Sa.createElementNS("http://www.w3.org/2000/svg",e):Sa.createElement(e,n?{is:n}:void 0);return"select"===e&&r&&null!=r.multiple&&o.setAttribute("multiple",r.multiple),o},createText:e=>Sa.createTextNode(e),createComment:e=>Sa.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Sa.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,i){const a=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),o!==i&&(o=o.nextSibling););else{Oa.innerHTML=r?`${e} `:e;const o=Oa.content;if(r){const e=o.firstChild;for(;e.firstChild;)o.appendChild(e.firstChild);o.removeChild(e)}t.insertBefore(o,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};const Pa=/\s*!important$/;function Ta(e,t,n){if(j(n))n.forEach((n=>Ta(e,t,n)));else if(null==n&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=function(e,t){const n=Ra[t];if(n)return n;let r=ee(t);if("filter"!==r&&r in e)return Ra[t]=r;r=re(r);for(let n=0;n{if(e._vts){if(e._vts<=n.attached)return}else e._vts=Date.now();cn(function(e,t){if(j(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=Fa(),n}(r,o);Aa(e,n,a,l)}else a&&(!function(e,t,n,r){e.removeEventListener(t,n,r)}(e,n,a,l),i[t]=void 0)}}const Ba=/(?:Once|Passive|Capture)$/;let Ia=0;const Ma=Promise.resolve(),Fa=()=>Ia||(Ma.then((()=>Ia=0)),Ia=Date.now());const Da=/^on[a-z]/;function Ua(e,t){const n=_r(e);class r extends za{constructor(e){super(n,e,t)}}return r.def=n,r}const $a=e=>Ua(e,Kl),Ha="undefined"!=typeof HTMLElement?HTMLElement:class{};class za extends Ha{constructor(e,t={},n){super(),this._def=e,this._props=t,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this.shadowRoot&&n?n(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,wn((()=>{this._connected||(Wl(null,this.shadowRoot),this._instance=null)}))}_resolveDef(){this._resolved=!0;for(let e=0;e{for(const t of e)this._setAttr(t.attributeName)})).observe(this,{attributes:!0});const e=(e,t=!1)=>{const{props:n,styles:r}=e;let o;if(n&&!j(n))for(const e in n){const t=n[e];(t===Number||t&&t.type===Number)&&(e in this._props&&(this._props[e]=ce(this._props[e])),(o||(o=Object.create(null)))[ee(e)]=!0)}this._numberProps=o,t&&this._resolveProps(e),this._applyStyles(r),this._update()},t=this._def.__asyncLoader;t?t().then((t=>e(t,!0))):e(this._def)}_resolveProps(e){const{props:t}=e,n=j(t)?t:Object.keys(t||{});for(const e of Object.keys(this))"_"!==e[0]&&n.includes(e)&&this._setProp(e,this[e],!0,!1);for(const e of n.map(ee))Object.defineProperty(this,e,{get(){return this._getProp(e)},set(t){this._setProp(e,t)}})}_setAttr(e){let t=this.getAttribute(e);const n=ee(e);this._numberProps&&this._numberProps[n]&&(t=ce(t)),this._setProp(n,t,!1)}_getProp(e){return this._props[e]}_setProp(e,t,n=!0,r=!0){t!==this._props[e]&&(this._props[e]=t,r&&this._instance&&this._update(),n&&(!0===t?this.setAttribute(ne(e),""):"string"==typeof t||"number"==typeof t?this.setAttribute(ne(e),t+""):t||this.removeAttribute(ne(e))))}_update(){Wl(this._createVNode(),this.shadowRoot)}_createVNode(){const e=Oi(this._def,V({},this._props));return this._instance||(e.ce=e=>{this._instance=e,e.isCE=!0;const t=(e,t)=>{this.dispatchEvent(new CustomEvent(e,{detail:t}))};e.emit=(e,...n)=>{t(e,n),ne(e)!==e&&t(ne(e),n)};let n=this;for(;n=n&&(n.parentNode||n.host);)if(n instanceof za){e.parent=n._instance,e.provides=n._instance.provides;break}}),e}_applyStyles(e){e&&e.forEach((e=>{const t=document.createElement("style");t.textContent=e,this.shadowRoot.appendChild(t)}))}}function qa(e="$style"){{const t=Hi();if(!t)return x;const n=t.type.__cssModules;if(!n)return x;const r=n[e];return r||x}}function Wa(e){const t=Hi();if(!t)return;const n=t.ut=(n=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach((e=>Ga(e,n)))},r=()=>{const r=e(t.proxy);Ka(t.subTree,r),n(r)};ir(r),Mr((()=>{const e=new MutationObserver(r);e.observe(t.subTree.el.parentNode,{childList:!0}),$r((()=>e.disconnect()))}))}function Ka(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{Ka(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el)Ga(e.el,t);else if(e.type===ai)e.children.forEach((e=>Ka(e,t)));else if(e.type===ci){let{el:n,anchor:r}=e;for(;n&&(Ga(n,t),n!==r);)n=n.nextSibling}}function Ga(e,t){if(1===e.nodeType){const n=e.style;for(const e in t)n.setProperty(`--${e}`,t[e])}}const Za="transition",Ya="animation",Ja=(e,{slots:t})=>ma(vr,nl(e),t);Ja.displayName="Transition";const Qa={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Xa=Ja.props=V({},vr.props,Qa),el=(e,t=[])=>{j(e)?e.forEach((e=>e(...t))):e&&e(...t)},tl=e=>!!e&&(j(e)?e.some((e=>e.length>1)):e.length>1);function nl(e){const t={};for(const n in e)n in Qa||(t[n]=e[n]);if(!1===e.css)return t;const{name:n="v",type:r,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:s=i,appearActiveClass:c=a,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=e,h=function(e){if(null==e)return null;if(H(e))return[rl(e.enter),rl(e.leave)];{const t=rl(e);return[t,t]}}(o),v=h&&h[0],m=h&&h[1],{onBeforeEnter:g,onEnter:y,onEnterCancelled:b,onLeave:w,onLeaveCancelled:C,onBeforeAppear:_=g,onAppear:E=y,onAppearCancelled:x=b}=t,k=(e,t,n)=>{il(e,t?u:l),il(e,t?c:a),n&&n()},S=(e,t)=>{e._isLeaving=!1,il(e,f),il(e,p),il(e,d),t&&t()},O=e=>(t,n)=>{const o=e?E:y,a=()=>k(t,e,n);el(o,[t,a]),al((()=>{il(t,e?s:i),ol(t,e?u:l),tl(o)||sl(t,r,v,a)}))};return V(t,{onBeforeEnter(e){el(g,[e]),ol(e,i),ol(e,a)},onBeforeAppear(e){el(_,[e]),ol(e,s),ol(e,c)},onEnter:O(!1),onAppear:O(!0),onLeave(e,t){e._isLeaving=!0;const n=()=>S(e,t);ol(e,f),dl(),ol(e,d),al((()=>{e._isLeaving&&(il(e,f),ol(e,p),tl(w)||sl(e,r,m,n))})),el(w,[e,n])},onEnterCancelled(e){k(e,!1),el(b,[e])},onAppearCancelled(e){k(e,!0),el(x,[e])},onLeaveCancelled(e){S(e),el(C,[e])}})}function rl(e){return ce(e)}function ol(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e._vtc||(e._vtc=new Set)).add(t)}function il(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function al(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let ll=0;function sl(e,t,n,r){const o=e._endId=++ll,i=()=>{o===e._endId&&r()};if(n)return setTimeout(i,n);const{type:a,timeout:l,propCount:s}=cl(e,t);if(!a)return r();const c=a+"end";let u=0;const f=()=>{e.removeEventListener(c,d),i()},d=t=>{t.target===e&&++u>=s&&f()};setTimeout((()=>{u(n[e]||"").split(", "),o=r(`${Za}Delay`),i=r(`${Za}Duration`),a=ul(o,i),l=r(`${Ya}Delay`),s=r(`${Ya}Duration`),c=ul(l,s);let u=null,f=0,d=0;t===Za?a>0&&(u=Za,f=a,d=i.length):t===Ya?c>0&&(u=Ya,f=c,d=s.length):(f=Math.max(a,c),u=f>0?a>c?Za:Ya:null,d=u?u===Za?i.length:s.length:0);return{type:u,timeout:f,propCount:d,hasTransform:u===Za&&/\b(transform|all)(,|$)/.test(r(`${Za}Property`).toString())}}function ul(e,t){for(;e.lengthfl(t)+fl(e[n]))))}function fl(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function dl(){return document.body.offsetHeight}const pl=new WeakMap,hl=new WeakMap,vl={name:"TransitionGroup",props:V({},Xa,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Hi(),r=pr();let o,i;return Dr((()=>{if(!o.length)return;const t=e.moveClass||`${e.name||"v"}-move`;if(!function(e,t,n){const r=e.cloneNode();e._vtc&&e._vtc.forEach((e=>{e.split(/\s+/).forEach((e=>e&&r.classList.remove(e)))}));n.split(/\s+/).forEach((e=>e&&r.classList.add(e))),r.style.display="none";const o=1===t.nodeType?t:t.parentNode;o.appendChild(r);const{hasTransform:i}=cl(r);return o.removeChild(r),i}(o[0].el,n.vnode.el,t))return;o.forEach(gl),o.forEach(yl);const r=o.filter(bl);dl(),r.forEach((e=>{const n=e.el,r=n.style;ol(n,t),r.transform=r.webkitTransform=r.transitionDuration="";const o=n._moveCb=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener("transitionend",o),n._moveCb=null,il(n,t))};n.addEventListener("transitionend",o)}))})),()=>{const a=It(e),l=nl(a);let s=a.tag||ai;o=i,i=t.default?Cr(t.default()):[];for(let e=0;e{const t=e.props["onUpdate:modelValue"]||!1;return j(t)?e=>ae(t,e):t};function Cl(e){e.target.composing=!0}function _l(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const El={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e._assign=wl(o);const i=r||o.props&&"number"===o.props.type;Aa(e,t?"change":"input",(t=>{if(t.target.composing)return;let r=e.value;n&&(r=r.trim()),i&&(r=se(r)),e._assign(r)})),n&&Aa(e,"change",(()=>{e.value=e.value.trim()})),t||(Aa(e,"compositionstart",Cl),Aa(e,"compositionend",_l),Aa(e,"change",_l))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:r,number:o}},i){if(e._assign=wl(i),e.composing)return;if(document.activeElement===e&&"range"!==e.type){if(n)return;if(r&&e.value.trim()===t)return;if((o||"number"===e.type)&&se(e.value)===t)return}const a=null==t?"":t;e.value!==a&&(e.value=a)}},xl={deep:!0,created(e,t,n){e._assign=wl(n),Aa(e,"change",(()=>{const t=e._modelValue,n=Pl(e),r=e.checked,o=e._assign;if(j(t)){const e=C(t,n),i=-1!==e;if(r&&!i)o(t.concat(n));else if(!r&&i){const n=[...t];n.splice(e,1),o(n)}}else if(I(t)){const e=new Set(t);r?e.add(n):e.delete(n),o(e)}else o(Tl(e,r))}))},mounted:kl,beforeUpdate(e,t,n){e._assign=wl(n),kl(e,t,n)}};function kl(e,{value:t,oldValue:n},r){e._modelValue=t,j(t)?e.checked=C(t,r.props.value)>-1:I(t)?e.checked=t.has(r.props.value):t!==n&&(e.checked=w(t,Tl(e,!0)))}const Sl={created(e,{value:t},n){e.checked=w(t,n.props.value),e._assign=wl(n),Aa(e,"change",(()=>{e._assign(Pl(e))}))},beforeUpdate(e,{value:t,oldValue:n},r){e._assign=wl(r),t!==n&&(e.checked=w(t,r.props.value))}},Ol={deep:!0,created(e,{value:t,modifiers:{number:n}},r){const o=I(t);Aa(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?se(Pl(e)):Pl(e)));e._assign(e.multiple?o?new Set(t):t:t[0])})),e._assign=wl(r)},mounted(e,{value:t}){Nl(e,t)},beforeUpdate(e,t,n){e._assign=wl(n)},updated(e,{value:t}){Nl(e,t)}};function Nl(e,t){const n=e.multiple;if(!n||j(t)||I(t)){for(let r=0,o=e.options.length;r-1:o.selected=t.has(i);else if(w(Pl(o),t))return void(e.selectedIndex!==r&&(e.selectedIndex=r))}n||-1===e.selectedIndex||(e.selectedIndex=-1)}}function Pl(e){return"_value"in e?e._value:e.value}function Tl(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Vl={created(e,t,n){Ll(e,t,n,null,"created")},mounted(e,t,n){Ll(e,t,n,null,"mounted")},beforeUpdate(e,t,n,r){Ll(e,t,n,r,"beforeUpdate")},updated(e,t,n,r){Ll(e,t,n,r,"updated")}};function Rl(e,t){switch(e){case"SELECT":return Ol;case"TEXTAREA":return El;default:switch(t){case"checkbox":return xl;case"radio":return Sl;default:return El}}}function Ll(e,t,n,r,o){const i=Rl(e.tagName,n.props&&n.props.type)[o];i&&i(e,t,n,r)}const Al=["ctrl","shift","alt","meta"],jl={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>Al.some((n=>e[`${n}Key`]&&!t.includes(n)))},Bl=(e,t)=>(n,...r)=>{for(let e=0;en=>{if(!("key"in n))return;const r=ne(n.key);return t.some((e=>e===r||Il[e]===r))?e(n):void 0},Fl={beforeMount(e,{value:t},{transition:n}){e._vod="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):Dl(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),Dl(e,!0),r.enter(e)):r.leave(e,(()=>{Dl(e,!1)})):Dl(e,t))},beforeUnmount(e,{value:t}){Dl(e,t)}};function Dl(e,t){e.style.display=t?e._vod:"none"}const Ul=V({patchProp:(e,t,n,r,o=!1,i,a,l,s)=>{"class"===t?function(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}(e,r,o):"style"===t?function(e,t,n){const r=e.style,o=U(n);if(n&&!o){if(t&&!U(t))for(const e in t)null==n[e]&&Ta(r,e,"");for(const e in n)Ta(r,e,n[e])}else{const i=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=i)}}(e,n,r):P(t)?T(t)||ja(e,t,0,r,a):("."===t[0]?(t=t.slice(1),1):"^"===t[0]?(t=t.slice(1),0):function(e,t,n,r){if(r)return"innerHTML"===t||"textContent"===t||!!(t in e&&Da.test(t)&&D(n));if("spellcheck"===t||"draggable"===t||"translate"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if(Da.test(t)&&U(n))return!1;return t in e}(e,t,r,o))?function(e,t,n,r,o,i,a){if("innerHTML"===t||"textContent"===t)return r&&a(r,o,i),void(e[t]=null==n?"":n);if("value"===t&&"PROGRESS"!==e.tagName&&!e.tagName.includes("-")){e._value=n;const r=null==n?"":n;return e.value===r&&"OPTION"!==e.tagName||(e.value=r),void(null==n&&e.removeAttribute(t))}let l=!1;if(""===n||null==n){const r=typeof e[t];"boolean"===r?n=b(n):null==n&&"string"===r?(n="",l=!0):"number"===r&&(n=0,l=!0)}try{e[t]=n}catch(e){}l&&e.removeAttribute(t)}(e,t,r,i,a,l,s):("true-value"===t?e._trueValue=r:"false-value"===t&&(e._falseValue=r),function(e,t,n,r,o){if(r&&t.startsWith("xlink:"))null==n?e.removeAttributeNS(La,t.slice(6,t.length)):e.setAttributeNS(La,t,n);else{const r=y(t);null==n||r&&!b(n)?e.removeAttribute(t):e.setAttribute(t,r?"":n)}}(e,t,r,o))}},Na);let $l,Hl=!1;function zl(){return $l||($l=Go(Ul))}function ql(){return $l=Hl?$l:Zo(Ul),Hl=!0,$l}const Wl=(...e)=>{zl().render(...e)},Kl=(...e)=>{ql().hydrate(...e)},Gl=(...e)=>{const t=zl().createApp(...e);const{mount:n}=t;return t.mount=e=>{const r=Yl(e);if(!r)return;const o=t._component;D(o)||o.render||o.template||(o.template=r.innerHTML),r.innerHTML="";const i=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t},Zl=(...e)=>{const t=ql().createApp(...e);const{mount:n}=t;return t.mount=e=>{const t=Yl(e);if(t)return n(t,!0,t instanceof SVGElement)},t};function Yl(e){if(U(e)){return document.querySelector(e)}return e}let Jl=!1;const Ql=()=>{Jl||(Jl=!0,El.getSSRProps=({value:e})=>({value:e}),Sl.getSSRProps=({value:e},t)=>{if(t.props&&w(t.props.value,e))return{checked:!0}},xl.getSSRProps=({value:e},t)=>{if(j(e)){if(t.props&&C(e,t.props.value)>-1)return{checked:!0}}else if(I(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},Vl.getSSRProps=(e,t)=>{if("string"!=typeof t.type)return;const n=Rl(t.type.toUpperCase(),t.props&&t.props.type);return n.getSSRProps?n.getSSRProps(e,t):void 0},Fl.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}})};function Xl(e){throw e}function es(e){}function ts(e,t,n,r){const o=new SyntaxError(String(e));return o.code=e,o.loc=t,o}const ns=Symbol(""),rs=Symbol(""),os=Symbol(""),is=Symbol(""),as=Symbol(""),ls=Symbol(""),ss=Symbol(""),cs=Symbol(""),us=Symbol(""),fs=Symbol(""),ds=Symbol(""),ps=Symbol(""),hs=Symbol(""),vs=Symbol(""),ms=Symbol(""),gs=Symbol(""),ys=Symbol(""),bs=Symbol(""),ws=Symbol(""),Cs=Symbol(""),_s=Symbol(""),Es=Symbol(""),xs=Symbol(""),ks=Symbol(""),Ss=Symbol(""),Os=Symbol(""),Ns=Symbol(""),Ps=Symbol(""),Ts=Symbol(""),Vs=Symbol(""),Rs=Symbol(""),Ls=Symbol(""),As=Symbol(""),js=Symbol(""),Bs=Symbol(""),Is=Symbol(""),Ms=Symbol(""),Fs=Symbol(""),Ds=Symbol(""),Us={[ns]:"Fragment",[rs]:"Teleport",[os]:"Suspense",[is]:"KeepAlive",[as]:"BaseTransition",[ls]:"openBlock",[ss]:"createBlock",[cs]:"createElementBlock",[us]:"createVNode",[fs]:"createElementVNode",[ds]:"createCommentVNode",[ps]:"createTextVNode",[hs]:"createStaticVNode",[vs]:"resolveComponent",[ms]:"resolveDynamicComponent",[gs]:"resolveDirective",[ys]:"resolveFilter",[bs]:"withDirectives",[ws]:"renderList",[Cs]:"renderSlot",[_s]:"createSlots",[Es]:"toDisplayString",[xs]:"mergeProps",[ks]:"normalizeClass",[Ss]:"normalizeStyle",[Os]:"normalizeProps",[Ns]:"guardReactiveProps",[Ps]:"toHandlers",[Ts]:"camelize",[Vs]:"capitalize",[Rs]:"toHandlerKey",[Ls]:"setBlockTracking",[As]:"pushScopeId",[js]:"popScopeId",[Bs]:"withCtx",[Is]:"unref",[Ms]:"isRef",[Fs]:"withMemo",[Ds]:"isMemoSame"};const $s={source:"",start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function Hs(e,t,n,r,o,i,a,l=!1,s=!1,c=!1,u=$s){return e&&(l?(e.helper(ls),e.helper(yc(e.inSSR,c))):e.helper(gc(e.inSSR,c)),a&&e.helper(bs)),{type:13,tag:t,props:n,children:r,patchFlag:o,dynamicProps:i,directives:a,isBlock:l,disableTracking:s,isComponent:c,loc:u}}function zs(e,t=$s){return{type:17,loc:t,elements:e}}function qs(e,t=$s){return{type:15,loc:t,properties:e}}function Ws(e,t){return{type:16,loc:$s,key:U(e)?Ks(e,!0):e,value:t}}function Ks(e,t=!1,n=$s,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function Gs(e,t=$s){return{type:8,loc:t,children:e}}function Zs(e,t=[],n=$s){return{type:14,loc:n,callee:e,arguments:t}}function Ys(e,t,n=!1,r=!1,o=$s){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:o}}function Js(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:$s}}const Qs=e=>4===e.type&&e.isStatic,Xs=(e,t)=>e===t||e===ne(t);function ec(e){return Xs(e,"Teleport")?rs:Xs(e,"Suspense")?os:Xs(e,"KeepAlive")?is:Xs(e,"BaseTransition")?as:void 0}const tc=/^\d|[^\$\w]/,nc=e=>!tc.test(e),rc=/[A-Za-z_$\xA0-\uFFFF]/,oc=/[\.\?\w$\xA0-\uFFFF]/,ic=/\s+[.[]\s*|\s*[.[]\s+/g,ac=e=>{e=e.trim().replace(ic,(e=>e.trim()));let t=0,n=[],r=0,o=0,i=null;for(let a=0;a4===e.key.type&&e.key.content===r))}return n}function Ec(e,t){return`_${t}_${e.replace(/[^\w]/g,((t,n)=>"-"===t?"_":e.charCodeAt(n).toString()))}`}function xc(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(gc(r,e.isComponent)),t(ls),t(yc(r,e.isComponent)))}function kc(e,t){const n=t.options?t.options.compatConfig:t.compatConfig,r=n&&n[e];return"MODE"===e?r||3:r}function Sc(e,t){const n=kc("MODE",t),r=kc(e,t);return 3===n?!0===r:!1!==r}function Oc(e,t,n,...r){return Sc(e,t)}const Nc=/&(gt|lt|amp|apos|quot);/g,Pc={gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},Tc={delimiters:["{{","}}"],getNamespace:()=>0,getTextMode:()=>0,isVoidTag:O,isPreTag:O,isCustomElement:O,decodeEntities:e=>e.replace(Nc,((e,t)=>Pc[t])),onError:Xl,onWarn:es,comments:!1};function Vc(e,t={}){const n=function(e,t){const n=V({},Tc);let r;for(r in t)n[r]=void 0===t[r]?Tc[r]:t[r];return{options:n,column:1,line:1,offset:0,originalSource:e,source:e,inPre:!1,inVPre:!1,onWarn:n.onWarn}}(e,t),r=qc(n);return function(e,t=$s){return{type:0,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:t}}(Rc(n,0,[]),Wc(n,r))}function Rc(e,t,n){const r=Kc(n),o=r?r.ns:0,i=[];for(;!Xc(e,t,n);){const a=e.source;let l;if(0===t||1===t)if(!e.inVPre&&Gc(a,e.options.delimiters[0]))l=$c(e,t);else if(0===t&&"<"===a[0])if(1===a.length)Qc(e,5,1);else if("!"===a[1])Gc(a,"\x3c!--")?l=jc(e):Gc(a,""===a[2]){Qc(e,14,2),Zc(e,3);continue}if(/[a-z]/i.test(a[2])){Qc(e,23),Fc(e,1,r);continue}Qc(e,12,2),l=Bc(e)}else/[a-z]/i.test(a[1])?(l=Ic(e,n),Sc("COMPILER_NATIVE_TEMPLATE",e)&&l&&"template"===l.tag&&!l.props.some((e=>7===e.type&&Mc(e.name)))&&(l=l.children)):"?"===a[1]?(Qc(e,21,1),l=Bc(e)):Qc(e,12,1);if(l||(l=Hc(e,t)),j(l))for(let e=0;e/.exec(e.source);if(r){r.index<=3&&Qc(e,0),r[1]&&Qc(e,10),n=e.source.slice(4,r.index);const t=e.source.slice(0,r.index);let o=1,i=0;for(;-1!==(i=t.indexOf("\x3c!--",o));)Zc(e,i-o+1),i+4");return-1===o?(r=e.source.slice(n),Zc(e,e.source.length)):(r=e.source.slice(n,o),Zc(e,o+1)),{type:3,content:r,loc:Wc(e,t)}}function Ic(e,t){const n=e.inPre,r=e.inVPre,o=Kc(t),i=Fc(e,0,o),a=e.inPre&&!n,l=e.inVPre&&!r;if(i.isSelfClosing||e.options.isVoidTag(i.tag))return a&&(e.inPre=!1),l&&(e.inVPre=!1),i;t.push(i);const s=e.options.getTextMode(i,o),c=Rc(e,s,t);t.pop();{const t=i.props.find((e=>6===e.type&&"inline-template"===e.name));if(t&&Oc("COMPILER_INLINE_TEMPLATE",e,t.loc)){const n=Wc(e,i.loc.end);t.value={type:2,content:n.source,loc:n}}}if(i.children=c,eu(e.source,i.tag))Fc(e,1,o);else if(Qc(e,24,0,i.loc.start),0===e.source.length&&"script"===i.tag.toLowerCase()){const t=c[0];t&&Gc(t.loc.source,"\x3c!--")&&Qc(e,8)}return i.loc=Wc(e,i.loc.start),a&&(e.inPre=!1),l&&(e.inVPre=!1),i}const Mc=o("if,else,else-if,for,slot");function Fc(e,t,n){const r=qc(e),o=/^<\/?([a-z][^\t\r\n\f />]*)/i.exec(e.source),i=o[1],a=e.options.getNamespace(i,n);Zc(e,o[0].length),Yc(e);const l=qc(e),s=e.source;e.options.isPreTag(i)&&(e.inPre=!0);let c=Dc(e,t);0===t&&!e.inVPre&&c.some((e=>7===e.type&&"pre"===e.name))&&(e.inVPre=!0,V(e,l),e.source=s,c=Dc(e,t).filter((e=>"v-pre"!==e.name)));let u=!1;if(0===e.source.length?Qc(e,9):(u=Gc(e.source,"/>"),1===t&&u&&Qc(e,4),Zc(e,u?2:1)),1===t)return;let f=0;return e.inVPre||("slot"===i?f=2:"template"===i?c.some((e=>7===e.type&&Mc(e.name)))&&(f=3):function(e,t,n){const r=n.options;if(r.isCustomElement(e))return!1;if("component"===e||/^[A-Z]/.test(e)||ec(e)||r.isBuiltInComponent&&r.isBuiltInComponent(e)||r.isNativeTag&&!r.isNativeTag(e))return!0;for(let e=0;e0&&!Gc(e.source,">")&&!Gc(e.source,"/>");){if(Gc(e.source,"/")){Qc(e,22),Zc(e,1),Yc(e);continue}1===t&&Qc(e,3);const o=Uc(e,r);6===o.type&&o.value&&"class"===o.name&&(o.value.content=o.value.content.replace(/\s+/g," ").trim()),0===t&&n.push(o),/^[^\t\r\n\f />]/.test(e.source)&&Qc(e,15),Yc(e)}return n}function Uc(e,t){const n=qc(e),r=/^[^\t\r\n\f />][^\t\r\n\f />=]*/.exec(e.source)[0];t.has(r)&&Qc(e,2),t.add(r),"="===r[0]&&Qc(e,19);{const t=/["'<]/g;let n;for(;n=t.exec(r);)Qc(e,17,n.index)}let o;Zc(e,r.length),/^[\t\r\n\f ]*=/.test(e.source)&&(Yc(e),Zc(e,1),Yc(e),o=function(e){const t=qc(e);let n;const r=e.source[0],o='"'===r||"'"===r;if(o){Zc(e,1);const t=e.source.indexOf(r);-1===t?n=zc(e,e.source.length,4):(n=zc(e,t,4),Zc(e,1))}else{const t=/^[^\t\r\n\f >]+/.exec(e.source);if(!t)return;const r=/["'<=`]/g;let o;for(;o=r.exec(t[0]);)Qc(e,18,o.index);n=zc(e,t[0].length,4)}return{content:n,isQuoted:o,loc:Wc(e,t)}}(e),o||Qc(e,13));const i=Wc(e,n);if(!e.inVPre&&/^(v-[A-Za-z0-9-]|:|\.|@|#)/.test(r)){const t=/(?:^v-([a-z0-9-]+))?(?:(?::|^\.|^@|^#)(\[[^\]]+\]|[^\.]+))?(.+)?$/i.exec(r);let a,l=Gc(r,"."),s=t[1]||(l||Gc(r,":")?"bind":Gc(r,"@")?"on":"slot");if(t[2]){const o="slot"===s,i=r.lastIndexOf(t[2]),l=Wc(e,Jc(e,n,i),Jc(e,n,i+t[2].length+(o&&t[3]||"").length));let c=t[2],u=!0;c.startsWith("[")?(u=!1,c.endsWith("]")?c=c.slice(1,c.length-1):(Qc(e,27),c=c.slice(1))):o&&(c+=t[3]||""),a={type:4,content:c,isStatic:u,constType:u?3:0,loc:l}}if(o&&o.isQuoted){const e=o.loc;e.start.offset++,e.start.column++,e.end=sc(e.start,o.content),e.source=e.source.slice(1,-1)}const c=t[3]?t[3].slice(1).split("."):[];return l&&c.push("prop"),"bind"===s&&a&&c.includes("sync")&&Oc("COMPILER_V_BIND_SYNC",e,0,a.loc.source)&&(s="model",c.splice(c.indexOf("sync"),1)),{type:7,name:s,exp:o&&{type:4,content:o.content,isStatic:!1,constType:0,loc:o.loc},arg:a,modifiers:c,loc:i}}return!e.inVPre&&Gc(r,"v-")&&Qc(e,26),{type:6,name:r,value:o&&{type:2,content:o.content,loc:o.loc},loc:i}}function $c(e,t){const[n,r]=e.options.delimiters,o=e.source.indexOf(r,n.length);if(-1===o)return void Qc(e,25);const i=qc(e);Zc(e,n.length);const a=qc(e),l=qc(e),s=o-n.length,c=e.source.slice(0,s),u=zc(e,s,t),f=u.trim(),d=u.indexOf(f);d>0&&cc(a,c,d);return cc(l,c,s-(u.length-f.length-d)),Zc(e,r.length),{type:5,content:{type:4,isStatic:!1,constType:0,content:f,loc:Wc(e,a,l)},loc:Wc(e,i)}}function Hc(e,t){const n=3===t?["]]>"]:["<",e.options.delimiters[0]];let r=e.source.length;for(let t=0;to&&(r=o)}const o=qc(e);return{type:2,content:zc(e,r,t),loc:Wc(e,o)}}function zc(e,t,n){const r=e.source.slice(0,t);return Zc(e,t),2!==n&&3!==n&&r.includes("&")?e.options.decodeEntities(r,4===n):r}function qc(e){const{column:t,line:n,offset:r}=e;return{column:t,line:n,offset:r}}function Wc(e,t,n){return{start:t,end:n=n||qc(e),source:e.originalSource.slice(t.offset,n.offset)}}function Kc(e){return e[e.length-1]}function Gc(e,t){return e.startsWith(t)}function Zc(e,t){const{source:n}=e;cc(e,n,t),e.source=n.slice(t)}function Yc(e){const t=/^[\t\r\n\f ]+/.exec(e.source);t&&Zc(e,t[0].length)}function Jc(e,t,n){return sc(t,e.originalSource.slice(t.offset,n),n)}function Qc(e,t,n,r=qc(e)){n&&(r.offset+=n,r.column+=n),e.options.onError(ts(t,{start:r,end:r,source:""}))}function Xc(e,t,n){const r=e.source;switch(t){case 0:if(Gc(r,""))for(let e=n.length-1;e>=0;--e)if(eu(r,n[e].tag))return!0;break;case 1:case 2:{const e=Kc(n);if(e&&eu(r,e.tag))return!0;break}case 3:if(Gc(r,"]]>"))return!0}return!r}function eu(e,t){return Gc(e,"")&&e.slice(2,2+t.length).toLowerCase()===t.toLowerCase()&&/[\t\r\n\f />]/.test(e[2+t.length]||">")}function tu(e,t){ru(e,t,nu(e,e.children[0]))}function nu(e,t){const{children:n}=e;return 1===n.length&&1===t.type&&!mc(t)}function ru(e,t,n=!1){const{children:r}=e,o=r.length;let i=0;for(let e=0;e0){if(e>=2){o.codegenNode.patchFlag="-1",o.codegenNode=t.hoist(o.codegenNode),i++;continue}}else{const e=o.codegenNode;if(13===e.type){const n=cu(e);if((!n||512===n||1===n)&&lu(o,t)>=2){const n=su(o);n&&(e.props=t.hoist(n))}e.dynamicProps&&(e.dynamicProps=t.hoist(e.dynamicProps))}}}if(1===o.type){const e=1===o.tagType;e&&t.scopes.vSlot++,ru(o,t),e&&t.scopes.vSlot--}else if(11===o.type)ru(o,t,1===o.children.length);else if(9===o.type)for(let e=0;e1)for(let o=0;o`_${Us[E.helper(e)]}`,replaceNode(e){E.parent.children[E.childIndex]=E.currentNode=e},removeNode(e){const t=E.parent.children,n=e?t.indexOf(e):E.currentNode?E.childIndex:-1;e&&e!==E.currentNode?E.childIndex>n&&(E.childIndex--,E.onNodeRemoved()):(E.currentNode=null,E.onNodeRemoved()),E.parent.children.splice(n,1)},onNodeRemoved:()=>{},addIdentifiers(e){},removeIdentifiers(e){},hoist(e){U(e)&&(e=Ks(e)),E.hoists.push(e);const t=Ks(`_hoisted_${E.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache:(e,t=!1)=>function(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:$s}}(E.cached++,e,t)};return E.filters=new Set,E}function fu(e,t){const n=uu(e,t);du(e,n),t.hoistStatic&&tu(e,n),t.ssr||function(e,t){const{helper:n}=t,{children:r}=e;if(1===r.length){const n=r[0];if(nu(e,n)&&n.codegenNode){const r=n.codegenNode;13===r.type&&xc(r,t),e.codegenNode=r}else e.codegenNode=n}else if(r.length>1){let r=64;i[64];0,e.codegenNode=Hs(t,n(ns),void 0,e.children,r+"",void 0,void 0,!0,void 0,!1)}}(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.filters=[...n.filters]}function du(e,t){t.currentNode=e;const{nodeTransforms:n}=t,r=[];for(let o=0;o{n--};for(;nt===e:t=>e.test(t);return(e,r)=>{if(1===e.type){const{props:o}=e;if(3===e.tagType&&o.some(hc))return;const i=[];for(let a=0;a`${Us[e]}: _${Us[e]}`;function mu(e,{mode:t="function",prefixIdentifiers:n="module"===t,sourceMap:r=!1,filename:o="template.vue.html",scopeId:i=null,optimizeImports:a=!1,runtimeGlobalName:l="Vue",runtimeModuleName:s="vue",ssrRuntimeModuleName:c="vue/server-renderer",ssr:u=!1,isTS:f=!1,inSSR:d=!1}){const p={mode:t,prefixIdentifiers:n,sourceMap:r,filename:o,scopeId:i,optimizeImports:a,runtimeGlobalName:l,runtimeModuleName:s,ssrRuntimeModuleName:c,ssr:u,isTS:f,inSSR:d,source:e.loc.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper:e=>`_${Us[e]}`,push(e,t){p.code+=e},indent(){h(++p.indentLevel)},deindent(e=!1){e?--p.indentLevel:h(--p.indentLevel)},newline(){h(p.indentLevel)}};function h(e){p.push("\n"+" ".repeat(e))}return p}function gu(e,t={}){const n=mu(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:r,push:o,prefixIdentifiers:i,indent:a,deindent:l,newline:s,scopeId:c,ssr:u}=n,f=Array.from(e.helpers),d=f.length>0,p=!i&&"module"!==r,h=n;!function(e,t){const{ssr:n,prefixIdentifiers:r,push:o,newline:i,runtimeModuleName:a,runtimeGlobalName:l,ssrRuntimeModuleName:s}=t,c=l,u=Array.from(e.helpers);if(u.length>0&&(o(`const _Vue = ${c}\n`),e.hoists.length)){o(`const { ${[us,fs,ds,ps,hs].filter((e=>u.includes(e))).map(vu).join(", ")} } = _Vue\n`)}(function(e,t){if(!e.length)return;t.pure=!0;const{push:n,newline:r,helper:o,scopeId:i,mode:a}=t;r();for(let o=0;o0)&&s()),e.directives.length&&(yu(e.directives,"directive",n),e.temps>0&&s()),e.filters&&e.filters.length&&(s(),yu(e.filters,"filter",n),s()),e.temps>0){o("let ");for(let t=0;t0?", ":""}_temp${t}`)}return(e.components.length||e.directives.length||e.temps)&&(o("\n"),s()),u||o("return "),e.codegenNode?Cu(e.codegenNode,n):o("null"),p&&(l(),o("}")),l(),o("}"),{ast:e,code:n.code,preamble:"",map:n.map?n.map.toJSON():void 0}}function yu(e,t,{helper:n,push:r,newline:o,isTS:i}){const a=n("filter"===t?ys:"component"===t?vs:gs);for(let n=0;n3||!1;t.push("["),n&&t.indent(),wu(e,t,n),n&&t.deindent(),t.push("]")}function wu(e,t,n=!1,r=!0){const{push:o,newline:i}=t;for(let a=0;ae||"null"))}([i,a,l,s,c]),t),n(")"),f&&n(")");u&&(n(", "),Cu(u,t),n(")"))}(e,t);break;case 14:!function(e,t){const{push:n,helper:r,pure:o}=t,i=U(e.callee)?e.callee:r(e.callee);o&&n(hu);n(i+"(",e),wu(e.arguments,t),n(")")}(e,t);break;case 15:!function(e,t){const{push:n,indent:r,deindent:o,newline:i}=t,{properties:a}=e;if(!a.length)return void n("{}",e);const l=a.length>1||!1;n(l?"{":"{ "),l&&r();for(let e=0;e "),(s||l)&&(n("{"),r());a?(s&&n("return "),j(a)?bu(a,t):Cu(a,t)):l&&Cu(l,t);(s||l)&&(o(),n("}"));c&&(e.isNonScopedSlot&&n(", undefined, true"),n(")"))}(e,t);break;case 19:!function(e,t){const{test:n,consequent:r,alternate:o,newline:i}=e,{push:a,indent:l,deindent:s,newline:c}=t;if(4===n.type){const e=!nc(n.content);e&&a("("),_u(n,t),e&&a(")")}else a("("),Cu(n,t),a(")");i&&l(),t.indentLevel++,i||a(" "),a("? "),Cu(r,t),t.indentLevel--,i&&c(),i||a(" "),a(": ");const u=19===o.type;u||t.indentLevel++;Cu(o,t),u||t.indentLevel--;i&&s(!0)}(e,t);break;case 20:!function(e,t){const{push:n,helper:r,indent:o,deindent:i,newline:a}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(o(),n(`${r(Ls)}(-1),`),a());n(`_cache[${e.index}] = `),Cu(e.value,t),e.isVNode&&(n(","),a(),n(`${r(Ls)}(1),`),a(),n(`_cache[${e.index}]`),i());n(")")}(e,t);break;case 21:wu(e.body,t,!0,!1)}}function _u(e,t){const{content:n,isStatic:r}=e;t.push(r?JSON.stringify(n):n,e)}function Eu(e,t){for(let n=0;nfunction(e,t,n,r){if(!("else"===t.name||t.exp&&t.exp.content.trim())){const r=t.exp?t.exp.loc:e.loc;n.onError(ts(28,t.loc)),t.exp=Ks("true",!1,r)}0;if("if"===t.name){const o=Su(e,t),i={type:9,loc:e.loc,branches:[o]};if(n.replaceNode(i),r)return r(i,o,!0)}else{const o=n.parent.children;let i=o.indexOf(e);for(;i-- >=-1;){const a=o[i];if(a&&3===a.type)n.removeNode(a);else{if(!a||2!==a.type||a.content.trim().length){if(a&&9===a.type){"else-if"===t.name&&void 0===a.branches[a.branches.length-1].condition&&n.onError(ts(30,e.loc)),n.removeNode();const o=Su(e,t);0,a.branches.push(o);const i=r&&r(a,o,!1);du(o,n),i&&i(),n.currentNode=null}else n.onError(ts(30,e.loc));break}n.removeNode(a)}}}}(e,t,n,((e,t,r)=>{const o=n.parent.children;let i=o.indexOf(e),a=0;for(;i-- >=0;){const e=o[i];e&&9===e.type&&(a+=e.branches.length)}return()=>{if(r)e.codegenNode=Ou(t,a,n);else{const r=function(e){for(;;)if(19===e.type){if(19!==e.alternate.type)return e;e=e.alternate}else 20===e.type&&(e=e.value)}(e.codegenNode);r.alternate=Ou(t,a+e.branches.length-1,n)}}}))));function Su(e,t){const n=3===e.tagType;return{type:10,loc:e.loc,condition:"else"===t.name?void 0:t.exp,children:n&&!uc(e,"for")?e.children:[e],userKey:fc(e,"key"),isTemplateIf:n}}function Ou(e,t,n){return e.condition?Js(e.condition,Nu(e,t,n),Zs(n.helper(ds),['""',"true"])):Nu(e,t,n)}function Nu(e,t,n){const{helper:r}=n,o=Ws("key",Ks(`${t}`,!1,$s,2)),{children:a}=e,l=a[0];if(1!==a.length||1!==l.type){if(1===a.length&&11===l.type){const e=l.codegenNode;return Cc(e,o,n),e}{let t=64;i[64];return Hs(n,r(ns),qs([o]),a,t+"",void 0,void 0,!0,!1,!1,e.loc)}}{const e=l.codegenNode,t=14===(s=e).type&&s.callee===Fs?s.arguments[1].returns:s;return 13===t.type&&xc(t,n),Cc(t,o,n),e}var s}const Pu=pu("for",((e,t,n)=>{const{helper:r,removeHelper:o}=n;return function(e,t,n,r){if(!t.exp)return void n.onError(ts(31,t.loc));const o=Lu(t.exp,n);if(!o)return void n.onError(ts(32,t.loc));const{addIdentifiers:i,removeIdentifiers:a,scopes:l}=n,{source:s,value:c,key:u,index:f}=o,d={type:11,loc:t.loc,source:s,valueAlias:c,keyAlias:u,objectIndexAlias:f,parseResult:o,children:vc(e)?e.children:[e]};n.replaceNode(d),l.vFor++;const p=r&&r(d);return()=>{l.vFor--,p&&p()}}(e,t,n,(t=>{const i=Zs(r(ws),[t.source]),a=vc(e),l=uc(e,"memo"),s=fc(e,"key"),c=s&&(6===s.type?Ks(s.value.content,!0):s.exp),u=s?Ws("key",c):null,f=4===t.source.type&&t.source.constType>0,d=f?64:s?128:256;return t.codegenNode=Hs(n,r(ns),void 0,i,d+"",void 0,void 0,!0,!f,!1,e.loc),()=>{let s;const{children:d}=t;const p=1!==d.length||1!==d[0].type,h=mc(e)?e:a&&1===e.children.length&&mc(e.children[0])?e.children[0]:null;if(h?(s=h.codegenNode,a&&u&&Cc(s,u,n)):p?s=Hs(n,r(ns),u?qs([u]):void 0,e.children,"64",void 0,void 0,!0,void 0,!1):(s=d[0].codegenNode,a&&u&&Cc(s,u,n),s.isBlock!==!f&&(s.isBlock?(o(ls),o(yc(n.inSSR,s.isComponent))):o(gc(n.inSSR,s.isComponent))),s.isBlock=!f,s.isBlock?(r(ls),r(yc(n.inSSR,s.isComponent))):r(gc(n.inSSR,s.isComponent))),l){const e=Ys(ju(t.parseResult,[Ks("_cached")]));e.body={type:21,body:[Gs(["const _memo = (",l.exp,")"]),Gs(["if (_cached",...c?[" && _cached.key === ",c]:[],` && ${n.helperString(Ds)}(_cached, _memo)) return _cached`]),Gs(["const _item = ",s]),Ks("_item.memo = _memo"),Ks("return _item")],loc:$s},i.arguments.push(e,Ks("_cache"),Ks(String(n.cached++)))}else i.arguments.push(Ys(ju(t.parseResult),s,!0))}}))}));const Tu=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Vu=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Ru=/^\(|\)$/g;function Lu(e,t){const n=e.loc,r=e.content,o=r.match(Tu);if(!o)return;const[,i,a]=o,l={source:Au(n,a.trim(),r.indexOf(a,i.length)),value:void 0,key:void 0,index:void 0};let s=i.trim().replace(Ru,"").trim();const c=i.indexOf(s),u=s.match(Vu);if(u){s=s.replace(Vu,"").trim();const e=u[1].trim();let t;if(e&&(t=r.indexOf(e,c+s.length),l.key=Au(n,e,t)),u[2]){const o=u[2].trim();o&&(l.index=Au(n,o,r.indexOf(o,l.key?t+e.length:c+s.length)))}}return s&&(l.value=Au(n,s,c)),l}function Au(e,t,n){return Ks(t,!1,lc(e,n,t.length))}function ju({value:e,key:t,index:n},r=[]){return function(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map(((e,t)=>e||Ks("_".repeat(t+1),!1)))}([e,t,n,...r])}const Bu=Ks("undefined",!1),Iu=(e,t)=>{if(1===e.type&&(1===e.tagType||3===e.tagType)){const n=uc(e,"slot");if(n)return n.exp,t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},Mu=(e,t,n)=>Ys(e,t,!1,!0,t.length?t[0].loc:n);function Fu(e,t,n=Mu){t.helper(Bs);const{children:r,loc:o}=e,i=[],a=[];let l=t.scopes.vSlot>0||t.scopes.vFor>0;const s=uc(e,"slot",!0);if(s){const{arg:e,exp:t}=s;e&&!Qs(e)&&(l=!0),i.push(Ws(e||Ks("default",!0),n(t,r,o)))}let c=!1,u=!1;const f=[],d=new Set;let p=0;for(let e=0;e{const i=n(e,r,o);return t.compatConfig&&(i.isNonScopedSlot=!0),Ws("default",i)};c?f.length&&f.some((e=>$u(e)))&&(u?t.onError(ts(39,f[0].loc)):i.push(e(void 0,f))):i.push(e(void 0,r))}const h=l?2:Uu(e.children)?3:1;let v=qs(i.concat(Ws("_",Ks(h+"",!1))),o);return a.length&&(v=Zs(t.helper(_s),[v,zs(a)])),{slots:v,hasDynamicSlots:l}}function Du(e,t,n){const r=[Ws("name",e),Ws("fn",t)];return null!=n&&r.push(Ws("key",Ks(String(n),!0))),qs(r)}function Uu(e){for(let t=0;tfunction(){if(1!==(e=t.currentNode).type||0!==e.tagType&&1!==e.tagType)return;const{tag:n,props:r}=e,o=1===e.tagType;let i=o?function(e,t,n=!1){let{tag:r}=e;const o=Gu(r),i=fc(e,"is");if(i)if(o||Sc("COMPILER_IS_ON_ELEMENT",t)){const e=6===i.type?i.value&&Ks(i.value.content,!0):i.exp;if(e)return Zs(t.helper(ms),[e])}else 6===i.type&&i.value.content.startsWith("vue:")&&(r=i.value.content.slice(4));const a=!o&&uc(e,"is");if(a&&a.exp)return Zs(t.helper(ms),[a.exp]);const l=ec(r)||t.isBuiltInComponent(r);if(l)return n||t.helper(l),l;return t.helper(vs),t.components.add(r),Ec(r,"component")}(e,t):`"${n}"`;const a=H(i)&&i.callee===ms;let l,s,c,u,f,d,p=0,h=a||i===rs||i===os||!o&&("svg"===n||"foreignObject"===n);if(r.length>0){const n=qu(e,t,void 0,o,a);l=n.props,p=n.patchFlag,f=n.dynamicPropNames;const r=n.directives;d=r&&r.length?zs(r.map((e=>function(e,t){const n=[],r=Hu.get(e);r?n.push(t.helperString(r)):(t.helper(gs),t.directives.add(e.name),n.push(Ec(e.name,"directive")));const{loc:o}=e;e.exp&&n.push(e.exp);e.arg&&(e.exp||n.push("void 0"),n.push(e.arg));if(Object.keys(e.modifiers).length){e.arg||(e.exp||n.push("void 0"),n.push("void 0"));const t=Ks("true",!1,o);n.push(qs(e.modifiers.map((e=>Ws(e,t))),o))}return zs(n,e.loc)}(e,t)))):void 0,n.shouldUseBlock&&(h=!0)}if(e.children.length>0){i===is&&(h=!0,p|=1024);if(o&&i!==rs&&i!==is){const{slots:n,hasDynamicSlots:r}=Fu(e,t);s=n,r&&(p|=1024)}else if(1===e.children.length&&i!==rs){const n=e.children[0],r=n.type,o=5===r||8===r;o&&0===ou(n,t)&&(p|=1),s=o||2===r?n:e.children}else s=e.children}0!==p&&(c=String(p),f&&f.length&&(u=function(e){let t="[";for(let n=0,r=e.length;n0;let p=!1,h=0,v=!1,m=!1,g=!1,y=!1,b=!1,w=!1;const C=[],_=e=>{c.length&&(u.push(qs(Wu(c),l)),c=[]),e&&u.push(e)},E=({key:e,value:n})=>{if(Qs(e)){const i=e.content,a=P(i);if(!a||r&&!o||"onclick"===i.toLowerCase()||"onUpdate:modelValue"===i||Y(i)||(y=!0),a&&Y(i)&&(w=!0),20===n.type||(4===n.type||8===n.type)&&ou(n,t)>0)return;"ref"===i?v=!0:"class"===i?m=!0:"style"===i?g=!0:"key"===i||C.includes(i)||C.push(i),!r||"class"!==i&&"style"!==i||C.includes(i)||C.push(i)}else b=!0};for(let o=0;o0&&c.push(Ws(Ks("ref_for",!0),Ks("true")))),"is"===n&&(Gu(a)||r&&r.content.startsWith("vue:")||Sc("COMPILER_IS_ON_ELEMENT",t)))continue;c.push(Ws(Ks(n,!0,lc(e,0,n.length)),Ks(r?r.content:"",o,r?r.loc:e)))}else{const{name:n,arg:o,exp:h,loc:v}=s,m="bind"===n,g="on"===n;if("slot"===n){r||t.onError(ts(40,v));continue}if("once"===n||"memo"===n)continue;if("is"===n||m&&dc(o,"is")&&(Gu(a)||Sc("COMPILER_IS_ON_ELEMENT",t)))continue;if(g&&i)continue;if((m&&dc(o,"key")||g&&d&&dc(o,"vue:before-update"))&&(p=!0),m&&dc(o,"ref")&&t.scopes.vFor>0&&c.push(Ws(Ks("ref_for",!0),Ks("true"))),!o&&(m||g)){if(b=!0,h)if(m){if(_(),Sc("COMPILER_V_BIND_OBJECT_ORDER",t)){u.unshift(h);continue}u.push(h)}else _({type:14,loc:v,callee:t.helper(Ps),arguments:r?[h]:[h,"true"]});else t.onError(ts(m?34:35,v));continue}const y=t.directiveTransforms[n];if(y){const{props:n,needRuntime:r}=y(s,e,t);!i&&n.forEach(E),g&&o&&!Qs(o)?_(qs(n,l)):c.push(...n),r&&(f.push(s),$(r)&&Hu.set(s,r))}else J(n)||(f.push(s),d&&(p=!0))}}let x;if(u.length?(_(),x=u.length>1?Zs(t.helper(xs),u,l):u[0]):c.length&&(x=qs(Wu(c),l)),b?h|=16:(m&&!r&&(h|=2),g&&!r&&(h|=4),C.length&&(h|=8),y&&(h|=32)),p||0!==h&&32!==h||!(v||w||f.length>0)||(h|=512),!t.inSSR&&x)switch(x.type){case 15:let e=-1,n=-1,r=!1;for(let t=0;t{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))})((e=>e.replace(Zu,((e,t)=>t?t.toUpperCase():"")))),Ju=(e,t)=>{if(mc(e)){const{children:n,loc:r}=e,{slotName:o,slotProps:i}=function(e,t){let n,r='"default"';const o=[];for(let t=0;t0){const{props:r,directives:i}=qu(e,t,o,!1,!1);n=r,i.length&&t.onError(ts(36,i[0].loc))}return{slotName:r,slotProps:n}}(e,t),a=[t.prefixIdentifiers?"_ctx.$slots":"$slots",o,"{}","undefined","true"];let l=2;i&&(a[2]=i,l=3),n.length&&(a[3]=Ys([],n,!1,!1,r),l=4),t.scopeId&&!t.slotted&&(l=5),a.splice(l),e.codegenNode=Zs(t.helper(Cs),a,r)}};const Qu=/^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/,Xu=(e,t,n,r)=>{const{loc:o,modifiers:i,arg:a}=e;let l;if(e.exp||i.length||n.onError(ts(35,o)),4===a.type)if(a.isStatic){let e=a.content;e.startsWith("vue:")&&(e=`vnode-${e.slice(4)}`);l=Ks(0!==t.tagType||e.startsWith("vnode")||!/[A-Z]/.test(e)?oe(ee(e)):`on:${e}`,!0,a.loc)}else l=Gs([`${n.helperString(Rs)}(`,a,")"]);else l=a,l.children.unshift(`${n.helperString(Rs)}(`),l.children.push(")");let s=e.exp;s&&!s.content.trim()&&(s=void 0);let c=n.cacheHandlers&&!s&&!n.inVOnce;if(s){const e=ac(s.content),t=!(e||Qu.test(s.content)),n=s.content.includes(";");0,(t||c&&e)&&(s=Gs([`${t?"$event":"(...args)"} => ${n?"{":"("}`,s,n?"}":")"]))}let u={props:[Ws(l,s||Ks("() => {}",!1,o))]};return r&&(u=r(u)),c&&(u.props[0].value=n.cache(u.props[0].value)),u.props.forEach((e=>e.key.isHandlerKey=!0)),u},ef=(e,t,n)=>{const{exp:r,modifiers:o,loc:i}=e,a=e.arg;return 4!==a.type?(a.children.unshift("("),a.children.push(') || ""')):a.isStatic||(a.content=`${a.content} || ""`),o.includes("camel")&&(4===a.type?a.isStatic?a.content=ee(a.content):a.content=`${n.helperString(Ts)}(${a.content})`:(a.children.unshift(`${n.helperString(Ts)}(`),a.children.push(")"))),n.inSSR||(o.includes("prop")&&tf(a,"."),o.includes("attr")&&tf(a,"^")),!r||4===r.type&&!r.content.trim()?(n.onError(ts(34,i)),{props:[Ws(a,Ks("",!0,i))]}):{props:[Ws(a,r)]}},tf=(e,t)=>{4===e.type?e.isStatic?e.content=t+e.content:e.content=`\`${t}\${${e.content}}\``:(e.children.unshift(`'${t}' + (`),e.children.push(")"))},nf=(e,t)=>{if(0===e.type||1===e.type||11===e.type||10===e.type)return()=>{const n=e.children;let r,o=!1;for(let e=0;e7===e.type&&!t.directiveTransforms[e.name]))||"template"===e.tag)))for(let e=0;e{if(1===e.type&&uc(e,"once",!0)){if(rf.has(e)||t.inVOnce)return;return rf.add(e),t.inVOnce=!0,t.helper(Ls),()=>{t.inVOnce=!1;const e=t.currentNode;e.codegenNode&&(e.codegenNode=t.cache(e.codegenNode,!0))}}},af=(e,t,n)=>{const{exp:r,arg:o}=e;if(!r)return n.onError(ts(41,e.loc)),lf();const i=r.loc.source,a=4===r.type?r.content:i,l=n.bindingMetadata[i];if("props"===l||"props-aliased"===l)return n.onError(ts(44,r.loc)),lf();if(!a.trim()||!ac(a))return n.onError(ts(42,r.loc)),lf();const s=o||Ks("modelValue",!0),c=o?Qs(o)?`onUpdate:${ee(o.content)}`:Gs(['"onUpdate:" + ',o]):"onUpdate:modelValue";let u;u=Gs([`${n.isTS?"($event: any)":"$event"} => ((`,r,") = $event)"]);const f=[Ws(s,e.exp),Ws(c,u)];if(e.modifiers.length&&1===t.tagType){const t=e.modifiers.map((e=>(nc(e)?e:JSON.stringify(e))+": true")).join(", "),n=o?Qs(o)?`${o.content}Modifiers`:Gs([o,' + "Modifiers"']):"modelModifiers";f.push(Ws(n,Ks(`{ ${t} }`,!1,e.loc,2)))}return lf(f)};function lf(e=[]){return{props:e}}const sf=/[\w).+\-_$\]]/,cf=(e,t)=>{Sc("COMPILER_FILTER",t)&&(5===e.type&&uf(e.content,t),1===e.type&&e.props.forEach((e=>{7===e.type&&"for"!==e.name&&e.exp&&uf(e.exp,t)})))};function uf(e,t){if(4===e.type)ff(e,t);else for(let n=0;n=0&&(e=n.charAt(t)," "===e);t--);e&&sf.test(e)||(u=!0)}}else void 0===a?(h=i+1,a=n.slice(0,i).trim()):m();function m(){v.push(n.slice(h,i).trim()),h=i+1}if(void 0===a?a=n.slice(0,i).trim():0!==h&&m(),v.length){for(i=0;i{if(1===e.type){const n=uc(e,"memo");if(!n||pf.has(e))return;return pf.add(e),()=>{const r=e.codegenNode||t.currentNode.codegenNode;r&&13===r.type&&(1!==e.tagType&&xc(r,t),e.codegenNode=Zs(t.helper(Fs),[n.exp,Ys(void 0,r),"_cache",String(t.cached++)]))}}};function vf(e,t={}){const n=t.onError||Xl,r="module"===t.mode;!0===t.prefixIdentifiers?n(ts(47)):r&&n(ts(48));t.cacheHandlers&&n(ts(49)),t.scopeId&&!r&&n(ts(50));const o=U(e)?Vc(e,t):e,[i,a]=[[of,ku,hf,Pu,cf,Ju,zu,Iu,nf],{on:Xu,bind:ef,model:af}];return fu(o,V({},t,{prefixIdentifiers:false,nodeTransforms:[...i,...t.nodeTransforms||[]],directiveTransforms:V({},a,t.directiveTransforms||{})})),gu(o,V({},t,{prefixIdentifiers:false}))}const mf=Symbol(""),gf=Symbol(""),yf=Symbol(""),bf=Symbol(""),wf=Symbol(""),Cf=Symbol(""),_f=Symbol(""),Ef=Symbol(""),xf=Symbol(""),kf=Symbol("");var Sf;let Of;Sf={[mf]:"vModelRadio",[gf]:"vModelCheckbox",[yf]:"vModelText",[bf]:"vModelSelect",[wf]:"vModelDynamic",[Cf]:"withModifiers",[_f]:"withKeys",[Ef]:"vShow",[xf]:"Transition",[kf]:"TransitionGroup"},Object.getOwnPropertySymbols(Sf).forEach((e=>{Us[e]=Sf[e]}));const Nf=o("style,iframe,script,noscript",!0),Pf={isVoidTag:m,isNativeTag:e=>h(e)||v(e),isPreTag:e=>"pre"===e,decodeEntities:function(e,t=!1){return Of||(Of=document.createElement("div")),t?(Of.innerHTML=``,Of.children[0].getAttribute("foo")):(Of.innerHTML=e,Of.textContent)},isBuiltInComponent:e=>Xs(e,"Transition")?xf:Xs(e,"TransitionGroup")?kf:void 0,getNamespace(e,t){let n=t?t.ns:0;if(t&&2===n)if("annotation-xml"===t.tag){if("svg"===e)return 1;t.props.some((e=>6===e.type&&"encoding"===e.name&&null!=e.value&&("text/html"===e.value.content||"application/xhtml+xml"===e.value.content)))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&"mglyph"!==e&&"malignmark"!==e&&(n=0);else t&&1===n&&("foreignObject"!==t.tag&&"desc"!==t.tag&&"title"!==t.tag||(n=0));if(0===n){if("svg"===e)return 1;if("math"===e)return 2}return n},getTextMode({tag:e,ns:t}){if(0===t){if("textarea"===e||"title"===e)return 1;if(Nf(e))return 2}return 0}},Tf=(e,t)=>{const n=f(e);return Ks(JSON.stringify(n),!1,t,3)};function Vf(e,t){return ts(e,t)}const Rf=o("passive,once,capture"),Lf=o("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),Af=o("left,right"),jf=o("onkeyup,onkeydown,onkeypress",!0),Bf=(e,t)=>Qs(e)&&"onclick"===e.content.toLowerCase()?Ks(t,!0):4!==e.type?Gs(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e;const If=(e,t)=>{1!==e.type||0!==e.tagType||"script"!==e.tag&&"style"!==e.tag||(t.onError(Vf(61,e.loc)),t.removeNode())},Mf=[e=>{1===e.type&&e.props.forEach(((t,n)=>{6===t.type&&"style"===t.name&&t.value&&(e.props[n]={type:7,name:"bind",arg:Ks("style",!0,t.loc),exp:Tf(t.value.content,t.loc),modifiers:[],loc:t.loc})}))}],Ff={cloak:()=>({props:[]}),html:(e,t,n)=>{const{exp:r,loc:o}=e;return r||n.onError(Vf(51,o)),t.children.length&&(n.onError(Vf(52,o)),t.children.length=0),{props:[Ws(Ks("innerHTML",!0,o),r||Ks("",!0))]}},text:(e,t,n)=>{const{exp:r,loc:o}=e;return r||n.onError(Vf(53,o)),t.children.length&&(n.onError(Vf(54,o)),t.children.length=0),{props:[Ws(Ks("textContent",!0),r?ou(r,n)>0?r:Zs(n.helperString(Es),[r],o):Ks("",!0))]}},model:(e,t,n)=>{const r=af(e,t,n);if(!r.props.length||1===t.tagType)return r;e.arg&&n.onError(Vf(56,e.arg.loc));const{tag:o}=t,i=n.isCustomElement(o);if("input"===o||"textarea"===o||"select"===o||i){let a=yf,l=!1;if("input"===o||i){const r=fc(t,"type");if(r){if(7===r.type)a=wf;else if(r.value)switch(r.value.content){case"radio":a=mf;break;case"checkbox":a=gf;break;case"file":l=!0,n.onError(Vf(57,e.loc))}}else(function(e){return e.props.some((e=>!(7!==e.type||"bind"!==e.name||e.arg&&4===e.arg.type&&e.arg.isStatic)))})(t)&&(a=wf)}else"select"===o&&(a=bf);l||(r.needRuntime=n.helper(a))}else n.onError(Vf(55,e.loc));return r.props=r.props.filter((e=>!(4===e.key.type&&"modelValue"===e.key.content))),r},on:(e,t,n)=>Xu(e,t,n,(t=>{const{modifiers:r}=e;if(!r.length)return t;let{key:o,value:i}=t.props[0];const{keyModifiers:a,nonKeyModifiers:l,eventOptionModifiers:s}=((e,t,n,r)=>{const o=[],i=[],a=[];for(let r=0;r
{const{exp:r,loc:o}=e;return r||n.onError(Vf(59,o)),{props:[],needRuntime:n.helper(Ef)}}};const Df=Object.create(null);function Uf(e,t){if(!U(e)){if(!e.nodeType)return S;e=e.innerHTML}const n=e,o=Df[n];if(o)return o;if("#"===e[0]){const t=document.querySelector(e);0,e=t?t.innerHTML:""}const i=V({hoistStatic:!0,onError:void 0,onWarn:S},t);i.isCustomElement||"undefined"==typeof customElements||(i.isCustomElement=e=>!!customElements.get(e));const{code:a}=function(e,t={}){return vf(e,V({},Pf,t,{nodeTransforms:[If,...Mf,...t.nodeTransforms||[]],directiveTransforms:V({},Ff,t.directiveTransforms||{}),transformHoist:null}))}(e,i);const l=new Function("Vue",a)(r);return l._rc=!0,Df[n]=l}Qi(Uf)}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.m=t,e=[],r.O=(t,n,o,i)=>{if(!n){var a=1/0;for(u=0;u=i)&&Object.keys(r.O).every((e=>r.O[e](n[s])))?n.splice(s--,1):(l=!1,i0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,o,i]},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={260:0,143:0};r.O.j=t=>0===e[t];var t=(t,n)=>{var o,i,[a,l,s]=n,c=0;if(a.some((t=>0!==e[t]))){for(o in l)r.o(l,o)&&(r.m[o]=l[o]);if(s)var u=s(r)}for(t&&t(n);c r(500)));var o=r.O(void 0,[143],(()=>r(378)));o=r.O(o)})();
\ No newline at end of file
+(()=>{var e,t={514:(e,t,n)=>{"use strict";var r={};n.r(r),n.d(r,{BaseTransition:()=>Er,BaseTransitionPropsValidators:()=>Or,Comment:()=>Ri,EffectScope:()=>de,Fragment:()=>Ai,KeepAlive:()=>Br,ReactiveEffect:()=>Pe,Static:()=>Li,Suspense:()=>rr,Teleport:()=>Pi,Text:()=>ji,Transition:()=>Ys,TransitionGroup:()=>Ul,VueElement:()=>Al,assertNumber:()=>sn,callWithAsyncErrorHandling:()=>an,callWithErrorHandling:()=>ln,camelize:()=>F,capitalize:()=>D,cloneVNode:()=>es,compatUtils:()=>Vs,computed:()=>Rs,createApp:()=>ma,createBlock:()=>Hi,createCommentVNode:()=>rs,createElementBlock:()=>Vi,createElementVNode:()=>Ji,createHydrationRenderer:()=>yi,createPropsRestProxy:()=>Ao,createRenderer:()=>mi,createSSRApp:()=>ya,createSlots:()=>so,createStaticVNode:()=>ns,createTextVNode:()=>ts,createVNode:()=>Qi,customRef:()=>Qt,defineAsyncComponent:()=>Fr,defineComponent:()=>Lr,defineCustomElement:()=>Cl,defineEmits:()=>mo,defineExpose:()=>yo,defineModel:()=>_o,defineOptions:()=>bo,defineProps:()=>go,defineSSRCustomElement:()=>Pl,defineSlots:()=>wo,devtools:()=>Pn,effect:()=>Ae,effectScope:()=>he,getCurrentInstance:()=>ds,getCurrentScope:()=>ge,getTransitionRawChildren:()=>Rr,guardReactiveProps:()=>Xi,h:()=>Ls,handleError:()=>un,hasInjectionContext:()=>Jo,hydrate:()=>ga,initCustomFormatter:()=>Ns,initDirectivesForSSR:()=>_a,inject:()=>Yo,isMemoSame:()=>Ds,isProxy:()=>Lt,isReactive:()=>At,isReadonly:()=>jt,isRef:()=>Ut,isRuntimeOnly:()=>Es,isShallow:()=>Rt,isVNode:()=>zi,markRaw:()=>Ft,mergeDefaults:()=>Po,mergeModels:()=>To,mergeProps:()=>ls,nextTick:()=>bn,normalizeClass:()=>ee,normalizeProps:()=>te,normalizeStyle:()=>Y,onActivated:()=>$r,onBeforeMount:()=>Yr,onBeforeUnmount:()=>Xr,onBeforeUpdate:()=>Qr,onDeactivated:()=>Vr,onErrorCaptured:()=>oo,onMounted:()=>Jr,onRenderTracked:()=>ro,onRenderTriggered:()=>no,onScopeDispose:()=>me,onServerPrefetch:()=>to,onUnmounted:()=>eo,onUpdated:()=>Zr,openBlock:()=>Ni,popScopeId:()=>Bn,provide:()=>Go,proxyRefs:()=>Yt,pushScopeId:()=>Dn,queuePostFlushCb:()=>xn,reactive:()=>kt,readonly:()=>Ct,ref:()=>$t,registerRuntimeCompiler:()=>ks,render:()=>va,renderList:()=>io,renderSlot:()=>lo,resolveComponent:()=>Jn,resolveDirective:()=>Xn,resolveDynamicComponent:()=>Zn,resolveFilter:()=>$s,resolveTransitionHooks:()=>Pr,setBlockTracking:()=>Ui,setDevtoolsHook:()=>jn,setTransitionHooks:()=>jr,shallowReactive:()=>Et,shallowReadonly:()=>Pt,shallowRef:()=>Vt,ssrContextKey:()=>Is,ssrUtils:()=>Us,stop:()=>je,toDisplayString:()=>ce,toHandlerKey:()=>B,toHandlers:()=>uo,toRaw:()=>It,toRef:()=>tn,toRefs:()=>Zt,toValue:()=>Kt,transformVNodeArgs:()=>Wi,triggerRef:()=>qt,unref:()=>Wt,useAttrs:()=>Oo,useCssModule:()=>jl,useCssVars:()=>Rl,useModel:()=>ko,useSSRContext:()=>Fs,useSlots:()=>So,useTransitionState:()=>xr,vModelCheckbox:()=>Yl,vModelDynamic:()=>na,vModelRadio:()=>Ql,vModelSelect:()=>Zl,vModelText:()=>Gl,vShow:()=>pl,version:()=>Bs,warn:()=>on,watch:()=>dr,watchEffect:()=>ur,watchPostEffect:()=>cr,watchSyncEffect:()=>fr,withAsyncContext:()=>jo,withCtx:()=>$n,withDefaults:()=>xo,withDirectives:()=>yr,withKeys:()=>ua,withMemo:()=>Ms,withModifiers:()=>la,withScopeId:()=>Un});var o={};function i(e,t){const n=Object.create(null),r=e.split(",");for(let e=0;e!!n[e.toLowerCase()]:e=>!!n[e]}n.r(o),n.d(o,{hasBrowserEnv:()=>dh,hasStandardBrowserEnv:()=>hh,hasStandardBrowserWebWorkerEnv:()=>gh});const s={},l=[],a=()=>{},u=()=>!1,c=/^on[^a-z]/,f=e=>c.test(e),p=e=>e.startsWith("onUpdate:"),d=Object.assign,h=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},v=Object.prototype.hasOwnProperty,g=(e,t)=>v.call(e,t),m=Array.isArray,y=e=>"[object Map]"===C(e),b=e=>"[object Set]"===C(e),w=e=>"[object Date]"===C(e),_=e=>"function"==typeof e,x=e=>"string"==typeof e,S=e=>"symbol"==typeof e,O=e=>null!==e&&"object"==typeof e,k=e=>(O(e)||_(e))&&_(e.then)&&_(e.catch),E=Object.prototype.toString,C=e=>E.call(e),P=e=>C(e).slice(8,-1),T=e=>"[object Object]"===C(e),A=e=>x(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,j=i(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),R=i("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),L=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},I=/-(\w)/g,F=L((e=>e.replace(I,((e,t)=>t?t.toUpperCase():"")))),N=/\B([A-Z])/g,M=L((e=>e.replace(N,"-$1").toLowerCase())),D=L((e=>e.charAt(0).toUpperCase()+e.slice(1))),B=L((e=>e?`on${D(e)}`:"")),U=(e,t)=>!Object.is(e,t),$=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},H=e=>{const t=parseFloat(e);return isNaN(t)?e:t},z=e=>{const t=x(e)?Number(e):NaN;return isNaN(t)?e:t};let q;const W=()=>q||(q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==n.g?n.g:{});const K={1:"TEXT",2:"CLASS",4:"STYLE",8:"PROPS",16:"FULL_PROPS",32:"HYDRATE_EVENTS",64:"STABLE_FRAGMENT",128:"KEYED_FRAGMENT",256:"UNKEYED_FRAGMENT",512:"NEED_PATCH",1024:"DYNAMIC_SLOTS",2048:"DEV_ROOT_FRAGMENT",[-1]:"HOISTED",[-2]:"BAIL"},G=i("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console");function Y(e){if(m(e)){const t={};for(let n=0;n{if(e){const n=e.split(Q);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function ee(e){let t="";if(x(e))t=e;else if(m(e))for(let n=0;nae(e,t)))}const ce=e=>x(e)?e:null==e?"":m(e)||O(e)&&(e.toString===E||!_(e.toString))?JSON.stringify(e,fe,2):String(e),fe=(e,t)=>t&&t.__v_isRef?fe(e,t.value):y(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:b(t)?{[`Set(${t.size})`]:[...t.values()]}:!O(t)||m(t)||T(t)?t:String(t);let pe;class de{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=pe,!e&&pe&&(this.index=(pe.scopes||(pe.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=pe;try{return pe=this,e()}finally{pe=t}}else 0}on(){pe=this}off(){pe=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t{const t=new Set(e);return t.w=0,t.n=0,t},be=e=>(e.w&Se)>0,we=e=>(e.n&Se)>0,_e=new WeakMap;let xe=0,Se=1;const Oe=30;let ke;const Ee=Symbol(""),Ce=Symbol("");class Pe{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],this.parent=void 0,ve(this,n)}run(){if(!this.active)return this.fn();let e=ke,t=Re;for(;e;){if(e===this)return;e=e.parent}try{return this.parent=ke,ke=this,Re=!0,Se=1<<++xe,xe<=Oe?(({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{("length"===n||!S(n)&&n>=e)&&l.push(t)}))}else switch(void 0!==n&&l.push(s.get(n)),t){case"add":m(e)?A(n)&&l.push(s.get("length")):(l.push(s.get(Ee)),y(e)&&l.push(s.get(Ce)));break;case"delete":m(e)||(l.push(s.get(Ee)),y(e)&&l.push(s.get(Ce)));break;case"set":y(e)&&l.push(s.get(Ee))}if(1===l.length)l[0]&&Be(l[0]);else{const e=[];for(const t of l)t&&e.push(...t);Be(ye(e))}}function Be(e,t){const n=m(e)?e:[...e];for(const e of n)e.computed&&Ue(e,t);for(const e of n)e.computed||Ue(e,t)}function Ue(e,t){(e!==ke||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const $e=i("__proto__,__v_isRef,__isVue"),Ve=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(S)),He=ze();function ze(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=It(this);for(let e=0,t=this.length;e{e[t]=function(...e){Ie();const n=It(this)[t].apply(this,e);return Fe(),n}})),e}function qe(e){const t=It(this);return Ne(t,0,e),t.hasOwnProperty(e)}class We{constructor(e=!1,t=!1){this._isReadonly=e,this._shallow=t}get(e,t,n){const r=this._isReadonly,o=this._shallow;if("__v_isReactive"===t)return!r;if("__v_isReadonly"===t)return r;if("__v_isShallow"===t)return o;if("__v_raw"===t&&n===(r?o?Ot:St:o?xt:_t).get(e))return e;const i=m(e);if(!r){if(i&&g(He,t))return Reflect.get(He,t,n);if("hasOwnProperty"===t)return qe}const s=Reflect.get(e,t,n);return(S(t)?Ve.has(t):$e(t))?s:(r||Ne(e,0,t),o?s:Ut(s)?i&&A(t)?s:s.value:O(s)?r?Ct(s):kt(s):s)}}class Ke extends We{constructor(e=!1){super(!1,e)}set(e,t,n,r){let o=e[t];if(jt(o)&&Ut(o)&&!Ut(n))return!1;if(!this._shallow&&(Rt(n)||jt(n)||(o=It(o),n=It(n)),!m(e)&&Ut(o)&&!Ut(n)))return o.value=n,!0;const i=m(e)&&A(t)?Number(t)e,et=e=>Reflect.getPrototypeOf(e);function tt(e,t,n=!1,r=!1){const o=It(e=e.__v_raw),i=It(t);n||(U(t,i)&&Ne(o,0,t),Ne(o,0,i));const{has:s}=et(o),l=r?Xe:n?Mt:Nt;return s.call(o,t)?l(e.get(t)):s.call(o,i)?l(e.get(i)):void(e!==o&&e.get(t))}function nt(e,t=!1){const n=this.__v_raw,r=It(n),o=It(e);return t||(U(e,o)&&Ne(r,0,e),Ne(r,0,o)),e===o?n.has(e):n.has(e)||n.has(o)}function rt(e,t=!1){return e=e.__v_raw,!t&&Ne(It(e),0,Ee),Reflect.get(e,"size",e)}function ot(e){e=It(e);const t=It(this);return et(t).has.call(t,e)||(t.add(e),De(t,"add",e,e)),this}function it(e,t){t=It(t);const n=It(this),{has:r,get:o}=et(n);let i=r.call(n,e);i||(e=It(e),i=r.call(n,e));const s=o.call(n,e);return n.set(e,t),i?U(t,s)&&De(n,"set",e,t):De(n,"add",e,t),this}function st(e){const t=It(this),{has:n,get:r}=et(t);let o=n.call(t,e);o||(e=It(e),o=n.call(t,e));r&&r.call(t,e);const i=t.delete(e);return o&&De(t,"delete",e,void 0),i}function lt(){const e=It(this),t=0!==e.size,n=e.clear();return t&&De(e,"clear",void 0,void 0),n}function at(e,t){return function(n,r){const o=this,i=o.__v_raw,s=It(i),l=t?Xe:e?Mt:Nt;return!e&&Ne(s,0,Ee),i.forEach(((e,t)=>n.call(r,l(e),l(t),o)))}}function ut(e,t,n){return function(...r){const o=this.__v_raw,i=It(o),s=y(i),l="entries"===e||e===Symbol.iterator&&s,a="keys"===e&&s,u=o[e](...r),c=n?Xe:t?Mt:Nt;return!t&&Ne(i,0,a?Ce:Ee),{next(){const{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:l?[c(e[0]),c(e[1])]:c(e),done:t}},[Symbol.iterator](){return this}}}}function ct(e){return function(...t){return"delete"!==e&&this}}function ft(){const e={get(e){return tt(this,e)},get size(){return rt(this)},has:nt,add:ot,set:it,delete:st,clear:lt,forEach:at(!1,!1)},t={get(e){return tt(this,e,!1,!0)},get size(){return rt(this)},has:nt,add:ot,set:it,delete:st,clear:lt,forEach:at(!1,!0)},n={get(e){return tt(this,e,!0)},get size(){return rt(this,!0)},has(e){return nt.call(this,e,!0)},add:ct("add"),set:ct("set"),delete:ct("delete"),clear:ct("clear"),forEach:at(!0,!1)},r={get(e){return tt(this,e,!0,!0)},get size(){return rt(this,!0)},has(e){return nt.call(this,e,!0)},add:ct("add"),set:ct("set"),delete:ct("delete"),clear:ct("clear"),forEach:at(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((o=>{e[o]=ut(o,!1,!1),n[o]=ut(o,!0,!1),t[o]=ut(o,!1,!0),r[o]=ut(o,!0,!0)})),[e,n,t,r]}const[pt,dt,ht,vt]=ft();function gt(e,t){const n=t?e?vt:ht:e?dt:pt;return(t,r,o)=>"__v_isReactive"===r?!e:"__v_isReadonly"===r?e:"__v_raw"===r?t:Reflect.get(g(n,r)&&r in t?n:t,r,o)}const mt={get:gt(!1,!1)},yt={get:gt(!1,!0)},bt={get:gt(!0,!1)},wt={get:gt(!0,!0)};const _t=new WeakMap,xt=new WeakMap,St=new WeakMap,Ot=new WeakMap;function kt(e){return jt(e)?e:Tt(e,!1,Ye,mt,_t)}function Et(e){return Tt(e,!1,Qe,yt,xt)}function Ct(e){return Tt(e,!0,Je,bt,St)}function Pt(e){return Tt(e,!0,Ze,wt,Ot)}function Tt(e,t,n,r,o){if(!O(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const s=function(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}(P(e))}(e);if(0===s)return e;const l=new Proxy(e,2===s?r:n);return o.set(e,l),l}function At(e){return jt(e)?At(e.__v_raw):!(!e||!e.__v_isReactive)}function jt(e){return!(!e||!e.__v_isReadonly)}function Rt(e){return!(!e||!e.__v_isShallow)}function Lt(e){return At(e)||jt(e)}function It(e){const t=e&&e.__v_raw;return t?It(t):e}function Ft(e){return V(e,"__v_skip",!0),e}const Nt=e=>O(e)?kt(e):e,Mt=e=>O(e)?Ct(e):e;function Dt(e){Re&&ke&&Me((e=It(e)).dep||(e.dep=ye()))}function Bt(e,t){const n=(e=It(e)).dep;n&&Be(n)}function Ut(e){return!(!e||!0!==e.__v_isRef)}function $t(e){return Ht(e,!1)}function Vt(e){return Ht(e,!0)}function Ht(e,t){return Ut(e)?e:new zt(e,t)}class zt{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:It(e),this._value=t?e:Nt(e)}get value(){return Dt(this),this._value}set value(e){const t=this.__v_isShallow||Rt(e)||jt(e);e=t?e:It(e),U(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Nt(e),Bt(this))}}function qt(e){Bt(e)}function Wt(e){return Ut(e)?e.value:e}function Kt(e){return _(e)?e():Wt(e)}const Gt={get:(e,t,n)=>Wt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ut(o)&&!Ut(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function Yt(e){return At(e)?e:new Proxy(e,Gt)}class Jt{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:t,set:n}=e((()=>Dt(this)),(()=>Bt(this)));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}function Qt(e){return new Jt(e)}function Zt(e){const t=m(e)?new Array(e.length):{};for(const n in e)t[n]=nn(e,n);return t}class Xt{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0}get value(){const e=this._object[this._key];return void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return function(e,t){var n;return null==(n=_e.get(e))?void 0:n.get(t)}(It(this._object),this._key)}}class en{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function tn(e,t,n){return Ut(e)?e:_(e)?new en(e):O(e)&&arguments.length>1?nn(e,t,n):$t(e)}function nn(e,t,n){const r=e[t];return Ut(r)?r:new Xt(e,t,n)}class rn{constructor(e,t,n,r){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new Pe(e,(()=>{this._dirty||(this._dirty=!0,Bt(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=n}get value(){const e=It(this);return Dt(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}function on(e,...t){}function sn(e,t){}function ln(e,t,n,r){let o;try{o=r?e(...r):e()}catch(e){un(e,t,n)}return o}function an(e,t,n,r){if(_(e)){const o=ln(e,t,n,r);return o&&k(o)&&o.catch((e=>{un(e,t,n)})),o}const o=[];for(let i=0;i>>1,o=pn[r],i=kn(o);ikn(e)-kn(t))),gn=0;gnnull==e.id?1/0:e.id,En=(e,t)=>{const n=kn(e)-kn(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Cn(e){fn=!1,cn=!0,pn.sort(En);try{for(dn=0;dnPn.emit(e,...t))),Tn=[];else if("undefined"!=typeof window&&window.HTMLElement&&!(null==(r=null==(n=window.navigator)?void 0:n.userAgent)?void 0:r.includes("jsdom"))){(t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push((e=>{jn(e,t)})),setTimeout((()=>{Pn||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,An=!0,Tn=[])}),3e3)}else An=!0,Tn=[]}function Rn(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||s;let o=n;const i=t.startsWith("update:"),l=i&&t.slice(7);if(l&&l in r){const e=`${"modelValue"===l?"model":l}Modifiers`,{number:t,trim:i}=r[e]||s;i&&(o=n.map((e=>x(e)?e.trim():e))),t&&(o=n.map(H))}let a;let u=r[a=B(t)]||r[a=B(F(t))];!u&&i&&(u=r[a=B(M(t))]),u&&an(u,e,6,o);const c=r[a+"Once"];if(c){if(e.emitted){if(e.emitted[a])return}else e.emitted={};e.emitted[a]=!0,an(c,e,6,o)}}function Ln(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(void 0!==o)return o;const i=e.emits;let s={},l=!1;if(!_(e)){const r=e=>{const n=Ln(e,t,!0);n&&(l=!0,d(s,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return i||l?(m(i)?i.forEach((e=>s[e]=null)):d(s,i),O(e)&&r.set(e,s),s):(O(e)&&r.set(e,null),null)}function In(e,t){return!(!e||!f(t))&&(t=t.slice(2).replace(/Once$/,""),g(e,t[0].toLowerCase()+t.slice(1))||g(e,M(t))||g(e,t))}let Fn=null,Nn=null;function Mn(e){const t=Fn;return Fn=e,Nn=e&&e.type.__scopeId||null,t}function Dn(e){Nn=e}function Bn(){Nn=null}const Un=e=>$n;function $n(e,t=Fn,n){if(!t)return e;if(e._n)return e;const r=(...n)=>{r._d&&Ui(-1);const o=Mn(t);let i;try{i=e(...n)}finally{Mn(o),r._d&&Ui(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Vn(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:i,propsOptions:[s],slots:l,attrs:a,emit:u,render:c,renderCache:f,data:d,setupState:h,ctx:v,inheritAttrs:g}=e;let m,y;const b=Mn(e);try{if(4&n.shapeFlag){const e=o||r;m=os(c.call(e,e,f,i,h,d,v)),y=a}else{const e=t;0,m=os(e.length>1?e(i,{attrs:a,slots:l,emit:u}):e(i,null)),y=t.props?a:zn(a)}}catch(t){Ii.length=0,un(t,e,1),m=Qi(Ri)}let w=m;if(y&&!1!==g){const e=Object.keys(y),{shapeFlag:t}=w;e.length&&7&t&&(s&&e.some(p)&&(y=qn(y,s)),w=es(w,y))}return n.dirs&&(w=es(w),w.dirs=w.dirs?w.dirs.concat(n.dirs):n.dirs),n.transition&&(w.transition=n.transition),m=w,Mn(b),m}function Hn(e){let t;for(let n=0;n{let t;for(const n in e)("class"===n||"style"===n||f(n))&&((t||(t={}))[n]=e[n]);return t},qn=(e,t)=>{const n={};for(const r in e)p(r)&&r.slice(9)in t||(n[r]=e[r]);return n};function Wn(e,t,n){const r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let o=0;oe.__isSuspense,rr={name:"Suspense",__isSuspense:!0,process(e,t,n,r,o,i,s,l,a,u){null==e?function(e,t,n,r,o,i,s,l,a){const{p:u,o:{createElement:c}}=a,f=c("div"),p=e.suspense=ir(e,o,r,t,f,n,i,s,l,a);u(null,p.pendingBranch=e.ssContent,f,null,r,p,i,s),p.deps>0?(or(e,"onPending"),or(e,"onFallback"),u(null,e.ssFallback,t,n,r,null,i,s),ar(p,e.ssFallback)):p.resolve(!1,!0)}(t,n,r,o,i,s,l,a,u):function(e,t,n,r,o,i,s,l,{p:a,um:u,o:{createElement:c}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const p=t.ssContent,d=t.ssFallback,{activeBranch:h,pendingBranch:v,isInFallback:g,isHydrating:m}=f;if(v)f.pendingBranch=p,qi(p,v)?(a(v,p,f.hiddenContainer,null,o,f,i,s,l),f.deps<=0?f.resolve():g&&(a(h,d,n,r,o,null,i,s,l),ar(f,d))):(f.pendingId++,m?(f.isHydrating=!1,f.activeBranch=v):u(v,o,f),f.deps=0,f.effects.length=0,f.hiddenContainer=c("div"),g?(a(null,p,f.hiddenContainer,null,o,f,i,s,l),f.deps<=0?f.resolve():(a(h,d,n,r,o,null,i,s,l),ar(f,d))):h&&qi(p,h)?(a(h,p,n,r,o,f,i,s,l),f.resolve(!0)):(a(null,p,f.hiddenContainer,null,o,f,i,s,l),f.deps<=0&&f.resolve()));else if(h&&qi(p,h))a(h,p,n,r,o,f,i,s,l),ar(f,p);else if(or(t,"onPending"),f.pendingBranch=p,f.pendingId++,a(null,p,f.hiddenContainer,null,o,f,i,s,l),f.deps<=0)f.resolve();else{const{timeout:e,pendingId:t}=f;e>0?setTimeout((()=>{f.pendingId===t&&f.fallback(d)}),e):0===e&&f.fallback(d)}}(e,t,n,r,o,s,l,a,u)},hydrate:function(e,t,n,r,o,i,s,l,a){const u=t.suspense=ir(t,r,n,e.parentNode,document.createElement("div"),null,o,i,s,l,!0),c=a(e,u.pendingBranch=t.ssContent,n,u,i,s);0===u.deps&&u.resolve(!1,!0);return c},create:ir,normalize:function(e){const{shapeFlag:t,children:n}=e,r=32&t;e.ssContent=sr(r?n.default:n),e.ssFallback=r?sr(n.fallback):Qi(Ri)}};function or(e,t){const n=e.props&&e.props[t];_(n)&&n()}function ir(e,t,n,r,o,i,s,l,a,u,c=!1){const{p:f,m:p,um:d,n:h,o:{parentNode:v,remove:g}}=u;let m;const y=function(e){var t;return null!=(null==(t=e.props)?void 0:t.suspensible)&&!1!==e.props.suspensible}(e);y&&(null==t?void 0:t.pendingBranch)&&(m=t.pendingId,t.deps++);const b=e.props?z(e.props.timeout):void 0;const w={vnode:e,parent:t,parentComponent:n,isSVG:s,container:r,hiddenContainer:o,anchor:i,deps:0,pendingId:0,timeout:"number"==typeof b?b:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:c,isUnmounted:!1,effects:[],resolve(e=!1,n=!1){const{vnode:r,activeBranch:o,pendingBranch:i,pendingId:s,effects:l,parentComponent:a,container:u}=w;let c=!1;if(w.isHydrating)w.isHydrating=!1;else if(!e){c=o&&i.transition&&"out-in"===i.transition.mode,c&&(o.transition.afterLeave=()=>{s===w.pendingId&&(p(i,u,e,0),xn(l))});let{anchor:e}=w;o&&(e=h(o),d(o,a,w,!0)),c||p(i,u,e,0)}ar(w,i),w.pendingBranch=null,w.isInFallback=!1;let f=w.parent,v=!1;for(;f;){if(f.pendingBranch){f.effects.push(...l),v=!0;break}f=f.parent}v||c||xn(l),w.effects=[],y&&t&&t.pendingBranch&&m===t.pendingId&&(t.deps--,0!==t.deps||n||t.resolve()),or(r,"onResolve")},fallback(e){if(!w.pendingBranch)return;const{vnode:t,activeBranch:n,parentComponent:r,container:o,isSVG:i}=w;or(t,"onFallback");const s=h(n),u=()=>{w.isInFallback&&(f(null,e,o,s,r,null,i,l,a),ar(w,e))},c=e.transition&&"out-in"===e.transition.mode;c&&(n.transition.afterLeave=u),w.isInFallback=!0,d(n,r,null,!0),c||u()},move(e,t,n){w.activeBranch&&p(w.activeBranch,e,t,n),w.container=e},next:()=>w.activeBranch&&h(w.activeBranch),registerDep(e,t){const n=!!w.pendingBranch;n&&w.deps++;const r=e.vnode.el;e.asyncDep.catch((t=>{un(t,e,0)})).then((o=>{if(e.isUnmounted||w.isUnmounted||w.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:i}=e;Os(e,o,!1),r&&(i.el=r);const l=!r&&e.subTree.el;t(e,i,v(r||e.subTree.el),r?null:h(e.subTree),w,s,a),l&&g(l),Kn(e,i.el),n&&0==--w.deps&&w.resolve()}))},unmount(e,t){w.isUnmounted=!0,w.activeBranch&&d(w.activeBranch,n,e,t),w.pendingBranch&&d(w.pendingBranch,n,e,t)}};return w}function sr(e){let t;if(_(e)){const n=Bi&&e._c;n&&(e._d=!1,Ni()),e=e(),n&&(e._d=!0,t=Fi,Mi())}if(m(e)){const t=Hn(e);0,e=t}return e=os(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter((t=>t!==e))),e}function lr(e,t){t&&t.pendingBranch?m(e)?t.effects.push(...e):t.effects.push(e):xn(e)}function ar(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e,o=n.el=t.el;r&&r.subTree===n&&(r.vnode.el=o,Kn(r,o))}function ur(e,t){return hr(e,null,t)}function cr(e,t){return hr(e,null,{flush:"post"})}function fr(e,t){return hr(e,null,{flush:"sync"})}const pr={};function dr(e,t,n){return hr(e,t,n)}function hr(e,t,{immediate:n,deep:r,flush:o,onTrack:i,onTrigger:l}=s){var u;const c=ge()===(null==(u=ps)?void 0:u.scope)?ps:null;let f,p,d=!1,v=!1;if(Ut(e)?(f=()=>e.value,d=Rt(e)):At(e)?(f=()=>e,r=!0):m(e)?(v=!0,d=e.some((e=>At(e)||Rt(e))),f=()=>e.map((e=>Ut(e)?e.value:At(e)?mr(e):_(e)?ln(e,c,2):void 0))):f=_(e)?t?()=>ln(e,c,2):()=>{if(!c||!c.isUnmounted)return p&&p(),an(e,c,3,[y])}:a,t&&r){const e=f;f=()=>mr(e())}let g,y=e=>{p=S.onStop=()=>{ln(e,c,4)}};if(xs){if(y=a,t?n&&an(t,c,3,[f(),v?[]:void 0,y]):f(),"sync"!==o)return a;{const e=Fs();g=e.__watcherHandles||(e.__watcherHandles=[])}}let b=v?new Array(e.length).fill(pr):pr;const w=()=>{if(S.active)if(t){const e=S.run();(r||d||(v?e.some(((e,t)=>U(e,b[t]))):U(e,b)))&&(p&&p(),an(t,c,3,[e,b===pr?void 0:v&&b[0]===pr?[]:b,y]),b=e)}else S.run()};let x;w.allowRecurse=!!t,"sync"===o?x=w:"post"===o?x=()=>gi(w,c&&c.suspense):(w.pre=!0,c&&(w.id=c.uid),x=()=>wn(w));const S=new Pe(f,x);t?n?w():b=S.run():"post"===o?gi(S.run.bind(S),c&&c.suspense):S.run();const O=()=>{S.stop(),c&&c.scope&&h(c.scope.effects,S)};return g&&g.push(O),O}function vr(e,t,n){const r=this.proxy,o=x(e)?e.includes(".")?gr(r,e):()=>r[e]:e.bind(r,r);let i;_(t)?i=t:(i=t.handler,n=t);const s=ps;ms(this);const l=hr(o,i.bind(r),n);return s?ms(s):ys(),l}function gr(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e{mr(e,t)}));else if(T(e))for(const n in e)mr(e[n],t);return e}function yr(e,t){const n=Fn;if(null===n)return e;const r=Ts(n)||n.proxy,o=e.dirs||(e.dirs=[]);for(let e=0;e{e.isMounted=!0})),Xr((()=>{e.isUnmounting=!0})),e}const Sr=[Function,Array],Or={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Sr,onEnter:Sr,onAfterEnter:Sr,onEnterCancelled:Sr,onBeforeLeave:Sr,onLeave:Sr,onAfterLeave:Sr,onLeaveCancelled:Sr,onBeforeAppear:Sr,onAppear:Sr,onAfterAppear:Sr,onAppearCancelled:Sr},kr={name:"BaseTransition",props:Or,setup(e,{slots:t}){const n=ds(),r=xr();let o;return()=>{const i=t.default&&Rr(t.default(),!0);if(!i||!i.length)return;let s=i[0];if(i.length>1){let e=!1;for(const t of i)if(t.type!==Ri){0,s=t,e=!0;break}}const l=It(e),{mode:a}=l;if(r.isLeaving)return Tr(s);const u=Ar(s);if(!u)return Tr(s);const c=Pr(u,l,r,n);jr(u,c);const f=n.subTree,p=f&&Ar(f);let d=!1;const{getTransitionKey:h}=u.type;if(h){const e=h();void 0===o?o=e:e!==o&&(o=e,d=!0)}if(p&&p.type!==Ri&&(!qi(u,p)||d)){const e=Pr(p,l,r,n);if(jr(p,e),"out-in"===a)return r.isLeaving=!0,e.afterLeave=()=>{r.isLeaving=!1,!1!==n.update.active&&n.update()},Tr(s);"in-out"===a&&u.type!==Ri&&(e.delayLeave=(e,t,n)=>{Cr(r,p)[String(p.key)]=p,e[wr]=()=>{t(),e[wr]=void 0,delete c.delayedLeave},c.delayedLeave=n})}return s}}},Er=kr;function Cr(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Pr(e,t,n,r){const{appear:o,mode:i,persisted:s=!1,onBeforeEnter:l,onEnter:a,onAfterEnter:u,onEnterCancelled:c,onBeforeLeave:f,onLeave:p,onAfterLeave:d,onLeaveCancelled:h,onBeforeAppear:v,onAppear:g,onAfterAppear:y,onAppearCancelled:b}=t,w=String(e.key),_=Cr(n,e),x=(e,t)=>{e&&an(e,r,9,t)},S=(e,t)=>{const n=t[1];x(e,t),m(e)?e.every((e=>e.length<=1))&&n():e.length<=1&&n()},O={mode:i,persisted:s,beforeEnter(t){let r=l;if(!n.isMounted){if(!o)return;r=v||l}t[wr]&&t[wr](!0);const i=_[w];i&&qi(e,i)&&i.el[wr]&&i.el[wr](),x(r,[t])},enter(e){let t=a,r=u,i=c;if(!n.isMounted){if(!o)return;t=g||a,r=y||u,i=b||c}let s=!1;const l=e[_r]=t=>{s||(s=!0,x(t?i:r,[e]),O.delayedLeave&&O.delayedLeave(),e[_r]=void 0)};t?S(t,[e,l]):l()},leave(t,r){const o=String(e.key);if(t[_r]&&t[_r](!0),n.isUnmounting)return r();x(f,[t]);let i=!1;const s=t[wr]=n=>{i||(i=!0,r(),x(n?h:d,[t]),t[wr]=void 0,_[o]===e&&delete _[o])};_[o]=e,p?S(p,[t,s]):s()},clone:e=>Pr(e,t,n,r)};return O}function Tr(e){if(Mr(e))return(e=es(e)).children=null,e}function Ar(e){return Mr(e)?e.children?e.children[0]:void 0:e}function jr(e,t){6&e.shapeFlag&&e.component?jr(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Rr(e,t=!1,n){let r=[],o=0;for(let i=0;i1)for(let e=0;ed({name:e.name},t,{setup:e}))():e}const Ir=e=>!!e.type.__asyncLoader;function Fr(e){_(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:i,suspensible:s=!0,onError:l}=e;let a,u=null,c=0;const f=()=>{let e;return u||(e=u=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{l(e,(()=>t((c++,u=null,f()))),(()=>n(e)),c+1)}));throw e})).then((t=>e!==u&&u?u:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),a=t,t))))};return Lr({name:"AsyncComponentWrapper",__asyncLoader:f,get __asyncResolved(){return a},setup(){const e=ps;if(a)return()=>Nr(a,e);const t=t=>{u=null,un(t,e,13,!r)};if(s&&e.suspense||xs)return f().then((t=>()=>Nr(t,e))).catch((e=>(t(e),()=>r?Qi(r,{error:e}):null)));const l=$t(!1),c=$t(),p=$t(!!o);return o&&setTimeout((()=>{p.value=!1}),o),null!=i&&setTimeout((()=>{if(!l.value&&!c.value){const e=new Error(`Async component timed out after ${i}ms.`);t(e),c.value=e}}),i),f().then((()=>{l.value=!0,e.parent&&Mr(e.parent.vnode)&&wn(e.parent.update)})).catch((e=>{t(e),c.value=e})),()=>l.value&&a?Nr(a,e):c.value&&r?Qi(r,{error:c.value}):n&&!p.value?Qi(n):void 0}})}function Nr(e,t){const{ref:n,props:r,children:o,ce:i}=t.vnode,s=Qi(e,r,o);return s.ref=n,s.ce=i,delete t.vnode.ce,s}const Mr=e=>e.type.__isKeepAlive,Dr={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=ds(),r=n.ctx;if(!r.renderer)return()=>{const e=t.default&&t.default();return e&&1===e.length?e[0]:e};const o=new Map,i=new Set;let s=null;const l=n.suspense,{renderer:{p:a,m:u,um:c,o:{createElement:f}}}=r,p=f("div");function d(e){qr(e),c(e,n,l,!0)}function h(e){o.forEach(((t,n)=>{const r=As(t.type);!r||e&&e(r)||v(n)}))}function v(e){const t=o.get(e);s&&qi(t,s)?s&&qr(s):d(t),o.delete(e),i.delete(e)}r.activate=(e,t,n,r,o)=>{const i=e.component;u(e,t,n,0,l),a(i.vnode,e,t,n,i,l,r,e.slotScopeIds,o),gi((()=>{i.isDeactivated=!1,i.a&&$(i.a);const t=e.props&&e.props.onVnodeMounted;t&&as(t,i.parent,e)}),l)},r.deactivate=e=>{const t=e.component;u(e,p,null,1,l),gi((()=>{t.da&&$(t.da);const n=e.props&&e.props.onVnodeUnmounted;n&&as(n,t.parent,e),t.isDeactivated=!0}),l)},dr((()=>[e.include,e.exclude]),(([e,t])=>{e&&h((t=>Ur(e,t))),t&&h((e=>!Ur(t,e)))}),{flush:"post",deep:!0});let g=null;const m=()=>{null!=g&&o.set(g,Wr(n.subTree))};return Jr(m),Zr(m),Xr((()=>{o.forEach((e=>{const{subTree:t,suspense:r}=n,o=Wr(t);if(e.type!==o.type||e.key!==o.key)d(e);else{qr(o);const e=o.component.da;e&&gi(e,r)}}))})),()=>{if(g=null,!t.default)return null;const n=t.default(),r=n[0];if(n.length>1)return s=null,n;if(!(zi(r)&&(4&r.shapeFlag||128&r.shapeFlag)))return s=null,r;let l=Wr(r);const a=l.type,u=As(Ir(l)?l.type.__asyncResolved||{}:a),{include:c,exclude:f,max:p}=e;if(c&&(!u||!Ur(c,u))||f&&u&&Ur(f,u))return s=l,r;const d=null==l.key?a:l.key,h=o.get(d);return l.el&&(l=es(l),128&r.shapeFlag&&(r.ssContent=l)),g=d,h?(l.el=h.el,l.component=h.component,l.transition&&jr(l,l.transition),l.shapeFlag|=512,i.delete(d),i.add(d)):(i.add(d),p&&i.size>parseInt(p,10)&&v(i.values().next().value)),l.shapeFlag|=256,s=l,nr(r.type)?r:l}}},Br=Dr;function Ur(e,t){return m(e)?e.some((e=>Ur(e,t))):x(e)?e.split(",").includes(t):"[object RegExp]"===C(e)&&e.test(t)}function $r(e,t){Hr(e,"a",t)}function Vr(e,t){Hr(e,"da",t)}function Hr(e,t,n=ps){const r=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(Kr(t,r,n),n){let e=n.parent;for(;e&&e.parent;)Mr(e.parent.vnode)&&zr(r,t,n,e),e=e.parent}}function zr(e,t,n,r){const o=Kr(t,e,r,!0);eo((()=>{h(r[t],o)}),n)}function qr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function Wr(e){return 128&e.shapeFlag?e.ssContent:e}function Kr(e,t,n=ps,r=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;Ie(),ms(n);const o=an(t,n,e,r);return ys(),Fe(),o});return r?o.unshift(i):o.push(i),i}}const Gr=e=>(t,n=ps)=>(!xs||"sp"===e)&&Kr(e,((...e)=>t(...e)),n),Yr=Gr("bm"),Jr=Gr("m"),Qr=Gr("bu"),Zr=Gr("u"),Xr=Gr("bum"),eo=Gr("um"),to=Gr("sp"),no=Gr("rtg"),ro=Gr("rtc");function oo(e,t=ps){Kr("ec",e,t)}function io(e,t,n,r){let o;const i=n&&n[r];if(m(e)||x(e)){o=new Array(e.length);for(let n=0,r=e.length;nt(e,n,void 0,i&&i[n])));else{const n=Object.keys(e);o=new Array(n.length);for(let r=0,s=n.length;r{const t=r.fn(...e);return t&&(t.key=r.key),t}:r.fn)}return e}function lo(e,t,n={},r,o){if(Fn.isCE||Fn.parent&&Ir(Fn.parent)&&Fn.parent.isCE)return"default"!==t&&(n.name=t),Qi("slot",n,r&&r());let i=e[t];i&&i._c&&(i._d=!1),Ni();const s=i&&ao(i(n)),l=Hi(Ai,{key:n.key||s&&s.key||`_${t}`},s||(r?r():[]),s&&1===e._?64:-2);return!o&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),i&&i._c&&(i._d=!0),l}function ao(e){return e.some((e=>!zi(e)||e.type!==Ri&&!(e.type===Ai&&!ao(e.children))))?e:null}function uo(e,t){const n={};for(const r in e)n[t&&/[A-Z]/.test(r)?`on:${r}`:B(r)]=e[r];return n}const co=e=>e?bs(e)?Ts(e)||e.proxy:co(e.parent):null,fo=d(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>co(e.parent),$root:e=>co(e.root),$emit:e=>e.emit,$options:e=>No(e),$forceUpdate:e=>e.f||(e.f=()=>wn(e.update)),$nextTick:e=>e.n||(e.n=bn.bind(e.proxy)),$watch:e=>vr.bind(e)}),po=(e,t)=>e!==s&&!e.__isScriptSetup&&g(e,t),ho={get({_:e},t){const{ctx:n,setupState:r,data:o,props:i,accessCache:l,type:a,appContext:u}=e;let c;if("$"!==t[0]){const a=l[t];if(void 0!==a)switch(a){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(po(r,t))return l[t]=1,r[t];if(o!==s&&g(o,t))return l[t]=2,o[t];if((c=e.propsOptions[0])&&g(c,t))return l[t]=3,i[t];if(n!==s&&g(n,t))return l[t]=4,n[t];Ro&&(l[t]=0)}}const f=fo[t];let p,d;return f?("$attrs"===t&&Ne(e,0,t),f(e)):(p=a.__cssModules)&&(p=p[t])?p:n!==s&&g(n,t)?(l[t]=4,n[t]):(d=u.config.globalProperties,g(d,t)?d[t]:void 0)},set({_:e},t,n){const{data:r,setupState:o,ctx:i}=e;return po(o,t)?(o[t]=n,!0):r!==s&&g(r,t)?(r[t]=n,!0):!g(e.props,t)&&(("$"!==t[0]||!(t.slice(1)in e))&&(i[t]=n,!0))},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:i}},l){let a;return!!n[l]||e!==s&&g(e,l)||po(t,l)||(a=i[0])&&g(a,l)||g(r,l)||g(fo,l)||g(o.config.globalProperties,l)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:g(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};const vo=d({},ho,{get(e,t){if(t!==Symbol.unscopables)return ho.get(e,t,e)},has:(e,t)=>"_"!==t[0]&&!G(t)});function go(){return null}function mo(){return null}function yo(e){0}function bo(e){0}function wo(){return null}function _o(){0}function xo(e,t){return null}function So(){return Eo().slots}function Oo(){return Eo().attrs}function ko(e,t,n){const r=ds();if(n&&n.local){const n=$t(e[t]);return dr((()=>e[t]),(e=>n.value=e)),dr(n,(n=>{n!==e[t]&&r.emit(`update:${t}`,n)})),n}return{__v_isRef:!0,get value(){return e[t]},set value(e){r.emit(`update:${t}`,e)}}}function Eo(){const e=ds();return e.setupContext||(e.setupContext=Ps(e))}function Co(e){return m(e)?e.reduce(((e,t)=>(e[t]=null,e)),{}):e}function Po(e,t){const n=Co(e);for(const e in t){if(e.startsWith("__skip"))continue;let r=n[e];r?m(r)||_(r)?r=n[e]={type:r,default:t[e]}:r.default=t[e]:null===r&&(r=n[e]={default:t[e]}),r&&t[`__skip_${e}`]&&(r.skipFactory=!0)}return n}function To(e,t){return e&&t?m(e)&&m(t)?e.concat(t):d({},Co(e),Co(t)):e||t}function Ao(e,t){const n={};for(const r in e)t.includes(r)||Object.defineProperty(n,r,{enumerable:!0,get:()=>e[r]});return n}function jo(e){const t=ds();let n=e();return ys(),k(n)&&(n=n.catch((e=>{throw ms(t),e}))),[n,()=>ms(t)]}let Ro=!0;function Lo(e){const t=No(e),n=e.proxy,r=e.ctx;Ro=!1,t.beforeCreate&&Io(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:s,watch:l,provide:u,inject:c,created:f,beforeMount:p,mounted:d,beforeUpdate:h,updated:v,activated:g,deactivated:y,beforeDestroy:b,beforeUnmount:w,destroyed:x,unmounted:S,render:k,renderTracked:E,renderTriggered:C,errorCaptured:P,serverPrefetch:T,expose:A,inheritAttrs:j,components:R,directives:L,filters:I}=t;if(c&&function(e,t,n=a){m(e)&&(e=Uo(e));for(const n in e){const r=e[n];let o;o=O(r)?"default"in r?Yo(r.from||n,r.default,!0):Yo(r.from||n):Yo(r),Ut(o)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>o.value,set:e=>o.value=e}):t[n]=o}}(c,r,null),s)for(const e in s){const t=s[e];_(t)&&(r[e]=t.bind(n))}if(o){0;const t=o.call(n,n);0,O(t)&&(e.data=kt(t))}if(Ro=!0,i)for(const e in i){const t=i[e],o=_(t)?t.bind(n,n):_(t.get)?t.get.bind(n,n):a;0;const s=!_(t)&&_(t.set)?t.set.bind(n):a,l=Rs({get:o,set:s});Object.defineProperty(r,e,{enumerable:!0,configurable:!0,get:()=>l.value,set:e=>l.value=e})}if(l)for(const e in l)Fo(l[e],r,n,e);if(u){const e=_(u)?u.call(n):u;Reflect.ownKeys(e).forEach((t=>{Go(t,e[t])}))}function F(e,t){m(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(f&&Io(f,e,"c"),F(Yr,p),F(Jr,d),F(Qr,h),F(Zr,v),F($r,g),F(Vr,y),F(oo,P),F(ro,E),F(no,C),F(Xr,w),F(eo,S),F(to,T),m(A))if(A.length){const t=e.exposed||(e.exposed={});A.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});k&&e.render===a&&(e.render=k),null!=j&&(e.inheritAttrs=j),R&&(e.components=R),L&&(e.directives=L)}function Io(e,t,n){an(m(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function Fo(e,t,n,r){const o=r.includes(".")?gr(n,r):()=>n[r];if(x(e)){const n=t[e];_(n)&&dr(o,n)}else if(_(e))dr(o,e.bind(n));else if(O(e))if(m(e))e.forEach((e=>Fo(e,t,n,r)));else{const r=_(e.handler)?e.handler.bind(n):t[e.handler];_(r)&&dr(o,r,e)}else 0}function No(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:s}}=e.appContext,l=i.get(t);let a;return l?a=l:o.length||n||r?(a={},o.length&&o.forEach((e=>Mo(a,e,s,!0))),Mo(a,t,s)):a=t,O(t)&&i.set(t,a),a}function Mo(e,t,n,r=!1){const{mixins:o,extends:i}=t;i&&Mo(e,i,n,!0),o&&o.forEach((t=>Mo(e,t,n,!0)));for(const o in t)if(r&&"expose"===o);else{const r=Do[o]||n&&n[o];e[o]=r?r(e[o],t[o]):t[o]}return e}const Do={data:Bo,props:Ho,emits:Ho,methods:Vo,computed:Vo,beforeCreate:$o,created:$o,beforeMount:$o,mounted:$o,beforeUpdate:$o,updated:$o,beforeDestroy:$o,beforeUnmount:$o,destroyed:$o,unmounted:$o,activated:$o,deactivated:$o,errorCaptured:$o,serverPrefetch:$o,components:Vo,directives:Vo,watch:function(e,t){if(!e)return t;if(!t)return e;const n=d(Object.create(null),e);for(const r in t)n[r]=$o(e[r],t[r]);return n},provide:Bo,inject:function(e,t){return Vo(Uo(e),Uo(t))}};function Bo(e,t){return t?e?function(){return d(_(e)?e.call(this,this):e,_(t)?t.call(this,this):t)}:t:e}function Uo(e){if(m(e)){const t={};for(let n=0;n(i.has(e)||(e&&_(e.install)?(i.add(e),e.install(l,...t)):_(e)&&(i.add(e),e(l,...t))),l),mixin:e=>(o.mixins.includes(e)||o.mixins.push(e),l),component:(e,t)=>t?(o.components[e]=t,l):o.components[e],directive:(e,t)=>t?(o.directives[e]=t,l):o.directives[e],mount(i,a,u){if(!s){0;const c=Qi(n,r);return c.appContext=o,a&&t?t(c,i):e(c,i,u),s=!0,l._container=i,i.__vue_app__=l,Ts(c.component)||c.component.proxy}},unmount(){s&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(o.provides[e]=t,l),runWithContext(e){Ko=l;try{return e()}finally{Ko=null}}};return l}}let Ko=null;function Go(e,t){if(ps){let n=ps.provides;const r=ps.parent&&ps.parent.provides;r===n&&(n=ps.provides=Object.create(r)),n[e]=t}else 0}function Yo(e,t,n=!1){const r=ps||Fn;if(r||Ko){const o=r?null==r.parent?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides:Ko._context.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&_(t)?t.call(r&&r.proxy):t}else 0}function Jo(){return!!(ps||Fn||Ko)}function Qo(e,t,n,r){const[o,i]=e.propsOptions;let l,a=!1;if(t)for(let s in t){if(j(s))continue;const u=t[s];let c;o&&g(o,c=F(s))?i&&i.includes(c)?(l||(l={}))[c]=u:n[c]=u:In(e.emitsOptions,s)||s in r&&u===r[s]||(r[s]=u,a=!0)}if(i){const t=It(n),r=l||s;for(let s=0;s{c=!0;const[n,r]=Xo(e,t,!0);d(a,n),r&&u.push(...r)};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}if(!i&&!c)return O(e)&&r.set(e,l),l;if(m(i))for(let e=0;e-1,r[1]=n<0||e-1||g(r,"default"))&&u.push(t)}}}}const f=[a,u];return O(e)&&r.set(e,f),f}function ei(e){return"$"!==e[0]}function ti(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:null===e?"null":""}function ni(e,t){return ti(e)===ti(t)}function ri(e,t){return m(t)?t.findIndex((t=>ni(t,e))):_(t)&&ni(t,e)?0:-1}const oi=e=>"_"===e[0]||"$stable"===e,ii=e=>m(e)?e.map(os):[os(e)],si=(e,t,n)=>{if(t._n)return t;const r=$n(((...e)=>ii(t(...e))),n);return r._c=!1,r},li=(e,t,n)=>{const r=e._ctx;for(const n in e){if(oi(n))continue;const o=e[n];if(_(o))t[n]=si(0,o,r);else if(null!=o){0;const e=ii(o);t[n]=()=>e}}},ai=(e,t)=>{const n=ii(t);e.slots.default=()=>n},ui=(e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=It(t),V(t,"_",n)):li(t,e.slots={})}else e.slots={},t&&ai(e,t);V(e.slots,Ki,1)},ci=(e,t,n)=>{const{vnode:r,slots:o}=e;let i=!0,l=s;if(32&r.shapeFlag){const e=t._;e?n&&1===e?i=!1:(d(o,t),n||1!==e||delete o._):(i=!t.$stable,li(t,o)),l=t}else t&&(ai(e,t),l={default:1});if(i)for(const e in o)oi(e)||null!=l[e]||delete o[e]};function fi(e,t,n,r,o=!1){if(m(e))return void e.forEach(((e,i)=>fi(e,t&&(m(t)?t[i]:t),n,r,o)));if(Ir(r)&&!o)return;const i=4&r.shapeFlag?Ts(r.component)||r.component.proxy:r.el,l=o?null:i,{i:a,r:u}=e;const c=t&&t.r,f=a.refs===s?a.refs={}:a.refs,p=a.setupState;if(null!=c&&c!==u&&(x(c)?(f[c]=null,g(p,c)&&(p[c]=null)):Ut(c)&&(c.value=null)),_(u))ln(u,a,12,[l,f]);else{const t=x(u),r=Ut(u);if(t||r){const s=()=>{if(e.f){const n=t?g(p,u)?p[u]:f[u]:u.value;o?m(n)&&h(n,i):m(n)?n.includes(i)||n.push(i):t?(f[u]=[i],g(p,u)&&(p[u]=f[u])):(u.value=[i],e.k&&(f[e.k]=u.value))}else t?(f[u]=l,g(p,u)&&(p[u]=l)):r&&(u.value=l,e.k&&(f[e.k]=l))};l?(s.id=-1,gi(s,n)):s()}else 0}}let pi=!1;const di=e=>/svg/.test(e.namespaceURI)&&"foreignObject"!==e.tagName,hi=e=>8===e.nodeType;function vi(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:i,parentNode:s,remove:l,insert:a,createComment:u}}=e,c=(n,r,l,u,f,b=!1)=>{const w=hi(n)&&"["===n.data,_=()=>v(n,r,l,u,f,w),{type:x,ref:S,shapeFlag:O,patchFlag:k}=r;let E=n.nodeType;r.el=n,-2===k&&(b=!1,r.dynamicChildren=null);let C=null;switch(x){case ji:3!==E?""===r.children?(a(r.el=o(""),s(n),n),C=n):C=_():(n.data!==r.children&&(pi=!0,n.data=r.children),C=i(n));break;case Ri:y(n)?(C=i(n),m(r.el=n.content.firstChild,n,l)):C=8!==E||w?_():i(n);break;case Li:if(w&&(E=(n=i(n)).nodeType),1===E||3===E){C=n;const e=!r.children.length;for(let t=0;t{s=s||!!t.dynamicChildren;const{type:a,props:u,patchFlag:c,shapeFlag:p,dirs:h,transition:v}=t,g="input"===a&&h||"option"===a;if(g||-1!==c){if(h&&br(t,null,n,"created"),u)if(g||!s||48&c)for(const t in u)(g&&t.endsWith("value")||f(t)&&!j(t))&&r(e,t,null,u[t],!1,void 0,n);else u.onClick&&r(e,"onClick",null,u.onClick,!1,void 0,n);let a;(a=u&&u.onVnodeBeforeMount)&&as(a,n,t);let b=!1;if(y(e)){b=_i(o,v)&&n&&n.vnode.props&&n.vnode.props.appear;const r=e.content.firstChild;b&&v.beforeEnter(r),m(r,e,n),t.el=e=r}if(h&&br(t,null,n,"beforeMount"),((a=u&&u.onVnodeMounted)||h||b)&&lr((()=>{a&&as(a,n,t),b&&v.enter(e),h&&br(t,null,n,"mounted")}),o),16&p&&(!u||!u.innerHTML&&!u.textContent)){let r=d(e.firstChild,t,e,n,o,i,s);for(;r;){pi=!0;const e=r;r=r.nextSibling,l(e)}}else 8&p&&e.textContent!==t.children&&(pi=!0,e.textContent=t.children)}return e.nextSibling},d=(e,t,r,o,i,s,l)=>{l=l||!!t.dynamicChildren;const a=t.children,u=a.length;for(let t=0;t{const{slotScopeIds:c}=t;c&&(o=o?o.concat(c):c);const f=s(e),p=d(i(e),t,f,n,r,o,l);return p&&hi(p)&&"]"===p.data?i(t.anchor=p):(pi=!0,a(t.anchor=u("]"),f,p),p)},v=(e,t,r,o,a,u)=>{if(pi=!0,t.el=null,u){const t=g(e);for(;;){const n=i(e);if(!n||n===t)break;l(n)}}const c=i(e),f=s(e);return l(e),n(null,t,f,c,r,o,di(f),a),c},g=(e,t="[",n="]")=>{let r=0;for(;e;)if((e=i(e))&&hi(e)&&(e.data===t&&r++,e.data===n)){if(0===r)return i(e);r--}return e},m=(e,t,n)=>{const r=t.parentNode;r&&r.replaceChild(e,t);let o=n;for(;o;)o.vnode.el===t&&(o.vnode.el=o.subTree.el=e),o=o.parent},y=e=>1===e.nodeType&&"template"===e.tagName.toLowerCase();return[(e,t)=>{if(!t.hasChildNodes())return n(null,e,t),On(),void(t._vnode=e);pi=!1,c(t.firstChild,e,null,null,null),On(),t._vnode=e},c]}const gi=lr;function mi(e){return bi(e)}function yi(e){return bi(e,vi)}function bi(e,t){W().__VUE__=!0;const{insert:n,remove:r,patchProp:o,createElement:i,createText:u,createComment:c,setText:f,setElementText:p,parentNode:d,nextSibling:h,setScopeId:v=a,insertStaticContent:m}=e,y=(e,t,n,r=null,o=null,i=null,s=!1,l=null,a=!!t.dynamicChildren)=>{if(e===t)return;e&&!qi(e,t)&&(r=J(e),z(e,o,i,!0),e=null),-2===t.patchFlag&&(a=!1,t.dynamicChildren=null);const{type:u,ref:c,shapeFlag:f}=t;switch(u){case ji:b(e,t,n,r);break;case Ri:w(e,t,n,r);break;case Li:null==e&&_(t,n,r,s);break;case Ai:A(e,t,n,r,o,i,s,l,a);break;default:1&f?S(e,t,n,r,o,i,s,l,a):6&f?R(e,t,n,r,o,i,s,l,a):(64&f||128&f)&&u.process(e,t,n,r,o,i,s,l,a,Z)}null!=c&&o&&fi(c,e&&e.ref,i,t||e,!t)},b=(e,t,r,o)=>{if(null==e)n(t.el=u(t.children),r,o);else{const n=t.el=e.el;t.children!==e.children&&f(n,t.children)}},w=(e,t,r,o)=>{null==e?n(t.el=c(t.children||""),r,o):t.el=e.el},_=(e,t,n,r)=>{[e.el,e.anchor]=m(e.children,t,n,r,e.el,e.anchor)},x=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=h(e),r(e),e=n;r(t)},S=(e,t,n,r,o,i,s,l,a)=>{s=s||"svg"===t.type,null==e?O(t,n,r,o,i,s,l,a):C(e,t,o,i,s,l,a)},O=(e,t,r,s,l,a,u,c)=>{let f,d;const{type:h,props:v,shapeFlag:g,transition:m,dirs:y}=e;if(f=e.el=i(e.type,a,v&&v.is,v),8&g?p(f,e.children):16&g&&E(e.children,f,null,s,l,a&&"foreignObject"!==h,u,c),y&&br(e,null,s,"created"),k(f,e,e.scopeId,u,s),v){for(const t in v)"value"===t||j(t)||o(f,t,null,v[t],a,e.children,s,l,Y);"value"in v&&o(f,"value",null,v.value),(d=v.onVnodeBeforeMount)&&as(d,s,e)}y&&br(e,null,s,"beforeMount");const b=_i(l,m);b&&m.beforeEnter(f),n(f,t,r),((d=v&&v.onVnodeMounted)||b||y)&&gi((()=>{d&&as(d,s,e),b&&m.enter(f),y&&br(e,null,s,"mounted")}),l)},k=(e,t,n,r,o)=>{if(n&&v(e,n),r)for(let t=0;t{for(let u=a;u{const u=t.el=e.el;let{patchFlag:c,dynamicChildren:f,dirs:d}=t;c|=16&e.patchFlag;const h=e.props||s,v=t.props||s;let g;n&&wi(n,!1),(g=v.onVnodeBeforeUpdate)&&as(g,n,t,e),d&&br(t,e,n,"beforeUpdate"),n&&wi(n,!0);const m=i&&"foreignObject"!==t.type;if(f?P(e.dynamicChildren,f,u,n,r,m,l):a||B(e,t,u,null,n,r,m,l,!1),c>0){if(16&c)T(u,t,h,v,n,r,i);else if(2&c&&h.class!==v.class&&o(u,"class",null,v.class,i),4&c&&o(u,"style",h.style,v.style,i),8&c){const s=t.dynamicProps;for(let t=0;t{g&&as(g,n,t,e),d&&br(t,e,n,"updated")}),r)},P=(e,t,n,r,o,i,s)=>{for(let l=0;l{if(n!==r){if(n!==s)for(const s in n)j(s)||s in r||o(e,s,n[s],null,a,t.children,i,l,Y);for(const s in r){if(j(s))continue;const u=r[s],c=n[s];u!==c&&"value"!==s&&o(e,s,c,u,a,t.children,i,l,Y)}"value"in r&&o(e,"value",n.value,r.value)}},A=(e,t,r,o,i,s,l,a,c)=>{const f=t.el=e?e.el:u(""),p=t.anchor=e?e.anchor:u("");let{patchFlag:d,dynamicChildren:h,slotScopeIds:v}=t;v&&(a=a?a.concat(v):v),null==e?(n(f,r,o),n(p,r,o),E(t.children,r,p,i,s,l,a,c)):d>0&&64&d&&h&&e.dynamicChildren?(P(e.dynamicChildren,h,r,i,s,l,a),(null!=t.key||i&&t===i.subTree)&&xi(e,t,!0)):B(e,t,r,p,i,s,l,a,c)},R=(e,t,n,r,o,i,s,l,a)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?o.ctx.activate(t,n,r,s,a):L(t,n,r,o,i,s,a):I(e,t,a)},L=(e,t,n,r,o,i,s)=>{const l=e.component=fs(e,r,o);if(Mr(e)&&(l.ctx.renderer=Z),Ss(l),l.asyncDep){if(o&&o.registerDep(l,N),!e.el){const e=l.subTree=Qi(Ri);w(null,e,t,n)}}else N(l,e,t,n,o,i,s)},I=(e,t,n)=>{const r=t.component=e.component;if(function(e,t,n){const{props:r,children:o,component:i}=e,{props:s,children:l,patchFlag:a}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&a>=0))return!(!o&&!l||l&&l.$stable)||r!==s&&(r?!s||Wn(r,s,u):!!s);if(1024&a)return!0;if(16&a)return r?Wn(r,s,u):!!s;if(8&a){const e=t.dynamicProps;for(let t=0;tdn&&pn.splice(t,1)}(r.update),r.update()}else t.el=e.el,r.vnode=t},N=(e,t,n,r,o,i,s)=>{const l=e.effect=new Pe((()=>{if(e.isMounted){let t,{next:n,bu:r,u:l,parent:a,vnode:u}=e,c=n;0,wi(e,!1),n?(n.el=u.el,D(e,n,s)):n=u,r&&$(r),(t=n.props&&n.props.onVnodeBeforeUpdate)&&as(t,a,n,u),wi(e,!0);const f=Vn(e);0;const p=e.subTree;e.subTree=f,y(p,f,d(p.el),J(p),e,o,i),n.el=f.el,null===c&&Kn(e,f.el),l&&gi(l,o),(t=n.props&&n.props.onVnodeUpdated)&&gi((()=>as(t,a,n,u)),o)}else{let s;const{el:l,props:a}=t,{bm:u,m:c,parent:f}=e,p=Ir(t);if(wi(e,!1),u&&$(u),!p&&(s=a&&a.onVnodeBeforeMount)&&as(s,f,t),wi(e,!0),l&&ee){const n=()=>{e.subTree=Vn(e),ee(l,e.subTree,e,o,null)};p?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{0;const s=e.subTree=Vn(e);0,y(null,s,n,r,e,o,i),t.el=s.el}if(c&&gi(c,o),!p&&(s=a&&a.onVnodeMounted)){const e=t;gi((()=>as(s,f,e)),o)}(256&t.shapeFlag||f&&Ir(f.vnode)&&256&f.vnode.shapeFlag)&&e.a&&gi(e.a,o),e.isMounted=!0,t=n=r=null}}),(()=>wn(a)),e.scope),a=e.update=()=>l.run();a.id=e.uid,wi(e,!0),a()},D=(e,t,n)=>{t.component=e;const r=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,r){const{props:o,attrs:i,vnode:{patchFlag:s}}=e,l=It(o),[a]=e.propsOptions;let u=!1;if(!(r||s>0)||16&s){let r;Qo(e,t,o,i)&&(u=!0);for(const i in l)t&&(g(t,i)||(r=M(i))!==i&&g(t,r))||(a?!n||void 0===n[i]&&void 0===n[r]||(o[i]=Zo(a,l,i,void 0,e,!0)):delete o[i]);if(i!==l)for(const e in i)t&&g(t,e)||(delete i[e],u=!0)}else if(8&s){const n=e.vnode.dynamicProps;for(let r=0;r{const u=e&&e.children,c=e?e.shapeFlag:0,f=t.children,{patchFlag:d,shapeFlag:h}=t;if(d>0){if(128&d)return void V(u,f,n,r,o,i,s,l,a);if(256&d)return void U(u,f,n,r,o,i,s,l,a)}8&h?(16&c&&Y(u,o,i),f!==u&&p(n,f)):16&c?16&h?V(u,f,n,r,o,i,s,l,a):Y(u,o,i,!0):(8&c&&p(n,""),16&h&&E(f,n,r,o,i,s,l,a))},U=(e,t,n,r,o,i,s,a,u)=>{t=t||l;const c=(e=e||l).length,f=t.length,p=Math.min(c,f);let d;for(d=0;df?Y(e,o,i,!0,!1,p):E(t,n,r,o,i,s,a,u,p)},V=(e,t,n,r,o,i,s,a,u)=>{let c=0;const f=t.length;let p=e.length-1,d=f-1;for(;c<=p&&c<=d;){const r=e[c],l=t[c]=u?is(t[c]):os(t[c]);if(!qi(r,l))break;y(r,l,n,null,o,i,s,a,u),c++}for(;c<=p&&c<=d;){const r=e[p],l=t[d]=u?is(t[d]):os(t[d]);if(!qi(r,l))break;y(r,l,n,null,o,i,s,a,u),p--,d--}if(c>p){if(c<=d){const e=d+1,l=ed)for(;c<=p;)z(e[c],o,i,!0),c++;else{const h=c,v=c,g=new Map;for(c=v;c<=d;c++){const e=t[c]=u?is(t[c]):os(t[c]);null!=e.key&&g.set(e.key,c)}let m,b=0;const w=d-v+1;let _=!1,x=0;const S=new Array(w);for(c=0;c=w){z(r,o,i,!0);continue}let l;if(null!=r.key)l=g.get(r.key);else for(m=v;m<=d;m++)if(0===S[m-v]&&qi(r,t[m])){l=m;break}void 0===l?z(r,o,i,!0):(S[l-v]=c+1,l>=x?x=l:_=!0,y(r,t[l],n,null,o,i,s,a,u),b++)}const O=_?function(e){const t=e.slice(),n=[0];let r,o,i,s,l;const a=e.length;for(r=0;r>1,e[n[l]] 0&&(t[r]=n[i-1]),n[i]=r)}}i=n.length,s=n[i-1];for(;i-- >0;)n[i]=s,s=t[s];return n}(S):l;for(m=O.length-1,c=w-1;c>=0;c--){const e=v+c,l=t[e],p=e+1{const{el:s,type:l,transition:a,children:u,shapeFlag:c}=e;if(6&c)return void H(e.component.subTree,t,r,o);if(128&c)return void e.suspense.move(t,r,o);if(64&c)return void l.move(e,t,r,Z);if(l===Ai){n(s,t,r);for(let e=0;e{let i;for(;e&&e!==t;)i=h(e),n(e,r,o),e=i;n(t,r,o)})(e,t,r);if(2!==o&&1&c&&a)if(0===o)a.beforeEnter(s),n(s,t,r),gi((()=>a.enter(s)),i);else{const{leave:e,delayLeave:o,afterLeave:i}=a,l=()=>n(s,t,r),u=()=>{e(s,(()=>{l(),i&&i()}))};o?o(s,l,u):u()}else n(s,t,r)},z=(e,t,n,r=!1,o=!1)=>{const{type:i,props:s,ref:l,children:a,dynamicChildren:u,shapeFlag:c,patchFlag:f,dirs:p}=e;if(null!=l&&fi(l,null,n,e,!0),256&c)return void t.ctx.deactivate(e);const d=1&c&&p,h=!Ir(e);let v;if(h&&(v=s&&s.onVnodeBeforeUnmount)&&as(v,t,e),6&c)G(e.component,n,r);else{if(128&c)return void e.suspense.unmount(n,r);d&&br(e,null,t,"beforeUnmount"),64&c?e.type.remove(e,t,n,o,Z,r):u&&(i!==Ai||f>0&&64&f)?Y(u,t,n,!1,!0):(i===Ai&&384&f||!o&&16&c)&&Y(a,t,n),r&&q(e)}(h&&(v=s&&s.onVnodeUnmounted)||d)&&gi((()=>{v&&as(v,t,e),d&&br(e,null,t,"unmounted")}),n)},q=e=>{const{type:t,el:n,anchor:o,transition:i}=e;if(t===Ai)return void K(n,o);if(t===Li)return void x(e);const s=()=>{r(n),i&&!i.persisted&&i.afterLeave&&i.afterLeave()};if(1&e.shapeFlag&&i&&!i.persisted){const{leave:t,delayLeave:r}=i,o=()=>t(n,s);r?r(e.el,s,o):o()}else s()},K=(e,t)=>{let n;for(;e!==t;)n=h(e),r(e),e=n;r(t)},G=(e,t,n)=>{const{bum:r,scope:o,update:i,subTree:s,um:l}=e;r&&$(r),o.stop(),i&&(i.active=!1,z(s,e,t,n)),l&&gi(l,t),gi((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},Y=(e,t,n,r=!1,o=!1,i=0)=>{for(let s=i;s6&e.shapeFlag?J(e.component.subTree):128&e.shapeFlag?e.suspense.next():h(e.anchor||e.el),Q=(e,t,n)=>{null==e?t._vnode&&z(t._vnode,null,null,!0):y(t._vnode||null,e,t,null,null,null,n),Sn(),On(),t._vnode=e},Z={p:y,um:z,m:H,r:q,mt:L,mc:E,pc:B,pbc:P,n:J,o:e};let X,ee;return t&&([X,ee]=t(Z)),{render:Q,hydrate:X,createApp:Wo(Q,X)}}function wi({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function _i(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function xi(e,t,n=!1){const r=e.children,o=t.children;if(m(r)&&m(o))for(let e=0;ee&&(e.disabled||""===e.disabled),Oi=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,ki=(e,t)=>{const n=e&&e.to;if(x(n)){if(t){const e=t(n);return e}return null}return n},Ei={__isTeleport:!0,process(e,t,n,r,o,i,s,l,a,u){const{mc:c,pc:f,pbc:p,o:{insert:d,querySelector:h,createText:v,createComment:g}}=u,m=Si(t.props);let{shapeFlag:y,children:b,dynamicChildren:w}=t;if(null==e){const e=t.el=v(""),u=t.anchor=v("");d(e,n,r),d(u,n,r);const f=t.target=ki(t.props,h),p=t.targetAnchor=v("");f&&(d(p,f),s=s||Oi(f));const g=(e,t)=>{16&y&&c(b,e,t,o,i,s,l,a)};m?g(n,u):f&&g(f,p)}else{t.el=e.el;const r=t.anchor=e.anchor,c=t.target=e.target,d=t.targetAnchor=e.targetAnchor,v=Si(e.props),g=v?n:c,y=v?r:d;if(s=s||Oi(c),w?(p(e.dynamicChildren,w,g,o,i,s,l),xi(e,t,!0)):a||f(e,t,g,y,o,i,s,l,!1),m)v?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Ci(t,n,r,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=ki(t.props,h);e&&Ci(t,e,null,u,0)}else v&&Ci(t,c,d,u,1)}Ti(t)},remove(e,t,n,r,{um:o,o:{remove:i}},s){const{shapeFlag:l,children:a,anchor:u,targetAnchor:c,target:f,props:p}=e;if(f&&i(c),s&&i(u),16&l){const e=s||!Si(p);for(let r=0;r0?Fi||l:null,Mi(),Bi>0&&Fi&&Fi.push(e),e}function Vi(e,t,n,r,o,i){return $i(Ji(e,t,n,r,o,i,!0))}function Hi(e,t,n,r,o){return $i(Qi(e,t,n,r,o,!0))}function zi(e){return!!e&&!0===e.__v_isVNode}function qi(e,t){return e.type===t.type&&e.key===t.key}function Wi(e){Di=e}const Ki="__vInternal",Gi=({key:e})=>null!=e?e:null,Yi=({ref:e,ref_key:t,ref_for:n})=>("number"==typeof e&&(e=""+e),null!=e?x(e)||Ut(e)||_(e)?{i:Fn,r:e,k:t,f:!!n}:e:null);function Ji(e,t=null,n=null,r=0,o=null,i=(e===Ai?0:1),s=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Gi(t),ref:t&&Yi(t),scopeId:Nn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Fn};return l?(ss(a,n),128&i&&e.normalize(a)):n&&(a.shapeFlag|=x(n)?8:16),Bi>0&&!s&&Fi&&(a.patchFlag>0||6&i)&&32!==a.patchFlag&&Fi.push(a),a}const Qi=Zi;function Zi(e,t=null,n=null,r=0,o=null,i=!1){if(e&&e!==Qn||(e=Ri),zi(e)){const r=es(e,t,!0);return n&&ss(r,n),Bi>0&&!i&&Fi&&(6&r.shapeFlag?Fi[Fi.indexOf(e)]=r:Fi.push(r)),r.patchFlag|=-2,r}if(js(e)&&(e=e.__vccOpts),t){t=Xi(t);let{class:e,style:n}=t;e&&!x(e)&&(t.class=ee(e)),O(n)&&(Lt(n)&&!m(n)&&(n=d({},n)),t.style=Y(n))}return Ji(e,t,n,r,o,x(e)?1:nr(e)?128:(e=>e.__isTeleport)(e)?64:O(e)?4:_(e)?2:0,i,!0)}function Xi(e){return e?Lt(e)||Ki in e?d({},e):e:null}function es(e,t,n=!1){const{props:r,ref:o,patchFlag:i,children:s}=e,l=t?ls(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Gi(l),ref:t&&t.ref?n&&o?m(o)?o.concat(Yi(t)):[o,Yi(t)]:Yi(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ai?-1===i?16:16|i:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&es(e.ssContent),ssFallback:e.ssFallback&&es(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function ts(e=" ",t=0){return Qi(ji,null,e,t)}function ns(e,t){const n=Qi(Li,null,e);return n.staticCount=t,n}function rs(e="",t=!1){return t?(Ni(),Hi(Ri,null,e)):Qi(Ri,null,e)}function os(e){return null==e||"boolean"==typeof e?Qi(Ri):m(e)?Qi(Ai,null,e.slice()):"object"==typeof e?is(e):Qi(ji,null,String(e))}function is(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:es(e)}function ss(e,t){let n=0;const{shapeFlag:r}=e;if(null==t)t=null;else if(m(t))n=16;else if("object"==typeof t){if(65&r){const n=t.default;return void(n&&(n._c&&(n._d=!1),ss(e,n()),n._c&&(n._d=!0)))}{n=32;const r=t._;r||Ki in t?3===r&&Fn&&(1===Fn.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=Fn}}else _(t)?(t={default:t,_ctx:Fn},n=32):(t=String(t),64&r?(n=16,t=[ts(t)]):n=8);e.children=t,e.shapeFlag|=n}function ls(...e){const t={};for(let n=0;nps||Fn;let hs,vs,gs="__VUE_INSTANCE_SETTERS__";(vs=W()[gs])||(vs=W()[gs]=[]),vs.push((e=>ps=e)),hs=e=>{vs.length>1?vs.forEach((t=>t(e))):vs[0](e)};const ms=e=>{hs(e),e.scope.on()},ys=()=>{ps&&ps.scope.off(),hs(null)};function bs(e){return 4&e.vnode.shapeFlag}let ws,_s,xs=!1;function Ss(e,t=!1){xs=t;const{props:n,children:r}=e.vnode,o=bs(e);!function(e,t,n,r=!1){const o={},i={};V(i,Ki,1),e.propsDefaults=Object.create(null),Qo(e,t,o,i);for(const t in e.propsOptions[0])t in o||(o[t]=void 0);n?e.props=r?o:Et(o):e.type.props?e.props=o:e.props=i,e.attrs=i}(e,n,o,t),ui(e,r);const i=o?function(e,t){const n=e.type;0;e.accessCache=Object.create(null),e.proxy=Ft(new Proxy(e.ctx,ho)),!1;const{setup:r}=n;if(r){const n=e.setupContext=r.length>1?Ps(e):null;ms(e),Ie();const o=ln(r,e,0,[e.props,n]);if(Fe(),ys(),k(o)){if(o.then(ys,ys),t)return o.then((n=>{Os(e,n,t)})).catch((t=>{un(t,e,0)}));e.asyncDep=o}else Os(e,o,t)}else Cs(e,t)}(e,t):void 0;return xs=!1,i}function Os(e,t,n){_(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:O(t)&&(e.setupState=Yt(t)),Cs(e,n)}function ks(e){ws=e,_s=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,vo))}}const Es=()=>!ws;function Cs(e,t,n){const r=e.type;if(!e.render){if(!t&&ws&&!r.render){const t=r.template||No(e).template;if(t){0;const{isCustomElement:n,compilerOptions:o}=e.appContext.config,{delimiters:i,compilerOptions:s}=r,l=d(d({isCustomElement:n,delimiters:i},o),s);r.render=ws(t,l)}}e.render=r.render||a,_s&&_s(e)}ms(e),Ie();try{Lo(e)}finally{Fe(),ys()}}function Ps(e){const t=t=>{e.exposed=t||{}};return{get attrs(){return function(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get:(t,n)=>(Ne(e,0,"$attrs"),t[n])}))}(e)},slots:e.slots,emit:e.emit,expose:t}}function Ts(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Yt(Ft(e.exposed)),{get:(t,n)=>n in t?t[n]:n in fo?fo[n](e):void 0,has:(e,t)=>t in e||t in fo}))}function As(e,t=!0){return _(e)?e.displayName||e.name:e.name||t&&e.__name}function js(e){return _(e)&&"__vccOpts"in e}const Rs=(e,t)=>function(e,t,n=!1){let r,o;const i=_(e);return i?(r=e,o=a):(r=e.get,o=e.set),new rn(r,o,i||!o,n)}(e,0,xs);function Ls(e,t,n){const r=arguments.length;return 2===r?O(t)&&!m(t)?zi(t)?Qi(e,null,[t]):Qi(e,t):Qi(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):3===r&&zi(n)&&(n=[n]),Qi(e,t,n))}const Is=Symbol.for("v-scx"),Fs=()=>{{const e=Yo(Is);return e}};function Ns(){return void 0}function Ms(e,t,n,r){const o=n[r];if(o&&Ds(o,e))return o;const i=t();return i.memo=e.slice(),n[r]=i}function Ds(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let e=0;e0&&Fi&&Fi.push(e),!0}const Bs="3.3.8",Us={createComponentInstance:fs,setupComponent:Ss,renderComponentRoot:Vn,setCurrentRenderingInstance:Mn,isVNode:zi,normalizeVNode:os},$s=null,Vs=null,Hs="undefined"!=typeof document?document:null,zs=Hs&&Hs.createElement("template"),qs={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?Hs.createElementNS("http://www.w3.org/2000/svg",e):Hs.createElement(e,n?{is:n}:void 0);return"select"===e&&r&&null!=r.multiple&&o.setAttribute("multiple",r.multiple),o},createText:e=>Hs.createTextNode(e),createComment:e=>Hs.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Hs.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,i){const s=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),o!==i&&(o=o.nextSibling););else{zs.innerHTML=r?`${e} `:e;const o=zs.content;if(r){const e=o.firstChild;for(;e.firstChild;)o.appendChild(e.firstChild);o.removeChild(e)}t.insertBefore(o,n)}return[s?s.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ws="transition",Ks="animation",Gs=Symbol("_vtc"),Ys=(e,{slots:t})=>Ls(Er,el(e),t);Ys.displayName="Transition";const Js={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Qs=Ys.props=d({},Or,Js),Zs=(e,t=[])=>{m(e)?e.forEach((e=>e(...t))):e&&e(...t)},Xs=e=>!!e&&(m(e)?e.some((e=>e.length>1)):e.length>1);function el(e){const t={};for(const n in e)n in Js||(t[n]=e[n]);if(!1===e.css)return t;const{name:n="v",type:r,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:s=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=i,appearActiveClass:u=s,appearToClass:c=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,v=function(e){if(null==e)return null;if(O(e))return[tl(e.enter),tl(e.leave)];{const t=tl(e);return[t,t]}}(o),g=v&&v[0],m=v&&v[1],{onBeforeEnter:y,onEnter:b,onEnterCancelled:w,onLeave:_,onLeaveCancelled:x,onBeforeAppear:S=y,onAppear:k=b,onAppearCancelled:E=w}=t,C=(e,t,n)=>{rl(e,t?c:l),rl(e,t?u:s),n&&n()},P=(e,t)=>{e._isLeaving=!1,rl(e,f),rl(e,h),rl(e,p),t&&t()},T=e=>(t,n)=>{const o=e?k:b,s=()=>C(t,e,n);Zs(o,[t,s]),ol((()=>{rl(t,e?a:i),nl(t,e?c:l),Xs(o)||sl(t,r,g,s)}))};return d(t,{onBeforeEnter(e){Zs(y,[e]),nl(e,i),nl(e,s)},onBeforeAppear(e){Zs(S,[e]),nl(e,a),nl(e,u)},onEnter:T(!1),onAppear:T(!0),onLeave(e,t){e._isLeaving=!0;const n=()=>P(e,t);nl(e,f),cl(),nl(e,p),ol((()=>{e._isLeaving&&(rl(e,f),nl(e,h),Xs(_)||sl(e,r,m,n))})),Zs(_,[e,n])},onEnterCancelled(e){C(e,!1),Zs(w,[e])},onAppearCancelled(e){C(e,!0),Zs(E,[e])},onLeaveCancelled(e){P(e),Zs(x,[e])}})}function tl(e){return z(e)}function nl(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e[Gs]||(e[Gs]=new Set)).add(t)}function rl(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const n=e[Gs];n&&(n.delete(t),n.size||(e[Gs]=void 0))}function ol(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let il=0;function sl(e,t,n,r){const o=e._endId=++il,i=()=>{o===e._endId&&r()};if(n)return setTimeout(i,n);const{type:s,timeout:l,propCount:a}=ll(e,t);if(!s)return r();const u=s+"end";let c=0;const f=()=>{e.removeEventListener(u,p),i()},p=t=>{t.target===e&&++c>=a&&f()};setTimeout((()=>{c(n[e]||"").split(", "),o=r(`${Ws}Delay`),i=r(`${Ws}Duration`),s=al(o,i),l=r(`${Ks}Delay`),a=r(`${Ks}Duration`),u=al(l,a);let c=null,f=0,p=0;t===Ws?s>0&&(c=Ws,f=s,p=i.length):t===Ks?u>0&&(c=Ks,f=u,p=a.length):(f=Math.max(s,u),c=f>0?s>u?Ws:Ks:null,p=c?c===Ws?i.length:a.length:0);return{type:c,timeout:f,propCount:p,hasTransform:c===Ws&&/\b(transform|all)(,|$)/.test(r(`${Ws}Property`).toString())}}function al(e,t){for(;e.lengthul(t)+ul(e[n]))))}function ul(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function cl(){return document.body.offsetHeight}const fl=Symbol("_vod"),pl={beforeMount(e,{value:t},{transition:n}){e[fl]="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):dl(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),dl(e,!0),r.enter(e)):r.leave(e,(()=>{dl(e,!1)})):dl(e,t))},beforeUnmount(e,{value:t}){dl(e,t)}};function dl(e,t){e.style.display=t?e[fl]:"none"}const hl=/\s*!important$/;function vl(e,t,n){if(m(n))n.forEach((n=>vl(e,t,n)));else if(null==n&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=function(e,t){const n=ml[t];if(n)return n;let r=F(t);if("filter"!==r&&r in e)return ml[t]=r;r=D(r);for(let n=0;n{if(e._vts){if(e._vts<=n.attached)return}else e._vts=Date.now();an(function(e,t){if(m(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=kl(),n}(r,o);bl(e,n,s,l)}else s&&(!function(e,t,n,r){e.removeEventListener(t,n,r)}(e,n,s,l),i[t]=void 0)}}const xl=/(?:Once|Passive|Capture)$/;let Sl=0;const Ol=Promise.resolve(),kl=()=>Sl||(Ol.then((()=>Sl=0)),Sl=Date.now());const El=/^on[a-z]/;function Cl(e,t){const n=Lr(e);class r extends Al{constructor(e){super(n,e,t)}}return r.def=n,r}const Pl=e=>Cl(e,ga),Tl="undefined"!=typeof HTMLElement?HTMLElement:class{};class Al extends Tl{constructor(e,t={},n){super(),this._def=e,this._props=t,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this._ob=null,this.shadowRoot&&n?n(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,this._ob&&(this._ob.disconnect(),this._ob=null),bn((()=>{this._connected||(va(null,this.shadowRoot),this._instance=null)}))}_resolveDef(){this._resolved=!0;for(let e=0;e{for(const t of e)this._setAttr(t.attributeName)})),this._ob.observe(this,{attributes:!0});const e=(e,t=!1)=>{const{props:n,styles:r}=e;let o;if(n&&!m(n))for(const e in n){const t=n[e];(t===Number||t&&t.type===Number)&&(e in this._props&&(this._props[e]=z(this._props[e])),(o||(o=Object.create(null)))[F(e)]=!0)}this._numberProps=o,t&&this._resolveProps(e),this._applyStyles(r),this._update()},t=this._def.__asyncLoader;t?t().then((t=>e(t,!0))):e(this._def)}_resolveProps(e){const{props:t}=e,n=m(t)?t:Object.keys(t||{});for(const e of Object.keys(this))"_"!==e[0]&&n.includes(e)&&this._setProp(e,this[e],!0,!1);for(const e of n.map(F))Object.defineProperty(this,e,{get(){return this._getProp(e)},set(t){this._setProp(e,t)}})}_setAttr(e){let t=this.getAttribute(e);const n=F(e);this._numberProps&&this._numberProps[n]&&(t=z(t)),this._setProp(n,t,!1)}_getProp(e){return this._props[e]}_setProp(e,t,n=!0,r=!0){t!==this._props[e]&&(this._props[e]=t,r&&this._instance&&this._update(),n&&(!0===t?this.setAttribute(M(e),""):"string"==typeof t||"number"==typeof t?this.setAttribute(M(e),t+""):t||this.removeAttribute(M(e))))}_update(){va(this._createVNode(),this.shadowRoot)}_createVNode(){const e=Qi(this._def,d({},this._props));return this._instance||(e.ce=e=>{this._instance=e,e.isCE=!0;const t=(e,t)=>{this.dispatchEvent(new CustomEvent(e,{detail:t}))};e.emit=(e,...n)=>{t(e,n),M(e)!==e&&t(M(e),n)};let n=this;for(;n=n&&(n.parentNode||n.host);)if(n instanceof Al){e.parent=n._instance,e.provides=n._instance.provides;break}}),e}_applyStyles(e){e&&e.forEach((e=>{const t=document.createElement("style");t.textContent=e,this.shadowRoot.appendChild(t)}))}}function jl(e="$style"){{const t=ds();if(!t)return s;const n=t.type.__cssModules;if(!n)return s;const r=n[e];return r||s}}function Rl(e){const t=ds();if(!t)return;const n=t.ut=(n=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach((e=>Il(e,n)))},r=()=>{const r=e(t.proxy);Ll(t.subTree,r),n(r)};cr(r),Jr((()=>{const e=new MutationObserver(r);e.observe(t.subTree.el.parentNode,{childList:!0}),eo((()=>e.disconnect()))}))}function Ll(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{Ll(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el)Il(e.el,t);else if(e.type===Ai)e.children.forEach((e=>Ll(e,t)));else if(e.type===Li){let{el:n,anchor:r}=e;for(;n&&(Il(n,t),n!==r);)n=n.nextSibling}}function Il(e,t){if(1===e.nodeType){const n=e.style;for(const e in t)n.setProperty(`--${e}`,t[e])}}const Fl=new WeakMap,Nl=new WeakMap,Ml=Symbol("_moveCb"),Dl=Symbol("_enterCb"),Bl={name:"TransitionGroup",props:d({},Qs,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=ds(),r=xr();let o,i;return Zr((()=>{if(!o.length)return;const t=e.moveClass||`${e.name||"v"}-move`;if(!function(e,t,n){const r=e.cloneNode(),o=e[Gs];o&&o.forEach((e=>{e.split(/\s+/).forEach((e=>e&&r.classList.remove(e)))}));n.split(/\s+/).forEach((e=>e&&r.classList.add(e))),r.style.display="none";const i=1===t.nodeType?t:t.parentNode;i.appendChild(r);const{hasTransform:s}=ll(r);return i.removeChild(r),s}(o[0].el,n.vnode.el,t))return;o.forEach($l),o.forEach(Vl);const r=o.filter(Hl);cl(),r.forEach((e=>{const n=e.el,r=n.style;nl(n,t),r.transform=r.webkitTransform=r.transitionDuration="";const o=n[Ml]=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener("transitionend",o),n[Ml]=null,rl(n,t))};n.addEventListener("transitionend",o)}))})),()=>{const s=It(e),l=el(s);let a=s.tag||Ai;o=i,i=t.default?Rr(t.default()):[];for(let e=0;e{const t=e.props["onUpdate:modelValue"]||!1;return m(t)?e=>$(t,e):t};function ql(e){e.target.composing=!0}function Wl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Kl=Symbol("_assign"),Gl={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e[Kl]=zl(o);const i=r||o.props&&"number"===o.props.type;bl(e,t?"change":"input",(t=>{if(t.target.composing)return;let r=e.value;n&&(r=r.trim()),i&&(r=H(r)),e[Kl](r)})),n&&bl(e,"change",(()=>{e.value=e.value.trim()})),t||(bl(e,"compositionstart",ql),bl(e,"compositionend",Wl),bl(e,"change",Wl))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:r,number:o}},i){if(e[Kl]=zl(i),e.composing)return;if(document.activeElement===e&&"range"!==e.type){if(n)return;if(r&&e.value.trim()===t)return;if((o||"number"===e.type)&&H(e.value)===t)return}const s=null==t?"":t;e.value!==s&&(e.value=s)}},Yl={deep:!0,created(e,t,n){e[Kl]=zl(n),bl(e,"change",(()=>{const t=e._modelValue,n=ea(e),r=e.checked,o=e[Kl];if(m(t)){const e=ue(t,n),i=-1!==e;if(r&&!i)o(t.concat(n));else if(!r&&i){const n=[...t];n.splice(e,1),o(n)}}else if(b(t)){const e=new Set(t);r?e.add(n):e.delete(n),o(e)}else o(ta(e,r))}))},mounted:Jl,beforeUpdate(e,t,n){e[Kl]=zl(n),Jl(e,t,n)}};function Jl(e,{value:t,oldValue:n},r){e._modelValue=t,m(t)?e.checked=ue(t,r.props.value)>-1:b(t)?e.checked=t.has(r.props.value):t!==n&&(e.checked=ae(t,ta(e,!0)))}const Ql={created(e,{value:t},n){e.checked=ae(t,n.props.value),e[Kl]=zl(n),bl(e,"change",(()=>{e[Kl](ea(e))}))},beforeUpdate(e,{value:t,oldValue:n},r){e[Kl]=zl(r),t!==n&&(e.checked=ae(t,r.props.value))}},Zl={deep:!0,created(e,{value:t,modifiers:{number:n}},r){const o=b(t);bl(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?H(ea(e)):ea(e)));e[Kl](e.multiple?o?new Set(t):t:t[0])})),e[Kl]=zl(r)},mounted(e,{value:t}){Xl(e,t)},beforeUpdate(e,t,n){e[Kl]=zl(n)},updated(e,{value:t}){Xl(e,t)}};function Xl(e,t){const n=e.multiple;if(!n||m(t)||b(t)){for(let r=0,o=e.options.length;r-1:o.selected=t.has(i);else if(ae(ea(o),t))return void(e.selectedIndex!==r&&(e.selectedIndex=r))}n||-1===e.selectedIndex||(e.selectedIndex=-1)}}function ea(e){return"_value"in e?e._value:e.value}function ta(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const na={created(e,t,n){oa(e,t,n,null,"created")},mounted(e,t,n){oa(e,t,n,null,"mounted")},beforeUpdate(e,t,n,r){oa(e,t,n,r,"beforeUpdate")},updated(e,t,n,r){oa(e,t,n,r,"updated")}};function ra(e,t){switch(e){case"SELECT":return Zl;case"TEXTAREA":return Gl;default:switch(t){case"checkbox":return Yl;case"radio":return Ql;default:return Gl}}}function oa(e,t,n,r,o){const i=ra(e.tagName,n.props&&n.props.type)[o];i&&i(e,t,n,r)}const ia=["ctrl","shift","alt","meta"],sa={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>ia.some((n=>e[`${n}Key`]&&!t.includes(n)))},la=(e,t)=>(n,...r)=>{for(let e=0;en=>{if(!("key"in n))return;const r=M(n.key);return t.some((e=>e===r||aa[e]===r))?e(n):void 0},ca=d({patchProp:(e,t,n,r,o=!1,i,s,l,a)=>{"class"===t?function(e,t,n){const r=e[Gs];r&&(t=(t?[t,...r]:[...r]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}(e,r,o):"style"===t?function(e,t,n){const r=e.style,o=x(n);if(n&&!o){if(t&&!x(t))for(const e in t)null==n[e]&&vl(r,e,"");for(const e in n)vl(r,e,n[e])}else{const i=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),fl in e&&(r.display=i)}}(e,n,r):f(t)?p(t)||_l(e,t,0,r,s):("."===t[0]?(t=t.slice(1),1):"^"===t[0]?(t=t.slice(1),0):function(e,t,n,r){if(r)return"innerHTML"===t||"textContent"===t||!!(t in e&&El.test(t)&&_(n));if("spellcheck"===t||"draggable"===t||"translate"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if(El.test(t)&&x(n))return!1;return t in e}(e,t,r,o))?function(e,t,n,r,o,i,s){if("innerHTML"===t||"textContent"===t)return r&&s(r,o,i),void(e[t]=null==n?"":n);const l=e.tagName;if("value"===t&&"PROGRESS"!==l&&!l.includes("-")){e._value=n;const r=null==n?"":n;return("OPTION"===l?e.getAttribute("value"):e.value)!==r&&(e.value=r),void(null==n&&e.removeAttribute(t))}let a=!1;if(""===n||null==n){const r=typeof e[t];"boolean"===r?n=le(n):null==n&&"string"===r?(n="",a=!0):"number"===r&&(n=0,a=!0)}try{e[t]=n}catch(e){}a&&e.removeAttribute(t)}(e,t,r,i,s,l,a):("true-value"===t?e._trueValue=r:"false-value"===t&&(e._falseValue=r),function(e,t,n,r,o){if(r&&t.startsWith("xlink:"))null==n?e.removeAttributeNS(yl,t.slice(6,t.length)):e.setAttributeNS(yl,t,n);else{const r=se(t);null==n||r&&!le(n)?e.removeAttribute(t):e.setAttribute(t,r?"":n)}}(e,t,r,o))}},qs);let fa,pa=!1;function da(){return fa||(fa=mi(ca))}function ha(){return fa=pa?fa:yi(ca),pa=!0,fa}const va=(...e)=>{da().render(...e)},ga=(...e)=>{ha().hydrate(...e)},ma=(...e)=>{const t=da().createApp(...e);const{mount:n}=t;return t.mount=e=>{const r=ba(e);if(!r)return;const o=t._component;_(o)||o.render||o.template||(o.template=r.innerHTML),r.innerHTML="";const i=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t},ya=(...e)=>{const t=ha().createApp(...e);const{mount:n}=t;return t.mount=e=>{const t=ba(e);if(t)return n(t,!0,t instanceof SVGElement)},t};function ba(e){if(x(e)){return document.querySelector(e)}return e}let wa=!1;const _a=()=>{wa||(wa=!0,Gl.getSSRProps=({value:e})=>({value:e}),Ql.getSSRProps=({value:e},t)=>{if(t.props&&ae(t.props.value,e))return{checked:!0}},Yl.getSSRProps=({value:e},t)=>{if(m(e)){if(t.props&&ue(e,t.props.value)>-1)return{checked:!0}}else if(b(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},na.getSSRProps=(e,t)=>{if("string"!=typeof t.type)return;const n=ra(t.type.toUpperCase(),t.props&&t.props.type);return n.getSSRProps?n.getSSRProps(e,t):void 0},pl.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}})};function xa(e){throw e}function Sa(e){}function Oa(e,t,n,r){const o=new SyntaxError(String(e));return o.code=e,o.loc=t,o}const ka=Symbol(""),Ea=Symbol(""),Ca=Symbol(""),Pa=Symbol(""),Ta=Symbol(""),Aa=Symbol(""),ja=Symbol(""),Ra=Symbol(""),La=Symbol(""),Ia=Symbol(""),Fa=Symbol(""),Na=Symbol(""),Ma=Symbol(""),Da=Symbol(""),Ba=Symbol(""),Ua=Symbol(""),$a=Symbol(""),Va=Symbol(""),Ha=Symbol(""),za=Symbol(""),qa=Symbol(""),Wa=Symbol(""),Ka=Symbol(""),Ga=Symbol(""),Ya=Symbol(""),Ja=Symbol(""),Qa=Symbol(""),Za=Symbol(""),Xa=Symbol(""),eu=Symbol(""),tu=Symbol(""),nu=Symbol(""),ru=Symbol(""),ou=Symbol(""),iu=Symbol(""),su=Symbol(""),lu=Symbol(""),au=Symbol(""),uu=Symbol(""),cu={[ka]:"Fragment",[Ea]:"Teleport",[Ca]:"Suspense",[Pa]:"KeepAlive",[Ta]:"BaseTransition",[Aa]:"openBlock",[ja]:"createBlock",[Ra]:"createElementBlock",[La]:"createVNode",[Ia]:"createElementVNode",[Fa]:"createCommentVNode",[Na]:"createTextVNode",[Ma]:"createStaticVNode",[Da]:"resolveComponent",[Ba]:"resolveDynamicComponent",[Ua]:"resolveDirective",[$a]:"resolveFilter",[Va]:"withDirectives",[Ha]:"renderList",[za]:"renderSlot",[qa]:"createSlots",[Wa]:"toDisplayString",[Ka]:"mergeProps",[Ga]:"normalizeClass",[Ya]:"normalizeStyle",[Ja]:"normalizeProps",[Qa]:"guardReactiveProps",[Za]:"toHandlers",[Xa]:"camelize",[eu]:"capitalize",[tu]:"toHandlerKey",[nu]:"setBlockTracking",[ru]:"pushScopeId",[ou]:"popScopeId",[iu]:"withCtx",[su]:"unref",[lu]:"isRef",[au]:"withMemo",[uu]:"isMemoSame"};const fu={source:"",start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function pu(e,t,n,r,o,i,s,l=!1,a=!1,u=!1,c=fu){return e&&(l?(e.helper(Aa),e.helper(xu(e.inSSR,u))):e.helper(_u(e.inSSR,u)),s&&e.helper(Va)),{type:13,tag:t,props:n,children:r,patchFlag:o,dynamicProps:i,directives:s,isBlock:l,disableTracking:a,isComponent:u,loc:c}}function du(e,t=fu){return{type:17,loc:t,elements:e}}function hu(e,t=fu){return{type:15,loc:t,properties:e}}function vu(e,t){return{type:16,loc:fu,key:x(e)?gu(e,!0):e,value:t}}function gu(e,t=!1,n=fu,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function mu(e,t=fu){return{type:8,loc:t,children:e}}function yu(e,t=[],n=fu){return{type:14,loc:n,callee:e,arguments:t}}function bu(e,t=void 0,n=!1,r=!1,o=fu){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:o}}function wu(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:fu}}function _u(e,t){return e||t?La:Ia}function xu(e,t){return e||t?ja:Ra}function Su(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(_u(r,e.isComponent)),t(Aa),t(xu(r,e.isComponent)))}const Ou=e=>4===e.type&&e.isStatic,ku=(e,t)=>e===t||e===M(t);function Eu(e){return ku(e,"Teleport")?Ea:ku(e,"Suspense")?Ca:ku(e,"KeepAlive")?Pa:ku(e,"BaseTransition")?Ta:void 0}const Cu=/^\d|[^\$\w]/,Pu=e=>!Cu.test(e),Tu=/[A-Za-z_$\xA0-\uFFFF]/,Au=/[\.\?\w$\xA0-\uFFFF]/,ju=/\s+[.[]\s*|\s*[.[]\s+/g,Ru=e=>{e=e.trim().replace(ju,(e=>e.trim()));let t=0,n=[],r=0,o=0,i=null;for(let s=0;s4===e.key.type&&e.key.content===r))}return n}function Ku(e,t){return`_${t}_${e.replace(/[^\w]/g,((t,n)=>"-"===t?"_":e.charCodeAt(n).toString()))}`}function Gu(e,t){const n=t.options?t.options.compatConfig:t.compatConfig,r=n&&n[e];return"MODE"===e?r||3:r}function Yu(e,t){const n=Gu("MODE",t),r=Gu(e,t);return 3===n?!0===r:!1!==r}function Ju(e,t,n,...r){return Yu(e,t)}const Qu=/&(gt|lt|amp|apos|quot);/g,Zu={gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},Xu={delimiters:["{{","}}"],getNamespace:()=>0,getTextMode:()=>0,isVoidTag:u,isPreTag:u,isCustomElement:u,decodeEntities:e=>e.replace(Qu,((e,t)=>Zu[t])),onError:xa,onWarn:Sa,comments:!1};function ec(e,t={}){const n=function(e,t){const n=d({},Xu);let r;for(r in t)n[r]=void 0===t[r]?Xu[r]:t[r];return{options:n,column:1,line:1,offset:0,originalSource:e,source:e,inPre:!1,inVPre:!1,onWarn:n.onWarn}}(e,t),r=hc(n);return function(e,t=fu){return{type:0,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:t}}(tc(n,0,[]),vc(n,r))}function tc(e,t,n){const r=gc(n),o=r?r.ns:0,i=[];for(;!xc(e,t,n);){const s=e.source;let l;if(0===t||1===t)if(!e.inVPre&&mc(s,e.options.delimiters[0]))l=fc(e,t);else if(0===t&&"<"===s[0])if(1===s.length)_c(e,5,1);else if("!"===s[1])mc(s,"\x3c!--")?l=oc(e):mc(s,""===s[2]){_c(e,14,2),yc(e,3);continue}if(/[a-z]/i.test(s[2])){_c(e,23),ac(e,1,r);continue}_c(e,12,2),l=ic(e)}else/[a-z]/i.test(s[1])?(l=sc(e,n),Yu("COMPILER_NATIVE_TEMPLATE",e)&&l&&"template"===l.tag&&!l.props.some((e=>7===e.type&&lc(e.name)))&&(l=l.children)):"?"===s[1]?(_c(e,21,1),l=ic(e)):_c(e,12,1);if(l||(l=pc(e,t)),m(l))for(let e=0;e/.exec(e.source);if(r){r.index<=3&&_c(e,0),r[1]&&_c(e,10),n=e.source.slice(4,r.index);const t=e.source.slice(0,r.index);let o=1,i=0;for(;-1!==(i=t.indexOf("\x3c!--",o));)yc(e,i-o+1),i+4